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
33 from determine import monEnvQT5
35 from PyQt5.QtWidgets import Qicon, QScrollbar, QFrame, QApplication
36 from PyQt5.QtCore import QTimer, QSize, Qt
38 from PyQt4.QtGui import *
39 from PyQt4.QtCore import
42 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
44 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
45 #print "MonWidgetPlusieursInto", nom, self
46 self.nomLine="LEResultat"
49 self.NumLineEditEnCours=0
50 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commanme)
51 GereListe.__init__(self)
52 self.finCommentaireListe()
55 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
57 # cas ou on ne peut rien ajouter
59 self.prepareListeResultat()
61 if sys.platform[0:5]!="linux":
62 repIcon=self.node.editor.appliEficas.repIcon
63 fichier=os.path.join(repIcon, 'arrow_up.png')
65 self.RBHaut.setIcon(icon)
66 self.RBHaut.setIconSize(QSize(32, 32))
67 fichier2=os.path.join(repIcon, 'arrow_down.png')
68 icon2 = QIcon(fichier2)
69 self.RBBas.setIcon(icon2)
70 self.parentQt.commandesLayout.insertWidget(-1,self)
73 def prepareListeResultat(self):
74 print "prepareListeResultat"
75 for i in self.listeLE: i.close()
77 self.vScrollBar = self.scrollArea.verticalScrollBar()
78 listeValeursCourantes=self.node.item.GetListeValeurs()
79 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
80 obj=self.node.item.getObject()
81 self.node.item.definition.validators.set_MCSimp(obj)
82 if self.node.item.isvalid() == 0 :
84 for item in listeValeursCourantes:
85 if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
86 self.listeAAfficher=self.node.item.get_liste_possible(liste)
88 self.listeAAfficher=self.node.item.get_liste_possible([])
90 self.listeAAfficher=self.node.item.get_liste_possible(listeValeursCourantes)
92 if self.listeAAfficher==[] :
95 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
96 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
98 self.politique=PolitiquePlusieurs(self.node,self.editor)
99 for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
100 for i in range(len(self.listeAAfficher)):
101 nomLE="lineEditVal"+str(i+1)
102 courant=getattr(self,nomLE)
103 courant.setText(str(self.listeAAfficher[i]))
104 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
107 def setValeurs(self):
108 listeValeursCourantes=self.node.item.GetListeValeurs()
109 if self.monSimpDef.max == "**" : aConstruire=7
110 else : aConstruire=self.monSimpDef.max
111 if len(listeValeursCourantes) > aConstruire : aConstruire=len(listeValeursCourantes)
112 for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
113 self.indexDernierLabel=aConstruire
115 for val in listeValeursCourantes :
116 nomLE="LEResultat"+str(index)
117 courant=getattr(self,nomLE)
118 courant.setText(str(val))
119 courant.setReadOnly(True)
121 self.prepareListeResultat()
123 def moinsPushed(self):
124 self.ouAjouter=self.ouAjouter-1
125 GereListe.moinsPushed(self)
129 def ajoutLEResultat (self,index,valeur=None):
130 nomLE="LEResultat"+str(index)
131 if hasattr(self,nomLE) : return
132 nouveauLE = LECustom(self.scrollAreaRE,self,index)
133 nouveauLE.setFrame(False)
134 self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
135 self.ouAjouter=self.ouAjouter+1
136 nouveauLE.setText("")
137 nouveauLE.setReadOnly(True)
138 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
139 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
140 self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
141 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
142 setattr(self,nomLE,nouveauLE)
143 self.estVisibleRE=nouveauLE
145 nouveauLE.setText(valeur)
147 def ajoutLE(self,index,valeur=None):
148 nomLE="lineEditVal"+str(index)
149 nouveauLE = MonLabelListeClic(self)
150 #self.CBLayout.addWidget(nouveauLE)
151 self.CBLayout.insertWidget(index -1,nouveauLE)
152 self.listeLE.append(nouveauLE)
153 nouveauLE.setFrameShape(QFrame.NoFrame)
154 QApplication.processEvents()
155 nouveauLE.setText("")
156 if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
157 else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
158 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
160 setattr(self,nomLE,nouveauLE)
162 def ajoutLineEdit(self):
163 self.ajoutLEResultat (self.indexDernierLabel)
166 def traiteClicSurLabelListe(self,valeur):
167 if valeur == None : return
168 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
169 if validite == 0 : return
170 if liste ==[] : return
173 listeValeursCourantes=self.node.item.GetListeValeurs()
174 min,max = self.node.item.GetMinMax()
175 if len(listeValeursCourantes) +1 > max :
176 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
179 self.editor.affiche_infos(tr(""))
182 for i in range(1,self.indexDernierLabel+1):
183 nomLE="LEResultat"+str(i)
184 courant=getattr(self,nomLE)
185 if str(courant.text())==str("") :
186 courant.setText(valeur)
187 courant.setReadOnly(True)
189 self.estVisibleRE=courant
190 QTimer.singleShot(1, self.rendVisibleLigneRE)
194 self.indexDernierLabel = self.indexDernierLabel+1
195 self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
196 self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
197 QTimer.singleShot(1, self.rendVisibleLigneRE)
201 def changeValeur(self,changeDePlace=False,oblige=False):
202 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
204 for i in range(1,self.indexDernierLabel+1):
205 nomLE="LEResultat"+str(i)
206 courant=getattr(self,nomLE)
207 valeur=courant.text()
208 if str(valeur)=="" : continue
209 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
210 listeVal.append(str(valeur))
212 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
215 listeValeursCourantes=self.node.item.GetListeValeurs()
216 min,max = self.node.item.GetMinMax()
217 if len(listeValeursCourantes) < min :
218 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
220 self.editor.affiche_infos("")
222 if len(listeRetour) == 0 :
223 self.node.item.set_valeur(None)
225 self.node.item.set_valeur(listeRetour)
227 commentaire=comm+" "+comm2
228 self.editor.affiche_infos(commentaire,Qt.red)
231 def rendVisibleLigneRE(self):
232 QApplication.processEvents()
233 self.estVisibleRE.setFocus()
234 self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)