]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monWidgetPlusieursIntoOrdonne.py
Salome HOME
c7e9451dc4fd2901c7e5408d95667be8a54114be
[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        if len(self.listeAAfficher) < 25 and hasattr(self,'frameRecherche') : self.frameRecherche.close() 
113        
114       
115   def setValeurs(self):
116        self.listeValeursCourantes=self.node.item.GetListeValeurs()
117        if self.monSimpDef.max == "**" : aConstruire=7
118        else                           : aConstruire=self.monSimpDef.max
119        if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
120        for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
121        self.indexDernierLabel=aConstruire
122        index=1
123        for val in self.listeValeursCourantes :
124           nomLE="LEResultat"+str(index)
125           courant=getattr(self,nomLE)
126           courant.setText(str(val))
127           courant.setReadOnly(True)
128           index=index+1
129        self.prepareListeResultat()
130
131   def moinsPushed(self):
132       self.ouAjouter=self.ouAjouter-1
133       GereListe.moinsPushed(self)
134       self.setValeurs()
135
136
137   def ajoutLEResultat (self,index,valeur=None):
138       nomLE="LEResultat"+str(index)
139       if hasattr(self,nomLE) : return
140       nouveauLE = LECustom(self.scrollAreaRE,self,index)
141       nouveauLE.setFrame(False)
142       self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
143       self.ouAjouter=self.ouAjouter+1
144       nouveauLE.setText("")
145       nouveauLE.setReadOnly(True)
146       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
147       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
148       self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
149       self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
150       setattr(self,nomLE,nouveauLE)
151       self.estVisibleRE=nouveauLE
152       if valeur != None : 
153          nouveauLE.setText(valeur)
154       
155   def ajoutLE(self,index,valeur=None):
156       nomLE="lineEditVal"+str(index)
157       nouveauLE = MonLabelListeClic(self)
158       #self.CBLayout.addWidget(nouveauLE)
159       self.CBLayout.insertWidget(index -1,nouveauLE)
160       self.listeLE.append(nouveauLE)
161       nouveauLE.setFrameShape(QFrame.NoFrame)
162       QApplication.processEvents()
163       nouveauLE.setText("")
164       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
165       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
166       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
167       nouveauLE.setFocus()
168       setattr(self,nomLE,nouveauLE)
169       
170   def ajoutLineEdit(self):
171       self.ajoutLEResultat (self.indexDernierLabel)
172
173
174   def traiteClicSurLabelListe(self,valeur):
175         if valeur == None : return
176         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
177         if validite == 0 : return
178         if liste ==[]    : return
179         listeVal=[]
180
181         self.listeValeursCourantes=self.node.item.GetListeValeurs()
182         min,max = self.node.item.GetMinMax()
183         if len(self.listeValeursCourantes) +1 > max : 
184            self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
185            return
186         else :
187            self.editor.affiche_infos("")
188
189         affiche=False
190         for i in range(1,self.indexDernierLabel+1):
191            nomLE="LEResultat"+str(i)
192            courant=getattr(self,nomLE)
193            if str(courant.text())==str("") : 
194               courant.setText(valeur)
195               courant.setReadOnly(True)
196               affiche=True
197               self.estVisibleRE=courant
198               QTimer.singleShot(1, self.rendVisibleLigneRE)
199               break
200           
201         if affiche == False:
202            self.indexDernierLabel = self.indexDernierLabel+1
203            self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
204            self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
205            QTimer.singleShot(1, self.rendVisibleLigneRE)
206         self.changeValeur()
207         self.setValeurs()
208
209   def changeValeur(self,changeDePlace=False,oblige=False):
210 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
211         listeVal=[]
212         for i in range(1,self.indexDernierLabel+1):
213            nomLE="LEResultat"+str(i)
214            courant=getattr(self,nomLE)
215            valeur=courant.text()
216            if str(valeur)=="" : continue
217            liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
218            listeVal.append(str(valeur))
219
220         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
221         
222
223         self.listeValeursCourantes=self.node.item.GetListeValeurs()
224         min,max = self.node.item.GetMinMax()
225         if len(self.listeValeursCourantes) < min : 
226            self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
227         else :
228            self.editor.affiche_infos("")
229     
230         if len(listeRetour) == 0 :
231            self.node.item.set_valeur(None)
232         elif validite :
233            self.node.item.set_valeur(listeRetour)
234         else :
235            commentaire=comm+" "+comm2
236            self.editor.affiche_infos(commentaire,Qt.red)
237         self.setValide()
238 #
239   def rendVisibleLigneRE(self):
240       QApplication.processEvents()
241       self.estVisibleRE.setFocus()
242       self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
243 #
244
245