Salome HOME
legere difference ds VARIABLES_TO_BE...
[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 from __future__ import absolute_import
22 try :
23    from builtins import str
24    from builtins import range
25 except : pass
26
27 import types,os
28 from Extensions.i18n import tr
29
30 from PyQt5.QtCore import Qt
31
32
33 # Import des panels
34
35 class SaisieValeur(object):
36   """
37   Classe contenant les methodes communes aux  panels
38   permettant de choisir des valeurs 
39   """
40   def __init__(self):
41        pass
42
43
44   def LEValeurPressed(self,valeur=None):
45          if not hasattr(self, 'inSaisieValeur' ) : self.inSaisieValeur=False
46          if self.inSaisieValeur : return
47          self.inSaisieValeur=True
48          if valeur == None :
49             try :
50               nouvelleValeur=str(self.lineEditVal.text())
51             except UnicodeEncodeError as e :
52                self.editor.affiche_infos("pb d encoding", Qt.red)
53                validite,commentaire=self.politique.RecordValeur(None)
54                self.lineEditVal.setText('')
55                self.setValide()
56                self.inSaisieValeur=False
57                return
58          else :
59             #PN PN PN ???? la 1 ligne est tres bizarre.
60             try : 
61               if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
62             except : 
63               if hasattr(self,"lineEditVal"):self.lineEditVal.setText(valeur)
64             nouvelleValeur=valeur
65          if self.node.item.definition.validators != None :
66           if self.node.item.definition.validators.verif_item(nouvelleValeur) !=1 :
67                 commentaire=self.node.item.definition.validators.info_erreur_item()
68                 self.editor.affiche_infos(commentaire,Qt.red)
69                 self.inSaisieValeur=False
70                 return
71          nouvelleValeurFormat=self.politique.GetValeurTexte(nouvelleValeur)
72          validite,commentaire=self.politique.RecordValeur(nouvelleValeurFormat)
73          if commentaire != "" :
74             #PNPNPNP Il faut trouver une solution pour les 2 cas 
75             #   self.editor.affiche_infos(commentaire)
76             #self.Commentaire.setText(tr(commentaire))
77             if validite :
78                 self.editor.affiche_commentaire(commentaire)
79             else :
80                 self.editor.affiche_infos(commentaire,Qt.red)
81          self.inSaisieValeur=False
82          self.setValide()
83
84
85   #def TraiteLEValeurTuple(self,valeurBrute=None) :
86   #      listeValeurs=[]
87   #      if valeurBrute== None :valeurBrute=str(self.LEValeur.text())
88   #      listeValeursSplit=valeurBrute.split(',')
89   #      for val in listeValeursSplit :
90   #          try :
91   #             valeur=eval(val,{})        
92   #          except :
93   #             valeur=val
94   #          listeValeurs.append(valeur)
95   #      return listeValeurs
96
97   def TraiteLEValeur(self,valeurTraitee=None) :
98         # lit la chaine entree dans le line edit
99         # et la tranforme en chaine de valeurs
100         # a traiter. renvoie eventuellement des complexes
101         listeValeurs=[]
102         if valeurTraitee == None :
103            valeurBrute=str(self.LEValeur.text())
104         else :
105            valeurBrute=valeurTraitee
106         if valeurBrute == str("") : return listeValeurs,1
107
108         try :
109             valeur=eval(valeurBrute,{})        
110         except :
111             valeur=valeurBrute
112
113         if type(valeur)  in (list,tuple) :
114            if self.node.item.wait_complex() :
115               indice = 0
116               while (indice < len(valeur)):
117                  v=valeur[indice]
118
119                  if (v== 'RI' or v == 'MP'):
120                     try :
121                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
122                        listeValeurs.append(t)
123                        indice=indice+3
124                     except :
125                        commentaire = tr("Veuillez entrer le complexe sous forme aster ou sous forme python")
126                        self.editor.affiche_infos(commentaire)
127                        return listeValeurs,0
128                        
129
130                  else :     # ce n'est pas un tuple a la mode aster
131                     listeValeurs.append(v)
132                     indice = indice + 1
133
134            else:  # on n'attend pas un complexe
135              listeValeurs=valeurBrute.split(',')
136
137         elif type(valeur) == bytes:
138              listeValeurs=valeur.split(',')
139         else:
140           #listeValeurs.append(valeurBrute)
141           listeValeurs.append(valeur)
142
143         return listeValeurs,1
144
145 class SaisieSDCO(object) :
146
147   def LESDCOReturnPressed(self):
148         """
149            Lit le nom donne par l'utilisateur au concept de type CO qui doit ĂȘtre
150            la valeur du MCS courant et stocke cette valeur
151         """
152         self.editor.init_modif()
153         anc_val = self.node.item.get_valeur()
154         if anc_val != None:
155           # il faut egalement propager la destruction de l'ancien concept
156           self.node.item.delete_valeur_co(valeur=anc_val)
157           # et on force le recalcul des concepts de sortie de l'etape
158           self.node.item.object.etape.get_type_produit(force=1)
159           # et le recalcul du contexte
160           self.node.item.object.etape.parent.reset_context()
161         nomConcept = str(self.LESDCO.text())
162         if nomConcept == "" : return
163
164         test,commentaire=self.node.item.set_valeur_co(nomConcept)
165         if test:
166            commentaire=tr("Valeur du mot-clef enregistree")
167            self.node.update_node_valid()
168         else :
169            cr = self.node.item.get_cr()
170            commentaire = tr("Valeur du mot-clef non autorisee :")+cr.get_mess_fatal()
171