Salome HOME
*** empty log message ***
[tools/eficas.git] / InterfaceQT4 / monFonctionPanel.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 # Modules Python
22 import string,types,os
23
24 # Modules Eficas
25 from qtSaisie      import SaisieValeur
26 from monPlusieursBasePanel import MonPlusieursBasePanel
27
28 from PyQt4.QtGui  import *
29 from PyQt4.QtCore import *
30
31 # Import des panels
32
33 class MonFonctionPanel(MonPlusieursBasePanel):
34   """
35   Classe définissant le panel associé aux mots-clés qui demandent
36   à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
37   discrètes
38   """
39   def __init__(self,node, parent = None,name = None,fl = 0):
40         #print "MonFonctionPanel"
41         self.node=node
42         self.SetNbValeurs()
43         MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
44
45   def SetNbValeurs(self):
46         self.nbValeurs = 1
47         if self.node.item.wait_tuple()== 1 :
48            for a in self.node.item.definition.type :
49                try :
50                    self.nbValeurs = a.ntuple
51                    break
52                except :
53                    pass
54         genea=self.node.item.get_genealogie()
55         if "VALE" in genea:
56             self.nbValeurs=2
57         if "VALE_C" in genea:
58             self.nbValeurs=3
59
60
61   def DecoupeListeValeurs(self,liste):
62         #decoupe la liste des valeurs en n ( les x puis les y)
63         l_valeurs=[]
64         if (len(liste)% self.nbValeurs != 0):
65             message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
66             #self.Commentaire.setText(QString(commentaire)) 
67             self.editor.affiche_infos(message,Qt.red)
68         i=0
69         while ( i < (len(liste) - self.nbValeurs + 1)) :
70             t=tuple(liste[i:i+self.nbValeurs])
71             l_valeurs.append(t)
72             i=i+self.nbValeurs
73         return l_valeurs
74
75   def BuildLBValeurs(self):
76         self.LBValeurs.clear()
77         listeValeurs=self.node.item.GetListeValeurs()
78         if self.node.item.wait_tuple()== 1 :
79               listeATraiter=listeValeurs
80               for valeur in listeATraiter:
81                   str_valeur=str(valeur)
82                   self.LBValeurs.addItem(str_valeur)
83         else : 
84               for valeur in self.DecoupeListeValeurs(listeValeurs):
85                    if type(valeur) == types.TupleType:
86                        TupleEnTexte="("
87                        for val in valeur :
88                            TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
89                        TupleEnTexte = TupleEnTexte[0:-2] +")"
90                        print TupleEnTexte
91                        self.LBValeurs.addItem(TupleEnTexte)
92                    else :
93                        self.LBValeurs.addItem(QString(str(valeur)))
94
95
96   def  Ajout1Valeur(self,liste=[]):
97         # Pour être 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 len(liste) != self.nbValeurs :
109             commentaire  = QString(str(liste)) 
110             commentaire += QString(" n est pas un tuple de ") 
111             commentaire += QString(str(self.nbValeurs)) 
112             commentaire += QString(" 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
163
164   def AjoutNValeur(self,liste) :
165         if len(liste)%self.nbValeurs != 0 :
166            texte="Nombre de valeur incorrecte"
167            #self.Commentaire.setText(texte)
168            self.editor.affiche_infos(texte,Qt.red)
169            return
170         listeDecoupee=self.DecoupeListeValeurs(liste)
171         for vals in listeDecoupee :
172             self.Ajout1Valeur(vals)
173            
174   def Sup1Valeur(self):
175         index=self.LBValeurs.currentRow()
176         if index == None : return
177         self.LBValeurs.takeItem(index)
178         listeVal=[]
179         indexInterdit=[]
180         for i in range(self.nbValeurs):
181             indexAOter=index*self.nbValeurs + i
182             indexInterdit.append(indexAOter)
183         if self.node.item.wait_tuple()== 1 :
184            indexInterdit=[index]
185
186         i=0
187         for valeur in self.listeValeursCourantes :
188             if not (i in indexInterdit) : 
189                 listeVal.append(valeur)
190             i = i+1
191         self.listeValeursCourantes=listeVal
192         listeValeurs=self.listeValeursCourantes
193
194