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
23 from PyQt5.QtCore import Qt
25 from PyQt4.QtGui import *
26 from PyQt4.QtCore import *
30 from qtSaisie import SaisieValeur
31 from monPlusieursBasePanel import MonPlusieursBasePanel
33 from Extensions.i18n import tr
37 class MonFonctionPanel(MonPlusieursBasePanel):
38 # Classe definissant le panel associe© aux mots-cles qui demandent
39 # a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
41 def __init__(self,node, parent = None,name = None,fl = 0):
42 #print "MonFonctionPanel"
45 MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
47 def SetNbValeurs(self):
49 if self.node.item.wait_tuple()== 1 :
50 for a in self.node.item.definition.type :
52 self.nbValeurs = a.ntuple
56 genea=self.node.item.get_genealogie()
57 self.nbValeursASaisir=self.nbValeurs
58 if "VALE" in genea: self.nbValeurs=2
59 if "VALE_C" in genea: self.nbValeurs=3
62 def DecoupeListeValeurs(self,liste):
63 #decoupe la liste des valeurs en n ( les x puis les y)
65 if ((len(liste)% self.nbValeursASaisir != 0 and (len(liste)% self.nbValeurs))):
66 message=tr("La cardinalite n'est pas correcte, la derniere valeur est ignoree")
67 self.editor.affiche_infos(message,Qt.red)
69 while ( i < len(liste) ) :
71 t=tuple(liste[i:i+self.nbValeurs])
74 t=tuple(liste[i:len(liste)])
78 def BuildLBValeurs(self,listeValeurs=None):
79 self.LBValeurs.clear()
80 if listeValeurs== None :
81 listeValeurs=self.node.item.GetListeValeurs()
82 if self.node.item.wait_tuple()== 1 :
83 listeATraiter=listeValeurs
84 for valeur in listeATraiter:
85 str_valeur=str(valeur)
86 self.LBValeurs.addItem(str_valeur)
88 for valeur in self.DecoupeListeValeurs(listeValeurs):
89 if type(valeur) == types.TupleType:
92 TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
93 TupleEnTexte = TupleEnTexte[0:-2] +")"
94 self.LBValeurs.addItem(TupleEnTexte)
96 self.LBValeurs.addItem(str(valeur))
99 def ajout1Valeur(self,liste=[]):
100 # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
103 if self.node.item.wait_tuple()== 1 :
104 liste=SaisieValeur.TraiteLEValeurTuple(self)
105 if liste == [''] : return
107 liste,validite=SaisieValeur.TraiteLEValeur(self)
108 if validite == 0 : return
109 if liste ==[] : return
111 if (self.node.item.wait_tuple()== 1 and len(liste) != self.nbValeurs):
112 commentaire = str(liste)
113 commentaire += tr(" n est pas un tuple de ")
114 commentaire += str(self.nbValeursASaisir)
115 commentaire += tr(" valeurs")
116 self.LEValeur.setText(str(liste))
117 self.editor.affiche_infos(commentaire,Qt.red)
120 if self.node.item.wait_tuple()== 1 :
124 index=self.LBValeurs.currentRow()
125 if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
128 index=self.LBValeurs.currentRow() + 1
129 indexListe=index*self.nbValeurs
130 if index == 0 : indexListe=len(self.listeValeursCourantes)
133 for valeur in self.listeValeursCourantes :
134 listeVal.append(valeur)
135 if self.node.item.wait_tuple()== 1 :
137 validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
139 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
140 self.Commentaire.setText(tr(comm2))
142 self.editor.affiche_infos(comm,Qt.red)
144 self.LEValeur.setText("")
145 l1=self.listeValeursCourantes[:indexListe]
146 l3=self.listeValeursCourantes[indexListe:]
147 if self.node.item.wait_tuple()== 1 :
148 listeATraiter=listeRetour
150 listeATraiter=self.DecoupeListeValeurs(listeRetour)
151 for valeur in listeATraiter :
152 if type(valeur) == types.TupleType:
155 TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
156 str_valeur = TupleEnTexte[0:-2] +")"
158 str_valeur=str(valeur)
159 self.LBValeurs.insertItem(index,str_valeur)
160 item=self.LBValeurs.item(index)
162 self.LBValeurs.setCurrentItem(item)
164 self.listeValeursCourantes=l1+listeRetour+l3
165 self.BuildLBValeurs(self.listeValeursCourantes)
168 def ajoutNValeur(self,liste) :
169 if len(liste)%self.nbValeurs != 0 :
170 texte="Nombre de valeur incorrecte"
171 #self.Commentaire.setText(texte)
172 self.editor.affiche_infos(texte,Qt.red)
174 listeDecoupee=self.DecoupeListeValeurs(liste)
175 for vals in listeDecoupee :
176 self.ajout1Valeur(vals)
178 def Sup1Valeur(self):
179 index=self.LBValeurs.currentRow()
180 if index == None : return
181 removed_item = self.LBValeurs.takeItem(index)
182 text = removed_item.text()[1:-1] # Remove the parenthesis
183 self.LEValeur.setText(text)
186 for i in range(self.nbValeurs):
187 indexAOter=index*self.nbValeurs + i
188 indexInterdit.append(indexAOter)
189 if self.node.item.wait_tuple()== 1 :
190 indexInterdit=[index]
193 for valeur in self.listeValeursCourantes :
194 if not (i in indexInterdit) :
195 listeVal.append(valeur)
197 self.listeValeursCourantes=listeVal
198 listeValeurs=self.listeValeursCourantes