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
109 for i in range(self.tailleTuple):
110 nomLE="lineEditVal_"+str(i+1)
111 courant=getattr(self,nomLE)
114 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
115 def __init__(self,tailleTuple,parent,parentQt,index):
116 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
118 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
119 def __init__(self,tailleTuple,parent,parentQt,index):
120 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
122 # ---------------------------- #
125 class MonWidgetPlusieursTuple(Feuille,GereListe):
127 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
128 self.indexDernierLabel=0
129 self.nomLine="TupleVal"
130 self.listeAffichageWidget=[]
131 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
132 GereListe.__init__(self)
133 self.politique=PolitiquePlusieurs(self.node,self.editor)
134 self.parentQt.commandesLayout.insertWidget(-1,self)
135 if sys.platform[0:5]!="linux":
136 repIcon=self.node.editor.appliEficas.repIcon
137 fichier=os.path.join(repIcon, 'arrow_up.png')
138 icon = QIcon(fichier)
139 self.RBHaut.setIcon(icon)
140 self.RBHaut.setIconSize(QSize(32, 32))
141 fichier2=os.path.join(repIcon, 'arrow_down.png')
142 icon2 = QIcon(fichier2)
143 self.RBBas.setIcon(icon2)
144 fichier3=os.path.join(repIcon, 'file-explorer.png')
145 icon3 = QIcon(fichier3)
146 self.BSelectFichier.setIcon(icon3)
147 self.BSelectFichier.setIconSize(QSize(32, 32))
148 self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
153 def ajoutLineEdit(self,valeur=None,inInit=False):
154 self.indexDernierLabel=self.indexDernierLabel+1
155 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
156 if hasattr(self,nomLineEdit) :
157 self.indexDernierLabel=self.indexDernierLabel-1
160 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
161 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
163 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
164 setattr(self,nomLineEdit,nouveauLE)
165 if valeur != None : nouveauLE.setValeur(valeur)
167 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
168 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
169 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
172 # deux lignes pour que le ensureVisible fonctionne
173 self.estVisible=nouveauLE.lineEditVal_1
174 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
176 def etablitOrdre(self):
178 while(i +1 < len(self.listeAffichageWidget)):
179 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
180 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
184 def setValeurs(self):
186 valeurs=self.node.item.get_valeur()
187 min,max=self.node.item.GetMinMax()
188 if max == "**" or max > 5 : aCreer=5
191 if valeurs == () or valeurs == None :
192 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
196 self.ajoutLineEdit(v,inInit=True)
198 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
200 def rendVisibleLigne(self):
202 self.estVisible.setFocus(True)
203 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
206 def changeValeur(self,changeDePlace=False,oblige=True):
207 #Pour compatibilite signature
208 aLeFocus=self.focusWidget()
212 for i in range(self.indexDernierLabel) :
213 nom=self.nomLine+str(i+1)
214 courant=getattr(self,nom)
215 valeurTuple=courant.valeur
216 if valeurTuple == None or valeurTuple== "":
219 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
221 if comm2 != '' : comm += " " + comm2
222 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
224 listeComplete.append(tuple(courant.valeur))
225 if listeComplete == [] : listeComplete=None
226 self.node.item.set_valeur(listeComplete)
228 if changeDePlace : return
229 min,max=self.node.item.GetMinMax()
230 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
231 if self.indexDernierLabel < max and libre==False :
233 self.listeAffichageWidget[-2].setFocus(True)
237 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
239 self.scrollArea.ensureWidgetVisible(w,0,0)
243 def AjoutNValeur(self,liste):
244 if len(liste)%self.nbValeurs != 0 :
245 texte="Nombre de valeur incorrecte"
246 #self.Commentaire.setText(texte)
247 self.editor.affiche_infos(texte,Qt.red)
250 while ( i < len(liste) ) :
251 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
252 else : indexDernierRempli=0
254 t=tuple(liste[i:i+self.nbValeurs])
257 t=tuple(liste[i:len(liste)])
258 if indexDernierRempli < self.indexDernierLabel:
259 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
260 LEARemplir=getattr(self,nomLineEdit)
261 LEARemplir.lineEditVal_1.setText(str(t[0]))
262 LEARemplir.lineEditVal_2.setText(str(t[1]))
263 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
264 LEARemplir.valueChange()
266 self.ajoutLineEdit(t,False)
267 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
268 LEARemplir=getattr(self,nomLineEdit)
269 LEARemplir.valueChange()
272 def RBListePush(self):
273 # PN a rendre generique avec un truc tel prerempli
274 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
275 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
277 for k in self.objSimp.jdc.LineDico.keys() :
279 valeur=self.objSimp.jdc.get_concept(k)
280 val.append((valeur,0))
283 self.node.item.set_valeur(val)
284 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
286 for k in self.objSimp.jdc.MachineDico.keys() :
288 valeur=self.objSimp.jdc.get_concept(k)
289 val.append((valeur,0))
292 self.node.item.set_valeur(val)
293 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
295 for k in self.objSimp.jdc.TransfoDico.keys() :
297 valeur=self.objSimp.jdc.get_concept(k)
298 val.append((valeur,0))
301 self.node.item.set_valeur(val)
302 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
304 for k in self.objSimp.jdc.LoadDico.keys() :
306 valeur=self.objSimp.jdc.get_concept(k)
307 val.append((valeur,0))
310 self.node.item.set_valeur(val)