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 from __future__ import absolute_import
23 from builtins import str
24 from builtins import range
25 from builtins import object
30 from six.moves import range
31 from PyQt5.QtWidgets import QFrame,QApplication, QFrame, QWidget
32 from PyQt5.QtGui import QIcon
33 from PyQt5.QtCore import QSize, Qt, QTimer
35 from Extensions.i18n import tr
38 from .feuille import Feuille
39 from .politiquesValidation import PolitiquePlusieurs
40 from .qtSaisie import SaisieValeur
41 from .gereListe import GereListe
42 from .gereListe import LECustom
43 from Tuple2 import Ui_Tuple2
44 from Tuple3 import Ui_Tuple3
47 class TupleCustom(object) :
48 def __init__(self,tailleTuple,parent,parentQt,index):
49 QWidget.__init__(self,parent)
51 self.tailleTuple=tailleTuple
53 self.parentQt=parentQt
56 self.inFocusOutEvent=False
59 for i in range(self.tailleTuple):
60 nomLE="lineEditVal_"+str(i+1)
61 courant=getattr(self,nomLE)
63 courant.dansUnTuple=True
64 courant.returnPressed.connect(self.valueChange)
65 courant.numDsLaListe = i+1
66 courant.tupleCustomParent=self
69 def valueChange(self):
72 for i in range(self.tailleTuple):
73 nomLE="lineEditVal_"+str(i+1)
74 courant=getattr(self,nomLE)
75 val=str(courant.text())
77 if str(val)=="" or val==None :
78 if not self.inFocusOutEvent : courant.setFocus()
84 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
88 listeVal.append(valeur)
90 self.parentQt.changeValeur()
93 def setValeur(self,value):
96 for i in range(self.tailleTuple):
97 nomLE="lineEditVal_"+str(i+1)
98 courant=getattr(self,nomLE)
100 if str(value[i]) != "" : valeurNulle=False
105 courant.setText(str(value[i]))
108 val=str(courant.text())
113 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
117 listeVal.append(valeur)
118 if valeurNulle == True : self.valeur=None
119 else : self.valeur=listeVal
127 def setText(self,value):
128 self.setValeur(value)
132 for i in range(self.tailleTuple):
133 nomLE="lineEditVal_"+str(i+1)
134 courant=getattr(self,nomLE)
137 def finCommentaire(self):
138 return self.finCommentaireListe()
141 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
142 def __init__(self,tailleTuple,parent,parentQt,index):
143 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
145 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
146 def __init__(self,tailleTuple,parent,parentQt,index):
147 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
149 # ---------------------------- #
152 class MonWidgetPlusieursTuple(Feuille,GereListe):
154 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
155 self.indexDernierLabel=0
156 self.nomLine="TupleVal"
157 self.listeAffichageWidget=[]
158 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
159 GereListe.__init__(self)
160 self.finCommentaireListe()
161 self.politique=PolitiquePlusieurs(self.node,self.editor)
162 self.parentQt.commandesLayout.insertWidget(-1,self)
163 if sys.platform[0:5]!="linux":
164 repIcon=self.node.editor.appliEficas.repIcon
165 fichier=os.path.join(repIcon, 'arrow_up.png')
166 icon = QIcon(fichier)
167 self.RBHaut.setIcon(icon)
168 self.RBHaut.setIconSize(QSize(32, 32))
169 fichier2=os.path.join(repIcon, 'arrow_down.png')
170 icon2 = QIcon(fichier2)
171 self.RBBas.setIcon(icon2)
172 fichier3=os.path.join(repIcon, 'file-explorer.png')
173 icon3 = QIcon(fichier3)
174 self.BSelectFichier.setIcon(icon3)
175 self.BSelectFichier.setIconSize(QSize(32, 32))
176 self.BSelectFichier.clicked.connect(self.selectInFile)
181 def ajoutLineEdit(self,valeur=None,inInit=False):
182 self.indexDernierLabel=self.indexDernierLabel+1
183 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
184 if hasattr(self,nomLineEdit) :
185 self.indexDernierLabel=self.indexDernierLabel-1
188 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
189 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
191 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
192 setattr(self,nomLineEdit,nouveauLE)
193 if valeur != None : nouveauLE.setValeur(valeur)
195 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
196 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
197 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
200 # deux lignes pour que le ensureVisible fonctionne
201 self.estVisible=nouveauLE.lineEditVal_1
202 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
204 def etablitOrdre(self):
206 while(i +1 < len(self.listeAffichageWidget)):
207 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
208 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
212 def setValeurs(self):
214 valeurs=self.node.item.get_valeur()
215 min,max=self.node.item.GetMinMax()
216 if max == "**" or max > 5 : aCreer=5
219 if valeurs == () or valeurs == None :
220 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
224 self.ajoutLineEdit(v,inInit=True)
226 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
228 def rendVisibleLigne(self):
229 QApplication.processEvents()
230 self.estVisible.setFocus(True)
231 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
234 def changeValeur(self,changeDePlace=False,oblige=True):
235 #Pour compatibilite signature
236 aLeFocus=self.focusWidget()
240 for i in range(self.indexDernierLabel) :
241 nom=self.nomLine+str(i+1)
242 courant=getattr(self,nom)
243 valeurTuple=courant.valeur
244 if valeurTuple == None or valeurTuple== "":
247 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
249 if comm2 != '' : comm += " " + comm2
250 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
252 listeComplete.append(tuple(courant.valeur))
253 if listeComplete == [] : listeComplete=None
254 self.node.item.set_valeur(listeComplete)
256 if changeDePlace : return
257 min,max=self.node.item.GetMinMax()
258 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
259 if self.indexDernierLabel < max and libre==False :
261 self.listeAffichageWidget[-2].setFocus(True)
264 QApplication.processEvents()
265 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
267 self.scrollArea.ensureWidgetVisible(w,0,0)
271 def ajoutNValeur(self,liste):
272 if len(liste)%self.nbValeurs != 0 :
273 texte="Nombre incorrect de valeurs"
274 self.editor.affiche_infos(tr(texte),Qt.red)
276 min,max=self.node.item.GetMinMax()
277 if self.objSimp.valeur == None : l = len(liste) and self.objSimp.valeur
278 else : l = len(liste)+len(self.objSimp.valeur)
280 texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
281 self.editor.affiche_infos(texte,Qt.red)
283 while ( i < len(liste) ) :
284 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
285 else : indexDernierRempli=0
287 t=tuple(liste[i:i+self.nbValeurs])
290 t=tuple(liste[i:len(liste)])
291 if indexDernierRempli < self.indexDernierLabel:
292 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
293 LEARemplir=getattr(self,nomLineEdit)
294 LEARemplir.lineEditVal_1.setText(str(t[0]))
295 LEARemplir.lineEditVal_2.setText(str(t[1]))
296 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
297 LEARemplir.valueChange()
299 self.ajoutLineEdit(t,False)
300 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
301 LEARemplir=getattr(self,nomLineEdit)
302 LEARemplir.valueChange()
304 def RBListePush(self):
305 # PN a rendre generique avec un truc tel prerempli
306 if self.editor.code == 'VP' : return
307 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
308 if not hasattr(self.editor.readercata.cata[0],'sd_ligne') : self.editor.readercata.cata[0].sd_ligne=None
309 if not hasattr(self.editor.readercata.cata[0],'sd_generateur') : self.editor.readercata.cata[0].sd_generateur=None
310 if not hasattr(self.editor.readercata.cata[0],'sd_transfo') : self.editor.readercata.cata[0].sd_transfo=None
311 if not hasattr(self.editor.readercata.cata[0],'sd_charge') : self.editor.readercata.cata[0].sd_charge=None
312 if not hasattr(self.editor.readercata.cata[0],'sd_moteur') : self.editor.readercata.cata[0].sd_moteur=None
313 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
315 if hasattr(self.objSimp.jdc,'LineDico'):
316 for k in self.objSimp.jdc.LineDico :
318 valeur=self.objSimp.jdc.get_concept(k)
319 val.append((valeur,0))
322 self.node.item.set_valeur(val)
323 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
325 if hasattr(self.objSimp.jdc,'MachineDico'):
326 for k in self.objSimp.jdc.MachineDico :
328 valeur=self.objSimp.jdc.get_concept(k)
329 val.append((valeur,0))
332 self.node.item.set_valeur(val)
333 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
335 if hasattr(self.objSimp.jdc,'TransfoDico'):
336 for k in self.objSimp.jdc.TransfoDico :
338 valeur=self.objSimp.jdc.get_concept(k)
339 val.append((valeur,0))
342 self.node.item.set_valeur(val)
343 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
345 if hasattr(self.objSimp.jdc,'LoadDico'):
346 for k in self.objSimp.jdc.LoadDico :
348 valeur=self.objSimp.jdc.get_concept(k)
349 val.append((valeur,0))
352 self.node.item.set_valeur(val)
353 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_moteur :
355 if hasattr(self.objSimp.jdc,'MotorDico'):
356 for k in self.objSimp.jdc.MotorDico :
358 valeur=self.objSimp.jdc.get_concept(k)
359 val.append((valeur,0))
362 self.node.item.set_valeur(val)