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 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()
67 if sys.platform[0:5]!="linux":
68 repIcon=self.node.editor.appliEficas.repIcon
69 fichier=os.path.join(repIcon, 'arrow_up.png')
71 self.RBHaut.setIcon(icon)
72 self.RBHaut.setIconSize(QSize(32, 32))
73 fichier2=os.path.join(repIcon, 'arrow_down.png')
74 icon2 = QIcon(fichier2)
75 self.RBBas.setIcon(icon2)
76 icon=QIcon(self.repIcon+"/MoinsBleu.png")
77 self.RBMoins.setIcon(icon)
78 icon=QIcon(self.repIcon+"/PlusBleu.png")
79 self.RBPlus.setIcon(icon)
80 icon=QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
81 self.RBVoisListe.setIcon(icon)
83 self.PBClean.clicked.connect(self.cleanListeResultatFiltre)
84 self.parentQt.commandesLayout.insertWidget(-1,self)
88 def prepareListeResultat(self):
89 for i in self.listeLE: i.close()
91 self.vScrollBar = self.scrollArea.verticalScrollBar()
92 self.listeValeursCourantes=self.node.item.getListeValeurs()
93 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
94 obj=self.node.item.getObject()
95 self.node.item.definition.validators.set_MCSimp(obj)
96 if self.node.item.isValid() == 0 :
98 for item in self.listeValeursCourantes:
99 if self.node.item.definition.validators.verifItem(item)==1: liste.append(item)
100 self.listeAAfficher=self.node.item.getListePossible(liste)
102 self.listeAAfficher=self.node.item.getListePossible([])
104 self.listeAAfficher=self.node.item.getListePossible(self.listeValeursCourantes)
106 if self.listeAAfficher==[] :
110 if len(self.listeAAfficher)*30 > 400 : self.setMinimumHeight(400)
112 if self.monSimpDef.min > len(self.listeAAfficher) : self.setMinimumHeight(self.monSimpDef.min*30+30)
113 if self.monSimpDef.max > len(self.listeAAfficher) : self.setMinimumHeight(180)
114 else : self.setMinimumHeight(len(self.listeAAfficher)*30+30)
117 self.politique=PolitiquePlusieurs(self.node,self.editor)
118 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
119 for i in range(len(self.listeAAfficher)):
120 nomLE="lineEditVal"+str(i+1)
121 courant=getattr(self,nomLE)
122 courant.setText(str(self.listeAAfficher[i]))
123 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
124 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
125 if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche2') : self.frameRecherche2.close()
128 def setValeurs(self,first=True):
129 self.listeValeursCourantes=self.node.item.getListeValeurs()
131 if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
132 else : aConstruire=self.monSimpDef.max
133 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
134 self.indexDernierLabel = aConstruire
135 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
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 while (index < self.indexDernierLabel) :
144 nomLE="LEResultat"+str(index)
145 courant=getattr(self,nomLE)
147 courant.setReadOnly(True)
149 #self.prepareListeResultat()
151 def moinsPushed(self):
152 self.ouAjouter=self.ouAjouter-1
153 GereListe.moinsPushed(self)
154 self.setValeurs(first=False)
156 def prepareListeResultatFiltre(self):
157 for i in self.listeRouge :
158 nomLE="lineEditVal"+str(i+1)
159 courant=getattr(self,nomLE)
161 palette = QPalette(Qt.black)
162 palette.setColor(QPalette.WindowText,Qt.black)
163 courant.setPalette(palette)
164 courant.setText(texte)
167 filtre=str(self.LEFiltre.text())
168 if filtre == '' : return
169 for i in range(len(self.listeAAfficher)):
170 nomLE="lineEditVal"+str(i+1)
171 courant=getattr(self,nomLE)
173 if texte.find(filtre) == 0 :
174 palette = QPalette(Qt.red)
175 palette.setColor(QPalette.WindowText,Qt.red)
176 courant.setPalette(palette)
177 courant.setText(texte)
178 self.listeRouge.append(i)
180 def cleanListeResultatFiltre(self):
181 self.LEFiltre.setText('')
182 self.prepareListeResultatFiltre()
184 def ajoutLEResultat (self,index,valeur=None):
185 #print ('ajoutLEResultat', index, valeur)
186 nomLE="LEResultat"+str(index)
187 if not (hasattr(self,nomLE)) :
188 nouveauLE = LECustom(self.scrollAreaRE,self,index)
189 nouveauLE.setFrame(False)
190 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
191 self.ouAjouter=self.ouAjouter+1
192 nouveauLE.setReadOnly(True)
193 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
194 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
195 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
196 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
197 setattr(self,nomLE,nouveauLE)
198 self.estVisibleRE=nouveauLE
200 nouveauLE=getattr(self,nomLE)
202 if valeur == None : nouveauLE.setText("")
203 else : nouveauLE.setText(str(valeur))
205 def ajoutLE(self,index,valeur=None):
207 nomLE="lineEditVal"+str(index)
208 nouveauLE = MonLabelListeClic(self)
209 #self.CBLayout.addWidget(nouveauLE)
210 self.CBLayout.insertWidget(index -1,nouveauLE)
211 self.listeLE.append(nouveauLE)
212 nouveauLE.setFrameShape(QFrame.NoFrame)
213 QApplication.processEvents()
214 nouveauLE.setText("")
215 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
216 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
217 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
219 setattr(self,nomLE,nouveauLE)
221 def ajoutLineEdit(self):
222 #print ('ajoutLineEdit')
223 self.indexDernierLabel=self.indexDernierLabel+1
224 self.ajoutLEResultat (self.indexDernierLabel)
227 def traiteClicSurLabelListe(self,valeur):
228 if valeur == None : return
229 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
230 if validite == 0 : return
231 if liste ==[] : return
234 self.listeValeursCourantes=self.node.item.getListeValeurs()
235 min,max = self.node.item.getMinMax()
236 if len(self.listeValeursCourantes) +1 > max :
237 self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
240 self.editor.afficheInfos("")
243 for i in range(1,self.indexDernierLabel+1):
244 nomLE="LEResultat"+str(i)
245 courant=getattr(self,nomLE)
246 if str(courant.text())==str("") :
247 courant.setText(valeur)
248 courant.setReadOnly(True)
250 self.estVisibleRE=courant
251 QTimer.singleShot(1, self.rendVisibleLigneRE)
255 self.indexDernierLabel = self.indexDernierLabel+1
256 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
257 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
258 QTimer.singleShot(1, self.rendVisibleLigneRE)
260 self.setValeurs(first=False)
262 def changeValeur(self,changeDePlace=False,oblige=False, numero=None):
263 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
265 for i in range(1,self.indexDernierLabel+1):
266 nomLE="LEResultat"+str(i)
267 courant=getattr(self,nomLE)
268 valeur=courant.text()
269 if str(valeur)=="" : continue
270 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
271 listeVal.append(str(valeur))
273 validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(listeVal,-1,[])
276 self.listeValeursCourantes=self.node.item.getListeValeurs()
277 min,max = self.node.item.getMinMax()
278 if len(self.listeValeursCourantes) < min :
279 self.editor.afficheInfos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
281 self.editor.afficheInfos("")
283 if len(listeRetour) == 0 :
284 self.node.item.setValeur(None)
286 self.node.item.setValeur(listeRetour)
288 commentaire=comm+" "+comm2
289 self.editor.afficheInfos(commentaire,Qt.red)
292 def rendVisibleLigneRE(self):
293 QApplication.processEvents()
294 self.estVisibleRE.setFocus()
295 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
297 def rendVisibleLigne(self):
298 self.estVisibleRE=self.estVisible
299 #rendVisibleLigneRE()