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 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 if self.editor.salome :
79 icon=QIcon(self.repIcon+"/MoinsBleu.png")
80 self.RBMoins.setIcon(icon)
81 icon=QIcon(self.repIcon+"/PlusBleu.png")
82 self.RBPlus.setIcon(icon)
83 icon=QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
84 self.RBVoisListe.setIcon(icon)
86 self.PBClean.clicked.connect(self.cleanListeResultatFiltre)
87 self.parentQt.commandesLayout.insertWidget(-1,self)
91 def prepareListeResultat(self):
92 for i in self.listeLE: i.close()
94 self.vScrollBar = self.scrollArea.verticalScrollBar()
95 self.listeValeursCourantes=self.node.item.GetListeValeurs()
96 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
97 obj=self.node.item.getObject()
98 self.node.item.definition.validators.set_MCSimp(obj)
99 if self.node.item.isvalid() == 0 :
101 for item in self.listeValeursCourantes:
102 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
103 self.listeAAfficher=self.node.item.get_liste_possible(liste)
105 self.listeAAfficher=self.node.item.get_liste_possible([])
107 self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
109 if self.listeAAfficher==[] :
113 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
114 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
116 self.politique=PolitiquePlusieurs(self.node,self.editor)
117 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
118 for i in range(len(self.listeAAfficher)):
119 nomLE="lineEditVal"+str(i+1)
120 courant=getattr(self,nomLE)
121 courant.setText(str(self.listeAAfficher[i]))
122 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
123 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
124 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche2') : self.frameRecherche2.close()
127 def setValeurs(self,first=True):
128 self.listeValeursCourantes=self.node.item.GetListeValeurs()
130 if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
131 else : aConstruire=self.monSimpDef.max
132 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
133 self.indexDernierLabel = aConstruire
134 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
135 else : self.indexDernierLabel= len(self.listeValeursCourantes)
137 for val in self.listeValeursCourantes :
138 nomLE="LEResultat"+str(index)
139 courant=getattr(self,nomLE)
140 courant.setText(str(val))
141 courant.setReadOnly(True)
143 #self.prepareListeResultat()
145 def moinsPushed(self):
146 self.ouAjouter=self.ouAjouter-1
147 GereListe.moinsPushed(self)
148 self.setValeurs(first=False)
150 def prepareListeResultatFiltre(self):
151 for i in self.listeRouge :
152 nomLE="lineEditVal"+str(i+1)
153 courant=getattr(self,nomLE)
155 palette = QPalette(Qt.black)
156 palette.setColor(QPalette.WindowText,Qt.black)
157 courant.setPalette(palette)
158 courant.setText(texte)
161 filtre=str(self.LEFiltre.text())
162 if filtre == '' : return
163 for i in range(len(self.listeAAfficher)):
164 nomLE="lineEditVal"+str(i+1)
165 courant=getattr(self,nomLE)
167 if texte.find(filtre) == 0 :
168 palette = QPalette(Qt.red)
169 palette.setColor(QPalette.WindowText,Qt.red)
170 courant.setPalette(palette)
171 courant.setText(texte)
172 self.listeRouge.append(i)
174 def cleanListeResultatFiltre(self):
175 self.LEFiltre.setText('')
176 self.prepareListeResultatFiltre()
178 def ajoutLEResultat (self,index,valeur=None):
179 #print ('ajoutLEResultat', index, valeur)
180 nomLE="LEResultat"+str(index)
181 if not (hasattr(self,nomLE)) :
182 nouveauLE = LECustom(self.scrollAreaRE,self,index)
183 nouveauLE.setFrame(False)
184 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
185 self.ouAjouter=self.ouAjouter+1
186 nouveauLE.setReadOnly(True)
187 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
188 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
189 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
190 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
191 setattr(self,nomLE,nouveauLE)
192 self.estVisibleRE=nouveauLE
194 nouveauLE=getattr(self,nomLE)
196 if valeur == None : nouveauLE.setText("")
197 else : nouveauLE.setText(str(valeur))
199 def ajoutLE(self,index,valeur=None):
201 nomLE="lineEditVal"+str(index)
202 nouveauLE = MonLabelListeClic(self)
203 #self.CBLayout.addWidget(nouveauLE)
204 self.CBLayout.insertWidget(index -1,nouveauLE)
205 self.listeLE.append(nouveauLE)
206 nouveauLE.setFrameShape(QFrame.NoFrame)
207 QApplication.processEvents()
208 nouveauLE.setText("")
209 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
210 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
211 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
213 setattr(self,nomLE,nouveauLE)
215 def ajoutLineEdit(self):
216 #print ('ajoutLineEdit')
217 self.indexDernierLabel=self.indexDernierLabel+1
218 self.ajoutLEResultat (self.indexDernierLabel)
221 def traiteClicSurLabelListe(self,valeur):
222 if valeur == None : return
223 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
224 if validite == 0 : return
225 if liste ==[] : return
228 self.listeValeursCourantes=self.node.item.GetListeValeurs()
229 min,max = self.node.item.GetMinMax()
230 if len(self.listeValeursCourantes) +1 > max :
231 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
234 self.editor.affiche_infos("")
237 for i in range(1,self.indexDernierLabel+1):
238 nomLE="LEResultat"+str(i)
239 courant=getattr(self,nomLE)
240 if str(courant.text())==str("") :
241 courant.setText(valeur)
242 courant.setReadOnly(True)
244 self.estVisibleRE=courant
245 QTimer.singleShot(1, self.rendVisibleLigneRE)
249 self.indexDernierLabel = self.indexDernierLabel+1
250 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
251 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
252 QTimer.singleShot(1, self.rendVisibleLigneRE)
254 self.setValeurs(first=False)
256 def changeValeur(self,changeDePlace=False,oblige=False):
257 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
259 for i in range(1,self.indexDernierLabel+1):
260 nomLE="LEResultat"+str(i)
261 courant=getattr(self,nomLE)
262 valeur=courant.text()
263 if str(valeur)=="" : continue
264 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
265 listeVal.append(str(valeur))
267 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
270 self.listeValeursCourantes=self.node.item.GetListeValeurs()
271 min,max = self.node.item.GetMinMax()
272 if len(self.listeValeursCourantes) < min :
273 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
275 self.editor.affiche_infos("")
277 if len(listeRetour) == 0 :
278 self.node.item.set_valeur(None)
280 self.node.item.set_valeur(listeRetour)
282 commentaire=comm+" "+comm2
283 self.editor.affiche_infos(commentaire,Qt.red)
286 def rendVisibleLigneRE(self):
287 QApplication.processEvents()
288 self.estVisibleRE.setFocus()
289 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)