-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2013 EDF R&D
#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-# ======================================================================
"""
Ce module contient la classe PARAMETRE qui sert à définir
des objets paramètres qui sont compréhensibles et donc affichables
# import de modules Python
import string,types
+from math import *
+import traceback
# import de modules Eficas
from Noyau.N_CR import CR
+from Noyau import N_OBJECT
+from Ihm import I_OBJECT
+from param2 import *
+from Ihm import CONNECTOR
+from Extensions.i18n import tr
-class PARAMETRE :
+class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
"""
Cette classe permet de créer des objets de type PARAMETRE
cad des affectations directes dans le jeu de commandes (ex: a=10.)
idracine = 'param'
def __init__(self,nom,valeur=None):
- # parent ne peut être qu'un objet de type JDC
- self.valeur = self.interprete_valeur(valeur)
- self.val=valeur
self.nom = nom
# La classe PARAMETRE n'a pas de définition : on utilise self pour
# complétude
self.definition=self
+ # parent ne peut être qu'un objet de type JDC
self.jdc = self.parent = CONTEXT.get_current_step()
self.niveau=self.parent.niveau
self.actif=1
self.state='undetermined'
self.register()
+ self.dict_valeur=[]
+ #self.valeur = self.interprete_valeur(valeur)
+ #self.val=valeur
+ self.valeur = valeur
+ self.val=repr(valeur)
def interprete_valeur(self,val):
"""
- une liste d'items d'un type qui précède
Retourne la valeur interprétée
"""
- if not val : return None
+ #if not val : return None
valeur = None
- # on vérifie si val est un entier
- try :
- valeur = string.atoi(val) # on a un entier
- return valeur
- except :
- pass
- # on vérifie si val est un réel
- try:
- valeur = string.atof(val) # on a un réel
- return valeur
- except :
- pass
- # on vérifie si val est un tuple
- try :
- valeur = eval(val)
- except:
- pass
+
+ if type(val) == types.ListType:
+ # Un premier traitement a ete fait lors de la saisie
+ # permet de tester les parametres qui sont des listes
+ l_new_val = []
+ for v in val :
+ try :
+ valeur=eval(str(v))
+ l_new_val.append(v)
+ except :
+ return None
+ return l_new_val
+
+ if type(val) == types.StringType:
+ # on tente l'evaluation dans un contexte fourni par le parent s'il existe
+ if self.parent:
+ valeur=self.parent.eval_in_context(val,self)
+ else:
+ try :
+ valeur = eval(val)
+ except:
+ #traceback.print_exc()
+ pass
+ #PN je n ose pas modifier je rajoute
+ # refus des listes heterogenes : ne dvrait pas etre la
if valeur != None :
if type(valeur) == types.TupleType:
l_new_val = []
return val
l_new_val.append(v)
return tuple(l_new_val)
- else:
- # on a réussi à évaluer val en autre chose qu'un tuple ...
- print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
- print 'on trouve : ',str(valeur),' de type : ',type(valeur)
+
+ if valeur != None :
+ if type(valeur).__name__ == 'list':
+ self.dict_valeur=[]
+ for i in range(len(valeur)):
+ self.dict_valeur.append(valeur[i])
+ return valeur
# on retourne val comme une string car on n'a pas su l'interpréter
return val
+ def get_valeurs(self):
+ valeurretour=[]
+ if self.dict_valeur != []:
+ for val in self.dict_valeur:
+ valeurretour.append(val)
+ else:
+ valeurretour.append(self.valeur)
+ return valeurretour
+
def set_valeur(self,new_valeur):
"""
Remplace la valeur de self par new_valeur interprétée
"""
self.valeur = self.interprete_valeur(new_valeur)
+ self.val=repr(self.valeur)
+ self.parent.update_concept_after_etape(self,self)
+ self.init_modif()
+
+ def set_nom(self,new_nom):
+ """
+ Change le nom du parametre
+ """
self.init_modif()
+ self.nom=new_nom
+ self.fin_modif()
def init_modif(self):
"""
if self.parent:
self.parent.init_modif()
+ def get_jdc_root(self):
+ if self.parent:
+ return self.parent.get_jdc_root()
+ else:
+ return self
+
def register(self):
"""
Enregistre le paramètre dans la liste des étapes de son parent (JDC)
"""
if self.nom == '' :
if cr == 'oui':
- self.cr.fatal("Pas de nom donné au paramètre ")
+ self.cr.fatal(tr("Pas de nom donné au paramètre "))
return 0
else:
if self.valeur == None :
if cr == 'oui' :
- self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
+ self.cr.fatal(tr("Le paramètre %s ne peut valoir None" , self.nom))
return 0
return 1
self.parent = None
self.jdc = None
self.definition=None
+ self.niveau=None
def active(self):
"""
self.jdc.append_param(self)
except:
pass
+ CONNECTOR.Emit(self,"add",None)
+ CONNECTOR.Emit(self,"valid")
def inactive(self):
"""
self.actif = 0
self.jdc.del_param(self)
self.jdc.delete_concept_after_etape(self,self)
+ CONNECTOR.Emit(self,"supp",None)
+ CONNECTOR.Emit(self,"valid")
def isactif(self):
"""
paramètres du JDC
"""
self.jdc.delete_param(self)
+ self.parent.delete_concept(self)
def update_context(self,d):
"""
"""
Donne un echo de self sous la forme nom = valeur
"""
- return self.nom+' = '+str(self.valeur)+'\n'
+ if type(self.valeur) == types.StringType:
+ if self.valeur.find('\n') == -1:
+ # pas de retour chariot, on utilise repr
+ return self.nom+' = '+ repr(self.valeur)
+ elif self.valeur.find('"""') == -1:
+ # retour chariot mais pas de triple ", on formatte
+ return self.nom+' = """'+self.valeur+'"""'
+ else:
+ return self.nom+' = '+ repr(self.valeur)
+ else:
+ if type(self.valeur) == types.ListType :
+ aRetourner=self.nom+' = ['
+ for l in self.valeur :
+ aRetourner=aRetourner+str(l) +","
+ aRetourner=aRetourner[0:-1]+']'
+ return aRetourner
+ return self.nom+' = '+ str(self.valeur)
def __str__(self):
"""
"""sans objet """
pass
+ def close(self):
+ pass
+ def reset_context(self):
+ pass
+ def eval(self):
+ if isinstance(self.valeur,Formula):
+ return self.valeur.eval()
+ else:
+ return self.valeur
+ def __adapt__(self,validator):
+ return validator.adapt(self.eval())
+
+class COMBI_PARAMETRE :
+ def __init__(self,chainevaleur,valeur):
+ self.chainevaleur=chainevaleur
+ self.valeur=valeur
+
+ def __repr__(self):
+ return self.chainevaleur
+
+ def isvalid(self):
+ if self.valeur and self.chainevaleur:
+ return 1
+
+class ITEM_PARAMETRE :
+ def __init__(self,param_pere,item=None):
+ self.param_pere = param_pere
+ self.item = item
+
+
+ def __repr__(self):
+ return self.param_pere.nom+'['+str(self.item)+']'
+
+
+ def isvalid(self):
+ isvalid = 1
+ if self.item < 0:
+ isvalid = 0
+ try:
+ longueur= len(self.param_pere.dict_valeur) - 1
+ except:
+ longueur=0
+ if self.item > longueur :
+ isvalid= 0
+ return isvalid