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 feuille import Feuille
25 from desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne
26 from politiquesValidation import PolitiquePlusieurs
27 from qtSaisie import SaisieValeur
28 from gereListe import GereListe
29 from gereListe import GerePlie
30 from gereListe import LECustom
31 from gereListe import MonLabelListeClic
32 from Extensions.i18n import tr
34 from determine import monEnvQT5
36 from PyQt5.QtWidgets import QFrame, QApplication, QScrollBar
37 from PyQt5.QtCore import QTimer, QSize, Qt
38 from PyQt5.QtGui import QIcon
40 from PyQt4.QtGui import *
41 from PyQt4.QtCore import *
44 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
46 def __init__(self,node,monSimpDef,nom,objSimp,parent,commande):
47 print "MonWidgetPlusieursInto", nom, self
48 self.nomLine="LEResultat"
51 self.NumLineEditEnCours=0
54 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commande)
55 GereListe.__init__(self)
56 self.finCommentaireListe()
58 self.listeValeursCourantes=self.node.item.GetListeValeurs()
60 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
62 # cas ou on ne peut rien ajouter
64 self.prepareListeResultat()
66 if sys.platform[0:5]!="linux":
67 repIcon=self.node.editor.appliEficas.repIcon
68 fichier=os.path.join(repIcon, 'arrow_up.png')
70 self.RBHaut.setIcon(icon)
71 self.RBHaut.setIconSize(QSize(32, 32))
72 fichier2=os.path.join(repIcon, 'arrow_down.png')
73 icon2 = QIcon(fichier2)
74 self.RBBas.setIcon(icon2)
75 self.parentQt.commandesLayout.insertWidget(-1,self)
78 def prepareListeResultat(self):
79 for i in self.listeLE: i.close()
81 self.vScrollBar = self.scrollArea.verticalScrollBar()
82 self.listeValeursCourantes=self.node.item.GetListeValeurs()
83 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
84 obj=self.node.item.getObject()
85 self.node.item.definition.validators.set_MCSimp(obj)
86 if self.node.item.isvalid() == 0 :
88 for item in self.listeValeursCourantes:
89 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
90 self.listeAAfficher=self.node.item.get_liste_possible(liste)
92 self.listeAAfficher=self.node.item.get_liste_possible([])
94 self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
96 if self.listeAAfficher==[] :
100 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
101 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
103 self.politique=PolitiquePlusieurs(self.node,self.editor)
104 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
105 for i in range(len(self.listeAAfficher)):
106 nomLE="lineEditVal"+str(i+1)
107 courant=getattr(self,nomLE)
108 courant.setText(str(self.listeAAfficher[i]))
109 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
112 def setValeurs(self):
113 self.listeValeursCourantes=self.node.item.GetListeValeurs()
114 if self.monSimpDef.max == "**" : aConstruire=7
115 else : aConstruire=self.monSimpDef.max
116 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
117 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
118 self.indexDernierLabel=aConstruire
120 for val in self.listeValeursCourantes :
121 nomLE="LEResultat"+str(index)
122 courant=getattr(self,nomLE)
123 courant.setText(str(val))
124 courant.setReadOnly(True)
126 self.prepareListeResultat()
128 def moinsPushed(self):
129 self.ouAjouter=self.ouAjouter-1
130 GereListe.moinsPushed(self)
134 def ajoutLEResultat (self,index,valeur=None):
135 nomLE="LEResultat"+str(index)
136 if hasattr(self,nomLE) : return
137 nouveauLE = LECustom(self.scrollAreaRE,self,index)
138 nouveauLE.setFrame(False)
139 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
140 self.ouAjouter=self.ouAjouter+1
141 nouveauLE.setText("")
142 nouveauLE.setReadOnly(True)
143 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
144 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
145 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
146 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
147 setattr(self,nomLE,nouveauLE)
148 self.estVisibleRE=nouveauLE
150 nouveauLE.setText(valeur)
152 def ajoutLE(self,index,valeur=None):
153 nomLE="lineEditVal"+str(index)
154 nouveauLE = MonLabelListeClic(self)
155 #self.CBLayout.addWidget(nouveauLE)
156 self.CBLayout.insertWidget(index -1,nouveauLE)
157 self.listeLE.append(nouveauLE)
158 nouveauLE.setFrameShape(QFrame.NoFrame)
159 QApplication.processEvents()
160 nouveauLE.setText("")
161 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
162 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
163 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
165 setattr(self,nomLE,nouveauLE)
167 def ajoutLineEdit(self):
168 self.ajoutLEResultat (self.indexDernierLabel)
171 def traiteClicSurLabelListe(self,valeur):
172 if valeur == None : return
173 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
174 if validite == 0 : return
175 if liste ==[] : return
178 self.listeValeursCourantes=self.node.item.GetListeValeurs()
179 min,max = self.node.item.GetMinMax()
180 if len(self.listeValeursCourantes) +1 > max :
181 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
184 self.editor.affiche_infos("")
187 for i in range(1,self.indexDernierLabel+1):
188 nomLE="LEResultat"+str(i)
189 courant=getattr(self,nomLE)
190 if str(courant.text())==str("") :
191 courant.setText(valeur)
192 courant.setReadOnly(True)
194 self.estVisibleRE=courant
195 QTimer.singleShot(1, self.rendVisibleLigneRE)
199 self.indexDernierLabel = self.indexDernierLabel+1
200 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
201 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
202 QTimer.singleShot(1, self.rendVisibleLigneRE)
206 def changeValeur(self,changeDePlace=False,oblige=False):
207 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
209 for i in range(1,self.indexDernierLabel+1):
210 nomLE="LEResultat"+str(i)
211 courant=getattr(self,nomLE)
212 valeur=courant.text()
213 if str(valeur)=="" : continue
214 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
215 listeVal.append(str(valeur))
217 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
220 self.listeValeursCourantes=self.node.item.GetListeValeurs()
221 min,max = self.node.item.GetMinMax()
222 if len(self.listeValeursCourantes) < min :
223 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
225 self.editor.affiche_infos("")
227 if len(listeRetour) == 0 :
228 self.node.item.set_valeur(None)
230 self.node.item.set_valeur(listeRetour)
232 commentaire=comm+" "+comm2
233 self.editor.affiche_infos(commentaire,Qt.red)
236 def rendVisibleLigneRE(self):
237 QApplication.processEvents()
238 self.estVisibleRE.setFocus()
239 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)