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):
46 print "MonWidgetPlusieursInto", nom, self
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 # try except si la liste des possibles est vide
80 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
85 def changeTout(self,int):
86 if self.inhibe : return
88 if not(self.CBCheck.isChecked()) :
89 min,max = self.node.item.GetMinMax()
90 if max < len(self.listeAAfficher) :
91 commentaire=tr('impossible de tout selectionner : max =')+str(max)
92 self.editor.affiche_infos(commentaire,Qt.red)
95 for i in range(len(self.listeAAfficher)):
96 nomCB="lineEditVal"+str(i+1)
97 courant=getattr(self,nomCB)
98 courant.setChecked(True)
99 self.CBCheck.setChecked(False)
101 for i in range(len(self.listeAAfficher)):
102 nomCB="lineEditVal"+str(i+1)
103 courant=getattr(self,nomCB)
104 courant.setChecked(False)
105 self.CBCheck.setChecked(True)
109 def setValeurs(self):
110 self.listeValeursCourantes =self.node.item.get_valeur()
111 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
112 #print "ds set Valeur", self.listeValeursCourantes, self.node.item.get_valeur()
113 self.politique=PolitiquePlusieurs(self.node,self.editor)
114 self.vScrollBar = self.scrollArea.verticalScrollBar()
116 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
117 obj=self.node.item.getObject()
118 self.node.item.definition.validators.set_MCSimp(obj)
119 if self.node.item.isvalid() == 0 :
121 for item in self.listeValeursCourantes:
122 if self.node.item.definition.validators.verif_item(item)==1:
124 self.listeAAfficher=self.node.item.get_liste_possible(liste)
126 self.listeAAfficher=self.node.item.get_liste_possible([])
128 self.listeAAfficher=self.node.item.get_liste_possible([])
130 if self.objSimp.wait_assd() :
131 self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type()
132 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
134 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
135 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
137 self.PourEtreCoche=[]
138 if self.objSimp.wait_assd() :
139 for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
141 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
144 for i in self.listeAAfficher: maListe.append(i)
145 if self.alpha==1 : maListe.sort()
146 for i in range(1,len(maListe)+1): self.ajoutCB(i)
149 for i in range(len(maListe)):
150 nomCB="lineEditVal"+str(i+1)
151 courant=getattr(self,nomCB)
152 courant.setText(str(maListe[i]))
153 if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
154 else : courant.setChecked(False)
156 if monEnvQT5 : courant.toggled.connect(self.changeValeur)
157 else : self.connect(courant,SIGNAL("toggled(bool)"),self.changeValeur)
160 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
163 def ajoutCB(self,index,valeur=None):
164 nomCB="lineEditVal"+str(index)
165 if hasattr(self,nomCB) : return
166 nouveauCB = QCheckBox(self.scrollArea)
167 #self.CBLayout.addWidget(nouveauCB)
168 self.CBLayout.insertWidget(index-1,nouveauCB)
169 #QApplication.processEvents()
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)
179 def finCommentaire(self):
180 return self.finCommentaireListe()
182 def ajout1Valeur(self,valeur=None):
183 if valeur == None : return
184 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
185 if validite == 0 : return
186 if liste ==[] : return
188 for valeur in self.listeValeursCourantes : listeVal.append(valeur)
189 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
190 if (comm2 != "" and comm != None) : return comm2
192 self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
195 return(comm2+" "+comm)
199 def changeValeur(self):
200 if self.inhibe == True: return
201 self.noircirResultatFiltre()
202 self.listeValeursCourantesAvant=self.listeValeursCourantes
203 self.listeValeursCourantes = []
205 for i in range (1,len(self.listeAAfficher)+1):
206 nomLineEdit="lineEditVal"+str(i)
207 courant=getattr(self,nomLineEdit)
208 if not (courant.isChecked()):continue
209 valeur=courant.text()
210 if valeur != None and valeur != "" :
211 commentaire=self.ajout1Valeur(valeur)
212 if (commentaire != None ):
213 self.editor.affiche_infos(commentaire,Qt.red)
214 self.listeValeursCourantesAvant=self.listeValeursCourantes
217 min,max = self.node.item.GetMinMax()
218 if len(self.listeValeursCourantes) < min :
219 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
220 elif len(self.listeValeursCourantes) > max :
221 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
223 if self.listeValeursCourantes== [] : self.node.item.set_valeur(None)
224 else : self.node.item.set_valeur(self.listeValeursCourantes)
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 :