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
28 from feuille import Feuille
29 from politiquesValidation import PolitiquePlusieurs
30 from qtSaisie import SaisieValeur
31 from gereListe import GereListe
32 from gereListe import LECustom
33 from Tuple2 import Ui_Tuple2
34 from Tuple3 import Ui_Tuple3
38 def __init__(self,tailleTuple,parent,parentQt,index):
39 QWidget.__init__(self,parent)
41 self.tailleTuple=tailleTuple
43 self.parentQt=parentQt
48 for i in range(self.tailleTuple):
49 nomLE="lineEditVal_"+str(i+1)
50 courant=getattr(self,nomLE)
52 courant.dansUnTuple=True
53 self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
56 def valueChange(self):
59 for i in range(self.tailleTuple):
60 nomLE="lineEditVal_"+str(i+1)
61 courant=getattr(self,nomLE)
62 val=str(courant.text())
63 if str(val)=="" or val==None :
70 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
74 listeVal.append(valeur)
76 self.parentQt.changeValeur()
79 def setValeur(self,value):
82 for i in range(self.tailleTuple):
83 nomLE="lineEditVal_"+str(i+1)
84 courant=getattr(self,nomLE)
86 if str(value[i]) != "" : valeurNulle=False
90 courant.setText(str(value[i]))
91 val=str(courant.text())
96 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
100 listeVal.append(valeur)
101 if valeurNulle == True : self.valeur=None
102 else : self.valeur=listeVal
110 def setText(self,value):
111 self.setValeur(value)
115 for i in range(self.tailleTuple):
116 nomLE="lineEditVal_"+str(i+1)
117 courant=getattr(self,nomLE)
120 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
121 def __init__(self,tailleTuple,parent,parentQt,index):
122 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
124 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
125 def __init__(self,tailleTuple,parent,parentQt,index):
126 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
128 # ---------------------------- #
131 class MonWidgetPlusieursTuple(Feuille,GereListe):
133 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
134 self.indexDernierLabel=0
135 self.nomLine="TupleVal"
136 self.listeAffichageWidget=[]
137 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
138 GereListe.__init__(self)
139 self.politique=PolitiquePlusieurs(self.node,self.editor)
140 self.parentQt.commandesLayout.insertWidget(-1,self)
141 if sys.platform[0:5]!="linux":
142 repIcon=self.node.editor.appliEficas.repIcon
143 fichier=os.path.join(repIcon, 'arrow_up.png')
144 icon = QIcon(fichier)
145 self.RBHaut.setIcon(icon)
146 self.RBHaut.setIconSize(QSize(32, 32))
147 fichier2=os.path.join(repIcon, 'arrow_down.png')
148 icon2 = QIcon(fichier2)
149 self.RBBas.setIcon(icon2)
150 fichier3=os.path.join(repIcon, 'file-explorer.png')
151 icon3 = QIcon(fichier3)
152 self.BSelectFichier.setIcon(icon3)
153 self.BSelectFichier.setIconSize(QSize(32, 32))
154 self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
159 def ajoutLineEdit(self,valeur=None,inInit=False):
160 self.indexDernierLabel=self.indexDernierLabel+1
161 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
162 if hasattr(self,nomLineEdit) :
163 self.indexDernierLabel=self.indexDernierLabel-1
166 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
167 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
169 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
170 setattr(self,nomLineEdit,nouveauLE)
171 if valeur != None : nouveauLE.setValeur(valeur)
173 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
174 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
175 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
178 # deux lignes pour que le ensureVisible fonctionne
179 self.estVisible=nouveauLE.lineEditVal_1
180 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
182 def etablitOrdre(self):
184 while(i +1 < len(self.listeAffichageWidget)):
185 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
186 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
190 def setValeurs(self):
192 valeurs=self.node.item.get_valeur()
193 min,max=self.node.item.GetMinMax()
194 if max == "**" or max > 5 : aCreer=5
197 if valeurs == () or valeurs == None :
198 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
202 self.ajoutLineEdit(v,inInit=True)
204 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
206 def rendVisibleLigne(self):
208 self.estVisible.setFocus(True)
209 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
212 def changeValeur(self,changeDePlace=False,oblige=True):
213 #Pour compatibilite signature
214 aLeFocus=self.focusWidget()
218 for i in range(self.indexDernierLabel) :
219 nom=self.nomLine+str(i+1)
220 courant=getattr(self,nom)
221 valeurTuple=courant.valeur
222 if valeurTuple == None or valeurTuple== "":
225 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
227 if comm2 != '' : comm += " " + comm2
228 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
230 listeComplete.append(tuple(courant.valeur))
231 if listeComplete == [] : listeComplete=None
232 self.node.item.set_valeur(listeComplete)
234 if changeDePlace : return
235 min,max=self.node.item.GetMinMax()
236 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
237 if self.indexDernierLabel < max and libre==False :
239 self.listeAffichageWidget[-2].setFocus(True)
243 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
245 self.scrollArea.ensureWidgetVisible(w,0,0)
249 def AjoutNValeur(self,liste):
250 if len(liste)%self.nbValeurs != 0 :
251 texte="Nombre incorrect de valeurs"
252 #self.Commentaire.setText(texte)
253 self.editor.affiche_infos(tr(texte),Qt.red)
256 while ( i < len(liste) ) :
257 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
258 else : indexDernierRempli=0
260 t=tuple(liste[i:i+self.nbValeurs])
263 t=tuple(liste[i:len(liste)])
264 if indexDernierRempli < self.indexDernierLabel:
265 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
266 LEARemplir=getattr(self,nomLineEdit)
267 LEARemplir.lineEditVal_1.setText(str(t[0]))
268 LEARemplir.lineEditVal_2.setText(str(t[1]))
269 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
270 LEARemplir.valueChange()
272 self.ajoutLineEdit(t,False)
273 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
274 LEARemplir=getattr(self,nomLineEdit)
275 LEARemplir.valueChange()
278 def RBListePush(self):
279 # PN a rendre generique avec un truc tel prerempli
280 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
281 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
283 for k in self.objSimp.jdc.LineDico.keys() :
285 valeur=self.objSimp.jdc.get_concept(k)
286 val.append((valeur,0))
289 self.node.item.set_valeur(val)
290 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
292 for k in self.objSimp.jdc.MachineDico.keys() :
294 valeur=self.objSimp.jdc.get_concept(k)
295 val.append((valeur,0))
298 self.node.item.set_valeur(val)
299 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
301 for k in self.objSimp.jdc.TransfoDico.keys() :
303 valeur=self.objSimp.jdc.get_concept(k)
304 val.append((valeur,0))
307 self.node.item.set_valeur(val)
308 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
310 for k in self.objSimp.jdc.LoadDico.keys() :
312 valeur=self.objSimp.jdc.get_concept(k)
313 val.append((valeur,0))
316 self.node.item.set_valeur(val)