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 qtSaisie import SaisieValeur
25 from monPlusieursBasePanel import MonPlusieursBasePanel
27 from PyQt4.QtGui import *
28 from PyQt4.QtCore import *
29 from Extensions.i18n import tr
33 class MonFonctionPanel(MonPlusieursBasePanel):
34 # Classe definissant le panel associe© aux mots-cles qui demandent
35 # a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
37 def __init__(self,node, parent = None,name = None,fl = 0):
38 #print "MonFonctionPanel"
41 MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
43 def SetNbValeurs(self):
45 if self.node.item.wait_tuple()== 1 :
46 for a in self.node.item.definition.type :
48 self.nbValeurs = a.ntuple
52 genea=self.node.item.get_genealogie()
53 self.nbValeursASaisir=self.nbValeurs
54 if "VALE" in genea: self.nbValeurs=2
55 if "VALE_C" in genea: self.nbValeurs=3
58 def DecoupeListeValeurs(self,liste):
59 #decoupe la liste des valeurs en n ( les x puis les y)
61 if ((len(liste)% self.nbValeursASaisir != 0 and (len(liste)% self.nbValeurs))):
62 message=tr("La cardinalite n'est pas correcte, la derniere valeur est ignoree")
63 #self.Commentaire.setText(QString(commentaire))
64 self.editor.affiche_infos(message,Qt.red)
66 while ( i < len(liste) ) :
68 t=tuple(liste[i:i+self.nbValeurs])
71 t=tuple(liste[i:len(liste)])
75 def BuildLBValeurs(self,listeValeurs=None):
76 self.LBValeurs.clear()
77 if listeValeurs== None :
78 listeValeurs=self.node.item.GetListeValeurs()
79 if self.node.item.wait_tuple()== 1 :
80 listeATraiter=listeValeurs
81 for valeur in listeATraiter:
82 str_valeur=str(valeur)
83 self.LBValeurs.addItem(str_valeur)
85 for valeur in self.DecoupeListeValeurs(listeValeurs):
86 if type(valeur) == types.TupleType:
89 TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
90 TupleEnTexte = TupleEnTexte[0:-2] +")"
91 self.LBValeurs.addItem(TupleEnTexte)
93 self.LBValeurs.addItem(QString(str(valeur)))
96 def Ajout1Valeur(self,liste=[]):
97 # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
100 if self.node.item.wait_tuple()== 1 :
101 liste=SaisieValeur.TraiteLEValeurTuple(self)
102 if liste == [''] : return
104 liste,validite=SaisieValeur.TraiteLEValeur(self)
105 if validite == 0 : return
106 if liste ==[] : return
108 if (self.node.item.wait_tuple()== 1 and len(liste) != self.nbValeurs):
109 commentaire = QString(str(liste))
110 commentaire += QString(tr(" n est pas un tuple de "))
111 commentaire += QString(str(self.nbValeursASaisir))
112 commentaire += QString(tr(" valeurs"))
113 self.LEValeur.setText(QString(str(liste)))
114 self.editor.affiche_infos(commentaire,Qt.red)
117 if self.node.item.wait_tuple()== 1 :
121 index=self.LBValeurs.currentRow()
122 if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
125 index=self.LBValeurs.currentRow() + 1
126 indexListe=index*self.nbValeurs
127 if index == 0 : indexListe=len(self.listeValeursCourantes)
130 for valeur in self.listeValeursCourantes :
131 listeVal.append(valeur)
132 if self.node.item.wait_tuple()== 1 :
134 validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
136 validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
137 self.Commentaire.setText(QString.fromUtf8(QString(comm2)))
139 self.editor.affiche_infos(comm,Qt.red)
141 self.LEValeur.setText(QString(""))
142 l1=self.listeValeursCourantes[:indexListe]
143 l3=self.listeValeursCourantes[indexListe:]
144 if self.node.item.wait_tuple()== 1 :
145 listeATraiter=listeRetour
147 listeATraiter=self.DecoupeListeValeurs(listeRetour)
148 for valeur in listeATraiter :
149 if type(valeur) == types.TupleType:
152 TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
153 str_valeur = TupleEnTexte[0:-2] +")"
155 str_valeur=str(valeur)
156 self.LBValeurs.insertItem(index,str_valeur)
157 item=self.LBValeurs.item(index)
159 self.LBValeurs.setCurrentItem(item)
161 self.listeValeursCourantes=l1+listeRetour+l3
162 self.BuildLBValeurs(self.listeValeursCourantes)
165 def AjoutNValeur(self,liste) :
166 if len(liste)%self.nbValeurs != 0 :
167 texte="Nombre de valeur incorrecte"
168 #self.Commentaire.setText(texte)
169 self.editor.affiche_infos(texte,Qt.red)
171 listeDecoupee=self.DecoupeListeValeurs(liste)
172 for vals in listeDecoupee :
173 self.Ajout1Valeur(vals)
175 def Sup1Valeur(self):
176 index=self.LBValeurs.currentRow()
177 if index == None : return
178 removed_item = self.LBValeurs.takeItem(index)
179 text = removed_item.text()[1:-1] # Remove the parenthesis
180 self.LEValeur.setText(text)
183 for i in range(self.nbValeurs):
184 indexAOter=index*self.nbValeurs + i
185 indexInterdit.append(indexAOter)
186 if self.node.item.wait_tuple()== 1 :
187 indexInterdit=[index]
190 for valeur in self.listeValeursCourantes :
191 if not (i in indexInterdit) :
192 listeVal.append(valeur)
194 self.listeValeursCourantes=listeVal
195 listeValeurs=self.listeValeursCourantes