Salome HOME
46d060795ccfa5d10b35da7780304d5c3d487434
[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 from Extensions.i18n import tr
33
34 from determine import monEnvQT5
35 if monEnvQT5:
36     from PyQt5.QtWidgets  import   QFrame, QApplication, QScrollBar
37     from PyQt5.QtCore import QTimer, QSize, Qt
38     from PyQt5.QtGui  import QIcon
39 else :
40     from PyQt4.QtGui  import *
41     from PyQt4.QtCore import *
42
43
44 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
45
46   def __init__(self,node,monSimpDef,nom,objSimp,parent,commande):
47         self.nomLine="LEResultat"
48         self.listeLE=[]
49         self.ouAjouter=0
50         self.NumLineEditEnCours=0
51         self.alpha=0
52         self.filtre=""
53         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commande)
54         GereListe.__init__(self)
55         self.finCommentaireListe()
56         self.gereIconePlier()
57         self.listeValeursCourantes=self.node.item.GetListeValeurs()
58         try :
59           self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
60         except :
61           # cas ou on ne peut rien ajouter
62           pass 
63         self.prepareListeResultat()
64         if len(self.listeAAfficher) < 8 : 
65            self.frameRecherche1.close()
66            self.frameRecherche2.close()
67         self.adjustSize()
68         if sys.platform[0:5]!="linux":
69           repIcon=self.node.editor.appliEficas.repIcon
70           fichier=os.path.join(repIcon, 'arrow_up.png')
71           icon = QIcon(fichier)
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)
78
79        
80   def prepareListeResultat(self):
81        for i in self.listeLE: i.close()
82        self.listeLE=[]
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 :
89                liste=[]
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)
93             else: 
94                self.listeAAfficher=self.node.item.get_liste_possible([])
95        else :
96             self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
97
98        if self.listeAAfficher==[] : 
99           self.ajoutLE(0)
100           return
101        self.filtreListe()
102        if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
103        else : self.setMinimumHeight(len(self.listeAAfficher)*30)
104
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        
113       
114   def setValeurs(self):
115        self.listeValeursCourantes=self.node.item.GetListeValeurs()
116        if self.monSimpDef.max == "**" : aConstruire=7
117        else                           : aConstruire=self.monSimpDef.max
118        if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
119        for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
120        self.indexDernierLabel=aConstruire
121        index=1
122        for val in self.listeValeursCourantes :
123           nomLE="LEResultat"+str(index)
124           courant=getattr(self,nomLE)
125           courant.setText(str(val))
126           courant.setReadOnly(True)
127           index=index+1
128        self.prepareListeResultat()
129
130   def moinsPushed(self):
131       self.ouAjouter=self.ouAjouter-1
132       GereListe.moinsPushed(self)
133       self.setValeurs()
134
135
136   def ajoutLEResultat (self,index,valeur=None):
137       nomLE="LEResultat"+str(index)
138       if hasattr(self,nomLE) : return
139       nouveauLE = LECustom(self.scrollAreaRE,self,index)
140       nouveauLE.setFrame(False)
141       self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
142       self.ouAjouter=self.ouAjouter+1
143       nouveauLE.setText("")
144       nouveauLE.setReadOnly(True)
145       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
146       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
147       self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
148       self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
149       setattr(self,nomLE,nouveauLE)
150       self.estVisibleRE=nouveauLE
151       if valeur != None : 
152          nouveauLE.setText(valeur)
153       
154   def ajoutLE(self,index,valeur=None):
155       nomLE="lineEditVal"+str(index)
156       nouveauLE = MonLabelListeClic(self)
157       #self.CBLayout.addWidget(nouveauLE)
158       self.CBLayout.insertWidget(index -1,nouveauLE)
159       self.listeLE.append(nouveauLE)
160       nouveauLE.setFrameShape(QFrame.NoFrame)
161       QApplication.processEvents()
162       nouveauLE.setText("")
163       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
164       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
165       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
166       nouveauLE.setFocus()
167       setattr(self,nomLE,nouveauLE)
168       
169   def ajoutLineEdit(self):
170       self.ajoutLEResultat (self.indexDernierLabel)
171
172
173   def traiteClicSurLabelListe(self,valeur):
174         if valeur == None : return
175         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
176         if validite == 0 : return
177         if liste ==[]    : return
178         listeVal=[]
179
180         self.listeValeursCourantes=self.node.item.GetListeValeurs()
181         min,max = self.node.item.GetMinMax()
182         if len(self.listeValeursCourantes) +1 > max : 
183            self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
184            return
185         else :
186            self.editor.affiche_infos("")
187
188         affiche=False
189         for i in range(1,self.indexDernierLabel+1):
190            nomLE="LEResultat"+str(i)
191            courant=getattr(self,nomLE)
192            if str(courant.text())==str("") : 
193               courant.setText(valeur)
194               courant.setReadOnly(True)
195               affiche=True
196               self.estVisibleRE=courant
197               QTimer.singleShot(1, self.rendVisibleLigneRE)
198               break
199           
200         if affiche == False:
201            self.indexDernierLabel = self.indexDernierLabel+1
202            self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
203            self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
204            QTimer.singleShot(1, self.rendVisibleLigneRE)
205         self.changeValeur()
206         self.setValeurs()
207
208   def changeValeur(self,changeDePlace=False,oblige=False):
209 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
210         listeVal=[]
211         for i in range(1,self.indexDernierLabel+1):
212            nomLE="LEResultat"+str(i)
213            courant=getattr(self,nomLE)
214            valeur=courant.text()
215            if str(valeur)=="" : continue
216            liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
217            listeVal.append(str(valeur))
218
219         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
220         
221
222         self.listeValeursCourantes=self.node.item.GetListeValeurs()
223         min,max = self.node.item.GetMinMax()
224         if len(self.listeValeursCourantes) < min : 
225            self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
226         else :
227            self.editor.affiche_infos("")
228     
229         if len(listeRetour) == 0 :
230            self.node.item.set_valeur(None)
231         elif validite :
232            self.node.item.set_valeur(listeRetour)
233         else :
234            commentaire=comm+" "+comm2
235            self.editor.affiche_infos(commentaire,Qt.red)
236         self.setValide()
237 #
238   def rendVisibleLigneRE(self):
239       QApplication.processEvents()
240       self.estVisibleRE.setFocus()
241       self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
242 #
243
244