Salome HOME
53030
[tools/eficas.git] / InterfaceQT4 / monFonctionPanel.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Modules Python
21 import string,types,os
22
23 # Modules Eficas
24 from qtSaisie      import SaisieValeur
25 from monPlusieursBasePanel import MonPlusieursBasePanel
26
27 from PyQt4.QtGui  import *
28 from PyQt4.QtCore import *
29 from Extensions.i18n import tr
30
31 # Import des panels
32
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
36 #  discretes
37   def __init__(self,node, parent = None,name = None,fl = 0):
38         #print "MonFonctionPanel"
39         self.node=node
40         self.SetNbValeurs()
41         MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
42
43   def SetNbValeurs(self):
44         self.nbValeurs = 1
45         if self.node.item.wait_tuple()== 1 :
46            for a in self.node.item.definition.type :
47                try :
48                    self.nbValeurs = a.ntuple
49                    break
50                except :
51                    pass
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
56
57
58   def DecoupeListeValeurs(self,liste):
59         #decoupe la liste des valeurs en n ( les x puis les y)
60         l_valeurs=[]
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)
65         i=0
66         while ( i < len(liste) ) :
67             try :
68               t=tuple(liste[i:i+self.nbValeurs])
69               i=i+self.nbValeurs
70             except:
71               t=tuple(liste[i:len(liste)])
72             l_valeurs.append(t)
73         return l_valeurs
74
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)
84         else : 
85               for valeur in self.DecoupeListeValeurs(listeValeurs):
86                    if type(valeur) == types.TupleType:
87                        TupleEnTexte="("
88                        for val in valeur :
89                            TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
90                        TupleEnTexte = TupleEnTexte[0:-2] +")"
91                        self.LBValeurs.addItem(TupleEnTexte)
92                    else :
93                        self.LBValeurs.addItem(QString(str(valeur)))
94
95
96   def  ajout1Valeur(self,liste=[]):
97         # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
98         validite=1
99         if liste == [] :
100            if self.node.item.wait_tuple()== 1 :
101               liste=SaisieValeur.TraiteLEValeurTuple(self)
102               if liste == [''] : return
103            else :
104               liste,validite=SaisieValeur.TraiteLEValeur(self)
105               if validite == 0 : return
106         if liste ==[]    : return
107
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)
115             return
116
117         if self.node.item.wait_tuple()== 1 :
118               liste2=tuple(liste)
119               liste=liste2
120
121         index=self.LBValeurs.currentRow()
122         if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
123            index=0
124         else :
125            index=self.LBValeurs.currentRow() + 1
126         indexListe=index*self.nbValeurs
127         if index == 0 : indexListe=len(self.listeValeursCourantes)
128
129         listeVal=[]
130         for valeur in self.listeValeursCourantes :
131                 listeVal.append(valeur)
132         if self.node.item.wait_tuple()== 1 :
133              indexListe = index
134              validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
135         else :
136              validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
137         self.Commentaire.setText(QString.fromUtf8(QString(comm2)))
138         if not validite :
139                 self.editor.affiche_infos(comm,Qt.red)
140         else:
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
146            else : 
147               listeATraiter=self.DecoupeListeValeurs(listeRetour)
148            for valeur in  listeATraiter :
149                if type(valeur) == types.TupleType:
150                   TupleEnTexte="("
151                   for val in valeur :
152                       TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
153                   str_valeur = TupleEnTexte[0:-2] +")"
154                else :
155                   str_valeur=str(valeur)
156                self.LBValeurs.insertItem(index,str_valeur)
157                item=self.LBValeurs.item(index)
158                item.setSelected(1)
159                self.LBValeurs.setCurrentItem(item)
160                index=index+1
161            self.listeValeursCourantes=l1+listeRetour+l3
162            self.BuildLBValeurs(self.listeValeursCourantes)
163
164
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)
170            return
171         listeDecoupee=self.DecoupeListeValeurs(liste)
172         for vals in listeDecoupee :
173             self.ajout1Valeur(vals)
174            
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)
181         listeVal=[]
182         indexInterdit=[]
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]
188
189         i=0
190         for valeur in self.listeValeursCourantes :
191             if not (i in indexInterdit) : 
192                 listeVal.append(valeur)
193             i = i+1
194         self.listeValeursCourantes=listeVal
195         listeValeurs=self.listeValeursCourantes
196
197