Salome HOME
b82e1190c9702fc570a86fe9fd68eeaf4b7a1c82
[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(QListBoxItem*)" ), 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=[]):
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         for valeur in lChoix :
83             self.listBoxVal.addItem( str(valeur) ) 
84         if len(lChoix) == 1 :
85             self.listBoxVal.setCurrentRow(0)
86             self.listBoxVal.item(0).setSelected(1)
87             self.bOk.setFocus()
88
89   def ClicASSD(self):
90          if self.listBoxASSD.currentItem()== None : return
91          valeurQstring=self.listBoxASSD.currentItem().text()
92          commentaire = QString("Valeur selectionnée : ") 
93          commentaire.append(valeurQstring)
94          self.Commentaire.setText(commentaire)
95          valeur=str(valeurQstring)
96          validite,commentaire=self.politique.RecordValeur(valeur)
97          self.Commentaire.setText(QString(commentaire))
98          self.editor.affiche_infos(commentaire)
99
100   def ClicValeur(self):
101          if self.listBoxVal.currentItem()== None : return
102          valeurQstring=self.listBoxVal.currentItem().text()
103          valeur=str(valeurQstring)
104          validite,commentaire=self.politique.RecordValeur(valeur)
105          #self.Commentaire.setText(QString(commentaire))
106          self.editor.affiche_infos(commentaire)
107
108   def BOkPressed(self):
109          if self.listBoxVal.currentItem()==None :
110             commentaire = "Pas de valeur selectionnée" 
111             self.Commentaire.setText(QString(commentaire))
112          else :
113             self.ClicValeur()       
114
115   def BOk2Pressed(self):
116          if str(self.lineEditVal.text())== "" :
117             commentaire = "Pas de valeur entrée " 
118             self.Commentaire.setText(QString(commentaire))
119          else :
120             self.LEValeurPressed()       
121
122   def LEValeurPressed(self,valeur=None):
123          if valeur == None :
124             nouvelleValeur=str(self.lineEditVal.text())
125          else :
126             self.lineEditVal.setText(QString(valeur.nom))
127             nouvelleValeur=valeur
128          validite,commentaire=self.politique.RecordValeur(nouvelleValeur)
129          if commentaire != "" :
130             #self.Commentaire.setText(QString(commentaire))
131             self.editor.affiche_infos(commentaire)
132
133
134   def TraiteLEValeurTuple(self) :
135         listeValeurs=[]
136         valeurBrute=str(self.LEValeur.text())
137         listeValeursSplit=valeurBrute.split(',')
138         for val in listeValeursSplit :
139             try :
140                valeur=eval(val,{})        
141             except :
142                valeur=val
143             listeValeurs.append(valeur)
144         return listeValeurs
145
146   def TraiteLEValeur(self,valeurTraitee=None) :
147         # lit la chaine entree dans le line edit
148         # et la tranforme en chaine de valeurs
149         # a traiter. renvoie eventuellement des complexes
150         listeValeurs=[]
151         if valeurTraitee == None :
152            valeurBrute=str(self.LEValeur.text())
153         else :
154            valeurBrute=valeurTraitee
155         if valeurBrute == str("") : return listeValeurs,1
156
157         try :
158             valeur=eval(valeurBrute,{})        
159         except :
160             valeur=valeurBrute
161
162         if type(valeur)  in (types.ListType,types.TupleType) :
163            if self.node.item.wait_complex() :
164               indice = 0
165               while (indice < len(valeur)):
166                  v=valeur[indice]
167
168                  if (v== 'RI' or v == 'MP'):
169                     try :
170                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
171                        listeValeurs.append(t)
172                        indice=indice+3
173                     except :
174                        commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python"
175                        self.editor.affiche_infos(commentaire)
176                        return listeValeurs,0
177                        
178
179                  else :     # ce n'est pas un tuple à la mode aster
180                     listeValeurs.append(v)
181                     indice = indice + 1
182
183            else:  # on n'attend pas un complexe
184              listeValeurs=valeurBrute.split(',')
185
186         elif type(valeur) == types.StringType:
187              listeValeurs=valeur.split(',')
188         else:
189           listeValeurs.append(valeurBrute)
190
191         return listeValeurs,1
192
193
194 class SaisieSDCO :
195   def __init__(self):
196         pass
197
198   def LESDCOReturnPressed(self):
199         """
200            Lit le nom donné par l'utilisateur au concept de type CO qui doit être
201            la valeur du MCS courant et stocke cette valeur
202         """
203         self.editor.init_modif()
204         anc_val = self.node.item.get_valeur()
205         if anc_val != None:
206           # il faut egalement propager la destruction de l'ancien concept
207           self.node.item.delete_valeur_co(valeur=anc_val)
208           # et on force le recalcul des concepts de sortie de l'etape
209           self.node.item.object.etape.get_type_produit(force=1)
210           # et le recalcul du contexte
211           self.node.item.object.etape.parent.reset_context()
212         nomConcept = str(self.LESDCO.text())
213         if nomConcept == "" : return
214
215         test,commentaire=self.node.item.set_valeur_co(nomConcept)
216         if test:
217            commentaire="Valeur du mot-clé enregistree"
218            self.node.update_node_valid()
219         else :
220            cr = self.node.item.get_cr()
221            commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
222            self.node.item.set_valeur_co(anc_val)
223         self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))