Salome HOME
mse a jour du 07/03/2016 pour sauvegarde
[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 if monEnvQT5:
23     from PyQt5.QtCore import  Qt
24 else :
25     from PyQt4.QtGui  import *
26     from PyQt4.QtCore import *
27
28
29 # Modules Eficas
30 from qtSaisie      import SaisieValeur
31 from monPlusieursBasePanel import MonPlusieursBasePanel
32
33 from Extensions.i18n import tr
34
35 # Import des panels
36
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
40 #  discretes
41   def __init__(self,node, parent = None,name = None,fl = 0):
42         #print "MonFonctionPanel"
43         self.node=node
44         self.SetNbValeurs()
45         MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
46
47   def SetNbValeurs(self):
48         self.nbValeurs = 1
49         if self.node.item.wait_tuple()== 1 :
50            for a in self.node.item.definition.type :
51                try :
52                    self.nbValeurs = a.ntuple
53                    break
54                except :
55                    pass
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
60
61
62   def DecoupeListeValeurs(self,liste):
63         #decoupe la liste des valeurs en n ( les x puis les y)
64         l_valeurs=[]
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)
68         i=0
69         while ( i < len(liste) ) :
70             try :
71               t=tuple(liste[i:i+self.nbValeurs])
72               i=i+self.nbValeurs
73             except:
74               t=tuple(liste[i:len(liste)])
75             l_valeurs.append(t)
76         return l_valeurs
77
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)
87         else : 
88               for valeur in self.DecoupeListeValeurs(listeValeurs):
89                    if type(valeur) == types.TupleType:
90                        TupleEnTexte="("
91                        for val in valeur :
92                            TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
93                        TupleEnTexte = TupleEnTexte[0:-2] +")"
94                        self.LBValeurs.addItem(TupleEnTexte)
95                    else :
96                        self.LBValeurs.addItem(str(valeur))
97
98
99   def  ajout1Valeur(self,liste=[]):
100         # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
101         validite=1
102         if liste == [] :
103            if self.node.item.wait_tuple()== 1 :
104               liste=SaisieValeur.TraiteLEValeurTuple(self)
105               if liste == [''] : return
106            else :
107               liste,validite=SaisieValeur.TraiteLEValeur(self)
108               if validite == 0 : return
109         if liste ==[]    : return
110
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)
118             return
119
120         if self.node.item.wait_tuple()== 1 :
121               liste2=tuple(liste)
122               liste=liste2
123
124         index=self.LBValeurs.currentRow()
125         if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
126            index=0
127         else :
128            index=self.LBValeurs.currentRow() + 1
129         indexListe=index*self.nbValeurs
130         if index == 0 : indexListe=len(self.listeValeursCourantes)
131
132         listeVal=[]
133         for valeur in self.listeValeursCourantes :
134                 listeVal.append(valeur)
135         if self.node.item.wait_tuple()== 1 :
136              indexListe = index
137              validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
138         else :
139              validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
140         self.Commentaire.setText(tr(comm2))
141         if not validite :
142                 self.editor.affiche_infos(comm,Qt.red)
143         else:
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
149            else : 
150               listeATraiter=self.DecoupeListeValeurs(listeRetour)
151            for valeur in  listeATraiter :
152                if type(valeur) == types.TupleType:
153                   TupleEnTexte="("
154                   for val in valeur :
155                       TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
156                   str_valeur = TupleEnTexte[0:-2] +")"
157                else :
158                   str_valeur=str(valeur)
159                self.LBValeurs.insertItem(index,str_valeur)
160                item=self.LBValeurs.item(index)
161                item.setSelected(1)
162                self.LBValeurs.setCurrentItem(item)
163                index=index+1
164            self.listeValeursCourantes=l1+listeRetour+l3
165            self.BuildLBValeurs(self.listeValeursCourantes)
166
167
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)
173            return
174         listeDecoupee=self.DecoupeListeValeurs(liste)
175         for vals in listeDecoupee :
176             self.ajout1Valeur(vals)
177            
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)
184         listeVal=[]
185         indexInterdit=[]
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]
191
192         i=0
193         for valeur in self.listeValeursCourantes :
194             if not (i in indexInterdit) : 
195                 listeVal.append(valeur)
196             i = i+1
197         self.listeValeursCourantes=listeVal
198         listeValeurs=self.listeValeursCourantes
199
200