Salome HOME
fin du menage
[tools/eficas.git] / InterfaceQT4 / qtSaisie.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   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          #print('LEvaleurPressed', valeur, type(valeur))
46          if not hasattr(self, 'inSaisieValeur' ) : self.inSaisieValeur=False
47          if self.inSaisieValeur : return
48          self.inSaisieValeur=True
49
50          if valeur == None :
51             try :
52               nouvelleValeur=str(self.lineEditVal.text())
53             except UnicodeEncodeError as e :
54                self.editor.afficheInfos("pb d encoding", Qt.red)
55                validite,commentaire=self.politique.recordValeur(None)
56                self.lineEditVal.setText('')
57                self.setValide()
58                self.inSaisieValeur=False
59                return
60          else :
61             try : 
62               # la 1 ligne est tres bizarre. remplacee par le 3nd le 01 10 19
63               #if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
64               if hasattr(self,"lineEditVal") : self.lineEditVal.setText(tr(valeur))
65             except : 
66               if hasattr(self,"lineEditVal"):self.lineEditVal.setText(valeur)
67             nouvelleValeur=valeur
68
69          if self.node.item.definition.validators != None :
70             if self.node.item.definition.validators.verifItem(nouvelleValeur) !=1 :
71                 commentaire=self.node.item.definition.validators.infoErreurItem()
72                 self.editor.afficheInfos(commentaire,Qt.red)
73                 self.inSaisieValeur=False
74                 return
75
76          nouvelleValeurFormat=self.politique.getValeurTexte(nouvelleValeur)
77          validite,commentaire=self.politique.recordValeur(nouvelleValeurFormat)
78          if commentaire != "" :
79             if validite :
80                 self.editor.afficheCommentaire(commentaire)
81             else :
82                 self.editor.afficheInfos(commentaire,Qt.red)
83          self.inSaisieValeur=False
84          self.setValide()
85
86
87
88   def TraiteLEValeur(self,valeurTraitee=None) :
89         # lit la chaine entree dans le line edit
90         # et la tranforme en chaine de valeurs
91         # a traiter. renvoie eventuellement des complexes
92         listeValeurs=[]
93         if valeurTraitee == None :
94            valeurBrute=str(self.LEValeur.text())
95         else :
96            valeurBrute=valeurTraitee
97         if valeurBrute == str("") : return listeValeurs,1
98
99         try :
100             valeur=eval(valeurBrute,{})        
101         except :
102             valeur=valeurBrute
103
104         # pour traiter 11.0 - 30.0 pour le CIST
105         #if (valeurTraitee and (type(valeurTraitee) in types.StringTypes) and (self.node.item.waitTxm())) :
106         if (valeurTraitee and  isinstance(valeurTraitee, str)  and (self.node.item.waitTxm())) :
107            valeur=str(valeurTraitee)
108
109
110         if type(valeur)  in (list,tuple) :
111            if self.node.item.waitComplex() :
112               indice = 0
113               while (indice < len(valeur)):
114                  v=valeur[indice]
115
116                  if (v== 'RI' or v == 'MP'):
117                     try :
118                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
119                        listeValeurs.append(t)
120                        indice=indice+3
121                     except :
122                        commentaire = tr("Veuillez entrer le complexe sous forme aster ou sous forme python")
123                        self.editor.afficheInfos(commentaire)
124                        return listeValeurs,0
125                        
126
127                  else :     # ce n'est pas un tuple a la mode aster
128                     listeValeurs.append(v)
129                     indice = indice + 1
130
131            else:  # on n'attend pas un complexe
132              listeValeurs=valeurBrute.split(',')
133
134         elif type(valeur) == bytes:
135              listeValeurs=valeur.split(',')
136         else:
137           #listeValeurs.append(valeurBrute)
138           listeValeurs.append(valeur)
139
140         return listeValeurs,1
141
142 class SaisieSDCO(object) :
143
144   def LESDCOReturnPressed(self):
145         """
146            Lit le nom donne par l'utilisateur au concept de type CO qui doit ĂȘtre
147            la valeur du MCS courant et stocke cette valeur
148         """
149         self.editor.initModif()
150         anc_val = self.node.item.getValeur()
151         if anc_val != None:
152           # il faut egalement propager la destruction de l'ancien concept
153           self.node.item.deleteValeurCo(valeur=anc_val)
154           # et on force le recalcul des concepts de sortie de l'etape
155           self.node.item.object.etape.getType_produit(force=1)
156           # et le recalcul du contexte
157           self.node.item.object.etape.parent.resetContext()
158         nomConcept = str(self.LESDCO.text())
159         if nomConcept == "" : return
160
161         test,commentaire=self.node.item.setValeurCo(nomConcept)
162         if test:
163            commentaire=tr("Valeur du mot-clef enregistree")
164            self.node.updateNodeValid()
165         else :
166            cr = self.node.item.getCr()
167            commentaire = tr("Valeur du mot-clef non autorisee :")+cr.getMessFatal()
168