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
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
47 for i in range(self.tailleTuple):
48 nomLE="lineEditVal_"+str(i+1)
49 courant=getattr(self,nomLE)
51 courant.dansUnTuple=True
52 self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
55 def valueChange(self):
58 for i in range(self.tailleTuple):
59 nomLE="lineEditVal_"+str(i+1)
60 courant=getattr(self,nomLE)
61 val=str(courant.text())
62 if str(val)=="" or val==None :
69 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
73 listeVal.append(valeur)
75 self.parentQt.changeValeur()
78 def setValeur(self,value):
81 for i in range(self.tailleTuple):
82 nomLE="lineEditVal_"+str(i+1)
83 courant=getattr(self,nomLE)
85 if str(value[i]) != "" : valeurNulle=False
89 courant.setText(str(value[i]))
90 val=str(courant.text())
95 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
99 listeVal.append(valeur)
100 if valeurNulle == True : self.valeur=None
101 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)
137 def ajoutLineEdit(self,valeur=None,inInit=False):
138 self.indexDernierLabel=self.indexDernierLabel+1
139 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
140 if hasattr(self,nomLineEdit) :
141 self.indexDernierLabel=self.indexDernierLabel-1
144 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
145 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
147 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
148 setattr(self,nomLineEdit,nouveauLE)
149 if valeur != None : nouveauLE.setValeur(valeur)
151 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
152 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
153 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
156 # deux lignes pour que le ensureVisible fonctionne
157 self.estVisible=nouveauLE.lineEditVal_1
158 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
160 def etablitOrdre(self):
162 while(i +1 < len(self.listeAffichageWidget)):
163 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
164 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
168 def setValeurs(self):
169 valeurs=self.node.item.get_valeur()
170 min,max=self.node.item.GetMinMax()
171 if max == "**" or max > 5 : aCreer=5
174 if valeurs == () or valeurs == None :
175 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
179 self.ajoutLineEdit(v,inInit=True)
181 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
183 def rendVisibleLigne(self):
185 self.estVisible.setFocus(True)
186 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
189 def changeValeur(self,changeDePlace=False,oblige=True):
190 #Pour compatibilite signature
191 aLeFocus=self.focusWidget()
195 for i in range(self.indexDernierLabel) :
196 nom=self.nomLine+str(i+1)
197 courant=getattr(self,nom)
198 valeurTuple=courant.valeur
199 if valeurTuple == None or valeurTuple== "":
202 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
204 if comm2 != '' : comm += " " + comm2
205 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
207 listeComplete.append(tuple(courant.valeur))
208 if listeComplete == [] : listeComplete=None
209 self.node.item.set_valeur(listeComplete)
211 if changeDePlace : return
212 min,max=self.node.item.GetMinMax()
213 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
214 if self.indexDernierLabel < max and libre==False :
216 self.listeAffichageWidget[-2].setFocus(True)
220 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
222 self.scrollArea.ensureWidgetVisible(w,0,0)