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
28 from six.moves import range
29 from PyQt5.QtCore import Qt
33 from .qtSaisie import SaisieValeur
34 from monPlusieursBasePanel import MonPlusieursBasePanel
36 from Extensions.i18n import tr
40 class MonFonctionPanel(MonPlusieursBasePanel):
41 # Classe definissant le panel associee aux mots-cles qui demandent
42 # a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
44 def __init__(self,node, parent = None,name = None,fl = 0):
45 #print "MonFonctionPanel"
48 MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
50 def setNbValeurs(self):
52 if self.node.item.waitTuple()== 1 :
53 for a in self.node.item.definition.type :
55 self.nbValeurs = a.ntuple
59 genea=self.node.item.getGenealogie()
60 self.nbValeursASaisir=self.nbValeurs
61 if "VALE" in genea: self.nbValeurs=2
62 if "VALE_C" in genea: self.nbValeurs=3
65 def decoupeListeValeurs(self,liste):
66 #decoupe la liste des valeurs en n ( les x puis les y)
68 if ((len(liste)% self.nbValeursASaisir != 0 and (len(liste)% self.nbValeurs))):
69 message=tr("La cardinalite n'est pas correcte, la derniere valeur est ignoree")
70 self.editor.afficheInfos(message,Qt.red)
72 while ( i < len(liste) ) :
74 t=tuple(liste[i:i+self.nbValeurs])
77 t=tuple(liste[i:len(liste)])
81 def buildLBValeurs(self,listeValeurs=None):
82 self.LBValeurs.clear()
83 if listeValeurs== None :
84 listeValeurs=self.node.item.getListeValeurs()
85 if self.node.item.waitTuple()== 1 :
86 listeATraiter=listeValeurs
87 for valeur in listeATraiter:
88 str_valeur=str(valeur)
89 self.LBValeurs.addItem(str_valeur)
91 for valeur in self.decoupeListeValeurs(listeValeurs):
92 if type(valeur) == tuple:
95 TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
96 TupleEnTexte = TupleEnTexte[0:-2] +")"
97 self.LBValeurs.addItem(TupleEnTexte)
99 self.LBValeurs.addItem(str(valeur))
102 def ajout1Valeur(self,liste=[]):
103 # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
106 if self.node.item.waitTuple()== 1 :
107 liste=SaisieValeur.TraiteLEValeurTuple(self)
108 if liste == [''] : return
110 liste,validite=SaisieValeur.TraiteLEValeur(self)
111 if validite == 0 : return
112 if liste ==[] : return
114 if (self.node.item.waitTuple()== 1 and len(liste) != self.nbValeurs):
115 commentaire = str(liste)
116 commentaire += tr(" n est pas un tuple de ")
117 commentaire += str(self.nbValeursASaisir)
118 commentaire += tr(" valeurs")
119 self.LEValeur.setText(str(liste))
120 self.editor.afficheInfos(commentaire,Qt.red)
123 if self.node.item.waitTuple()== 1 :
127 index=self.LBValeurs.currentRow()
128 if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
131 index=self.LBValeurs.currentRow() + 1
132 indexListe=index*self.nbValeurs
133 if index == 0 : indexListe=len(self.listeValeursCourantes)
136 for valeur in self.listeValeursCourantes :
137 listeVal.append(valeur)
138 if self.node.item.waitTuple()== 1 :
140 validite,comm,comm2,listeRetour=self.politique.ajoutTuple(liste,index,listeVal)
142 validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,index,listeVal)
143 self.Commentaire.setText(tr(comm2))
145 self.editor.afficheInfos(comm,Qt.red)
147 self.LEValeur.setText("")
148 l1=self.listeValeursCourantes[:indexListe]
149 l3=self.listeValeursCourantes[indexListe:]
150 if self.node.item.waitTuple()== 1 :
151 listeATraiter=listeRetour
153 listeATraiter=self.decoupeListeValeurs(listeRetour)
154 for valeur in listeATraiter :
155 if type(valeur) == tuple:
158 TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
159 str_valeur = TupleEnTexte[0:-2] +")"
161 str_valeur=str(valeur)
162 self.LBValeurs.insertItem(index,str_valeur)
163 item=self.LBValeurs.item(index)
165 self.LBValeurs.setCurrentItem(item)
167 self.listeValeursCourantes=l1+listeRetour+l3
168 self.buildLBValeurs(self.listeValeursCourantes)
171 def ajoutNValeur(self,liste) :
172 if len(liste)%self.nbValeurs != 0 :
173 texte="Nombre de valeur incorrecte"
174 #self.Commentaire.setText(texte)
175 self.editor.afficheInfos(texte,Qt.red)
177 listeDecoupee=self.decoupeListeValeurs(liste)
178 for vals in listeDecoupee :
179 self.ajout1Valeur(vals)
181 def sup1Valeur(self):
182 index=self.LBValeurs.currentRow()
183 if index == None : return
184 removed_item = self.LBValeurs.takeItem(index)
185 text = removed_item.text()[1:-1] # Remove the parenthesis
186 self.LEValeur.setText(text)
189 for i in range(self.nbValeurs):
190 indexAOter=index*self.nbValeurs + i
191 indexInterdit.append(indexAOter)
192 if self.node.item.waitTuple()== 1 :
193 indexInterdit=[index]
196 for valeur in self.listeValeursCourantes :
197 if not (i in indexInterdit) :
198 listeVal.append(valeur)
200 self.listeValeursCourantes=listeVal
201 listeValeurs=self.listeValeursCourantes