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 import string,types,os,sys
24 from feuille import Feuille
25 from desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne
26 from politiquesValidation import PolitiquePlusieurs
27 from qtSaisie import SaisieValeur
28 from gereListe import GereListe
29 from gereListe import GerePlie
30 from gereListe import LECustom
31 from gereListe import MonLabelListeClic
32 from Extensions.i18n import tr
34 from determine import monEnvQT5
36 from PyQt5.QtWidgets import QFrame, QApplication, QScrollBar
37 from PyQt5.QtCore import QTimer, QSize, Qt
38 from PyQt5.QtGui import QIcon
40 from PyQt4.QtGui import *
41 from PyQt4.QtCore import *
44 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
46 def __init__(self,node,monSimpDef,nom,objSimp,parent,commande):
47 self.nomLine="LEResultat"
50 self.NumLineEditEnCours=0
53 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commande)
54 GereListe.__init__(self)
55 self.finCommentaireListe()
57 self.listeValeursCourantes=self.node.item.GetListeValeurs()
59 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
61 # cas ou on ne peut rien ajouter
63 self.prepareListeResultat()
64 if len(self.listeAAfficher) < 8 : self.frameRecherche2.close()
66 if sys.platform[0:5]!="linux":
67 repIcon=self.node.editor.appliEficas.repIcon
68 fichier=os.path.join(repIcon, 'arrow_up.png')
70 self.RBHaut.setIcon(icon)
71 self.RBHaut.setIconSize(QSize(32, 32))
72 fichier2=os.path.join(repIcon, 'arrow_down.png')
73 icon2 = QIcon(fichier2)
74 self.RBBas.setIcon(icon2)
75 self.parentQt.commandesLayout.insertWidget(-1,self)
78 def prepareListeResultat(self):
79 for i in self.listeLE: i.close()
81 self.vScrollBar = self.scrollArea.verticalScrollBar()
82 self.listeValeursCourantes=self.node.item.GetListeValeurs()
83 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
84 obj=self.node.item.getObject()
85 self.node.item.definition.validators.set_MCSimp(obj)
86 if self.node.item.isvalid() == 0 :
88 for item in self.listeValeursCourantes:
89 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
90 self.listeAAfficher=self.node.item.get_liste_possible(liste)
92 self.listeAAfficher=self.node.item.get_liste_possible([])
94 self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
96 if self.listeAAfficher==[] :
100 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
101 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
103 self.politique=PolitiquePlusieurs(self.node,self.editor)
104 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
105 for i in range(len(self.listeAAfficher)):
106 nomLE="lineEditVal"+str(i+1)
107 courant=getattr(self,nomLE)
108 courant.setText(str(self.listeAAfficher[i]))
109 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
110 if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
113 def setValeurs(self):
114 self.listeValeursCourantes=self.node.item.GetListeValeurs()
115 if self.monSimpDef.max == "**" : aConstruire=7
116 else : aConstruire=self.monSimpDef.max
117 if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
118 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
119 self.indexDernierLabel=aConstruire
121 for val in self.listeValeursCourantes :
122 nomLE="LEResultat"+str(index)
123 courant=getattr(self,nomLE)
124 courant.setText(str(val))
125 courant.setReadOnly(True)
127 self.prepareListeResultat()
129 def moinsPushed(self):
130 self.ouAjouter=self.ouAjouter-1
131 GereListe.moinsPushed(self)
135 def ajoutLEResultat (self,index,valeur=None):
136 nomLE="LEResultat"+str(index)
137 if hasattr(self,nomLE) : return
138 nouveauLE = LECustom(self.scrollAreaRE,self,index)
139 nouveauLE.setFrame(False)
140 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
141 self.ouAjouter=self.ouAjouter+1
142 nouveauLE.setText("")
143 nouveauLE.setReadOnly(True)
144 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
145 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
146 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
147 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
148 setattr(self,nomLE,nouveauLE)
149 self.estVisibleRE=nouveauLE
151 nouveauLE.setText(valeur)
153 def ajoutLE(self,index,valeur=None):
154 nomLE="lineEditVal"+str(index)
155 nouveauLE = MonLabelListeClic(self)
156 #self.CBLayout.addWidget(nouveauLE)
157 self.CBLayout.insertWidget(index -1,nouveauLE)
158 self.listeLE.append(nouveauLE)
159 nouveauLE.setFrameShape(QFrame.NoFrame)
160 QApplication.processEvents()
161 nouveauLE.setText("")
162 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
163 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
164 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
166 setattr(self,nomLE,nouveauLE)
168 def ajoutLineEdit(self):
169 self.ajoutLEResultat (self.indexDernierLabel)
172 def traiteClicSurLabelListe(self,valeur):
173 if valeur == None : return
174 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
175 if validite == 0 : return
176 if liste ==[] : return
179 self.listeValeursCourantes=self.node.item.GetListeValeurs()
180 min,max = self.node.item.GetMinMax()
181 if len(self.listeValeursCourantes) +1 > max :
182 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
185 self.editor.affiche_infos("")
188 for i in range(1,self.indexDernierLabel+1):
189 nomLE="LEResultat"+str(i)
190 courant=getattr(self,nomLE)
191 if str(courant.text())==str("") :
192 courant.setText(valeur)
193 courant.setReadOnly(True)
195 self.estVisibleRE=courant
196 QTimer.singleShot(1, self.rendVisibleLigneRE)
200 self.indexDernierLabel = self.indexDernierLabel+1
201 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
202 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
203 QTimer.singleShot(1, self.rendVisibleLigneRE)
207 def changeValeur(self,changeDePlace=False,oblige=False):
208 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
210 for i in range(1,self.indexDernierLabel+1):
211 nomLE="LEResultat"+str(i)
212 courant=getattr(self,nomLE)
213 valeur=courant.text()
214 if str(valeur)=="" : continue
215 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
216 listeVal.append(str(valeur))
218 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
221 self.listeValeursCourantes=self.node.item.GetListeValeurs()
222 min,max = self.node.item.GetMinMax()
223 if len(self.listeValeursCourantes) < min :
224 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
226 self.editor.affiche_infos("")
228 if len(listeRetour) == 0 :
229 self.node.item.set_valeur(None)
231 self.node.item.set_valeur(listeRetour)
233 commentaire=comm+" "+comm2
234 self.editor.affiche_infos(commentaire,Qt.red)
237 def rendVisibleLigneRE(self):
238 QApplication.processEvents()
239 self.estVisibleRE.setFocus()
240 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)