Salome HOME
optim eciture
[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 valeur == None :
46             nouvelleValeur=str(self.lineEditVal.text())
47          else :
48             #PN PN PN ???? la 1 ligne est tres bizarre.
49             try : 
50               if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
51             except : 
52               if hasattr(self,"lineEditVal"):self.lineEditVal.setText(valeur)
53             nouvelleValeur=valeur
54          if self.node.item.definition.validators != None :
55           if self.node.item.definition.validators.verif_item(nouvelleValeur) !=1 :
56                 commentaire=self.node.item.definition.validators.info_erreur_item()
57                 self.editor.affiche_infos(commentaire,Qt.red)
58                 return
59          nouvelleValeurFormat=self.politique.GetValeurTexte(nouvelleValeur)
60          validite,commentaire=self.politique.RecordValeur(nouvelleValeurFormat)
61          if commentaire != "" :
62             #PNPNPNP Il faut trouver une solution pour les 2 cas 
63             #   self.editor.affiche_infos(commentaire)
64             #self.Commentaire.setText(tr(commentaire))
65             if validite :
66                 self.editor.affiche_commentaire(commentaire)
67             else :
68                 self.editor.affiche_infos(commentaire,Qt.red)
69          self.setValide()
70
71
72   #def TraiteLEValeurTuple(self,valeurBrute=None) :
73   #      listeValeurs=[]
74   #      if valeurBrute== None :valeurBrute=str(self.LEValeur.text())
75   #      listeValeursSplit=valeurBrute.split(',')
76   #      for val in listeValeursSplit :
77   #          try :
78   #             valeur=eval(val,{})        
79   #          except :
80   #             valeur=val
81   #          listeValeurs.append(valeur)
82   #      return listeValeurs
83
84   def TraiteLEValeur(self,valeurTraitee=None) :
85         # lit la chaine entree dans le line edit
86         # et la tranforme en chaine de valeurs
87         # a traiter. renvoie eventuellement des complexes
88         listeValeurs=[]
89         if valeurTraitee == None :
90            valeurBrute=str(self.LEValeur.text())
91         else :
92            valeurBrute=valeurTraitee
93         if valeurBrute == str("") : return listeValeurs,1
94
95         try :
96             valeur=eval(valeurBrute,{})        
97         except :
98             valeur=valeurBrute
99
100         if type(valeur)  in (list,tuple) :
101            if self.node.item.wait_complex() :
102               indice = 0
103               while (indice < len(valeur)):
104                  v=valeur[indice]
105
106                  if (v== 'RI' or v == 'MP'):
107                     try :
108                        t=tuple([v,valeur[indice+1],valeur[indice+2]])
109                        listeValeurs.append(t)
110                        indice=indice+3
111                     except :
112                        commentaire = tr("Veuillez entrer le complexe sous forme aster ou sous forme python")
113                        self.editor.affiche_infos(commentaire)
114                        return listeValeurs,0
115                        
116
117                  else :     # ce n'est pas un tuple a la mode aster
118                     listeValeurs.append(v)
119                     indice = indice + 1
120
121            else:  # on n'attend pas un complexe
122              listeValeurs=valeurBrute.split(',')
123
124         elif type(valeur) == bytes:
125              listeValeurs=valeur.split(',')
126         else:
127           #listeValeurs.append(valeurBrute)
128           listeValeurs.append(valeur)
129
130         return listeValeurs,1
131
132 class SaisieSDCO(object) :
133
134   def LESDCOReturnPressed(self):
135         """
136            Lit le nom donne par l'utilisateur au concept de type CO qui doit ĂȘtre
137            la valeur du MCS courant et stocke cette valeur
138         """
139         self.editor.init_modif()
140         anc_val = self.node.item.get_valeur()
141         if anc_val != None:
142           # il faut egalement propager la destruction de l'ancien concept
143           self.node.item.delete_valeur_co(valeur=anc_val)
144           # et on force le recalcul des concepts de sortie de l'etape
145           self.node.item.object.etape.get_type_produit(force=1)
146           # et le recalcul du contexte
147           self.node.item.object.etape.parent.reset_context()
148         nomConcept = str(self.LESDCO.text())
149         if nomConcept == "" : return
150
151         test,commentaire=self.node.item.set_valeur_co(nomConcept)
152         if test:
153            commentaire=tr("Valeur du mot-clef enregistree")
154            self.node.update_node_valid()
155         else :
156            cr = self.node.item.get_cr()
157            commentaire = tr("Valeur du mot-clef non autorisee :")+cr.get_mess_fatal()
158