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
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
58 for i in range(self.tailleTuple):
59 nomLE="lineEditVal_"+str(i+1)
60 courant=getattr(self,nomLE)
62 courant.dansUnTuple=True
63 courant.returnPressed.connect(self.valueChange)
66 def valueChange(self):
69 for i in range(self.tailleTuple):
70 nomLE="lineEditVal_"+str(i+1)
71 courant=getattr(self,nomLE)
72 val=str(courant.text())
73 if str(val)=="" or val==None :
80 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
84 listeVal.append(valeur)
86 self.parentQt.changeValeur()
89 def setValeur(self,value):
92 for i in range(self.tailleTuple):
93 nomLE="lineEditVal_"+str(i+1)
94 courant=getattr(self,nomLE)
96 if str(value[i]) != "" : valeurNulle=False
101 courant.setText(str(value[i]))
104 val=str(courant.text())
109 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
113 listeVal.append(valeur)
114 if valeurNulle == True : self.valeur=None
115 else : self.valeur=listeVal
123 def setText(self,value):
124 self.setValeur(value)
128 for i in range(self.tailleTuple):
129 nomLE="lineEditVal_"+str(i+1)
130 courant=getattr(self,nomLE)
133 def finCommentaire(self):
134 return self.finCommentaireListe()
137 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
138 def __init__(self,tailleTuple,parent,parentQt,index):
139 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
141 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
142 def __init__(self,tailleTuple,parent,parentQt,index):
143 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
145 # ---------------------------- #
148 class MonWidgetPlusieursTuple(Feuille,GereListe):
150 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
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 self.BSelectFichier.clicked.connect(self.selectInFile)
177 def ajoutLineEdit(self,valeur=None,inInit=False):
178 self.indexDernierLabel=self.indexDernierLabel+1
179 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
180 if hasattr(self,nomLineEdit) :
181 self.indexDernierLabel=self.indexDernierLabel-1
184 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
185 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
187 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
188 setattr(self,nomLineEdit,nouveauLE)
189 if valeur != None : nouveauLE.setValeur(valeur)
191 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
192 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
193 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
196 # deux lignes pour que le ensureVisible fonctionne
197 self.estVisible=nouveauLE.lineEditVal_1
198 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
200 def etablitOrdre(self):
202 while(i +1 < len(self.listeAffichageWidget)):
203 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
204 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
208 def setValeurs(self):
210 valeurs=self.node.item.get_valeur()
211 min,max=self.node.item.GetMinMax()
212 if max == "**" or max > 5 : aCreer=5
215 if valeurs == () or valeurs == None :
216 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
220 self.ajoutLineEdit(v,inInit=True)
222 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
224 def rendVisibleLigne(self):
225 QApplication.processEvents()
226 self.estVisible.setFocus(True)
227 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
230 def changeValeur(self,changeDePlace=False,oblige=True):
231 #Pour compatibilite signature
232 aLeFocus=self.focusWidget()
236 for i in range(self.indexDernierLabel) :
237 nom=self.nomLine+str(i+1)
238 courant=getattr(self,nom)
239 valeurTuple=courant.valeur
240 if valeurTuple == None or valeurTuple== "":
243 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
245 if comm2 != '' : comm += " " + comm2
246 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
248 listeComplete.append(tuple(courant.valeur))
249 if listeComplete == [] : listeComplete=None
250 self.node.item.set_valeur(listeComplete)
252 if changeDePlace : return
253 min,max=self.node.item.GetMinMax()
254 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
255 if self.indexDernierLabel < max and libre==False :
257 self.listeAffichageWidget[-2].setFocus(True)
260 QApplication.processEvents()
261 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
263 self.scrollArea.ensureWidgetVisible(w,0,0)
267 def ajoutNValeur(self,liste):
268 if len(liste)%self.nbValeurs != 0 :
269 texte="Nombre incorrect de valeurs"
270 self.editor.affiche_infos(tr(texte),Qt.red)
272 min,max=self.node.item.GetMinMax()
273 if self.objSimp.valeur == None : l = len(liste) and self.objSimp.valeur
274 else : l = len(liste)+len(self.objSimp.valeur)
276 texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
277 self.editor.affiche_infos(texte,Qt.red)
279 while ( i < len(liste) ) :
280 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
281 else : indexDernierRempli=0
283 t=tuple(liste[i:i+self.nbValeurs])
286 t=tuple(liste[i:len(liste)])
287 if indexDernierRempli < self.indexDernierLabel:
288 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
289 LEARemplir=getattr(self,nomLineEdit)
290 LEARemplir.lineEditVal_1.setText(str(t[0]))
291 LEARemplir.lineEditVal_2.setText(str(t[1]))
292 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
293 LEARemplir.valueChange()
295 self.ajoutLineEdit(t,False)
296 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
297 LEARemplir=getattr(self,nomLineEdit)
298 LEARemplir.valueChange()
300 def RBListePush(self):
301 # PN a rendre generique avec un truc tel prerempli
302 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
303 if not hasattr(self.editor.readercata.cata[0],'sd_ligne') : self.editor.readercata.cata[0].sd_ligne=None
304 if not hasattr(self.editor.readercata.cata[0],'sd_generateur') : self.editor.readercata.cata[0].sd_generateur=None
305 if not hasattr(self.editor.readercata.cata[0],'sd_transfo') : self.editor.readercata.cata[0].sd_transfo=None
306 if not hasattr(self.editor.readercata.cata[0],'sd_charge') : self.editor.readercata.cata[0].sd_charge=None
307 if not hasattr(self.editor.readercata.cata[0],'sd_moteur') : self.editor.readercata.cata[0].sd_moteur=None
308 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
310 if hasattr(self.objSimp.jdc,'LineDico'):
311 for k in self.objSimp.jdc.LineDico :
313 valeur=self.objSimp.jdc.get_concept(k)
314 val.append((valeur,0))
317 self.node.item.set_valeur(val)
318 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
320 if hasattr(self.objSimp.jdc,'MachineDico'):
321 for k in self.objSimp.jdc.MachineDico :
323 valeur=self.objSimp.jdc.get_concept(k)
324 val.append((valeur,0))
327 self.node.item.set_valeur(val)
328 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
330 if hasattr(self.objSimp.jdc,'TransfoDico'):
331 for k in self.objSimp.jdc.TransfoDico :
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 if hasattr(self.objSimp.jdc,'LoadDico'):
341 for k in self.objSimp.jdc.LoadDico :
343 valeur=self.objSimp.jdc.get_concept(k)
344 val.append((valeur,0))
347 self.node.item.set_valeur(val)
348 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_moteur :
350 if hasattr(self.objSimp.jdc,'MotorDico'):
351 for k in self.objSimp.jdc.MotorDico :
353 valeur=self.objSimp.jdc.get_concept(k)
354 val.append((valeur,0))
357 self.node.item.set_valeur(val)