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 self.parentQt.commandesLayout.insertWidget(-1,self)
80 def prepareListeResultat(self):
81 for i in self.listeLE: i.close()
83 self.vScrollBar = self.scrollArea.verticalScrollBar()
84 self.listeValeursCourantes=self.node.item.GetListeValeurs()
85 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
86 obj=self.node.item.getObject()
87 self.node.item.definition.validators.set_MCSimp(obj)
88 if self.node.item.isvalid() == 0 :
90 for item in self.listeValeursCourantes:
91 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
92 self.listeAAfficher=self.node.item.get_liste_possible(liste)
94 self.listeAAfficher=self.node.item.get_liste_possible([])
96 self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
98 if self.listeAAfficher==[] :
102 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
103 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
105 self.politique=PolitiquePlusieurs(self.node,self.editor)
106 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
107 for i in range(len(self.listeAAfficher)):
108 nomLE="lineEditVal"+str(i+1)
109 courant=getattr(self,nomLE)
110 courant.setText(str(self.listeAAfficher[i]))
111 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
112 if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
115 def setValeurs(self):
116 self.listeValeursCourantes=self.node.item.GetListeValeurs()
117 if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
118 else : aConstruire=self.monSimpDef.max
119 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
120 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
121 self.indexDernierLabel=aConstruire
123 for val in self.listeValeursCourantes :
124 nomLE="LEResultat"+str(index)
125 courant=getattr(self,nomLE)
126 courant.setText(str(val))
127 courant.setReadOnly(True)
129 self.prepareListeResultat()
131 def moinsPushed(self):
132 self.ouAjouter=self.ouAjouter-1
133 GereListe.moinsPushed(self)
137 def ajoutLEResultat (self,index,valeur=None):
138 nomLE="LEResultat"+str(index)
139 if hasattr(self,nomLE) : return
140 nouveauLE = LECustom(self.scrollAreaRE,self,index)
141 nouveauLE.setFrame(False)
142 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
143 self.ouAjouter=self.ouAjouter+1
144 nouveauLE.setText("")
145 nouveauLE.setReadOnly(True)
146 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
147 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
148 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
149 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
150 setattr(self,nomLE,nouveauLE)
151 self.estVisibleRE=nouveauLE
153 nouveauLE.setText(valeur)
155 def ajoutLE(self,index,valeur=None):
156 nomLE="lineEditVal"+str(index)
157 nouveauLE = MonLabelListeClic(self)
158 #self.CBLayout.addWidget(nouveauLE)
159 self.CBLayout.insertWidget(index -1,nouveauLE)
160 self.listeLE.append(nouveauLE)
161 nouveauLE.setFrameShape(QFrame.NoFrame)
162 QApplication.processEvents()
163 nouveauLE.setText("")
164 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
165 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
166 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
168 setattr(self,nomLE,nouveauLE)
170 def ajoutLineEdit(self):
171 self.ajoutLEResultat (self.indexDernierLabel)
174 def traiteClicSurLabelListe(self,valeur):
175 if valeur == None : return
176 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
177 if validite == 0 : return
178 if liste ==[] : return
181 self.listeValeursCourantes=self.node.item.GetListeValeurs()
182 min,max = self.node.item.GetMinMax()
183 if len(self.listeValeursCourantes) +1 > max :
184 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
187 self.editor.affiche_infos("")
190 for i in range(1,self.indexDernierLabel+1):
191 nomLE="LEResultat"+str(i)
192 courant=getattr(self,nomLE)
193 if str(courant.text())==str("") :
194 courant.setText(valeur)
195 courant.setReadOnly(True)
197 self.estVisibleRE=courant
198 QTimer.singleShot(1, self.rendVisibleLigneRE)
202 self.indexDernierLabel = self.indexDernierLabel+1
203 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
204 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
205 QTimer.singleShot(1, self.rendVisibleLigneRE)
209 def changeValeur(self,changeDePlace=False,oblige=False):
210 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
212 for i in range(1,self.indexDernierLabel+1):
213 nomLE="LEResultat"+str(i)
214 courant=getattr(self,nomLE)
215 valeur=courant.text()
216 if str(valeur)=="" : continue
217 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
218 listeVal.append(str(valeur))
220 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
223 self.listeValeursCourantes=self.node.item.GetListeValeurs()
224 min,max = self.node.item.GetMinMax()
225 if len(self.listeValeursCourantes) < min :
226 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
228 self.editor.affiche_infos("")
230 if len(listeRetour) == 0 :
231 self.node.item.set_valeur(None)
233 self.node.item.set_valeur(listeRetour)
235 commentaire=comm+" "+comm2
236 self.editor.affiche_infos(commentaire,Qt.red)
239 def rendVisibleLigneRE(self):
240 QApplication.processEvents()
241 self.estVisibleRE.setFocus()
242 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)