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
108 for i in range(self.tailleTuple):
109 nomLE="lineEditVal_"+str(i+1)
110 courant=getattr(self,nomLE)
113 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
114 def __init__(self,tailleTuple,parent,parentQt,index):
115 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
117 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
118 def __init__(self,tailleTuple,parent,parentQt,index):
119 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
121 # ---------------------------- #
124 class MonWidgetPlusieursTuple(Feuille,GereListe):
126 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
127 self.indexDernierLabel=0
128 self.NumLineEditEnCours=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)
136 def ajoutLineEdit(self,valeur=None,inInit=False):
137 self.indexDernierLabel=self.indexDernierLabel+1
138 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
139 if hasattr(self,nomLineEdit) :
140 self.indexDernierLabel=self.indexDernierLabel-1
143 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
144 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
146 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
147 setattr(self,nomLineEdit,nouveauLE)
148 if valeur != None : nouveauLE.setValeur(valeur)
150 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
151 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
152 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
155 # deux lignes pour que le ensureVisible fonctionne
156 self.estVisible=nouveauLE.lineEditVal_1
157 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
159 def etablitOrdre(self):
161 while(i +1 < len(self.listeAffichageWidget)):
162 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
163 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
167 def setValeurs(self):
168 valeurs=self.node.item.get_valeur()
169 min,max=self.node.item.GetMinMax()
170 if max == "**" or max > 5 : aCreer=5
173 if valeurs == () or valeurs == None :
174 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
178 self.ajoutLineEdit(v,inInit=True)
180 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
182 def rendVisibleLigne(self):
184 self.estVisible.setFocus(True)
185 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
188 def changeValeur(self,changeDePlace=False,oblige=True):
189 #Pour compatibilite signature
190 aLeFocus=self.focusWidget()
194 for i in range(self.indexDernierLabel) :
195 nom=self.nomLine+str(i+1)
196 courant=getattr(self,nom)
197 valeurTuple=courant.valeur
198 if valeurTuple == None or valeurTuple== "":
201 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
203 if comm2 != '' : comm += " " + comm2
204 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
206 listeComplete.append(tuple(courant.valeur))
207 if listeComplete == [] : listeComplete=None
208 self.node.item.set_valeur(listeComplete)
210 if changeDePlace : return
211 min,max=self.node.item.GetMinMax()
212 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
213 if self.indexDernierLabel < max and libre==False :
215 self.listeAffichageWidget[-2].setFocus(True)
219 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
221 self.scrollArea.ensureWidgetVisible(w,0,0)