1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 import string,types,os,sys
24 from determine import monEnvQT5
26 from PyQt5.QtWidgets import QFrame,QApplication, QFrame, QWidget
27 from PyQt5.QtGui import QIcon
28 from PyQt5.QtCore import QSize, Qt
30 from PyQt4.QtGui import *
31 from PyQt4.QtCore import *
33 from Extensions.i18n import tr
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
46 def __init__(self,tailleTuple,parent,parentQt,index):
47 QWidget.__init__(self,parent)
49 self.tailleTuple=tailleTuple
51 self.parentQt=parentQt
56 for i in range(self.tailleTuple):
57 nomLE="lineEditVal_"+str(i+1)
58 courant=getattr(self,nomLE)
60 courant.dansUnTuple=True
61 if monEnvQT5 : courant.returnPressed.connect(self.valueChange)
62 else : self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
65 def valueChange(self):
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 :
79 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
83 listeVal.append(valeur)
85 self.parentQt.changeValeur()
88 def setValeur(self,value):
91 for i in range(self.tailleTuple):
92 nomLE="lineEditVal_"+str(i+1)
93 courant=getattr(self,nomLE)
95 if str(value[i]) != "" : valeurNulle=False
100 courant.setText(str(value[i]))
103 val=str(courant.text())
108 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
112 listeVal.append(valeur)
113 if valeurNulle == True : self.valeur=None
114 else : self.valeur=listeVal
122 def setText(self,value):
123 self.setValeur(value)
127 for i in range(self.tailleTuple):
128 nomLE="lineEditVal_"+str(i+1)
129 courant=getattr(self,nomLE)
132 def finCommentaire(self):
133 return self.finCommentaireListe()
136 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
137 def __init__(self,tailleTuple,parent,parentQt,index):
138 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
140 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
141 def __init__(self,tailleTuple,parent,parentQt,index):
142 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
144 # ---------------------------- #
147 class MonWidgetPlusieursTuple(Feuille,GereListe):
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))
173 self.BSelectFichier.clicked.connect(self.selectInFile)
175 self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
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
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)
190 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
191 setattr(self,nomLineEdit,nouveauLE)
192 if valeur != None : nouveauLE.setValeur(valeur)
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)
199 # deux lignes pour que le ensureVisible fonctionne
200 self.estVisible=nouveauLE.lineEditVal_1
201 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
203 def etablitOrdre(self):
205 while(i +1 < len(self.listeAffichageWidget)):
206 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
207 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
211 def setValeurs(self):
213 valeurs=self.node.item.get_valeur()
214 min,max=self.node.item.GetMinMax()
215 if max == "**" or max > 5 : aCreer=5
218 if valeurs == () or valeurs == None :
219 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
223 self.ajoutLineEdit(v,inInit=True)
225 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
227 def rendVisibleLigne(self):
228 QApplication.processEvents()
229 self.estVisible.setFocus(True)
230 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
233 def changeValeur(self,changeDePlace=False,oblige=True):
234 #Pour compatibilite signature
235 aLeFocus=self.focusWidget()
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== "":
246 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
248 if comm2 != '' : comm += " " + comm2
249 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
251 listeComplete.append(tuple(courant.valeur))
252 if listeComplete == [] : listeComplete=None
253 self.node.item.set_valeur(listeComplete)
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 :
260 self.listeAffichageWidget[-2].setFocus(True)
263 QApplication.processEvents()
264 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
266 self.scrollArea.ensureWidgetVisible(w,0,0)
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)
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)
279 texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
280 self.editor.affiche_infos(texte,Qt.red)
282 while ( i < len(liste) ) :
283 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
284 else : indexDernierRempli=0
286 t=tuple(liste[i:i+self.nbValeurs])
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()
298 self.ajoutLineEdit(t,False)
299 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
300 LEARemplir=getattr(self,nomLineEdit)
301 LEARemplir.valueChange()
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 :
313 for k in self.objSimp.jdc.LineDico.keys() :
315 valeur=self.objSimp.jdc.get_concept(k)
316 val.append((valeur,0))
319 self.node.item.set_valeur(val)
320 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
322 for k in self.objSimp.jdc.MachineDico.keys() :
324 valeur=self.objSimp.jdc.get_concept(k)
325 val.append((valeur,0))
328 self.node.item.set_valeur(val)
329 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
331 for k in self.objSimp.jdc.TransfoDico.keys() :
333 valeur=self.objSimp.jdc.get_concept(k)
334 val.append((valeur,0))
337 self.node.item.set_valeur(val)
338 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
340 for k in self.objSimp.jdc.LoadDico.keys() :
342 valeur=self.objSimp.jdc.get_concept(k)
343 val.append((valeur,0))
346 self.node.item.set_valeur(val)
347 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_moteur :
349 for k in self.objSimp.jdc.MotorDico.keys() :
351 valeur=self.objSimp.jdc.get_concept(k)
352 val.append((valeur,0))
355 self.node.item.set_valeur(val)