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
27 from PyQt5.QtGui import QIcon, QFrame
28 from PyQt5.QtCore import QSize
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
43 from maMessageBox import maMessageBox
47 def __init__(self,tailleTuple,parent,parentQt,index):
48 QWidget.__init__(self,parent)
50 self.tailleTuple=tailleTuple
52 self.parentQt=parentQt
57 for i in range(self.tailleTuple):
58 nomLE="lineEditVal_"+str(i+1)
59 courant=getattr(self,nomLE)
61 courant.dansUnTuple=True
62 if monEnvQT5 : courant.returnPressed.connect(self.valueChange)
63 else : self.connect(courant,SIGNAL("returnPressed()"),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))
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 self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
308 for k in self.objSimp.jdc.LineDico.keys() :
310 valeur=self.objSimp.jdc.get_concept(k)
311 val.append((valeur,0))
314 self.node.item.set_valeur(val)
315 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
317 for k in self.objSimp.jdc.MachineDico.keys() :
319 valeur=self.objSimp.jdc.get_concept(k)
320 val.append((valeur,0))
323 self.node.item.set_valeur(val)
324 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
326 for k in self.objSimp.jdc.TransfoDico.keys() :
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_charge :
335 for k in self.objSimp.jdc.LoadDico.keys() :
337 valeur=self.objSimp.jdc.get_concept(k)
338 val.append((valeur,0))
341 self.node.item.set_valeur(val)