Salome HOME
merge avec les devloppts de l ete
[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         # pour traiter 11.0 - 30.0 pour le CIST
114         if (valeurTraitee and (type(valeurTraitee) in types.StringTypes) and (self.node.item.wait_TXM())) :
115            valeur=str(valeurTraitee)
116
117
118         if type(valeur)  in (list,tuple) :
119            if self.node.item.wait_complex() :
120               indice = 0
121               while (indice < len(valeur)):
122                  v=valeur[indice]
123
124                  if (v== 'RI' or v == 'MP'):
125                     try :
126                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
127                        listeValeurs.append(t)
128                        indice=indice+3
129                     except :
130                        commentaire = tr("Veuillez entrer le complexe sous forme aster ou sous forme python")
131                        self.editor.affiche_infos(commentaire)
132                        return listeValeurs,0
133                        
134
135                  else :     # ce n'est pas un tuple a la mode aster
136                     listeValeurs.append(v)
137                     indice = indice + 1
138
139            else:  # on n'attend pas un complexe
140              listeValeurs=valeurBrute.split(',')
141
142         elif type(valeur) == bytes:
143              listeValeurs=valeur.split(',')
144         else:
145           #listeValeurs.append(valeurBrute)
146           listeValeurs.append(valeur)
147
148         return listeValeurs,1
149
150 class SaisieSDCO(object) :
151
152   def LESDCOReturnPressed(self):
153         """
154            Lit le nom donne par l'utilisateur au concept de type CO qui doit ĂȘtre
155            la valeur du MCS courant et stocke cette valeur
156         """
157         self.editor.init_modif()
158         anc_val = self.node.item.get_valeur()
159         if anc_val != None:
160           # il faut egalement propager la destruction de l'ancien concept
161           self.node.item.delete_valeur_co(valeur=anc_val)
162           # et on force le recalcul des concepts de sortie de l'etape
163           self.node.item.object.etape.get_type_produit(force=1)
164           # et le recalcul du contexte
165           self.node.item.object.etape.parent.reset_context()
166         nomConcept = str(self.LESDCO.text())
167         if nomConcept == "" : return
168
169         test,commentaire=self.node.item.set_valeur_co(nomConcept)
170         if test:
171            commentaire=tr("Valeur du mot-clef enregistree")
172            self.node.update_node_valid()
173         else :
174            cr = self.node.item.get_cr()
175            commentaire = tr("Valeur du mot-clef non autorisee :")+cr.get_mess_fatal()
176