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.NumLineEditEnCours=0
130 self.nomLine="TupleVal"
131 self.listeAffichageWidget=[]
132 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
133 GereListe.__init__(self)
134 self.politique=PolitiquePlusieurs(self.node,self.editor)
135 self.parentQt.commandesLayout.insertWidget(-1,self)
136 if sys.platform[0:5]!="linux":
137 repIcon=self.node.editor.appliEficas.repIcon
138 fichier=os.path.join(repIcon, 'arrow_up.png')
139 icon = QIcon(fichier)
140 self.RBHaut.setIcon(icon)
141 self.RBHaut.setIconSize(QSize(32, 32))
142 fichier2=os.path.join(repIcon, 'arrow_down.png')
143 icon2 = QIcon(fichier2)
144 self.RBBas.setIcon(icon2)
145 fichier3=os.path.join(repIcon, 'file-explorer.png')
146 icon3 = QIcon(fichier3)
147 self.BSelectFichier.setIcon(icon3)
148 self.BSelectFichier.setIconSize(QSize(32, 32))
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 RBListePush(self):
244 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
245 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
247 for k in self.objSimp.jdc.LineDico.keys() :
249 valeur=self.objSimp.jdc.get_concept(k)
250 val.append((valeur,0))
253 self.node.item.set_valeur(val)
254 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
256 for k in self.objSimp.jdc.MachineDico.keys() :
258 valeur=self.objSimp.jdc.get_concept(k)
259 val.append((valeur,0))
262 self.node.item.set_valeur(val)
263 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
265 for k in self.objSimp.jdc.TransfoDico.keys() :
267 valeur=self.objSimp.jdc.get_concept(k)
268 val.append((valeur,0))
271 self.node.item.set_valeur(val)
272 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
274 for k in self.objSimp.jdc.LoadDico.keys() :
276 valeur=self.objSimp.jdc.get_concept(k)
277 val.append((valeur,0))
280 self.node.item.set_valeur(val)