Salome HOME
optim eciture
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursInto.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
28
29 # Modules Eficas
30 from six.moves import range
31 from PyQt5.QtWidgets  import QCheckBox, QScrollBar, QFrame, QApplication, QLabel
32 from PyQt5.QtWidgets  import QSizePolicy,QSpacerItem
33 from PyQt5.QtGui  import QPalette, QFont
34 from PyQt5.QtCore import Qt
35
36 from Extensions.i18n import tr
37
38 from .feuille                import Feuille
39 from desWidgetPlusieursInto import Ui_WidgetPlusieursInto 
40 from .politiquesValidation   import PolitiquePlusieurs
41 from .qtSaisie               import SaisieValeur
42 from .gereListe              import GerePlie
43 from .gereListe              import GereListe
44
45 class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe):
46
47   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
48
49         self.index=1
50         self.alpha=0
51         self.listeCB=[]
52         self.listeCbRouge=[]
53         self.listeValeursCourantes=node.item.GetListeValeurs()
54         if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
55
56         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
57         GereListe.__init__(self)
58
59         self.parentQt.commandesLayout.insertWidget(-1,self)
60         self.CBCheck.stateChanged.connect(self.changeTout)
61
62         self.gereIconePlier()
63         self.editor.listeDesListesOuvertes.add(self.node.item)
64         self.inhibe=False
65         #self.finCommentaireListe()
66
67         if self.listeAAfficher== None or self.listeAAfficher==[] : 
68             spacerItem = QSpacerItem(30, 20, QSizePolicy.Fixed, QSizePolicy.Minimum)
69             self.CBLayout.addItem(spacerItem)
70             nouveauCommentaire=QLabel()
71             maPolice= QFont("Times", 16)
72             nouveauCommentaire.setFont(maPolice);
73             nouveauCommentaire.setText(tr('Pas de valeurs possibles'))
74             self.CBLayout.addWidget(nouveauCommentaire)
75             spacerItem2 = QSpacerItem(40, 70, QSizePolicy.Fixed, QSizePolicy.Minimum)
76             self.CBLayout.addItem(spacerItem2)
77
78         if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
79         if len(self.listeAAfficher)  == len(self.listeValeursCourantes) : self.CBCheck.setChecked(True)
80         # try except si la liste des possibles est vide
81         # prevoir qqchose
82         try :
83           self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
84         except :
85           pass
86
87
88   def changeTout(self,int):
89        if self.inhibe : return
90        self.inhibe=True
91        if not(self.CBCheck.isChecked()) : 
92           min,max = self.node.item.GetMinMax()
93           if max < len(self.listeAAfficher) :
94              commentaire=tr('impossible de tout selectionner : max =')+str(max)
95              self.editor.affiche_infos(commentaire,Qt.red)
96              self.inhibe=False
97              return
98           for i in range(len(self.listeAAfficher)):
99               nomCB="lineEditVal"+str(i+1)
100               courant=getattr(self,nomCB)
101               courant.setChecked(True)
102           self.CBCheck.setChecked(False)
103        else :
104           for i in range(len(self.listeAAfficher)):
105               nomCB="lineEditVal"+str(i+1)
106               courant=getattr(self,nomCB)
107               courant.setChecked(False)
108           self.CBCheck.setChecked(True)
109        self.inhibe=False
110        self.changeValeur()
111
112   def setValeurs(self):
113        self.listeValeursCourantes =self.node.item.get_valeur()
114        if self.listeValeursCourantes ==  None : self.listeValeursCourantes=[]
115        #print "ds set Valeur", self.listeValeursCourantes, self.node.item.get_valeur()
116        self.politique=PolitiquePlusieurs(self.node,self.editor)
117        self.vScrollBar = self.scrollArea.verticalScrollBar()
118
119        if hasattr(self.node.item.definition.validators,'set_MCSimp'):
120             obj=self.node.item.getObject()
121             self.node.item.definition.validators.set_MCSimp(obj)
122             if self.node.item.isvalid() == 0 :
123                liste=[]
124                for item in self.listeValeursCourantes:
125                    if self.node.item.definition.validators.verif_item(item)==1:
126                       liste.append(item)
127                self.listeAAfficher=self.node.item.get_liste_possible(liste)
128             else: 
129                self.listeAAfficher=self.node.item.get_liste_possible([])
130        else :
131                self.listeAAfficher=self.node.item.get_liste_possible([])
132
133        if self.objSimp.wait_assd() : 
134           self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type()
135        if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
136
137        #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
138        #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
139
140        self.PourEtreCoche=[]
141        if self.objSimp.wait_assd() : 
142           for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
143        else :
144           for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
145
146        maListe=[]
147        for  i in self.listeAAfficher: maListe.append(i)  
148        if self.alpha==1 : maListe.sort()
149        for i in range(1,len(maListe)+1): self.ajoutCB(i)
150
151        self.inhibe=True
152        for i in range(len(maListe)):
153            nomCB="lineEditVal"+str(i+1)
154            courant=getattr(self,nomCB)
155            courant.setText(str(maListe[i]))
156            if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
157            else                                : courant.setChecked(False)
158
159            courant.toggled.connect(self.changeValeur)
160        self.inhibe=False
161
162        self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
163        
164
165   def ajoutCB(self,index,valeur=None):
166       nomCB="lineEditVal"+str(index)
167       if hasattr(self,nomCB) : return
168       nouveauCB = QCheckBox(self.scrollArea)
169       self.CBLayout.insertWidget(index-1,nouveauCB)
170       self.listeCB.append(nouveauCB)
171       nouveauCB.setText("")
172       if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
173       else :                        nouveauCB.setStyleSheet("background:rgb(240,240,240)")
174       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
175       nouveauCB.setFocus()
176       setattr(self,nomCB,nouveauCB)
177       
178
179
180   def ajout1Valeur(self,valeur=None):
181         if valeur == None : return
182         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
183         if validite == 0 : return
184         if liste ==[]    : return
185         listeVal=[]
186         for valeur in self.listeValeursCourantes : listeVal.append(valeur)
187         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
188         if (comm2 != "" and comm != None) : return comm2
189         if validite : 
190            self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
191            return None
192         else :
193            return(comm2+" "+comm)
194         
195
196
197   def changeValeur(self):
198       if self.inhibe == True: return
199       self.noircirResultatFiltre()
200       self.listeValeursCourantesAvant=self.listeValeursCourantes
201       self.listeValeursCourantes = []
202
203       for i in range (1,len(self.listeAAfficher)+1):
204           nomLineEdit="lineEditVal"+str(i)
205           courant=getattr(self,nomLineEdit)
206           if not (courant.isChecked()):continue
207           valeur=courant.text()
208           if valeur != None and valeur != "" : 
209              commentaire=self.ajout1Valeur(valeur)
210              if (commentaire != None ): 
211                  self.editor.affiche_infos(commentaire,Qt.red)
212                  self.listeValeursCourantesAvant=self.listeValeursCourantes
213                  self.setValeurs()
214
215       min,max = self.node.item.GetMinMax()
216       if len(self.listeValeursCourantes) < min : 
217          self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
218       elif len(self.listeValeursCourantes) > max : 
219          self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
220
221       if self.listeValeursCourantes== [] :  self.node.item.set_valeur([])
222       else : self.node.item.set_valeur(self.listeValeursCourantes)
223
224       # Exception pour PSEN
225       if min==0 and self.listeValeursCourantes== []: self.node.item.set_valeur([])
226       self.setValide()
227
228
229   def prepareListeResultatFiltre(self):
230       filtre=str(self.LEFiltre.text())
231       for cb in self.listeCB:
232           texte=cb.text() 
233           if texte.find(filtre) == 0 :
234             palette = QPalette(Qt.red)
235             palette.setColor(QPalette.WindowText,Qt.red)
236             cb.setPalette(palette)
237             t=cb.text()
238             cb.setText(t)
239             self.listeCbRouge.append(cb)
240
241   def prepareListeResultat(self):
242       self.clearAll()
243       self.setValeurs()
244
245   def clearAll(self):
246       for cb in self.listeCB :
247          cb.setText("")
248
249