1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017 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 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
36 from Extensions.i18n import tr
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
45 class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe):
47 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
53 self.listeValeursCourantes=node.item.getListeValeurs()
54 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
56 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
57 GereListe.__init__(self)
59 self.parentQt.commandesLayout.insertWidget(-1,self)
60 self.CBCheck.stateChanged.connect(self.changeTout)
63 self.editor.listeDesListesOuvertes.add(self.node.item)
65 #self.finCommentaireListe()
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)
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
83 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
88 def changeTout(self,int):
90 if self.inhibe : return
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)
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)
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)
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()
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 :
126 for item in self.listeValeursCourantes:
127 if self.node.item.definition.validators.verifItem(item)==1:
129 self.listeAAfficher=self.node.item.getListePossible(liste)
131 self.listeAAfficher=self.node.item.getListePossible([])
133 self.listeAAfficher=self.node.item.getListePossible([])
135 if self.node.item.hasIntoSug() : self.listeAAfficher=self.node.item.getListePossibleAvecSug([])
138 if self.objSimp.waitAssd() :
139 self.listeAAfficher=self.node.item.getSdAvantDuBonType()
140 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
142 #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
143 #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
145 self.PourEtreCoche=[]
146 if self.objSimp.waitAssd() :
147 for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
149 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
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)
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)
164 courant.toggled.connect(self.changeValeur)
167 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
170 def ajoutCB(self,index,valeur=None):
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)
182 setattr(self,nomCB,nouveauCB)
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
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
197 self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
200 return(comm2+" "+comm)
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 = []
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 :