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