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 determine import monEnvQT5
26 from PyQt5.QtWidgets import QIcon, QSize, QFrame,QApplication
28 from PyQt4.QtGui import *
29 from PyQt4.QtCore import
31 from Extensions.i18n import tr
34 from feuille import Feuille
35 from politiquesValidation import PolitiquePlusieurs
36 from qtSaisie import SaisieValeur
37 from gereListe import GereListe
38 from gereListe import LECustom
39 from Tuple2 import Ui_Tuple2
40 from Tuple3 import Ui_Tuple3
41 from maMessageBox import maMessageBox
45 def __init__(self,tailleTuple,parent,parentQt,index):
46 QWidget.__init__(self,parent)
48 self.tailleTuple=tailleTuple
50 self.parentQt=parentQt
55 for i in range(self.tailleTuple):
56 nomLE="lineEditVal_"+str(i+1)
57 courant=getattr(self,nomLE)
59 courant.dansUnTuple=True
60 if monEnvQt5 : courant.returnPressed.connect(self.valueChange)
61 else : self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
64 def valueChange(self):
67 for i in range(self.tailleTuple):
68 nomLE="lineEditVal_"+str(i+1)
69 courant=getattr(self,nomLE)
70 val=str(courant.text())
71 if str(val)=="" or val==None :
78 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
82 listeVal.append(valeur)
84 self.parentQt.changeValeur()
87 def setValeur(self,value):
90 for i in range(self.tailleTuple):
91 nomLE="lineEditVal_"+str(i+1)
92 courant=getattr(self,nomLE)
94 if str(value[i]) != "" : valeurNulle=False
99 courant.setText(str(value[i]))
102 val=str(courant.text())
107 d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
111 listeVal.append(valeur)
112 if valeurNulle == True : self.valeur=None
113 else : self.valeur=listeVal
121 def setText(self,value):
122 self.setValeur(value)
126 for i in range(self.tailleTuple):
127 nomLE="lineEditVal_"+str(i+1)
128 courant=getattr(self,nomLE)
131 def finCommentaire(self):
132 return self.finCommentaireListe()
135 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
136 def __init__(self,tailleTuple,parent,parentQt,index):
137 TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
139 class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
140 def __init__(self,tailleTuple,parent,parentQt,index):
141 TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
143 # ---------------------------- #
146 class MonWidgetPlusieursTuple(Feuille,GereListe):
148 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
149 self.indexDernierLabel=0
150 self.nomLine="TupleVal"
151 self.listeAffichageWidget=[]
152 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
153 GereListe.__init__(self)
154 self.finCommentaireListe()
155 self.politique=PolitiquePlusieurs(self.node,self.editor)
156 self.parentQt.commandesLayout.insertWidget(-1,self)
157 if sys.platform[0:5]!="linux":
158 repIcon=self.node.editor.appliEficas.repIcon
159 fichier=os.path.join(repIcon, 'arrow_up.png')
160 icon = QIcon(fichier)
161 self.RBHaut.setIcon(icon)
162 self.RBHaut.setIconSize(QSize(32, 32))
163 fichier2=os.path.join(repIcon, 'arrow_down.png')
164 icon2 = QIcon(fichier2)
165 self.RBBas.setIcon(icon2)
166 fichier3=os.path.join(repIcon, 'file-explorer.png')
167 icon3 = QIcon(fichier3)
168 self.BSelectFichier.setIcon(icon3)
169 self.BSelectFichier.setIconSize(QSize(32, 32))
171 self.BSelectFichier.clicked.connect(self.selectInFile)
173 self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
178 def ajoutLineEdit(self,valeur=None,inInit=False):
179 self.indexDernierLabel=self.indexDernierLabel+1
180 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
181 if hasattr(self,nomLineEdit) :
182 self.indexDernierLabel=self.indexDernierLabel-1
185 if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
186 else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
188 self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
189 setattr(self,nomLineEdit,nouveauLE)
190 if valeur != None : nouveauLE.setValeur(valeur)
192 self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
193 self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
194 if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
197 # deux lignes pour que le ensureVisible fonctionne
198 self.estVisible=nouveauLE.lineEditVal_1
199 if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
201 def etablitOrdre(self):
203 while(i +1 < len(self.listeAffichageWidget)):
204 self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
205 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
209 def setValeurs(self):
211 valeurs=self.node.item.get_valeur()
212 min,max=self.node.item.GetMinMax()
213 if max == "**" or max > 5 : aCreer=5
216 if valeurs == () or valeurs == None :
217 for i in range(aCreer): self.ajoutLineEdit(inInit=True)
221 self.ajoutLineEdit(v,inInit=True)
223 for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
225 def rendVisibleLigne(self):
226 QApplication.processEvents()
227 self.estVisible.setFocus(True)
228 self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
231 def changeValeur(self,changeDePlace=False,oblige=True):
232 #Pour compatibilite signature
233 aLeFocus=self.focusWidget()
237 for i in range(self.indexDernierLabel) :
238 nom=self.nomLine+str(i+1)
239 courant=getattr(self,nom)
240 valeurTuple=courant.valeur
241 if valeurTuple == None or valeurTuple== "":
244 validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
246 if comm2 != '' : comm += " " + comm2
247 self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
249 listeComplete.append(tuple(courant.valeur))
250 if listeComplete == [] : listeComplete=None
251 self.node.item.set_valeur(listeComplete)
253 if changeDePlace : return
254 min,max=self.node.item.GetMinMax()
255 if self.indexDernierLabel == max : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
256 if self.indexDernierLabel < max and libre==False :
258 self.listeAffichageWidget[-2].setFocus(True)
261 QApplication.processEvents()
262 w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
264 self.scrollArea.ensureWidgetVisible(w,0,0)
268 def ajoutNValeur(self,liste):
269 if len(liste)%self.nbValeurs != 0 :
270 texte="Nombre incorrect de valeurs"
271 self.editor.affiche_infos(tr(texte),Qt.red)
273 min,max=self.node.item.GetMinMax()
274 if self.objSimp.valeur == None : l = len(liste) and self.objSimp.valeur
275 else : l = len(liste)+len(self.objSimp.valeur)
277 texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
278 self.editor.affiche_infos(texte,Qt.red)
280 while ( i < len(liste) ) :
281 if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
282 else : indexDernierRempli=0
284 t=tuple(liste[i:i+self.nbValeurs])
287 t=tuple(liste[i:len(liste)])
288 if indexDernierRempli < self.indexDernierLabel:
289 nomLineEdit=self.nomLine+str(indexDernierRempli+1)
290 LEARemplir=getattr(self,nomLineEdit)
291 LEARemplir.lineEditVal_1.setText(str(t[0]))
292 LEARemplir.lineEditVal_2.setText(str(t[1]))
293 if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
294 LEARemplir.valueChange()
296 self.ajoutLineEdit(t,False)
297 nomLineEdit=self.nomLine+str(self.indexDernierLabel)
298 LEARemplir=getattr(self,nomLineEdit)
299 LEARemplir.valueChange()
301 def RBListePush(self):
302 # PN a rendre generique avec un truc tel prerempli
303 if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
304 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
306 for k in self.objSimp.jdc.LineDico.keys() :
308 valeur=self.objSimp.jdc.get_concept(k)
309 val.append((valeur,0))
312 self.node.item.set_valeur(val)
313 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
315 for k in self.objSimp.jdc.MachineDico.keys() :
317 valeur=self.objSimp.jdc.get_concept(k)
318 val.append((valeur,0))
321 self.node.item.set_valeur(val)
322 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
324 for k in self.objSimp.jdc.TransfoDico.keys() :
326 valeur=self.objSimp.jdc.get_concept(k)
327 val.append((valeur,0))
330 self.node.item.set_valeur(val)
331 if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
333 for k in self.objSimp.jdc.LoadDico.keys() :
335 valeur=self.objSimp.jdc.get_concept(k)
336 val.append((valeur,0))
339 self.node.item.set_valeur(val)