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
91 courant.setText(str(value[i]))
94 val=str(courant.text())
99 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
103 listeVal.append(valeur)
104 if valeurNulle == True : self.valeur=None
105 else : self.valeur=listeVal
113 def setText(self,value):
114 self.setValeur(value)
118 for i in range(self.tailleTuple):
119 nomLE="lineEditVal_"+str(i+1)
120 courant=getattr(self,nomLE)
123 def finCommentaire(self):
124 return self.finCommentaireListe()
127 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
128 def __init__(self,tailleTuple,parent,parentQt,index):
129 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
131 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
132 def __init__(self,tailleTuple,parent,parentQt,index):
133 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
135 # ---------------------------- #
138 class MonWidgetPlusieursTuple(Feuille,GereListe):
140 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
141 self.indexDernierLabel=0
142 self.nomLine="TupleVal"
143 self.listeAffichageWidget=[]
144 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
145 GereListe.__init__(self)
146 self.finCommentaireListe()
147 self.politique=PolitiquePlusieurs(self.node,self.editor)
148 self.parentQt.commandesLayout.insertWidget(-1,self)
149 if sys.platform[0:5]!="linux":
150 repIcon=self.node.editor.appliEficas.repIcon
151 fichier=os.path.join(repIcon, 'arrow_up.png')
152 icon = QIcon(fichier)
153 self.RBHaut.setIcon(icon)
154 self.RBHaut.setIconSize(QSize(32, 32))
155 fichier2=os.path.join(repIcon, 'arrow_down.png')
156 icon2 = QIcon(fichier2)
157 self.RBBas.setIcon(icon2)
158 fichier3=os.path.join(repIcon, 'file-explorer.png')
159 icon3 = QIcon(fichier3)
160 self.BSelectFichier.setIcon(icon3)
161 self.BSelectFichier.setIconSize(QSize(32, 32))
162 self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
167 def ajoutLineEdit(self,valeur=None,inInit=False):
168 self.indexDernierLabel=self.indexDernierLabel+1
169 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
170 if hasattr(self,nomLineEdit) :
171 self.indexDernierLabel=self.indexDernierLabel-1
174 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
175 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
177 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
178 setattr(self,nomLineEdit,nouveauLE)
179 if valeur != None : nouveauLE.setValeur(valeur)
181 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
182 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
183 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
186 # deux lignes pour que le ensureVisible fonctionne
187 self.estVisible=nouveauLE.lineEditVal_1
188 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
190 def etablitOrdre(self):
192 while(i +1 < len(self.listeAffichageWidget)):
193 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
194 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
198 def setValeurs(self):
200 valeurs=self.node.item.get_valeur()
201 min,max=self.node.item.GetMinMax()
202 if max == "**" or max > 5 : aCreer=5
205 if valeurs == () or valeurs == None :
206 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
210 self.ajoutLineEdit(v,inInit=True)
212 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
214 def rendVisibleLigne(self):
216 self.estVisible.setFocus(True)
217 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
220 def changeValeur(self,changeDePlace=False,oblige=True):
221 #Pour compatibilite signature
222 aLeFocus=self.focusWidget()
226 for i in range(self.indexDernierLabel) :
227 nom=self.nomLine+str(i+1)
228 courant=getattr(self,nom)
229 valeurTuple=courant.valeur
230 if valeurTuple == None or valeurTuple== "":
233 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
235 if comm2 != '' : comm += " " + comm2
236 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
238 listeComplete.append(tuple(courant.valeur))
239 if listeComplete == [] : listeComplete=None
240 self.node.item.set_valeur(listeComplete)
242 if changeDePlace : return
243 min,max=self.node.item.GetMinMax()
244 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
245 if self.indexDernierLabel < max and libre==False :
247 self.listeAffichageWidget[-2].setFocus(True)
251 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
253 self.scrollArea.ensureWidgetVisible(w,0,0)
257 def AjoutNValeur(self,liste):
258 if len(liste)%self.nbValeurs != 0 :
259 texte="Nombre incorrect de valeurs"
260 #self.Commentaire.setText(texte)
261 self.editor.affiche_infos(tr(texte),Qt.red)
264 while ( i < len(liste) ) :
265 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
266 else : indexDernierRempli=0
268 t=tuple(liste[i:i+self.nbValeurs])
271 t=tuple(liste[i:len(liste)])
272 if indexDernierRempli < self.indexDernierLabel:
273 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
274 LEARemplir=getattr(self,nomLineEdit)
275 LEARemplir.lineEditVal_1.setText(str(t[0]))
276 LEARemplir.lineEditVal_2.setText(str(t[1]))
277 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
278 LEARemplir.valueChange()
280 self.ajoutLineEdit(t,False)
281 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
282 LEARemplir=getattr(self,nomLineEdit)
283 LEARemplir.valueChange()
286 def RBListePush(self):
287 # PN a rendre generique avec un truc tel prerempli
288 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
289 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
291 for k in self.objSimp.jdc.LineDico.keys() :
293 valeur=self.objSimp.jdc.get_concept(k)
294 val.append((valeur,0))
297 self.node.item.set_valeur(val)
298 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
300 for k in self.objSimp.jdc.MachineDico.keys() :
302 valeur=self.objSimp.jdc.get_concept(k)
303 val.append((valeur,0))
306 self.node.item.set_valeur(val)
307 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
309 for k in self.objSimp.jdc.TransfoDico.keys() :
311 valeur=self.objSimp.jdc.get_concept(k)
312 val.append((valeur,0))
315 self.node.item.set_valeur(val)
316 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
318 for k in self.objSimp.jdc.LoadDico.keys() :
320 valeur=self.objSimp.jdc.get_concept(k)
321 val.append((valeur,0))
324 self.node.item.set_valeur(val)