Salome HOME
8355973cb5696056a8295d7bcbd05f7f09069191
[tools/eficas.git] / InterfaceQT4 / qtSaisie.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 from PyQt4 import *
24 from PyQt4.QtGui import *
25 from PyQt4.QtCore import *
26
27 # Import des panels
28
29 class SaisieValeur:
30   """
31   Classe contenant les méthodes communes aux  panels
32   permettant de choisir des valeurs 
33   """
34   def __init__(self):
35        pass
36
37   def InitListBoxASSD(self):
38        listeNomsSD = self.node.item.get_sd_avant_du_bon_type()
39        for aSD in listeNomsSD:
40             self.listBoxASSD.addItem( aSD)
41             QObject.connect(self.listBoxASSD, SIGNAL("doubleClicked(QListWidgetItem*)" ), self.ClicASSD )
42        min,max =  self.node.item.GetMinMax()
43        l= self.node.item.GetListeValeurs()
44        
45        if (min == 1 and min == max and len(listeNomsSD)==1 and (l==[] or l==None)):
46             if ('R' not in self.node.item.get_type()) :
47                self.listBoxASSD.setCurrentRow(0)
48
49
50   def BuildLBValeurs(self):
51         self.LBValeurs.clear()
52         listeValeurs=self.node.item.GetListeValeurs()
53         #print self.node.item.definition.validators
54         for valeur in listeValeurs:
55             try :
56                val=self.politique.GetValeurTexte(valeur)
57             except :
58                val=valeur
59             self.LBValeurs.addItem(str(val))
60         if listeValeurs != None and listeValeurs != [] :
61             self.LBValeurs.setCurrentRow(len(listeValeurs) - 1)
62        
63
64   def RemplitPanel(self,listeDejaLa=[],alpha=0):
65         self.listBoxVal.clear()
66         # Traitement particulier pour le validator VerifExistence
67         # dont les valeurs possibles peuvent changer : into variable
68         if hasattr(self.node.item.definition.validators,'set_MCSimp'):
69             obj=self.node.item.getObject()
70             self.node.item.definition.validators.set_MCSimp(obj)
71             if self.node.item.isvalid() == 0 : 
72                liste=[]
73                for item in listeDejaLa:
74                    if self.node.item.definition.validators.verif_item(item)==1:
75                       liste.append(item)
76                    self.node.item.set_valeur(liste)
77                    self.BuildLBValeurs()
78                    self.listeValeursCourantes=liste
79                    self.editor.affiche_infos("Attention, valeurs modifiees", Qt.red)
80                listeDejaLa=liste
81         lChoix=self.node.item.get_liste_possible(listeDejaLa)
82         if ((len(lChoix) < 10 ) and (hasattr (self,'BAlpha'))) :
83             self.BAlpha.close()
84         if alpha==1 :
85             lChoix.sort()
86         for valeur in lChoix :
87             self.listBoxVal.addItem( str(valeur) ) 
88         if len(lChoix) == 1 :
89             self.listBoxVal.setCurrentRow(0)
90             self.listBoxVal.item(0).setSelected(1)
91             self.bOk.setFocus()
92             
93
94   def ClicASSD(self):
95          if self.listBoxASSD.currentItem()== None : return
96          valeurQstring=self.listBoxASSD.currentItem().text()
97          commentaire = QString("Valeur selectionnée : ") 
98          commentaire.append(valeurQstring)
99          self.Commentaire.setText(commentaire)
100          valeur=str(valeurQstring)
101          validite,commentaire=self.politique.RecordValeur(valeur)
102          self.Commentaire.setText(QString(commentaire))
103          self.editor.affiche_infos(commentaire)
104
105   def ClicValeur(self):
106          if self.listBoxVal.currentItem()== None : return
107          valeurQstring=self.listBoxVal.currentItem().text()
108          valeur=str(valeurQstring)
109          validite,commentaire=self.politique.RecordValeur(valeur)
110          #self.Commentaire.setText(QString(commentaire))
111          self.editor.affiche_infos(commentaire)
112
113   def BOkPressed(self):
114          if self.listBoxVal.currentItem()==None :
115             commentaire = "Pas de valeur selectionnée" 
116             self.Commentaire.setText(QString(commentaire))
117          else :
118             self.ClicValeur()       
119
120   def BOk2Pressed(self):
121          if str(self.lineEditVal.text())== "" :
122             commentaire = "Pas de valeur entrée " 
123             self.Commentaire.setText(QString(commentaire))
124          else :
125             self.LEValeurPressed()       
126
127   def LEValeurPressed(self,valeur=None):
128          if valeur == None :
129             nouvelleValeur=str(self.lineEditVal.text())
130          else :
131             self.lineEditVal.setText(QString(valeur.nom))
132             nouvelleValeur=valeur
133          validite,commentaire=self.politique.RecordValeur(nouvelleValeur)
134          if commentaire != "" :
135             #self.Commentaire.setText(QString(commentaire))
136             self.editor.affiche_infos(commentaire)
137
138
139   def TraiteLEValeurTuple(self) :
140         listeValeurs=[]
141         valeurBrute=str(self.LEValeur.text())
142         listeValeursSplit=valeurBrute.split(',')
143         for val in listeValeursSplit :
144             try :
145                valeur=eval(val,{})        
146             except :
147                valeur=val
148             listeValeurs.append(valeur)
149         return listeValeurs
150
151   def TraiteLEValeur(self,valeurTraitee=None) :
152         # lit la chaine entree dans le line edit
153         # et la tranforme en chaine de valeurs
154         # a traiter. renvoie eventuellement des complexes
155         listeValeurs=[]
156         if valeurTraitee == None :
157            valeurBrute=str(self.LEValeur.text())
158         else :
159            valeurBrute=valeurTraitee
160         if valeurBrute == str("") : return listeValeurs,1
161
162         try :
163             valeur=eval(valeurBrute,{})        
164         except :
165             valeur=valeurBrute
166
167         if type(valeur)  in (types.ListType,types.TupleType) :
168            if self.node.item.wait_complex() :
169               indice = 0
170               while (indice < len(valeur)):
171                  v=valeur[indice]
172
173                  if (v== 'RI' or v == 'MP'):
174                     try :
175                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
176                        listeValeurs.append(t)
177                        indice=indice+3
178                     except :
179                        commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python"
180                        self.editor.affiche_infos(commentaire)
181                        return listeValeurs,0
182                        
183
184                  else :     # ce n'est pas un tuple à la mode aster
185                     listeValeurs.append(v)
186                     indice = indice + 1
187
188            else:  # on n'attend pas un complexe
189              listeValeurs=valeurBrute.split(',')
190
191         elif type(valeur) == types.StringType:
192              listeValeurs=valeur.split(',')
193         else:
194           listeValeurs.append(valeurBrute)
195
196         return listeValeurs,1
197
198
199 class SaisieSDCO :
200   def __init__(self):
201         pass
202
203   def LESDCOReturnPressed(self):
204         """
205            Lit le nom donné par l'utilisateur au concept de type CO qui doit être
206            la valeur du MCS courant et stocke cette valeur
207         """
208         self.editor.init_modif()
209         anc_val = self.node.item.get_valeur()
210         if anc_val != None:
211           # il faut egalement propager la destruction de l'ancien concept
212           self.node.item.delete_valeur_co(valeur=anc_val)
213           # et on force le recalcul des concepts de sortie de l'etape
214           self.node.item.object.etape.get_type_produit(force=1)
215           # et le recalcul du contexte
216           self.node.item.object.etape.parent.reset_context()
217         nomConcept = str(self.LESDCO.text())
218         if nomConcept == "" : return
219
220         test,commentaire=self.node.item.set_valeur_co(nomConcept)
221         if test:
222            commentaire="Valeur du mot-clé enregistree"
223            self.node.update_node_valid()
224         else :
225            cr = self.node.item.get_cr()
226            commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
227            self.node.item.set_valeur_co(anc_val)
228         self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))