Salome HOME
pour Telemac : VARIABLES_TO_BE_PRINTED, commentaire et intoSug
[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 InterfaceQT4.feuille                import Feuille
39 from desWidgetPlusieursInto              import Ui_WidgetPlusieursInto 
40 from InterfaceQT4.politiquesValidation   import PolitiquePlusieurs
41 from InterfaceQT4.qtSaisie               import SaisieValeur
42 from InterfaceQT4.gereListe              import GerePlie
43 from InterfaceQT4.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.node.item.has_intoSug() : self.listeAAfficher=self.node.item.get_liste_possible_avecSug([])
134                
135
136        if self.objSimp.wait_assd() : 
137           self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type()
138        if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
139
140        #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
141        #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
142
143        self.PourEtreCoche=[]
144        if self.objSimp.wait_assd() : 
145           for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
146        else :
147           for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
148
149        maListe=[]
150        for  i in self.listeAAfficher: maListe.append(i)  
151        if self.alpha==1 : maListe.sort()
152        for i in range(1,len(maListe)+1): self.ajoutCB(i)
153
154        self.inhibe=True
155        for i in range(len(maListe)):
156            nomCB="lineEditVal"+str(i+1)
157            courant=getattr(self,nomCB)
158            courant.setText(str(maListe[i]))
159            if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
160            else                                : courant.setChecked(False)
161
162            courant.toggled.connect(self.changeValeur)
163        self.inhibe=False
164
165        self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
166        
167
168   def ajoutCB(self,index,valeur=None):
169       nomCB="lineEditVal"+str(index)
170       if hasattr(self,nomCB) : return
171       nouveauCB = QCheckBox(self.scrollArea)
172       self.CBLayout.insertWidget(index-1,nouveauCB)
173       self.listeCB.append(nouveauCB)
174       nouveauCB.setText("")
175       if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
176       else :                        nouveauCB.setStyleSheet("background:rgb(240,240,240)")
177       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
178       nouveauCB.setFocus()
179       setattr(self,nomCB,nouveauCB)
180       
181
182
183   def ajout1Valeur(self,valeur=None):
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         for valeur in self.listeValeursCourantes : listeVal.append(valeur)
190         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
191         if (comm2 != "" and comm != None) : return comm2
192         if validite : 
193            self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
194            return None
195         else :
196            return(comm2+" "+comm)
197         
198
199
200   def changeValeur(self):
201       if self.inhibe == True: return
202       if hasattr(self,'LEFiltre') :self.noircirResultatFiltre()
203       self.listeValeursCourantesAvant=self.listeValeursCourantes
204       self.listeValeursCourantes = []
205
206       for i in range (1,len(self.listeAAfficher)+1):
207           nomLineEdit="lineEditVal"+str(i)
208           courant=getattr(self,nomLineEdit)
209           if not (courant.isChecked()):continue
210           valeur=courant.text()
211           if valeur != None and valeur != "" : 
212              commentaire=self.ajout1Valeur(valeur)
213              if (commentaire != None ): 
214                  self.editor.affiche_infos(commentaire,Qt.red)
215                  self.listeValeursCourantesAvant=self.listeValeursCourantes
216                  self.setValeurs()
217
218       min,max = self.node.item.GetMinMax()
219       if len(self.listeValeursCourantes) < min : 
220          self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
221       elif len(self.listeValeursCourantes) > max : 
222          self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
223
224       if self.listeValeursCourantes== [] :  self.node.item.set_valeur([])
225       else : self.node.item.set_valeur(self.listeValeursCourantes)
226
227       # Exception pour PSEN
228       if min==0 and self.listeValeursCourantes== []: self.node.item.set_valeur([])
229       self.setValide()
230
231
232   def prepareListeResultatFiltre(self):
233       filtre=str(self.LEFiltre.text())
234       for cb in self.listeCB:
235           texte=cb.text() 
236           if texte.find(filtre) == 0 :
237             palette = QPalette(Qt.red)
238             palette.setColor(QPalette.WindowText,Qt.red)
239             cb.setPalette(palette)
240             t=cb.text()
241             cb.setText(t)
242             self.listeCbRouge.append(cb)
243
244   def prepareListeResultat(self):
245       self.clearAll()
246       self.setValeurs()
247
248   def clearAll(self):
249       for cb in self.listeCB :
250          cb.setText("")
251
252