1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017 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 from __future__ import absolute_import
23 from builtins import str
24 from builtins import range
30 from .feuille import Feuille
31 from desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne
32 from .politiquesValidation import PolitiquePlusieurs
33 from .qtSaisie import SaisieValeur
34 from .gereListe import GereListe
35 from .gereListe import GerePlie
36 from .gereListe import LECustom
37 from .gereListe import MonLabelListeClic
38 from Extensions.i18n import tr
40 from six.moves import range
41 from PyQt5.QtWidgets import QFrame, QApplication, QScrollBar
42 from PyQt5.QtCore import QTimer, QSize, Qt
43 from PyQt5.QtGui import QIcon, QPalette
46 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
48 def __init__(self,node,monSimpDef,nom,objSimp,parent,commande):
49 self.nomLine="LEResultat"
52 self.NumLineEditEnCours=0
55 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commande)
56 GereListe.__init__(self)
57 #self.finCommentaireListe()
59 self.listeValeursCourantes=self.node.item.GetListeValeurs()
61 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
63 # cas ou on ne peut rien ajouter
65 self.prepareListeResultat()
66 if len(self.listeAAfficher) < 20 : self.frameRecherche2.close()
67 if len(self.listeAAfficher) < 20 : self.frameRecherche.close()
69 if sys.platform[0:5]!="linux":
70 repIcon=self.node.editor.appliEficas.repIcon
71 fichier=os.path.join(repIcon, 'arrow_up.png')
73 self.RBHaut.setIcon(icon)
74 self.RBHaut.setIconSize(QSize(32, 32))
75 fichier2=os.path.join(repIcon, 'arrow_down.png')
76 icon2 = QIcon(fichier2)
77 self.RBBas.setIcon(icon2)
78 icon=QIcon(self.repIcon+"/MoinsBleu.png")
79 self.RBMoins.setIcon(icon)
80 icon=QIcon(self.repIcon+"/PlusBleu.png")
81 self.RBPlus.setIcon(icon)
82 icon=QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
83 self.RBVoisListe.setIcon(icon)
85 self.PBClean.clicked.connect(self.cleanListeResultatFiltre)
86 self.parentQt.commandesLayout.insertWidget(-1,self)
90 def prepareListeResultat(self):
91 for i in self.listeLE: i.close()
93 self.vScrollBar = self.scrollArea.verticalScrollBar()
94 self.listeValeursCourantes=self.node.item.GetListeValeurs()
95 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
96 obj=self.node.item.getObject()
97 self.node.item.definition.validators.set_MCSimp(obj)
98 if self.node.item.isvalid() == 0 :
100 for item in self.listeValeursCourantes:
101 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
102 self.listeAAfficher=self.node.item.get_liste_possible(liste)
104 self.listeAAfficher=self.node.item.get_liste_possible([])
106 self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
108 if self.listeAAfficher==[] :
112 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
113 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
115 self.politique=PolitiquePlusieurs(self.node,self.editor)
116 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
117 for i in range(len(self.listeAAfficher)):
118 nomLE="lineEditVal"+str(i+1)
119 courant=getattr(self,nomLE)
120 courant.setText(str(self.listeAAfficher[i]))
121 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
122 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
123 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche2') : self.frameRecherche2.close()
126 def setValeurs(self,first=True):
127 self.listeValeursCourantes=self.node.item.GetListeValeurs()
129 if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
130 else : aConstruire=self.monSimpDef.max
131 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
132 self.indexDernierLabel = aConstruire
133 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
134 else : self.indexDernierLabel= len(self.listeValeursCourantes)
136 for val in self.listeValeursCourantes :
137 nomLE="LEResultat"+str(index)
138 courant=getattr(self,nomLE)
139 courant.setText(str(val))
140 courant.setReadOnly(True)
142 #self.prepareListeResultat()
144 def moinsPushed(self):
145 self.ouAjouter=self.ouAjouter-1
146 GereListe.moinsPushed(self)
147 self.setValeurs(first=False)
149 def prepareListeResultatFiltre(self):
150 for i in self.listeRouge :
151 nomLE="lineEditVal"+str(i+1)
152 courant=getattr(self,nomLE)
154 palette = QPalette(Qt.black)
155 palette.setColor(QPalette.WindowText,Qt.black)
156 courant.setPalette(palette)
157 courant.setText(texte)
160 filtre=str(self.LEFiltre.text())
161 if filtre == '' : return
162 for i in range(len(self.listeAAfficher)):
163 nomLE="lineEditVal"+str(i+1)
164 courant=getattr(self,nomLE)
166 if texte.find(filtre) == 0 :
167 palette = QPalette(Qt.red)
168 palette.setColor(QPalette.WindowText,Qt.red)
169 courant.setPalette(palette)
170 courant.setText(texte)
171 self.listeRouge.append(i)
173 def cleanListeResultatFiltre(self):
174 self.LEFiltre.setText('')
175 self.prepareListeResultatFiltre()
177 def ajoutLEResultat (self,index,valeur=None):
178 #print ('ajoutLEResultat', index, valeur)
179 nomLE="LEResultat"+str(index)
180 if not (hasattr(self,nomLE)) :
181 nouveauLE = LECustom(self.scrollAreaRE,self,index)
182 nouveauLE.setFrame(False)
183 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
184 self.ouAjouter=self.ouAjouter+1
185 nouveauLE.setReadOnly(True)
186 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
187 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
188 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
189 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
190 setattr(self,nomLE,nouveauLE)
191 self.estVisibleRE=nouveauLE
193 nouveauLE=getattr(self,nomLE)
195 if valeur == None : nouveauLE.setText("")
196 else : nouveauLE.setText(str(valeur))
198 def ajoutLE(self,index,valeur=None):
200 nomLE="lineEditVal"+str(index)
201 nouveauLE = MonLabelListeClic(self)
202 #self.CBLayout.addWidget(nouveauLE)
203 self.CBLayout.insertWidget(index -1,nouveauLE)
204 self.listeLE.append(nouveauLE)
205 nouveauLE.setFrameShape(QFrame.NoFrame)
206 QApplication.processEvents()
207 nouveauLE.setText("")
208 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
209 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
210 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
212 setattr(self,nomLE,nouveauLE)
214 def ajoutLineEdit(self):
215 #print ('ajoutLineEdit')
216 self.indexDernierLabel=self.indexDernierLabel+1
217 self.ajoutLEResultat (self.indexDernierLabel)
220 def traiteClicSurLabelListe(self,valeur):
221 if valeur == None : return
222 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
223 if validite == 0 : return
224 if liste ==[] : return
227 self.listeValeursCourantes=self.node.item.GetListeValeurs()
228 min,max = self.node.item.GetMinMax()
229 if len(self.listeValeursCourantes) +1 > max :
230 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
233 self.editor.affiche_infos("")
236 for i in range(1,self.indexDernierLabel+1):
237 nomLE="LEResultat"+str(i)
238 courant=getattr(self,nomLE)
239 if str(courant.text())==str("") :
240 courant.setText(valeur)
241 courant.setReadOnly(True)
243 self.estVisibleRE=courant
244 QTimer.singleShot(1, self.rendVisibleLigneRE)
248 self.indexDernierLabel = self.indexDernierLabel+1
249 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
250 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
251 QTimer.singleShot(1, self.rendVisibleLigneRE)
253 self.setValeurs(first=False)
255 def changeValeur(self,changeDePlace=False,oblige=False):
256 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
258 for i in range(1,self.indexDernierLabel+1):
259 nomLE="LEResultat"+str(i)
260 courant=getattr(self,nomLE)
261 valeur=courant.text()
262 if str(valeur)=="" : continue
263 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
264 listeVal.append(str(valeur))
266 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
269 self.listeValeursCourantes=self.node.item.GetListeValeurs()
270 min,max = self.node.item.GetMinMax()
271 if len(self.listeValeursCourantes) < min :
272 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
274 self.editor.affiche_infos("")
276 if len(listeRetour) == 0 :
277 self.node.item.set_valeur(None)
279 self.node.item.set_valeur(listeRetour)
281 commentaire=comm+" "+comm2
282 self.editor.affiche_infos(commentaire,Qt.red)
285 def rendVisibleLigneRE(self):
286 QApplication.processEvents()
287 self.estVisibleRE.setFocus()
288 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)