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