Salome HOME
bug
[tools/eficas.git] / InterfaceQT4 / qtSaisie.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017   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.afficheInfos("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.verifItem(nouvelleValeur) !=1 :
67                 commentaire=self.node.item.definition.validators.infoErreurItem()
68                 self.editor.afficheInfos(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.afficheInfos(commentaire)
76             #self.Commentaire.setText(tr(commentaire))
77             if validite :
78                 self.editor.afficheCommentaire(commentaire)
79             else :
80                 self.editor.afficheInfos(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.waitTxm())) :
115         if (valeurTraitee and  isinstance(valeurTraitee, str)  and (self.node.item.waitTxm())) :
116            valeur=str(valeurTraitee)
117
118
119         if type(valeur)  in (list,tuple) :
120            if self.node.item.waitComplex() :
121               indice = 0
122               while (indice < len(valeur)):
123                  v=valeur[indice]
124
125                  if (v== 'RI' or v == 'MP'):
126                     try :
127                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
128                        listeValeurs.append(t)
129                        indice=indice+3
130                     except :
131                        commentaire = tr("Veuillez entrer le complexe sous forme aster ou sous forme python")
132                        self.editor.afficheInfos(commentaire)
133                        return listeValeurs,0
134                        
135
136                  else :     # ce n'est pas un tuple a la mode aster
137                     listeValeurs.append(v)
138                     indice = indice + 1
139
140            else:  # on n'attend pas un complexe
141              listeValeurs=valeurBrute.split(',')
142
143         elif type(valeur) == bytes:
144              listeValeurs=valeur.split(',')
145         else:
146           #listeValeurs.append(valeurBrute)
147           listeValeurs.append(valeur)
148
149         return listeValeurs,1
150
151 class SaisieSDCO(object) :
152
153   def LESDCOReturnPressed(self):
154         """
155            Lit le nom donne par l'utilisateur au concept de type CO qui doit ĂȘtre
156            la valeur du MCS courant et stocke cette valeur
157         """
158         self.editor.initModif()
159         anc_val = self.node.item.getValeur()
160         if anc_val != None:
161           # il faut egalement propager la destruction de l'ancien concept
162           self.node.item.deleteValeurCo(valeur=anc_val)
163           # et on force le recalcul des concepts de sortie de l'etape
164           self.node.item.object.etape.getType_produit(force=1)
165           # et le recalcul du contexte
166           self.node.item.object.etape.parent.resetContext()
167         nomConcept = str(self.LESDCO.text())
168         if nomConcept == "" : return
169
170         test,commentaire=self.node.item.setValeurCo(nomConcept)
171         if test:
172            commentaire=tr("Valeur du mot-clef enregistree")
173            self.node.updateNodeValid()
174         else :
175            cr = self.node.item.getCr()
176            commentaire = tr("Valeur du mot-clef non autorisee :")+cr.getMessFatal()
177