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 self.indexDernierLabel=0
151 self.nomLine="TupleVal"
152 self.listeAffichageWidget=[]
153 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
154 GereListe.__init__(self)
155 self.finCommentaireListe()
156 self.politique=PolitiquePlusieurs(self.node,self.editor)
157 self.parentQt.commandesLayout.insertWidget(-1,self)
158 if sys.platform[0:5]!="linux":
159 repIcon=self.node.editor.appliEficas.repIcon
160 fichier=os.path.join(repIcon, 'arrow_up.png')
161 icon = QIcon(fichier)
162 self.RBHaut.setIcon(icon)
163 self.RBHaut.setIconSize(QSize(32, 32))
164 fichier2=os.path.join(repIcon, 'arrow_down.png')
165 icon2 = QIcon(fichier2)
166 self.RBBas.setIcon(icon2)
167 fichier3=os.path.join(repIcon, 'file-explorer.png')
168 icon3 = QIcon(fichier3)
169 self.BSelectFichier.setIcon(icon3)
170 self.BSelectFichier.setIconSize(QSize(32, 32))
172 self.BSelectFichier.clicked.connect(self.selectInFile)
174 self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
179 def ajoutLineEdit(self,valeur=None,inInit=False):
180 self.indexDernierLabel=self.indexDernierLabel+1
181 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
182 if hasattr(self,nomLineEdit) :
183 self.indexDernierLabel=self.indexDernierLabel-1
186 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
187 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
189 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
190 setattr(self,nomLineEdit,nouveauLE)
191 if valeur != None : nouveauLE.setValeur(valeur)
193 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
194 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
195 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
198 # deux lignes pour que le ensureVisible fonctionne
199 self.estVisible=nouveauLE.lineEditVal_1
200 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
202 def etablitOrdre(self):
204 while(i +1 < len(self.listeAffichageWidget)):
205 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
206 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
210 def setValeurs(self):
212 valeurs=self.node.item.get_valeur()
213 min,max=self.node.item.GetMinMax()
214 if max == "**" or max > 5 : aCreer=5
217 if valeurs == () or valeurs == None :
218 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
222 self.ajoutLineEdit(v,inInit=True)
224 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
226 def rendVisibleLigne(self):
227 QApplication.processEvents()
228 self.estVisible.setFocus(True)
229 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
232 def changeValeur(self,changeDePlace=False,oblige=True):
233 #Pour compatibilite signature
234 aLeFocus=self.focusWidget()
238 for i in range(self.indexDernierLabel) :
239 nom=self.nomLine+str(i+1)
240 courant=getattr(self,nom)
241 valeurTuple=courant.valeur
242 if valeurTuple == None or valeurTuple== "":
245 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
247 if comm2 != '' : comm += " " + comm2
248 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
250 listeComplete.append(tuple(courant.valeur))
251 if listeComplete == [] : listeComplete=None
252 self.node.item.set_valeur(listeComplete)
254 if changeDePlace : return
255 min,max=self.node.item.GetMinMax()
256 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
257 if self.indexDernierLabel < max and libre==False :
259 self.listeAffichageWidget[-2].setFocus(True)
262 QApplication.processEvents()
263 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
265 self.scrollArea.ensureWidgetVisible(w,0,0)
269 def ajoutNValeur(self,liste):
270 if len(liste)%self.nbValeurs != 0 :
271 texte="Nombre incorrect de valeurs"
272 self.editor.affiche_infos(tr(texte),Qt.red)
274 min,max=self.node.item.GetMinMax()
275 if self.objSimp.valeur == None : l = len(liste) and self.objSimp.valeur
276 else : l = len(liste)+len(self.objSimp.valeur)
278 texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
279 self.editor.affiche_infos(texte,Qt.red)
281 while ( i < len(liste) ) :
282 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
283 else : indexDernierRempli=0
285 t=tuple(liste[i:i+self.nbValeurs])
288 t=tuple(liste[i:len(liste)])
289 if indexDernierRempli < self.indexDernierLabel:
290 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
291 LEARemplir=getattr(self,nomLineEdit)
292 LEARemplir.lineEditVal_1.setText(str(t[0]))
293 LEARemplir.lineEditVal_2.setText(str(t[1]))
294 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
295 LEARemplir.valueChange()
297 self.ajoutLineEdit(t,False)
298 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
299 LEARemplir=getattr(self,nomLineEdit)
300 LEARemplir.valueChange()
302 def RBListePush(self):
303 # PN a rendre generique avec un truc tel prerempli
304 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
305 if not hasattr(self.editor.readercata.cata[0],'sd_ligne') : self.editor.readercata.cata[0].sd_ligne=None
306 if not hasattr(self.editor.readercata.cata[0],'sd_generateur') : self.editor.readercata.cata[0].sd_generateur=None
307 if not hasattr(self.editor.readercata.cata[0],'sd_transfo') : self.editor.readercata.cata[0].sd_transfo=None
308 if not hasattr(self.editor.readercata.cata[0],'sd_charge') : self.editor.readercata.cata[0].sd_charge=None
309 if not hasattr(self.editor.readercata.cata[0],'sd_moteur') : self.editor.readercata.cata[0].sd_moteur=None
310 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
312 if hasattr(self.objSimp.jdc,'LineDico'):
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 if hasattr(self.objSimp.jdc,'MachineDico'):
323 for k in self.objSimp.jdc.MachineDico.keys() :
325 valeur=self.objSimp.jdc.get_concept(k)
326 val.append((valeur,0))
329 self.node.item.set_valeur(val)
330 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
332 if hasattr(self.objSimp.jdc,'TransfoDico'):
333 for k in self.objSimp.jdc.TransfoDico.keys() :
335 valeur=self.objSimp.jdc.get_concept(k)
336 val.append((valeur,0))
339 self.node.item.set_valeur(val)
340 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
342 if hasattr(self.objSimp.jdc,'LoadDico'):
343 for k in self.objSimp.jdc.LoadDico.keys() :
345 valeur=self.objSimp.jdc.get_concept(k)
346 val.append((valeur,0))
349 self.node.item.set_valeur(val)
350 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_moteur :
352 if hasattr(self.objSimp.jdc,'MotorDico'):
353 for k in self.objSimp.jdc.MotorDico.keys() :
355 valeur=self.objSimp.jdc.get_concept(k)
356 val.append((valeur,0))
359 self.node.item.set_valeur(val)