1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 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 import string,types,os
24 from determine import monEnvQT5
26 from PyQt5.QtWidgets import QCheckBox, QScrollBar, QFrame, QApplication, QLabel
27 from PyQt5.QtWidgets import QSizePolicy,QSpacerItem
28 from PyQt5.QtGui import QPalette, QFont
29 from PyQt5.QtCore import Qt
31 from PyQt4.QtGui import *
32 from PyQt4.QtCore import *
34 from Extensions.i18n import tr
36 from feuille import Feuille
37 from desWidgetPlusieursInto import Ui_WidgetPlusieursInto
38 from politiquesValidation import PolitiquePlusieurs
39 from qtSaisie import SaisieValeur
40 from gereListe import GerePlie
41 from gereListe import GereListe
43 class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe):
45 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
51 self.listeValeursCourantes=node.item.GetListeValeurs()
52 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
54 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
55 GereListe.__init__(self)
57 self.parentQt.commandesLayout.insertWidget(-1,self)
58 if monEnvQT5 : self.CBCheck.stateChanged.connect(self.changeTout)
59 else : self.connect(self.CBCheck, SIGNAL('stateChanged(int)'),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):
88 if self.inhibe : return
90 if not(self.CBCheck.isChecked()) :
91 min,max = self.node.item.GetMinMax()
92 if max < len(self.listeAAfficher) :
93 commentaire=tr('impossible de tout selectionner : max =')+str(max)
94 self.editor.affiche_infos(commentaire,Qt.red)
97 for i in range(len(self.listeAAfficher)):
98 nomCB="lineEditVal"+str(i+1)
99 courant=getattr(self,nomCB)
100 courant.setChecked(True)
101 self.CBCheck.setChecked(False)
103 for i in range(len(self.listeAAfficher)):
104 nomCB="lineEditVal"+str(i+1)
105 courant=getattr(self,nomCB)
106 courant.setChecked(False)
107 self.CBCheck.setChecked(True)
111 def setValeurs(self):
112 self.listeValeursCourantes =self.node.item.get_valeur()
113 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
114 #print "ds set Valeur", self.listeValeursCourantes, self.node.item.get_valeur()
115 self.politique=PolitiquePlusieurs(self.node,self.editor)
116 self.vScrollBar = self.scrollArea.verticalScrollBar()
118 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
119 obj=self.node.item.getObject()
120 self.node.item.definition.validators.set_MCSimp(obj)
121 if self.node.item.isvalid() == 0 :
123 for item in self.listeValeursCourantes:
124 if self.node.item.definition.validators.verif_item(item)==1:
126 self.listeAAfficher=self.node.item.get_liste_possible(liste)
128 self.listeAAfficher=self.node.item.get_liste_possible([])
130 self.listeAAfficher=self.node.item.get_liste_possible([])
132 if self.objSimp.wait_assd() :
133 self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type()
134 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
136 #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
137 #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
139 self.PourEtreCoche=[]
140 if self.objSimp.wait_assd() :
141 for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
143 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
146 for i in self.listeAAfficher: maListe.append(i)
147 if self.alpha==1 : maListe.sort()
148 for i in range(1,len(maListe)+1): self.ajoutCB(i)
151 for i in range(len(maListe)):
152 nomCB="lineEditVal"+str(i+1)
153 courant=getattr(self,nomCB)
154 courant.setText(str(maListe[i]))
155 if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
156 else : courant.setChecked(False)
158 if monEnvQT5 : courant.toggled.connect(self.changeValeur)
159 else : self.connect(courant,SIGNAL("toggled(bool)"),self.changeValeur)
162 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
165 def ajoutCB(self,index,valeur=None):
166 nomCB="lineEditVal"+str(index)
167 if hasattr(self,nomCB) : return
168 nouveauCB = QCheckBox(self.scrollArea)
169 self.CBLayout.insertWidget(index-1,nouveauCB)
170 self.listeCB.append(nouveauCB)
171 nouveauCB.setText("")
172 if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
173 else : nouveauCB.setStyleSheet("background:rgb(240,240,240)")
174 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
176 setattr(self,nomCB,nouveauCB)
180 def ajout1Valeur(self,valeur=None):
181 if valeur == None : return
182 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
183 if validite == 0 : return
184 if liste ==[] : return
186 for valeur in self.listeValeursCourantes : listeVal.append(valeur)
187 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
188 if (comm2 != "" and comm != None) : return comm2
190 self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
193 return(comm2+" "+comm)
197 def changeValeur(self):
198 if self.inhibe == True: return
199 self.noircirResultatFiltre()
200 self.listeValeursCourantesAvant=self.listeValeursCourantes
201 self.listeValeursCourantes = []
203 for i in range (1,len(self.listeAAfficher)+1):
204 nomLineEdit="lineEditVal"+str(i)
205 courant=getattr(self,nomLineEdit)
206 if not (courant.isChecked()):continue
207 valeur=courant.text()
208 if valeur != None and valeur != "" :
209 commentaire=self.ajout1Valeur(valeur)
210 if (commentaire != None ):
211 self.editor.affiche_infos(commentaire,Qt.red)
212 self.listeValeursCourantesAvant=self.listeValeursCourantes
215 min,max = self.node.item.GetMinMax()
216 if len(self.listeValeursCourantes) < min :
217 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
218 elif len(self.listeValeursCourantes) > max :
219 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
221 if self.listeValeursCourantes== [] : self.node.item.set_valeur(None)
222 else : self.node.item.set_valeur(self.listeValeursCourantes)
224 # Exception pour PSEN
225 if min==0 and self.listeValeursCourantes== []: self.node.item.set_valeur([])
230 def prepareListeResultatFiltre(self):
231 filtre=str(self.LEFiltre.text())
232 for cb in self.listeCB:
234 if texte.find(filtre) == 0 :
235 palette = QPalette(Qt.red)
236 palette.setColor(QPalette.WindowText,Qt.red)
237 cb.setPalette(palette)
240 self.listeCbRouge.append(cb)
242 def prepareListeResultat(self):
247 for cb in self.listeCB :