Salome HOME
d02ff47176dd45331a581c2816850f9df5fe73af
[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) < 8 : 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         if self.editor.salome :
78           icon=QIcon(self.repIcon+"/MoinsBleu.png")
79           self.RBMoins.setIcon(icon)
80           icon=QIcon(self.repIcon+"/PlusBleu.png")
81           self.RBPlus.setIcon(icon)
82           icon=QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
83           self.RBVoisListe.setIcon(icon)
84
85         self.parentQt.commandesLayout.insertWidget(-1,self)
86
87        
88   def prepareListeResultat(self):
89        for i in self.listeLE: i.close()
90        self.listeLE=[]
91        self.vScrollBar = self.scrollArea.verticalScrollBar()
92        self.listeValeursCourantes=self.node.item.GetListeValeurs()
93        if hasattr(self.node.item.definition.validators,'set_MCSimp'):
94             obj=self.node.item.getObject()
95             self.node.item.definition.validators.set_MCSimp(obj)
96             if self.node.item.isvalid() == 0 :
97                liste=[]
98                for item in self.listeValeursCourantes:
99                    if self.node.item.definition.validators.verif_item(item)==1: liste.append(item)
100                self.listeAAfficher=self.node.item.get_liste_possible(liste)
101             else: 
102                self.listeAAfficher=self.node.item.get_liste_possible([])
103        else :
104             self.listeAAfficher=self.node.item.get_liste_possible(self.listeValeursCourantes)
105
106        if self.listeAAfficher==[] : 
107           self.ajoutLE(0)
108           return
109        self.filtreListe()
110        if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
111        else : self.setMinimumHeight(len(self.listeAAfficher)*30)
112
113        self.politique=PolitiquePlusieurs(self.node,self.editor)
114        for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
115        for i in range(len(self.listeAAfficher)):
116            nomLE="lineEditVal"+str(i+1)
117            courant=getattr(self,nomLE)
118            courant.setText(str(self.listeAAfficher[i]))
119        self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
120        if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close() 
121        
122       
123   def setValeurs(self):
124        self.listeValeursCourantes=self.node.item.GetListeValeurs()
125        if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
126        else                           : aConstruire=self.monSimpDef.max
127        if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
128        for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
129        self.indexDernierLabel=aConstruire
130        index=1
131        for val in self.listeValeursCourantes :
132           nomLE="LEResultat"+str(index)
133           courant=getattr(self,nomLE)
134           courant.setText(str(val))
135           courant.setReadOnly(True)
136           index=index+1
137        self.prepareListeResultat()
138
139   def moinsPushed(self):
140       self.ouAjouter=self.ouAjouter-1
141       GereListe.moinsPushed(self)
142       self.setValeurs()
143
144
145   def ajoutLEResultat (self,index,valeur=None):
146       nomLE="LEResultat"+str(index)
147       if hasattr(self,nomLE) : return
148       nouveauLE = LECustom(self.scrollAreaRE,self,index)
149       nouveauLE.setFrame(False)
150       self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
151       self.ouAjouter=self.ouAjouter+1
152       nouveauLE.setText("")
153       nouveauLE.setReadOnly(True)
154       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
155       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
156       self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
157       self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
158       setattr(self,nomLE,nouveauLE)
159       self.estVisibleRE=nouveauLE
160       if valeur != None : 
161          nouveauLE.setText(valeur)
162       
163   def ajoutLE(self,index,valeur=None):
164       nomLE="lineEditVal"+str(index)
165       nouveauLE = MonLabelListeClic(self)
166       #self.CBLayout.addWidget(nouveauLE)
167       self.CBLayout.insertWidget(index -1,nouveauLE)
168       self.listeLE.append(nouveauLE)
169       nouveauLE.setFrameShape(QFrame.NoFrame)
170       QApplication.processEvents()
171       nouveauLE.setText("")
172       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
173       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
174       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
175       nouveauLE.setFocus()
176       setattr(self,nomLE,nouveauLE)
177       
178   def ajoutLineEdit(self):
179       self.ajoutLEResultat (self.indexDernierLabel)
180
181
182   def traiteClicSurLabelListe(self,valeur):
183         if valeur == None : return
184         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
185         if validite == 0 : return
186         if liste ==[]    : return
187         listeVal=[]
188
189         self.listeValeursCourantes=self.node.item.GetListeValeurs()
190         min,max = self.node.item.GetMinMax()
191         if len(self.listeValeursCourantes) +1 > max : 
192            self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
193            return
194         else :
195            self.editor.affiche_infos("")
196
197         affiche=False
198         for i in range(1,self.indexDernierLabel+1):
199            nomLE="LEResultat"+str(i)
200            courant=getattr(self,nomLE)
201            if str(courant.text())==str("") : 
202               courant.setText(valeur)
203               courant.setReadOnly(True)
204               affiche=True
205               self.estVisibleRE=courant
206               QTimer.singleShot(1, self.rendVisibleLigneRE)
207               break
208           
209         if affiche == False:
210            self.indexDernierLabel = self.indexDernierLabel+1
211            self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
212            self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
213            QTimer.singleShot(1, self.rendVisibleLigneRE)
214         self.changeValeur()
215         self.setValeurs()
216
217   def changeValeur(self,changeDePlace=False,oblige=False):
218 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
219         listeVal=[]
220         for i in range(1,self.indexDernierLabel+1):
221            nomLE="LEResultat"+str(i)
222            courant=getattr(self,nomLE)
223            valeur=courant.text()
224            if str(valeur)=="" : continue
225            liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
226            listeVal.append(str(valeur))
227
228         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
229         
230
231         self.listeValeursCourantes=self.node.item.GetListeValeurs()
232         min,max = self.node.item.GetMinMax()
233         if len(self.listeValeursCourantes) < min : 
234            self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
235         else :
236            self.editor.affiche_infos("")
237     
238         if len(listeRetour) == 0 :
239            self.node.item.set_valeur(None)
240         elif validite :
241            self.node.item.set_valeur(listeRetour)
242         else :
243            commentaire=comm+" "+comm2
244            self.editor.affiche_infos(commentaire,Qt.red)
245         self.setValide()
246 #
247   def rendVisibleLigneRE(self):
248       QApplication.processEvents()
249       self.estVisibleRE.setFocus()
250       self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
251 #
252
253