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.verifItem(item)==1: liste.append(item)
102 self.listeAAfficher=self.node.item.getListePossible(liste)
104 self.listeAAfficher=self.node.item.getListePossible([])
106 self.listeAAfficher=self.node.item.getListePossible(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)
135 for val in self.listeValeursCourantes :
136 nomLE="LEResultat"+str(index)
137 courant=getattr(self,nomLE)
138 courant.setText(str(val))
139 courant.setReadOnly(True)
141 while (index < self.indexDernierLabel) :
142 nomLE="LEResultat"+str(index)
143 courant=getattr(self,nomLE)
145 courant.setReadOnly(True)
147 #self.prepareListeResultat()
149 def moinsPushed(self):
150 self.ouAjouter=self.ouAjouter-1
151 GereListe.moinsPushed(self)
152 self.setValeurs(first=False)
154 def prepareListeResultatFiltre(self):
155 for i in self.listeRouge :
156 nomLE="lineEditVal"+str(i+1)
157 courant=getattr(self,nomLE)
159 palette = QPalette(Qt.black)
160 palette.setColor(QPalette.WindowText,Qt.black)
161 courant.setPalette(palette)
162 courant.setText(texte)
165 filtre=str(self.LEFiltre.text())
166 if filtre == '' : return
167 for i in range(len(self.listeAAfficher)):
168 nomLE="lineEditVal"+str(i+1)
169 courant=getattr(self,nomLE)
171 if texte.find(filtre) == 0 :
172 palette = QPalette(Qt.red)
173 palette.setColor(QPalette.WindowText,Qt.red)
174 courant.setPalette(palette)
175 courant.setText(texte)
176 self.listeRouge.append(i)
178 def cleanListeResultatFiltre(self):
179 self.LEFiltre.setText('')
180 self.prepareListeResultatFiltre()
182 def ajoutLEResultat (self,index,valeur=None):
183 #print ('ajoutLEResultat', index, valeur)
184 nomLE="LEResultat"+str(index)
185 if not (hasattr(self,nomLE)) :
186 nouveauLE = LECustom(self.scrollAreaRE,self,index)
187 nouveauLE.setFrame(False)
188 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
189 self.ouAjouter=self.ouAjouter+1
190 nouveauLE.setReadOnly(True)
191 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
192 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
193 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
194 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
195 setattr(self,nomLE,nouveauLE)
196 self.estVisibleRE=nouveauLE
198 nouveauLE=getattr(self,nomLE)
200 if valeur == None : nouveauLE.setText("")
201 else : nouveauLE.setText(str(valeur))
203 def ajoutLE(self,index,valeur=None):
205 nomLE="lineEditVal"+str(index)
206 nouveauLE = MonLabelListeClic(self)
207 #self.CBLayout.addWidget(nouveauLE)
208 self.CBLayout.insertWidget(index -1,nouveauLE)
209 self.listeLE.append(nouveauLE)
210 nouveauLE.setFrameShape(QFrame.NoFrame)
211 QApplication.processEvents()
212 nouveauLE.setText("")
213 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
214 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
215 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
217 setattr(self,nomLE,nouveauLE)
219 def ajoutLineEdit(self):
220 print ('ajoutLineEdit')
221 self.indexDernierLabel=self.indexDernierLabel+1
222 self.ajoutLEResultat (self.indexDernierLabel)
225 def traiteClicSurLabelListe(self,valeur):
226 if valeur == None : return
227 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
228 if validite == 0 : return
229 if liste ==[] : return
232 self.listeValeursCourantes=self.node.item.getListeValeurs()
233 min,max = self.node.item.getMinMax()
234 if len(self.listeValeursCourantes) +1 > max :
235 self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
238 self.editor.afficheInfos("")
241 for i in range(1,self.indexDernierLabel+1):
242 nomLE="LEResultat"+str(i)
243 courant=getattr(self,nomLE)
244 if str(courant.text())==str("") :
245 courant.setText(valeur)
246 courant.setReadOnly(True)
248 self.estVisibleRE=courant
249 QTimer.singleShot(1, self.rendVisibleLigneRE)
253 self.indexDernierLabel = self.indexDernierLabel+1
254 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
255 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
256 QTimer.singleShot(1, self.rendVisibleLigneRE)
258 self.setValeurs(first=False)
260 def changeValeur(self,changeDePlace=False,oblige=False):
261 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
263 for i in range(1,self.indexDernierLabel+1):
264 nomLE="LEResultat"+str(i)
265 courant=getattr(self,nomLE)
266 valeur=courant.text()
267 if str(valeur)=="" : continue
268 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
269 listeVal.append(str(valeur))
271 validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(listeVal,-1,[])
274 self.listeValeursCourantes=self.node.item.getListeValeurs()
275 min,max = self.node.item.getMinMax()
276 if len(self.listeValeursCourantes) < min :
277 self.editor.afficheInfos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
279 self.editor.afficheInfos("")
281 if len(listeRetour) == 0 :
282 self.node.item.setValeur(None)
284 self.node.item.setValeur(listeRetour)
286 commentaire=comm+" "+comm2
287 self.editor.afficheInfos(commentaire,Qt.red)
290 def rendVisibleLigneRE(self):
291 QApplication.processEvents()
292 self.estVisibleRE.setFocus()
293 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
295 def rendVisibleLigne(self):
296 self.estVisibleRE=self.estVisible
297 #rendVisibleLigneRE()