Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[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.setCurrentItem(0)
48
49
50   def BuildLBValeurs(self):
51         self.LBValeurs.clear()
52         listeValeurs=self.node.item.GetListeValeurs()
53         for valeur in listeValeurs:
54             self.LBValeurs.addItem(str(valeur))
55         if listeValeurs != None and listeValeurs != [] :
56             self.LBValeurs.setCurrentRow(len(listeValeurs) - 1)
57        
58
59   def RemplitPanel(self,listeDejaLa=[]):
60         self.listBoxVal.clear()
61         lChoix=self.node.item.get_liste_possible(listeDejaLa)
62         for valeur in lChoix :
63             self.listBoxVal.addItem( str(valeur) ) 
64         if len(lChoix) == 1 :
65             self.listBoxVal.setCurrentRow(1)
66
67   def ClicASSD(self):
68          if self.listBoxASSD.currentItem()== None : return
69          valeurQstring=self.listBoxASSD.currentItem().text()
70          commentaire = QString("Valeur selectionnée : ") 
71          commentaire.append(valeurQstring)
72          self.Commentaire.setText(commentaire)
73          valeur=str(valeurQstring)
74          validite,commentaire=self.politique.RecordValeur(valeur)
75          self.Commentaire.setText(QString(commentaire))
76          self.editor.affiche_infos(commentaire)
77
78   def ClicValeur(self):
79          if self.listBoxVal.currentItem()== None : return
80          valeurQstring=self.listBoxVal.currentItem().text()
81          valeur=str(valeurQstring)
82          validite,commentaire=self.politique.RecordValeur(valeur)
83          #self.Commentaire.setText(QString(commentaire))
84          self.editor.affiche_infos(commentaire)
85
86   def BOkPressed(self):
87          if self.listBoxVal.currentItem()==None :
88             commentaire = "Pas de valeur selectionnée" 
89             self.Commentaire.setText(QString(commentaire))
90          else :
91             self.ClicValeur()       
92
93   def BOk2Pressed(self):
94          if str(self.lineEditVal.text())== "" :
95             commentaire = "Pas de valeur entrée " 
96             self.Commentaire.setText(QString(commentaire))
97          else :
98             self.LEValeurPressed()       
99
100   def LEValeurPressed(self,valeur=None):
101          if valeur == None :
102             nouvelleValeur=str(self.lineEditVal.text())
103          else :
104             self.lineEditVal.setText(QString(valeur.nom))
105             nouvelleValeur=valeur
106          validite,commentaire=self.politique.RecordValeur(nouvelleValeur)
107          if commentaire != "" :
108             #self.Commentaire.setText(QString(commentaire))
109             self.editor.affiche_infos(commentaire)
110
111
112   def TraiteLEValeur(self,valeurTraitee=None) :
113         # lit la chaine entree dans le line edit
114         # et la tranforme en chaine de valeurs
115         # a traiter. renvoie eventuellement des complexes
116         listeValeurs=[]
117         if valeurTraitee == None :
118            valeurBrute=str(self.LEValeur.text())
119         else :
120            valeurBrute=valeurTraitee
121         if valeurBrute == str("") : return listeValeurs,1
122
123         try :
124             valeur=eval(valeurBrute,{})        
125         except :
126             valeur=valeurBrute
127
128         if type(valeur)  in (types.ListType,types.TupleType) :
129            if self.node.item.wait_complex() :
130               indice = 0
131               while (indice < len(valeur)):
132                  v=valeur[indice]
133
134                  if (v== 'RI' or v == 'MP'):
135                     try :
136                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
137                        listeValeurs.append(t)
138                        indice=indice+3
139                     except :
140                        commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python"
141                        self.editor.affiche_infos(commentaire)
142                        return listeValeurs,0
143                        
144
145                  else :     # ce n'est pas un tuple à la mode aster
146                     listeValeurs.append(v)
147                     indice = indice + 1
148
149            else:  # on n'attend pas un complexe
150              listeValeurs=valeurBrute.split(',')
151
152         elif type(valeur) == types.StringType:
153              listeValeurs=valeur.split(',')
154         else:
155           listeValeurs.append(valeur)
156
157         return listeValeurs,1
158
159
160 class SaisieSDCO :
161   def __init__(self):
162         pass
163
164   def LESDCOReturnPressed(self):
165         """
166            Lit le nom donné par l'utilisateur au concept de type CO qui doit être
167            la valeur du MCS courant et stocke cette valeur
168         """
169         self.editor.init_modif()
170         anc_val = self.node.item.get_valeur()
171         if anc_val != None:
172           # il faut egalement propager la destruction de l'ancien concept
173           self.node.item.delete_valeur_co(valeur=anc_val)
174           # et on force le recalcul des concepts de sortie de l'etape
175           self.node.item.object.etape.get_type_produit(force=1)
176           # et le recalcul du contexte
177           self.node.item.object.etape.parent.reset_context()
178         nomConcept = str(self.LESDCO.text())
179         if nomConcept == "" : return
180
181         test,commentaire=self.node.item.set_valeur_co(nomConcept)
182         if test:
183            commentaire="Valeur du mot-clé enregistree"
184            self.node.update_node_valid()
185         else :
186            cr = self.node.item.get_cr()
187            commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
188            self.node.item.set_valeur_co(anc_val)
189         self.Commentaire.setText(QString(commentaire))