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