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
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) < 8 : self.frameRecherche2.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 if self.editor.salome :
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.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.verif_item(item)==1: liste.append(item)
100 self.listeAAfficher=self.node.item.get_liste_possible(liste)
102 self.listeAAfficher=self.node.item.get_liste_possible([])
104 self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
106 if self.listeAAfficher==[] :
110 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
111 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
113 self.politique=PolitiquePlusieurs(self.node,self.editor)
114 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
115 for i in range(len(self.listeAAfficher)):
116 nomLE="lineEditVal"+str(i+1)
117 courant=getattr(self,nomLE)
118 courant.setText(str(self.listeAAfficher[i]))
119 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
120 if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
123 def setValeurs(self):
124 self.listeValeursCourantes=self.node.item.GetListeValeurs()
125 if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
126 else : aConstruire=self.monSimpDef.max
127 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
128 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
129 self.indexDernierLabel=aConstruire
131 for val in self.listeValeursCourantes :
132 nomLE="LEResultat"+str(index)
133 courant=getattr(self,nomLE)
134 courant.setText(str(val))
135 courant.setReadOnly(True)
137 self.prepareListeResultat()
139 def moinsPushed(self):
140 self.ouAjouter=self.ouAjouter-1
141 GereListe.moinsPushed(self)
145 def ajoutLEResultat (self,index,valeur=None):
146 nomLE="LEResultat"+str(index)
147 if hasattr(self,nomLE) : return
148 nouveauLE = LECustom(self.scrollAreaRE,self,index)
149 nouveauLE.setFrame(False)
150 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
151 self.ouAjouter=self.ouAjouter+1
152 nouveauLE.setText("")
153 nouveauLE.setReadOnly(True)
154 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
155 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
156 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
157 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
158 setattr(self,nomLE,nouveauLE)
159 self.estVisibleRE=nouveauLE
161 nouveauLE.setText(valeur)
163 def ajoutLE(self,index,valeur=None):
164 nomLE="lineEditVal"+str(index)
165 nouveauLE = MonLabelListeClic(self)
166 #self.CBLayout.addWidget(nouveauLE)
167 self.CBLayout.insertWidget(index -1,nouveauLE)
168 self.listeLE.append(nouveauLE)
169 nouveauLE.setFrameShape(QFrame.NoFrame)
170 QApplication.processEvents()
171 nouveauLE.setText("")
172 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
173 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
174 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
176 setattr(self,nomLE,nouveauLE)
178 def ajoutLineEdit(self):
179 self.ajoutLEResultat (self.indexDernierLabel)
182 def traiteClicSurLabelListe(self,valeur):
183 if valeur == None : return
184 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
185 if validite == 0 : return
186 if liste ==[] : return
189 self.listeValeursCourantes=self.node.item.GetListeValeurs()
190 min,max = self.node.item.GetMinMax()
191 if len(self.listeValeursCourantes) +1 > max :
192 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
195 self.editor.affiche_infos("")
198 for i in range(1,self.indexDernierLabel+1):
199 nomLE="LEResultat"+str(i)
200 courant=getattr(self,nomLE)
201 if str(courant.text())==str("") :
202 courant.setText(valeur)
203 courant.setReadOnly(True)
205 self.estVisibleRE=courant
206 QTimer.singleShot(1, self.rendVisibleLigneRE)
210 self.indexDernierLabel = self.indexDernierLabel+1
211 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
212 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
213 QTimer.singleShot(1, self.rendVisibleLigneRE)
217 def changeValeur(self,changeDePlace=False,oblige=False):
218 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
220 for i in range(1,self.indexDernierLabel+1):
221 nomLE="LEResultat"+str(i)
222 courant=getattr(self,nomLE)
223 valeur=courant.text()
224 if str(valeur)=="" : continue
225 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
226 listeVal.append(str(valeur))
228 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
231 self.listeValeursCourantes=self.node.item.GetListeValeurs()
232 min,max = self.node.item.GetMinMax()
233 if len(self.listeValeursCourantes) < min :
234 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
236 self.editor.affiche_infos("")
238 if len(listeRetour) == 0 :
239 self.node.item.set_valeur(None)
241 self.node.item.set_valeur(listeRetour)
243 commentaire=comm+" "+comm2
244 self.editor.affiche_infos(commentaire,Qt.red)
247 def rendVisibleLigneRE(self):
248 QApplication.processEvents()
249 self.estVisibleRE.setFocus()
250 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)