Salome HOME
878fa2be5e2dbad10b9381bcc8f7fe5333cad0cb
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursIntoOrdonne.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Modules Python
21 import string,types,os,sys
22
23 # Modules Eficas
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
33 from determine import monEnvQT5
34 if monEnvQT5:
35     from PyQt5.QtWidgets  import Qicon, QScrollbar, QFrame, QApplication
36     from PyQt5.QtCore import QTimer, QSize, Qt
37 else :
38     from PyQt4.QtGui  import *
39     from PyQt4.QtCore import 
40
41
42 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
43
44   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
45         #print "MonWidgetPlusieursInto", nom, self
46         self.nomLine="LEResultat"
47         self.listeLE=[]
48         self.ouAjouter=0
49         self.NumLineEditEnCours=0
50         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commanme)
51         GereListe.__init__(self)
52         self.finCommentaireListe()
53         self.gereIconePlier()
54         try :
55           self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
56         except :
57           # cas ou on ne peut rien ajouter
58           pass 
59         self.prepareListeResultat()
60         self.adjustSize()
61         if sys.platform[0:5]!="linux":
62           repIcon=self.node.editor.appliEficas.repIcon
63           fichier=os.path.join(repIcon, 'arrow_up.png')
64           icon = QIcon(fichier)
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)
71
72        
73   def prepareListeResultat(self):
74        print "prepareListeResultat"
75        for i in self.listeLE: i.close()
76        self.listeLE=[]
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 :
83                liste=[]
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)
87             else: 
88                self.listeAAfficher=self.node.item.get_liste_possible([])
89        else :
90             self.listeAAfficher=self.node.item.get_liste_possible(listeValeursCourantes)
91
92        if self.listeAAfficher==[] : 
93           self.ajoutLE(0)
94           return
95        if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
96        else : self.setMinimumHeight(len(self.listeAAfficher)*30)
97
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)
105        
106       
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
114        index=1
115        for val in listeValeursCourantes :
116           nomLE="LEResultat"+str(index)
117           courant=getattr(self,nomLE)
118           courant.setText(str(val))
119           courant.setReadOnly(True)
120           index=index+1
121        self.prepareListeResultat()
122
123   def moinsPushed(self):
124       self.ouAjouter=self.ouAjouter-1
125       GereListe.moinsPushed(self)
126       self.setValeurs()
127
128
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
144       if valeur != None : 
145          nouveauLE.setText(valeur)
146       
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)
159       nouveauLE.setFocus()
160       setattr(self,nomLE,nouveauLE)
161       
162   def ajoutLineEdit(self):
163       self.ajoutLEResultat (self.indexDernierLabel)
164
165
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
171         listeVal=[]
172
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)
177            return
178         else :
179            self.editor.affiche_infos(tr(""))
180
181         affiche=False
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)
188               affiche=True
189               self.estVisibleRE=courant
190               QTimer.singleShot(1, self.rendVisibleLigneRE)
191               break
192           
193         if affiche == False:
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)
198         self.changeValeur()
199         self.setValeurs()
200
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
203         listeVal=[]
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))
211
212         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
213         
214
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)
219         else :
220            self.editor.affiche_infos("")
221     
222         if len(listeRetour) == 0 :
223            self.node.item.set_valeur(None)
224         elif validite :
225            self.node.item.set_valeur(listeRetour)
226         else :
227            commentaire=comm+" "+comm2
228            self.editor.affiche_infos(commentaire,Qt.red)
229         self.setValide()
230 #
231   def rendVisibleLigneRE(self):
232       QApplication.processEvents()
233       self.estVisibleRE.setFocus()
234       self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
235 #
236
237