1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 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 PyQt5.QtWidgets import QFrame, QApplication, QScrollBar
41 from PyQt5.QtCore import QTimer, QSize, Qt
42 from PyQt5.QtGui import QIcon, QPalette
45 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
47 def __init__(self,node,monSimpDef,nom,objSimp,parent,commande):
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()
65 if len(self.listeAAfficher) < 20 : self.frameRecherche2.close()
66 if len(self.listeAAfficher) < 20 : self.frameRecherche.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 icon=QIcon(self.repIcon+"/MoinsBleu.png")
78 self.RBMoins.setIcon(icon)
79 icon=QIcon(self.repIcon+"/PlusBleu.png")
80 self.RBPlus.setIcon(icon)
81 icon=QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
82 self.RBVoisListe.setIcon(icon)
84 self.PBClean.clicked.connect(self.cleanListeResultatFiltre)
85 self.parentQt.commandesLayout.insertWidget(-1,self)
89 def prepareListeResultat(self):
90 for i in self.listeLE: i.close()
92 self.vScrollBar = self.scrollArea.verticalScrollBar()
93 self.listeValeursCourantes=self.node.item.getListeValeurs()
94 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
95 obj=self.node.item.getObject()
96 self.node.item.definition.validators.set_MCSimp(obj)
97 if self.node.item.isValid() == 0 :
99 for item in self.listeValeursCourantes:
100 if self.node.item.definition.validators.verifItem(item)==1: liste.append(item)
101 self.listeAAfficher=self.node.item.getListePossible(liste)
103 self.listeAAfficher=self.node.item.getListePossible([])
105 self.listeAAfficher=self.node.item.getListePossible(self.listeValeursCourantes)
107 if self.listeAAfficher==[] :
111 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
112 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
114 self.politique=PolitiquePlusieurs(self.node,self.editor)
115 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
116 for i in range(len(self.listeAAfficher)):
117 nomLE="lineEditVal"+str(i+1)
118 courant=getattr(self,nomLE)
119 courant.setText(str(self.listeAAfficher[i]))
120 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
121 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
122 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche2') : self.frameRecherche2.close()
125 def setValeurs(self,first=True):
126 self.listeValeursCourantes=self.node.item.getListeValeurs()
128 if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
129 else : aConstruire=self.monSimpDef.max
130 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
131 self.indexDernierLabel = aConstruire
132 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
134 for val in self.listeValeursCourantes :
135 nomLE="LEResultat"+str(index)
136 courant=getattr(self,nomLE)
137 courant.setText(str(val))
138 courant.setReadOnly(True)
140 while (index < self.indexDernierLabel) :
141 nomLE="LEResultat"+str(index)
142 courant=getattr(self,nomLE)
144 courant.setReadOnly(True)
146 #self.prepareListeResultat()
148 def moinsPushed(self):
149 self.ouAjouter=self.ouAjouter-1
150 GereListe.moinsPushed(self)
151 self.setValeurs(first=False)
153 def prepareListeResultatFiltre(self):
154 for i in self.listeRouge :
155 nomLE="lineEditVal"+str(i+1)
156 courant=getattr(self,nomLE)
158 palette = QPalette(Qt.black)
159 palette.setColor(QPalette.WindowText,Qt.black)
160 courant.setPalette(palette)
161 courant.setText(texte)
164 filtre=str(self.LEFiltre.text())
165 if filtre == '' : return
166 for i in range(len(self.listeAAfficher)):
167 nomLE="lineEditVal"+str(i+1)
168 courant=getattr(self,nomLE)
170 if texte.find(filtre) == 0 :
171 palette = QPalette(Qt.red)
172 palette.setColor(QPalette.WindowText,Qt.red)
173 courant.setPalette(palette)
174 courant.setText(texte)
175 self.listeRouge.append(i)
177 def cleanListeResultatFiltre(self):
178 self.LEFiltre.setText('')
179 self.prepareListeResultatFiltre()
181 def ajoutLEResultat (self,index,valeur=None):
182 #print ('ajoutLEResultat', index, valeur)
183 nomLE="LEResultat"+str(index)
184 if not (hasattr(self,nomLE)) :
185 nouveauLE = LECustom(self.scrollAreaRE,self,index)
186 nouveauLE.setFrame(False)
187 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
188 self.ouAjouter=self.ouAjouter+1
189 nouveauLE.setReadOnly(True)
190 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
191 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
192 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
193 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
194 setattr(self,nomLE,nouveauLE)
195 self.estVisibleRE=nouveauLE
197 nouveauLE=getattr(self,nomLE)
199 if valeur == None : nouveauLE.setText("")
200 else : nouveauLE.setText(str(valeur))
202 def ajoutLE(self,index,valeur=None):
204 nomLE="lineEditVal"+str(index)
205 nouveauLE = MonLabelListeClic(self)
206 #self.CBLayout.addWidget(nouveauLE)
207 self.CBLayout.insertWidget(index -1,nouveauLE)
208 self.listeLE.append(nouveauLE)
209 nouveauLE.setFrameShape(QFrame.NoFrame)
210 QApplication.processEvents()
211 nouveauLE.setText("")
212 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
213 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
214 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
216 setattr(self,nomLE,nouveauLE)
218 def ajoutLineEdit(self):
219 #print ('ajoutLineEdit')
220 self.indexDernierLabel=self.indexDernierLabel+1
221 self.ajoutLEResultat (self.indexDernierLabel)
224 def traiteClicSurLabelListe(self,valeur):
225 if valeur == None : return
226 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
227 if validite == 0 : return
228 if liste ==[] : return
231 self.listeValeursCourantes=self.node.item.getListeValeurs()
232 min,max = self.node.item.getMinMax()
233 if len(self.listeValeursCourantes) +1 > max :
234 self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
237 self.editor.afficheInfos("")
240 for i in range(1,self.indexDernierLabel+1):
241 nomLE="LEResultat"+str(i)
242 courant=getattr(self,nomLE)
243 if str(courant.text())==str("") :
244 courant.setText(valeur)
245 courant.setReadOnly(True)
247 self.estVisibleRE=courant
248 QTimer.singleShot(1, self.rendVisibleLigneRE)
252 self.indexDernierLabel = self.indexDernierLabel+1
253 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
254 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
255 QTimer.singleShot(1, self.rendVisibleLigneRE)
257 self.setValeurs(first=False)
259 def changeValeur(self,changeDePlace=False,oblige=False):
260 #def changeValeur(self,changeDePlace=False,oblige=False, numero=None):
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()