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 self.nomLine="LEResultat"
50 self.NumLineEditEnCours=0
53 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commande)
54 GereListe.__init__(self)
55 self.finCommentaireListe()
57 self.listeValeursCourantes=self.node.item.GetListeValeurs()
59 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
61 # cas ou on ne peut rien ajouter
63 self.prepareListeResultat()
64 if len(self.listeAAfficher) < 8 :
65 self.frameRecherche1.close()
66 self.frameRecherche2.close()
68 if sys.platform[0:5]!="linux":
69 repIcon=self.node.editor.appliEficas.repIcon
70 fichier=os.path.join(repIcon, 'arrow_up.png')
72 self.RBHaut.setIcon(icon)
73 self.RBHaut.setIconSize(QSize(32, 32))
74 fichier2=os.path.join(repIcon, 'arrow_down.png')
75 icon2 = QIcon(fichier2)
76 self.RBBas.setIcon(icon2)
77 self.parentQt.commandesLayout.insertWidget(-1,self)
80 def prepareListeResultat(self):
81 for i in self.listeLE: i.close()
83 self.vScrollBar = self.scrollArea.verticalScrollBar()
84 self.listeValeursCourantes=self.node.item.GetListeValeurs()
85 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
86 obj=self.node.item.getObject()
87 self.node.item.definition.validators.set_MCSimp(obj)
88 if self.node.item.isvalid() == 0 :
90 for item in self.listeValeursCourantes:
91 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
92 self.listeAAfficher=self.node.item.get_liste_possible(liste)
94 self.listeAAfficher=self.node.item.get_liste_possible([])
96 self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
98 if self.listeAAfficher==[] :
102 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
103 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
105 self.politique=PolitiquePlusieurs(self.node,self.editor)
106 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
107 for i in range(len(self.listeAAfficher)):
108 nomLE="lineEditVal"+str(i+1)
109 courant=getattr(self,nomLE)
110 courant.setText(str(self.listeAAfficher[i]))
111 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
114 def setValeurs(self):
115 self.listeValeursCourantes=self.node.item.GetListeValeurs()
116 if self.monSimpDef.max == "**" : aConstruire=7
117 else : aConstruire=self.monSimpDef.max
118 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
119 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
120 self.indexDernierLabel=aConstruire
122 for val in self.listeValeursCourantes :
123 nomLE="LEResultat"+str(index)
124 courant=getattr(self,nomLE)
125 courant.setText(str(val))
126 courant.setReadOnly(True)
128 self.prepareListeResultat()
130 def moinsPushed(self):
131 self.ouAjouter=self.ouAjouter-1
132 GereListe.moinsPushed(self)
136 def ajoutLEResultat (self,index,valeur=None):
137 nomLE="LEResultat"+str(index)
138 if hasattr(self,nomLE) : return
139 nouveauLE = LECustom(self.scrollAreaRE,self,index)
140 nouveauLE.setFrame(False)
141 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
142 self.ouAjouter=self.ouAjouter+1
143 nouveauLE.setText("")
144 nouveauLE.setReadOnly(True)
145 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
146 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
147 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
148 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
149 setattr(self,nomLE,nouveauLE)
150 self.estVisibleRE=nouveauLE
152 nouveauLE.setText(valeur)
154 def ajoutLE(self,index,valeur=None):
155 nomLE="lineEditVal"+str(index)
156 nouveauLE = MonLabelListeClic(self)
157 #self.CBLayout.addWidget(nouveauLE)
158 self.CBLayout.insertWidget(index -1,nouveauLE)
159 self.listeLE.append(nouveauLE)
160 nouveauLE.setFrameShape(QFrame.NoFrame)
161 QApplication.processEvents()
162 nouveauLE.setText("")
163 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
164 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
165 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
167 setattr(self,nomLE,nouveauLE)
169 def ajoutLineEdit(self):
170 self.ajoutLEResultat (self.indexDernierLabel)
173 def traiteClicSurLabelListe(self,valeur):
174 if valeur == None : return
175 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
176 if validite == 0 : return
177 if liste ==[] : return
180 self.listeValeursCourantes=self.node.item.GetListeValeurs()
181 min,max = self.node.item.GetMinMax()
182 if len(self.listeValeursCourantes) +1 > max :
183 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
186 self.editor.affiche_infos("")
189 for i in range(1,self.indexDernierLabel+1):
190 nomLE="LEResultat"+str(i)
191 courant=getattr(self,nomLE)
192 if str(courant.text())==str("") :
193 courant.setText(valeur)
194 courant.setReadOnly(True)
196 self.estVisibleRE=courant
197 QTimer.singleShot(1, self.rendVisibleLigneRE)
201 self.indexDernierLabel = self.indexDernierLabel+1
202 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
203 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
204 QTimer.singleShot(1, self.rendVisibleLigneRE)
208 def changeValeur(self,changeDePlace=False,oblige=False):
209 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
211 for i in range(1,self.indexDernierLabel+1):
212 nomLE="LEResultat"+str(i)
213 courant=getattr(self,nomLE)
214 valeur=courant.text()
215 if str(valeur)=="" : continue
216 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
217 listeVal.append(str(valeur))
219 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
222 self.listeValeursCourantes=self.node.item.GetListeValeurs()
223 min,max = self.node.item.GetMinMax()
224 if len(self.listeValeursCourantes) < min :
225 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
227 self.editor.affiche_infos("")
229 if len(listeRetour) == 0 :
230 self.node.item.set_valeur(None)
232 self.node.item.set_valeur(listeRetour)
234 commentaire=comm+" "+comm2
235 self.editor.affiche_infos(commentaire,Qt.red)
238 def rendVisibleLigneRE(self):
239 QApplication.processEvents()
240 self.estVisibleRE.setFocus()
241 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)