]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monWidgetPlusieursIntoOrdonne.py
Salome HOME
e29eda6a7c5488cef454187e21f80775918ed613
[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 : self.frameRecherche2.close()
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        if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close() 
111        
112       
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
120        index=1
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)
126           index=index+1
127        self.prepareListeResultat()
128
129   def moinsPushed(self):
130       self.ouAjouter=self.ouAjouter-1
131       GereListe.moinsPushed(self)
132       self.setValeurs()
133
134
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
150       if valeur != None : 
151          nouveauLE.setText(valeur)
152       
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)
165       nouveauLE.setFocus()
166       setattr(self,nomLE,nouveauLE)
167       
168   def ajoutLineEdit(self):
169       self.ajoutLEResultat (self.indexDernierLabel)
170
171
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
177         listeVal=[]
178
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)
183            return
184         else :
185            self.editor.affiche_infos("")
186
187         affiche=False
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)
194               affiche=True
195               self.estVisibleRE=courant
196               QTimer.singleShot(1, self.rendVisibleLigneRE)
197               break
198           
199         if affiche == False:
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)
204         self.changeValeur()
205         self.setValeurs()
206
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
209         listeVal=[]
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))
217
218         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
219         
220
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)
225         else :
226            self.editor.affiche_infos("")
227     
228         if len(listeRetour) == 0 :
229            self.node.item.set_valeur(None)
230         elif validite :
231            self.node.item.set_valeur(listeRetour)
232         else :
233            commentaire=comm+" "+comm2
234            self.editor.affiche_infos(commentaire,Qt.red)
235         self.setValide()
236 #
237   def rendVisibleLigneRE(self):
238       QApplication.processEvents()
239       self.estVisibleRE.setFocus()
240       self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
241 #
242
243