# -*- coding: utf-8 -*-
-# 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.
+# 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(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
+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.dict_valeur=[]
- 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()
-
- def __getitem__(self,key):
- param_item=ITEM_PARAMETRE(self,key)
- return param_item
-
- def __neg__(self):
- try:
- return -1*self.valeur
- except:
- print "******* Probleme : pas de valeur négative"
- return None
-
- def __add__(self,a):
- try :
- return self.valeur+a.valeur
- except :
- print "******* Probleme : a l addition"
- return None
-
- def __radd__(self,a):
- try :
- return self.valeur+a.valeur
- except :
- print "******* Probleme : a l addition"
- return None
-
- def __sub__(self,a):
- try :
- return self.valeur - a.valeur
- except :
- print "******* Probleme : a la soustraction"
- return None
-
- def __rsub__(self,a):
- try :
- return a.valeur - self.valeur
- except :
- print "******* Probleme : a la soustraction"
- return None
-
- def __mul__(self,a):
- try :
- return self.valeur*a.valeur
- except :
- print "******* Probleme : a la multiplication"
- return None
-
- def __rmul__(self,a):
- try :
- return self.valeur*a.valeur
- except :
- print "******* Probleme : a la multiplication"
- return None
-
- def __mul__(self,a):
- try :
- return self.valeur*a.valeur
- except :
- print "******* Probleme : a la multiplication"
- return None
-
- def __rmul__(self,a):
- try :
- return self.valeur*a.valeur
- except :
- print "******* Probleme : a la multiplication"
- return None
-
- def __add__(self,other):
- try :
- return self.valeur+other
- except :
- print "******* Probleme : a l addition"
- return None
-
- def __radd__(self,other):
- try :
- return self.valeur+other
- except :
- print "******* Probleme : a l addition"
- return None
-
- def __sub__(self,other):
- try :
- return self.valeur - other
- except :
- print "******* Probleme : a la soustraction"
- return None
-
- def __rsub__(self,other):
- try :
- return other - self.valeur
- except :
- print "******* Probleme : a la soustraction"
- return None
-
- def __mul__ (self,other):
- retour=None
- try :
- retour = eval(self.valeur) * other
- except :
- try :
- retour = self.valeur * other
- except :
- print "******* Probleme : a la multiplication"
- return retour
-
- def __rmul__ (self,other):
- retour=None
- try :
- retour = eval(self.valeur) * other
- except :
- try :
- retour = self.valeur * other
- except :
- print "******* Probleme : a la multiplication"
- return retour
-
-
- def __div__(self,other):
- retour=None
- try:
- retour = eval(self.valeur) / other
- except :
- try :
- retour = self.valeur / other
- except :
- print "******* Probleme : a la division"
- return retour
-
+ 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)
- # PN : commente le print
- #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)
- # on retourne val comme une string car on n'a pas su l'interpréter
+
if valeur != None :
if type(valeur).__name__ == 'list':
self.dict_valeur=[]
for i in range(len(valeur)):
- self.dict_valeur.append(valeur[i])
+ 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):
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.nom == '' :
if cr == 'oui':
- self.cr.fatal("Pas de nom donné au paramètre ")
+ self.cr.fatal(tr("Pas de nom donne au parametre "))
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 parametre %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)
+ 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):
"""
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):
if self.item < 0:
isvalid = 0
try:
- longueur= len(self.param_pere.dict_valeur) - 1
+ longueur= len(self.param_pere.dict_valeur) - 1
except:
longueur=0
if self.item > longueur :