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