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):
89 if self.inhibe : return
91 if not(self.CBCheck.isChecked()) :
92 min,max = self.node.item.GetMinMax()
93 if max < len(self.listeAAfficher) :
94 commentaire=tr('impossible de tout selectionner : max =')+str(max)
95 self.editor.affiche_infos(commentaire,Qt.red)
98 for i in range(len(self.listeAAfficher)):
99 nomCB="lineEditVal"+str(i+1)
100 courant=getattr(self,nomCB)
101 courant.setChecked(True)
102 self.CBCheck.setChecked(False)
104 for i in range(len(self.listeAAfficher)):
105 nomCB="lineEditVal"+str(i+1)
106 courant=getattr(self,nomCB)
107 courant.setChecked(False)
108 self.CBCheck.setChecked(True)
112 def setValeurs(self):
113 self.listeValeursCourantes =self.node.item.get_valeur()
114 if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
115 #print "ds set Valeur", self.listeValeursCourantes, self.node.item.get_valeur()
116 self.politique=PolitiquePlusieurs(self.node,self.editor)
117 self.vScrollBar = self.scrollArea.verticalScrollBar()
119 if hasattr(self.node.item.definition.validators,'set_MCSimp'):
120 obj=self.node.item.getObject()
121 self.node.item.definition.validators.set_MCSimp(obj)
122 if self.node.item.isvalid() == 0 :
124 for item in self.listeValeursCourantes:
125 if self.node.item.definition.validators.verif_item(item)==1:
127 self.listeAAfficher=self.node.item.get_liste_possible(liste)
129 self.listeAAfficher=self.node.item.get_liste_possible([])
131 self.listeAAfficher=self.node.item.get_liste_possible([])
133 if self.node.item.has_intoSug() : self.listeAAfficher=self.node.item.get_liste_possible_avecSug([])
136 if self.objSimp.wait_assd() :
137 self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type()
138 if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
140 #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
141 #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
143 self.PourEtreCoche=[]
144 if self.objSimp.wait_assd() :
145 for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
147 for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
150 for i in self.listeAAfficher: maListe.append(i)
151 if self.alpha==1 : maListe.sort()
152 for i in range(1,len(maListe)+1): self.ajoutCB(i)
155 for i in range(len(maListe)):
156 nomCB="lineEditVal"+str(i+1)
157 courant=getattr(self,nomCB)
158 courant.setText(str(maListe[i]))
159 if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
160 else : courant.setChecked(False)
162 courant.toggled.connect(self.changeValeur)
165 self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
168 def ajoutCB(self,index,valeur=None):
169 nomCB="lineEditVal"+str(index)
170 if hasattr(self,nomCB) : return
171 nouveauCB = QCheckBox(self.scrollArea)
172 self.CBLayout.insertWidget(index-1,nouveauCB)
173 self.listeCB.append(nouveauCB)
174 nouveauCB.setText("")
175 if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
176 else : nouveauCB.setStyleSheet("background:rgb(240,240,240)")
177 self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
179 setattr(self,nomCB,nouveauCB)
183 def ajout1Valeur(self,valeur=None):
184 if valeur == None : return
185 liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
186 if validite == 0 : return
187 if liste ==[] : return
189 for valeur in self.listeValeursCourantes : listeVal.append(valeur)
190 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
191 if (comm2 != "" and comm != None) : return comm2
193 self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
196 return(comm2+" "+comm)
200 def changeValeur(self):
201 if self.inhibe == True: return
202 if hasattr(self,'LEFiltre') :self.noircirResultatFiltre()
203 self.listeValeursCourantesAvant=self.listeValeursCourantes
204 self.listeValeursCourantes = []
206 for i in range (1,len(self.listeAAfficher)+1):
207 nomLineEdit="lineEditVal"+str(i)
208 courant=getattr(self,nomLineEdit)
209 if not (courant.isChecked()):continue
210 valeur=courant.text()
211 if valeur != None and valeur != "" :
212 commentaire=self.ajout1Valeur(valeur)
213 if (commentaire != None ):
214 self.editor.affiche_infos(commentaire,Qt.red)
215 self.listeValeursCourantesAvant=self.listeValeursCourantes
218 min,max = self.node.item.GetMinMax()
219 if len(self.listeValeursCourantes) < min :
220 self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
221 elif len(self.listeValeursCourantes) > max :
222 self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
224 if self.listeValeursCourantes== [] : self.node.item.set_valeur([])
225 else : self.node.item.set_valeur(self.listeValeursCourantes)
227 # Exception pour PSEN
228 if min==0 and self.listeValeursCourantes== []: self.node.item.set_valeur([])
232 def prepareListeResultatFiltre(self):
233 filtre=str(self.LEFiltre.text())
234 for cb in self.listeCB:
236 if texte.find(filtre) == 0 :
237 palette = QPalette(Qt.red)
238 palette.setColor(QPalette.WindowText,Qt.red)
239 cb.setPalette(palette)
242 self.listeCbRouge.append(cb)
244 def prepareListeResultat(self):
249 for cb in self.listeCB :