]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monWidgetPlusieursTuple.py
Salome HOME
bug 53033
[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,sys
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 :
38   def __init__(self,tailleTuple,parent,parentQt,index):
39       QWidget.__init__(self,parent)
40       self.setupUi(self)
41       self.tailleTuple=tailleTuple
42       self.parent=parent
43       self.parentQt=parentQt
44       self.valeur=None
45       self.index=index
46
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     
59       for i in range(self.tailleTuple):
60          nomLE="lineEditVal_"+str(i+1)
61          courant=getattr(self,nomLE)
62          val=str(courant.text())
63          if str(val)=="" or val==None : 
64             courant.setFocus()
65             return
66          try :
67              valeur=eval(val,{})
68          except :
69            try :
70              d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
71              valeur=eval(val,d)
72            except :
73              valeur=val
74          listeVal.append(valeur)
75       self.valeur=listeVal
76       self.parentQt.changeValeur()
77
78
79   def setValeur(self,value):
80       listeVal=[]
81       valeurNulle=True
82       for i in range(self.tailleTuple):
83          nomLE="lineEditVal_"+str(i+1)
84          courant=getattr(self,nomLE)
85          try :
86            if str(value[i]) != "" : valeurNulle=False
87          except :
88            pass
89
90          try :
91            courant.setText(str(value[i]))
92          except :
93            courant.setText("")
94          val=str(courant.text())
95          try :
96            valeur=eval(val,{})
97          except :
98            try :
99              d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
100              valeur=eval(val,d)
101            except :
102              valeur=val
103          listeVal.append(valeur)
104       if  valeurNulle == True : self.valeur=None
105       else                    : self.valeur=listeVal
106
107   def getValeur(self):
108       return self.valeur
109
110   def text(self):
111       return self.valeur
112
113   def setText(self,value):
114       self.setValeur(value)
115
116   def clean(self):
117       self.valeur=None
118       for i in range(self.tailleTuple):
119          nomLE="lineEditVal_"+str(i+1)
120          courant=getattr(self,nomLE)
121          courant.setText("")
122
123   def finCommentaire(self):
124         return self.finCommentaireListe()
125
126
127 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
128   def __init__(self,tailleTuple,parent,parentQt,index):
129       TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
130
131 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
132   def __init__(self,tailleTuple,parent,parentQt,index):
133       TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
134       
135 # ---------------------------- #
136
137
138 class MonWidgetPlusieursTuple(Feuille,GereListe):
139
140   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
141         self.indexDernierLabel=0
142         self.nomLine="TupleVal"
143         self.listeAffichageWidget=[]
144         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
145         GereListe.__init__(self)
146         self.finCommentaireListe()
147         self.politique=PolitiquePlusieurs(self.node,self.editor)
148         self.parentQt.commandesLayout.insertWidget(-1,self)
149         if sys.platform[0:5]!="linux":
150           repIcon=self.node.editor.appliEficas.repIcon
151           fichier=os.path.join(repIcon, 'arrow_up.png')
152           icon = QIcon(fichier)
153           self.RBHaut.setIcon(icon)
154           self.RBHaut.setIconSize(QSize(32, 32))
155           fichier2=os.path.join(repIcon, 'arrow_down.png')
156           icon2 = QIcon(fichier2)
157           self.RBBas.setIcon(icon2)
158           fichier3=os.path.join(repIcon, 'file-explorer.png')
159           icon3 = QIcon(fichier3)
160           self.BSelectFichier.setIcon(icon3)
161           self.BSelectFichier.setIconSize(QSize(32, 32))
162         self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
163           
164         
165
166
167   def ajoutLineEdit(self,valeur=None,inInit=False):
168       self.indexDernierLabel=self.indexDernierLabel+1
169       nomLineEdit=self.nomLine+str(self.indexDernierLabel)
170       if hasattr(self,nomLineEdit) :
171          self.indexDernierLabel=self.indexDernierLabel-1
172          return
173
174       if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
175       else                   : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
176                  
177       self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
178       setattr(self,nomLineEdit,nouveauLE)
179       if valeur != None : nouveauLE.setValeur(valeur)
180
181       self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
182       self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
183       if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
184       self.etablitOrdre()
185
186       # deux lignes pour que le ensureVisible fonctionne
187       self.estVisible=nouveauLE.lineEditVal_1
188       if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
189
190   def etablitOrdre(self):
191       i=0
192       while(i +1 < len(self.listeAffichageWidget)):
193          self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
194          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
195          i=i+1
196
197
198   def setValeurs(self):
199        self.RBListePush()
200        valeurs=self.node.item.get_valeur()
201        min,max=self.node.item.GetMinMax()
202        if max == "**" or max > 5 : aCreer=5
203        else : aCreer=max 
204
205        if valeurs == () or valeurs == None :
206           for i in range(aCreer): self.ajoutLineEdit(inInit=True)
207           return
208
209        for v in valeurs:
210            self.ajoutLineEdit(v,inInit=True)
211
212        for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
213
214   def rendVisibleLigne(self):
215       qApp.processEvents()
216       self.estVisible.setFocus(True)
217       self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
218
219    
220   def changeValeur(self,changeDePlace=False,oblige=True):
221       #Pour compatibilite signature
222       aLeFocus=self.focusWidget()
223       listeComplete=[]
224
225       libre=False
226       for i in range(self.indexDernierLabel) :
227           nom=self.nomLine+str(i+1)
228           courant=getattr(self,nom)
229           valeurTuple=courant.valeur
230           if valeurTuple == None or valeurTuple== "": 
231              libre=True
232              continue
233           validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
234           if not validite:
235              if comm2 != '' : comm += " " + comm2
236              self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
237              return
238           listeComplete.append(tuple(courant.valeur))
239       if listeComplete == [] : listeComplete=None
240       self.node.item.set_valeur(listeComplete)
241
242       if changeDePlace : return
243       min,max=self.node.item.GetMinMax()
244       if self.indexDernierLabel == max  : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
245       if self.indexDernierLabel < max and libre==False :
246           self.ajoutLineEdit()
247           self.listeAffichageWidget[-2].setFocus(True)
248       else :
249          try :
250            qApp.processEvents()
251            w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
252            w.setFocus(True)
253            self.scrollArea.ensureWidgetVisible(w,0,0)
254          except :
255            pass
256           
257   def AjoutNValeur(self,liste):
258         if len(liste)%self.nbValeurs != 0 :
259            texte="Nombre incorrect de valeurs"
260            #self.Commentaire.setText(texte)
261            self.editor.affiche_infos(tr(texte),Qt.red)
262            return
263         i=0
264         while ( i < len(liste) ) :
265             if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
266             else : indexDernierRempli=0
267             try :
268               t=tuple(liste[i:i+self.nbValeurs])
269               i=i+self.nbValeurs
270             except:
271               t=tuple(liste[i:len(liste)])
272             if indexDernierRempli < self.indexDernierLabel:
273                nomLineEdit=self.nomLine+str(indexDernierRempli+1)
274                LEARemplir=getattr(self,nomLineEdit) 
275                LEARemplir.lineEditVal_1.setText(str(t[0]))
276                LEARemplir.lineEditVal_2.setText(str(t[1]))
277                if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
278                LEARemplir.valueChange()
279             else : 
280                self.ajoutLineEdit(t,False)
281                nomLineEdit=self.nomLine+str(self.indexDernierLabel)
282                LEARemplir=getattr(self,nomLineEdit) 
283                LEARemplir.valueChange()
284
285
286   def RBListePush(self):
287   # PN a rendre generique avec un truc tel prerempli
288       if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
289       if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
290          val=[]
291          for k in self.objSimp.jdc.LineDico.keys() :
292               try :
293                valeur=self.objSimp.jdc.get_concept(k)
294                val.append((valeur,0))
295               except :
296                pass
297          self.node.item.set_valeur(val)
298       if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
299          val=[]
300          for k in self.objSimp.jdc.MachineDico.keys() :
301               try :
302                valeur=self.objSimp.jdc.get_concept(k)
303                val.append((valeur,0))
304               except :
305                pass
306          self.node.item.set_valeur(val)
307       if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
308          val=[]
309          for k in self.objSimp.jdc.TransfoDico.keys() :
310               try :
311                valeur=self.objSimp.jdc.get_concept(k)
312                val.append((valeur,0))
313               except :
314                pass
315          self.node.item.set_valeur(val)
316       if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
317          val=[]
318          for k in self.objSimp.jdc.LoadDico.keys() :
319               try :
320                valeur=self.objSimp.jdc.get_concept(k)
321                val.append((valeur,0))
322               except :
323                pass
324          self.node.item.set_valeur(val)
325