]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monWidgetPlusieursTuple.py
Salome HOME
Tuples avec concept
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursTuple.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Modules Python
21 import string,types,os
22
23 # Modules Eficas
24 from PyQt4.QtGui import *
25 from PyQt4.QtCore import *
26 from Extensions.i18n import tr
27
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
35
36
37 class TupleCustom :
38   def __init__(self,tailleTuple,parent,parentQt,index):
39       QWidget.__init__(self,parent)
40       self.setupUi(self)
41       self.tailleTuple=tailleTuple
42       self.parent=parent
43       self.parentQt=parentQt
44       self.valeur=None
45       self.index=index
46
47       for i in range(self.tailleTuple):
48          nomLE="lineEditVal_"+str(i+1)
49          courant=getattr(self,nomLE)
50          courant.num=index
51          courant.dansUnTuple=True
52          self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
53
54
55   def valueChange(self):
56       listeVal=[]
57     
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 : 
63             courant.setFocus()
64             return
65          try :
66              valeur=eval(val,{})
67          except :
68            try :
69              d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
70              valeur=eval(val,d)
71            except :
72              valeur=val
73          listeVal.append(valeur)
74       self.valeur=listeVal
75       self.parentQt.changeValeur()
76
77
78   def setValeur(self,value):
79       listeVal=[]
80       valeurNulle=True
81       for i in range(self.tailleTuple):
82          nomLE="lineEditVal_"+str(i+1)
83          courant=getattr(self,nomLE)
84          try :
85            if str(value[i]) != "" : valeurNulle=False
86          except :
87            pass
88          
89          courant.setText(str(value[i]))
90          val=str(courant.text())
91          try :
92            valeur=eval(val,{})
93          except :
94            try :
95              d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
96              valeur=eval(val,d)
97            except :
98              valeur=val
99          listeVal.append(valeur)
100       if  valeurNulle == True : self.valeur=None
101       else                    : self.valeur=listeVal
102
103   def getValeur(self):
104       listeVal=[]
105       return self.valeur
106
107   def clean(self):
108       self.valeur=None
109       for i in range(self.tailleTuple):
110          nomLE="lineEditVal_"+str(i+1)
111          courant=getattr(self,nomLE)
112          courant.setText("")
113
114 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
115   def __init__(self,tailleTuple,parent,parentQt,index):
116       TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
117
118 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
119   def __init__(self,tailleTuple,parent,parentQt,index):
120       TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
121       
122 # ---------------------------- #
123
124
125 class MonWidgetPlusieursTuple(Feuille,GereListe):
126
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
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
142          return
143
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)
146                  
147       self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
148       setattr(self,nomLineEdit,nouveauLE)
149       if valeur != None : nouveauLE.setValeur(valeur)
150
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)
154       self.etablitOrdre()
155
156       # deux lignes pour que le ensureVisible fonctionne
157       self.estVisible=nouveauLE.lineEditVal_1
158       if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
159
160   def etablitOrdre(self):
161       i=0
162       while(i +1 < len(self.listeAffichageWidget)):
163          self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
164          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
165          i=i+1
166
167
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
172        else : aCreer=max 
173
174        if valeurs == () or valeurs == None :
175           for i in range(aCreer): self.ajoutLineEdit(inInit=True)
176           return
177
178        for v in valeurs:
179            self.ajoutLineEdit(v,inInit=True)
180
181        for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
182
183   def rendVisibleLigne(self):
184       qApp.processEvents()
185       self.estVisible.setFocus(True)
186       self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
187
188    
189   def changeValeur(self,changeDePlace=False,oblige=True):
190       #Pour compatibilite signature
191       aLeFocus=self.focusWidget()
192       listeComplete=[]
193
194       libre=False
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== "": 
200              libre=True
201              continue
202           validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
203           if not validite:
204              if comm2 != '' : comm += " " + comm2
205              self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
206              return
207           listeComplete.append(tuple(courant.valeur))
208       if listeComplete == [] : listeComplete=None
209       self.node.item.set_valeur(listeComplete)
210
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 :
215           self.ajoutLineEdit()
216           self.listeAffichageWidget[-2].setFocus(True)
217       else :
218          try :
219            qApp.processEvents()
220            w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
221            w.setFocus(True)
222            self.scrollArea.ensureWidgetVisible(w,0,0)
223          except :
224            pass
225