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 PyQt4.QtGui import *
25 from PyQt4.QtCore import *
26 from Extensions.i18n import tr
29 from feuille import Feuille
30 from politiquesValidation import PolitiquePlusieurs
31 from qtSaisie import SaisieValeur
32 from gereListe import GereListe
33 from gereListe import LECustom
34 from Tuple2 import Ui_Tuple2
35 from Tuple3 import Ui_Tuple3
36 from maMessageBox import maMessageBox
40 def __init__(self,tailleTuple,parent,parentQt,index):
41 QWidget.__init__(self,parent)
43 self.tailleTuple=tailleTuple
45 self.parentQt=parentQt
50 for i in range(self.tailleTuple):
51 nomLE="lineEditVal_"+str(i+1)
52 courant=getattr(self,nomLE)
54 courant.dansUnTuple=True
55 self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
58 def valueChange(self):
61 for i in range(self.tailleTuple):
62 nomLE="lineEditVal_"+str(i+1)
63 courant=getattr(self,nomLE)
64 val=str(courant.text())
65 if str(val)=="" or val==None :
72 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
76 listeVal.append(valeur)
78 self.parentQt.changeValeur()
81 def setValeur(self,value):
84 for i in range(self.tailleTuple):
85 nomLE="lineEditVal_"+str(i+1)
86 courant=getattr(self,nomLE)
88 if str(value[i]) != "" : valeurNulle=False
93 courant.setText(str(value[i]))
96 val=str(courant.text())
101 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
105 listeVal.append(valeur)
106 if valeurNulle == True : self.valeur=None
107 else : self.valeur=listeVal
115 def setText(self,value):
116 self.setValeur(value)
120 for i in range(self.tailleTuple):
121 nomLE="lineEditVal_"+str(i+1)
122 courant=getattr(self,nomLE)
125 def finCommentaire(self):
126 return self.finCommentaireListe()
129 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
130 def __init__(self,tailleTuple,parent,parentQt,index):
131 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
133 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
134 def __init__(self,tailleTuple,parent,parentQt,index):
135 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
137 # ---------------------------- #
140 class MonWidgetPlusieursTuple(Feuille,GereListe):
142 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
143 self.indexDernierLabel=0
144 self.nomLine="TupleVal"
145 self.listeAffichageWidget=[]
146 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
147 GereListe.__init__(self)
148 self.finCommentaireListe()
149 self.politique=PolitiquePlusieurs(self.node,self.editor)
150 self.parentQt.commandesLayout.insertWidget(-1,self)
151 if sys.platform[0:5]!="linux":
152 repIcon=self.node.editor.appliEficas.repIcon
153 fichier=os.path.join(repIcon, 'arrow_up.png')
154 icon = QIcon(fichier)
155 self.RBHaut.setIcon(icon)
156 self.RBHaut.setIconSize(QSize(32, 32))
157 fichier2=os.path.join(repIcon, 'arrow_down.png')
158 icon2 = QIcon(fichier2)
159 self.RBBas.setIcon(icon2)
160 fichier3=os.path.join(repIcon, 'file-explorer.png')
161 icon3 = QIcon(fichier3)
162 self.BSelectFichier.setIcon(icon3)
163 self.BSelectFichier.setIconSize(QSize(32, 32))
164 self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
169 def ajoutLineEdit(self,valeur=None,inInit=False):
170 self.indexDernierLabel=self.indexDernierLabel+1
171 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
172 if hasattr(self,nomLineEdit) :
173 self.indexDernierLabel=self.indexDernierLabel-1
176 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
177 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
179 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
180 setattr(self,nomLineEdit,nouveauLE)
181 if valeur != None : nouveauLE.setValeur(valeur)
183 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
184 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
185 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
188 # deux lignes pour que le ensureVisible fonctionne
189 self.estVisible=nouveauLE.lineEditVal_1
190 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
192 def etablitOrdre(self):
194 while(i +1 < len(self.listeAffichageWidget)):
195 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
196 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
200 def setValeurs(self):
202 valeurs=self.node.item.get_valeur()
203 min,max=self.node.item.GetMinMax()
204 if max == "**" or max > 5 : aCreer=5
207 if valeurs == () or valeurs == None :
208 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
212 self.ajoutLineEdit(v,inInit=True)
214 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
216 def rendVisibleLigne(self):
218 self.estVisible.setFocus(True)
219 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
222 def changeValeur(self,changeDePlace=False,oblige=True):
223 #Pour compatibilite signature
224 aLeFocus=self.focusWidget()
228 for i in range(self.indexDernierLabel) :
229 nom=self.nomLine+str(i+1)
230 courant=getattr(self,nom)
231 valeurTuple=courant.valeur
232 if valeurTuple == None or valeurTuple== "":
235 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
237 if comm2 != '' : comm += " " + comm2
238 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
240 listeComplete.append(tuple(courant.valeur))
241 if listeComplete == [] : listeComplete=None
242 self.node.item.set_valeur(listeComplete)
244 if changeDePlace : return
245 min,max=self.node.item.GetMinMax()
246 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
247 if self.indexDernierLabel < max and libre==False :
249 self.listeAffichageWidget[-2].setFocus(True)
253 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
255 self.scrollArea.ensureWidgetVisible(w,0,0)
259 def ajoutNValeur(self,liste):
260 if len(liste)%self.nbValeurs != 0 :
261 texte="Nombre incorrect de valeurs"
262 self.editor.affiche_infos(tr(texte),Qt.red)
264 min,max=self.node.item.GetMinMax()
265 if self.objSimp.valeur == None : l = len(liste) and self.objSimp.valeur
266 else : l = len(liste)+len(self.objSimp.valeur)
268 texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
269 self.editor.affiche_infos(texte,Qt.red)
271 while ( i < len(liste) ) :
272 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
273 else : indexDernierRempli=0
275 t=tuple(liste[i:i+self.nbValeurs])
278 t=tuple(liste[i:len(liste)])
279 if indexDernierRempli < self.indexDernierLabel:
280 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
281 LEARemplir=getattr(self,nomLineEdit)
282 LEARemplir.lineEditVal_1.setText(str(t[0]))
283 LEARemplir.lineEditVal_2.setText(str(t[1]))
284 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
285 LEARemplir.valueChange()
287 self.ajoutLineEdit(t,False)
288 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
289 LEARemplir=getattr(self,nomLineEdit)
290 LEARemplir.valueChange()
292 def RBListePush(self):
293 # PN a rendre generique avec un truc tel prerempli
294 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
295 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
297 for k in self.objSimp.jdc.LineDico.keys() :
299 valeur=self.objSimp.jdc.get_concept(k)
300 val.append((valeur,0))
303 self.node.item.set_valeur(val)
304 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
306 for k in self.objSimp.jdc.MachineDico.keys() :
308 valeur=self.objSimp.jdc.get_concept(k)
309 val.append((valeur,0))
312 self.node.item.set_valeur(val)
313 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
315 for k in self.objSimp.jdc.TransfoDico.keys() :
317 valeur=self.objSimp.jdc.get_concept(k)
318 val.append((valeur,0))
321 self.node.item.set_valeur(val)
322 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
324 for k in self.objSimp.jdc.LoadDico.keys() :
326 valeur=self.objSimp.jdc.get_concept(k)
327 val.append((valeur,0))
330 self.node.item.set_valeur(val)