1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from __future__ import absolute_import
23 from builtins import str
24 from builtins import range
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
35 from Extensions.i18n import tr
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
44 class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe):
46 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
52 self.listeValeursCourantes=node.item.getListeValeurs()
53 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
55 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
56 GereListe.__init__(self)
58 self.parentQt.commandesLayout.insertWidget(-1,self)
59 self.CBCheck.stateChanged.connect(self.changeTout)
62 self.editor.listeDesListesOuvertes.add(self.node.item)
64 #self.finCommentaireListe()
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)
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
82 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
87 def changeTout(self,int):
89 if self.inhibe : return
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)
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)
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)
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()
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 :
125 for item in self.listeValeursCourantes:
126 if self.node.item.definition.validators.verifItem(item)==1:
128 self.listeAAfficher=self.node.item.getListePossible(liste)
130 self.listeAAfficher=self.node.item.getListePossible([])
132 self.listeAAfficher=self.node.item.getListePossible([])
134 if self.node.item.hasIntoSug() : self.listeAAfficher=self.node.item.getListePossibleAvecSug([])
137 if self.objSimp.waitAssd() :
138 self.listeAAfficher=self.node.item.getSdAvantDuBonType()
139 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
141 #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
142 #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
144 self.PourEtreCoche=[]
145 if self.objSimp.waitAssd() :
146 for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
148 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
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)
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)
163 courant.toggled.connect(self.changeValeur)
166 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
169 def ajoutCB(self,index,valeur=None):
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)
181 setattr(self,nomCB,nouveauCB)
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
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
196 self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
199 return(comm2+" "+comm)
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 = []
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
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)
229 if self.listeValeursCourantes== [] : self.node.item.setValeur([])
230 else : self.node.item.setValeur(self.listeValeursCourantes)
232 # Exception pour PSEN
233 if min==0 and self.listeValeursCourantes== []: self.node.item.setValeur([])
237 def prepareListeResultatFiltre(self):
238 #print ('prepareListeResultatFiltre')
239 filtre=str(self.LEFiltre.text())
240 for cb in self.listeCB:
242 if texte.find(filtre) == 0 :
243 palette = QPalette(Qt.red)
244 palette.setColor(QPalette.WindowText,Qt.red)
245 cb.setPalette(palette)
248 self.listeCbRouge.append(cb)
250 def prepareListeResultat(self):
251 #print ('prepareListeResultat')
257 for cb in self.listeCB :