Salome HOME
Merge V9 dans Master
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursInto.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017   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        #print ('changeTout')
90        if self.inhibe : return
91        self.inhibe=True
92        if not(self.CBCheck.isChecked()) : 
93           min,max = self.node.item.getMinMax()
94           if max < len(self.listeAAfficher) :
95              commentaire=tr('impossible de tout selectionner : max =')+str(max)
96              self.editor.afficheInfos(commentaire,Qt.red)
97              self.inhibe=False
98              return
99           for i in range(len(self.listeAAfficher)):
100               nomCB="lineEditVal"+str(i+1)
101               courant=getattr(self,nomCB)
102               courant.setChecked(True)
103           self.CBCheck.setChecked(False)
104        else :
105           for i in range(len(self.listeAAfficher)):
106               nomCB="lineEditVal"+str(i+1)
107               courant=getattr(self,nomCB)
108               courant.setChecked(False)
109           self.CBCheck.setChecked(True)
110        self.inhibe=False
111        self.changeValeur()
112
113   def setValeurs(self):
114        #print ('setValeurs')
115        self.listeValeursCourantes =self.node.item.getValeur()
116        if self.listeValeursCourantes ==  None : self.listeValeursCourantes=[]
117        #print "ds set Valeur", self.listeValeursCourantes, self.node.item.getValeur()
118        self.politique=PolitiquePlusieurs(self.node,self.editor)
119        self.vScrollBar = self.scrollArea.verticalScrollBar()
120
121        if hasattr(self.node.item.definition.validators,'set_MCSimp'):
122             obj=self.node.item.getObject()
123             self.node.item.definition.validators.set_MCSimp(obj)
124             if self.node.item.isValid() == 0 :
125                liste=[]
126                for item in self.listeValeursCourantes:
127                    if self.node.item.definition.validators.verifItem(item)==1:
128                       liste.append(item)
129                self.listeAAfficher=self.node.item.getListePossible(liste)
130             else: 
131                self.listeAAfficher=self.node.item.getListePossible([])
132        else :
133                self.listeAAfficher=self.node.item.getListePossible([])
134
135        if self.node.item.hasIntoSug() : self.listeAAfficher=self.node.item.getListePossibleAvecSug([])
136                
137
138        if self.objSimp.waitAssd() : 
139           self.listeAAfficher=self.node.item.getSdAvantDuBonType()
140        if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
141
142        #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
143        #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
144
145        self.PourEtreCoche=[]
146        if self.objSimp.waitAssd() : 
147           for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
148        else :
149           for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
150
151        maListe=[]
152        for  i in self.listeAAfficher: maListe.append(i)  
153        if self.alpha==1 : maListe.sort()
154        for i in range(1,len(maListe)+1): self.ajoutCB(i)
155
156        self.inhibe=True
157        for i in range(len(maListe)):
158            nomCB="lineEditVal"+str(i+1)
159            courant=getattr(self,nomCB)
160            courant.setText(str(maListe[i]))
161            if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
162            else                                : courant.setChecked(False)
163
164            courant.toggled.connect(self.changeValeur)
165        self.inhibe=False
166
167        self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
168        
169
170   def ajoutCB(self,index,valeur=None):
171       #print ('ajoutCB')
172       nomCB="lineEditVal"+str(index)
173       if hasattr(self,nomCB) : return
174       nouveauCB = QCheckBox(self.scrollArea)
175       self.CBLayout.insertWidget(index-1,nouveauCB)
176       self.listeCB.append(nouveauCB)
177       nouveauCB.setText("")
178       if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
179       else :                        nouveauCB.setStyleSheet("background:rgb(240,240,240)")
180       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
181       nouveauCB.setFocus()
182       setattr(self,nomCB,nouveauCB)
183       
184
185
186   def ajout1Valeur(self,valeur=None):
187         #print ('ajout1Valeur')
188         if valeur == None : return
189         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
190         if validite == 0 : return
191         if liste ==[]    : return
192         listeVal=[]
193         for valeur in self.listeValeursCourantes : listeVal.append(valeur)
194         validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
195         if (comm2 != "" and comm != None) : return comm2
196         if validite : 
197            self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
198            return None
199         else :
200            return(comm2+" "+comm)
201         
202
203
204   def changeValeur(self):
205       #print ('changeValeur')
206       if self.inhibe == True: return
207       if hasattr(self,'LEFiltre') :self.noircirResultatFiltre()
208       self.listeValeursCourantesAvant=self.listeValeursCourantes
209       self.listeValeursCourantes = []
210
211       for i in range (1,len(self.listeAAfficher)+1):
212           nomLineEdit="lineEditVal"+str(i)
213           courant=getattr(self,nomLineEdit)
214           if not (courant.isChecked()):continue
215           valeur=courant.text()
216           if valeur != None and valeur != "" : 
217              commentaire=self.ajout1Valeur(valeur)
218              if (commentaire != None ): 
219                  self.editor.afficheInfos(commentaire,Qt.red)
220                  self.listeValeursCourantesAvant=self.listeValeursCourantes
221                  self.setValeurs()
222
223       min,max = self.node.item.getMinMax()
224       if len(self.listeValeursCourantes) < min : 
225          self.editor.afficheInfos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
226       elif len(self.listeValeursCourantes) > max : 
227          self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
228
229       if self.listeValeursCourantes== [] :  self.node.item.setValeur([])
230       else : self.node.item.setValeur(self.listeValeursCourantes)
231
232       # Exception pour PSEN
233       if min==0 and self.listeValeursCourantes== []: self.node.item.setValeur([])
234       self.setValide()
235
236
237   def prepareListeResultatFiltre(self):
238       #print ('prepareListeResultatFiltre')
239       filtre=str(self.LEFiltre.text())
240       for cb in self.listeCB:
241           texte=cb.text() 
242           if texte.find(filtre) == 0 :
243             palette = QPalette(Qt.red)
244             palette.setColor(QPalette.WindowText,Qt.red)
245             cb.setPalette(palette)
246             t=cb.text()
247             cb.setText(t)
248             self.listeCbRouge.append(cb)
249
250   def prepareListeResultat(self):
251       #print ('prepareListeResultat')
252       self.clearAll()
253       self.setValeurs()
254
255   def clearAll(self):
256       #print ('clearAll')
257       for cb in self.listeCB :
258          cb.setText("")
259
260