Salome HOME
pb de check box
[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         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) < 30 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 == "**" or self.monSimpDef.max == float('inf') : 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