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 # try except si la liste des possibles est vide
79 self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
84 def changeTout(self,int):
85 if self.inhibe : return
87 if not(self.CBCheck.isChecked()) :
88 min,max = self.node.item.GetMinMax()
89 if max < len(self.listeAAfficher) :
90 commentaire=tr('impossible de tout selectionner : max =')+str(max)
91 self.editor.affiche_infos(commentaire,Qt.red)
94 for i in range(len(self.listeAAfficher)):
95 nomCB="lineEditVal"+str(i+1)
96 courant=getattr(self,nomCB)
97 courant.setChecked(True)
98 self.CBCheck.setChecked(False)
100 for i in range(len(self.listeAAfficher)):
101 nomCB="lineEditVal"+str(i+1)
102 courant=getattr(self,nomCB)
103 courant.setChecked(False)
104 self.CBCheck.setChecked(True)
108 def setValeurs(self):
109 self.listeValeursCourantes =self.node.item.get_valeur()
110 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
111 #print "ds set Valeur", self.listeValeursCourantes, self.node.item.get_valeur()
112 self.politique=PolitiquePlusieurs(self.node,self.editor)
113 self.vScrollBar = self.scrollArea.verticalScrollBar()
115 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
116 obj=self.node.item.getObject()
117 self.node.item.definition.validators.set_MCSimp(obj)
118 if self.node.item.isvalid() == 0 :
120 for item in self.listeValeursCourantes:
121 if self.node.item.definition.validators.verif_item(item)==1:
123 self.listeAAfficher=self.node.item.get_liste_possible(liste)
125 self.listeAAfficher=self.node.item.get_liste_possible([])
127 self.listeAAfficher=self.node.item.get_liste_possible([])
129 if self.objSimp.wait_assd() :
130 self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type()
131 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
133 if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
134 else : self.setMinimumHeight(len(self.listeAAfficher)*30)
136 self.PourEtreCoche=[]
137 if self.objSimp.wait_assd() :
138 for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
140 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
143 for i in self.listeAAfficher: maListe.append(i)
144 if self.alpha==1 : maListe.sort()
145 for i in range(1,len(maListe)+1): self.ajoutCB(i)
148 for i in range(len(maListe)):
149 nomCB="lineEditVal"+str(i+1)
150 courant=getattr(self,nomCB)
151 courant.setText(str(maListe[i]))
152 if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
153 else : courant.setChecked(False)
155 if monEnvQT5 : courant.toggled.connect(self.changeValeur)
156 else : self.connect(courant,SIGNAL("toggled(bool)"),self.changeValeur)
159 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
162 def ajoutCB(self,index,valeur=None):
163 nomCB="lineEditVal"+str(index)
164 if hasattr(self,nomCB) : return
165 nouveauCB = QCheckBox(self.scrollArea)
166 #self.CBLayout.addWidget(nouveauCB)
167 self.CBLayout.insertWidget(index-1,nouveauCB)
168 #QApplication.processEvents()
169 self.listeCB.append(nouveauCB)
170 nouveauCB.setText("")
171 if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
172 else : nouveauCB.setStyleSheet("background:rgb(240,240,240)")
173 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
175 setattr(self,nomCB,nouveauCB)
178 def finCommentaire(self):
179 return self.finCommentaireListe()
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 self.editor.code == 'PSEN_N1' and self.nom==('Onglets') 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 :