]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monWidgetPlusieursInto.py
Salome HOME
chgt Copyrigth
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursInto.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   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 PyQt5.QtWidgets  import QCheckBox, QScrollBar, QFrame, QApplication, QLabel
31 from PyQt5.QtWidgets  import QSizePolicy,QSpacerItem
32 from PyQt5.QtGui  import QPalette, QFont
33 from PyQt5.QtCore import Qt
34
35 from Extensions.i18n import tr
36
37 from InterfaceQT4.feuille                import Feuille
38 from desWidgetPlusieursInto              import Ui_WidgetPlusieursInto
39 from InterfaceQT4.politiquesValidation   import PolitiquePlusieurs
40 from InterfaceQT4.qtSaisie               import SaisieValeur
41 from InterfaceQT4.gereListe              import GerePlie
42 from InterfaceQT4.gereListe              import GereListe
43
44 class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe):
45
46   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
47
48         self.index=1
49         self.alpha=0
50         self.listeCB=[]
51         self.listeCbRouge=[]
52         self.listeValeursCourantes=node.item.getListeValeurs()
53         if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
54
55         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
56         GereListe.__init__(self)
57
58         self.parentQt.commandesLayout.insertWidget(-1,self)
59         self.CBCheck.stateChanged.connect(self.changeTout)
60
61         self.gereIconePlier()
62         self.editor.listeDesListesOuvertes.add(self.node.item)
63         self.inhibe=False
64         #self.finCommentaireListe()
65
66         if self.listeAAfficher== None or self.listeAAfficher==[] :
67             spacerItem = QSpacerItem(30, 20, QSizePolicy.Fixed, QSizePolicy.Minimum)
68             self.CBLayout.addItem(spacerItem)
69             nouveauCommentaire=QLabel()
70             maPolice= QFont("Times", 16)
71             nouveauCommentaire.setFont(maPolice);
72             nouveauCommentaire.setText(tr('Pas de valeurs possibles'))
73             self.CBLayout.addWidget(nouveauCommentaire)
74             spacerItem2 = QSpacerItem(40, 70, QSizePolicy.Fixed, QSizePolicy.Minimum)
75             self.CBLayout.addItem(spacerItem2)
76
77         if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
78         if len(self.listeAAfficher)  == len(self.listeValeursCourantes) : self.CBCheck.setChecked(True)
79         # try except si la liste des possibles est vide
80         # prevoir qqchose
81         try :
82           self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
83         except :
84           pass
85
86
87   def changeTout(self,int):
88        #print ('changeTout')
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.afficheInfos(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        #print ('setValeurs')
114        self.listeValeursCourantes =self.node.item.getValeur()
115        if self.listeValeursCourantes ==  None : self.listeValeursCourantes=[]
116        #print "ds set Valeur", self.listeValeursCourantes, self.node.item.getValeur()
117        self.politique=PolitiquePlusieurs(self.node,self.editor)
118        self.vScrollBar = self.scrollArea.verticalScrollBar()
119
120        if hasattr(self.node.item.definition.validators,'set_MCSimp'):
121             obj=self.node.item.getObject()
122             self.node.item.definition.validators.set_MCSimp(obj)
123             if self.node.item.isValid() == 0 :
124                liste=[]
125                for item in self.listeValeursCourantes:
126                    if self.node.item.definition.validators.verifItem(item)==1:
127                       liste.append(item)
128                self.listeAAfficher=self.node.item.getListePossible(liste)
129             else:
130                self.listeAAfficher=self.node.item.getListePossible([])
131        else :
132                self.listeAAfficher=self.node.item.getListePossible([])
133
134        if self.node.item.hasIntoSug() : self.listeAAfficher=self.node.item.getListePossibleAvecSug([])
135
136
137        if self.objSimp.waitAssd() :
138           self.listeAAfficher=self.node.item.getSdAvantDuBonType()
139        if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
140
141        #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
142        #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
143
144        self.PourEtreCoche=[]
145        if self.objSimp.waitAssd() :
146           for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
147        else :
148           for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
149
150        maListe=[]
151        for  i in self.listeAAfficher: maListe.append(i)
152        if self.alpha==1 : maListe.sort()
153        for i in range(1,len(maListe)+1): self.ajoutCB(i)
154
155        self.inhibe=True
156        for i in range(len(maListe)):
157            nomCB="lineEditVal"+str(i+1)
158            courant=getattr(self,nomCB)
159            courant.setText(str(maListe[i]))
160            if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
161            else                                : courant.setChecked(False)
162
163            courant.toggled.connect(self.changeValeur)
164        self.inhibe=False
165
166        self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
167
168
169   def ajoutCB(self,index,valeur=None):
170       #print ('ajoutCB')
171       nomCB="lineEditVal"+str(index)
172       if hasattr(self,nomCB) : return
173       nouveauCB = QCheckBox(self.scrollArea)
174       self.CBLayout.insertWidget(index-1,nouveauCB)
175       self.listeCB.append(nouveauCB)
176       nouveauCB.setText("")
177       if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
178       else :                        nouveauCB.setStyleSheet("background:rgb(240,240,240)")
179       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
180       nouveauCB.setFocus()
181       setattr(self,nomCB,nouveauCB)
182
183
184
185   def ajout1Valeur(self,valeur=None):
186         #print ('ajout1Valeur')
187         if valeur == None : return
188         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
189         if validite == 0 : return
190         if liste ==[]    : return
191         listeVal=[]
192         for valeur in self.listeValeursCourantes : listeVal.append(valeur)
193         validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
194         if (comm2 != "" and comm != None) : return comm2
195         if validite :
196            self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
197            return None
198         else :
199            return(comm2+" "+comm)
200
201
202
203   def changeValeur(self):
204  #def changeValeur(self,changeDePlace=False,oblige=True, numero=None):
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