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) < 20 : self.frameRecherche2.close()
67 if len(self.listeAAfficher) < 8 : 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.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.verif_item(item)==1: liste.append(item)
101 self.listeAAfficher=self.node.item.get_liste_possible(liste)
103 self.listeAAfficher=self.node.item.get_liste_possible([])
105 self.listeAAfficher=self.node.item.get_liste_possible(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) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
124 def setValeurs(self):
125 self.listeValeursCourantes=self.node.item.GetListeValeurs()
126 if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
127 else : aConstruire=self.monSimpDef.max
128 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
129 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
130 self.indexDernierLabel=aConstruire
132 for val in self.listeValeursCourantes :
133 nomLE="LEResultat"+str(index)
134 courant=getattr(self,nomLE)
135 courant.setText(str(val))
136 courant.setReadOnly(True)
138 self.prepareListeResultat()
140 def moinsPushed(self):
141 self.ouAjouter=self.ouAjouter-1
142 GereListe.moinsPushed(self)
146 def ajoutLEResultat (self,index,valeur=None):
147 nomLE="LEResultat"+str(index)
148 if hasattr(self,nomLE) : return
149 nouveauLE = LECustom(self.scrollAreaRE,self,index)
150 nouveauLE.setFrame(False)
151 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
152 self.ouAjouter=self.ouAjouter+1
153 nouveauLE.setText("")
154 nouveauLE.setReadOnly(True)
155 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
156 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
157 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
158 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
159 setattr(self,nomLE,nouveauLE)
160 self.estVisibleRE=nouveauLE
162 nouveauLE.setText(valeur)
164 def ajoutLE(self,index,valeur=None):
165 nomLE="lineEditVal"+str(index)
166 nouveauLE = MonLabelListeClic(self)
167 #self.CBLayout.addWidget(nouveauLE)
168 self.CBLayout.insertWidget(index -1,nouveauLE)
169 self.listeLE.append(nouveauLE)
170 nouveauLE.setFrameShape(QFrame.NoFrame)
171 QApplication.processEvents()
172 nouveauLE.setText("")
173 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
174 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
175 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
177 setattr(self,nomLE,nouveauLE)
179 def ajoutLineEdit(self):
180 self.ajoutLEResultat (self.indexDernierLabel)
183 def traiteClicSurLabelListe(self,valeur):
184 if valeur == None : return
185 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
186 if validite == 0 : return
187 if liste ==[] : return
190 self.listeValeursCourantes=self.node.item.GetListeValeurs()
191 min,max = self.node.item.GetMinMax()
192 if len(self.listeValeursCourantes) +1 > max :
193 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
196 self.editor.affiche_infos("")
199 for i in range(1,self.indexDernierLabel+1):
200 nomLE="LEResultat"+str(i)
201 courant=getattr(self,nomLE)
202 if str(courant.text())==str("") :
203 courant.setText(valeur)
204 courant.setReadOnly(True)
206 self.estVisibleRE=courant
207 QTimer.singleShot(1, self.rendVisibleLigneRE)
211 self.indexDernierLabel = self.indexDernierLabel+1
212 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
213 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
214 QTimer.singleShot(1, self.rendVisibleLigneRE)
218 def changeValeur(self,changeDePlace=False,oblige=False):
219 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
221 for i in range(1,self.indexDernierLabel+1):
222 nomLE="LEResultat"+str(i)
223 courant=getattr(self,nomLE)
224 valeur=courant.text()
225 if str(valeur)=="" : continue
226 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
227 listeVal.append(str(valeur))
229 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
232 self.listeValeursCourantes=self.node.item.GetListeValeurs()
233 min,max = self.node.item.GetMinMax()
234 if len(self.listeValeursCourantes) < min :
235 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
237 self.editor.affiche_infos("")
239 if len(listeRetour) == 0 :
240 self.node.item.set_valeur(None)
242 self.node.item.set_valeur(listeRetour)
244 commentaire=comm+" "+comm2
245 self.editor.affiche_infos(commentaire,Qt.red)
248 def rendVisibleLigneRE(self):
249 QApplication.processEvents()
250 self.estVisibleRE.setFocus()
251 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)