Salome HOME
Tuple
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursTuple.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Modules Python
21 import string,types,os
22
23 # Modules Eficas
24 from PyQt4.QtGui import *
25 from PyQt4.QtCore import *
26 from Extensions.i18n import tr
27
28 from feuille               import Feuille
29 from politiquesValidation  import PolitiquePlusieurs
30 from qtSaisie              import SaisieValeur
31 from gereListe             import GereListe
32 from gereListe             import LECustom
33 from Tuple2                import Ui_Tuple2
34 from Tuple3                import Ui_Tuple3
35
36
37 #class TupleCustom(QWidget,Ui_Tuple2):
38 class TupleCustom :
39   def __init__(self,tailleTuple,parent,parentQt,index):
40       QWidget.__init__(self,parent)
41       self.setupUi(self)
42       self.tailleTuple=tailleTuple
43       self.parent=parent
44       self.parentQt=parentQt
45       self.valeur=None
46       self.index=index
47
48       for i in range(self.tailleTuple):
49          nomLE="lineEditVal_"+str(i+1)
50          courant=getattr(self,nomLE)
51          courant.num=index
52          courant.dansUnTuple=True
53          self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
54
55
56   def valueChange(self):
57       listeVal=[]
58       for i in range(self.tailleTuple):
59          nomLE="lineEditVal_"+str(i+1)
60          courant=getattr(self,nomLE)
61          val=str(courant.text())
62          if str(val)=="" or val==None : 
63             courant.setFocus()
64             return
65          try :
66              valeur=eval(val,{})
67          except :
68              valeur=val
69          listeVal.append(valeur)
70       self.valeur=listeVal
71       self.parentQt.changeValeur()
72
73
74   def setValeur(self,value):
75       listeVal=[]
76       valeurNulle=True
77       for i in range(self.tailleTuple):
78          nomLE="lineEditVal_"+str(i+1)
79          courant=getattr(self,nomLE)
80          try :
81            if str(value[i]) != "" : valeurNulle=False
82          except :
83            pass
84          try:
85            courant.setText(str(value[i]))
86            val=str(courant.text())
87            try :
88              valeur=eval(val,{})
89            except :
90              valeur=val
91            listeVal.append(valeur)
92          except :
93            pass
94       if  valeurNulle == True : self.valeur=None
95       else                    : self.valeur=listeVal
96
97   def getValeur(self):
98       listeVal=[]
99       for i in range(self.tailleTuple):
100          nomLE="lineEditVal_"+str(i+1)
101          courant=getattr(self,nomLE)
102          val=str(courant.text())
103          listeVal.append(val)
104       return listeVal
105
106   def clean(self):
107       self.valeur=None
108       for i in range(self.tailleTuple):
109          nomLE="lineEditVal_"+str(i+1)
110          courant=getattr(self,nomLE)
111          courant.setText("")
112
113 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
114   def __init__(self,tailleTuple,parent,parentQt,index):
115       TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
116
117 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
118   def __init__(self,tailleTuple,parent,parentQt,index):
119       TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
120       
121 # ---------------------------- #
122
123
124 class MonWidgetPlusieursTuple(Feuille,GereListe):
125
126   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
127         self.indexDernierLabel=0
128         self.NumLineEditEnCours=0
129         self.nomLine="TupleVal"
130         self.listeAffichageWidget=[]
131         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
132         GereListe.__init__(self)
133         self.politique=PolitiquePlusieurs(self.node,self.editor)
134         self.parentQt.commandesLayout.insertWidget(-1,self)
135
136   def ajoutLineEdit(self,valeur=None,inInit=False):
137       self.indexDernierLabel=self.indexDernierLabel+1
138       nomLineEdit=self.nomLine+str(self.indexDernierLabel)
139       if hasattr(self,nomLineEdit) :
140          self.indexDernierLabel=self.indexDernierLabel-1
141          return
142
143       if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
144       else                   : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
145                  
146       self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
147       setattr(self,nomLineEdit,nouveauLE)
148       if valeur != None : nouveauLE.setValeur(valeur)
149
150       self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
151       self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
152       if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
153       self.etablitOrdre()
154
155       # deux lignes pour que le ensureVisible fonctionne
156       self.estVisible=nouveauLE.lineEditVal_1
157       if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
158
159   def etablitOrdre(self):
160       i=0
161       while(i +1 < len(self.listeAffichageWidget)):
162          self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
163          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
164          i=i+1
165
166
167   def setValeurs(self):
168        valeurs=self.node.item.get_valeur()
169        min,max=self.node.item.GetMinMax()
170        if max == "**" or max > 5 : aCreer=5
171        else : aCreer=max 
172
173        if valeurs == () or valeurs == None :
174           for i in range(aCreer): self.ajoutLineEdit(inInit=True)
175           return
176
177        for v in valeurs:
178            self.ajoutLineEdit(v,inInit=True)
179
180        for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
181
182   def rendVisibleLigne(self):
183       qApp.processEvents()
184       self.estVisible.setFocus(True)
185       self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
186
187    
188   def changeValeur(self,changeDePlace=False,oblige=True):
189       #Pour compatibilite signature
190       aLeFocus=self.focusWidget()
191       listeComplete=[]
192
193       libre=False
194       for i in range(self.indexDernierLabel) :
195           nom=self.nomLine+str(i+1)
196           courant=getattr(self,nom)
197           valeurTuple=courant.valeur
198           if valeurTuple == None or valeurTuple== "": 
199              libre=True
200              continue
201           validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
202           if not validite:
203              if comm2 != '' : comm += " " + comm2
204              self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
205              return
206           listeComplete.append(tuple(courant.valeur))
207       if listeComplete == [] : listeComplete=None
208       self.node.item.set_valeur(listeComplete)
209
210       if changeDePlace : return
211       min,max=self.node.item.GetMinMax()
212       if self.indexDernierLabel == max  : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
213       if self.indexDernierLabel < max and libre==False :
214           self.ajoutLineEdit()
215           self.listeAffichageWidget[-2].setFocus(True)
216       else :
217          try :
218            qApp.processEvents()
219            w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
220            w.setFocus(True)
221            self.scrollArea.ensureWidgetVisible(w,0,0)
222          except :
223            pass
224