1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 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 PyQt5.QtCore import Qt
32 from .qtSaisie import SaisieValeur
33 from monPlusieursBasePanel import MonPlusieursBasePanel
35 from Extensions.i18n import tr
39 class MonFonctionPanel(MonPlusieursBasePanel):
40 # Classe definissant le panel associee aux mots-cles qui demandent
41 # a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
43 def __init__(self,node, parent = None,name = None,fl = 0):
44 #print "MonFonctionPanel"
47 MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
49 def setNbValeurs(self):
51 if self.node.item.waitTuple()== 1 :
52 for a in self.node.item.definition.type :
54 self.nbValeurs = a.ntuple
58 genea=self.node.item.getGenealogie()
59 self.nbValeursASaisir=self.nbValeurs
60 if "VALE" in genea: self.nbValeurs=2
61 if "VALE_C" in genea: self.nbValeurs=3
64 def decoupeListeValeurs(self,liste):
65 #decoupe la liste des valeurs en n ( les x puis les y)
67 if ((len(liste)% self.nbValeursASaisir != 0 and (len(liste)% self.nbValeurs))):
68 message=tr("La cardinalite n'est pas correcte, la derniere valeur est ignoree")
69 self.editor.afficheInfos(message,Qt.red)
71 while ( i < len(liste) ) :
73 t=tuple(liste[i:i+self.nbValeurs])
76 t=tuple(liste[i:len(liste)])
80 def buildLBValeurs(self,listeValeurs=None):
81 self.LBValeurs.clear()
82 if listeValeurs== None :
83 listeValeurs=self.node.item.getListeValeurs()
84 if self.node.item.waitTuple()== 1 :
85 listeATraiter=listeValeurs
86 for valeur in listeATraiter:
87 str_valeur=str(valeur)
88 self.LBValeurs.addItem(str_valeur)
90 for valeur in self.decoupeListeValeurs(listeValeurs):
91 if type(valeur) == tuple:
94 TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
95 TupleEnTexte = TupleEnTexte[0:-2] +")"
96 self.LBValeurs.addItem(TupleEnTexte)
98 self.LBValeurs.addItem(str(valeur))
101 def ajout1Valeur(self,liste=[]):
102 # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
105 if self.node.item.waitTuple()== 1 :
106 liste=SaisieValeur.TraiteLEValeurTuple(self)
107 if liste == [''] : return
109 liste,validite=SaisieValeur.TraiteLEValeur(self)
110 if validite == 0 : return
111 if liste ==[] : return
113 if (self.node.item.waitTuple()== 1 and len(liste) != self.nbValeurs):
114 commentaire = str(liste)
115 commentaire += tr(" n est pas un tuple de ")
116 commentaire += str(self.nbValeursASaisir)
117 commentaire += tr(" valeurs")
118 self.LEValeur.setText(str(liste))
119 self.editor.afficheInfos(commentaire,Qt.red)
122 if self.node.item.waitTuple()== 1 :
126 index=self.LBValeurs.currentRow()
127 if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
130 index=self.LBValeurs.currentRow() + 1
131 indexListe=index*self.nbValeurs
132 if index == 0 : indexListe=len(self.listeValeursCourantes)
135 for valeur in self.listeValeursCourantes :
136 listeVal.append(valeur)
137 if self.node.item.waitTuple()== 1 :
139 validite,comm,comm2,listeRetour=self.politique.ajoutTuple(liste,index,listeVal)
141 validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,index,listeVal)
142 self.Commentaire.setText(tr(comm2))
144 self.editor.afficheInfos(comm,Qt.red)
146 self.LEValeur.setText("")
147 l1=self.listeValeursCourantes[:indexListe]
148 l3=self.listeValeursCourantes[indexListe:]
149 if self.node.item.waitTuple()== 1 :
150 listeATraiter=listeRetour
152 listeATraiter=self.decoupeListeValeurs(listeRetour)
153 for valeur in listeATraiter :
154 if type(valeur) == tuple:
157 TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
158 str_valeur = TupleEnTexte[0:-2] +")"
160 str_valeur=str(valeur)
161 self.LBValeurs.insertItem(index,str_valeur)
162 item=self.LBValeurs.item(index)
164 self.LBValeurs.setCurrentItem(item)
166 self.listeValeursCourantes=l1+listeRetour+l3
167 self.buildLBValeurs(self.listeValeursCourantes)
170 def ajoutNValeur(self,liste) :
171 if len(liste)%self.nbValeurs != 0 :
172 texte="Nombre de valeur incorrecte"
173 #self.Commentaire.setText(texte)
174 self.editor.afficheInfos(texte,Qt.red)
176 listeDecoupee=self.decoupeListeValeurs(liste)
177 for vals in listeDecoupee :
178 self.ajout1Valeur(vals)
180 def sup1Valeur(self):
181 index=self.LBValeurs.currentRow()
182 if index == None : return
183 removed_item = self.LBValeurs.takeItem(index)
184 text = removed_item.text()[1:-1] # Remove the parenthesis
185 self.LEValeur.setText(text)
188 for i in range(self.nbValeurs):
189 indexAOter=index*self.nbValeurs + i
190 indexInterdit.append(indexAOter)
191 if self.node.item.waitTuple()== 1 :
192 indexInterdit=[index]
195 for valeur in self.listeValeursCourantes :
196 if not (i in indexInterdit) :
197 listeVal.append(valeur)
199 self.listeValeursCourantes=listeVal
200 listeValeurs=self.listeValeursCourantes