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 desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne
30 from politiquesValidation import PolitiquePlusieurs
31 from qtSaisie import SaisieValeur
32 from gereListe import GereListe
33 from gereListe import GerePlie
34 from gereListe import LECustom
35 from gereListe import MonLabelListeClic
39 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
41 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
42 #print "MonWidgetPlusieursInto", nom, self
43 self.nomLine="LEResultat"
46 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
47 GereListe.__init__(self)
48 self.initCommentaire()
51 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
53 # cas ou on ne peut rien ajouter
55 self.prepareListeResultat()
57 if sys.platform[0:5]!="linux":
58 repIcon=self.node.editor.appliEficas.repIcon
59 fichier=os.path.join(repIcon, 'arrow_up.png')
61 self.RBHaut.setIcon(icon)
62 self.RBHaut.setIconSize(QSize(32, 32))
63 fichier2=os.path.join(repIcon, 'arrow_down.png')
64 icon2 = QIcon(fichier2)
65 self.RBBas.setIcon(icon2)
66 self.parentQt.commandesLayout.insertWidget(-1,self)
69 def prepareListeResultat(self):
70 for i in self.listeLE: i.close()
72 self.vScrollBar = self.scrollArea.verticalScrollBar()
73 listeValeursCourantes=self.node.item.GetListeValeurs()
74 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
75 obj=self.node.item.getObject()
76 self.node.item.definition.validators.set_MCSimp(obj)
77 if self.node.item.isvalid() == 0 :
79 for item in listeValeursCourantes:
80 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
81 self.listeAAfficher=self.node.item.get_liste_possible(liste)
83 self.listeAAfficher=self.node.item.get_liste_possible([])
85 self.listeAAfficher=self.node.item.get_liste_possible(listeValeursCourantes)
87 if self.listeAAfficher==[] :
90 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
91 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
93 self.politique=PolitiquePlusieurs(self.node,self.editor)
94 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
95 for i in range(len(self.listeAAfficher)):
96 nomLE="lineEditVal"+str(i+1)
97 courant=getattr(self,nomLE)
98 courant.setText(str(self.listeAAfficher[i]))
99 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
102 def setValeurs(self):
103 listeValeursCourantes=self.node.item.GetListeValeurs()
104 if self.monSimpDef.max == "**" : aConstruire=7
105 else : aConstruire=self.monSimpDef.max
106 if len(listeValeursCourantes) > aConstruire : aConstruire=len(listeValeursCourantes)
107 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
108 self.indexDernierLabel=aConstruire
110 for val in listeValeursCourantes :
111 nomLE="LEResultat"+str(index)
112 courant=getattr(self,nomLE)
113 courant.setText(str(val))
114 courant.setReadOnly(True)
116 self.prepareListeResultat()
118 def moinsPushed(self):
119 self.ouAjouter=self.ouAjouter-1
120 GereListe.moinsPushed(self)
124 def ajoutLEResultat (self,index,valeur=None):
125 nomLE="LEResultat"+str(index)
126 if hasattr(self,nomLE) : return
127 nouveauLE = LECustom(self.scrollAreaRE,self,index)
128 nouveauLE.setFrame(False)
129 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
130 self.ouAjouter=self.ouAjouter+1
131 nouveauLE.setText("")
132 nouveauLE.setReadOnly(True)
133 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
134 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
135 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
136 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
137 setattr(self,nomLE,nouveauLE)
138 self.estVisibleRE=nouveauLE
140 nouveauLE.setText(valeur)
142 def ajoutLE(self,index,valeur=None):
143 nomLE="lineEditVal"+str(index)
144 nouveauLE = MonLabelListeClic(self)
145 #self.CBLayout.addWidget(nouveauLE)
146 self.CBLayout.insertWidget(index -1,nouveauLE)
147 self.listeLE.append(nouveauLE)
148 nouveauLE.setFrameShape(QFrame.NoFrame)
150 nouveauLE.setText("")
151 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
152 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
153 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
155 setattr(self,nomLE,nouveauLE)
159 def traiteClicSurLabelListe(self,valeur):
160 if valeur == None : return
161 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
162 if validite == 0 : return
163 if liste ==[] : return
166 listeValeursCourantes=self.node.item.GetListeValeurs()
167 min,max = self.node.item.GetMinMax()
168 if len(listeValeursCourantes) +1 > max :
169 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
172 self.editor.affiche_infos(tr(""))
175 for i in range(1,self.indexDernierLabel+1):
176 nomLE="LEResultat"+str(i)
177 courant=getattr(self,nomLE)
178 if str(courant.text())==str("") :
179 courant.setText(valeur)
180 courant.setReadOnly(True)
182 self.estVisibleRE=courant
183 QTimer.singleShot(1, self.rendVisibleLigneRE)
187 self.indexDernierLabel = self.indexDernierLabel+1
188 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
189 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
190 QTimer.singleShot(1, self.rendVisibleLigneRE)
194 def changeValeur(self,changeDePlace=False,oblige=False):
195 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
197 for i in range(1,self.indexDernierLabel+1):
198 nomLE="LEResultat"+str(i)
199 courant=getattr(self,nomLE)
200 valeur=courant.text()
201 if str(valeur)=="" : continue
202 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
203 listeVal.append(str(valeur))
205 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
208 listeValeursCourantes=self.node.item.GetListeValeurs()
209 min,max = self.node.item.GetMinMax()
210 if len(listeValeursCourantes) < min :
211 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
213 self.editor.affiche_infos("")
215 if len(listeRetour) == 0 :
216 self.node.item.set_valeur(None)
218 self.node.item.set_valeur(listeRetour)
220 commentaire=comm+" "+comm2
221 self.editor.affiche_infos(commentaire,Qt.red)
224 def rendVisibleLigneRE(self):
226 self.estVisibleRE.setFocus()
227 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
229 def initCommentaire(self):
231 mc = self.node.item.get_definition()
232 d_aides = { 'TXM' : 'chaînes\n',
237 if not d_aides.has_key(type) :
239 commentaire=tr("Entrez ")+str(mc.min)+(" valeurs \n ")
241 commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")
244 if type == 'TXM' : aide=tr('chaines \n')
245 if type == 'R' : aide=tr('reels\n')
246 if type == 'I' : aide=tr('entiers\n')
247 if type == 'C' : aide=tr('complexes\n')
249 commentaire=tr("Entrez ")+str(mc.min)+" "+ aide
251 commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)+" "+aide
252 aideval=self.node.item.aide()
253 commentaire=commentaire + (aideval)
254 self.monCommentaireLabel.setText(commentaire)