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):
50 self.listeValeursCourantes=node.item.GetListeValeurs()
51 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
53 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
54 GereListe.__init__(self)
56 self.parentQt.commandesLayout.insertWidget(-1,self)
57 if monEnvQT5 : self.CBCheck.stateChanged.connect(self.changeTout)
58 else : self.connect(self.CBCheck, SIGNAL('stateChanged(int)'),self.changeTout)
61 self.editor.listeDesListesOuvertes.add(self.node.item)
63 #self.finCommentaireListe()
65 if self.listeAAfficher== None or self.listeAAfficher==[] :
66 spacerItem = QSpacerItem(30, 20, QSizePolicy.Fixed, QSizePolicy.Minimum)
67 self.CBLayout.addItem(spacerItem)
68 nouveauCommentaire=QLabel()
69 maPolice= QFont("Times", 16)
70 nouveauCommentaire.setFont(maPolice);
71 nouveauCommentaire.setText(tr('Pas de valeurs possibles'))
72 self.CBLayout.addWidget(nouveauCommentaire)
73 spacerItem2 = QSpacerItem(40, 70, QSizePolicy.Fixed, QSizePolicy.Minimum)
74 self.CBLayout.addItem(spacerItem2)
76 if len(self.listeAAfficher) < 8 :
77 self.frameRecherche.close()
78 # try except si la liste des possibles est vide
81 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
86 def changeTout(self,int):
87 if self.inhibe : return
89 if not(self.CBCheck.isChecked()) :
90 min,max = self.node.item.GetMinMax()
91 if max < len(self.listeAAfficher) :
92 commentaire=tr('impossible de tout selectionner : max =')+str(max)
93 self.editor.affiche_infos(commentaire,Qt.red)
96 for i in range(len(self.listeAAfficher)):
97 nomCB="lineEditVal"+str(i+1)
98 courant=getattr(self,nomCB)
99 courant.setChecked(True)
100 self.CBCheck.setChecked(False)
102 for i in range(len(self.listeAAfficher)):
103 nomCB="lineEditVal"+str(i+1)
104 courant=getattr(self,nomCB)
105 courant.setChecked(False)
106 self.CBCheck.setChecked(True)
110 def setValeurs(self):
111 self.listeValeursCourantes =self.node.item.get_valeur()
112 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
113 #print "ds set Valeur", self.listeValeursCourantes, self.node.item.get_valeur()
114 self.politique=PolitiquePlusieurs(self.node,self.editor)
115 self.vScrollBar = self.scrollArea.verticalScrollBar()
117 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
118 obj=self.node.item.getObject()
119 self.node.item.definition.validators.set_MCSimp(obj)
120 if self.node.item.isvalid() == 0 :
122 for item in self.listeValeursCourantes:
123 if self.node.item.definition.validators.verif_item(item)==1:
125 self.listeAAfficher=self.node.item.get_liste_possible(liste)
127 self.listeAAfficher=self.node.item.get_liste_possible([])
129 self.listeAAfficher=self.node.item.get_liste_possible([])
131 if self.objSimp.wait_assd() :
132 self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type()
133 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
135 #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
136 #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
138 self.PourEtreCoche=[]
139 if self.objSimp.wait_assd() :
140 for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
142 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
145 for i in self.listeAAfficher: maListe.append(i)
146 if self.alpha==1 : maListe.sort()
147 for i in range(1,len(maListe)+1): self.ajoutCB(i)
150 for i in range(len(maListe)):
151 nomCB="lineEditVal"+str(i+1)
152 courant=getattr(self,nomCB)
153 courant.setText(str(maListe[i]))
154 if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
155 else : courant.setChecked(False)
157 if monEnvQT5 : courant.toggled.connect(self.changeValeur)
158 else : self.connect(courant,SIGNAL("toggled(bool)"),self.changeValeur)
161 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
164 def ajoutCB(self,index,valeur=None):
165 nomCB="lineEditVal"+str(index)
166 if hasattr(self,nomCB) : return
167 nouveauCB = QCheckBox(self.scrollArea)
168 #self.CBLayout.addWidget(nouveauCB)
169 self.CBLayout.insertWidget(index-1,nouveauCB)
170 #QApplication.processEvents()
171 self.listeCB.append(nouveauCB)
172 nouveauCB.setText("")
173 if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
174 else : nouveauCB.setStyleSheet("background:rgb(240,240,240)")
175 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
177 setattr(self,nomCB,nouveauCB)
181 def ajout1Valeur(self,valeur=None):
182 if valeur == None : return
183 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
184 if validite == 0 : return
185 if liste ==[] : return
187 for valeur in self.listeValeursCourantes : listeVal.append(valeur)
188 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
189 if (comm2 != "" and comm != None) : return comm2
191 self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
194 return(comm2+" "+comm)
198 def changeValeur(self):
199 if self.inhibe == True: return
200 self.noircirResultatFiltre()
201 self.listeValeursCourantesAvant=self.listeValeursCourantes
202 self.listeValeursCourantes = []
204 for i in range (1,len(self.listeAAfficher)+1):
205 nomLineEdit="lineEditVal"+str(i)
206 courant=getattr(self,nomLineEdit)
207 if not (courant.isChecked()):continue
208 valeur=courant.text()
209 if valeur != None and valeur != "" :
210 commentaire=self.ajout1Valeur(valeur)
211 if (commentaire != None ):
212 self.editor.affiche_infos(commentaire,Qt.red)
213 self.listeValeursCourantesAvant=self.listeValeursCourantes
216 min,max = self.node.item.GetMinMax()
217 if len(self.listeValeursCourantes) < min :
218 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
219 elif len(self.listeValeursCourantes) > max :
220 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
222 if self.listeValeursCourantes== [] : self.node.item.set_valeur(None)
223 else : self.node.item.set_valeur(self.listeValeursCourantes)
225 # Exception pour PSEN
226 if min==0 and self.listeValeursCourantes== []: self.node.item.set_valeur([])
231 def prepareListeResultatFiltre(self):
232 filtre=str(self.LEFiltre.text())
233 for cb in self.listeCB:
235 if texte.find(filtre) == 0 :
236 palette = QPalette(Qt.red)
237 palette.setColor(QPalette.WindowText,Qt.red)
238 cb.setPalette(palette)
241 self.listeCbRouge.append(cb)
243 def prepareListeResultat(self):
248 for cb in self.listeCB :