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 if len(self.listeAAfficher) < 10 :
80 self.setMinimumHeight(len(self.listeAAfficher)*22+55)
82 self.setMinimumHeight(300)
84 # try except si la liste des possibles est vide
87 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
92 def changeTout(self,int):
94 if self.inhibe : return
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)
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)
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)
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()
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 :
130 for item in self.listeValeursCourantes:
131 if self.node.item.definition.validators.verifItem(item)==1:
133 self.listeAAfficher=self.node.item.getListePossible(liste)
135 self.listeAAfficher=self.node.item.getListePossible([])
137 self.listeAAfficher=self.node.item.getListePossible([])
139 if self.node.item.hasIntoSug() : self.listeAAfficher=self.node.item.getListePossibleAvecSug([])
142 if self.objSimp.waitAssd() :
143 self.listeAAfficher=self.node.item.getSdAvantDuBonType()
144 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
146 #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
147 #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
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)
155 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
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)
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)
170 courant.toggled.connect(self.changeValeur)
173 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
176 def ajoutCB(self,index,valeur=None):
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)
188 setattr(self,nomCB,nouveauCB)
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
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
203 self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
206 return(comm2+" "+comm)
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 = []
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
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)
236 if self.listeValeursCourantes== [] : self.node.item.setValeur([])
237 else : self.node.item.setValeur(self.listeValeursCourantes)
239 # Exception pour PSEN
240 if min==0 and self.listeValeursCourantes== []: self.node.item.setValeur([])
244 def prepareListeResultatFiltre(self):
245 #print ('prepareListeResultatFiltre')
246 filtre=str(self.LEFiltre.text())
247 for cb in self.listeCB:
249 if texte.find(filtre) == 0 :
250 palette = QPalette(Qt.red)
251 palette.setColor(QPalette.WindowText,Qt.red)
252 cb.setPalette(palette)
255 self.listeCbRouge.append(cb)
257 def prepareListeResultat(self):
258 #print ('prepareListeResultat')
264 for cb in self.listeCB :