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