from Noyau import N_FONCTION
from Noyau import N_CO
from Noyau import N_UserASSD
+from Noyau import N_UserASSDMultiple
# On ajoute la classe ASSD dans l'heritage multiple pour recreer
# une hierarchie d'heritage identique a celle de Noyau
#class LASSD(I_LASSD.LASSD,N_LASSD.LASSD):pass
class LASSD(I_LASSD.LASSD):pass
class UserASSD(N_UserASSD.UserASSD,ASSD): pass
+class UserASSDMultiple(N_UserASSDMultiple.UserASSDMultiple,UserASSD): pass
class assd(N_ASSD.assd,I_ASSD.assd,ASSD):pass
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- V_AU_MOINS_UN.AU_MOINS_UN n'en a pas
+ seule N_REGLE.REGLE en a un
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
V_AU_PLUS_UN.AU_PLUS_UN n'en a pas
+ V_UN_PARMI.UN_PARMI et I_REGLE.REGLE n'en ont pas
"""
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- I_AVANT.I_AVANT n'en a pas
+ I_AVANT.I_AVANT et I_REGLE.REGLE n'en ont pas
"""
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- V_ENSEMBLE.ENSEMBLE n'en a pas
+ seule N_REGLE.REGLE en a un
+
"""
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- V_EXCLUS.EXCLUS n'en a pas
+ I_EXCLUS.EXCLUS V_EXCLUS.EXCLUS n'en ont pas
"""
class FACT(N_FACT.FACT,X_FACT,I_ENTITE.ENTITE):
- class_instance=A_MCFACT.MCFACT
- list_instance=A_MCLIST.MCList
+ class_instance = A_MCFACT.MCFACT
+ list_instance = A_MCLIST.MCList
def __init__(self,*tup,**args):
I_ENTITE.ENTITE.__init__(self)
N_FACT.FACT.__init__(self,*tup,**args)
class MCSIMP(I_MCSIMP.MCSIMP,N_MCSIMP.MCSIMP,X_MCSIMP,V_MCSIMP.MCSIMP):
def __init__(self,val,definition,nom,parent,objPyxbDeConstruction=None):
- #def __init__(self,val,definition,nom,parent,objPyxbDeConstruction) quand cela sera correct dans les update_etape. pour l instant on laisse le defaut a None : 9 Aout 18:
+ #le defaut de objPyxbDeConstruction permet de lire les comm avec des modeles sans equivalent XSD
N_MCSIMP.MCSIMP.__init__(self,val,definition,nom,parent,objPyxbDeConstruction)
V_MCSIMP.MCSIMP.__init__(self)
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- V_MEME_NOMBRE.MEME_NOMBRE n'en a pas
+ seule N_REGLE.REGLE en a un
"""
from . import A_MCNUPLET
class NUPL(nuplet.NUPL):
- class_instance=A_MCNUPLET.MCNUPLET
- list_instance=A_MCLIST.MCList
+ class_instance = A_MCNUPLET.MCNUPLET
+ list_instance = A_MCLIST.MCList
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- V_PRESENT_ABSENT.PRESENT_ABSENT n'en a pas
+ seule N_REGLE.REGLE.py en a un
"""
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- V_PRESENT_PRESENT.PRESENT_PRESENT n'en a pas
+ seule N_REGLE.REGLE en a un
"""
-import types
-class Tuple:
- def __init__(self,ntuple):
- self.ntuple=ntuple
+#
+from __future__ import absolute_import
+from Noyau import N_TUPLE
+from Ihm import I_TUPLE
- def __convert__(self,valeur):
- try:
- if isinstance(valeur, basestring) : return None
- except NameError:
- if isinstance(valeur, str): return None
- if len(valeur) != self.ntuple: return None
- return valeur
-
- def info(self):
- return "Tuple de %s elements" % self.ntuple
+class Tuple (N_TUPLE.N_Tuple): pass
+class Matrice (I_TUPLE.I_Matrice,N_TUPLE.N_Matrice):pass
+# def __init__(self,*tup,**args):
+# I_TUPLE.I_Matrice.__init__(self)
+# N_TUPLE.N_Matrice(self,*tup,**args)
+# print (tup)
+# print (args)
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
necessaire d'expliciter son initialiseur car
- V_UN_PARMI.UN_PARMI n'en a pas
+ V_UN_PARMI.UN_PARMI et I_UN_PARMI.UN_PARMI n'en ont pas
"""
classes et leur implementation.
"""
-# permet de se proteger de l'oubli de carte coding
-# ce warning deviendra fatal en python 2.4
+
from __future__ import absolute_import
import warnings
warnings.filterwarnings('error','Non-ASCII character.*pep-0263',DeprecationWarning)
from .A_JDC_CATA import JDC_CATA
-from .A_OPER import OPER
-from .A_PROC import PROC
-from .A_MACRO import MACRO
-from .A_FORM import FORM
-from .A_BLOC import BLOC
-#from .A_BLOC import BLOC_EXCLUS_ABC
-#from .A_BLOC import BLOC_FICHIER
-from .A_FACT import FACT
-from .A_SIMP import SIMP
-from .A_EVAL import EVAL
-from .A_NUPLET import NUPL
-from .A_TUPLE import Tuple
+from .A_OPER import OPER
+from .A_PROC import PROC
+from .A_MACRO import MACRO
+from .A_FORM import FORM
+from .A_BLOC import BLOC
+from .A_FACT import FACT
+from .A_SIMP import SIMP
+from .A_EVAL import EVAL
+from .A_NUPLET import NUPL
+from .A_TUPLE import Tuple
+from .A_TUPLE import Matrice
from .A_JDC import JDC
from .A_A_CLASSER import A_CLASSER
from .A_AVANT import AVANT
-from .A_ASSD import ASSD,assd, UserASSD
+from .A_ASSD import ASSD,assd, UserASSD, UserASSDMultiple
from .A_ASSD import GEOM,geom
# Pour le moment on laisse fonction (ceinture et bretelles)
from .A_ASSD import FONCTION, fonction
# tout est Facultatif car sinon, on ne peut pas supprimer et c 'est ce qu on veut tester
-DefinitionListe = PROC( nom='DefinitionListe',
+DefinitionListe = PROC( nom='DefinitionListe',
listeTexte = SIMP( statut='f', typ = 'TXM',max='**'),
listeIntInto = SIMP( statut='f', typ = 'I',homo="SansOrdreNiDoublon",max='**', into=(1,2,3,4)),
listeIntIntoOrdre = SIMP( statut='f', typ = 'I',max='**', into=(1,2,3,4)),
)
VERSION_CATALOGUE='V_0'
-#leProc = PROC(nom = 'leProc',
+#leProc = PROC(nom = 'leProc',
# unSimp = SIMP(statut='o', typ ='I'),
# bloc1 = BLOC(condition = "UnSimp == 1",
# leFact1 = FACT(statut = 'o',
# ),
# )
#)
-leProcV2 = PROC(nom = 'leProcV2',
+leProcV2 = PROC(nom = 'leProcV2',
unSimpV2 = SIMP(statut='o', typ ='I'),
blocV21 = BLOC(condition = "UnSimpV2 == 1",
leFactV21 = FACT(statut = 'o',
),
), # fin bloc2
)
-
creeUserAssd = SIMP( statut='f', typ = (laClasseUserDerive,'createObject'),),
)
-DefinitionDsFactDsProc = PROC( nom='DefinitionDsFactDsProc',
+DefinitionDsFactDsProc = PROC( nom='DefinitionDsFactDsProc',
unFact = FACT(statut='f',
creeUserAssd = SIMP( statut='f', typ = (laClasseUser,'createObject'),),
),
)
-DefinitionDsSimpDsProc = PROC( nom='DefinitionDsSimpDsProc',
+DefinitionDsSimpDsProc = PROC( nom='DefinitionDsSimpDsProc',
creeUserAssd = SIMP( statut='f', typ = (laClasseUser,'createObject'),),
)
-DefinitionDsSimpListe = PROC( nom='DefinitionDsSimpListe',
+DefinitionDsSimpListe = PROC( nom='DefinitionDsSimpListe',
creeUserAssd = SIMP( statut='f', typ = (laClasseUser,'createObject'),max='**'),
)
utiliseUserAssd = SIMP(statut= 'o',typ= laClasseUser,max='**'),
creeUserAssd = SIMP( statut='f', typ = (laClasseUser,'createObject'),),
)
-
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module sert a lancer EFICAS configure pour Meteo
+ Ce module sert a lancer EFICAS configure pour Meteo
"""
# Modules Python
# Modules Eficas
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module sert a lancer EFICAS configure pour Meteo
+ Ce module sert a lancer EFICAS configure pour Meteo
"""
# Modules Python
# Modules Eficas
+++ /dev/null
-avecEltAbstrait ------------------- False
-self.importedBy ------------------- []
-self.code ------------------- Essai
-self.implement ------------------- Essai
-self.nomDuCodeDumpe ------------------- Essai
-self.nomDuXsdPere ------------------- Essai
-_________ dumpXsd___________ leProcV2 False True
-_________ dumpXsd___________ leFactV21 True 1
-________________________ leFactV21
-_________ dumpXsd___________ ScalarV2 False True
-<class 'Accas.A_FACT.FACT'>
- <xs:complexType name="T_ScalarV2" >
- <xs:sequence>
- <xs:element name="NameV2" type="Essai:T_NameV2" minOccurs="1" maxOccurs="1"/>
- <xs:element name="ScalarFluxModelV2" type="Essai:T_ScalarFluxModelV2" minOccurs="1" maxOccurs="1"/>
- </xs:sequence>
- </xs:complexType>
-
-fin ________________________ leFactV21
- <xs:element name="leFactV21" type="Essai:T_leFactV21" minOccurs="0" maxOccurs="1"/>
-
- <xs:group name="T_blocV21_blocV22">
- <xs:sequence>
- <xs:element name="leFactV21" type="Essai:T_leFactV21" minOccurs="0" maxOccurs="1"/>
-
-_________ dumpXsd___________ leFactV21 True False
-________________________ leFactV21
-_________ dumpXsd___________ ScalarV2 False True
-<class 'Accas.A_FACT.FACT'>
-
-fin ________________________ leFactV21
-__________________________ decommenter pour le texteXSD________________________
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-code="Essai"
+code="Essai"
import sys, os
if os.path.dirname(os.path.abspath(__file__)) not in sys.path :
- sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
+ sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module sert a lancer EFICAS configure pour MAP
+ Ce module sert a lancer EFICAS configure pour MAP
"""
# Modules Python
# Modules Eficas
from Extensions.i18n import tr
def substractList(liste1,liste2):
- """
- Enleve tous les elements de liste2 presents dans liste1 et retourne liste1
- """
- for item in liste2:
- try:
- liste1.remove(item)
- except:
- pass
- return liste1
+ """
+ Enleve tous les elements de liste2 presents dans liste1 et retourne liste1
+ """
+ for item in liste2:
+ try:
+ liste1.remove(item)
+ except:
+ pass
+ return liste1
def getRepUser(dir):
- """
- Determine sur quelle plate-forme s'execute Eficas et recherche
- le repertoire de l'utilisateur /$home/Eficas_install
- """
+ """
+ Determine sur quelle plate-forme s'execute Eficas et recherche
+ le repertoire de l'utilisateur /$home/Eficas_install
+ """
- #rep_user_eficas= os.path.join(os.environ['HOME'],dir)
- rep_user_eficas= os.path.join(os.path.expanduser("~"),dir)
- if os.path.exists(rep_user_eficas):
- if os.path.isfile(rep_user_eficas) :
- print (tr("Un fichier de nom %s existe deja : impossible de creer un repertoire de meme nom", rep_user_eficas))
- rep_user_eficas=None
- else :
- try:
- os.mkdir(rep_user_eficas)
- except:
- print (tr("Creation du repertoire %s impossible\n Verifiez vos droits d'acces", rep_user_eficas))
- return rep_user_eficas
+ #rep_user_eficas= os.path.join(os.environ['HOME'],dir)
+ rep_user_eficas= os.path.join(os.path.expanduser("~"),dir)
+ if os.path.exists(rep_user_eficas):
+ if os.path.isfile(rep_user_eficas) :
+ print (tr("Un fichier de nom %s existe deja : impossible de creer un repertoire de meme nom", rep_user_eficas))
+ rep_user_eficas=None
+ else :
+ try:
+ os.mkdir(rep_user_eficas)
+ except:
+ print (tr("Creation du repertoire %s impossible\n Verifiez vos droits d'acces", rep_user_eficas))
+ return rep_user_eficas
def read_file(file):
- """
- ouvre le fichier file et retourne son contenu
- si pbe retourne None
- """
- try :
- f=open(file)
- text=f.read()
- f.close()
- return text
- except:
- return None
+ """
+ ouvre le fichier file et retourne son contenu
+ si pbe retourne None
+ """
+ try :
+ with open(file) as fd :
+ text=fd.read()
+ return text
+ except:
+ return None
def save_in_file(file,text,dir=None):
- """
- cree le fichier file (ou l'ecrase s'il existe) et ecrit text dedans
- retourne 1 si OK 0 sinon
- """
- try :
- if dir != None:
- os.chdir(dir)
- f=open(file,'w')
- f.write(text)
- f.close()
- return 1
- except:
- return 0
+ """
+ cree le fichier file (ou l'ecrase s'il existe) et ecrit text dedans
+ retourne 1 si OK 0 sinon
+ """
+ try :
+ if dir != None:
+ os.chdir(dir)
+ with open(file) as fd :
+ fd.write(text)
+ return 1
+ except:
+ return 0
def extension_fichier(pathAndFile):
""" Return ext if path/filename.ext is given """
return os.path.split(pathAndFile)[1]
def initRep_CataDev(fic_cata,rep_goal):
- """
- Initialise le repertoire des catalogues developpeurs (chemin d'acces donne
- dans le fichier eficas.ini cad :
- - le cree s'il n'existe pas encore
- - copie dedans les 3 fichiers necessaires :
- * __init__.py (pour que ce repertoire puisse etre interprete comme un package)
- * entete.py (pour realiser les import necessaires a l'interpretation des catalogues)
- * declaration_concepts.py (idem)
- - cree le fichier cata_developpeur.py qui sera par la suite importe
- """
- try :
- if not os.path.isdir(rep_goal) :
- os.mkdir(rep_goal)
- #texte_entete = getEnteteCata(fic_cata)
- texte_entete=""
- # rep_goal doit contenir les catalogues du developpeur sous la forme *.capy
- # il faut creer le catalogue developpeur par concatenation de entete,declaration_concepts
- # et de tous ces fichiers
- cur_dir = os.getcwd()
- os.chdir(rep_goal)
- l_cata_dev = glob.glob('*.capy')
- if os.path.isfile('cata_developpeur.py') : os.remove('cata_developpeur.py')
- if len(l_cata_dev) :
- # des catalogues developpeurs sont effectivement presents : on cree cata_dev.py dans rep_goal
- str = ''
- str = str + texte_entete+'\n'
- for file in l_cata_dev :
- str = str + open(file,'r').read() +'\n'
- open('cata_developpeur.py','w+').write(str)
- os.chdir(cur_dir)
- except:
- traceback.print_exc()
- print ( tr("Impossible de transferer les fichiers requis dans : %s", str(rep_goal)))
+ """
+ Initialise le repertoire des catalogues developpeurs (chemin d'acces donne
+ dans le fichier eficas.ini cad :
+ - le cree s'il n'existe pas encore
+ - copie dedans les 3 fichiers necessaires :
+ * __init__.py (pour que ce repertoire puisse etre interprete comme un package)
+ * entete.py (pour realiser les import necessaires a l'interpretation des catalogues)
+ * declaration_concepts.py (idem)
+ - cree le fichier cata_developpeur.py qui sera par la suite importe
+ """
+ try :
+ if not os.path.isdir(rep_goal) :
+ os.mkdir(rep_goal)
+ #texte_entete = getEnteteCata(fic_cata)
+ texte_entete=""
+ # rep_goal doit contenir les catalogues du developpeur sous la forme *.capy
+ # il faut creer le catalogue developpeur par concatenation de entete,declaration_concepts
+ # et de tous ces fichiers
+ cur_dir = os.getcwd()
+ os.chdir(rep_goal)
+ l_cata_dev = glob.glob('*.capy')
+ if os.path.isfile('cata_developpeur.py') : os.remove('cata_developpeur.py')
+ if len(l_cata_dev) :
+ # des catalogues developpeurs sont effectivement presents : on cree cata_dev.py dans rep_goal
+ str = ''
+ str = str + texte_entete+'\n'
+ for file in l_cata_dev :
+ str = str + open(file,'r').read() +'\n'
+ open('cata_developpeur.py','w+').write(str)
+ os.chdir(cur_dir)
+ except:
+ traceback.print_exc()
+ print ( tr("Impossible de transferer les fichiers requis dans : %s", str(rep_goal)))
def getEnteteCata(fic_cata):
- """ Retrouve l'entete du catalogue """
- l_lignes = open(fic_cata,'r').readlines()
- txt = ''
- flag = 0
- for ligne in l_lignes :
- if re.match(u"# debut entete",ligne) : flag = 1
- if re.match(u"# fin entete",ligne) : break
- if not flag : continue
- txt = txt + ligne
- return txt
-
+ """ Retrouve l'entete du catalogue """
+ l_lignes = open(fic_cata,'r').readlines()
+ txt = ''
+ flag = 0
+ for ligne in l_lignes :
+ if re.match(u"# debut entete",ligne) : flag = 1
+ if re.match(u"# fin entete",ligne) : break
+ if not flag : continue
+ txt = txt + ligne
+ return txt
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import types,os,glob,imp,sys
from copy import copy,deepcopy
from Extensions.eficas_exception import EficasException
try :
- from repr import Repr
+ from repr import Repr
except :
- from reprlib import Repr
+ from reprlib import Repr
myrepr = Repr()
myrepr.maxstring = 100
myrepr.maxother = 100
return self._object
def connect(self,channel,callable,args):
- """ Connecte la fonction callable (avec arguments args) a l'item self sur le
+ """ Connecte la fonction callable (avec arguments args) a l'item self sur le
canal channel
"""
#print self,channel,callable,args
fonction = deepcopy(self.setFunction)
item = makeObjecttreeitem(appliEficas,labeltext,object,fonction)
return item
-
+
def isActif(self):
if hasattr(self.object,'actif'):
return self.object.actif
else:
return 1
-
+
def update(self,item):
"""
Met a jour l'item courant a partir d'un autre item passe en argument
return tr(self.labeltext),None,None
def getNature(self) :
- """
+ """
Retourne la nature de l'item et de l'objet
- """
+ """
return self.object.nature
def getRegles(self):
""" retourne les regles de l'objet pointe par self """
return self.object.getRegles()
-
+
def getListeMcPresents(self):
""" Retourne la liste des mots-cles fils de l'objet pointe par self """
return self.object.listeMcPresents()
-
+
def getVal(self):
""" Retourne le nom de la valeur de l'objet pointe par self dans le cas
ou celle-ci est un objet (ASSD) """
return self.object.getVal()
-
+
def get_definition(self):
- """
- Retourne l'objet definition de l'objet pointe par self
+ """
+ Retourne l'objet definition de l'objet pointe par self
"""
return self.object.definition
d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
"""
return self.object.getListeMcOrdonneeBrute(liste,dico)
-
+
def getGenealogie(self):
"""
Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC ou ETAPE)
l.append(nom)
# l contient les anciens mots-cles + le nouveau dans l'ordre
return l.index(nom_fils)
-
+
def appendChild(self,name,pos=None):
"""
Permet d'ajouter un item fils a self
elif pos == 'last':
index = len(self.listeMcPresents())
elif type(pos) == int :
- # la position est fixee
+ # la position est fixee
index = pos
#elif type(pos) == types.InstanceType:
elif type(pos) == object :
def getCopieObjet(self):
""" Retourne une copie de l'objet pointe par self """
return self.object.copy()
-
+
def getPosition(self):
""" Retourne la valeur de l'attribut position de l'objet pointe par self """
definition = self.get_definition()
return getattr(definition,'position')
except AttributeError:
return 'local'
-
+
def getNom(self):
""" Retourne le nom de l'objet pointe par self """
return self.object.nom
def getJdc(self):
""" Retourne le jdc auquel appartient l'objet pointe par self """
return self.object.jdc
-
+
def getValeur(self):
""" Retourne la valeur de l'objet pointe par self """
return self.object.valeur
raise EficasException("MESSAGE AU DEVELOPPEUR : il faut \
surcharger la methode getObjetCommentarise() \
pour la classe %s", self.__class__.__name__)
-
+
def isValid(self):
""" Retourne 1 si l'objet pointe par self est valide, 0 sinon"""
return self.object.isValid()
Par defaut retourne 0
"""
return 0
-
+
def getMcPresents(self):
""" Retourne le dictionnaire des mots-cles presents de l'objet pointe par self """
return self.object.dictMcPresents()
def setValeur(self,new_valeur):
""" Remplace la valeur de l'objet pointe par self par new_valeur """
return self.object.setValeur(new_valeur)
-
+
def getText(self):
return myrepr.repr(self.object)
-
+
def getIconName(self):
if not self.isExpandable():
return "python"
def isExpandable(self):
return 1
-
+
def getSubList(self):
keys = dir(self.object)
sublist = []
def __len__(self) :
return len(self._object)
-
+
def keys(self):
return list(range(len(self._object)))
def getIconName(self):
if self._object.isValid():
- return "ast-green-los"
+ return "ast-green-los"
elif self._object.isOblig():
- return "ast-red-los"
+ return "ast-red-los"
else:
- return "ast-yel-los"
+ return "ast-yel-los"
def ajoutPossible(self):
return self._object.ajoutPossible()
return self._object.getIndex(child.getObject())
def getText(self):
- return " "
+ return " "
def addItem(self,obj,pos):
self._object.insert(pos,obj)
self.sublist=[]
while(1):
- old_obj=obj=None
- for item in isublist:
- old_obj=item.getObject()
- if old_obj in liste:break
-
- for obj in iliste:
- if obj is old_obj:break
- # nouvel objet : on cree un nouvel item
- def setFunction(value, object=obj):
- object=value
- it = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
- self.sublist.append(it)
- if old_obj is None and obj is None:break
- if old_obj is obj: self.sublist.append(item)
+ old_obj=obj=None
+ for item in isublist:
+ old_obj=item.getObject()
+ if old_obj in liste:break
+
+ for obj in iliste:
+ if obj is old_obj:break
+ # nouvel objet : on cree un nouvel item
+ def setFunction(value, object=obj):
+ object=value
+ it = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
+ self.sublist.append(it)
+ if old_obj is None and obj is None:break
+ if old_obj is obj: self.sublist.append(item)
return self.sublist
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient la classe 3Dpilote qui va creer les ordres
+ Ce module contient la classe 3Dpilote qui va creer les ordres
de pilotage de l idl PAL pour un element de structure
"""
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import object
+ from builtins import object
except :
- pass
+ pass
import generator
from Extensions.i18n import tr
class TroisDPilote(object):
- def __init__(self,node,appliEficas):
- self.node=node
- self.appliEficas=appliEficas
+ def __init__(self,node,appliEficas):
+ self.node=node
+ self.appliEficas=appliEficas
- def envoievisu(self):
- """
- """
- format="vers3DSalome"
- if format in generator.plugins :
- # Le generateur existe on l'utilise
- g=generator.plugins[format]()
- g.initJdc(self.node.getJdc())
- texte=g.gener(self.node)
- else:
- print ("Le generateur n'a pas ete trouve")
- print ("Erreur ! Erreur!")
- return ""
- from Extensions.param2 import originalMath
- originalMath.toOriginal()
- self.appliEficas.envoievisu(texte)
- originalMath.toSurcharge()
-
+ def envoievisu(self):
+ """
+ """
+ format="vers3DSalome"
+ if format in generator.plugins :
+ # Le generateur existe on l'utilise
+ g=generator.plugins[format]()
+ g.initJdc(self.node.getJdc())
+ texte=g.gener(self.node)
+ else:
+ print ("Le generateur n'a pas ete trouve")
+ print ("Erreur ! Erreur!")
+ return ""
+ from Extensions.param2 import originalMath
+ originalMath.toOriginal()
+ self.appliEficas.envoievisu(texte)
+ originalMath.toSurcharge()
#
from __future__ import absolute_import
from __future__ import print_function
-try :
- from builtins import str
- from builtins import object
+try :
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import re,six.moves.cPickle,os
l_noms=l_noms_composes+l_noms_simples
def elimineCommentaires(text):
- """ Elimine les lignes de commentaires dans text
- Attention : supprime sauvagement tous les caracteres entre # et le retour chariot ..."""
- comments = re.compile(r'#[^\n]*')
- return comments.sub(u'',text)
+ """ Elimine les lignes de commentaires dans text
+ Attention : supprime sauvagement tous les caracteres entre # et le retour chariot ..."""
+ comments = re.compile(r'#[^\n]*')
+ return comments.sub(u'',text)
def chercheNom(text):
- Whitespace = r'[ \f\t]*'
- Name = r'[a-zA-Z_]\w*'
- myexpr = '(u'+Name+')'+Whitespace+'='+Whitespace+'$'
- a=re.search(myexpr,text)
- return a.group(1)
+ Whitespace = r'[ \f\t]*'
+ Name = r'[a-zA-Z_]\w*'
+ myexpr = '(u'+Name+')'+Whitespace+'='+Whitespace+'$'
+ a=re.search(myexpr,text)
+ return a.group(1)
def chercheArgs(text):
- text = text.strip()
- longueur = len(text)
- if text[0] != '(u':
- return 'erreur !'
+ text = text.strip()
+ longueur = len(text)
+ if text[0] != '(u':
+ return 'erreur !'
+ else :
+ nbpar = 1
+ for i in range(1,longueur) :
+ if text[i] =='(u':
+ nbpar = nbpar + 1
+ elif text[i] == ')':
+ nbpar = nbpar - 1
+ else :
+ continue
+ if nbpar == 0:
+ break
+ if nbpar != 0 :
+ return tr('Erreur ! Erreur !')
else :
- nbpar = 1
- for i in range(1,longueur) :
- if text[i] =='(u':
- nbpar = nbpar + 1
- elif text[i] == ')':
- nbpar = nbpar - 1
- else :
- continue
- if nbpar == 0:
- break
- if nbpar != 0 :
- return tr('Erreur ! Erreur !')
- else :
- try :
- return text[1:i],text[i+1:] # on enleve les premiere et derniere parentheses
- except :
- return text[1:i],''
+ try :
+ return text[1:i],text[i+1:] # on enleve les premiere et derniere parentheses
+ except :
+ return text[1:i],''
class ENTITE(object):
- def chercheEnfants(self):
- try :
- self.text = self.text.strip()
- liste = re.split(u'=',self.text,1)
- if len(liste)>1 :
- arg1=liste[0]
- reste=liste[1]
- reste = reste.strip()
- if reste[0:4] in l_noms :
- nom_mc = chercheNom(arg1+'=')
- arg_mc, self.text = chercheArgs(reste[4:])
- self.creeMc(nom_mc,arg_mc,reste[0:4])
- else :
- self.text = reste
- self.chercheEnfants()
- else :
- # pas de = rencontre
- return
- except Exception as e:
- self.cr.fatal(tr("Erreur rencontree dans rechercheEnfants : %s", e.__str()))
-
- def creeMc(self,nom_mc,arg_mc,test):
- if test in l_noms_composes :
- mc = FACT_CATA(nom_mc,arg_mc,self)
- self.children.append(mc)
- elif test in l_noms_simples :
- mc = SIMP_CATA(nom_mc,self)
- self.children.append(mc)
+ def chercheEnfants(self):
+ try :
+ self.text = self.text.strip()
+ liste = re.split(u'=',self.text,1)
+ if len(liste)>1 :
+ arg1=liste[0]
+ reste=liste[1]
+ reste = reste.strip()
+ if reste[0:4] in l_noms :
+ nom_mc = chercheNom(arg1+'=')
+ arg_mc, self.text = chercheArgs(reste[4:])
+ self.creeMc(nom_mc,arg_mc,reste[0:4])
else :
- print (tr("Erreur dans la creation du mot-cle : %s", nom_mc) )
-
- def construitListeDico(self):
- l=[]
- d={}
- if len(self.children)==0:
- self.ordre_mc = l
- self.entites = d
- return
- try :
- for child in self.children:
- l.append(child.nom)
- d[child.nom]=child
- self.ordre_mc = l
- self.entites = d
- except:
- print (("erreur : ", self.nom, self.__class__))
-
-class COMMANDE_CATA(ENTITE) :
- def __init__(self,nom,args,parent):
- self.nom = nom
- self.args = args
- self.children = []
- self.text = args
- self.cr = CR()
- self.cr.debut = "Debut commande %s" %self.nom
- self.cr.fin = "Fin commande %s" %self.nom
+ self.text = reste
self.chercheEnfants()
- self.construitListeDico()
- parent.cr.add(self.cr)
+ else :
+ # pas de = rencontre
+ return
+ except Exception as e:
+ self.cr.fatal(tr("Erreur rencontree dans rechercheEnfants : %s", e.__str()))
+
+ def creeMc(self,nom_mc,arg_mc,test):
+ if test in l_noms_composes :
+ mc = FACT_CATA(nom_mc,arg_mc,self)
+ self.children.append(mc)
+ elif test in l_noms_simples :
+ mc = SIMP_CATA(nom_mc,self)
+ self.children.append(mc)
+ else :
+ print (tr("Erreur dans la creation du mot-cle : %s", nom_mc) )
+
+ def construitListeDico(self):
+ l=[]
+ d={}
+ if len(self.children)==0:
+ self.ordre_mc = l
+ self.entites = d
+ return
+ try :
+ for child in self.children:
+ l.append(child.nom)
+ d[child.nom]=child
+ self.ordre_mc = l
+ self.entites = d
+ except:
+ print (("erreur : ", self.nom, self.__class__))
- def affiche(self):
- texte_cmd = '\n'
- texte_cmd = texte_cmd + 'Commande :' + self.nom + '\n'
- for child in self.children :
- texte_cmd = texte_cmd + child.affiche(1)
- return texte_cmd
+class COMMANDE_CATA(ENTITE) :
+ def __init__(self,nom,args,parent):
+ self.nom = nom
+ self.args = args
+ self.children = []
+ self.text = args
+ self.cr = CR()
+ self.cr.debut = "Debut commande %s" %self.nom
+ self.cr.fin = "Fin commande %s" %self.nom
+ self.chercheEnfants()
+ self.construitListeDico()
+ parent.cr.add(self.cr)
+
+ def affiche(self):
+ texte_cmd = '\n'
+ texte_cmd = texte_cmd + 'Commande :' + self.nom + '\n'
+ for child in self.children :
+ texte_cmd = texte_cmd + child.affiche(1)
+ return texte_cmd
class SIMP_CATA(object) :
- def __init__(self,nom,parent):
- self.nom = nom
- self.cr = CR()
- self.cr.debut = "Debut mot-cle simple %s" %self.nom
- self.cr.fin = "Fin mot-cle simple %s" %self.nom
- parent.cr.add(self.cr)
+ def __init__(self,nom,parent):
+ self.nom = nom
+ self.cr = CR()
+ self.cr.debut = "Debut mot-cle simple %s" %self.nom
+ self.cr.fin = "Fin mot-cle simple %s" %self.nom
+ parent.cr.add(self.cr)
- def affiche(self,ind):
- sep = ' '*5
- return sep*ind+self.nom+'\n'
+ def affiche(self,ind):
+ sep = ' '*5
+ return sep*ind+self.nom+'\n'
class FACT_CATA(ENTITE) :
- def __init__(self,nom,args,parent):
- self.nom=nom
- self.args=args
- self.children = []
- self.text=args
- self.cr = CR()
- self.cr.debut = "Debut mot-cle facteur ou bloc %s" %self.nom
- self.cr.fin = "Fin mot-cle facteur ou bloc %s" %self.nom
- self.chercheEnfants()
- self.construitListeDico()
- parent.cr.add(self.cr)
+ def __init__(self,nom,args,parent):
+ self.nom=nom
+ self.args=args
+ self.children = []
+ self.text=args
+ self.cr = CR()
+ self.cr.debut = "Debut mot-cle facteur ou bloc %s" %self.nom
+ self.cr.fin = "Fin mot-cle facteur ou bloc %s" %self.nom
+ self.chercheEnfants()
+ self.construitListeDico()
+ parent.cr.add(self.cr)
+
+ def affiche(self,ind):
+ sep = ' '*5
+ text = ''
+ text = text + sep*ind+self.nom+'\n'
+ for child in self.children :
+ text = text + child.affiche(ind+1)
+ return text
- def affiche(self,ind):
- sep = ' '*5
- text = ''
- text = text + sep*ind+self.nom+'\n'
- for child in self.children :
- text = text + child.affiche(ind+1)
- return text
-
class CATALOGUE_CATA(object):
- def __init__(self,parent,fichier):
- self.parent = parent
- self.fichier=fichier
- self.cr = CR()
- self.cr.debut = "Debut compte-rendu catalogue %s" %self.fichier
- self.cr.fin = "Fin compte-rendu catalogue %s" %self.fichier
- self.ouvrirFichier()
- self.liste_commandes=[]
- self.liste_textes_commandes=[]
-
- def ouvrirFichier(self):
- try :
- f=open(self.fichier,'r')
- self.texte_complet=f.read()
- f.close()
- except :
- print((tr("Impossible d'ouvrir le fichier : %s ", str(self.fichier))))
- self.cr.fatal(tr("Impossible d'ouvrir le fichier : %s ", str(self.fichier)))
-
- def constrListTxtCmd(self,text):
- text = elimineCommentaires(text)
- pattern = '\) *;'
- liste=re.split(pattern,text)
- for i in range(0,len(liste)-1):
- self.liste_textes_commandes.append(liste[i]+')')
-
- def analyseCommandeOld(self,text):
- liste = re.split(u'OPER *\(u',text,1)
- if len(liste) < 2 :
- liste = re.split(u'PROC *\(u',text,1)
- if len(liste) < 2 :
- liste = re.split(u'MACRO *\(u',text,1)
- if len(liste) < 2 :
- print ((tr("le texte a analyser n'est pas celui d'une commande ou d'un operateur : "), text))
- self.cr.fatal(tr("le texte a analyser n'est pas celui d'une commande ou \
- d'un operateur : %s", text))
- return
- debut = liste[0]
- fin = liste[1]
- nom_cmd = chercheNom(debut)
- if nom_cmd == 'erreur !':
- print((tr("Erreur dans la recherche du nom de la commande : "), debut))
- args_cmd,toto = chercheArgs(u'(u'+fin)
- if args_cmd == 'erreur !':
- print((tr("Erreur dans la recherche des args de la commande :") , debut))
- cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
- self.liste_commandes.append(cmd)
-
- def analyseCommande(self,text):
- for nom_cmd in l_noms_commandes:
- liste = re.split(nom_cmd+' *\(u',text,1)
- if len(liste) == 2 : break
- if len(liste) < 2 :
- print((tr("le texte a analyser n'est pas celui d'une commande connue : \
- %(v_1)s %(v_2)s", {'v_1': str(l_noms_commandes), 'v_2': text})))
- self.cr.fatal(tr("le texte a analyser n'est pas celui d'une commande connue : \
- %(v_1)s %(v_2)s", {'v_1': str(l_noms_commandes), 'v_2': text}))
- return
- debut = liste[0]
- fin = liste[1]
- nom_cmd = chercheNom(debut)
- if nom_cmd == 'erreur !':
- print(( tr("Erreur dans la recherche du nom de la commande : "), debut))
- args_cmd,toto = chercheArgs(u'(u'+fin)
- if args_cmd == 'erreur !':
- print(( tr("Erreur dans la recherche des args de la commande : "), debut))
- print((tr(fin)))
- cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
- self.liste_commandes.append(cmd)
-
- def analyseTexte(self,texte):
- self.constrListTxtCmd(texte)
- try:
- self.parent.configure_barre(len(self.liste_textes_commandes))
- except:
- pass
- for texte_commande in self.liste_textes_commandes :
- try:
- self.parent.update_barre()
- except:
- pass
- self.analyseCommande(texte_commande)
- self.construitListeDico()
-
- def ecritLcmd(self):
- f=open(u'U:\\EFICAS\\Accas\\cata.txt','w')
- for cmd in self.liste_commandes :
- f.write(cmd.affiche())
- f.close()
+ def __init__(self,parent,fichier):
+ self.parent = parent
+ self.fichier=fichier
+ self.cr = CR()
+ self.cr.debut = "Debut compte-rendu catalogue %s" %self.fichier
+ self.cr.fin = "Fin compte-rendu catalogue %s" %self.fichier
+ self.ouvrirFichier()
+ self.liste_commandes=[]
+ self.liste_textes_commandes=[]
+
+ def ouvrirFichier(self):
+ try :
+ with open(self.fichier) as fd:
+ self.texte_complet=fd.read()
+ except :
+ print((tr("Impossible d'ouvrir le fichier : %s ", str(self.fichier))))
+ self.cr.fatal(tr("Impossible d'ouvrir le fichier : %s ", str(self.fichier)))
+
+ def constrListTxtCmd(self,text):
+ text = elimineCommentaires(text)
+ pattern = '\) *;'
+ liste=re.split(pattern,text)
+ for i in range(0,len(liste)-1):
+ self.liste_textes_commandes.append(liste[i]+')')
+
+ def analyseCommandeOld(self,text):
+ liste = re.split(u'OPER *\(u',text,1)
+ if len(liste) < 2 :
+ liste = re.split(u'PROC *\(u',text,1)
+ if len(liste) < 2 :
+ liste = re.split(u'MACRO *\(u',text,1)
+ if len(liste) < 2 :
+ print ((tr("le texte a analyser n'est pas celui d'une commande ou d'un operateur : "), text))
+ self.cr.fatal(tr("le texte a analyser n'est pas celui d'une commande ou \
+ d'un operateur : %s", text))
+ return
+ debut = liste[0]
+ fin = liste[1]
+ nom_cmd = chercheNom(debut)
+ if nom_cmd == 'erreur !':
+ print((tr("Erreur dans la recherche du nom de la commande : "), debut))
+ args_cmd,toto = chercheArgs(u'(u'+fin)
+ if args_cmd == 'erreur !':
+ print((tr("Erreur dans la recherche des args de la commande :") , debut))
+ cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
+ self.liste_commandes.append(cmd)
+
+ def analyseCommande(self,text):
+ for nom_cmd in l_noms_commandes:
+ liste = re.split(nom_cmd+' *\(u',text,1)
+ if len(liste) == 2 : break
+ if len(liste) < 2 :
+ print((tr("le texte a analyser n'est pas celui d'une commande connue : \
+ %(v_1)s %(v_2)s", {'v_1': str(l_noms_commandes), 'v_2': text})))
+ self.cr.fatal(tr("le texte a analyser n'est pas celui d'une commande connue : \
+ %(v_1)s %(v_2)s", {'v_1': str(l_noms_commandes), 'v_2': text}))
+ return
+ debut = liste[0]
+ fin = liste[1]
+ nom_cmd = chercheNom(debut)
+ if nom_cmd == 'erreur !':
+ print(( tr("Erreur dans la recherche du nom de la commande : "), debut))
+ args_cmd,toto = chercheArgs(u'(u'+fin)
+ if args_cmd == 'erreur !':
+ print(( tr("Erreur dans la recherche des args de la commande : "), debut))
+ print((tr(fin)))
+ cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
+ self.liste_commandes.append(cmd)
+
+ def analyseTexte(self,texte):
+ self.constrListTxtCmd(texte)
+ try:
+ self.parent.configure_barre(len(self.liste_textes_commandes))
+ except:
+ pass
+ for texte_commande in self.liste_textes_commandes :
+ try:
+ self.parent.update_barre()
+ except:
+ pass
+ self.analyseCommande(texte_commande)
+ self.construitListeDico()
+
+ def ecritLcmd(self):
+ f=open(u'U:\\EFICAS\\Accas\\cata.txt','w')
+ for cmd in self.liste_commandes :
+ f.write(cmd.affiche())
+ f.close()
- def construitListeDico(self):
- l=[]
- d={}
- for cmd in self.liste_commandes:
- l.append(cmd.nom)
- d[cmd.nom]=cmd
- self.ordre_mc = l
- self.entites = d
+ def construitListeDico(self):
+ l=[]
+ d={}
+ for cmd in self.liste_commandes:
+ l.append(cmd.nom)
+ d[cmd.nom]=cmd
+ self.ordre_mc = l
+ self.entites = d
- def report(self):
- """ retourne l'objet rapport du catalogue de commande """
- return self.cr
+ def report(self):
+ """ retourne l'objet rapport du catalogue de commande """
+ return self.cr
def analyseCatalogue(parent,nom_cata):
- cata = CATALOGUE_CATA(parent,nom_cata)
- cata.analyseTexte(cata.texte_complet)
- return cata
+ cata = CATALOGUE_CATA(parent,nom_cata)
+ cata.analyseTexte(cata.texte_complet)
+ return cata
def analyseCatalogueCommande(parent,nom_cata):
- cata = CATALOGUE_CATA(parent,nom_cata)
- cata.analyseCommande(cata.texte_complet)
- cata.construitListeDico()
- return cata
+ cata = CATALOGUE_CATA(parent,nom_cata)
+ cata.analyseCommande(cata.texte_complet)
+ cata.construitListeDico()
+ return cata
def makeCataPickle(ficCata):
- """
- Lance l'analyse de l'ordre des mots-cles dans le catalogue dont le nom
- est passe en argument et sauvegarde ces infos dans le fichier pickle relu
- par Eficas
- """
- ficCata_p = os.path.splitext(ficCata)[0]+'_pickled.py'
- cata_ordonne = analyseCatalogue(None,ficCata)
- f = open(ficCata_p,'w+')
- p = six.moves.cPickle.Pickler(f)
- p.dump(cata_ordonne.entites)
- f.close()
-
-if __name__ == "__main__" :
- import profile
- profile.run(u"analyseCatalogue(None,'U:\\EFICAS\\Cata\\cata_saturne.py')")
-
-
-
-
-
+ """
+ Lance l'analyse de l'ordre des mots-cles dans le catalogue dont le nom
+ est passe en argument et sauvegarde ces infos dans le fichier pickle relu
+ par Eficas
+ """
+ ficCata_p = os.path.splitext(ficCata)[0]+'_pickled.py'
+ cata_ordonne = analyseCatalogue(None,ficCata)
+ f = open(ficCata_p,'w+')
+ p = six.moves.cPickle.Pickler(f)
+ p.dump(cata_ordonne.entites)
+ f.close()
-
-
-
-
-
-
-
+if __name__ == "__main__" :
+ import profile
+ profile.run(u"analyseCatalogue(None,'U:\\EFICAS\\Cata\\cata_saturne.py')")
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import re,os
from Extensions.i18n import tr
__version__="$Name: V7_main $"
#
-
-class Catalogue_initial(object):
- def __init__(self,fichier):
- self.liste_commandes=[]
- self.lignes=[]
- self.fichier=fichier
- self.ouvrirFichier()
- self.constrListTxtCmd()
-
- def ouvrirFichier(self):
- try :
- f=open(self.fichier,'r')
- self.lignes=f.readlines()
- f.close()
- except :
- print(tr("Impossible d'ouvrir le fichier : %s", str(self.fichier)))
- def constrListTxtCmd(self):
- pattern = '^# Ordre Catalogue '
- for i in self.lignes :
- if (re.search(pattern,i)):
- i=i.replace('# Ordre Catalogue ','')
- i=i.replace('\n','')
- self.liste_commandes.append(i)
+class Catalogue_initial(object):
+ def __init__(self,fichier):
+ self.liste_commandes=[]
+ self.lignes=[]
+ self.fichier=fichier
+ self.ouvrirFichier()
+ self.constrListTxtCmd()
+
+ def ouvrirFichier(self):
+ try :
+ with open(self.fichier) as fd:
+ self.lignes=fd.readlines()
+ except :
+ print(tr("Impossible d'ouvrir le fichier : %s", str(self.fichier)))
+
+ def constrListTxtCmd(self):
+ pattern = '^# Ordre Catalogue '
+ for i in self.lignes :
+ if (re.search(pattern,i)):
+ i=i.replace('# Ordre Catalogue ','')
+ i=i.replace('\n','')
+ self.liste_commandes.append(i)
def analyseCatalogue(nom_cata):
- cata = Catalogue_initial(nom_cata)
- return cata.liste_commandes
+ cata = Catalogue_initial(nom_cata)
+ return cata.liste_commandes
if __name__ == "__main__" :
- monCata="/local/noyret/Install_Eficas/EficasQT4/Openturns_StudyOpenTURNS_Cata_Study_V4.py"
- analyseCatalogue(monCata)
-
-
-
-
-
-
-
-
-
-
-
-
-
+ monCata="/local/noyret/Install_Eficas/EficasQT4/Openturns_StudyOpenTURNS_Cata_Study_V4.py"
+ analyseCatalogue(monCata)
from __future__ import absolute_import
from __future__ import print_function
if __name__ == "__main__" :
- import sys
- sys.path[:0]=[".."]
- sys.path[:0]=["../Aster"]
- sys.path[:0]=["../Saturne"]
+ import sys
+ sys.path[:0]=[".."]
+ sys.path[:0]=["../Aster"]
+ sys.path[:0]=["../Saturne"]
from Accas import NUPL
def traiteEntiteNUPL(entite):
- """
- Fonction speciale pour les nuplets (classe NUPL)
- Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
- qui est une liste vide.
- """
- entite.ordre_mc=[]
+ """
+ Fonction speciale pour les nuplets (classe NUPL)
+ Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
+ qui est une liste vide.
+ """
+ entite.ordre_mc=[]
def traiteEntite(entite,liste_simp_reel):
- """
- Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
- qui est une liste contenant le nom des sous entites dans l'ordre
- de leur apparition dans le catalogue.
- L'ordre d'apparition dans le catalogue est donne par l'attribut _no
- de l'entite
- La fonction active le meme type de traitement pour les sous entites
- de entite
- """
- l=[]
- for k,v in list(entite.entites.items()):
- if isinstance(v,NUPL):
- traiteEntiteNUPL(v)
- else:
- traiteReel(v,liste_simp_reel)
- traiteEntite(v,liste_simp_reel)
- traiteCache(v)
- l.append((v._no,k))
- l.sort()
- entite.ordre_mc=[ item for index, item in l ]
+ """
+ Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
+ qui est une liste contenant le nom des sous entites dans l'ordre
+ de leur apparition dans le catalogue.
+ L'ordre d'apparition dans le catalogue est donne par l'attribut _no
+ de l'entite
+ La fonction active le meme type de traitement pour les sous entites
+ de entite
+ """
+ l=[]
+ for k,v in list(entite.entites.items()):
+ if isinstance(v,NUPL):
+ traiteEntiteNUPL(v)
+ else:
+ traiteReel(v,liste_simp_reel)
+ traiteEntite(v,liste_simp_reel)
+ traiteCache(v)
+ l.append((v._no,k))
+ l.sort()
+ entite.ordre_mc=[ item for index, item in l ]
def traiteCache(objet):
if not hasattr(objet, "cache"): return
clef=objet.nom
if objet.equiv != None : clef=objet.equiv
if hasattr(objet.pere,"mcOblig"):
- objet.pere.mcOblig[clef]=objet.defaut
+ objet.pere.mcOblig[clef]=objet.defaut
else :
- objet.pere.mcOblig={}
- objet.pere.mcOblig[clef]=objet.defaut
+ objet.pere.mcOblig={}
+ objet.pere.mcOblig[clef]=objet.defaut
def traiteReel(objet,liste_simp_reel):
if objet.__class__.__name__ == "SIMP":
- if ( 'R' in objet.type):
- if objet.nom not in liste_simp_reel :
- liste_simp_reel.append(objet.nom)
+ if ( 'R' in objet.type):
+ if objet.nom not in liste_simp_reel :
+ liste_simp_reel.append(objet.nom)
def analyseNiveau(cata_ordonne_dico,niveau,liste_simp_reel):
- """
- Analyse un niveau dans un catalogue de commandes
- """
- if niveau.l_niveaux == ():
- # Il n'y a pas de sous niveaux
- for oper in niveau.entites:
- traiteEntite(oper,liste_simp_reel)
- cata_ordonne_dico[oper.nom]=oper
- else:
- for niv in niveau.l_niveaux:
- analyseNiveau(cata_ordonne_dico,niv)
-
+ """
+ Analyse un niveau dans un catalogue de commandes
+ """
+ if niveau.l_niveaux == ():
+ # Il n'y a pas de sous niveaux
+ for oper in niveau.entites:
+ traiteEntite(oper,liste_simp_reel)
+ cata_ordonne_dico[oper.nom]=oper
+ else:
+ for niv in niveau.l_niveaux:
+ analyseNiveau(cata_ordonne_dico,niv)
+
def analyseCatalogue(cata):
- """
- Cette fonction analyse le catalogue cata pour construire avec l'aide
- de traiteEntite la structure de donnees ordre_mc qui donne l'ordre
- d'apparition des mots cles dans le catalogue
- Elle retourne un dictionnaire qui contient toutes les commandes
- du catalogue indexees par leur nom
- """
- cata_ordonne_dico={}
- liste_simp_reel=[]
- if cata.JdC.l_niveaux == ():
- # Il n'y a pas de niveaux
- for oper in cata.JdC.commandes:
- traiteEntite(oper,liste_simp_reel)
- cata_ordonne_dico[oper.nom]=oper
- else:
- for niv in cata.JdC.l_niveaux:
- analyseNiveau(cata_ordonne_dico,niv,liste_simp_reel)
- return cata_ordonne_dico,liste_simp_reel
+ """
+ Cette fonction analyse le catalogue cata pour construire avec l'aide
+ de traiteEntite la structure de donnees ordre_mc qui donne l'ordre
+ d'apparition des mots cles dans le catalogue
+ Elle retourne un dictionnaire qui contient toutes les commandes
+ du catalogue indexees par leur nom
+ """
+ cata_ordonne_dico={}
+ liste_simp_reel=[]
+ if cata.JdC.l_niveaux == ():
+ # Il n'y a pas de niveaux
+ for oper in cata.JdC.commandes:
+ traiteEntite(oper,liste_simp_reel)
+ cata_ordonne_dico[oper.nom]=oper
+ else:
+ for niv in cata.JdC.l_niveaux:
+ analyseNiveau(cata_ordonne_dico,niv,liste_simp_reel)
+ return cata_ordonne_dico,liste_simp_reel
if __name__ == "__main__" :
- from Cata import cata_STA6
- dico=analyseCatalogue(cata_STA6)
- #import cata_saturne
- #dico=analyseCatalogue(cata_saturne)
+ from Cata import cata_STA6
+ dico=analyseCatalogue(cata_STA6)
+ #import cata_saturne
+ #dico=analyseCatalogue(cata_saturne)
- def print_entite(entite,dec=' '):
- print (dec,entite.nom,entite.__class__.__name__)
- for mocle in entite.ordre_mc:
- print_entite(entite.entites[mocle],dec=dec+' ')
+ def print_entite(entite,dec=' '):
+ print (dec,entite.nom,entite.__class__.__name__)
+ for mocle in entite.ordre_mc:
+ print_entite(entite.entites[mocle],dec=dec+' ')
- for k,v in list(dico.items()):
- print_entite(v,dec='')
+ for k,v in list(dico.items()):
+ print_entite(v,dec='')
- print (dico)
+ print (dico)
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
try :
- from builtins import object
+ from builtins import object
except : pass
class STYLE(object):
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import sys,os
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..'))
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../InterfaceQT4'))
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ")
-
+
class CatalogueXML(object):
- def __init__(self,cata,cataName):
- self.fichier="/tmp/XML/"+cataName+".xml"
- self.cata=cata
- self.first=ET.Element('cata')
- comment=ET.Comment("catalogue "+str(cataName))
- self.first.append(comment)
- self.reglesUtilisees=[]
- self.validatorsUtilises=[]
- self.constrListTxtCmd()
- self.ecrire_fichier()
-
-
- def ecrire_fichier(self):
- try :
- import codecs
- f = codecs.open(self.fichier, "w", "ISO-8859-1")
- #print prettify(self.first)
- f.write(prettify(self.first))
- f.close()
- except :
- print(("Impossible d'ecrire le fichier : "+ str(self.fichier)))
-
- def constrListTxtCmd(self):
- mesCommandes=self.cata.JdC.commandes
- self.commandes=ET.SubElement(self.first,'commandes')
- for maCommande in mesCommandes:
- maCommande.enregistreXMLStructure(self.commandes,self)
+ def __init__(self,cata,cataName):
+ self.fichier="/tmp/XML/"+cataName+".xml"
+ self.cata=cata
+ self.first=ET.Element('cata')
+ comment=ET.Comment("catalogue "+str(cataName))
+ self.first.append(comment)
+ self.reglesUtilisees=[]
+ self.validatorsUtilises=[]
+ self.constrListTxtCmd()
+ self.ecrire_fichier()
+
+
+ def ecrire_fichier(self):
+ try :
+ import codecs
+ f = codecs.open(self.fichier, "w", "ISO-8859-1")
+ #print prettify(self.first)
+ f.write(prettify(self.first))
+ f.close()
+ except :
+ print(("Impossible d'ecrire le fichier : "+ str(self.fichier)))
+
+ def constrListTxtCmd(self):
+ mesCommandes=self.cata.JdC.commandes
+ self.commandes=ET.SubElement(self.first,'commandes')
+ for maCommande in mesCommandes:
+ maCommande.enregistreXMLStructure(self.commandes,self)
if __name__ == "__main__" :
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py"
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- code="Aster"
- version=None
-
- from Editeur import session
- options=session.parse(sys.argv)
- if options.code!= None : code=options.code
- if options.cata!= None : monCata=options.cata
- if options.ssCode!= None : ssCode=options.ssCode
-
- sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code))
-
- from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm
- Eficas=appliEficasSSIhm(code=code)
- parent=QWParentSSIhm(code,Eficas,version)
-
- import readercata
- monreadercata = readercata.READERCATA( parent, parent )
- Eficas.readercata=monreadercata
- monCata=monreadercata.cata
-
- monCataXML=CatalogueXML(monCata,code)
-
-
-
-
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py"
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ code="Aster"
+ version=None
+
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if options.code!= None : code=options.code
+ if options.cata!= None : monCata=options.cata
+ if options.ssCode!= None : ssCode=options.ssCode
+
+ sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code))
+
+ from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm
+ Eficas=appliEficasSSIhm(code=code)
+ parent=QWParentSSIhm(code,Eficas,version)
+
+ import readercata
+ monreadercata = readercata.READERCATA( parent, parent )
+ Eficas.readercata=monreadercata
+ monCata=monreadercata.cata
+
+ monCataXML=CatalogueXML(monCata,code)
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
try :
- from builtins import object
+ from builtins import object
except : pass
class CatalogDescription(object):
-
+
def __init__(self, labelCode, fichierCata, formatFichierOut = "python", formatFichierIn='python',
- default = False, code = None,ss_code=None,):
+ default = False, code = None,ssCode=None, selectable = True, userName=None):
"""
This class can be used to describe an Eficas catalog.
:type labelCode: string
:param labelCode: unique labelCode for the catalog
-
+
:type fichierCata: string
:param fichierCata: path of the file containing the catalog itself
-
+
:type fileFormatOut: string
:param fileFormatOut: format of the files generated when using this catalog
-
+
:type default: boolean
:param default: indicate if this catalog is the default one (appear on the top of the catalogs list)
-
+
:type code: string
:param code: Used to indicate the code associated to this catalog
-
- :type ss_code: string
- :param ss_code: scheme associated to this catalog (Map only)
-
+ :type ssCode: string
+ :param ssCode: scheme associated to this catalog (Map only)
+
+ :type userName: string
+ :param userName: name of the catalog as it will appear in the list
+
+ :type selectable: boolean
+ :param selectable: indicate if this catalog appears in the list.
+ Setting this parameter to False is useful to keep
+ old catalogs to edit existing files but to forbid
+ to use them to create new files.
+
+
+
+
"""
self.labelCode = labelCode
self.fichierCata = fichierCata
self.formatFichierOut = formatFichierOut
- self.formatFichierIn = formatFichierIn
+ self.formatFichierIn = formatFichierIn
self.default = default
self.code = code
+ self.ssCode = ssCode
+ if userName is None:
+ self.userName = labelCode
+ else:
+ self.userName = userName
+ self.selectable = selectable
+
@staticmethod
def createFromTuple(cataTuple):
#print "Warning: Describing a catalog with a tuple is deprecated. " \
# "Please create a CatalogDescription instance directly."
+ if cataTuple[0] == 'TELEMAC':
+ desc = CatalogDescription(code = cataTuple[0],
+ ssCode = cataTuple[1],
+ labelCode = cataTuple[0]+cataTuple[1],
+ fichierCata = cataTuple[2],
+ formatFichierOut = cataTuple[3],
+ formatFichierIn = cataTuple[4])
+ return desc
if cataTuple[0] == 'MAP' :
- desc = CatalogDescription(code = cataTuple[0],
- labelCode = cataTuple[1],
- fichierCata = cataTuple[2],
- ssCode = cataTuple[3],
- formatFichierOut = 'MAP',
- formatFichierIn = 'MAP')
+ desc = CatalogDescription(code = cataTuple[0],
+ labelCode = cataTuple[1],
+ fichierCata = cataTuple[2],
+ ssCode = cataTuple[3],
+ formatFichierOut = 'MAP',
+ formatFichierIn = 'MAP')
elif len(cataTuple) == 4:
- desc = CatalogDescription(code = cataTuple[0],
- labelCode = cataTuple[1],
- fichierCata = cataTuple[2],
- formatFichierOut = cataTuple[3],
- formatFichierIn = 'python')
- elif len(cataTuple) == 5 :
- desc = CatalogDescription(code = cataTuple[0],
- labelCode = cataTuple[1],
- fichierCata = cataTuple[2],
- formatFichierOut = cataTuple[3],
- formatFichierIn = cataTuple[4])
- elif len(cataTuple) == 6 :
- desc = CatalogDescription(code = cataTuple[0],
- labelCode = cataTuple[1],
- fichierCata = cataTuple[2],
- formatFichierOut = cataTuple[3],
- formatFichierIn = cataTuple[4],
- defaut=cataTuple[5])
- else :
- print ('pb a la description du catalogue avec les donnees')
- print (cataTuple)
- desc=None
-
+ desc = CatalogDescription(code = cataTuple[0],
+ labelCode = cataTuple[1],
+ fichierCata = cataTuple[2],
+ formatFichierOut = cataTuple[3],
+ formatFichierIn = 'python')
+ elif len(cataTuple) == 5 :
+ desc = CatalogDescription(code = cataTuple[0],
+ labelCode = cataTuple[1],
+ fichierCata = cataTuple[2],
+ formatFichierOut = cataTuple[3],
+ formatFichierIn = cataTuple[4])
+ elif len(cataTuple) == 6 :
+ desc = CatalogDescription(code = cataTuple[0],
+ labelCode = cataTuple[1],
+ fichierCata = cataTuple[2],
+ formatFichierOut = cataTuple[3],
+ formatFichierIn = cataTuple[4],
+ defaut=cataTuple[5])
+ else :
+ print ('pb a la description du catalogue avec les donnees')
+ print (cataTuple)
+ desc=None
+
return desc
class ChercheInto:
- def __init__(self,cata,cataName):
- self.cata=cata
- self.dictInto={}
- mesCommandes=self.cata.JdC.commandes
- for maCommande in mesCommandes:
- self.construitListeInto(maCommande)
+ def __init__(self,cata,cataName):
+ self.cata=cata
+ self.dictInto={}
+ mesCommandes=self.cata.JdC.commandes
+ for maCommande in mesCommandes:
+ self.construitListeInto(maCommande)
- def construitListeInto(self,e):
- if isinstance(e,Accas.A_BLOC.BLOC) :
- print (e.condition)
- for nomFils, fils in e.entites.items():
- self.construitListeInto(fils)
+ def construitListeInto(self,e):
+ if isinstance(e,Accas.A_BLOC.BLOC) :
+ print (e.condition)
+ for nomFils, fils in e.entites.items():
+ self.construitListeInto(fils)
if __name__ == "__main__" :
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py"
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- code="Aster"
- version=None
-
- from Editeur import session
- options=session.parse(sys.argv)
- if options.code!= None : code=options.code
- if options.cata!= None : monCata=options.cata
- if options.ssCode!= None : ssCode=options.ssCode
-
- sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code))
-
- from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm
- Eficas=appliEficasSSIhm(code=code)
- parent=QWParentSSIhm(code,Eficas,version)
-
- import readercata
- monreadercata = readercata.READERCATA( parent, parent )
- Eficas.readercata=monreadercata
- monCata=monreadercata.cata
-
- monConstruitInto=ChercheInto(monCata,code)
-
-
-
-
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py"
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ code="Aster"
+ version=None
+
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if options.code!= None : code=options.code
+ if options.cata!= None : monCata=options.cata
+ if options.ssCode!= None : ssCode=options.ssCode
+
+ sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code))
+
+ from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm
+ Eficas=appliEficasSSIhm(code=code)
+ parent=QWParentSSIhm(code,Eficas,version)
+
+ import readercata
+ monreadercata = readercata.READERCATA( parent, parent )
+ Eficas.readercata=monreadercata
+ monCata=monreadercata.cata
+
+ monConstruitInto=ChercheInto(monCata,code)
class ChercheInto:
- def __init__(self,cata,cataName):
- self.cata=cata
- self.dictInto={}
- mesCommandes=self.cata.JdC.commandes
- for maCommande in mesCommandes:
- print (maCommande.nom)
- print (maCommande.entites )
- print (len(maCommande.entites) )
+ def __init__(self,cata,cataName):
+ self.cata=cata
+ self.dictInto={}
+ mesCommandes=self.cata.JdC.commandes
+ for maCommande in mesCommandes:
+ print (maCommande.nom)
+ print (maCommande.entites )
+ print (len(maCommande.entites) )
# def construitListeInto(self,e):
if __name__ == "__main__" :
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py"
- #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
- code="MAP"
- version=None
-
- from Editeur import session
- options=session.parse(sys.argv)
- if options.code!= None : code=options.code
- if options.cata!= None : monCata=options.cata
- if options.ssCode!= None : ssCode=options.ssCode
-
- sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code))
-
- from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm
- Eficas=appliEficasSSIhm(code=code)
- parent=QWParentSSIhm(code,Eficas,version)
-
- import readercata
- monreadercata = readercata.READERCATA( parent, parent )
- Eficas.readercata=monreadercata
- monCata=monreadercata.cata
-
- monConstruitInto=ChercheInto(monCata,code)
-
-
-
-
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py"
+ #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ monCata="/local/noyret/Install_Eficas/MAP/mapcata.py"
+ code="MAP"
+ version=None
+
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if options.code!= None : code=options.code
+ if options.cata!= None : monCata=options.cata
+ if options.ssCode!= None : ssCode=options.ssCode
+
+ sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code))
+
+ from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm
+ Eficas=appliEficasSSIhm(code=code)
+ parent=QWParentSSIhm(code,Eficas,version)
+
+ import readercata
+ monreadercata = readercata.READERCATA( parent, parent )
+ Eficas.readercata=monreadercata
+ monCata=monreadercata.cata
+
+ monConstruitInto=ChercheInto(monCata,code)
import os,glob,types
# Dictionnaire {object : item} permettant d'associer un item a un object
-# Ce dictionnaire est renseigne par la methode chargerComposants
+# Ce dictionnaire est renseigne par la methode chargerComposants
composants = {}
def chargerComposants(Ihm="QT"):
Cette classe item depend bien sur de la nature de object, d'ou
l'interrogation du dictionnaire composants
"""
- # Si la definition de l'objet a un attribut itemeditor, il indique
+ # Si la definition de l'objet a un attribut itemeditor, il indique
# la classe a utiliser pour l'item
try:
- return object.definition.itemeditor
+ return object.definition.itemeditor
except:
- pass
+ pass
# On cherche ensuite dans les composants (plugins)
try:
- itemtype= composants[object.__class__]
- return itemtype
+ itemtype= composants[object.__class__]
+ return itemtype
except:
- pass
+ pass
# Puis une eventuelle classe heritee (aleatoire car sans ordre)
for e in list(composants.keys()):
if e and isinstance(object,e):
- itemtype= composants[e]
- return itemtype
+ itemtype= composants[e]
+ return itemtype
# Si on n'a rien trouve dans les composants on utilise l'objet par defaut
itemtype=composants[None]
"""
c = gettreeitem(object)
return c(appliEficas,labeltext, object, setFunction)
-
standard12_gras_italique = ( "times",12,'bold','italic')
standardcourier10 = ("Courier",10)
-
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module realise toutes les mises a jour du chemin pour
+ Ce module realise toutes les mises a jour du chemin pour
les imports de modules Python
"""
from __future__ import absolute_import
# representant le code utilise (si fourni)
# Ensuite on utilise les packages de l'intallation
if hasattr(prefs_Code,'CODE_PATH'):
- if prefs_Code.CODE_PATH:
- sys.path[:0]=[prefs_Code.CODE_PATH]
- import Noyau,Validation
- del sys.path[0]
+ if prefs_Code.CODE_PATH:
+ sys.path[:0]=[prefs_Code.CODE_PATH]
+ import Noyau,Validation
+ del sys.path[0]
sys.path[:0]=[prefs_Code.INSTALLDIR]
import Accas
#
from __future__ import absolute_import
try :
- from builtins import object
+ from builtins import object
except : pass
import os
import re
sous_menus={
-# "OPENTURNS_STUDY" : {0:{"Essai":"Std.comm"}},
+# "OPENTURNS_STUDY" : {0:{"Essai":"Std.comm"}},
# "OPENTURNS_WRAPPER" : {0:{"Essai":"wrapper_exemple.comm"}},
}
class listePatrons(object) :
def __init__(self,code = "ASTER"):
- repIni=os.path.dirname(os.path.abspath(__file__))
- self.rep_patrons=repIni+"/Patrons/"+code
- self.sous_menu={}
- if code in sous_menus :
- self.sous_menu=sous_menus[code]
- self.code=code
- self.liste={}
- self.traiteListe()
+ repIni=os.path.dirname(os.path.abspath(__file__))
+ self.rep_patrons=repIni+"/Patrons/"+code
+ self.sous_menu={}
+ if code in sous_menus :
+ self.sous_menu=sous_menus[code]
+ self.code=code
+ self.liste={}
+ self.traiteListe()
def traiteListe(self):
if not (self.code in sous_menus) : return
clef=list(self.sous_menu[i].keys())[0]
chaine=self.sous_menu[i][clef]
if re.search(chaine,file) :
- if clef in self.liste:
- self.liste[clef].append(file)
- else :
- self.liste[clef]=[file]
- break
+ if clef in self.liste:
+ self.liste[clef].append(file)
+ else :
+ self.liste[clef]=[file]
+ break
qui demande a l'application d'ouvrir trois jeux de commandes.
-Le premier (aa) a un include (11,iii) et est la suite du fichier poursuite ppp
+Le premier (aa) a un include (11,iii) et est la suite du fichier poursuite ppp
qui a lui meme un include (22,ii).
Le deuxieme bb est un jeu de commandes simple.
qui est parse par le module Configparser.
Chaque section du fichier decrit un jeu de commandes.
Un include est specifie par: numero logique=nom du fichier
-Une poursuite est specifiee par: poursuite=reference a un jeu de commande
+Une poursuite est specifiee par: poursuite=reference a un jeu de commande
Cette reference correspond a un nom de section decrivant le jeu de commandes.
Le jeu de commandes maitre est donne par l'entree globale jdc dans la section jdc.
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except :
- pass
+ pass
try:
- import optparse
- from optparse import OptionValueError
+ import optparse
+ from optparse import OptionValueError
except:
- from Tools import optparse
- from Tools.optparse import OptionValueError
+ from Tools import optparse
+ from Tools.optparse import OptionValueError
import os,traceback
import six.moves.configparser
#
#
#
-# Les informations (dictionnaire) associees au fichier de commandes en cours de traitement
+# Les informations (dictionnaire) associees au fichier de commandes en cours de traitement
# sont stockees dans parser.values.current
# En general, il faut utiliser current et pas parser.values.studies car les informations
# sont stockees hierarchiquement
def checkComm(option, opt_str, value, parser):
if not hasattr(parser.values,"studies"):
- parser.values.studies=[]
- parser.values.comm=[]
+ parser.values.studies=[]
+ parser.values.comm=[]
if not os.path.isfile(value):
- raise OptionValueError(tr("le fichier de commandes %s n'existe pas", value))
+ raise OptionValueError(tr("le fichier de commandes %s n'existe pas", value))
parser.values.comm.append(value)
d_study={"comm":value}
parser.values.current=d_study
def checkPoursuite(option, opt_str, value, parser):
if parser.values.comm is None:
- raise OptionValueError(tr("un fichier de commandes doit etre defini avant une poursuite %s", value))
+ raise OptionValueError(tr("un fichier de commandes doit etre defini avant une poursuite %s", value))
if not os.path.isfile(value):
- raise OptionValueError(tr("le fichier poursuite %s n'existe pas", value))
+ raise OptionValueError(tr("le fichier poursuite %s n'existe pas", value))
#current : fichier de commandes en cours de traitement (dictionnaire des infos)
comm=parser.values.current
d_study={"comm":value}
def checkInclude(option, opt_str, value, parser):
try:
- args=[int(parser.rargs[0]),parser.rargs[1]]
+ args=[int(parser.rargs[0]),parser.rargs[1]]
except:
- raise OptionValueError(tr("include mal defini %s", parser.rargs[0:2]))
+ raise OptionValueError(tr("include mal defini %s", parser.rargs[0:2]))
del parser.rargs[0]
del parser.rargs[0]
if parser.values.comm is None:
- raise OptionValueError(tr("un fichier de commandes doit etre defini avant un include %s", args))
+ raise OptionValueError(tr("un fichier de commandes doit etre defini avant un include %s", args))
if not os.path.isfile(args[1]):
- raise OptionValueError(tr("le fichier include %s n'existe pas", args[1]))
+ raise OptionValueError(tr("le fichier include %s n'existe pas", args[1]))
comm=parser.values.current
comm[args[0]]=args[1]
d_study={}
for o in config.options(jdc):
- if o == "poursuite":
- p=config.get(jdc,"poursuite")
-
- if not config.has_option(p,"comm"):
- raise OptionValueError(tr(" jdc %(v_1)s manque \
- fichier comm dans section %(v_2)s", \
- {'v_1': fich, 'v_2': p}))
- comm=config.get(p,"comm")
- if not os.path.isfile(comm):
- raise OptionValueError(tr("jdc %(v_1)s, le fichier\
- de commandes %(v_2)s n'existe pas", \
- {'v_1': fich, 'v_2': comm}))
-
- pours=checkJdc(config,p,parser,fich)
- pours["comm"]=comm
- d_study["pours"]=pours
- continue
-
- try:
- unit=int(o)
- # si le parametre est un entier, il s'agit d'un include
- inc=config.get(jdc,o)
- except EficasException:
- continue
- if not os.path.isfile(inc):
- raise OptionValueError(tr(" jdc %(v_1)s \
- fichier include %(v_2)s, %(v_3)s \
- n'existe pas", \
- {'v_1': fich, 'v_2': unit, 'v_3': inc}))
- d_study[unit]=inc
+ if o == "poursuite":
+ p=config.get(jdc,"poursuite")
+
+ if not config.has_option(p,"comm"):
+ raise OptionValueError(tr(" jdc %(v_1)s manque \
+ fichier comm dans section %(v_2)s", \
+ {'v_1': fich, 'v_2': p}))
+ comm=config.get(p,"comm")
+ if not os.path.isfile(comm):
+ raise OptionValueError(tr("jdc %(v_1)s, le fichier\
+ de commandes %(v_2)s n'existe pas", \
+ {'v_1': fich, 'v_2': comm}))
+
+ pours=checkJdc(config,p,parser,fich)
+ pours["comm"]=comm
+ d_study["pours"]=pours
+ continue
+
+ try:
+ unit=int(o)
+ # si le parametre est un entier, il s'agit d'un include
+ inc=config.get(jdc,o)
+ except EficasException:
+ continue
+ if not os.path.isfile(inc):
+ raise OptionValueError(tr(" jdc %(v_1)s \
+ fichier include %(v_2)s, %(v_3)s \
+ n'existe pas", \
+ {'v_1': fich, 'v_2': unit, 'v_3': inc}))
+ d_study[unit]=inc
return d_study
def checkFich(option, opt_str, fich, parser):
"""
Fonction : parse le fichier fich (format .ini)
-
+
option : option en cours de traitement
opt_str : chaine de caracteres utilisee par l'utilisateur
fich : nom du fichier .ini donne par l'utilisateur
parser : objet parseur des options de la ligne de commande
"""
if not os.path.isfile(fich):
- raise OptionValueError(tr(" le fichier jdc %s n'existe pas", str(fich)))
+ raise OptionValueError(tr(" le fichier jdc %s n'existe pas", str(fich)))
if parser.values.fich is None:
- parser.values.fich=[]
+ parser.values.fich=[]
parser.values.fich.append(fich)
if not hasattr(parser.values,"studies"):
- parser.values.studies=[]
- parser.values.comm=[]
- # Python 2 to 3
+ parser.values.studies=[]
+ parser.values.comm=[]
+ # Python 2 to 3
try :
- import ConfigParser
- config=ConfigParser.ConfigParser()
+ import ConfigParser
+ config=ConfigParser.ConfigParser()
except :
- import configparser
- config=configparser.configparser()
+ import configparser
+ config=configparser.configparser()
config.read([fich])
if not config.has_option(u"jdc","jdc"):
- raise OptionValueError(tr(" jdc %s manque option jdc dans section jdc", str(fich)))
+ raise OptionValueError(tr(" jdc %s manque option jdc dans section jdc", str(fich)))
jdc=config.get(u"jdc","jdc")
if not config.has_option(jdc,"comm"):
- raise OptionValueError(tr(" jdc %(v_1)s manque fichier comm \
- dans section %(v_2)s", {'v_1': fich, 'v_2': jdc}))
+ raise OptionValueError(tr(" jdc %(v_1)s manque fichier comm \
+ dans section %(v_2)s", {'v_1': fich, 'v_2': jdc}))
comm=config.get(jdc,"comm")
if not os.path.isfile(comm):
- raise OptionValueError(tr("jdc %(v_1)s, le fichier de commandes \
- %(v_2)s n'existe pas", {'v_1': fich, 'v_2': comm}))
+ raise OptionValueError(tr("jdc %(v_1)s, le fichier de commandes \
+ %(v_2)s n'existe pas", {'v_1': fich, 'v_2': comm}))
parser.values.comm.append(comm)
d_study=checkJdc(config,jdc,parser,fich)
def printPours(d_pours,dec=''):
# Les fichiers includes d'abord
for k,v in list(d_pours.items()):
- if k in (u"pours","comm"):continue
- print(( tr("%(v_1)s include %(v_2)s : %(v_3)s", {'v_1': str(dec), 'v_2': str(k), 'v_3': str(v)})))
+ if k in (u"pours","comm"):continue
+ print(( tr("%(v_1)s include %(v_2)s : %(v_3)s", {'v_1': str(dec), 'v_2': str(k), 'v_3': str(v)})))
if "pours" in d_pours:
- # Description de la poursuite
- print((tr("%(v_1)s fichier poursuite: %(v_2)s", {'v_1': dec, 'v_2': d_pours["pours"]["comm"]})))
- printPours(d_pours["pours"],dec=dec+"++")
+ # Description de la poursuite
+ print((tr("%(v_1)s fichier poursuite: %(v_2)s", {'v_1': dec, 'v_2': d_pours["pours"]["comm"]})))
+ printPours(d_pours["pours"],dec=dec+"++")
def printDEnv():
if d_env.studies is None:return
for study in d_env.studies:
- print((tr("nom etude : %s", study["comm"])))
- printPours(study,dec="++")
+ print((tr("nom etude : %s", study["comm"])))
+ printPours(study,dec="++")
def createparser():
# creation du parser des options de la ligne de commande
action="callback", callback=checkPoursuite,
help=tr("nom du fichier poursuite"))
- parser.add_option(u"-i","--include",
+ parser.add_option(u"-i","--include",
action="callback", callback=checkInclude,
nargs=2, help=tr("numero d'unite suivi du nom du fichier include"))
parser.add_option(u"-c","--cata", action="store", type="string",dest="fichierCata",
help=tr("catalogue a utiliser"))
+ parser.add_option(u"-o","--fichierXMLOut", action="store", type="string",dest="fichierXMLOut",
+ help=tr("nom du fichier xml genere"))
+
parser.add_option(u"-v","--label", action="store", type="string",dest="labelCode",
help=tr("version de catalogue a utiliser"))
parser=createparser()
(options,args)=parser.parse_args(args[1:])
if not hasattr(options,"studies"):
- options.studies=[]
- options.comm=[]
+ options.studies=[]
+ options.comm=[]
if not hasattr(options,"fichierCata"): options.fichierCata=None
if not hasattr(options,"labelCode"): options.labelCode=None
+ if not hasattr(options,"fichierXMLOut"): options.fichierXMLOut=None
if options.withXSD :
- try : import pyxb
- except : print ('Please, source pyxb environment'); exit()
+ try : import pyxb
+ except : print ('Please, source pyxb environment'); exit()
try:
- del parser.values.current
+ del parser.values.current
except:
- pass
+ pass
for file in args:
- if os.path.isfile(file):
+ if os.path.isfile(file):
options.comm.append(file)
options.studies.append({"comm":file})
#print options.studies
- elif len(args)==1 and (re.search('.comm',file) or re.search('.map',file) or re.search('.cas',file) or re.search('.xml',file)):
+ elif len(args)==1 and (re.search('.comm',file) or re.search('.map',file) or re.search('.cas',file) or re.search('.xml',file)):
try :
f=open(file,'w')
f.close()
parser.error(tr("Nombre incorrect d'arguments"))
options.comm.append(file)
options.studies.append({"comm":file})
- elif len(args) == 1 and options.locale:
- print((tr("Localisation specifiee pour l'application.")))
- else:
+ elif len(args) == 2 :
+ if options.locale:
+ print((tr("Localisation specifiee pour l'application.")))
+ else:
+ parser.error(tr("Nombre incorrect d'arguments"))
+ else:
parser.error(tr("Nombre incorrect d'arguments"))
global d_env
[None : nom_fichier, texte_source, unites_associees, # poursuite
numero_include : nom_fichier, texte_source, unites_associees, # include
- ...]
+ ...]
d_study : dictionnaire de l'etude
appliEficas : objet application EFICAS (permet d'acceder aux services comme getSource)
def getDunit(d_unit,appliEficas):
d={}
if 'pours' in d_unit:
- # on a une poursuite
- comm=d_unit["pours"]["comm"]
- g=getDunit(d_unit["pours"],appliEficas)
- text=appliEficas.getSource(comm)
- d[None]=comm,text,g
+ # on a une poursuite
+ comm=d_unit["pours"]["comm"]
+ g=getDunit(d_unit["pours"],appliEficas)
+ text=appliEficas.getSource(comm)
+ d[None]=comm,text,g
for k,v in list(d_unit.items()):
- if k in (u"pours","comm"): continue
- text=appliEficas.getSource(v)
- d[k]=v,text,d
+ if k in (u"pours","comm"): continue
+ text=appliEficas.getSource(v)
+ d[k]=v,text,d
return d
inistylefile=os.path.join(prefsCode.repIni,"style.py")
if os.path.isfile(inistylefile):
- exec(compile(open(inistylefile).read(), inistylefile, 'exec'))
+ exec(compile(open(inistylefile).read(), inistylefile, 'exec'))
import fontes
for attr in dir(style):
- if attr[0]=='_':continue
- if not hasattr(fontes,attr):continue
- setattr(fontes,attr,getattr(style,attr))
-
-
+ if attr[0]=='_':continue
+ if not hasattr(fontes,attr):continue
+ setattr(fontes,attr,getattr(style,attr))
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module sert a construire les structures de donnees porteuses
+ Ce module sert a construire les structures de donnees porteuses
des informations liees aux groupes de commandes
"""
from __future__ import absolute_import
import types
class UIINFO:
- """
- Pour le moment la classe UIINFO ne sait traiter que des infos
- portant sur la definition des groupes de commandes
- Les autres informations sont ignorees
- """
- def __init__(self,parent,groupes=None,**args):
- """
- Initialiseur de la classe UIINFO.
- Initialise a partir du dictionnaire UIinfo passe a
- un objet ENTITE les attributs de la classe
- """
- # L'attribut parent stocke le lien vers l'objet ENTITE relie a UIINFO
- self.parent=parent
- self.groupes=groupes
- if groupes == None:
- # L'entite n'a pas de groupe associe. On lui associe le groupe "DEFAUT"
- self.groupes=("DEFAUT",)
- if type(self.groupes) != tuple:
- self.groupes=(self.groupes,)
+ """
+ Pour le moment la classe UIINFO ne sait traiter que des infos
+ portant sur la definition des groupes de commandes
+ Les autres informations sont ignorees
+ """
+ def __init__(self,parent,groupes=None,**args):
+ """
+ Initialiseur de la classe UIINFO.
+ Initialise a partir du dictionnaire UIinfo passe a
+ un objet ENTITE les attributs de la classe
+ """
+ # L'attribut parent stocke le lien vers l'objet ENTITE relie a UIINFO
+ self.parent=parent
+ self.groupes=groupes
+ if groupes == None:
+ # L'entite n'a pas de groupe associe. On lui associe le groupe "DEFAUT"
+ self.groupes=("DEFAUT",)
+ if type(self.groupes) != tuple:
+ self.groupes=(self.groupes,)
def traiteCommande(commande,niveau):
"""
niveau.dict_groupes[grp].append(commande.nom)
def traiteNiveau(niveau):
- if niveau.l_niveaux == ():
- # Il n'y a pas de sous niveaux. niveau.entites ne contient que des commandes
- niveau.dict_groupes={}
- for oper in niveau.entites:
- traiteCommande(oper,niveau)
- # A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
- # sans doublon
- niveau.liste_groupes=list(niveau.dict_groupes.keys())
- # On ordonne les listes alphabetiquement
- niveau.liste_groupes.sort()
- for v in niveau.dict_groupes.values():v.sort()
- #print niveau.liste_groupes
- #print niveau.dict_groupes
- else:
- for niv in niveau.l_niveaux:
- traiteNiveau(niv)
+ if niveau.l_niveaux == ():
+ # Il n'y a pas de sous niveaux. niveau.entites ne contient que des commandes
+ niveau.dict_groupes={}
+ for oper in niveau.entites:
+ traiteCommande(oper,niveau)
+ # A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
+ # sans doublon
+ niveau.liste_groupes=list(niveau.dict_groupes.keys())
+ # On ordonne les listes alphabetiquement
+ niveau.liste_groupes.sort()
+ for v in niveau.dict_groupes.values():v.sort()
+ #print niveau.liste_groupes
+ #print niveau.dict_groupes
+ else:
+ for niv in niveau.l_niveaux:
+ traiteNiveau(niv)
def traite_UIinfo(cata):
- """
- Cette fonction parcourt la liste des commandes d'un catalogue (cata)
- construit les objets UIINFO a partir de l'attribut UIinfo de la commande
- et construit la liste complete de tous les groupes presents
- """
- #dict_groupes["CACHE"]=[]
- #XXX Ne doit pas marcher avec les niveaux
- if cata.JdC.l_niveaux == ():
- # Il n'y a pas de niveaux
- # On stocke la liste des groupes et leur contenu dans le JdC
- # dans les attributs liste_groupes et dict_groupes
- cata.JdC.dict_groupes={}
- for commande in cata.JdC.commandes:
- traiteCommande(commande,cata.JdC)
- # A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
- # sans doublon
- cata.JdC.liste_groupes=list(cata.JdC.dict_groupes.keys())
- # On ordonne les listes alphabetiquement
- cata.JdC.liste_groupes.sort()
- for v in cata.JdC.dict_groupes.values():v.sort()
- #print cata.JdC.liste_groupes
- #print cata.JdC.dict_groupes
- else:
- # Le catalogue de commandes contient des definitions de niveau
- for niv in cata.JdC.l_niveaux:
- traiteNiveau(niv)
-
-
-
+ """
+ Cette fonction parcourt la liste des commandes d'un catalogue (cata)
+ construit les objets UIINFO a partir de l'attribut UIinfo de la commande
+ et construit la liste complete de tous les groupes presents
+ """
+ #dict_groupes["CACHE"]=[]
+ #XXX Ne doit pas marcher avec les niveaux
+ if cata.JdC.l_niveaux == ():
+ # Il n'y a pas de niveaux
+ # On stocke la liste des groupes et leur contenu dans le JdC
+ # dans les attributs liste_groupes et dict_groupes
+ cata.JdC.dict_groupes={}
+ for commande in cata.JdC.commandes:
+ traiteCommande(commande,cata.JdC)
+ # A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
+ # sans doublon
+ cata.JdC.liste_groupes=list(cata.JdC.dict_groupes.keys())
+ # On ordonne les listes alphabetiquement
+ cata.JdC.liste_groupes.sort()
+ for v in cata.JdC.dict_groupes.values():v.sort()
+ #print cata.JdC.liste_groupes
+ #print cata.JdC.dict_groupes
+ else:
+ # Le catalogue de commandes contient des definitions de niveau
+ for niv in cata.JdC.l_niveaux:
+ traiteNiveau(niv)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# cette version ne fonctionne pas bien
+# Copyright (C) 2007-2021 EDF R&D
+#
+# 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.
+#
+# 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
+#
import sys,os
from copy import deepcopy, copy
import traceback
-
# CONTEXT est accessible (__init__.py de Noyau)
#import raw.efficas as efficas
PourTraduction = False
from .balisesXSD import *
+
# -----------------
class X_definition:
# -----------------
-
- def adjoint(self, liste1, liste2):
- #print ('adjoint', liste1, liste2)
- l=[]
- for elt1 in liste1:
- for elt2 in liste2:
- newListe=deepcopy(elt1)
- if elt2 != []: newListe.append(elt2)
- l.append(newListe)
- return l
-
- def adjointUnMot(self, liste1, mot):
- l=[]
- for elt1 in liste1:
- newListe=deepcopy(elt1)
- newListe.append(mot)
- l.append(newListe)
- return l
-
- def remplaceListeParContenuEtVide(self, liste1, liste2):
- listeFinale=[]
- for elt1 in liste1 :
- for eltListe in liste2:
- newListe=deepcopy(elt1)
- if eltListe!=[] :newListe+=eltListe
- if newListe not in listeFinale : listeFinale.append(newListe)
- return listeFinale
-
- #def remplaceNomListeParContenu(self, liste1, liste2):
- #print ('remplaceNomListeParContenu', liste1, liste2)
- # listeFinale=[]
- # for elt1 in liste1 :
- # for eltListe in liste2:
- # if eltListe == [] : continue
- # newListe=deepcopy(elt1)
- # if eltListe!=[] :newListe+=eltListe
- # listeFinale.append(newListe)
- #print ('listeFinale', listeFinale)
- # return listeFinale
-
- def fusionne2Listes(self, liste1, liste2):
- #print ('fusionne2Liste', liste1, liste2)
- listeFinale=[]
- for elt1 in liste1 :
- for eltListe in liste2:
- newListe=deepcopy(elt1)
- if eltListe!=[] :newListe.append(eltListe)
- listeFinale.append(newListe)
- #print (listeFinale)
- return listeFinale
-
- def getNomDuCodeDumpe(self):
- if hasattr(self,'nomDuCodeDumpe') : return
- obj=self
- while ( not hasattr(obj,'nomDuCodeDumpe') ): obj=obj.pere
- self.nomDuCodeDumpe = obj.nomDuCodeDumpe
- self.code=obj.code
-
- def getXPathComplet(self):
- obj=self
- textePath='/'+self.code+":"+self.nom
- while ( hasattr(obj,'pere') ):
- obj=obj.pere
- if isinstance(obj, X_BLOC) : continue
- textePath= '/'+ self.code + ":" + obj.nom + textePath
- textePath='.' + textePath
- return textePath
-
- def getXPathSansSelf(self):
- obj=self
- textePath=''
- while ( hasattr(obj,'pere') ):
- obj=obj.pere
- if isinstance(obj, X_BLOC) : continue
- textePath= self.code + ":" + obj.nom + '/' + textePath
- textePath='./'+ self.code + ":" + textePath
- return textePath
-
- def getNomCompletAvecBloc(self):
- obj=self
- texteNom=self.nom
- while ( hasattr(obj,'pere') ):
- texteNom=obj.pere.nom+'_'+texteNom
- obj=obj.pere
- return texteNom
-
-
- def definitNomDuTypePyxb(self,forceACreer=False):
- if hasattr(self,'nomDuTypePyxb') :
- self.aCreer = False
- return self.nomDuTypePyxb
- self.aCreer = True
- cata = CONTEXT.getCurrentCata()
- nom='T_'+self.nom
- if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML
- if not (nom in cata.dictTypesXSD.keys()) :
- cata.dictTypesXSD[nom] = [self,]
- self.nomDuTypePyxb=nom
- return nom
- self.aCreer = False
- if nom == 'T_Consigne' : return nom
-
- listePossible=cata.dictTypesXSD[nom]
- indice=0
- while (indice < len(listePossible)) :
- objAComparer=listePossible[indice]
- if self.compare(objAComparer) :
- self.nomDuTypePyxb=objAComparer.nomDuTypePyxb
- return objAComparer.nomDuTypePyxb
- indice += 1
- self.aCreer = True
- cata.dictTypesXSD[nom].append(self)
- nomAlter='T_'+self.nom+'_'+str(indice)
- if (hasattr (self, 'nomXML')) and self.nomXML != None :
- nomAlter='T_'+self.nomXML+'_'+str(indice)
- self.nomDuTypePyxb=nomAlter
- #traceback.print_stack()
- return nomAlter
+ def adjoint(self, liste1, liste2):
+ #print ('adjoint', liste1, liste2)
+ l=[]
+ for elt1 in liste1:
+ for elt2 in liste2:
+ newListe=deepcopy(elt1)
+ if elt2 != []: newListe.append(elt2)
+ l.append(newListe)
+ return l
+
+ def adjointUnMot(self, liste1, mot):
+ l=[]
+ for elt1 in liste1:
+ newListe=deepcopy(elt1)
+ newListe.append(mot)
+ l.append(newListe)
+ return l
+
+ def remplaceListeParContenuEtVide(self, liste1, liste2):
+ listeFinale=[]
+ for elt1 in liste1 :
+ for eltListe in liste2:
+ newListe=deepcopy(elt1)
+ if eltListe!=[] :newListe+=eltListe
+ if newListe not in listeFinale : listeFinale.append(newListe)
+ return listeFinale
+
+
+ def fusionne2Listes(self, liste1, liste2):
+ #print ('fusionne2Liste', liste1, liste2)
+ listeFinale=[]
+ for elt1 in liste1 :
+ for eltListe in liste2:
+ newListe=deepcopy(elt1)
+ if eltListe!=[] :newListe.append(eltListe)
+ listeFinale.append(newListe)
+ #print (listeFinale)
+ return listeFinale
+
+ def getNomDuCodeDumpe(self):
+ if hasattr(self,'nomDuCodeDumpe') : return
+ obj=self
+ while ( not hasattr(obj,'nomDuCodeDumpe') ): obj=obj.pere
+ self.nomDuCodeDumpe = obj.nomDuCodeDumpe
+ self.code=obj.code
+
+ def getXPathComplet(self):
+ obj=self
+ textePath='/'+self.code+":"+self.nom
+ while ( hasattr(obj,'pere') ):
+ obj=obj.pere
+ if isinstance(obj, X_BLOC) : continue
+ textePath= '/'+ self.code + ":" + obj.nom + textePath
+ textePath='.' + textePath
+ return textePath
+
+ def getXPathSansSelf(self):
+ obj=self
+ textePath=''
+ while ( hasattr(obj,'pere') ):
+ obj=obj.pere
+ if isinstance(obj, X_BLOC) : continue
+ textePath= self.code + ":" + obj.nom + '/' + textePath
+ textePath='./'+ self.code + ":" + textePath
+ return textePath
+
+ def getNomCompletAvecBloc(self):
+ obj=self
+ texteNom=self.nom
+ while ( hasattr(obj,'pere') ):
+ texteNom=obj.pere.nom+'_'+texteNom
+ obj=obj.pere
+ return texteNom
+
+ def metAJourPyxb(self,nomDuTypePyxb) :
+ self.aCreer=False
+ self.nomDuTypePyxb=nomDuTypePyxb
+ cata = CONTEXT.getCurrentCata()
+ nom='T_'+self.nom
+ if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML
+ if not (nom in cata.dictTypesXSD.keys()) :
+ cata.dictTypesXSD[nom] = [self,]
+ else :
+ cata.dictTypesXSD[nom].append(self)
+
+ def definitNomDuTypePyxb(self,forceACreer=False,debug=False):
+ #if self.nom == 'SubgridScaleModel' : debug=True
+ #print ('definitNomDuTypePyxb', self, self.nom,self.nomComplet(),forceACreer)
+ #PNPN
+ if hasattr(self,'nomDuTypePyxb') : self.aCreer = False; return self.nomDuTypePyxb
+ #debug=False
+ if debug : print ('definitNomDuTypePyxb traitement pour ', self.nom)
+ self.aCreer = True
+ cata = CONTEXT.getCurrentCata()
+ nom='T_'+self.nom
+ if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML
+ if not (nom in cata.dictTypesXSD.keys()) :
+ if debug : print ('definitNomDuTypePyxb encore jamais traite ', self.nom , ' a pour type' , nom)
+ cata.dictTypesXSD[nom] = [self,]
+ self.nomDuTypePyxb=nom
+ return nom
+
+ if nom == 'T_Consigne' : return nom
+
+ if not forceACreer :
+ self.aCreer = False
+ listePossible=cata.dictTypesXSD[nom]
+ indice=0
+ while (indice < len(listePossible)) :
+ objAComparer=listePossible[indice]
+ if debug : print (self.compare)
+ if self.compare(objAComparer) :
+ self.nomDuTypePyxb=objAComparer.nomDuTypePyxb
+ if debug : print (self, objAComparer)
+ if debug : print (type(self), type(objAComparer))
+ if debug : print ('definitNomDuTypePyxb', self.nom , 'type identique', objAComparer.nomDuTypePyxb )
+ # c est nul pour la comparaison mais cela permet d etre ok dans le dictionnaire passe a Accas
+ cata.dictTypesXSD[nom].append(self)
+ if self.label != 'SIMP' :
+ if objAComparer not in list(cata.dictTypesXSDJumeaux.keys()) : cata.dictTypesXSDJumeaux[objAComparer]=[self,]
+ else : cata.dictTypesXSDJumeaux[objAComparer].append(self)
+ return objAComparer.nomDuTypePyxb
+ indice += 1
+ self.aCreer = True
+ cata.dictTypesXSD[nom].append(self)
+ nomAlter='T_'+self.nom+'_'+str(indice)
+ if (hasattr (self, 'nomXML')) and self.nomXML != None :
+ nomAlter='T_'+self.nomXML+'_'+str(indice)
+ self.nomDuTypePyxb=nomAlter
+ return nomAlter
# ----------------------------------------
class X_compoFactoriseAmbigu(X_definition):
# ----------------------------------------
- def __init__(self,nom,listeDeCreation,pere):
- #print ('__ X_compoFactoriseAmbigu', listeDeCreation)
- #for (i,index) in listeDeCreation : print i.nom
- self.label = 'compoAmbigu'
- self.nom=nom
- self.pere=pere
- self.statut='f'
- self.entites={}
- self.mcXSD=[]
- self.ordre_mc=[]
- self.mcDejaDumpe=set()
- #print (listeDeCreation)
- for (mc, index) in listeDeCreation :
- self.mcXSD.append(mc)
- self.ordre_mc.append(mc.nom)
- #self.mcXSD=list(deepcopy(self.ordre_mc))
- #for i in self.entites : print (i,self.entites[i])
- #print ('creation de X_compoFactoriseAmbigu', self.nom, self.mcXSD)
- self.construitEntites(self.mcXSD)
- self.constructionArbrePossibles()
- lesPossibles=deepcopy(self.arbrePossibles)
-
- self.getNomDuCodeDumpe()
- self.nomDuTypePyxb = self.definitNomDuTypePyxb()
- self.texteSimple = ''
- self.texteComplexeVenantDesFils = ''
- self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb)
- # on enleve [] des possibles puisque l elt sera optionnel
- lesPossibles.remove([])
- #print ('________________ init de compoAmbigu',self.nom, lesPossibles)
- #print ('self.entites', self.entites)
- self.mcXSD=self.factoriseEtCreeDump(lesPossibles,nomAppel='Root')
- #print ('self.mcXSD',self.mcXSD)
- self.texteComplexe += finTypeSubstDsBlocFactorise
- self.texteComplexe +=self.texteComplexeVenantDesFils
- # PN ?? 12 mai self.texteComplexe=self.texteComplexe+self.texteComplexeVenantDesFils
- self.label='BlocAmbigu'
- #print ('fin pour prepareDumpXSD pour', self.nom)
-
- def compare(self,autreMC):
- if self.label != autreMC.label : return False
- if self.arbrePossibles== autreMC.arbrePossible : return True
- return False
-
- def construitEntites(self, laListe):
- for mc in laListe :
- if mc.nom in self.entites.keys() : self.entites[mc.nom].append(mc)
- else : self.entites[mc.nom] = [mc,]
- if mc.label == 'BLOC' or mc.label == 'BlocAmbigu':
- self.ajouteLesMCFilsAEntite(mc)
-
-
- def ajouteLesMCFilsAEntite(self,blocMc):
- for mcFilsNom in blocMc.entites.keys():
- if mcFilsNom not in self.entites.keys(): self.entites[mcFilsNom]=[]
- if blocMc.label == 'BlocAmbigu' :
- for mc in blocMc.entites[mcFilsNom] :
- self.entites[mcFilsNom].append(mc)
- if mc.label == 'BLOC' or mc.label == 'BlocAmbigu':
+ def __init__(self,nom,listeDeCreation,pere, debug=True):
+
+ if debug :
+ for i in listeDeCreation : print (i.nom)
+ self.label='BlocAmbigu'
+ self.nom=nom
+ self.pere=pere
+ self.statut='f'
+ self.entites={}
+ self.mcXSD=[]
+ self.typesXSDDejaDumpes=[]
+ self.ordre_mc=[]
+ self.lesConditions = 'Possible Conditions : '
+ for mc in listeDeCreation :
+ if hasattr(mc, 'condition'):self.lesConditions += '\n\t\t\t\t\t\t' + mc.condition
+ self.mcXSD.append(mc)
+ self.ordre_mc.append(mc.nom)
+
+ if debug : print (self.mcXSD)
+ if debug : print (self.ordre_mc)
+ self.construitEntites(self.mcXSD)
+ self.constructionArbrePossibles()
+ lesPossibles=deepcopy(self.arbrePossibles)
+ if debug : print ('lesPossibles ', lesPossibles)
+
+ self.getNomDuCodeDumpe()
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ if debug : print (self.nomDuTypePyxb)
+ self.texteSimple = ''
+ self.texteComplexeVenantDesFils = ''
+ self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb)
+ # on enleve [] des possibles puisque l elt sera optionnel
+ lesPossibles.remove([])
+ if debug : print ('________________ init de compoAmbigu',self.nom, lesPossibles)
+ if debug : print ('self.entites', self.entites)
+ self.mcXSD=self.factoriseEtCreeDump(lesPossibles,nomAppel='Root')
+ if debug : print ('self.mcXSD',self.mcXSD)
+ self.texteComplexe += finTypeSubstDsBlocFactorise
+ self.texteComplexe +=self.texteComplexeVenantDesFils
+ #print ('fin pour prepareDumpXSD pour', self.nom)
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ #PN : le bug est la
+ # arbre des possibles identiques mais les types different
+ # comment faire ?
+ #print (self.arbrePossibles)
+ #print (autreMC.arbrePossibles)
+ #if self.arbrePossibles== autreMC.arbrePossibles : return True
+ return False
+
+ def construitEntites(self, laListe):
+ for mc in laListe :
+ if mc.nom in self.entites.keys() : self.entites[mc.nom].append(mc)
+ else : self.entites[mc.nom] = [mc,]
+ if mc.label == 'BLOC' or mc.label == 'BlocAmbigu':
self.ajouteLesMCFilsAEntite(mc)
- else :
- self.entites[mcFilsNom].append(blocMc.entites[mcFilsNom])
- if blocMc.entites[mcFilsNom].label == 'BLOC' or blocMc.entites[mcFilsNom].label == 'BlocAmbigu':
- self.ajouteLesMCFilsAEntite(blocMc.entites[mcFilsNom])
-
-
-
-
- def constructionArbrePossibles(self):
- #print ('construction pour FACT ambigu _______________', self.nom)
- toutesLesLignes=[[]]
- for child in self.mcXSD :
- if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles()
- if child.label != 'BLOC' :
- toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, child.arbrePossibles))
- else :
- toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, [child.nom, []]))
-
- lignesAGarder=[]
- for ligne in toutesLesLignes:
- blocContenus=[]
- aAjouter=True
- for mc in ligne :
- objMC=self.entites[mc][0]
- if objMC.label == 'BLOC' :
- blocContenus.append(objMC)
- for b in blocContenus :
- for frere in blocContenus[blocContenus.index(b)+1:]:
- if b.isDisjoint(frere) : continue
- aAjouter=False
- break
- if not aAjouter : break
- if aAjouter and ligne not in lignesAGarder :
- lignesAGarder.append(ligne)
-
- #print ("______________________________________")
- #for l in lignesAGarder : print (l)
- #print (len(lignesAGarder))
- #print ("______________________________________")
- self.arbrePossibles=[]
- for ligne in lignesAGarder :
- #print ('lignesAGarder', ligne)
- for newLigne in self.deploye(ligne):
- #print (newLigne)
- if newLigne not in self.arbrePossibles : self.arbrePossibles.append(newLigne)
- #for l in self.arbrePossibles : print (l)
- #print ("______________________________________")
-
-
- def deploye (self, ligne):
- toutesLesLignes=[[]]
- for mc in ligne :
- #print ( 'mc in deploye', mc)
- objMC=self.entites[mc][0]
- #print ( 'nom', objMC.nom, objMC.label)
- if objMC.label == 'BLOC' or objMC.label == 'BlocAmbigu':
- toutesLesLignes = deepcopy(self.remplaceListeParContenuEtVide(toutesLesLignes, objMC.arbrePossibles))
- else :
- toutesLesLignes = deepcopy(self.adjointUnMot(toutesLesLignes,mc ))
- return toutesLesLignes
-
- def construitArbrePossibles(self):
- # inutile car on a deja l arbre mais appele parfois
- #print ('dans X_factCompoAmbigue ne fait rien', self.nom, self.arbrePossibles)
- pass
-
- def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
- # on ne fait rien, tout a ete fait dans le init
- self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1)
-
- def nomComplet(self) :
- print ('dans nomComplet pourquoi ?',self, self.nom)
-
- def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None):
- #print ('_______________________________ factoriseEtCreeDump')
- #print(self.nom, laListe, indent, nomAppel)
- maListeRetour=[]
- aReduire={}
-
- if [] in laListe :
- declencheChoiceAvecSeqVid=True
- while [] in laListe : laListe.remove([])
- #min=0
- else :
- declencheChoiceAvecSeqVid=False
- #min=1
-
-
- for ligne in laListe :
- if ligne[0] in aReduire.keys():
- if len(ligne) == 1 :aReduire[ligne[0]].append([])
- else : aReduire[ligne[0]].append(ligne[1:])
- else :
- if len(ligne) == 1 : aReduire[ligne[0]]=[[]]
- else : aReduire[ligne[0]]=[ligne[1:],]
+ def ajouteLesMCFilsAEntite(self,blocMc):
+ for mcFilsNom in blocMc.entites.keys():
+ if mcFilsNom == 'Consigne' or mcFilsNom == 'blocConsigne' : continue
+ if mcFilsNom not in self.entites.keys(): self.entites[mcFilsNom]=[]
+ if blocMc.label == 'BlocAmbigu' :
+ for mc in blocMc.entites[mcFilsNom] :
+ self.entites[mcFilsNom].append(mc)
+ if mc.label == 'BLOC' or mc.label == 'BlocAmbigu':
+ self.ajouteLesMCFilsAEntite(mc)
+ else :
+ self.entites[mcFilsNom].append(blocMc.entites[mcFilsNom])
+ if blocMc.entites[mcFilsNom].label == 'BLOC' or blocMc.entites[mcFilsNom].label == 'BlocAmbigu':
+ self.ajouteLesMCFilsAEntite(blocMc.entites[mcFilsNom])
+
+
+
+
+ def constructionArbrePossibles(self, debug = False):
+ if debug : print ('construction pour FACT ambigu _______________', self.nom)
+ toutesLesLignes=[[]]
+ for child in self.mcXSD :
+ if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles()
+ if child.label != 'BLOC' :
+ toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, child.arbrePossibles))
+ else :
+ toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, [child.nom, []]))
+
+ lignesAGarder=[]
+ for ligne in toutesLesLignes:
+ blocContenus=[]
+ aAjouter=True
+ for mc in ligne :
+ objMC=self.entites[mc][0]
+ if objMC.label == 'BLOC' :
+ blocContenus.append(objMC)
+ for b in blocContenus :
+ for frere in blocContenus[blocContenus.index(b)+1:]:
+ if b.isDisjoint(frere) : continue
+ aAjouter=False
+ break
+ if not aAjouter : break
+ if aAjouter and ligne not in lignesAGarder :
+ lignesAGarder.append(ligne)
+
+ #print ("______________________________________")
+ #for l in lignesAGarder : print (l)
+ #print (len(lignesAGarder))
+ #print ("______________________________________")
+ self.arbrePossibles=[]
+ for ligne in lignesAGarder :
+ #print ('lignesAGarder', ligne)
+ for newLigne in self.deploye(ligne):
+ #print (newLigne)
+ if newLigne not in self.arbrePossibles : self.arbrePossibles.append(newLigne)
+ #for l in self.arbrePossibles : print (l)
+ #print ("______________________________________")
+
+
+ def deploye (self, ligne):
+ toutesLesLignes=[[]]
+ for mc in ligne :
+ #print ( 'mc in deploye', mc)
+ objMC=self.entites[mc][0]
+ #print ( 'nom', objMC.nom, objMC.label)
+ if objMC.label == 'BLOC' or objMC.label == 'BlocAmbigu':
+ toutesLesLignes = deepcopy(self.remplaceListeParContenuEtVide(toutesLesLignes, objMC.arbrePossibles))
+ else :
+ toutesLesLignes = deepcopy(self.adjointUnMot(toutesLesLignes,mc ))
+ return toutesLesLignes
+
+ def construitArbrePossibles(self):
+ # inutile car on a deja l arbre mais appele parfois
+ #print ('dans X_factCompoAmbigu ne fait rien', self.nom, self.arbrePossibles)
+ pass
+
+ def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
+ # on ne fait rien, tout a ete fait dans le init
+ self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1, self.lesConditions)
+
+ def nomComplet(self) :
+ print ('dans nomComplet pourquoi ?',self, self.nom)
+
+
+ def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None, debug=False):
+ if debug : print ('_______________________________ factoriseEtCreeDump')
+ if debug : print(self.nom, laListe, indent, nomAppel)
+ maListeRetour=[]
+ aReduire={}
+
+ if [] in laListe :
+ declencheChoiceAvecSeqVid=True
+ while [] in laListe : laListe.remove([])
+ #min=0
+ else :
+ declencheChoiceAvecSeqVid=False
+ #min=1
+
+
+
+ for ligne in laListe :
+ if ligne[0] in aReduire.keys():
+ if len(ligne) == 1 :aReduire[ligne[0]].append([])
+ else : aReduire[ligne[0]].append(ligne[1:])
+ else :
+ if len(ligne) == 1 : aReduire[ligne[0]]=[[]]
+ else : aReduire[ligne[0]]=[ligne[1:],]
+
+
+ if debug : print ('la Liste', laListe, declencheChoiceAvecSeqVid)
+ if debug : print (aReduire)
+ if len(aReduire.keys()) == 1 :
+ if declencheChoiceAvecSeqVid == False :
+ creeChoice=False
+ creeSequence=True
+ self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
+ else :
+ creeChoice=True
+ creeSequence=False
+ # pour regler le souci du 1er Niveau
+ self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
+ #if min == 1 : self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
+ #else : self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1
+ else :
+ #self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1
+ self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
+ creeChoice=True
+ creeSequence=False
+
+ if debug : print ('creeSequence', creeSequence, aReduire)
+ for nomMC in aReduire.keys():
+ if debug : print (nomMC)
+ listeSuivante=aReduire[nomMC]
+ if creeChoice and listeSuivante != [[]] :
+ self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
+ self.ajouteAuxTextes(nomMC,indent)
+ if listeSuivante == [[]] : continue # Est-ce toujours vrai ?
+ if len(listeSuivante) == 1 : self.ajouteAuxTextes(listeSuivante[0],indent)
+ else : self.factoriseEtCreeDump(listeSuivante, indent+int(creeSequence),nomMC)
+ if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+
+ if declencheChoiceAvecSeqVid :
+ self.texteComplexe += '\t'*indent + debSequenceDsBloc
+ self.texteComplexe += '\t'*indent + finSequenceDsBloc
+ if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*indent + finChoiceDsBloc
+ if creeSequence : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+
+ #if doitFermerSequence : indent=indent-1;self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+ #print (self.texteSimple)
+ #print ('______',' self.texteComplexe')
+ #print (self.texteComplexe)
+ #print ('_____', 'self.texteComplexeVenantDesFils')
+ #print (self.texteComplexeVenantDesFils)
+ #print ('fin pour _______________________________', self.nom)
+ return (maListeRetour)
+
+
+ def ajouteAuxTextes(self,nomMC,indent,debug=False) :
+ if debug :
+ print ('______________________________________________________')
+ print ('ajouteAuxTextes', nomMC, self.nom)
+ # for i in self.entites.keys() : print (self.entites[i][0].nom)
+ if (indent > 3) : indent = indent - 3
+
+ # PN change le 17 fevrier . Est-ce normal d arriver la ?
+ # if faut traiter les Blocs exclusifs qui donnent des choices de sequences
+ # mais celles-ci risquent d etre ambigues
+ while (isinstance(nomMC,list)) :
+ nomMC=nomMC[0]
+
+ if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return
+ if debug : print (nomMC, 'dans ajoute vraiment aux textes', self.entites )
+ if len(self.entites[nomMC]) == 1:
+ mc=self.entites[nomMC][0]
+ mc.dumpXsd(dansFactorisation=True)
+ self.texteComplexe += '\t'*(indent) + mc.texteElt
+ if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe
+ if mc.aCreer : self.texteSimple += mc.texteSimple
+ if mc.aCreer : mc.aCreer=False
+ return
+
+ leType=type(self.entites[nomMC][0])
+ for e in (self.entites[nomMC][1:]) :
+ if type(e) != leType:
+ print ('Projection XSD impossible, changez un des ', nomMC)
+ exit()
+
+ # cette boucle ne fonctionne que pour des SIMP
+ resteATraiter=copy(self.entites[nomMC])
+ #print ('________resteATraiter', resteATraiter)
+ listePourUnion=[]
+ first=1
+ while resteATraiter != [] :
+ nvlListeATraiter=[]
+ mc=resteATraiter[0]
+ listePourUnion.append(mc)
+ for autre in resteATraiter[1:]:
+ if not (mc.compare(autre)) : nvlListeATraiter.append(autre)
+ resteATraiter=copy(nvlListeATraiter)
+
+ if len(listePourUnion) == 1:
+ mc=listePourUnion[0]
+ mc.dumpXsd(dansFactorisation=True,multiple=False,first=first)
+ self.texteComplexe += '\t'*(indent) + mc.texteElt
+ if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe
+ if mc.aCreer : self.texteSimple += mc.texteSimple
+ for mcIdent in self.entites[nomMC][1:]: mcIdent.metAJourPyxb(mc.nomDuTypePyxb)
+ if mc.aCreer : mc.aCreer=False
+ return
+
+ # on ajoute le nom de l element
+ if not (isinstance(self.entites[nomMC][0], Accas.SIMP)) :
+ sontTousDisjoint=True
+ index=1
+ if debug : print ('on cherche si ils sont disjoints : ',self.entites[nomMC])
+ for mc in self.entites[nomMC] :
+ if debug : print ('compare mc' , mc, ' avec :')
+ for mcFrere in self.entites[nomMC][index:]:
+ ok = mc.isDisjoint(mcFrere)
+ if not ok :
+ sontTousDisjoint=False
+ break
+ if not(sontTousDisjoint) : break
+ index+=1
+ if not sontTousDisjoint:
+ print ('2 blocs freres ont le meme nom et ne sont pas disjoints : pas encore traite')
+ print ('Projection XSD impossible, changez un des ', nomMC)
+ exit()
+ self.fusionneDsUnChoix(nomMC,indent)
+ if debug : print ('self.nom', self.nom)
+ if debug : print ('self.texteComplexe' , self.texteComplexe)
+ if debug : print ('self.texteSimple' , self.texteSimple)
+ if debug : print ('self.texteElt' , self.texteElt)
+ if debug : print ('________________________')
+ return
+
- if len(aReduire.keys()) == 1 :
- if declencheChoiceAvecSeqVid == False :
- creeChoice=False
- creeSequence=True
- self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
- else :
- creeChoice=True
- creeSequence=False
- # pour regler le souci du 1er Niveau
- self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
- #if min == 1 : self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
- #else : self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1
- else :
- #self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1
- self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
- creeChoice=True
- creeSequence=False
-
- for nomMC in aReduire.keys():
- listeSuivante=aReduire[nomMC]
- if creeChoice and listeSuivante != [[]] :
- self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
- self.ajouteAuxTextes(nomMC,indent)
- if listeSuivante == [[]] : continue # Est-ce toujours vrai ?
- if len(listeSuivante) == 1 : self.ajouteAuxTextes(listeSuivante[0],indent)
- else : self.factoriseEtCreeDump(listeSuivante, indent+int(creeSequence),nomMC)
- if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
-
- if declencheChoiceAvecSeqVid :
- self.texteComplexe += '\t'*indent + debSequenceDsBloc
- self.texteComplexe += '\t'*indent + finSequenceDsBloc
- if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*indent + finChoiceDsBloc
- if creeSequence : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
-
- #if doitFermerSequence : indent=indent-1;self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
- #print (self.texteSimple)
- #print ('______',' self.texteComplexe')
- #print (self.texteComplexe)
- #print ('_____', 'self.texteComplexeVenantDesFils')
- #print (self.texteComplexeVenantDesFils)
- print ('fin pour _______________________________', self.nom)
- return (maListeRetour)
-
-
- def ajouteAuxTextes(self,nomMC,indent) :
- #print ('ajouteAuxTextes', nomMC, self.nom, self.entites)
- #print ('ajouteAuxTextes', nomMC)
- #for i in self.entites.keys() : print (self.entites[i][0].nom)
- if (indent > 3) : indent = indent - 3
- else : indent = 0
- if len(self.entites[nomMC]) == 1:
- mc=self.entites[nomMC][0]
- mc.dumpXsd(dansFactorisation=True)
- self.texteComplexe += '\t'*(indent) + mc.texteElt
- if mc.nomDuTypePyxb not in self.mcDejaDumpe :
- self.texteComplexeVenantDesFils += mc.texteComplexe
- self.texteSimple += mc.texteSimple
- self.mcDejaDumpe.add(mc.nomDuTypePyxb)
- return
-
- leType=type(self.entites[nomMC][0])
- for e in (self.entites[nomMC][1:]) :
- if type(e) != leType:
- print ('Projection XSD impossible, changez un des ', nomMC)
- exit()
+ if hasattr(self.entites[nomMC][0], 'dejaDumpe') : # on a deja cree le type
+ if debug : print (self.entites[nomMC][0].nomDuTypePyxb, ' deja dumpe')
+ else :
+ if debug : print ('appel de dumpXsd')
+ self.entites[nomMC][0].dejaDumpe=True
+ self.entites[nomMC][0].dumpXsd(dansFactorisation=True,multiple=True,first=first)
+ if debug : print (self.entites[nomMC][0].nomDuTypePyxb)
+
+ texteDocUnion='\n'
+ i=1
+ for mc in self.entites[nomMC]:
+ if mc.ang != '' : texteDocUnion += str(i) + '- ' + mc.ang + ' or \n'; i=i+1
+ elif mc .fr != '' : texteDocUnion += str(i) + '- ' + mc.fr + ' ou \n'; i=i+1
+ if texteDocUnion == '\n' :
+ self.texteComplexe += '\t'*(indent) + self.entites[nomMC][0].texteElt
+ else :
+ texteDocUnion = texteDocUnion[0:-4]
+ debutTexteEltUnion = self.entites[nomMC][0].texteElt.split('maxOccurs=')[0]
+ self.texteComplexe += '\t'*(indent)+ reconstitueUnion.format(debutTexteEltUnion,texteDocUnion)
+ if self.entites[nomMC][0].nomDuTypePyxb in self.typesXSDDejaDumpes : return
+ self.typesXSDDejaDumpes.append(self.entites[nomMC][0].nomDuTypePyxb)
+ if debug : print ('et la j ajoute les definitions de type', self.entites[nomMC][0].nomDuTypePyxb)
+
+ nomTypePyxbUnion=self.entites[nomMC][0].nomDuTypePyxb
+ texteSimpleUnion = debutSimpleType.format(nomTypePyxbUnion)
+ texteSimpleUnion += debutUnion
+ texteSimpleUnion += '\t'*(indent)+self.entites[nomMC][0].texteSimplePart2
+ texteSimplePart1 = self.entites[nomMC][0].texteSimplePart1
+ for e in listePourUnion[1:] :
+ e.dumpXsd(dansFactorisation=True,multiple=True,first=False)
+ # si on ext un mc simple la ligne suivante est inutile
+ # en revanche on ajoute le texte a tous les coups
+ #self.texteComplexeVenantDesFils += e.texteComplexe
+ e.metAJourPyxb(nomTypePyxbUnion)
+ texteSimpleUnion += '\t'*(indent) + e.texteSimplePart2
+ texteSimplePart1 += e.texteSimplePart1
+ texteSimpleUnion += finUnion
+ texteSimpleUnion +=fermeSimpleType
+ self.texteSimple += texteSimplePart1 + texteSimpleUnion
+ if debug :
+ print ('______________')
+ print (self.texteSimple)
+ print ('______________')
+ #print ('self.texteSimple', self.texteSimple)
+
+ def fusionneDsUnChoix(self, nomMC,indent, debug=False):
+ if debug : print ('_________________________________', self.nom, self, nomMC,indent)
+ if debug : print (self.texteComplexe)
+ texteDocUnion='\n'
+ texteComplexe=''
+ texteComplexeVenantDesFils=''
+ texteSimple=''
+ mcRef= self.entites[nomMC][0]
+ # max = 1 : a priori les choix sont exclusifs
+ if (hasattr (mcRef, 'aDejaEteDumpe')) :
+ if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe")
+ return
+ leNomDuTypePyxb = mcRef.definitNomDuTypePyxb(forceACreer=True)
+ if debug : print ('nomMC', nomMC)
+ for mc in self.entites[nomMC]:
+ if debug : print ('------------', mc)
+ # on laisse dansFactorisation a False car ce n est pas comme une fusion de bloc
+ mc.texteComplexe = ''
+ mc.texteSimple = ''
+ mc.texteElt = ''
+ mc.dumpXsd(dansFactorisationDeFusion=True)
+ if debug : print ('texteSimple\n', mc.texteSimple, '\n fin\n')
+ if debug : print ('texteComplexeVenantDesFils\n',mc.texteComplexeVenantDesFils, '\n fin\n')
+ if debug : print ('texteComplexe\n', mc.texteComplexe, '\n fin\n')
+ if mc.ang != '' : texteDocUnion += str(i) + '- ' + mc.ang + ' or \n'; i=i+1
+ elif mc .fr != '' : texteDocUnion += str(i) + '- ' + mc.fr + ' ou \n'; i=i+1
+ texteComplexe += mc.texteComplexe
+ texteComplexeVenantDesFils += mc.texteComplexeVenantDesFils
+ texteSimple += mc.texteSimple
+
+ if debug : print ('______________________________')
+ if debug : print ('textecomplexeVenantDesFils : \n' ,texteComplexeVenantDesFils )
+ if debug : print ('______________________________')
+ if debug : print ('______________________________')
+ if debug : print ('textecomplexe : \n' ,texteComplexe )
+ if debug : print ('______________________________')
+ self.entites[nomMC][0].aDejaEteDumpe=True
+
+ self.texteElt = eltCompoDsSequence.format(nomMC, self.nomDuCodeDumpe,mcRef.nomDuTypePyxb,1,1)
+ self.texteDuFact = debutTypeCompo.format(self.entites[nomMC][0].nomDuTypePyxb)
+ self.texteDuFact += debutChoiceDsBloc
+ self.texteDuFact += texteComplexe
+ self.texteDuFact += finChoiceDsBloc
+ self.texteDuFact += finTypeCompo
+ self.texteSimple += texteSimple
+ self.texteComplexeVenantDesFils += texteComplexeVenantDesFils
+ self.texteComplexeVenantDesFils += self.texteDuFact
+ self.texteComplexe += self.texteElt
+ if debug : print ('______________________________')
+ if debug : print ('texteSimple : \n' ,self.texteSimple )
+ if debug : print ('______________________________')
+ self.entites[nomMC][0].aDejaEteDumpe=True
-
- # cette boucle ne fonctionne que pour des SIMP
- resteATraiter=copy(self.entites[nomMC])
- #print ('________resteATraiter', resteATraiter)
- listePourUnion=[]
- first=1
- while resteATraiter != [] :
- nvlListeATraiter=[]
- mc=resteATraiter[0]
- listePourUnion.append(mc)
- for autre in resteATraiter[1:]:
- if not (mc.compare(autre)) : nvlListeATraiter.append(autre)
- resteATraiter=copy(nvlListeATraiter)
-
- if len(listePourUnion) == 1:
- mc=listePourUnion[0]
- mc.dumpXsd(dansFactorisation=True,multiple=False,first=first)
- self.texteComplexe += '\t'*(indent) + mc.texteElt
- if mc.nomDuTypePyxb not in self.mcDejaDumpe :
- self.texteComplexeVenantDesFils += mc.texteComplexe
- self.texteSimple += mc.texteSimple
- self.mcDejaDumpe.add(mc.nomDuTypePyxb)
- return
-
- # on ajoute le nom de l element
- self.entites[nomMC][0].dumpXsd(dansFactorisation=True,multiple=True,first=first)
- self.texteComplexe += '\t'*(indent) + self.entites[nomMC][0].texteElt
- texteSimpleUnion=debutSimpleType.format(self.entites[nomMC][0].nomDuTypePyxb)
- texteSimpleUnion+=debutUnion
- if len(listePourUnion) == 1 :
- mc=self.entites[nomMC][0]
- mc.dumpXsd(dansFactorisation=True,multiple=True,first=first)
- if mc.nomDuTypePyxb not in self.mcDejaDumpe :
- self.texteComplexeVenantDesFils += mc.texteComplexe
- self.texteSimple += mc.texteSimple
- self.mcDejaDumpe.add(mc.nomDuTypePyxb)
- else :
- for e in listePourUnion :
- e.dumpXsd(dansFactorisation=True,multiple=True,first=first)
- if first and (e.nomDuTypePyxb not in self.mcDejaDumpe) :
- self.texteComplexeVenantDesFils += e.texteComplexe
- self.mcDejaDumpe.add(e.nomDuTypePyxb)
- texteSimpleUnion += '\t'*(indent)+e.texteSimple
- first=first * 0
- texteSimpleUnion += finUnion
- texteSimpleUnion+=fermeSimpleType
- self.texteSimple += texteSimpleUnion
-
# ----------------------------------------
class X_definitionComposee (X_definition):
# ------------------------------------------
-
- def CreeTexteComplexeVenantDesFils(self,dansFactorisation=False):
- texteComplexeVenantDesFils=""
- blocsDejaDumpes=set()
- #for nom in self.ordre_mc:
- # mcFils = self.entites[nom]
- #print (self.nom)
- for mcFils in self.mcXSD :
- if not (isinstance(mcFils, Accas.BLOC)) :
- mcFils.dumpXsd(dansFactorisation)
- self.texteComplexe += mcFils.texteElt
- self.texteSimple += mcFils.texteSimple
- texteComplexeVenantDesFils += mcFils.texteComplexe
- continue
- else :
- #print (mcFils.nom)
- if hasattr(mcFils,'nomXML') and mcFils.nomXML in blocsDejaDumpes and mcFils.nomXML != None : continue
- if hasattr(mcFils,'nomXML') and mcFils.nomXML != None: blocsDejaDumpes.add(mcFils.nomXML)
- mcFils.dumpXsd(dansFactorisation)
- self.texteComplexe += mcFils.texteElt
- self.texteSimple += mcFils.texteSimple
- texteComplexeVenantDesFils += mcFils.texteComplexe
- return texteComplexeVenantDesFils
-
- def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
- #print ('_________ dumpXsd___________', self.nom)
- if PourTraduction : print (self.nom)
- self.prepareDumpXSD()
-
- self.getNomDuCodeDumpe()
- self.nomDuTypePyxb = self.definitNomDuTypePyxb()
- self.texteSimple = "" # on n ajoute pas de type simple
-
- self.traduitMinMax()
- # pour accepter les PROC et ...
- #
- if self.aCreer :
- self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb)
- if isinstance(self,X_OPER) or isinstance(self,X_PROC) :
- self.texteComplexe += debutTypeCompoEtape.format(self.code)
- self.texteComplexe += debutTypeCompoSeq
- texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils(dansFactorisation)
- self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
- # la fin de l oper est traitee dans le dumpXSD de X_OPER
- if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompoSeq
- if isinstance(self,X_PROC) : self.texteComplexe += finTypeCompoEtape
- if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompo
- else :
- self.texteComplexe = ""
-
- self.texteElt=eltCompoDsSequence.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs)
- #print (self.texteComplexe)
- #print ('------------------------------------------------',self.nom)
-
- def traduitMinMax(self):
- # ______________________
- # valable pour PROC et OPER
- self.minOccurs = 0
- self.maxOccurs = 1
-
- def compare(self,autreMC):
- if self.label != autreMC.label : return False
- if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
- for attr in ( 'regles', 'fr', 'defaut', 'min' ,'max', 'position' , 'docu' ) :
- val1=getattr(self,attr)
- val2=getattr(autreMC,attr)
- if val1 != val2 : return False
- for defFille in self.entites.keys():
- if defFille not in autreMC.entites.keys() : return False
- if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
- return True
-
- def prepareDumpXSD(self):
- #print (' ************************ prepareDumpXSD pour', self.nom)
- self.inUnion=False
- self.tousLesFils=[]
- self.mcXSD=[]
- for nomMC in self.ordre_mc:
- mc=self.entites[nomMC]
- self.mcXSD.append(mc)
- mc.prepareDumpXSD()
- self.chercheListesDeBlocsNonDisjointsAvecIndex()
- for l in list(self.listeDesBlocsNonDisjointsAvecIndex) :
- #print ('je traite ', l, self.besoinDeFactoriserTrivial(l))
- if not(self.besoinDeFactoriserTrivial(l)) : self.listeDesBlocsNonDisjointsAvecIndex.remove(l)
- else : self.factorise(l)
- #print (self.aUnPremierCommunDansLesPossibles(l))
- #if self.aUnPremierCommunDansLesPossibles(l) :
- # print ('aUnCommunDansLesPossibles --> Factorisation')
- #else : self.listeDesBlocsNonDisjointsAvecIndex.remove(l)
- # trouver un cas test
-
- def chercheListesDeBlocsNonDisjointsAvecIndex(self):
- self.listeDesBlocsNonDisjointsAvecIndex=[]
- index=-1
- for nomChild in self.ordre_mc :
- child=self.entites[nomChild]
- index=index+1
- if child.label != 'BLOC' : continue
- if self.listeDesBlocsNonDisjointsAvecIndex == [] :
- self.listeDesBlocsNonDisjointsAvecIndex.append([(child,index),])
- continue
- vraimentIndependant=True
- for liste in list(self.listeDesBlocsNonDisjointsAvecIndex):
- independant=True
- for (bloc,indInListe) in liste :
- if bloc.isDisjoint(child) : continue
- if bloc.estLeMemeQue(child) : continue
- independant=False
- vraimentIndependant=False
- if not (independant) :
- liste.append((child, index))
- if vraimentIndependant:
- self.listeDesBlocsNonDisjointsAvecIndex.append([(child,index),])
- # on nettoye la liste des blocs tous seuls
- for l in list(self.listeDesBlocsNonDisjointsAvecIndex) :
- if len(l) ==1 : self.listeDesBlocsNonDisjointsAvecIndex.remove(l)
-
- def estLeMemeQue(self,autreMC):
- if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None: return True
- return False
-
- def aUnPremierCommunDansLesPossibles(self, laListe) :
- # fonctionne avec liste de mc ou une liste(mc,index)
- import types
- mesPremiers=set()
- for elt,index in laListe :
- if not type(e) == types.ListType :
- if elt.nom in mesPremiers : return True
- mesPremiers.add(elt.nom)
- else :
- if elt[0].nom in mesPremiers : return True
- mesPremiers.add(elt[0].nom)
- return False
-
- def besoinDeFactoriserTrivial(self,laListe):
- besoin=False
- lesPremiers=set()
- for mcBloc,indice in laListe :
- mc=mcBloc.mcXSD[0]
- if mc.label == 'BLOC': return True
- if not(mc.statut=='o') : return True
- if mc.nom in lesPremiers : return True
- lesPremiers.add(mc.nom)
- return False
-
- def factorise(self,liste):
- self.listeConstruction=liste
- indexDebut=liste[0][1]
- nomDebut=liste[0][0].nom
- indexFin=liste[-1][1]+1
- nomFin=liste[-1][0].nom
- nom=nomDebut+'_'+nomFin
- listeAFactoriser=[]
- for i in range(indexDebut, indexFin) :
- listeAFactoriser.append((self.mcXSD[i],i))
-
- newListe=self.mcXSD[0:indexDebut]
- #print (newListe, newListe.__class__)
- #print ('je factorise dans -->', self.nom)
- monEltFacteur=X_compoFactoriseAmbigu(nom,listeAFactoriser,self)
- newListe.append(monEltFacteur)
- newListe=newListe+self.mcXSD[indexFin:]
- self.mcXSD=newListe
- #print (self.mcXSD)
- #for i in self.mcXSD : print (i.nom)
-
- def construitTousLesFils(self):
- for nomChild in self.ordre_mc :
- child=self.entites[nomChild]
- if child.label != 'BLOC' :
- self.tousLesFils.append(child.nom)
- else:
- if child.tousLesFils == [] : child.construitTousLesFils()
- for nomPetitFils in child.tousLesFils : self.tousLesFils.append(nomPetitFils)
- #print ('construitArbreEntier pour ', self.nom, self.tousLesFils)
-
-
- def isDisjoint(self, mc1) :
- if self.tousLesFils == [] : self.construitTousLesFils()
- if not (hasattr(mc1, 'tousLesFils')) : mc1.tousLesFils = []
- if mc1.tousLesFils == [] : mc1.construitTousLesFils()
- for fils in mc1.tousLesFils :
- if fils in self.tousLesFils : return False
- return True
+
+ def creeTexteComplexeVenantDesFils(self,dansFactorisation=False,debug=False):
+ texteComplexeVenantDesFils=""
+ blocsDejaDumpes=set()
+ #for nom in self.ordre_mc:
+ # mcFils = self.entites[nom]
+ if debug : print ('creeTexteComplexeVenantDesFils', self.nom)
+ if self.nom == 'LeProc' : debug = True
+ for mcFils in self.mcXSD :
+ #print (mcFils,mcFils.nom)
+ if mcFils.nom == 'B1_B2' :debug=True
+ else : debug=False
+ if not (isinstance(mcFils, Accas.BLOC)) :
+ mcFils.dumpXsd(dansFactorisation)
+ self.texteComplexe += mcFils.texteElt
+ if mcFils.aCreer : self.texteSimple += mcFils.texteSimple
+ if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe
+ else :
+ if hasattr(mcFils,'nomXML') and mcFils.nomXML in blocsDejaDumpes and mcFils.nomXML != None : continue
+ if hasattr(mcFils,'nomXML') and mcFils.nomXML != None: blocsDejaDumpes.add(mcFils.nomXML)
+ mcFils.dumpXsd(dansFactorisation)
+ self.texteComplexe += mcFils.texteElt
+ if mcFils.aCreer : self.texteSimple += mcFils.texteSimple
+ if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe
+ return texteComplexeVenantDesFils
+
+ def dumpXsd(self, dansFactorisation=False, dansFactorisationDeFusion = False, multiple = False, first=True, debug=False):
+ if PourTraduction : print (self.nom)
+ # le prepareDump est appele sur les fils
+ if not (self.dejaPrepareDump) : self.prepareDumpXSD()
+
+ self.getNomDuCodeDumpe()
+ if first :
+ if multiple : self.nomDuTypePyxb = self.definitNomDuTypePyxb(forceACreer=True)
+ else : self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ self.texteSimple = "" # on n ajoute pas de type simple
+
+ self.traduitMinMax()
+ # pour accepter les PROC et ...
+ #
+ if debug : print ('dumpXsd', self.nom, self.aCreer)
+ if self.aCreer or dansFactorisationDeFusion:
+ if not dansFactorisationDeFusion : self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb)
+ if isinstance(self,X_OPER) or isinstance(self,X_PROC) :
+ self.texteComplexe += debutTypeCompoEtape.format(self.code)
+ self.texteComplexe += debutTypeCompoSeq
+ texteComplexeVenantDesFils= self.creeTexteComplexeVenantDesFils(dansFactorisation)
+ if not dansFactorisationDeFusion :
+ self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
+ self.texteComplexeVenantDesFils = ''
+ else :
+ self.texteComplexeVenantDesFils = texteComplexeVenantDesFils
+ # la fin de l oper est traitee dans le dumpXSD de X_OPER
+ if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompoSeq
+ if isinstance(self,X_PROC) : self.texteComplexe += finTypeCompoEtape
+ if not isinstance(self,X_OPER ) and not dansFactorisationDeFusion: self.texteComplexe += finTypeCompo
+ else :
+ self.texteComplexe = ""
+
+ if self.ang != "" : self.texteElt=eltCompoDsSequenceWithHelp.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs, self.ang)
+ elif self.fr != "" : self.texteElt=eltCompoDsSequenceWithHelp.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs, self.fr)
+ else : self.texteElt=eltCompoDsSequence.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs)
+ #print ('------------------------------------------------',self.nom)
+ #print (self.texteComplexe)
+
+ def traduitMinMax(self):
+ # ______________________
+ # valable pour PROC et OPER
+ self.minOccurs = 0
+ self.maxOccurs = 1
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
+ for attr in ( 'regles', 'fr', 'defaut', 'min' ,'max', 'position' , 'docu' ) :
+ val1=getattr(self,attr)
+ val2=getattr(autreMC,attr)
+ if val1 != val2 : return False
+ if len(self.entites) != len(autreMC.entites) : return False
+ for defFille in self.entites.keys():
+ if defFille not in autreMC.entites.keys() : return False
+ if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
+ return True
+
+ def prepareDumpXSD(self):
+ self.dejaPrepareDump=True
+ self.inUnion=False
+ self.tousLesFils=[]
+ self.mcXSD=[]
+ for nomMC in self.ordre_mc:
+ mc=self.entites[nomMC]
+ self.mcXSD.append(mc)
+ mc.prepareDumpXSD()
+ self.chercheListesDeBlocsNonDisjoints()
+ for l in list(self.listeDesBlocsNonDisjoints) :
+ if not(self.besoinDeFactoriserTrivial(l)) : self.listeDesBlocsNonDisjoints.remove(l)
+ else : self.factorise(l)
+
+ def chercheListesDeBlocsNonDisjoints(self):
+ self.listeDesBlocsNonDisjoints=[]
+ for nomChild in self.ordre_mc :
+ child=self.entites[nomChild]
+ if child.label != 'BLOC' : continue
+ if self.listeDesBlocsNonDisjoints == [] :
+ self.listeDesBlocsNonDisjoints.append([child])
+ continue
+ vraimentIndependant=True
+ for liste in list(self.listeDesBlocsNonDisjoints):
+ independant=True
+ for bloc in liste :
+ if bloc.isDisjoint(child) : continue
+ if bloc.estLeMemeQue(child) : continue
+ independant=False
+ vraimentIndependant=False
+ if not (independant) :
+ liste.append(child)
+ if vraimentIndependant:
+ self.listeDesBlocsNonDisjoints.append([child])
+ # on nettoye la liste des blocs tous seuls
+ for l in list(self.listeDesBlocsNonDisjoints) :
+ if len(l) ==1 : self.listeDesBlocsNonDisjoints.remove(l)
+
+ def estLeMemeQue(self,autreMC):
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None: return True
+ return False
+
+ def aUnPremierCommunDansLesPossibles(self, laListe) :
+ # fonctionne avec liste de mc ou une liste(mc,index)
+ import types
+ mesPremiers=set()
+ for elt,index in laListe :
+ if not type(e) == types.ListType :
+ if elt.nom in mesPremiers : return True
+ mesPremiers.add(elt.nom)
+ else :
+ if elt[0].nom in mesPremiers : return True
+ mesPremiers.add(elt[0].nom)
+ return False
+
+ def besoinDeFactoriserTrivial(self,laListe):
+ # tout faux
+ # a revoir
+ return True
+ besoin=False
+ lesPremiers=set()
+ for mcBloc in laListe :
+ mc=mcBloc.mcXSD[0]
+ if mc.label == 'BLOC' : return True
+ if not(mc.statut=='o') : return True
+ if mc.nom in lesPremiers : return True
+ lesPremiers.add(mc.nom)
+ return False
+
+ def factorise(self,liste,debug=False):
+ self.listeConstruction=liste
+ nomDebut=liste[0].nom
+ indexDebut=self.mcXSD.index(liste[0])
+ nomFin=liste[-1].nom
+ indexFin=self.mcXSD.index(liste[-1]) + 1
+ nom=nomDebut+'_'+nomFin
+ if debug : print ('___________ dans factorise', nom)
+ listeAFactoriser=[]
+ for i in range(indexDebut, indexFin) :
+ listeAFactoriser.append(self.mcXSD[i])
+
+ newListe=self.mcXSD[0:indexDebut]
+
+ monEltFacteur=X_compoFactoriseAmbigu(nom,listeAFactoriser,self)
+ newListe.append(monEltFacteur)
+ newListe=newListe+self.mcXSD[indexFin:]
+ self.mcXSD=newListe
+ if debug :print ('___________ fin fin factorise', nom)
+
+ def construitTousLesFils(self):
+ for nomChild in self.ordre_mc :
+ if nomChild == 'Consigne' or nomChild == 'blocConsigne' : continue
+ child=self.entites[nomChild]
+ if child.label != 'BLOC' :
+ self.tousLesFils.append(child.nom)
+ else:
+ if child.tousLesFils == [] : child.construitTousLesFils()
+ for nomPetitFils in child.tousLesFils : self.tousLesFils.append(nomPetitFils)
+ #print ('construitArbreEntier pour ', self.nom, self.tousLesFils)
+
+
+ def isDisjoint(self, mc1) :
+ if self.tousLesFils == [] : self.construitTousLesFils()
+ if not (hasattr(mc1, 'tousLesFils')) : mc1.tousLesFils = []
+ if mc1.tousLesFils == [] : mc1.construitTousLesFils()
+ for fils in mc1.tousLesFils :
+ if fils in self.tousLesFils : return False
+ return True
class X_FACT (X_definitionComposee):
#--------- ------------------------
#Un FACT avec max=** doit se projeter en XSD sous forme d'une sequence a cardinalite 1 et
-# l'element qui porte la repetition du FACT
- def traduitMinMax(self):
- if self.max == '**' or self.max == float('inf') : self.maxOccurs="unbounded"
- else : self.maxOccurs = self.max
- self.minOccurs = self.min
- if self.statut =='f' : self.minOccurs=0
-
- def construitArbrePossibles(self):
- if self.statut == 'f' :
- self.arbrePossibles = (self.nom,[])
- self.arbreMCPossibles = (self,None)
- else :
- self.arbrePossibles = (self.nom,)
- self.arbreMCPossibles = (self,)
- #print ('XFACT arbre des possibles de ' ,self.nom, self.arbrePossibles)
+# l'element qui porte la repetition du FACT
+ def traduitMinMax(self):
+ if self.max == '**' or self.max == float('inf') : self.maxOccurs="unbounded"
+ else : self.maxOccurs = self.max
+ self.minOccurs = self.min
+ if self.statut =='f' : self.minOccurs=0
+ if self.statut =='o' and self.min < 2: self.minOccurs=1
+
+ def construitArbrePossibles(self):
+ if self.statut == 'f' :
+ self.arbrePossibles = (self.nom,[])
+ self.arbreMCPossibles = (self,None)
+ else :
+ self.arbrePossibles = (self.nom,)
+ self.arbreMCPossibles = (self,)
+ #print ('XFACT arbre des possibles de ' ,self.nom, self.arbrePossibles)
# ---------------------------------
class X_OPER (X_definitionComposee):
# ---------------------------------
- def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
- X_definitionComposee.dumpXsd(self,dansFactorisation)
- self.texteComplexe += finTypeCompoSeq
- self.texteComplexe += operAttributeName
- self.texteComplexe += attributeTypeForASSD
- self.texteComplexe += attributeTypeUtilisateurName.format(self.sd_prod.__name__)
- self.texteComplexe += finTypeCompoEtape
- self.texteComplexe += finTypeCompo
-
-
- cata = CONTEXT.getCurrentCata()
- if self.sd_prod.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) :
- cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__]=[self,]
- else :
- cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__].append(self)
+ def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
+ X_definitionComposee.dumpXsd(self,dansFactorisation)
+ self.texteComplexe += finTypeCompoSeq
+ self.texteComplexe += attributeNameName
+ self.texteComplexe += attributeTypeForASSD
+ self.texteComplexe += attributeTypeUtilisateurName.format(self.sd_prod.__name__)
+ self.texteComplexe += finTypeCompoEtape
+ self.texteComplexe += finTypeCompo
+
+
+ cata = CONTEXT.getCurrentCata()
+ if self.sd_prod.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) :
+ cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__]=[self,]
+ else :
+ cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__].append(self)
# ----------------------------------
#-----------------------------------
class X_BLOC (X_definitionComposee):
#-----------------------------------
- def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
- self.tousLesFils=[]
-
- self.getNomDuCodeDumpe()
- # dans ce cas les blocs successifs sont identiques et on ne dumpe que le 1er
-
- self.nomDuTypePyxb = self.definitNomDuTypePyxb()
- self.texteSimple = "" # on n ajoute pas de type simple
-
- # Pour les blocs le minOccurs vaut 0 et le max 1
- #print ('dumpXsd Bloc', self.nom, self.aCreer)
- if self.aCreer :
- self.texteComplexe = debutTypeSubst.format(self.nomDuTypePyxb)
- texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils(dansFactorisation)
- self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
- self.texteComplexe += finTypeSubst
- else :
- self.texteComplexe = ""
-
- self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1)
-
- #print ('------------------------------------------------')
-
- def compare(self,autreMC):
- if self.label != autreMC.label : return False
- if self.inUnion == True or autreMC.inUnion == True : return False
- if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
- for attr in ( 'condition', 'regles', ):
- val1=getattr(self,attr)
- val2=getattr(autreMC,attr)
- if val1 != val2 : return False
- for defFille in self.entites.keys():
- if defFille not in autreMC.entites.keys() : return False
- if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
- return True
-
- def construitArbrePossibles(self):
- self.arbrePossibles=[[],]
- #print ('X_BLOC je construis l arbre des possibles pour ', self.nom)
- for child in self.mcXSD :
- if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles()
- #print (child.nom, child.label, child.arbrePossibles)
- if child.label == 'BLOC' :
- self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles))
- elif child.label == 'BlocAmbigu':
- #print ("je passe par la pour", self.nom, child.nom, self.arbrePossibles, child.arbrePossibles)
- self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles))
- #print ('resultat', self.arbrePossibles)
- else :
- self.arbrePossibles = deepcopy(self.adjoint(self.arbrePossibles, child.arbrePossibles))
- self.arbrePossibles.append([]) # un bloc n est pas obligatoire
- #print ('arbre des possibles de ' ,self.nom, self.arbrePossibles)
+ def dumpXsd(self, dansFactorisation=False, multiple = False, first=False, debug = False):
+ if debug : print ('X_BLOC dumpXsd', self.nom)
+ self.tousLesFils=[]
+ if self.nom == 'blocConsigne' :
+ self.texteComplexe = ""
+ self.texteSimple = ""
+ self.nomDuTypePyxb = "NonTraiteConsigne"
+ self.texteSimpleVenantDesFils = ""
+ self.aCreer = False
+ self.texteElt = ""
+
+ return
+ self.getNomDuCodeDumpe()
+ # dans ce cas les blocs successifs sont identiques et on ne dumpe que le 1er
+
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ self.texteSimple = "" # on n ajoute pas de type simple
+
+ # Pour les blocs le minOccurs vaut 0 et le max 1
+ if self.aCreer :
+ self.texteComplexe = debutTypeSubst.format(self.nomDuTypePyxb)
+ texteComplexeVenantDesFils=self.creeTexteComplexeVenantDesFils(dansFactorisation)
+ self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
+ self.texteComplexe += finTypeSubst
+
+ else :
+ self.texteComplexe = ""
+
+ self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1,'condition : ' +self.condition)
+
+ #print ('------------------------------------------------')
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ if self.inUnion == True or autreMC.inUnion == True : return False
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
+ for attr in ( 'condition', 'regles', ):
+ val1=getattr(self,attr)
+ val2=getattr(autreMC,attr)
+ if val1 != val2 : return False
+ if len(self.entites) != len(autreMC.entites) : return False
+ for defFille in self.entites.keys():
+ if defFille not in autreMC.entites.keys() : return False
+ if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
+ return True
+
+ def construitArbrePossibles(self):
+ self.arbrePossibles=[[],]
+ #print ('X_BLOC je construis l arbre des possibles pour ', self.nom)
+ for child in self.mcXSD :
+ if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles()
+ #print (child.nom, child.label, child.arbrePossibles)
+ if child.label == 'BLOC' :
+ self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles))
+ elif child.label == 'BlocAmbigu':
+ #print ("je passe par la pour", self.nom, child.nom, self.arbrePossibles, child.arbrePossibles)
+ self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles))
+ #print ('resultat', self.arbrePossibles)
+ else :
+ self.arbrePossibles = deepcopy(self.adjoint(self.arbrePossibles, child.arbrePossibles))
+ self.arbrePossibles.append([]) # un bloc n est pas obligatoire
+ #print ('arbre des possibles de ' ,self.nom, self.arbrePossibles)
#--------------------------------
class X_SIMP (X_definition):
#--------------------------------
- def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
- #print ('_______________' , '*******************', 'je passe la dans dumpXsd SIMP', self.nom, multiple, first)
- if PourTraduction : print (self.nom)
- self.prepareDumpXSD()
- if multiple : self.inUnion=True
- #print ('exploreObjet SIMP')
- self.getNomDuCodeDumpe()
- self.aCreer = True
- self.texteComplexe = ""
- self.texteSimple = ""
- self.texteElt = ""
- if self.nom =='Consigne' : return
-
- # --> homonymie on peut utiliser genealogie ?
- self.nomDuTypeDeBase = self.traduitType()
- if not multiple :
- self.nomDuTypePyxb = self.definitNomDuTypePyxb()
- if first : self.aCreer = True
- elif first :
- self.nomDuTypePyxb = self.definitNomDuTypePyxb(forceACreer=1)
- self.aCreer = True
- #else : print ('multiple and not first', self.aCreer)
+ def dumpXsd(self, dansFactorisation=False, multiple=False, first=False, debug=False):
+ #debug = True
+ #if PourTraduction : print (self.nom)
+ if debug : print ('X_SIMP dumpXsd pour', self.nom, '___________________________')
+ self.prepareDumpXSD()
+ # si inUnion la comparaison est fausse : on cree le nomDuType
+ if multiple : self.inUnion=True
+ #print ('exploreObjet SIMP')
+ self.getNomDuCodeDumpe()
+ self.aCreer = True
+ self.texteComplexe = ""
+ self.texteSimple = ""
+ self.texteElt = ""
+ if self.nom =='Consigne' : return
+
+ # --> homonymie on peut utiliser genealogie ?
+ self.nomDuTypeDeBase = self.traduitType()
+ if debug : print ('nomDuTypeDeBase', self.nomDuTypeDeBase)
+ if debug : print ('multiple', multiple, 'first', first)
+ if not multiple :
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ else :
+ if first :
+ # on force la creation
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ self.aCreer = True
+ else :
+ self.nomDuTypePyxb='NonDetermine'
-
-
- # on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0
- if self.statut =='f' : minOccurs = 0
- else : minOccurs = 1
- if dansFactorisation : minOccurs = 1
-
- #print ('minOccurs',minOccurs)
- # le defaut est dans l elt Name -> tester la coherence d existence avec Accas
- # regles Accas
- if (hasattr (self, 'nomXML')) and self.nomXML != None : nomUtil=self.nomXML
- else : nomUtil = self.nom
-
- # pas d elt si on est dans multiple
- # sauf si on est le '1er' dans un element ambigu
- if not multiple :
- #print ('je passe la pas multiple')
- if self.defaut :
- if self.max > 1 or self.max == '**' or self.max == float('inf') :
- # a revoir pour les tuples avec defaut
- txtDefaut=""
- for val in self.defaut : txtDefaut+=str(val) +" "
- self.texteElt = eltWithDefautDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut)
- else :
- if str(self.defaut) == 'True' : txtDefaut = 'true'
- else : txtDefaut = str(self.defaut)
- self.texteElt = eltWithDefautDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut)
- else : self.texteElt = eltDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,minOccurs,1)
- elif first:
- self.texteElt = eltDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,1,1)
-
- # self.aCreer est mis a jour ds definitNomDuTypePyxb
- # ou si elt est le 1er d une liste identique
- if not self.aCreer : return
-
- if not multiple : self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb)
- else : self.texteSimple += debutSimpleTypeSsNom
- # On est dans une liste
- if self.max > 1 or self.max == '**' or self.max == float('inf') or hasattr(self.type[0], 'ntuple') :
- self.texteSimple += debutTypeSimpleListe
- self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(self.nomDuTypeDeBase)
- if self.val_min != float('-inf') : self.texteSimple += "\t\t\t\t"+minInclusiveBorne.format(self.val_min)
- if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple +="\t\t\t\t"+ maxInclusiveBorne.format(self.val_max)
- if self.into != None:
- # PN --> traduction des into
- into=self.into
- if self.intoXML != None : into = self.intoXML
- for val in into : self.texteSimple += "\t\t\t\t"+enumeration.format(val)
- if PourTraduction :
- for val in into : print (str(val))
- self.texteSimple += fermeBalisesMileu
- if self.max !=1 and self.max != '**' and self.max != float('inf') : self.texteSimple += maxLengthTypeSimple.format(self.max)
- if self.min !=1 and self.min != float('-inf') : self.texteSimple += minLengthTypeSimple.format(self.min)
- self.texteSimple += fermeRestrictionBase
- else :
- # ou pas
- self.texteSimple += debutRestrictionBase.format(self.nomDuTypeDeBase)
- if self.val_min != float('-inf') : self.texteSimple += minInclusiveBorne.format(self.val_min)
- if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple += maxInclusiveBorne.format(self.val_max)
- if self.into != None:
- into=self.into
- if self.intoXML != None : into = self.intoXML
- for val in into : self.texteSimple += enumeration.format(val)
- if PourTraduction :
- for val in into : print (str(val))
- self.texteSimple += fermeRestrictionBase
- self.texteSimple += fermeSimpleType
-
-
- def prepareDumpXSD(self):
- self.inUnion=False
- if self.statut == 'f' :
- self.arbrePossibles = (self.nom,[])
- else :
- self.arbrePossibles = (self.nom,)
- self.mcXSD=[]
-
-
-
- def traduitType(self):
- # il faut traduire le min et le max
- # il faut ajouter les regles
- # il faut gerer les types tuple et fichier
- if hasattr(self.type[0], 'ntuple') :
- try :
- leType=self.validators.typeDesTuples[0]
- for i in range(self.type[0].ntuple):
- if self.validators.typeDesTuples[i] != leType : return ('XXXXXXXX')
- typeATraduire=leType
- except :
- return ('XXXXXXXX')
- else :
- typeATraduire=self.type[0]
- if not (typeATraduire in list(dictNomsDesTypes.keys())) :
- if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) :
- # cas d une creation
- cata = CONTEXT.getCurrentCata()
- if len(self.type) == 2 and self.type[1]=='createObject' :
- if typeATraduire.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) :
- cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__]=[self,]
+ if debug : print ('nomDuTypePyxb', self.nomDuTypePyxb)
+ if debug : print ('aCreer', self.aCreer)
+
+
+ # on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0
+ if self.statut =='f' : minOccurs = 0
+ else : minOccurs = 1
+ if dansFactorisation : minOccurs = 1
+
+ if self.suisUneMatrice :
+ self.dumpSpecifiqueMatrice(minOccurs)
+ return
+
+ if self.suisUnTuple :
+ self.dumpSpecifiqueTuple(minOccurs)
+ return
+
+ if self.avecBlancs and self.max > 1 :
+ #print ('je suis avec blanc pour ', self.nom)
+ self.dumpSpecifiqueTexteAvecBlancs(minOccurs,multiple)
+ return
+
+ #print ('minOccurs',minOccurs)
+ # le defaut est dans l elt Name -> tester la coherence d existence avec Accas
+ # regles Accas
+
+ # pas d elt si on est dans multiple
+ # sauf si on est le '1er' dans un element ambigu
+ if not multiple :
+ #print ('je passe la pas multiple')
+ texteAide = ""
+ if self.ang != '' : texteAide = self.ang
+ else : texteAide = self.fr
+ if self.intoXML and self.into :
+ if self.intoXML != self.into :
+ #print ('je passe la pour ', self.nom)
+ texteAide :texteAide = texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n'
+
+ if self.defaut :
+ if self.max > 1 or self.max == '**' or self.max == float('inf') :
+ txtDefaut=""
+ for val in self.defaut : txtDefaut+=str(val) + " "
+ # cela ne fonctionne pas tres bien. a revoir
+ txtDefaut+=txtDefaut[0:-1]
+ if not('TXM' in (self.type)) :
+ # a revoir pour les tuples avec defaut
+ if texteAide != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,texteAide)
+ else : self.texteElt = eltDsSequenceWithDefaut.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut)
+ else :
+ texteAide += texteAide+'\ndefault Value in MDM : \n'+txtDefaut
+ self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
+ else :
+ if str(self.defaut) == 'True' : txtDefaut = 'true'
+ elif str(self.defaut) == 'False' : txtDefaut = 'false'
+ else : txtDefaut = str(self.defaut)
+ if texteAide != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,texteAide)
+ else : self.texteElt = eltDsSequenceWithDefaut.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut)
+ else :
+ if texteAide != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
+ else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
+ elif first:
+ # l'aide est geree a la fusion
+ self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,1,1)
+
+ # self.aCreer est mis a jour ds definitNomDuTypePyxb
+ # ou si elt est le 1er d une liste identique
+ if debug : print ('je suis aCreer', self.aCreer)
+ if not self.aCreer : return
+
+ typeATraduire=self.type[0]
+
+ self.texteSimplePart1=""
+ if not(isinstance(typeATraduire,str)) and not(isinstance(typeATraduire,Accas.Tuple)) and issubclass(typeATraduire, Accas.UserASSD) :
+ cata = CONTEXT.getCurrentCata()
+ if len(self.type) == 2 and self.type[1]=='createObject' : suffixe = 'C'
+ else : suffixe = 'U'
+ #print (cata.listeUserASSDDumpes)
+ #print (typeATraduire.__name__)
+ #print (typeATraduire.__name__ in cata.listeUserASSDDumpes)
+ if typeATraduire.__name__ not in cata.listeUserASSDDumpes :
+ cata.listeUserASSDDumpes.add(typeATraduire.__name__)
+ if issubclass(typeATraduire, Accas.UserASSDMultiple) :
+ self.texteSimplePart1 = defUserASSDMultiple.format(typeATraduire.__name__)
+ if cata.definitUserASSDMultiple == False :
+ cata.definitUserASSDMultiple = True
+ cata.texteSimple = cata.texteSimple + defBaseXSDUserASSDMultiple
else :
- cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self)
- return 'xs:string'
-
- # cas d une consommation
- if typeATraduire not in list(cata.dictTypesASSDorUserASSDUtilises) :
- cata.dictTypesASSDorUserASSDUtilises[typeATraduire]=[self,]
- else :
- cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,)
- return 'xs:string'
- else : return ('YYYYY')
- return dictNomsDesTypes[typeATraduire]
+ self.texteSimplePart1 = defUserASSD.format(typeATraduire.__name__)
+ if cata.definitUserASSD == False :
+ cata.definitUserASSD = True
+ cata.texteSimple = cata.texteSimple + defBaseXSDUserASSD
+ if typeATraduire.__name__+'_'+suffixe not in cata.listeUserASSDDumpes :
+ cata.texteSimple = cata.texteSimple + defUserASSDOrUserASSDMultiple.format(typeATraduire.__name__, suffixe,typeATraduire.__name__)
+ cata.listeUserASSDDumpes.add(typeATraduire.__name__+'_'+suffixe)
+
+
+ if not multiple : self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb)
+ else : self.texteSimple += debutSimpleTypeSsNom
+ # On est dans une liste
+ if self.max > 1 or self.max == '**' or self.max == float('inf') or hasattr(self.type[0], 'ntuple') :
+ self.texteSimple += debutTypeSimpleListe
+ self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(self.nomDuTypeDeBase)
+ if self.val_min != float('-inf') : self.texteSimple += "\t\t\t\t"+minInclusiveBorne.format(self.val_min)
+ if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple +="\t\t\t\t"+ maxInclusiveBorne.format(self.val_max)
+ if self.into != None:
+ # PN --> traduction des into
+ into=self.into
+ if self.intoXML != None : into = self.intoXML
+ for val in into : self.texteSimple += "\t\t\t\t"+enumeration.format(val)
+ if PourTraduction :
+ for val in into : print (str(val))
+ self.texteSimple += fermeBalisesMileu
+ if self.max !=1 and self.max != '**' and self.max != float('inf') : self.texteSimple += maxLengthTypeSimple.format(self.max)
+ if self.min !=1 and self.min != float('-inf') : self.texteSimple += minLengthTypeSimple.format(self.min)
+ self.texteSimple += fermeRestrictionBase
+ else :
+ # ou pas
+ self.texteSimple += debutRestrictionBase.format(self.nomDuTypeDeBase)
+ if self.val_min != float('-inf') : self.texteSimple += minInclusiveBorne.format(self.val_min)
+ if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple += maxInclusiveBorne.format(self.val_max)
+ if self.into != None:
+ into=self.into
+ if self.intoXML != None : into = self.intoXML
+ for val in into : self.texteSimple += enumeration.format(val)
+ if PourTraduction :
+ for val in into : print (str(val))
+ self.texteSimple += fermeRestrictionBase
+ self.texteSimple += fermeSimpleType
+ self.texteSimplePart2 = self.texteSimple
+ self.texteSimple = self.texteSimplePart1 + self.texteSimplePart2
+
+
+ def dumpSpecifiqueTexteAvecBlancs(self,minOccurs,multiple):
+ # attention multiple non traite
+ # pour l instant on n a pas max =1 et on ne traite pas les into
+
+ texteAide = ""
+ if self.ang != '' : texteAide = self.ang
+ elif self.fr != '' : texteAide = self.fr
+
+ self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
+ txtDefaut=""
+ # Pas de Defaut pour les string en XSD
+ # max sert pour la taille de la liste
+ if self.defaut : texteAide += ' Valeur par defaut dans le comm : '+str(self.defaut)
+ if texteAide != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
+ else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
+
+
+ if self.max == '**' or self.max == float('inf') : max='unbounded'
+ else : max = self.max
- def traduitValMinValMax(self):
- self.maxInclusive=self.val_max
- self.minInclusive=self.val_min
- if self.val_min == float('-inf') and val_max== float('inf') : return
- #print ('il faut affiner le type du SIMP ', self.nom)
- if self.val_max == '**' or self.val_max == float('inf') : self.maxInclusive=None
- else : self.maxInclusive = self.val_max
- if self.val_min == '**' or self.val_max == float('-inf') : self.maxInclusive=None
- else : self.minInclusive = self.val_min
-
- def traduitMinMax(self):
- if self.min == 1 and self.max == 1 : return
- #print ('il faut creer une liste ' , self.nom)
-
- def compare(self,autreMC):
- if self.label != autreMC.label : return False
- if self.inUnion == True or autreMC.inUnion == True : return False
- listeAComparer = [ 'type', 'defaut', 'min' ,'max' ,'val_min' , 'val_max' ]
- if self.intoXML != None : listeAComparer.append('intoXML')
- else : listeAComparer.append('into')
- if (hasattr (self, 'nomXML')) and self.nomXML != None : nomUtil=self.nomXML
- for attr in listeAComparer :
- val1=getattr(self,attr)
- val2=getattr(autreMC,attr)
- if val1 != val2 : return False
- return True
-
- def construitArbrePossibles(self):
- if self.statut == 'f' :
- self.arbrePossibles = (self.nom,[])
- else :
- self.arbrePossibles = (self.nom,)
- #print ('SIMP arbre des possibles de ' ,self.nom, self.arbrePossibles)
+ if self.max > 1 : # juste au cas ou on traite 1 pareil
+ self.texteSimple = ''
+ cata = CONTEXT.getCurrentCata()
+ if self.nomDuTypePyxb in cata.listeTypeTXMAvecBlancs: return
+ cata.listeTypeTXMAvecBlancs.add(self.nomDuTypePyxb)
+ self.texteSimple = complexChaineAvecBlancs.format(self.nomDuTypePyxb,max,self.nomDuTypePyxb)
+ if self.intoXML != None : into = self.intoXML
+ else : into = self.into
+ if into == None :
+ self.texteSimple += typeEltChaineAvecBlancSansInto.format(self.nomDuTypePyxb)
+ else :
+ self.texteSimple += debutChaineAvecBlancsInto.format(self.nomDuTypePyxb)
+ for val in into : self.texteSimple += milieuChaineAvecBlancsInto.format(val)
+ self.texteSimple += finChaineAvecBlancsInto
+
+
+ def dumpSpecifiqueTuple(self,minOccurs):
+ self.nomDuTypeDeBase = self.traduitType()
+ tousPareil=True
+ # il faut gerer l aide et les defaut
+ if self.defaut : print ('il faut tester le defaut')
+ if self.max == '**' or self.max == float('inf') : max='unbounded'
+ else : max = self.max
+ self.texteElt = tupleNonHomogeneElt.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,max)
+ leType=self.nomDuTypeDeBase[0]
+ for leTypeComp in self.nomDuTypeDeBase[1:] :
+ if leTypeComp != leType :
+ tousPareil = False
+ break;
+ #if tousPareil :
+ #PN PN a statuer
+ # self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb)
+ # self.texteSimple += debutTypeSimpleListe
+ # self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(leType)
+ # if self.val_min != float('-inf') : self.texteSimple += "\t\t\t\t"+minInclusiveBorne.format(self.val_min)
+ # if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple +="\t\t\t\t"+ maxInclusiveBorne.format(self.val_max)
+ # if self.into != None:
+ # into=self.into
+ # if self.intoXML != None : into = self.intoXML
+ # for val in into : self.texteSimple += "\t\t\t\t"+enumeration.format(val)
+ # if PourTraduction :
+ # for val in into : print (str(val))
+ # self.texteSimple += fermeBalisesMileu
+ # if self.max !=1 and self.max != '**' and self.max != float('inf') : self.texteSimple += maxLengthTypeSimple.format(self.max)
+ # if self.min !=1 and self.min != float('-inf') : self.texteSimple += minLengthTypeSimple.format(self.min)
+ # self.texteSimple += fermeSimpleType
+ # return
+
+ self.texteSimple = ''
+ complexeTypeTuple = tupleDebutComplexeType.format(self.nomDuTypePyxb)
+ num = 1
+ for leType in self.nomDuTypeDeBase :
+ self.texteSimple += tupleNonHomogeneSimpleType.format(self.nomDuTypePyxb,str(num),leType)
+ complexeTypeTuple += tupleMilieuComplexeType.format(str(num),self.nomDuTypePyxb,str(num))
+ num = num + 1
+ complexeTypeTuple += tupleFinComplexeType
+ self.texteSimple += complexeTypeTuple
+
+
+ def dumpSpecifiqueMatrice(self,minOccurs):
+ # if faut traiter le defaut
+ typeDeMatrice =self.type[0]
+
+ self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb+'_element')
+ self.texteSimple += debutRestrictionBase.format(self.nomDuTypeDeBase)
+ if typeDeMatrice.typEltInto != None:
+ for val in typeDeMatrice.typEltInto : self.texteSimple += enumeration.format(val)
+ self.texteSimple += fermeRestrictionBase
+ self.texteSimple += fermeSimpleType
+ nom=self.nomDuTypePyxb
+ nbCols=typeDeMatrice.nbCols
+ nbLigs=typeDeMatrice.nbCols
+ self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,nom,self.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max)
+ self.texteElt = eltMatrice.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
+
+
+ def prepareDumpXSD(self):
+ self.inUnion=False
+ if self.statut == 'f' : self.arbrePossibles = (self.nom,[])
+ else : self.arbrePossibles = (self.nom,)
+ self.mcXSD=[]
+
+
+
+ def traduitType(self,debug=False):
+ # il faut traduire le min et le max
+ # il faut ajouter les regles
+ # il faut gerer les types tuple et fichier
+ # on ne paut pas tester le type qui depend du cataloge
+ if hasattr(self.type[0], 'typElt') :
+ #print ('je suis une Matrice de ' ,dictNomsDesTypes[self.type[0].typElt])
+ self.suisUneMatrice = True
+ # on presume que le type de l elt est un ASSD
+ if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string'
+ return dictNomsDesTypes[self.type[0].typElt]
+ else :
+ self.suisUneMatrice = False
+ if hasattr(self.type[0], 'ntuple') :
+ self.suisUnTuple = True
+ # Pour l instant pas de into dans les tuples non homogenes et pas de reference
+ # sinon, il faudra faire un for sur la suite avec les createObjet
+ leType=self.validators.typeDesTuples[0]
+ enRetour=[]
+ for i in range(self.type[0].ntuple):
+ enRetour.append(dictNomsDesTypes[self.validators.typeDesTuples[i]])
+ return enRetour
+ #typeATraduire=leType
+ else :
+ self.suisUnTuple = False
+ typeATraduire=self.type[0]
+ if not (typeATraduire in list(dictNomsDesTypes.keys())) :
+ #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) :
+ if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.ASSD)) :
+ # cas d une creation
+ cata = CONTEXT.getCurrentCata()
+ # PNPNPN a Revoir pour la creation des keyrefs
+ if len(self.type) == 2 and self.type[1]=='createObject' :
+ if typeATraduire.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) :
+ cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__]=[self,]
+ else :
+ cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self)
+ if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_C'
+ else : return 'xs:string'
+
+ # cas d une consommation
+ if typeATraduire not in list(cata.dictTypesASSDorUserASSDUtilises) :
+ cata.dictTypesASSDorUserASSDUtilises[typeATraduire]=[self,]
+ else :
+ cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,)
+ if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_U'
+ else : return 'xs:string'
+ else : return ('YYYYY')
+ return dictNomsDesTypes[typeATraduire]
+
+ def traduitValMinValMax(self):
+ self.maxInclusive=self.val_max
+ self.minInclusive=self.val_min
+ if self.val_min == float('-inf') and val_max== float('inf') : return
+ #print ('il faut affiner le type du SIMP ', self.nom)
+ if self.val_max == '**' or self.val_max == float('inf') : self.maxInclusive=None
+ else : self.maxInclusive = self.val_max
+ if self.val_min == '**' or self.val_max == float('-inf') : self.maxInclusive=None
+ else : self.minInclusive = self.val_min
+
+ def traduitMinMax(self):
+ if self.min == 1 and self.max == 1 : return
+ #print ('il faut creer une liste ' , self.nom)
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ if self.inUnion == True or autreMC.inUnion == True : return False
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
+ listeAComparer = [ 'type', 'defaut', 'min' ,'max' ,'val_min' , 'val_max' ]
+ if self.intoXML != None : listeAComparer.append('intoXML')
+ else : listeAComparer.append('into')
+ if (hasattr (self, 'nomXML')) and self.nomXML != None : nomUtil=self.nomXML
+ for attr in listeAComparer :
+ val1=getattr(self,attr)
+ val2=getattr(autreMC,attr)
+ if val1 != val2 : return False
+ return True
+
+ def construitArbrePossibles(self):
+ if self.statut == 'f' :
+ self.arbrePossibles = (self.nom,[])
+ else :
+ self.arbrePossibles = (self.nom,)
+ #print ('SIMP arbre des possibles de ' ,self.nom, self.arbrePossibles)
#-----------------
#-----------------
def dumpXsd(self, avecEltAbstrait, debug = True):
- cata = CONTEXT.getCurrentCata()
+ cata = CONTEXT.getCurrentCata()
if debug : print ('avecEltAbstrait -------------------', avecEltAbstrait)
if debug : print ('self.importedBy -------------------', self.importedBy)
self.texteSimple = ""
self.texteComplexe = ""
- self.texteCata = ""
+ self.texteCata = ""
self.texteDeclaration = ""
self.texteInclusion = ""
self.texteElt = ""
self.texteTypeAbstrait = ""
if self.implement == "" :
- self.nomDuCodeDumpe = self.code
- self.implement = self.code
- self.nomDuXsdPere = self.code
+ self.nomDuCodeDumpe = self.code
+ self.implement = self.code
+ self.nomDuXsdPere = self.code
else :
- self.implement,self.nomDuXsdPere=self.implement.split(':')
- self.nomDuCodeDumpe = self.implement
+ self.implement,self.nomDuXsdPere=self.implement.split(':')
+ self.nomDuCodeDumpe = self.implement
if debug : print ('self.implement -------------------', self.implement)
if debug : print ('self.nomDuCodeDumpe -------------------', self.nomDuCodeDumpe)
self.dumpLesCommandes()
if self.implement == self.code :
- self.texteCata += eltAbstraitCataPPal.format(self.code)
- self.texteCata += eltCataPPal.format(self.code,self.code,self.code)
+ self.texteCata += eltAbstraitCataPPal.format(self.code)
+ if 0 : pass
+ else : self.texteCata += eltCataPPal.format(self.code,self.code,self.code)
else :
- self.texteCata += eltAbstraitCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere)
- self.texteCata += eltCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere)
- self.texteInclusion += includeCata.format(self.nomDuXsdPere)
+ self.texteCata += eltAbstraitCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere)
+ if 0 : pass
+ else : self.texteCata += eltCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere)
+ self.texteInclusion += includeCata.format(self.nomDuXsdPere)
+
self.texteCata += eltCata.format(self.implement,self.implement,self.implement,self.implement,self.nomDuXsdPere)
#if self.implement == self.code :
# self.texteCata += debutTypeCata.format(self.nomDuCodeDumpe)
- #for codeHeritant in self.importedBy:
+ #for codeHeritant in self.importedBy:
# self.texteCata += eltCodeSpecDsCata.format(codeHeritant)
# self.texteTypeAbstrait += eltAbstrait.format(codeHeritant,codeHeritant,self.code,codeHeritant)
# self.texteElt = eltCata.format(self.nomDuCodeDumpe,self.code, self.nomDuTypePyxb)
if self.implement == self.code :
- self.texteXSD = texteDebut.format(self.code,self.code,self.code,self.code,self.code,self.code)
+ self.texteXSD = texteDebut.format(self.code,self.code,self.code,self.code,self.code,self.code)
elif self.nomDuXsdPere == self.code :
- self.texteXSD = texteDebutNiveau2.format(self.code,self.implement,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code)
- else :
- self.texteXSD = texteDebutNiveau3.format(self.code,self.implement,self.code,self.nomDuXsdPere,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code)
+ self.texteXSD = texteDebutNiveau2.format(self.code,self.implement,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code)
+ else :
+ self.texteXSD = texteDebutNiveau3.format(self.code,self.implement,self.code,self.nomDuXsdPere,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code)
if self.texteInclusion != "" : self.texteXSD += self.texteInclusion
self.texteXSD += self.texteSimple
#if self.texteTypeAbstrait != "" : self.texteXSD += self.texteTypeAbstrait
self.texteXSD += self.texteCata
#self.texteXSD += self.texteElt
-
+
toutesLesKeys=set()
texteKeyRef = ""
- # Pour le nom des key_ref en creation : le type ( une seule key-ref par type. facile a retrouver)
+ # Pour le nom des key_ref en creation : le type ( une seule key-ref par type. facile a retrouver)
for clef in self.dictTypesASSDorUserASSDCrees:
existeASSD=0
texteDesFields=""
- for unOper in self.dictTypesASSDorUserASSDCrees[clef]:
+ for unOper in self.dictTypesASSDorUserASSDCrees[clef]:
if not(isinstance(unOper, Accas.OPER)) : continue
existeASSD=1
texteDesFields+=texteFieldUnitaire.format(self.code, unOper.nom)
if existeASSD : texteDesFields=texteDesFields[0:-2]
texteDesUserASSD=''
existeunUserASSD=0
- for unSimp in self.dictTypesASSDorUserASSDCrees[clef]:
+ for unSimp in self.dictTypesASSDorUserASSDCrees[clef]:
if not (isinstance(unSimp, Accas.SIMP)) : continue
texteDesUserASSD += unSimp.getXPathSansSelf() + " | "
#print (unSimp.getXPathSansSelf())
#texteFieldUnitaire='/'+self.code+":"+unSimp.nom
existeunUserASSD=1
if existeunUserASSD:
- if existeASSD : texteDesFields = texteDesFields + texteDesUserASSD[0:-2] +"/>\n\t\t"
- else: texteDesFields = texteDesUserASSD[0:-2]
- print (texteDesUserASSD)
- print (texteDesFields)
+ if existeASSD : texteDesFields = texteDesFields + texteDesUserASSD[0:-2] +"/>\n\t\t"
+ else: texteDesFields = texteDesUserASSD[0:-2]
+ #print (texteDesUserASSD)
+ #print (texteDesFields)
if texteDesFields != "" :
- texteKeyRef += producingASSDkeyRefDeclaration.format( clef ,texteDesFields)
+ texteKeyRef += producingASSDkeyRefDeclaration.format( clef ,texteDesFields)
- # Pour le nom des key-ref en utilisation : la genealogie complete ( une key-ref par utilisation et on retrouve facilement la )
+ # Pour le nom des key-ref en utilisation : la genealogie complete ( une key-ref par utilisation et on retrouve facilement la )
for clef in self.dictTypesASSDorUserASSDUtilises:
- for unSimp in self.dictTypesASSDorUserASSDUtilises[clef]:
- # il faut la genealogie
- texteKeyRef += UsingASSDkeyRefDeclaration.format(unSimp.getNomCompletAvecBloc(), unSimp.type[0].__name__,self.code, unSimp.type[0].__name__,unSimp.getXPathComplet() )
+ for unSimp in self.dictTypesASSDorUserASSDUtilises[clef]:
+ # il faut la genealogie
+ texteKeyRef += UsingASSDkeyRefDeclaration.format(unSimp.getNomCompletAvecBloc(), unSimp.type[0].__name__,self.code, unSimp.type[0].__name__,unSimp.getXPathComplet() )
#PNPN on debranche les keyref le temps de bien reflechir a leur forme
- #if texteKeyRef != '' :
+ #if texteKeyRef != '' :
# self.texteXSD = self.texteXSD[0:-3]+'>\n'
# self.texteXSD += texteKeyRef
- # self.texteXSD += fermeEltCata
-
- self.texteXSD += texteFin
+ # self.texteXSD += fermeEltCata
#if not PourTraduction : print (self.texteXSD)
+
+ import pprint
+ #pprint.pprint (cata.dictTypesXSDJumeaux)
+ #for k in cata.dictTypesXSDJumeaux:
+ # print (k.nom, k.nomComplet())
+ # print (cata.dictTypesXSDJumeaux[k][0].nom, cata.dictTypesXSDJumeaux[k][0].nomComplet())
+
+ #pprint.pprint (cata.dictTypesXSD)
+ #for k in cata.dictTypesXSD:
+ # print (k)
+ # print (cata.dictTypesXSD)
+
dico = {}
for k in list(cata.dictTypesXSD.keys()):
- if len(cata.dictTypesXSD[k]) > 1:
- index=0
- dico[k]={}
- for definition in cata.dictTypesXSD[k] :
- nom=definition.nomComplet()
- if index == 0 : dico[k][nom]=k+str(index)
- else : dico[k][nom]=k+str(index)
- index=index+1
-
+ dico[k]={}
+ different=False
+ for definition in cata.dictTypesXSD[k] :
+ if definition.label == 'BLOC' or definition.label == 'BlocAmbigu':continue
+ if definition.nomDuTypePyxb != 'T_'+definition.nom : different=True
+ listeATraiter=[definition.geneaCompleteSousFormeDeListe(),]
+ while listeATraiter != [] :
+ listeGenea=listeATraiter[0]
+ listeATraiter=listeATraiter[1:]
+ txtNomComplet=''
+ indexMC=0
+ for MC in listeGenea:
+ txtNomComplet=txtNomComplet+'_'+MC.nom
+ if MC in list(cata.dictTypesXSDJumeaux.keys()) :
+ for MCJumeau in cata.dictTypesXSDJumeaux[MC]:
+ # attention nvlleGenalogie n a pas de sens en Accas
+ nvlleGenalogie=listeGenea[:indexMC]+MCJumeau.geneaCompleteSousFormeDeListe()
+ listeATraiter.append(nvlleGenalogie)
+ indexMC=indexMC+1
+ dico[k][txtNomComplet]=definition.nomDuTypePyxb
+ if dico[k]== {} or (not different) : del dico[k]
+ import pprint
+ #pprint.pprint(dico)
+ # PN reflechir a ce *** de nom
+ #if dico != {} : self.texteXSD += texteAnnotation.format(self.nomDuCodeDumpe,str(dico))
+ if dico != {} : self.texteXSD += texteAnnotation.format(str(dico))
+
#import pprint
#if (not PourTraduction) and (dico != {}) : pprint.pprint(dico)
print ('__________________________ decommenter pour le texteXSD________________________')
- print (self.texteXSD)
+ #print (dico)
+ #print (self.texteXSD)
+ self.texteXSD += texteFin
return self.texteXSD
-
+
def dumpLesCommandes(self):
- cata = CONTEXT.getCurrentCata()
+ cata = CONTEXT.getCurrentCata()
fichierCataSourceExt=os.path.basename(cata.cata.__file__)
fichierCataSource, extension=os.path.splitext(fichierCataSourceExt)
importCataSource=__import__(fichierCataSource,{},{})
texte=""
for m in sys.modules:
- monModule=sys.modules[m]
- try :
- if m in ('os', 'sys', 'inspect', 'six', 'pickle', 'codecs') : continue
- if m in ('cPickle', 'pprint', 'dis', '_sre', 'encodings.aliases'): continue
- if m in ('numbers', 'optparse', 'binascii', 'posixpath') : continue
- if m in ('_locale', '_sysconfigdata_nd', 'gc', 'functools') : continue
- if m in ('posixpath', 'types', 'posix', 'prefs') : continue
- if m in ('warnings', 'types', 'posix', 'prefs') : continue
- if monModule.__name__[0:15] == '_sysconfigdata_' : continue
- if monModule.__name__ == '__future__' : continue
- if monModule.__name__[0:3] == 'Ihm' : continue
- if monModule.__name__[0:5] == 'numpy' : continue
- if monModule.__name__[0:5] == 'Noyau' : continue
- if monModule.__name__[0:5] == 'Accas' : continue
- if monModule.__name__[0:7] == 'convert' : continue
- if monModule.__name__[0:7] == 'Efi2Xsd' : continue
- if monModule.__name__[0:7] == 'Editeur' : continue
- if monModule.__name__[0:9] == 'generator' : continue
- if monModule.__name__[0:10] == 'Validation' : continue
- if monModule.__name__[0:10] == 'Extensions' : continue
- if monModule.__name__[0:12] == 'InterfaceQT4' : continue
- if monModule.__name__ == fichierCataSource : continue
- texte= texte + "try : import "+ monModule.__name__ + " \n"
- texte= texte + "except : pass \n"
- texte= texte + "try : from "+ monModule.__name__ + ' import * \n'
- texte= texte + "except : pass \n"
- except :
- pass
+ monModule=sys.modules[m]
+ try :
+ if m in ('os', 'sys', 'inspect', 'six', 'pickle', 'codecs') : continue
+ if m in ('cPickle', 'pprint', 'dis', '_sre', 'encodings.aliases'): continue
+ if m in ('numbers', 'optparse', 'binascii', 'posixpath') : continue
+ if m in ('_locale', '_sysconfigdata_nd', 'gc', 'functools') : continue
+ if m in ('posixpath', 'types', 'posix', 'prefs') : continue
+ if m in ('warnings', 'types', 'posix', 'prefs') : continue
+ if monModule.__name__[0:15] == '_sysconfigdata_' : continue
+ if monModule.__name__ == '__future__' : continue
+ if monModule.__name__[0:3] == 'Ihm' : continue
+ if monModule.__name__[0:5] == 'numpy' : continue
+ if monModule.__name__[0:5] == 'Noyau' : continue
+ if monModule.__name__[0:5] == 'Accas' : continue
+ if monModule.__name__[0:7] == 'convert' : continue
+ if monModule.__name__[0:7] == 'Efi2Xsd' : continue
+ if monModule.__name__[0:7] == 'Editeur' : continue
+ if monModule.__name__[0:9] == 'generator' : continue
+ if monModule.__name__[0:10] == 'Validation' : continue
+ if monModule.__name__[0:10] == 'Extensions' : continue
+ if monModule.__name__[0:12] == 'InterfaceQT4' : continue
+ if monModule.__name__ == fichierCataSource : continue
+ texte= texte + "try : import "+ monModule.__name__ + " \n"
+ texte= texte + "except : pass \n"
+ texte= texte + "try : from "+ monModule.__name__ + ' import * \n'
+ texte= texte + "except : pass \n"
+ except :
+ pass
newModule=imp.new_module('__main__')
exec (texte, newModule.__dict__)
allClassToDump=[]
for i in dir(importCataSource):
- if i not in dir(newModule):
+ if i not in dir(newModule):
allClassToDump.append(importCataSource.__dict__[i])
-
+
self.texteSimple = ''
self.texteComplexe = ''
c.nomDuCodeDumpe=self.nomDuCodeDumpe
c.code=self.implement
c.dumpXsd()
-
+
self.texteSimple += c.texteSimple
self.texteComplexe += c.texteComplexe
- #c.texteElt=eltCompoDsSequenceInExtension.format(c.nom,self.code,c.nomDuTypePyxb)
- c.texteElt=eltEtape.format(c.nom,self.implement,c.nomDuTypePyxb,self.implement)
+ if c.ang != '' : c.texteElt = eltEtapeWithHelp.format(c.nom,self.implement,c.nomDuTypePyxb,self.implement,c.ang)
+ elif c.fr != '' : c.texteElt = eltEtapeWithHelp.format(c.nom,self.implement,c.nomDuTypePyxb,self.implement,c.fr)
+ else : c.texteElt = eltEtape.format(c.nom,self.implement,c.nomDuTypePyxb,self.implement)
self.texteCata += c.texteElt
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2021 EDF R&D
+#
+# 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.
+#
+# 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
+#
+
import sys,os
import inspect
import traceback
def trace():
- traceback.print_stack()
+ traceback.print_stack()
#import raw.efficas as efficas
import types
sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
try :
- import pyxb
- import pyxb.binding
- import pyxb.binding.basis
- #import pyxb.utils.utility
- #import pyxb.utils.domutils
+ import pyxb
+ import pyxb.binding
+ import pyxb.binding.basis
+ #import pyxb.utils.utility
+ #import pyxb.utils.domutils
except : pass
from Accas import A_ASSD
class X_OBJECT:
# -------------
- def delObjPyxb(self, debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if self.nom == 'Consigne' : return None
- trouve = False
-
- if debug : print ('in delObjPyxb')
- if debug : print (self.perePyxb.objPyxb.orderedContent())
- if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
-
- elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
- if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb)
- if (elt.elementDeclaration.isPlural()):
- if debug : print ('je suis Plural')
- # monIndexInOrderedContent=0
- # for c in self.perePyxb.objPyxb.orderedContent():
- # if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1
- # listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
- # if len(listeObjetsAccas) == 1 : monIndex=0
- # else : monIndex=listeObjetsAccas.index(self)
- # listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
- # listeObjetsPyxb.pop(monIndex)
- # self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent)
- for c in self.perePyxb.objPyxb.orderedContent():
- trouve=False
- if isinstance(c._Content__value,list) and isinstance(c._Content__value[0],type(self.objPyxb)):
- monIndex=c.value.index(self.objPyxb)
- trouve = True
- if trouve : break
- if not trouve : print ("************ pas trouve au delete"); return
- listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
- listeObjetsPyxb.pop(monIndex)
- # si dernier ?
- else :
- newOrderedContent = []
- for i in self.perePyxb.objPyxb.orderedContent():
- if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue
- newOrderedContent.append(i)
- if not trouve : print ('elt a supprimer ', self.nom, 'non trouve')
- for i in range(len(newOrderedContent)):
- self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i]
- self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent))
-
- setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None)
+ def delObjPyxb(self, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if self.nom == 'Consigne' : return None
+ trouve = False
+
+ if debug : print ('--------------- in delObjPyxb pour ' , self.nom)
+ if debug : print (self.perePyxb.objPyxb.orderedContent())
+ if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+
+ elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+ if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb)
+ if (elt.elementDeclaration.isPlural()):
+ if debug : print ('je suis Plural')
+ # monIndexInOrderedContent=0
+ # for c in self.perePyxb.objPyxb.orderedContent():
+ # if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1
+ # listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
+ # if len(listeObjetsAccas) == 1 : monIndex=0
+ # else : monIndex=listeObjetsAccas.index(self)
+ # listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+ # listeObjetsPyxb.pop(monIndex)
+ # self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent)
+ for c in self.perePyxb.objPyxb.orderedContent():
+ trouve=False
+ if isinstance(c._Content__value,list) and isinstance(c._Content__value[0],type(self.objPyxb)):
+ monIndex=c.value.index(self.objPyxb)
+ trouve = True
+ if trouve : break
+ if not trouve : print ("************ pas trouve au delete"); return
+ listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+ listeObjetsPyxb.pop(monIndex)
+ # si dernier ?
+ else :
+ newOrderedContent = []
+ for i in self.perePyxb.objPyxb.orderedContent():
+ if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue
+ newOrderedContent.append(i)
+ if not trouve : print ('elt a supprimer ', self.nom, 'non trouve')
+ for i in range(len(newOrderedContent)):
+ self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i]
+ self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent))
+
+ setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None)
+ if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+
+
+
+ def addObjPyxb(self,indiceDsLeContenu,debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
+ # adherence Accas sur le parent
+ parent=self.parent
+ while (parent.isBLOC()):
+ if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb()
+ parent=parent.parent
+ self.perePyxb=parent
+
+ if debug :print ('indiceDsLeContenu',indiceDsLeContenu)
+ if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+
+ #if self.objPyxb ! = None : self.objPyxb.objAccas=self
+ elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+ self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt)
+ if (elt.elementDeclaration.isPlural()):
+ # je suis donc un MCList
+ listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
+ if len(listeObjetsAccas) == 1 : monIndex=1
+ else : monIndex=listeObjetsAccas.index(self)
+ listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+ listeObjetsPyxb.insert(monIndex,self.objPyxb)
+ else :
+ setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+ if debug : print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
+
+
+ def rangDsPyxb(self):
+ monRangEnAccas=self.parent.mcListe.index(self)
+ rangEnPyxb=0
+ for frere in self.parent.mcListe[0: monRangEnAccas] :
+ rangEnPyxb += frere.longueurDsArbre()
+ return rangEnPyxb
-
-
- def addObjPyxb(self,indiceDsLeContenu,debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
- # adherence Accas sur le parent
- parent=self.parent
- while (parent.isBLOC()):
- if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb()
- parent=parent.parent
- self.perePyxb=parent
-
- if debug :print ('indiceDsLeConten',indiceDsLeContenu)
- if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
-
- #if self.objPyxb ! = None : self.objPyxb.objAccas=self
- elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
- self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt)
- if (elt.elementDeclaration.isPlural()):
- # je suis donc un MCList
- listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
- if len(listeObjetsAccas) == 1 : monIndex=1
- else : monIndex=listeObjetsAccas.index(self)
- listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
- listeObjetsPyxb.insert(monIndex,self.objPyxb)
- else :
- setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
- if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
- print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
-
-
- def rangDsPyxb(self):
- monRangEnAccas=self.parent.mcListe.index(self)
- rangEnPyxb=0
- for frere in self.parent.mcListe[0: monRangEnAccas] :
- rangEnPyxb += frere.longueurDsArbre()
- return rangEnPyxb
-
class X_MCSIMP(X_OBJECT):
# -----------------------
-
- def buildObjPyxb(self, debug=False) :
- if not self.cata or not self.cata.modeleMetier : return
- if self.nom == 'Consigne' : return None
- if debug : print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
- if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
- elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
-
- if self.objPyxbDeConstruction != None :
- self.objPyxb = self.objPyxbDeConstruction
+
+ def buildObjPyxb(self, debug=True) :
+ if not self.cata or not self.cata.modeleMetier : return
+ if self.nom == 'Consigne' : return None
+ if debug : print (self.definition.nomComplet())
+ if debug : print ('_______________ X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
+ if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
+ elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
+
+ if self.objPyxbDeConstruction != None :
+ self.objPyxb = self.objPyxbDeConstruction
+ self.maClasseModeleMetier =type(self.objPyxb)
+ self.objPyxbDeConstruction = None
+ if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
+ self.needFactory=True
+ self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
+ else : self.needFactory=False
+ else :
+ self.monNomClasseModeleMetier ='T_'+self.nom
+ if hasattr(self.definition,'nomXML') and self.definition.nomXML != None : self.monNomClasseModeleMetier='T_'+self.definition.nomXML
+ if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
+ nomComplet=self.definition.nomComplet()
+ if nomComplet in list(self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier].keys()):
+ self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][nomComplet]
+ if debug : print ('Pour', self.nom, ' le type est ', self.monNomClasseModeleMetier)
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+
+ if self.waitMatrice() :
+ #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas
+ # 27/04 je ne sais pas si cela posera pb
+ self.listeLines = []
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ self.maClasseModeleMetier_line=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_line')
+ if debug : print ('Matrice de type ', self.maClasseModeleMetier)
+ for v in self.valeur:
+ l=self.maClasseModeleMetier_line(v)
+ self.listeLines.append(l)
+ self.objPyxb=self.maClasseModeleMetier(*self.listeLines)
+ #if self.objPyxb !=None : self.objPyxb.objAccas=self
+ if debug : print ('Matrice ', self.nom, self.objPyxb)
+ return
+ if self.waitTuple() :
+ self.objPyxb = []
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ # if faut traiter l autre cas
+ # et optimiser
+ if self.definition.max !=1 :
+ for v in self.valeur :
+ if debug : print ('je traite ', v)
+ listeConstruction=[]
+ for i in range(self.combienEltDsTuple()):
+ num=i+1
+ maClasseElt=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_n'+str(num))
+ listeConstruction.append(maClasseElt(v[i]))
+ self.objPyxb.append(self.maClasseModeleMetier(*listeConstruction))
+ if debug : print (self.objPyxb)
+ return
+ if self.waitChaineAvecBlancs() and self.definition.max > 1:
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ if debug : print (self.valeur)
+ if self.valeur != None and self.valeur != [] : self.objPyxb = self.maClasseModeleMetier(*self.valeur)
+ else :self.objPyxb = self.maClasseModeleMetier()
+ if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
+ if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
+ return
+
+
+ if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
+ if debug : print ('needFactory')
+ self.needFactory=True
+ self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
+ else : self.needFactory=False
+
+ if self.valeur != None :
+ if self.needFactory :
+ if self.definition.max > 1 :
+ # PNPN A corriger
+ # self.objPyxb=self.maClasseModeleMetier(self.valeur)
+ self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
+ else : self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
+ else : self.objPyxb=self.maClasseModeleMetier(self.valeur)
+ else :
+ if self.needFactory : self.objPyxb=None
+ else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False)
+
+
+ #if self.objPyxb !=None : self.objPyxb.objAccas=self
+ if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
+ if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
+
+
+ def setValeurObjPyxb(self,newVal, debug=True):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
+ if debug : print (' self.perePyxb = ', self.perePyxb.nom)
+ if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
+ if debug : print ('debut du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+ #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
+ if newVal != None :
+ if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal)
+ else : nvlObj=self.maClasseModeleMetier(newVal)
+ else :
+ if self.needFactory : nvlObj =None
+ else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False)
+ self.val=newVal
+ if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+ if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) :
+ newVal = newVal.nom
+ setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
+ trouve=False
+ indice=0
+ for i in self.perePyxb.objPyxb.orderedContent():
+ if i.elementDeclaration.id() == self.nom:
+ #if isinstance(i._Content__value, self.maClasseModeleMetier) :
+ self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
+ del(self.perePyxb.objPyxb.orderedContent()[-1])
+ trouve=True
+ break
+ indice+=1
+ if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
+ self.objPyxb=nvlObj
#self.objPyxb.objAccas=self
- self.maClasseModeleMetier =type(self.objPyxb)
- self.objPyxbDeConstruction = None
- if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
- self.needFactory=True
- self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
- else : self.needFactory=False
- else :
- self.monNomClasseModeleMetier='T_'+self.nom
- if self.nom in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
- self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.nom][self.nomComplet()]
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
- if debug : print ('needFactory')
- self.needFactory=True
- self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
- else : self.needFactory=False
-
- if self.valeur != None :
- if self.needFactory : self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
- else : self.objPyxb=self.maClasseModeleMetier(self.valeur)
- else :
- if self.needFactory : self.objPyxb=None
- else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False)
-
-
- # c est la que le bat blesse
- #if self.objPyxb !=None : self.objPyxb.objAccas=self
- #if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
- if debug : print ('fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
-
-
- def setValeurObjPyxb(self,newVal, debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
- if debug : print (' self.perePyxb = ', self.perePyxb.nom)
- if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) : newVal = newVal.nom
- if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
-
- #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
- if newVal != None :
- if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal)
- else : nvlObj=self.maClasseModeleMetier(newVal)
- else :
- if self.needFactory : nvlObj =None
- else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False)
- self.val=newVal
-
- setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
- trouve=False
- indice=0
- for i in self.perePyxb.objPyxb.orderedContent():
- if isinstance(i._Content__value, self.maClasseModeleMetier) :
- self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
- del(self.perePyxb.objPyxb.orderedContent()[-1])
- trouve=True
- break
- indice+=1
- if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
- self.objPyxb=nvlObj
- #self.objPyxb.objAccas=self
- if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
-
-
-
+ if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+
+
class X_MCCOMPO(X_OBJECT) :
# -------------------------
-#
- def buildObjPyxb(self,mc_list, debug=False) :
- if not self.cata or not self.cata.modeleMetier : return
- print ('X_MCCOMPO', self.nom)
- self.listArg=[]
- self.dicoArg={}
- for objAccas in mc_list :
- if objAccas.nature == 'MCBLOC' :
- self.exploreBLOC(objAccas)
- elif objAccas.nature == 'MCList' :
- if objAccas[0].definition.max > 1 :
- self.listArg.append(objAccas) # les MCList n ont pas objPyxb
- self.dicoArg[objAccas.nom]=[]
- for fils in objAccas :
- fils.perePyxb=self
- self.dicoArg[objAccas.nom].append(fils.objPyxb)
- else :
- objAccas[0].perePyxb=self
- self.dicoArg[objAccas.nom]=objAccas[0].objPyxb
- self.listArg.append(objAccas[0].objPyxb)
- else :
- if objAccas.nom == 'Consigne' : continue
- self.listArg.append(objAccas.objPyxb)
- self.dicoArg[objAccas.nom]=objAccas.objPyxb
- objAccas.perePyxb=self
-
- if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg)
- if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg)
-
- self.monNomClasseModeleMetier='T_'+self.nom
- if self.nom in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
- self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.nom][self.nomComplet()]
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
-
- # PN : Ne doit-on pas tester avant
- if self.objPyxbDeConstruction != None :
- self.objPyxb = self.objPyxbDeConstruction
- self.objPyxbDeConstruction = None
- if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
- if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent())
- else :
- if debug : print (self.nom)
- if debug : print (self.listArg)
- # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
- self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
- newOrderedContent=[]
- for obj in self.listArg:
- # on teste le caractere pluriel
- if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb
- max=obj[0].definition.max
- else : max = 1
- if max == 1 :
- if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ):
- newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
+#
+ def buildObjPyxb(self,mc_list, debug=False) :
+ if not self.cata or not self.cata.modeleMetier : return
+
+ #if self.nom == 'Scenario_data' : debug=1
+ if debug : print ('X_MCCOMPO', self.nom)
+ deepDebug=False
+ self.listArg=[]
+ self.dicoArg={}
+ for objAccas in mc_list :
+ if objAccas.nature == 'MCBLOC' :
+ self.exploreBLOC(objAccas)
+ elif objAccas.nature == 'MCList' :
+ if objAccas[0].definition.max > 1 :
+ self.listArg.append(objAccas) # les MCList n ont pas objPyxb
+ self.dicoArg[objAccas.nom]=[]
+ for fils in objAccas :
+ fils.perePyxb=self
+ self.dicoArg[objAccas.nom].append(fils.objPyxb)
+ else :
+ objAccas[0].perePyxb=self
+ self.dicoArg[objAccas.nom]=objAccas[0].objPyxb
+ self.listArg.append(objAccas[0].objPyxb)
else :
- newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] )
- else : # element Pural
- for c in self.objPyxb.orderedContent() :
- if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(obj[0].objPyxb)): newOrderedContent.append(c)
-
- for i in range(len(self.listArg)):
- self.objPyxb.orderedContent()[i]=newOrderedContent[i]
- if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,newOrderedContent,self.objPyxb.orderedContent())
- #self.objPyxb.objAccas=self
- if debug : print ('fin buildObjetPyxb _______________________________________')
- # assert(self.objPyxb.validateBinding())
-
-
- def exploreBLOC(self,objAccas):
- print (' ds exploreBLOC', objAccas .nom)
- laListeSsLesBlocs=[]
- for fils in objAccas.mcListe:
- if fils.nature == 'MCBLOC' :
- self.exploreBLOC(fils)
- elif fils.nature == 'MCList' :
- #print ('exploreBLOC des MCList', fils.nom)
- self.dicoArg[fils.nom]=[]
- if fils[0].definition.max > 1 :
- #print ('ajout de ', fils)
- self.listArg.append(fils) # les MCList n ont pas objPyxb
- for objFils in fils :
- objFils.perePyxb=self
- self.dicoArg[fils.nom].append(objFils.objPyxb)
- else:
- fils[0].perePyxb=self
- self.dicoArg[fils.nom]=fils[0].objPyxb
- self.listArg.append(fils[0].objPyxb)
+ if objAccas.nom == 'Consigne' : continue
+ print ('______________', objAccas.nom, objAccas.objPyxb)
+ self.listArg.append(objAccas.objPyxb)
+ self.dicoArg[objAccas.nom]=objAccas.objPyxb
+ objAccas.perePyxb=self
+
+ if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg)
+ if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg)
+
+
+ self.monNomClasseModeleMetier='T_'+self.nom
+ if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
+ self.nomComplet=self.definition.nomComplet()
+ self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][self.nomComplet]
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+
+ # PN : Ne doit-on pas tester avant
+ if self.objPyxbDeConstruction != None :
+ self.objPyxb = self.objPyxbDeConstruction
+ self.objPyxbDeConstruction = None
+ if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
+ if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent())
else :
- if fils.nom == "Consigne" : continue
- #print ('ajout de 2', fils.objPyxb)
- self.listArg.append(fils.objPyxb)
- self.dicoArg[fils.nom]=fils.objPyxb
- fils.perePyxb=self
- print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom)
-
-
-
-
+ if debug : print (self.listArg)
+ if debug : print (self.maClasseModeleMetier)
+ # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
+ self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
+ if deepDebug :
+ print ('debut de __________ new ordered content')
+ for o in self.objPyxb.orderedContent():
+ print ('o', o)
+ print ('value', o.value)
+ print ('type', type(o.value))
+ print ('id', id(o.value))
+ print ('fin __________ new ordered content')
+ print ('debut de __________ listArg')
+ for obj in self.listArg:
+ print ('obj',obj)
+ print ('type obj', type(obj))
+ print ('id(obj)', id(obj))
+ print ('fin __________ listArg')
+
+ newOrderedContent=[]
+ if debug : print ('list Arg')
+ for obj in self.listArg:
+ if debug :
+ print ('obj',obj)
+ print ('type obj', type(obj))
+ print ('id(obj)', id(obj))
+
+ # on teste le caractere pluriel
+ if isinstance(obj, list):
+ for c in self.objPyxb.orderedContent() :
+ if hasattr (c,'value') and c.value == obj :
+ newOrderedContent.append(c)
+ continue
+ if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb
+ max=obj[0].definition.max
+ else : max = 1
+ if max == 1 :
+ #if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ):
+ # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
+ #else :
+ # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] )
+ # PN 22 sept 2020 . pourquoi pas toujours l id. le tyoe ne convient pas en cas d union d enum
+ newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
+ else : # element Pural
+ for c in self.objPyxb.orderedContent() :
+ if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(obj[0].objPyxb)): newOrderedContent.append(c)
+
+ for i in range(len(self.listArg)):
+ self.objPyxb.orderedContent()[i]=newOrderedContent[i]
+ debug=True
+ if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb)
+ if debug : print ('X_MCCOMPO', self.listArg)
+ if debug : print ('X_MCCOMPO', newOrderedContent)
+ if debug : print ( 'X_MCCOMPO',self.objPyxb.orderedContent())
+ if debug : print ('fin buildObjetPyxb _______________________________________')
+ # assert(self.objPyxb.validateBinding())
+
+
+ def exploreBLOC(self,objAccas,debug=False):
+ if debug : print (' ds exploreBLOC', objAccas.nom)
+ laListeSsLesBlocs=[]
+ for fils in objAccas.mcListe:
+ if fils.nature == 'MCBLOC' :
+ self.exploreBLOC(fils)
+ elif fils.nature == 'MCList' :
+ #print ('exploreBLOC des MCList', fils.nom)
+ self.dicoArg[fils.nom]=[]
+ if fils[0].definition.max > 1 :
+ #print ('ajout de ', fils)
+ self.listArg.append(fils) # les MCList n ont pas objPyxb
+ for objFils in fils :
+ objFils.perePyxb=self
+ self.dicoArg[fils.nom].append(objFils.objPyxb)
+ else:
+ fils[0].perePyxb=self
+ self.dicoArg[fils.nom]=fils[0].objPyxb
+ self.listArg.append(fils[0].objPyxb)
+ else :
+ if fils.nom == "Consigne" : continue
+ self.listArg.append(fils.objPyxb)
+ self.dicoArg[fils.nom]=fils.objPyxb
+ fils.perePyxb=self
+ if debug : print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom)
+ if debug : print ('fin ds exploreBLOC', objAccas .nom)
+
+
+
+
class X_MCBLOC (X_MCCOMPO):
# --------------------------
- def buildObjPyxb(self,mc_list,debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
- self.perePyxb=None
- self.objPyxb=None
-
- def addObjPyxb(self, indiceDsLeContenu, debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
- rangDeLObjet=indiceDsLeContenu
- for obj in self.mcListe:
- obj.addObjPyxb( rangDeLObjet)
- rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
-
- def delObjPyxb(self, debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
- for obj in self.mcListe:
- obj.delObjPyxb()
- if debug : print ('fin X_MCBLOC delObjPyxb --------------------------')
+ def buildObjPyxb(self,mc_list,debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
+ self.perePyxb=None
+ self.objPyxb=None
+
+ def addObjPyxb(self, indiceDsLeContenu, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
+ rangDeLObjet=indiceDsLeContenu
+ for obj in self.mcListe:
+ obj.addObjPyxb( rangDeLObjet)
+ rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
+
+ def delObjPyxb(self, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
+ for obj in self.mcListe:
+ obj.delObjPyxb()
+ if debug : print ('fin X_MCBLOC delObjPyxb --------------------------')
class X_MCLIST (X_MCCOMPO):
# --------------------------
-
- def buildObjPyxb(self,mc_list, debug=False):
- if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list)
- pass
-
- def addObjPyxb(self,indiceDsLeContenu, debug=False):
- if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu)
- rangDeLObjet=indiceDsLeContenu
- for objFils in self :
- objFils.addObjPyxb(rangDeLObjet)
- rangDeLObjet= rangDeLObjet + 1
-
- def delObjPyxb(self, debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
- for obj in self:
- obj.delObjPyxb()
- if debug : print ('fin X_MCLIST delObjPyxb --------------------------')
+
+ def buildObjPyxb(self,mc_list, debug=False):
+ if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list)
+ pass
+
+ def addObjPyxb(self,indiceDsLeContenu, debug=False):
+ if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu)
+ rangDeLObjet=indiceDsLeContenu
+ for objFils in self :
+ objFils.addObjPyxb(rangDeLObjet)
+ rangDeLObjet= rangDeLObjet + 1
+
+ def delObjPyxb(self, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
+ for obj in self:
+ obj.delObjPyxb()
+ if debug : print ('fin X_MCLIST delObjPyxb --------------------------')
class X_MCFACT (X_MCCOMPO):
# -------------------------
- pass
+ pass
class X_ETAPE(X_MCCOMPO) :
# -------------------------
- def metAJourNomASSD(self, nom,debug=False):
- if not self.cata or not self.cata.modeleMetier : return
- if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
- self.objPyxb.name=nom
+ def metAJourNomASSD(self, nom,debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
+ self.objPyxb.sdName=nom
class X_JDC (X_MCCOMPO):
# ---------------------
-
- def __init__(self):
- self.perePyxb=None
- if not self.cata or not self.cata.modeleMetier : return
- #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
- if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
- self.monNomClasseModeleMetier=self.code
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- self.objPyxb=self.maClasseModeleMetier()
- #self.objPyxb.objAccas=self
- pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.NEVER)
- pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
- pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
-
-
-
- def enregistreEtapePyxb(self,etape,indice=0):
- # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
- # ne contient pas indice pour l insant
- #print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
- #print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
- if not self.cata.modeleMetier : return
- self.objPyxb.append(etape.objPyxb)
- etape.perePyxb = self
-
- #print (self.objPyxb.orderedContent())
- #if indice != (len(self.objPyxb.orderedContent()) ) :
- # tampon=self.objPyxb.orderedContent()[-1]
- # for i in reversed(range(len(self.objPyxb.orderedContent()))):
- # self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1]
- # if i == indice + 1 : break
- # self.objPyxb.orderedContent()[indice]=tampon
-
- #print (self.objPyxb.orderedContent())
- #try:
- # self.objPyxb.validateBinding()
- #except pyxb.ValidationError as e:
- # print(e.details())
-
- def toXml(self,fichier=None):
- print ('ds to XML')
- if not self.cata or not self.cata.modeleMetier : return
- print (' to xml ***************',self.objPyxb,'***************',)
- print (' to xml ***************',self,'***************',)
- print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
- print(self.objPyxb.toDOM().toprettyxml())
- print(self.objPyxb.toxml())
- return (self.objPyxb.toDOM().toprettyxml())
-
-
- def analyseFromXML(self):
- print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
- print (self.procedure)
- if self.procedure == "" : return
- self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
- for contentObjEtape in self.objPyxb.orderedContent():
- objEtape=contentObjEtape.value
- objEtape.dictArgs=(self.pyxbToDict(objEtape))
- objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
- objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
- # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20
- objEtape.dictPyxb['objEnPyxb']=objEtape
- objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
- print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
- maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
- print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- print (maClasseAccas)
- print (objEtape , type(objEtape))
- print (objEtape.dictPyxb)
-
- print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
- print (objEtape._ExpandedName, type(objEtape._ExpandedName))
- print ('dictArgs',objEtape.dictArgs)
- print ('dictPyxb',objEtape.dictPyxb)
- objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
- print (objAccasEtape)
- print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
-
-
- def pyxbToDict(self,objAAnalyser):
- # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
- # faudrait - il travailler sur les types des objets ?
- # c est a revoir -> fonction cast a prevoir ds les 2 sens
- if objAAnalyser is None: return
- print ('debut pour_____________________________ ',objAAnalyser)
- dictArgs = {}
- # traitement SIMP
- # ---------------
- if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
- #print ('je suis un MCSimple')
- # il faut traiter les UserASSD
- # traitement scalaire
- objAAnalyser.dictPyxb=objAAnalyser
- if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
- #print ('je suis un scalaire')
- #try : # python 3
- if isinstance(objAAnalyser, str) : return str(objAAnalyser)
- if isinstance(objAAnalyser, int) : return int(objAAnalyser)
- if isinstance(objAAnalyser, float): return float(objAAnalyser)
- if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser)
- #except : # python 2
- #if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser)
- #if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser)
- #if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser)
- #print ('________ fin pour ', objAAnalyser, 'retour', repr(objAAnalyser))
- return objAAnalyser
- else :
- #print ('je suis une liste')
- laListe=[]
- for obj in objAAnalyser :
- if isinstance(obj, str): laListe.append (str(obj))
- elif isinstance(obj, int): laListe.append (int(obj))
- elif isinstance(obj, float): laListe.append (float(obj))
- elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj))
- else : laListe.append(obj)
- return (laListe)
- # if debug : print ('je suis Plural')
- # ou ? return objAAnalyser
- #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
- #pour une enum getattr(value dans le type)
- # return pythonLiteral(ReferenceFacet(facet=value, **kw))
- #print ('je suis un mot complexe')
- # traitement FACT ou BLOC
- # ------------------------
- # il faut traiter les fact multiples
- objAAnalyser.dictPyxb = {}
- objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
- #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
- # objPyxbName = expandedName.localName()
- # objPyxbValue = getattr(objAAnalyser, objPyxbName)
- for objEltContentFils in objAAnalyser.orderedContent():
- objPyxbValue = objEltContentFils.value
- objPyxbName = objEltContentFils.elementDeclaration.id()
- elementDeclaration = objEltContentFils.elementDeclaration
- #if objPyxbValue == None or objPyxbValue == [] : continue
- if elementDeclaration.isPlural():
- if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[]
- if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[]
- dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue))
- objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb)
- else:
- dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
- objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
- # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb)
- #print ('avec la valeur', 'de', objAAnalyser.dictPyxb[objPyxbName])
-
- #print ("***********************************")
- #print ('pyxbToDict fin pour ********** ', objAAnalyser)
- #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
- #print ('pyxbToDict fin pour ********** ', objAAnalyser)
- #print ("***********************************")
- #print (dictArgs)
- #print (dictPyxb)
- #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
- #print ('fin pour ',objAAnalyser)
- return dictArgs
-
-
+
+ def __init__(self):
+ self.perePyxb=None
+ if not self.cata or not self.cata.modeleMetier : return
+ #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
+ if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
+ self.monNomClasseModeleMetier=self.code
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ self.objPyxb=self.maClasseModeleMetier()
+ #self.objPyxb.objAccas=self
+ pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.NEVER)
+ pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+ pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+
+
+
+ def enregistreEtapePyxb(self,etape,indice=0):
+ # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
+ # ne contient pas indice pour l insant
+ # print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
+ # print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
+ if not self.cata.modeleMetier : return
+ self.objPyxb.append(etape.objPyxb)
+ etape.perePyxb = self
+
+ #print (self.objPyxb.orderedContent())
+ #if indice != (len(self.objPyxb.orderedContent()) ) :
+ # tampon=self.objPyxb.orderedContent()[-1]
+ # for i in reversed(range(len(self.objPyxb.orderedContent()))):
+ # self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1]
+ # if i == indice + 1 : break
+ # self.objPyxb.orderedContent()[indice]=tampon
+
+ #print (self.objPyxb.orderedContent())
+ #try:
+ # self.objPyxb.validateBinding()
+ #except pyxb.ValidationError as e:
+ # print(e.details())
+
+ def toXml(self,fichier=None, debug=False):
+ if debug : print ('ds to XML')
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print (' to xml ***************',self.objPyxb,'***************',)
+ if debug : print (' to xml ***************',self,'***************',)
+ if debug : print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
+ if debug : print(self.objPyxb.toDOM().toprettyxml())
+ if debug : print(self.objPyxb.toxml())
+ return (self.objPyxb.toDOM().toprettyxml())
+
+
+ def analyseFromXML(self,debug=False):
+ print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
+ if self.procedure == "" : return
+ self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
+ if not hasattr(self.cata.modeleMetier,'AccasUserAssd'):
+ from Accas import UserASSD
+ self.cata.modeleMetier.AccasUserAssd=UserASSD
+ for contentObjEtape in self.objPyxb.orderedContent():
+ objEtape=contentObjEtape.value
+ objEtape.dictArgs=(self.pyxbToDict(objEtape))
+ objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
+ objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
+ # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20
+ objEtape.dictPyxb['objEnPyxb']=objEtape
+ objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
+ if debug : print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
+ maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+ if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+ if debug : print ('maClasseAccas ', maClasseAccas)
+ if debug : print ('objEtape ', objEtape , type(objEtape))
+ if debug : print ('nomClasseAccas ',objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
+ if debug : print ('_ExpandedName ', objEtape._ExpandedName, type(objEtape._ExpandedName))
+ if debug : print ('dictArgs ',objEtape.dictArgs)
+ if debug : print ('dictPyxb ',objEtape.dictPyxb)
+ # attention au call d Oper qui renomme l objet pyxb
+ if hasattr(objEtape,'sdName') :
+ if debug and hasattr(objEtape,'sdName') :print ('sdName',objEtape.sdName)
+ objAccasEtape=maClasseAccas(nomXML=objEtape.sdName, **(objEtape.dictArgs))
+ else : objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
+ if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+
+
+ def pyxbToDict(self,objAAnalyser, debug=True):
+ # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
+ if objAAnalyser is None: return
+ if debug : print ('debut pour_____________________________ ',objAAnalyser)
+ dictArgs = {}
+ # traitement SIMP
+ # ---------------
+ # a revoir pour les matrices
+ # et les tuples
+ debug = 1
+ if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
+ if debug : print ('je suis un MCSimple', objAAnalyser)
+ # traitement scalaire
+ objAAnalyser.dictPyxb=objAAnalyser
+ if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
+ if debug : print ('je suis un scalaire')
+ if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd) or isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssdMultiple):
+ if debug : print ('je suis un UserASSD')
+ laClassePyxbUserAssd=type(objAAnalyser)
+ return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
+ if isinstance(objAAnalyser, pyxb.binding.datatypes.boolean) : return bool(objAAnalyser)
+ if isinstance(objAAnalyser, str) : return str(objAAnalyser)
+ if isinstance(objAAnalyser, int) : return int(objAAnalyser)
+ if isinstance(objAAnalyser, float): return float(objAAnalyser)
+ if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser)
+ return objAAnalyser
+ else :
+ if debug : print ('je suis une liste')
+ laListe=[]
+ # liste homogene
+ if len(objAAnalyser)>0:
+ if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
+ else : estUnUserASSDorUserASSDMultiple=False
+ else : estUnUserASSDorUserASSDMultiple=False
+ if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
+ for obj in objAAnalyser :
+ if estUnUserASSDorUserASSDMultiple:
+ laClassePyxbUserAssd=obj.__class__
+ laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
+ elif isinstance(obj, str): laListe.append (str(obj))
+ elif isinstance(obj, int): laListe.append (int(obj))
+ elif isinstance(obj, float): laListe.append (float(obj))
+ elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj))
+ else : laListe.append(obj)
+ return (laListe)
+ # if debug : print ('je suis Plural')
+ # ou ? return objAAnalyser
+ #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
+ #pour une enum getattr(value dans le type)
+ # return pythonLiteral(ReferenceFacet(facet=value, **kw))
+ #print ('je suis un mot complexe')
+ # traitement FACT ou BLOC
+ # ------------------------
+ # il faut traiter les fact multiples
+ objAAnalyser.dictPyxb = {}
+ objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
+ #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
+ # objPyxbName = expandedName.localName()
+ # objPyxbValue = getattr(objAAnalyser, objPyxbName)
+ for objEltContentFils in objAAnalyser.orderedContent():
+ objPyxbValue = objEltContentFils.value
+ objPyxbName = objEltContentFils.elementDeclaration.id()
+ elementDeclaration = objEltContentFils.elementDeclaration
+ #if objPyxbValue == None or objPyxbValue == [] : continue
+ if elementDeclaration.isPlural():
+ if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[]
+ if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[]
+ dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue))
+ objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb)
+ else:
+ dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
+ objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
+ # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb)
+ #print ('avec la valeur', 'de', objAAnalyser.dictPyxb[objPyxbName])
+
+ #print ("***********************************")
+ #print ('pyxbToDict fin pour ********** ', objAAnalyser)
+ #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
+ #print ('pyxbToDict fin pour ********** ', objAAnalyser)
+ #print ("***********************************")
+ #print (dictArgs)
+ #print (dictPyxb)
+ #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
+ #print ('fin pour ',objAAnalyser)
+ return dictArgs
+
+ def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=True):
+
+ enCreation=False
+ if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd)
+ leTypeIntermediaire=laClassePyxbUserAssd.XsdSuperType()
+ if debug : print ('leTypeIntermediaire ', leTypeIntermediaire)
+ if debug : print ('leTypeIntermediaire ', leTypeIntermediaire.XsdSuperType())
+ if leTypeIntermediaire.__name__[-2:]== '_C' : enCreation = True
+ elif leTypeIntermediaire.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); return None #exit()
+ nomClasseAccasUserAssd=leTypeIntermediaire.XsdSuperType().__name__
+ if debug : print ('nomClasseAccasUserAssd', nomClasseAccasUserAssd)
+ laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd)
+ print (laClasseAccas)
+ if not(enCreation):
+ if str(objAAnalyser) in self.g_context.keys():return self.g_context[str(objAAnalyser)]
+ else :
+ obj=laClasseAccas()
+ self.g_context[str(objAAnalyser)]=obj
+ return obj
+ if str(objAAnalyser) in self.g_context.keys():
+ if isinstance(self.g_context[str(objAAnalyser)],laClasseAccas):
+ return self.g_context[str(objAAnalyser)]
+ else :
+ nvlObj=laClasseAccas()
+ oldObj=self.g_context[str(objAAnalyser)]
+ nvlObj.transfere(oldObj)
+ self.g_context[str(objAAnalyser)]=nvlObj
+ return nvlObj
+ else :
+ obj=laClasseAccas()
+ self.g_context[str(objAAnalyser)]=obj
+ return obj
+
# def analyseContent(self,objAAnalyser):
# objAAnalyser.dictArgs={}
# for objContenu in objAAnalyser.content():
# else :
# self.analyseContent(objContenu)
# objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.dictArgs
- #print ( '________________')
- #print (objAAnalyser.monNomClasseAccas)
- #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i])
- #print ( '________________')
-
-
+ #print ( '________________')
+ #print (objAAnalyser.monNomClasseAccas)
+ #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i])
+ #print ( '________________')
+
+
if __name__ == "__main__":
- print ('a faire')
+ print ('a faire')
+++ /dev/null
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-import sys,os
-import traceback
-#import raw.efficas as efficas
-import types
-
-sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
-
-try :
- import pyxb
- import pyxb.binding
- import pyxb.binding.basis
-except :
- pass
-#import pyxb.utils.utility
-#import pyxb.utils.domutils
-
-class X_OBJECT:
-# -------------
-
- def deletePyxbObject(self):
- if not self.cata or not self.cata.modeleMetier : return
- print ('----------- deletePyxbObject', self.nom)
- indice = 0
- trouve = False
- for i in self.perePyxb.objPyxb.orderedContent():
- if id(self.objPyxb) == id(i._Content__value) : trouve = True ;break
- indice = indice + 1
- if not trouve : print ('objet pas trouve')
- print (self.perePyxb.objPyxb.description)
- del self.perePyxb.objPyxb.__dict__[self.nom]
- print (self.perePyxb.objPyxb.__delattr__)
- #delattr(self.perePyxb.objPyxb,self.nom)
- # PNPN
-
- print ('delattr', self.perePyxb.objPyxb,self.nom)
- del self.perePyxb.objPyxb.orderedContent()[indice]
-
-
-class X_MCSIMP(X_OBJECT):
-# -----------------------
-
- def buildObjPyxb(self) :
- # self.valeur tient compte de la valeur par defaut
- # utiliser getValeur ? expression numpy
- if not self.cata or not self.cata.modeleMetier : return
- #print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
- #if self.nom == 'diameter' :
- # traceback.print_stack()
- # print ('****************************************************')
- # print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
- #if self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
- if self.objPyxbDeConstruction != None :
- self.objPyxb = self.objPyxbDeConstruction
- self.maClasseModeleMetier =type(self.objPyxb)
- #print (self.maClasseModeleMetier)
- self.objPyxbDeConstruction = None
- else :
- self.monNomClasseModeleMetier='T_'+self.nom
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- #print (self.maClasseModeleMetier)
- #print (self.valeur)
- #print (type(self.valeur))
- if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur)
- elif self.definition.into != None and 'TXM' in self.definition.type : self.objPyxb = None
- else : self.objPyxb=self.maClasseModeleMetier();
- self.filsPyxb=None
- #print ('X_MCSIMP', self.nom, self.objPyxb)
- #print ('fin X_MCSIMP', self.objPyxb, self.nom,self)
-
-
- def setValeurObjPyxb(self,newVal):
- if not self.cata or not self.cata.modeleMetier : return
- print ('dans setValeurObjPyxb MCSIMP')
- # print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
- if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
- else : nvlObj=self.maClasseModeleMetier()
- self.val=newVal
- setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
- print ('setattr', self.perePyxb.objPyxb,self.nom)
- trouve=False
- indice=0
- for i in self.perePyxb.objPyxb.orderedContent():
- if isinstance(i._Content__value, self.maClasseModeleMetier) :
- self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
- del(self.perePyxb.objPyxb.orderedContent()[-1])
- trouve=True
- break
- indice+=1
- if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
- self.objPyxb=nvlObj
- print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiii', nvlObj, id(nvlObj))
- #for i in self.perePyxb.objPyxb.orderedContent():
- # print ('ds le for pour i')
- # print (i._Content__value)
- # print (id(i._Content__value))
- # print (type((i._Content__value)))
- # if id(i._Content__value) == id(self.objPyxb) : break
- # indexOC +=1
-
- #maValeur = getattr(self.perePyxb.objPyxb, self.nom)
- #print ('je change', indexOC)
- #if isinstance(maValeur, pyxb.binding.basis.simpleTypeDefinition):
- #if 1 :
- # print ('jkjkljkljklj')
- # setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
- # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
- # del(self.perePyxb.objPyxb.orderedContent()[-1])
- #print ('apres',self.nom, self.perePyxb.objPyxb.orderedContent())
- #else :
- # index=0
- # trouve=False
- # try :
- # for i in maValeur:
- # if id(i) == id(self.objPyxb) :trouve = True ; break
- # index=index+1
- # maValeur[index]=nvlObj
- # self.perePyxb.objPyxb.orderedContent()[indexOC]._Content__value=nvlObj
- # except : pass
- # if not trouve : print (self.nom , 'pas trouve')
-
- #print ('arret programme'); exit()
-
- #print ('id objPyxb',id(self.objPyxb))
- #print ('id objPyxb[0]',id(self.objPyxb[0]))
- #print ('id elt ', id(self.objPyxb._element), self.objPyxb._element, type(self.objPyxb._element), type(self.objPyxb._element()))
- #print (' perePyxb _ElementMap')
- #print (self.perePyxb.objPyxb._ElementMap)
- #index=0
- #for i in self.perePyxb.objPyxb._ElementMap.keys() :
- # print (id(i), ' ', id(self.perePyxb.objPyxb._ElementMap[i]))
- #print (dir(self.perePyxb.objPyxb._ElementMap[i]))
- # print (id(self.perePyxb.objPyxb._ElementMap[i]))
-# index=index+1
- #print (' objPyxb monBinding id')
- #monBinding = getattr(self.perePyxb.objPyxb, self.nom)
- #for i in monBinding : print id(i)
- #print (' perePyxb orderedContent')
- #for i in self.perePyxb.objPyxb.orderedContent():
- # print id(i._Content__value)
- # print (i._Content__value, type(i._Content__value))
- #print (' perePyxb orderedContent')
- #for i in self.perePyxb.objPyxb.content(): print id(i)
-
- #print (self.perePyxb.objPyxb.orderedContent())
- #print (monBinding)
-
-
- def addPyxbObject(self, indiceDsLeContenu):
- if not self.cata or not self.cata.modeleMetier : return
-
- # adherence Accas sur le parent
- parent=self.parent
- while (parent.isBLOC() ): parent=parent.parent
- self.perePyxb=parent
-
- self.monNomClasseModeleMetier='T_'+self.nom
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- nvlObj=self.maClasseModeleMetier()
- print ('setattr', self.perePyxb.objPyxb,self.nom)
- setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
- tampon=self.perePyxb.objPyxb.orderedContent()[-1]
- self.objPyxb = nvlObj
- indexOC=-1
- longueur=len(self.perePyxb.objPyxb.orderedContent())
- for i in reversed(range(longueur)):
- self.perePyxb.objPyxb.orderedContent()[i]=self.perePyxb.objPyxb.orderedContent()[i-1]
- if i == indiceDsLeContenu + 1 : break
- self.perePyxb.objPyxb.orderedContent()[indiceDsLeContenu]=tampon
-
-
- #for i in self.perePyxb.objPyxb.orderedContent() :
- # print (i._Content__value, type(i._Content__value))
- #print ('----------------')
-
- #print self.perePyxb.objPyxb.orderedContent()
- #for i in self.perePyxb.objPyxb.orderedContent():
- # print ('valeur de ', i)
- # print (i._Content__value)
- # print (type(i._Content__value))
- # if isinstance(i._Content__value, self.maClasseModeleMetier) :
- # print dir(i._Content__value)
- # self.objPyxb = i._Content__value
- # setattr(self.perePyxb.objPyxb, self.nom, nvlObj)
- # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
- # del(self.perePyxb.objPyxb.orderedContent()[-1])
- # indexOC+=1
- #PNPNPNPNPNPNPNPNP
-
-class X_MCCOMPO(X_OBJECT) :
-# -------------------------
-#
- def buildObjPyxb(self,mc_list) :
- #print ('________________________________________________')
- #print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list)
- if not self.cata or not self.cata.modeleMetier : return
-
- self.listArg=[]
- for objAccas in mc_list :
- if objAccas.nature == 'MCBLOC' :
- self.exploreBLOC(objAccas)
- elif objAccas.nature == 'MCList' :
- for fils in objAccas :
- fils.perePyxb=self
- self.listArg.append(fils.objPyxb)
- else :
- self.listArg.append(objAccas.objPyxb)
- objAccas.perePyxb=self
- print (objAccas.nom ,' a pour pere Pyxb', self, self.nom)
-
- self.monNomClasseModeleMetier='T_'+self.nom
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- if self.objPyxbDeConstruction != None :
- self.objPyxb = self.objPyxbDeConstruction
- self.objPyxbDeConstruction = None
- #print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
- else :
- self.objPyxb=self.maClasseModeleMetier(*self.listArg)
- #print ('Fin __________ ', self.nom, self.objPyxb)
- #print ('X_MCCOMPO', self.nom, self.objPyxb)
- #print ('_______________________________________')
-
- def deletePyxbObject(self):
- if not self.cata or not self.cata.modeleMetier : return
- print ('******************************************')
- print ('je passe ds deletePyxbObject pour ', self, self.nom)
- print (self.perePyxb)
- print (dir(self))
- print ('******************************************')
-
- def exploreBLOC(self,objAccas):
- if not self.cata or not self.cata.modeleMetier : return
- laListeSsLesBlocs=[]
- for fils in objAccas.mcListe:
- if fils.nature == 'MCBLOC' :
- self.exploreBLOC(fils)
- elif fils.nature == 'MCList' :
- for objFils in fils :
- fils.perePyxb=self
- self.listArg.append(fils.objPyxb)
- #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
- else :
- self.listArg.append(fils.objPyxb)
- fils.perePyxb=self
- #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
-
-
-
-
-class X_MCBLOC (X_MCCOMPO):
-# --------------------------
- def buildObjPyxb(self,mc_list):
- if not self.cata or not self.cata.modeleMetier : return
- # mise a none ? le bloc n a pas d existence en pyxb
- self.perePyxb=None
- #print ('_______________________________________')
- #print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list)
- # on rattache ses fils au bloc mais leur pere sera ensuite le MCCOMPO qui contient le bloc
- # Pas sur d en avoir besoin du filsPyxb
- self.filsPyxb=[]
- self.objPyxb=None
- for objAccas in mc_list :
- self.filsPyxb.append(objAccas.objPyxb)
- #print (self.filsPyxb)
- #print ('Fin ', self.nom, self.objPyxb)
- #print ('_______________________________________')
-
-
-
-
-class X_MCLIST (X_MCCOMPO):
-# --------------------------
-
- def buildObjPyxb(self,mc_list):
- #print ('__________________________________________________________________')
- #print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self)
- #print ('on ne fait rien pour les MCLISTs, cela sera fait dans chaque MCFACT')
- #print ('__________________________________________________________________')
- pass
-
-
-class X_MCFACT (X_MCCOMPO):
-# -------------------------
-# on gere au niveau du MCCOMPO
- pass
-
-
-class X_JDC (X_MCCOMPO):
-# ---------------------
-
- def __init__(self):
- #print ('_______________________________________')
- #print ('X_JDC buildObjPyxb', self)
- if not self.cata or not self.cata.modeleMetier : return
- self.monNomClasseModeleMetier=self.code
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- self.objPyxb=self.maClasseModeleMetier()
- pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.ALWAYS)
- pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
- pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
- #print ('fin buildObjPyxb _______________________________________')
-
- def enregistreEtapePyxb(self,etape):
- # OK seulement si sequence (choice ? ...)
- if not self.cata or not self.cata.modeleMetier : return
- print ('enregistreEtapePyxb' , etape)
- self.objPyxb.append(etape.objPyxb)
- etape.perePyxb = self
- #self.toXml()
-
- def toXml(self):
- if not self.cata or not self.cata.modeleMetier : return
- print ('***************',self.objPyxb,'***************',)
- print ('***************',self.objPyxb.orderedContent(),'***************',)
- print(self.objPyxb.toDOM().toprettyxml())
- print(self.objPyxb.toxml())
- return (self.objPyxb.toDOM().toprettyxml())
-
-
- def analyseFromXML(self):
- print ("je suis ds analyseFromXML -- > appel ds analyse de I_JDC.py")
- if not self.cata or not self.cata.modeleMetier : return
- if self.procedure == "" : return
- self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
- for objEtape in self.objPyxb.content():
- objEtape.dictArgs= (self.pyxbToDict(objEtape))
- objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
- objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
- objEtape.dictPyxb['objEnPyxb']=objEtape
- objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
- maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
- objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
- # attention objAccasEtape = None normal (cf buildSd)
-
- #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- #print (objEtape , type(objEtape))
- #print (objEtape.dictPyxb)
- #print (maClasseAccas)
- #print (objAccasEtape)
-
- #print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
- #print (objEtape._ExpandedName, type(objEtape._ExpandedName))
- #print (objEtape.dictPyxb[u'experience'])
- #print (objEtape.dictArgs)
- #print (objEtape.dictPyxb)
- #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- #exit()
-
-
- def pyxbToDict(self,objAAnalyser):
- # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
- # faudrait - il travailler sur les types des objets ?
- # c est a revoir -> fonction cast a prevoir ds les 2 sens
- if not self.cata or not self.cata.modeleMetier : return
- if objAAnalyser is None: return
- #print ('debut pour ',objAAnalyser)
- dictArgs = {}
- if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
- objAAnalyser.dictPyxb=objAAnalyser
- #print (objAAnalyser.dictPyxb , type(objAAnalyser.dictPyxb))
- if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser)
- if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser)
- if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser)
- if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser)
- #if isinstance(objAAnalyser, (types.NoneType, types.BooleanType, types.FloatType, types.IntType, types.LongType)):
- return repr(objAAnalyser)
- # ou ? return objAAnalyser
- #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
- #pour une enum getattr(value dans le type)
- # return pythonLiteral(ReferenceFacet(facet=value, **kw))
- objAAnalyser.dictPyxb = {}
- for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
- objPyxbName = expandedName.localName()
- objPyxbValue = getattr(objAAnalyser, objPyxbName)
- if objPyxbValue == None or objPyxbValue == [] : continue
- if elementDeclaration.isPlural():
- dictArgs[objPyxbName] = []
- #objAAnalyser.dictPyxb[objPyxbName]={}
- objAAnalyser.dictPyxb[objPyxbName]=[]
- #objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
- for objPyxb in objPyxbValue :
- #print ('-------------',objPyxb)
- dictArgs[objPyxbName].append(self.pyxbToDict(objPyxb))
- objPyxb.dictPyxb['objEnPyxb'] = objPyxb
- objAAnalyser.dictPyxb[objPyxbName].append(objPyxb.dictPyxb)
- else:
- dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
- #print ('ajout ds dico de ', objAAnalyser , 'de', objPyxbName, objPyxbValue)
- objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
- #print ('ajout ds dico de ', objPyxbValue.dictPyxb, 'de', objPyxbName)
- objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
- #print ("***********************************")
- #print ('pyxbToDict fin pour ********** ', objAAnalyser)
- #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
- #print ('pyxbToDict fin pour ********** ', objAAnalyser)
- #print ("***********************************")
- #print (dictArgs)
- #print (dictPyxb)
- #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
- #print ('fin pour ',objAAnalyser)
- return dictArgs
-
-
-
-
-if __name__ == "__main__":
- print ('a faire')
--- /dev/null
+debuttypeChaineAvecBlancs = '\t\t<xs:simpleType name="T_stg">\n\t\t\t <xs:restriction>\n\t\t\t <xs:simpleType>\n\t\t\t\t <xs:list>\n\t\t\t\t <xs:simpleType>\n\t\t\t\t\t <xs:restriction base="xs:string">'
+fintypeChaineAvecBlancs = '\t\t</xs:restriction>\n\t\t </xs:simpleType>\n\t\t </xs:list>\n\t\t </xs:simpleType>\n\t\t'
+
+SequenceChaineAvecBlancs = '\t\t<xs:complexType name="T_{}">\n\t\t\t <xs:sequence> <xs:element name="stg" type="Vimmp:T_stg" minOccurs="1" maxOccurs="1" default="{}">n\t\t\t <\xs:sequence>\n\t\t<xs:complexType name>\n'
+
+
if __name__ == '__main__' :
- nomElt='Simple'
- nomDuType='T_Simple'
- nomDuTypeBase='int'
- nomDuComplexe='T_Complexe'
- nomDuCode='monCode'
- minOccurs=1
- maxOccurs=1
-
- texteSimple=typeSimple.format(nomDuType, nomDuTypeBase)
- texteElt=eltDsSequence.format(nomElt,nomDuCode,nomDuType,minOccurs,maxOccurs)
-
- minOccurs=0
- texteComplexe=debutTypeComplexe.format(nomDuComplexe)
- texteComplexe+=texteElt
- texteComplexe+=finTypeComplexe
- texteEltComplexe=eltDsSequence.format(nomElt,nomDuCode,nomDuType,minOccurs,maxOccurs)
-
- texteCata=debutTypeCata.format(nomDuCode)
- texteCata+=texteEltComplexe
- texteCata+=finTypeCata
-
- eltRacine=eltCata.format(nomDuCode, 'T_'+nomDuCode)
- print (texteSimple+texteComplexe+texteCata+eltRacine)
-
+ nomElt='Simple'
+ nomDuType='T_Simple'
+ nomDuTypeBase='int'
+ nomDuComplexe='T_Complexe'
+ nomDuCode='monCode'
+ minOccurs=1
+ maxOccurs=1
+
+ texteSimple=typeSimple.format(nomDuType, nomDuTypeBase)
+ texteElt=eltDsSequence.format(nomElt,nomDuCode,nomDuType,minOccurs,maxOccurs)
+
+ minOccurs=0
+ texteComplexe=debutTypeComplexe.format(nomDuComplexe)
+ texteComplexe+=texteElt
+ texteComplexe+=finTypeComplexe
+ texteEltComplexe=eltDsSequence.format(nomElt,nomDuCode,nomDuType,minOccurs,maxOccurs)
+
+ texteCata=debutTypeCata.format(nomDuCode)
+ texteCata+=texteEltComplexe
+ texteCata+=finTypeCata
+
+ eltRacine=eltCata.format(nomDuCode, 'T_'+nomDuCode)
+ print (texteSimple+texteComplexe+texteCata+eltRacine)
texteDebutNiveau3='<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"\nxmlns="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\ntargetNamespace="http://chercheurs.edf.com/logiciels/{}"\nelementFormDefault="qualified" attributeFormDefault="unqualified" version="0">\n'
texteFin='</xs:schema>'
+#texteAnnotation= '\t<xs:simpleType name="PNEFdico_{}">\n\t\t<xs:annotation>\n\t\t<xs:documentation>{}\n\t\t</xs:documentation>\n\t\t</xs:annotation>\n\t<xs:restriction base="xs:string"></xs:restriction>\n\t</xs:simpleType>\n'
+texteAnnotation= '\t<xs:simpleType name="PNEFdico">\n\t\t<xs:annotation>\n\t\t<xs:documentation>{}\n\t\t</xs:documentation>\n\t\t</xs:annotation>\n\t<xs:restriction base="xs:string"></xs:restriction>\n\t</xs:simpleType>\n'
+
# SIMP
debutSimpleType = '\t<xs:simpleType name="{}">\n'
debutSimpleTypeSsNom = '\t<xs:simpleType>\n'
debutTypeSimpleListe = '\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n'
finTypeSimpleListe = '\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t\t\t</xs:simpleType>\n'
-fermeBalisesMileu = '\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t </xs:simpleType>\n'
-
-maxLengthTypeSimple = '\t\t\t<xs:maxLength value = "{}"/>\n'
-minLengthTypeSimple = '\t\t\t<xs:minLength value = "{}"/>\n'
-eltDsSequence = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
-eltWithDefautDsSequence = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}" default="{}"/>\n'
+fermeBalisesMileu = '\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t </xs:simpleType>\n'
+
+maxLengthTypeSimple = '\t\t\t<xs:maxLength value = "{}"/>\n'
+minLengthTypeSimple = '\t\t\t<xs:minLength value = "{}"/>\n'
+eltDsSequence = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+eltDsSequenceWithHelp = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
+eltDsSequenceWithDefautAndHelp = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}" default="{}">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
+eltDsSequenceWithDefaut = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}" default="{}"/>\n'
UsingASSDkeyRefDeclaration = '\n\t<xs:keyref name="{}_Name_ref_a{}" refer="{}:Key_Name_For_{}"> \n\t\t<xs:selector xpath="{}"/>\n\t\t<xs:field xpath="."/>\n\t</xs:keyref>\n'
# <xs:key name="Key_Name_For_ElementarySurface">
# <xs:selector xpath="./Vimmp:CDM/Vimmp:Geometric_Domain/Vimmp:Surface"/>
finTypeCompoSeq = '\t\t</xs:sequence>\n'
finTypeCompo = '\t</xs:complexType>\n'
eltCompoDsSequence = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+eltCompoDsSequenceWithHelp = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+#name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
#eltCompoDsSequenceInExtension = '\t\t\t<xs:element name="{}" type="{}:{}"/>\n'
-# ETAPE
+# ETAPE
eltEtape = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}"/>\n'
+eltEtapeWithHelp = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
# BLOC
debutTypeSubst = '\t<xs:group name="{}"> \n\t\t<xs:sequence>\n'
finTypeSubst = '\t\t</xs:sequence>\n\t</xs:group>\n'
-substDsSequence = '\t\t\t<xs:group ref="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+substDsSequence = '\t\t\t<xs:group ref="{}:{}" minOccurs="{}" maxOccurs="{}">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:group>\n'
#choiceDsBloc = '\t\t\t<xs:choice minOccurs={}>\n'
-debutChoiceDsBloc = '<xs:choice>\n'
+debutChoiceDsBloc = '\t\t<xs:choice>\n'
debutChoiceDsBlocAvecMin = '<xs:choice minOccurs="{}">\n'
-finChoiceDsBloc = '</xs:choice>\n'
+finChoiceDsBloc = '\t\t</xs:choice>\n'
debSequenceDsBloc = '<xs:sequence>\n'
finSequenceDsBloc = '</xs:sequence>\n'
debutTypeSubstDsBlocFactorise = '\t<xs:group name="{}">\n'
finTypeSubstDsBlocFactorise = '\t</xs:group>\n'
debutUnion = '\t\t\t<xs:union>\n'
finUnion = '\t\t\t</xs:union>\n'
+reconstitueUnion = '{} maxOccurs="1">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
# User OR ASSD
-operAttributeName = '\t\t<xs:attribute name="name" type="xs:string"/>\n'
-attributeTypeForASSD = '\t\t<xs:attribute name="accasType" type="xs:string" fixed="ASSD"/>\n'
+attributeNameName = '\t\t<xs:attribute name="sdName" type="xs:string"/>\n'
+attributeTypeForASSD = '\t\t<xs:attribute name="sdType" type="xs:string" fixed="ASSD"/>\n'
attributeTypeUtilisateurName = '\t\t<xs:attribute name="typeUtilisateur" type="xs:string" fixed="{}"/>\n'
producingASSDkeyRefDeclaration='\t<xs:key name="Key_Name_For_{}">\n\t\t<xs:selector xpath="."/>\n\t\t<xs:field xpath="{}"/>\n\t</xs:key>\n'
texteFieldUnitaire="./{}:{}/@name |"
+defBaseXSDUserASSD='\t<xs:simpleType name="AccasUserAssd">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+defBaseXSDUserASSDMultiple='\t<xs:simpleType name="AccasUserAssdMultiple">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+
+defUserASSDMultiple='\t<xs:simpleType name="{}">\n\t\t<xs:restriction base="AccasUserAssdMultiple">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+defUserASSD ='\t<xs:simpleType name="{}">\n\t\t<xs:restriction base="AccasUserAssd">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+
+defUserASSDOrUserASSDMultiple='\t<xs:simpleType name="{}_{}">\n\t\t<xs:restriction base="{}">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+
# CATA
debutTypeCata = '\t<xs:complexType name="T_{}">\n\t\t<xs:choice minOccurs="0" maxOccurs="unbounded">\n'
eltAbstraitCataPPal = '\t<xs:complexType name="T_step_{}" abstract="true"/>\n'
eltAbstraitCataFils = '\t<xs:complexType name="T_step_{}" abstract="true">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base="{}:T_step_{}"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n'
eltCataPPal = '\t<xs:element name="step_{}" type="{}:T_step_{}"/>\n'
+eltCataPPalWithHelp = '\t<xs:element name="step_{}" type="{}:T_step_{}"/>\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
eltCataFils = '\t<xs:element name="step_{}" type="{}:T_step_{}" substitutionGroup="step_{}"/>\n'
+eltCataFilsWithHelp = '\t<xs:element name="step_{}" type="{}:T_step_{}" substitutionGroup="step_{}"/>\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
+
eltCata = '\t<xs:element name="{}" type="{}:T_{}"/>\n\t\t<xs:complexType name="T_{}">\n\t\t <xs:choice minOccurs="0" maxOccurs="unbounded">\n\t\t\t<xs:element ref="step_{}" minOccurs="0" maxOccurs="1"/>\n\t\t </xs:choice>\n\t\t</xs:complexType>\n'
#\n\t<xs:element name="{}_Abstract" type="{}:T_{}_Abstract"/>\n'
#implementeAbstrait = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="{}:{}_Abstract"/>\n'
+# MATRICE oldVersion
+# (_matrix ou pas ?)
+#matriceSimpleType = '\t<xs:simpleType name="{}_matrix">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:length value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+#matriceSimpleType = '\t<xs:simpleType name="{}">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:length value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+#matriceSimpleType +='\t<xs:group name="{}_lines">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="{}" type="{}:{}_matrix" minOccurs="{}" maxOccurs="{}"/>\t\n\t\t</xs:sequence>\n\t</xs:group>\n\t\n'
+#matriceSimpleType +='\t<xs:group name="{}_lines">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\t\n\t\t</xs:sequence>\n\t</xs:group>\n\t\n'
+#matriceSimpleType +='\t<xs:group name="{}_content">\n\t\t<xs:sequence>\n\t\t\t<xs:group ref="{}:{}_lines" minOccurs="1" maxOccurs="1"/>\t\n\t\t</xs:sequence>\n\t</xs:group>'
+#eltMatrice = ' <xs:group ref="{}:{}_content" minOccurs="{}" maxOccurs="{}"/>'
+
+# TUPLE
+tupleNonHomogeneSimpleType = '\t<xs:simpleType name="{}_n{}_tuple">\n\t\t<xs:restriction base="{}"/>\n\t\t</xs:simpleType>\n'
+tupleNonHomogeneElt = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+tupleDebutComplexeType = '\t<xs:complexType name="{}">\n\t\t<xs:sequence>'
+tupleMilieuComplexeType = '\n\t\t\t<xs:element name="n{}" type="{}_n{}_tuple" minOccurs="1" maxOccurs="1"/>'
+tupleFinComplexeType = '\n\t\t</xs:sequence>\n\t</xs:complexType>\n'
+
+# MATRICE
+eltMatrice = '\t\t\t <xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+matriceSimpleType = '\t<xs:simpleType name="{}_line">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:length value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+matriceSimpleType +='\t<xs:group name="{}_matrix">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="line" type="{}:{}_line" minOccurs="{}" maxOccurs="{}"/>\n\t\t </xs:sequence>\n\t</xs:group>\n'
+matriceSimpleType +='\t<xs:complexType name="{}"> \n\t\t<xs:group ref="{}:{}_matrix" minOccurs="1" maxOccurs="1"/>\n\t</xs:complexType>\n'
+
+# CHAINES AVEC BLANC
+debutChaineAvecBlancsInto = '\t<xs:simpleType name="{}_enum">\n\t\t<xs:restriction base="xs:string">\n'
+milieuChaineAvecBlancsInto = '\t\t\t<xs:enumeration value="{}"/>\n'
+finChaineAvecBlancsInto = '\t\t</xs:restriction>\n\t\t</xs:simpleType>\n'
+
+complexChaineAvecBlancs = '\t<xs:complexType name="{}">\n\t\t<xs:sequence maxOccurs="{}">\n\t\t\t\t<xs:element name="s__" type="{}_enum"/>\n\t\t\t</xs:sequence>\n\t</xs:complexType>\n'
+
+typeEltChaineAvecBlancSansInto = '\t\t<xs:simpleType name="{}_enum">\n\t\t\t<xs:restriction base="xs:string">\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>'
if __name__ == '__main__' :
print ('ne fait rien')
-
import inspect
def creationAccasSimp(c):
- print c
+ print c
class toto
def __init__(self,*args):
mro = type(self).mro()
for next_class in mro[mro.index(ChildB) + 1:] :
if hasattr(next_class, '__init__'):
- next_class.__init__(self,args)
+ next_class.__init__(self,args)
# Utility function to identify classes of interest
def _isSupersedable (cls):
def _injectClasses ():
import sys
import pyxb.binding.basis
-
+
# All PyXB complex type definitions in the original module
raw_classes = set([_o for (_, _o) in inspect.getmembers(raw_custom) if _isSupersedable(_o)])
raw_classes_compo=set()
raw_classes_simp=set()
for c in raw_classes :
- if issubclass(c,pyxb.binding.basis.complexTypeDefinition) : raw_classes_compo.add(c)
- else : raw_classes_simp.add(c)
+ if issubclass(c,pyxb.binding.basis.complexTypeDefinition) : raw_classes_compo.add(c)
+ else : raw_classes_simp.add(c)
#print 'Original classes complex type: %s' % (raw_classes_compo,)
print 'Original classes simple type: %s' % (raw_classes_simp,)
for c in raw_classes_simp:
print c.__class__
#setattr(c,'__init__',__init__)
print c.__mro__
-
+
# PyXB complex type definitions in this module that did not come
# from the original import *.
this_module = sys.modules[__name__]
this_classes = set([_o for (_, _o) in inspect.getmembers(this_module) if _isSupersedable(_o) and _o not in raw_classes])
this_classes_tuple = tuple(this_classes)
#print 'This classes: %s' % (this_classes,)
-
+
# Raw classes superseded by something in this module
superseded_classes = set([ _o for _o in raw_classes if _o._SupersedingClass() in this_classes ])
superseded_classes_tuple = tuple(superseded_classes)
class Tuple:
- def __init__(self,ntuple):
- self.ntuple=ntuple
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
- def __convert__(self,valeur):
- if type(valeur) == types.StringType:
- return None
- if len(valeur) != self.ntuple:
- return None
- return valeur
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
- def info(self):
- return "Tuple de %s elements" % self.ntuple
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
- __repr__=info
- __str__=info
+ __repr__=info
+ __str__=info
dicoInverse = {}
for (clef,valeur) in dicoSource.items():
if not(type(valeur) is tuple):
- dicoInverse[valeur]=clef
- continue
+ dicoInverse[valeur]=clef
+ continue
(elt,att)=valeur
if elt not in dicoInverse : dicoInverse[elt]={}
dicoInverse[elt][att]=clef
return dicoInverse
-
+
dictSIMPEficasXML= { 'typ' : 'nomTypeAttendu',
- 'statut' : 'statut',
+ 'statut' : 'statut',
'min' : 'minOccurences',
- 'max' : 'maxOccurences',
- 'homo' : 'homo' ,
- 'position' : 'portee',
- 'validators' : 'validators' ,
+ 'max' : 'maxOccurences',
+ 'homo' : 'homo' ,
+ 'position' : 'portee',
+ 'validators' : 'validators' ,
'sug' : 'valeurSugg',
- 'defaut' : 'valeurDef' ,
- 'into' : ('plageValeur','into'),
- 'val_min' : ('plageValeur','borneInf'),
+ 'defaut' : 'valeurDef' ,
+ 'into' : ('plageValeur','into'),
+ 'val_min' : ('plageValeur','borneInf'),
'val_max' : ('plageValeur','borneSup'),
- 'ang' : ('doc','ang'),
+ 'ang' : ('doc','ang'),
'fr' : ('doc','fr',),
'docu' : ('doc','docu'),
}
dictSIMPXMLEficas= inverseDico(dictSIMPEficasXML)
-
-dictFACTEficasXML = { 'statut' : 'statut',
+
+dictFACTEficasXML = { 'statut' : 'statut',
'min' : 'minOccurences',
- 'max' : 'maxOccurences',
- 'ang' : ('doc','ang'),
+ 'max' : 'maxOccurences',
+ 'ang' : ('doc','ang'),
'fr' : ('doc','fr',),
'docu' : ('doc','docu'),
'regles' : 'regles',
dictFACTXMLEficas = inverseDico(dictFACTEficasXML)
-dictBLOCEficasXML = { 'statut' : 'statut',
- 'ang' : ('doc','ang'),
+dictBLOCEficasXML = { 'statut' : 'statut',
+ 'ang' : ('doc','ang'),
'fr' : ('doc','fr',),
'regles' : 'regles',
'condition' : 'condition' ,
dictPROCEficasXML = { 'nom' : 'nom',
'regles' : 'regles',
- 'ang' : ('doc','ang'),
+ 'ang' : ('doc','ang'),
'fr' : ('doc','fr',),
'docu' : ('doc','docu'),
}
listeParamDeTypeStr = ('fr', 'docu', 'ang', 'nom' )
listeParamTjsSequence = ('into' , 'intoSug')
-listeParamSelonType = ('defaut', 'sug', 'into', 'intoSug')
+listeParamSelonType = ('defaut', 'sug', 'into', 'intoSug')
if __name__ == "__main__":
- import pprint
- pp=pprint.PrettyPrinter(indent=4)
- print ('dictSIMPEficasXML')
- pp.pprint(dictSIMPEficasXML)
- print ('\n\n')
- print ('dictSIMPXMLEficas')
- pp.pprint(dictSIMPXMLEficas)
- print ('\n\n')
- print ('dictFACTEficasXML')
- pp.pprint(dictFACTEficasXML)
- print ('\n\n')
- print ('dictFACTXMLEficas')
- pp.pprint(dictFACTXMLEficas)
- print ('\n\n')
- print ('dictPROCEficasXML')
- pp.pprint(dictPROCEficasXML)
- print ('\n\n')
- print ('dictPROCXMLEficas')
- pp.pprint(dictPROCXMLEficas)
- print ('\n\n')
- print ('dictNomsDesTypes')
- pp.pprint(dictNomsDesTypes )
+ import pprint
+ pp=pprint.PrettyPrinter(indent=4)
+ print ('dictSIMPEficasXML')
+ pp.pprint(dictSIMPEficasXML)
+ print ('\n\n')
+ print ('dictSIMPXMLEficas')
+ pp.pprint(dictSIMPXMLEficas)
+ print ('\n\n')
+ print ('dictFACTEficasXML')
+ pp.pprint(dictFACTEficasXML)
+ print ('\n\n')
+ print ('dictFACTXMLEficas')
+ pp.pprint(dictFACTXMLEficas)
+ print ('\n\n')
+ print ('dictPROCEficasXML')
+ pp.pprint(dictPROCEficasXML)
+ print ('\n\n')
+ print ('dictPROCXMLEficas')
+ pp.pprint(dictPROCXMLEficas)
+ print ('\n\n')
+ print ('dictNomsDesTypes')
+ pp.pprint(dictNomsDesTypes )
# print dir(efficas.T_SIMP)
#xml = open('cata_test1.xml').read()
- xml = open('cata.xml').read()
+ with open('cata.xml') as fd :
+ xml=fd.read()
SchemaMed = efficas.CreateFromDocument(xml)
SchemaMed.exploreCata()
#SchemaMed.dumpXSD()
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import os,traceback
import re
"""
nature = "COMMANDE_COMMENTARISEE"
idracine='_comm'
-
+
def __init__(self,texte='',parent=None,reg='oui'):
self.valeur = texte
if not parent :
else:
self.jdc = self.parent = parent
if hasattr(self.parent,'etape'):
- self.etape = self.parent.etape
+ self.etape = self.parent.etape
else :
- self.etape = None
+ self.etape = None
self.definition=self
self.nom = ''
self.niveau = self.parent.niveau
self.state="unchanged"
#self.appel = N_utils.calleeWhere(niveau=2)
if reg=='oui' : self.register()
-
+
def isValid(self):
return 1
def initModif(self):
self.state = 'modified'
- self.parent.initModif()
+ self.parent.initModif()
def setValeur(self,new_valeur):
"""
"""
Indique si self est repetable ou non : retourne toujours 1
"""
- return 1
+ return 1
def getAttribut(self,nom_attribut) :
"""
Retourne l'attribut de nom nom_attribut de self (ou herite)
"""
if hasattr(self,nom_attribut) :
- return getattr(self,nom_attribut)
+ return getattr(self,nom_attribut)
else :
- return None
+ return None
def getFr(self):
"""
"""
if self.jdc.code=='ASTER' : return self.definition.fr
try :
- return getattr(self.definition,self.jdc.lang)
+ return getattr(self.definition,self.jdc.lang)
except:
- return ''
+ return ''
def listeMcPresents(self):
return []
def supprime(self):
- """
+ """
Methode qui supprime toutes les boucles de references afin que l'objet puisse
- etre correctement detruit par le garbage collector
+ etre correctement detruit par le garbage collector
"""
self.parent = None
self.etape = None
# on essaie de creer un objet JDC...
CONTEXT.unsetCurrentStep()
if re.search('Fin Commentaire',self.valeur) :
- self.valeur=self.valeur.replace('Fin Commentaire','')
+ self.valeur=self.valeur.replace('Fin Commentaire','')
J=self.jdc.__class__(procedure=self.valeur,
definition=self.jdc.definition,
cata=self.jdc.cata,
Booleenne qui retourne 1 si self est valide, 0 sinon
"""
return self.actif
-
+
def verifConditionBloc(self):
- """
- Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la definition) de self et
- retourne deux listes :
- - la premiere contient les noms des blocs a rajouter
- - la seconde contient les noms des blocs a supprimer
- """
- return [],[]
+ """
+ Evalue les conditions de tous les blocs fils possibles
+ (en fonction du catalogue donc de la definition) de self et
+ retourne deux listes :
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
+ """
+ return [],[]
def verifConditionRegles(self,liste_presents):
- """
- Retourne la liste des mots-cles a rajouter pour satisfaire les regles
- en fonction de la liste des mots-cles presents
- """
- return []
+ """
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
+ """
+ return []
def reparent(self,parent):
- """
- Cette methode sert a reinitialiser la parente de l'objet
- """
- self.parent=parent
- self.jdc=parent.getJdcRoot()
- self.etape=self
+ """
+ Cette methode sert a reinitialiser la parente de l'objet
+ """
+ self.parent=parent
+ self.jdc=parent.getJdcRoot()
+ self.etape=self
def verifExistenceSd(self):
- """
- Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
- avant etape, sinon enleve la reference a ces concepts
- --> sans objet pour les commandes commentarisees
- """
- pass
-
+ """
+ Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
+ avant etape, sinon enleve la reference a ces concepts
+ --> sans objet pour les commandes commentarisees
+ """
+ pass
+
def controlSdprods(self,d):
- """sans objet pour les commandes commentarisees"""
- pass
+ """sans objet pour les commandes commentarisees"""
+ pass
def close(self):
- pass
+ pass
def resetContext(self):
- pass
-
+ pass
from Extensions.i18n import tr
class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
- """
- Cette classe permet de creer des objets de type COMMENTAIRE
- """
- nature = 'COMMENTAIRE'
- idracine = '_comm'
-
- def __init__(self,valeur,parent=None):
- # parent est un objet de type OBJECT (ETAPE ou MC ou JDC...)
- self.valeur=valeur
- if not parent :
- self.jdc = self.parent = CONTEXT.getCurrentStep()
- else:
- self.jdc = self.parent = parent
- # La classe COMMENTAIRE n'a pas de definition. On utilise self
- # pour completude
- self.definition=self
- self.nom=''
- self.niveau = self.parent.niveau
- self.actif=1
- self.state="unchanged"
- self.register()
- self.fenetreIhm=None
-
- def register(self):
- """
- Enregistre le commentaire dans la liste des etapes de son parent
- lorsque celui-ci est un JDC
"""
- if self.parent.nature == 'JDC':
- # le commentaire est entre deux commandes:
- # il faut l'enregistrer dans la liste des etapes
- self.parent.register(self)
-
- def copy(self):
- c=COMMENTAIRE(valeur=self.valeur,parent=self.jdc)
- return c
-
- def isValid(self):
- """
- Retourne 1 si self est valide, 0 sinon
- Retourne toujours 1 car un commentaire est toujours valide
- """
- return 1
-
- def isOblig(self):
- """ Indique si self est obligatoire ou non : retourne toujours 0 """
- return 0
-
- def isRepetable(self):
- """ Indique si self est repetable ou non : retourne toujours 1 """
- return 1
-
- def active(self):
- """
- Rend l'etape courante active
- """
- self.actif = 1
-
- def inactive(self):
- """
- Rend l'etape courante inactive
- NB : un commentaire est toujours actif !
- """
- self.actif = 1
-
- def isActif(self):
- """
- Booleenne qui retourne 1 si self est valide, 0 sinon
- """
- return self.actif
-
- def supprime(self):
- """
- Methode qui supprime toutes les boucles de references afin que
- l'objet puisse etre correctement detruit par le garbage collector
- """
- self.parent=None
- self.jdc=None
- self.definition = None
- self.niveau = None
-
- def listeMcPresents(self):
- return []
-
- def getValeur(self) :
- """ Retourne la valeur de self, cad le contenu du commentaire """
- try :
- return self.valeur
- except:
- return None
-
- def setValeur(self,new_valeur):
- """
- Remplace la valeur de self(si elle existe) par new_valeur
- """
- self.valeur = new_valeur
- self.initModif()
-
- def initModif(self):
- self.state = 'modified'
- if self.parent:
- self.parent.initModif()
-
- def supprimeSdProds(self):
- pass
-
- def updateContext(self,d):
- """
- Update le dictionnaire d avec les concepts ou objets produits par self
- --> ne fait rien pour un commentaire
- """
- pass
-
- def report(self):
- """ Genere l'objet rapport (classe CR) """
- self.cr=CR()
- if not self.isValid(): self.cr.warn(tr("Objet commentaire non valorise"))
- return self.cr
-
- def ident(self):
- """ Retourne le nom interne associe a self
- Ce nom n'est jamais vu par l'utilisateur dans EFICAS
- """
- return self.nom
-
- def deleteConcept(self,sd):
- pass
-
- def replaceConcept (self,old_sd,sd):
- pass
-
- def verifConditionBloc(self):
- """
- Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la definition) de self et
- retourne deux listes :
- - la premiere contient les noms des blocs a rajouter
- - la seconde contient les noms des blocs a supprimer
- """
- return [],[]
-
- def verifConditionRegles(self,liste_presents):
+ Cette classe permet de creer des objets de type COMMENTAIRE
"""
- Retourne la liste des mots-cles a rajouter pour satisfaire les regles
- en fonction de la liste des mots-cles presents
- """
- return []
-
- def getSdprods(self,nom_sd):
- """
- Retourne les concepts produits par la commande
- """
- return None
-
- def verifExistenceSd(self):
- pass
-
- def getFr(self):
- """
- Retourne le commentaire lui meme tronque a la 1ere ligne
- """
- return self.valeur.split('\n',1)[0]
-
- def controlSdprods(self,d):
- """sans objet """
- pass
-
- def close(self):
- pass
-
- def resetContext(self):
- pass
-
-
+ nature = 'COMMENTAIRE'
+ idracine = '_comm'
+
+ def __init__(self,valeur,parent=None):
+ # parent est un objet de type OBJECT (ETAPE ou MC ou JDC...)
+ self.valeur=valeur
+ if not parent :
+ self.jdc = self.parent = CONTEXT.getCurrentStep()
+ else:
+ self.jdc = self.parent = parent
+ # La classe COMMENTAIRE n'a pas de definition. On utilise self
+ # pour completude
+ self.definition=self
+ self.nom=''
+ self.niveau = self.parent.niveau
+ self.actif=1
+ self.state="unchanged"
+ self.register()
+ self.fenetreIhm=None
+
+ def register(self):
+ """
+ Enregistre le commentaire dans la liste des etapes de son parent
+ lorsque celui-ci est un JDC
+ """
+ if self.parent.nature == 'JDC':
+ # le commentaire est entre deux commandes:
+ # il faut l'enregistrer dans la liste des etapes
+ self.parent.register(self)
+
+ def copy(self):
+ c=COMMENTAIRE(valeur=self.valeur,parent=self.jdc)
+ return c
+
+ def isValid(self):
+ """
+ Retourne 1 si self est valide, 0 sinon
+ Retourne toujours 1 car un commentaire est toujours valide
+ """
+ return 1
+
+ def isOblig(self):
+ """ Indique si self est obligatoire ou non : retourne toujours 0 """
+ return 0
+
+ def isRepetable(self):
+ """ Indique si self est repetable ou non : retourne toujours 1 """
+ return 1
+
+ def active(self):
+ """
+ Rend l'etape courante active
+ """
+ self.actif = 1
+
+ def inactive(self):
+ """
+ Rend l'etape courante inactive
+ NB : un commentaire est toujours actif !
+ """
+ self.actif = 1
+
+ def isActif(self):
+ """
+ Booleenne qui retourne 1 si self est valide, 0 sinon
+ """
+ return self.actif
+
+ def supprime(self):
+ """
+ Methode qui supprime toutes les boucles de references afin que
+ l'objet puisse etre correctement detruit par le garbage collector
+ """
+ self.parent=None
+ self.jdc=None
+ self.definition = None
+ self.niveau = None
+
+ def listeMcPresents(self):
+ return []
+
+ def getValeur(self) :
+ """ Retourne la valeur de self, cad le contenu du commentaire """
+ try :
+ return self.valeur
+ except:
+ return None
+
+ def setValeur(self,new_valeur):
+ """
+ Remplace la valeur de self(si elle existe) par new_valeur
+ """
+ self.valeur = new_valeur
+ self.initModif()
+
+ def initModif(self):
+ self.state = 'modified'
+ if self.parent:
+ self.parent.initModif()
+
+ def supprimeSdProds(self):
+ pass
+
+ def updateContext(self,d):
+ """
+ Update le dictionnaire d avec les concepts ou objets produits par self
+ --> ne fait rien pour un commentaire
+ """
+ pass
+
+ def report(self):
+ """ Genere l'objet rapport (classe CR) """
+ self.cr=CR()
+ if not self.isValid(): self.cr.warn(tr("Objet commentaire non valorise"))
+ return self.cr
+
+ def ident(self):
+ """ Retourne le nom interne associe a self
+ Ce nom n'est jamais vu par l'utilisateur dans EFICAS
+ """
+ return self.nom
+
+ def deleteConcept(self,sd):
+ pass
+
+ def replaceConcept (self,old_sd,sd):
+ pass
+
+ def verifConditionBloc(self):
+ """
+ Evalue les conditions de tous les blocs fils possibles
+ (en fonction du catalogue donc de la definition) de self et
+ retourne deux listes :
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
+ """
+ return [],[]
+
+ def verifConditionRegles(self,liste_presents):
+ """
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
+ """
+ return []
+
+ def getSdprods(self,nom_sd):
+ """
+ Retourne les concepts produits par la commande
+ """
+ return None
+
+ def verifExistenceSd(self):
+ pass
+
+ def getFr(self):
+ """
+ Retourne le commentaire lui meme tronque a la 1ere ligne
+ """
+ return self.valeur.split('\n',1)[0]
+
+ def controlSdprods(self,d):
+ """sans objet """
+ pass
+
+ def close(self):
+ pass
+
+ def resetContext(self):
+ pass
# with this program. If not, see <http://www.gnu.org/licenses/>.
"""
Creates the ``EficasException`` class for the EDF Eficas application.
-This class supports the internationalization mechanism provided in
+This class supports the internationalization mechanism provided in
the ``i18n`` module.
"""
#sys.path.append(os.path.realpath(".."))
from Extensions.i18n import tr
self.args = (tr(msg),)
-
+
if __name__ == "__main__":
import sys
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient la classe ETAPE_NIVEAU qui sert a
+ Ce module contient la classe ETAPE_NIVEAU qui sert a
concretiser les niveaux au sein d'un JDC
"""
from __future__ import absolute_import
class ETAPE_NIVEAU(N_OBJECT.OBJECT):
- def __init__(self,niveau,parent):
- self.parent = parent
- self.jdc = self.parent.getJdcRoot()
- self.niveau = self
- self.definition = niveau
- self.etapes=[]
- self.etapes_niveaux = []
- self.dict_niveaux={}
- self.editmode = 0
- self.state="undetermined"
- self.buildNiveaux()
-
- def buildNiveaux(self):
- for niveau in self.definition.l_niveaux:
- etape_niveau = ETAPE_NIVEAU(niveau,self)
- self.etapes_niveaux.append(etape_niveau)
- self.dict_niveaux[niveau.nom]=etape_niveau
-
- def register(self,etape):
- """
- Enregistre la commande etape :
- - si editmode = 0 : on est en mode relecture d'un fichier de commandes
- auquel cas on ajoute etape a la fin de la liste self.etapes
- - si editmode = 1 : on est en mode ajout d'etape depuis eficas auquel cas
- cette methode ne fait rien, c'est addEntite qui enregistre etape
- a la bonne place dans self.etapes
- """
- if self.editmode : return
- self.etapes.append(etape)
-
- def unregister(self,etape):
- """
- Desenregistre l'etape du niveau
- """
- self.etapes.remove(etape)
-
- def ident(self):
- return self.definition.label
-
- def isActif(self):
- #print 'Niveau : ',self.definition.nom
- #print '\tactif =',self.definition.actif
- if self.definition.actif == 1 :
- return 1
- else :
- # self.actif est une condition a evaluer dans un certain contexte ...
- d = self.creeDictValeurs()
- try:
- t=eval(self.definition.actif,d)
- return t
- except:
- traceback.print_exc()
- return 0
-
- def creeDictValeurs(self):
- """
- Retourne le dictionnaire des freres aines de self compose des couples :
- {nom_frere isValid()}
- """
- d={}
- for niveau in self.parent.etapes_niveaux:
- if niveau is self : break
- d[niveau.definition.nom]=niveau.isValid()
- return d
-
- def isValid(self):
- """ Methode booleenne qui retourne 0 si le niveau est invalide, 1 sinon """
- if self.etapes_niveaux == []:
- if len(self.etapes) == 0:
- return self.definition.valide_vide
- else:
- for etape in self.etapes :
- if not etape.isValid() : return 0
- return 1
- else:
- for etape_niveau in self.etapes_niveaux :
- if not etape_niveau.isValid() : return 0
- return 1
-
- def accept(self,visitor):
- visitor.visitETAPE_NIVEAU(self)
-
- def addEntite(self,name,pos_rel):
- self.editmode = 1
- try :
- pos_abs=self.jdc.getNbEtapesAvant(self)+pos_rel
- cmd = self.jdc.addEntite(name,pos_abs)
- self.etapes.insert(pos_rel,cmd)
- self.editmode = 0
- return cmd
- except:
- traceback.print_exc()
- self.editmode = 0
- return None
-
- def suppEntite(self,etape) :
- """ Classe ETAPE_NIVEAU
- Supprime une etape
- """
- self.jdc.suppEntite(etape)
-
-
- def getFr(self):
- """
- Retourne le texte d'aide dans la langue choisie
- """
- try :
- return getattr(self.definition,self.jdc.lang)
- except:
- return ''
-
+ def __init__(self,niveau,parent):
+ self.parent = parent
+ self.jdc = self.parent.getJdcRoot()
+ self.niveau = self
+ self.definition = niveau
+ self.etapes=[]
+ self.etapes_niveaux = []
+ self.dict_niveaux={}
+ self.editmode = 0
+ self.state="undetermined"
+ self.buildNiveaux()
+
+ def buildNiveaux(self):
+ for niveau in self.definition.l_niveaux:
+ etape_niveau = ETAPE_NIVEAU(niveau,self)
+ self.etapes_niveaux.append(etape_niveau)
+ self.dict_niveaux[niveau.nom]=etape_niveau
+
+ def register(self,etape):
+ """
+ Enregistre la commande etape :
+ - si editmode = 0 : on est en mode relecture d'un fichier de commandes
+ auquel cas on ajoute etape a la fin de la liste self.etapes
+ - si editmode = 1 : on est en mode ajout d'etape depuis eficas auquel cas
+ cette methode ne fait rien, c'est addEntite qui enregistre etape
+ a la bonne place dans self.etapes
+ """
+ if self.editmode : return
+ self.etapes.append(etape)
+
+ def unregister(self,etape):
+ """
+ Desenregistre l'etape du niveau
+ """
+ self.etapes.remove(etape)
+
+ def ident(self):
+ return self.definition.label
+
+ def isActif(self):
+ #print 'Niveau : ',self.definition.nom
+ #print '\tactif =',self.definition.actif
+ if self.definition.actif == 1 :
+ return 1
+ else :
+ # self.actif est une condition a evaluer dans un certain contexte ...
+ d = self.creeDictValeurs()
+ try:
+ t=eval(self.definition.actif,d)
+ return t
+ except:
+ traceback.print_exc()
+ return 0
+
+ def creeDictValeurs(self):
+ """
+ Retourne le dictionnaire des freres aines de self compose des couples :
+ {nom_frere isValid()}
+ """
+ d={}
+ for niveau in self.parent.etapes_niveaux:
+ if niveau is self : break
+ d[niveau.definition.nom]=niveau.isValid()
+ return d
+
+ def isValid(self):
+ """ Methode booleenne qui retourne 0 si le niveau est invalide, 1 sinon """
+ if self.etapes_niveaux == []:
+ if len(self.etapes) == 0:
+ return self.definition.valide_vide
+ else:
+ for etape in self.etapes :
+ if not etape.isValid() : return 0
+ return 1
+ else:
+ for etape_niveau in self.etapes_niveaux :
+ if not etape_niveau.isValid() : return 0
+ return 1
+
+ def accept(self,visitor):
+ visitor.visitETAPE_NIVEAU(self)
+
+ def addEntite(self,name,pos_rel):
+ self.editmode = 1
+ try :
+ pos_abs=self.jdc.getNbEtapesAvant(self)+pos_rel
+ cmd = self.jdc.addEntite(name,pos_abs)
+ self.etapes.insert(pos_rel,cmd)
+ self.editmode = 0
+ return cmd
+ except:
+ traceback.print_exc()
+ self.editmode = 0
+ return None
+
+ def suppEntite(self,etape) :
+ """ Classe ETAPE_NIVEAU
+ Supprime une etape
+ """
+ self.jdc.suppEntite(etape)
+
+
+ def getFr(self):
+ """
+ Retourne le texte d'aide dans la langue choisie
+ """
+ try :
+ return getattr(self.definition,self.jdc.lang)
+ except:
+ return ''
#
from __future__ import absolute_import
from __future__ import print_function
-try :
- from builtins import str
- from builtins import object
+try :
+ from builtins import str
+ from builtins import object
except : pass
import re,sys,types
return 0
else:
return 1
-
+
class InterpreteurException(Exception):
"""
Classe servant a definir les exceptions levees par l'interpreteur de formule
'LOG10','SIN','COS','TAN','ASIN','ACOS','ATAN','SINH',
'COSH','TANH','HEAVYSID']
l_constantes = ['PI','RD_RG','DG_RD']
-
+
def __init__(self,formule=None,constantes=[],fonctions=[],parent=None):
"""
Constructeur d'interpreteurs de formule Aster
if nom[0] in ('+','-') : nom = nom[1:]
self.cr.debut = tr("Debut Fonction %s", nom)
self.cr.fin = tr("Fin Fonction %s", nom)
-
+
def str(self):
"""
Retourne une liste de chaines de caracteres representant la formule
"""
txt = self.cr.report()
return txt
-
+
def enregistre(self,fils):
"""
Enregistre un operateur fils dans la liste des children
"""
self.l_children.append(fils)
self.cr.add(fils.cr)
-
+
def isValid(self):
"""
Booleenne qui retourne 1 si la formule est valide, 0 sinon
Methode externe
"""
self.l_operateurs = []
- self.cr.purge() # on vide le cr
+ self.cr.purge() # on vide le cr
self.initCr() # on initialise le cr
self.interpreteFormule()
return self.cr.estvide()
self.d_fonctions_unaires[new_fonc[0]] = self.getNbArgs(new_fonc)
#self.d_fonctions_unaires.update(self.new_fonctions_unaires)
self.l_fonctions_unaires = list(self.d_fonctions_unaires.keys())
-
+
def ordonneListes(self):
"""
Ordonne les listes de fonctions unaires et binaires
self.l_fonctions_binaires.sort(cmp_function)
self.l_fonctions_unaires.sort(cmp_function)
self.l_constantes.sort(cmp_function)
-
+
def splitOperateurs(self,texte):
"""
else:
# on n'a pas trouve de nombre
return None,texte
-
+
def chercheConstanteOld(self,texte):
"""
Recherche une constante en debut de texte parmi la liste des constantes.
else:
# aucune constante trouvee
return None,texte
-
+
def chercheArgs(self,texte):
"""
Cherche au debut de texte une liste d'arguments entre parentheses
else:
# on a fini d'analyser le texte : reste = None
return texte,None
-
+
def chercheOperateurUnaireOld(self,texte):
"""
Cherche dans texte un operateur unaire
elif texte[0] == '-':
# Il faut pouvoir trapper les expressions du type exp(-(x+1)) ...
try :
- args,reste = self.chercheArgs(texte[1:])
+ args,reste = self.chercheArgs(texte[1:])
except InterpreteurException as e:
raise InterpreteurException (e.__str__())
if not args :
- # Il ne s'agit pas de '-' comme operateur unaire --> on retourne None
- return None,texte
+ # Il ne s'agit pas de '-' comme operateur unaire --> on retourne None
+ return None,texte
else:
- identificateur = '-'
- args = self.splitArgs(identificateur,args,self.d_fonctions_unaires[identificateur])
- formule_operateur = (identificateur,'',self.t_formule[2],args)
- operateur = Interpreteur_Formule(formule = formule_operateur,
- constantes = self.new_constantes,
- fonctions = self.new_fonctions_unaires,
- parent = self)
- operateur.interpreteFormule()
- texte = reste
- return operateur,reste
+ identificateur = '-'
+ args = self.splitArgs(identificateur,args,self.d_fonctions_unaires[identificateur])
+ formule_operateur = (identificateur,'',self.t_formule[2],args)
+ operateur = Interpreteur_Formule(formule = formule_operateur,
+ constantes = self.new_constantes,
+ fonctions = self.new_fonctions_unaires,
+ parent = self)
+ operateur.interpreteFormule()
+ texte = reste
+ return operateur,reste
else:
return None,texte
-
+
def chercheOperateurBinaire(self,texte):
"""
Cherche dans texte un operateur unaire
operateur.interpreteFormule()
texte = reste
return operateur,reste
-
+
def splitArgs(self,nom_fonction,args,nb_args):
"""
Tente de partager args en nb_args elements
pour traiter les niveaux au sein d'un JDC
"""
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
from . import etape_niveau
class JDC(object):
- def __init__(self):
- self.dict_niveaux={}
- self.buildNiveaux()
-
- def buildNiveaux(self):
- for niveau in self.definition.l_niveaux:
- etape_niv = etape_niveau.ETAPE_NIVEAU(niveau,self)
- self.etapes_niveaux.append(etape_niv)
- self.dict_niveaux[niveau.nom]=etape_niv
- self.dict_niveaux.update(etape_niv.dict_niveaux)
+ def __init__(self):
+ self.dict_niveaux={}
+ self.buildNiveaux()
+ def buildNiveaux(self):
+ for niveau in self.definition.l_niveaux:
+ etape_niv = etape_niveau.ETAPE_NIVEAU(niveau,self)
+ self.etapes_niveaux.append(etape_niv)
+ self.dict_niveaux[niveau.nom]=etape_niv
+ self.dict_niveaux.update(etape_niv.dict_niveaux)
from Ihm import CONNECTOR
class JDC_POURSUITE(JDC):
- def __init__(self,definition=None,procedure=None,cata=None,
- cata_ord_dico=None,parent=None,
- nom='SansNom',appli=None,context_ini=None,
- jdc_pere=None,etape_include=None,prefix_include=None,
- recorded_units=None,old_recorded_units=None,**args):
-
- JDC.__init__(self, definition=definition,
- procedure=procedure,
- cata=cata,
- cata_ord_dico=cata_ord_dico,
- parent=parent,
- nom=nom,
- appli=appli,
- context_ini=context_ini,
- **args
- )
- self.jdc_pere=jdc_pere
- self.etape_include=etape_include
- self.prefix_include=prefix_include
- if recorded_units is not None:self.recorded_units=recorded_units
- if old_recorded_units is not None:self.old_recorded_units=old_recorded_units
-
- def o_register(self,sd):
- return self.jdc_pere.o_register(sd)
-
- def nommerSDProd(self,sd,sdnom,restrict='non'):
- """
- Nomme la SD apres avoir verifie que le nommage est possible : nom
- non utilise
- Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU)
- Si le nom est deja utilise, leve une exception
- Met le concept cree dans le contexe global g_context
- """
- #print "nommerSDProd",sd,sdnom,restrict
- if self.prefix_include:
- if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom
-
- if sdnom != '' and sdnom[0] == '_':
- # Si le nom du concept commence par le caractere _ on lui attribue
- # un identificateur automatique comme dans JEVEUX (voir gcncon)
- #
- # nom commencant par __ : il s'agit de concepts qui seront detruits
- # nom commencant par _ : il s'agit de concepts intermediaires qui seront gardes
- # ATTENTION : il faut traiter differemment les concepts dont le nom
- # commence par _ mais qui sont des concepts nommes automatiquement par
- # une eventuelle sous macro.
- if sdnom[1] in string.digits:
- # Ce concept provient probablement d'une sous macro (cas improbable)
- #pas de renommage
- pass
- elif sdnom[1] == '_':
- #cas d'un concept a ne pas conserver apres execution de la commande
- sdnom=sd.id[2:]
- pass
- else:
- sdnom=sd.id[2:]
- pass
-
- o=self.sdsDict.get(sdnom,None)
- if isinstance(o,ASSD):
- raise AsException(tr("Nom de concept deja defini : %s" ,sdnom))
-
- # On pourrait verifier que le jdc_pere apres l'etape etape_include
- # ne contient pas deja un concept de ce nom
- #if self.jdc_pere.getSdApresEtapeAvecDetruire(sdnom,etape=self.etape_include):
- # Il existe un concept apres self => impossible d'inserer
- # raise AsException("Nom de concept deja defini : %s" % sdnom)
- # On a choisi de ne pas faire ce test ici mais de le faire en bloc
- # si necessaire apres en appelant la methode verifContexte
-
- # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
- # Ajoute a la creation (appel de regSD).
- self.sdsDict[sdnom]=sd
- sd.nom=sdnom
-
- # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
- if restrict == 'non':
- self.g_context[sdnom]=sd
-
- def getVerifContexte(self):
- #print "getVerifContexte"
- j_context=self.getContexteAvant(None)
- self.verifContexte(j_context)
- return j_context
-
- def forceContexte(self,contexte):
- for nom_sd,sd in list(contexte.items()):
- if not isinstance(sd,ASSD):continue
- autre_sd= self.jdc_pere.getSdApresEtapeAvecDetruire(nom_sd,sd,
- etape=self.etape_include)
- if autre_sd is None:continue
- if sd is not autre_sd:
- # Il existe un autre concept de meme nom produit par une etape apres self
- # on detruit ce concept pour pouvoir inserer les etapes du jdc_include
- if sd.etape:
- sd.etape.supprimeSdprod(sd)
-
- return contexte
-
- def verifContexte(self,context):
- """
- Cette methode verifie si le contexte passe en argument (context)
- peut etre insere dans le jdc pere de l'include.
- Elle verifie que les concepts contenus dans ce contexte n'entrent
- pas en conflit avec les concepts produits dans le jdc pere
- apres l'include.
- Si le contexte ne peut pas etre insere, la methode leve une
- exception sinon elle retourne le contexte inchange
- """
- #print "verifContexte"
- for nom_sd,sd in list(context.items()):
- if not isinstance(sd,ASSD):continue
- autre_sd= self.jdc_pere.getSdApresEtapeAvecDetruire(nom_sd,sd,
- etape=self.etape_include)
- if autre_sd is None:continue
- if sd is not autre_sd:
- # Il existe un concept produit par une etape apres self
- # => impossible d'inserer
- raise Exception("Impossible d'inclure le fichier. Un concept de nom " +
- "%s existe deja dans le jeu de commandes." % nom_sd)
-
- return context
-
- def getListeCmd(self):
- """
- Retourne la liste des commandes du catalogue
- """
- if self.jdc_pere is None:
- return JDC.getListeCmd(self)
- return self.jdc_pere.getListeCmd()
-
- def getGroups(self):
- """
- Retourne la liste des commandes du catalogue par groupes
- """
- if self.jdc_pere is None:
- return JDC.getGroups(self)
- return self.jdc_pere.getGroups()
-
- def initModif(self):
- """
- Met l'etat de l'etape a : modifie
- Propage la modification au parent
-
- Attention : initModif doit etre appele avant de realiser une modification
- La validite devra etre recalculee apres cette modification
- mais par un appel a finModif pour preserver l'etat modified
- de tous les objets entre temps
- """
- #print "jdc_include.initModif",self,self.etape_include
- self.state = 'modified'
- if self.etape_include:
- self.etape_include.initModif()
-
- def finModif(self):
- """
- Methode appelee une fois qu'une modification a ete faite afin de
- declencher d'eventuels traitements post-modification
- ex : INCLUDE et POURSUITE
- """
- #print "jdc_include.finModif",self,self.etape_include
- CONNECTOR.Emit(self,"valid")
- if self.etape_include:
- self.etape_include.finModif()
-
- def supprime(self):
- """
- On ne supprime rien directement pour un jdc auxiliaire d'include ou de poursuite
- Utiliser supprime_aux
- """
- pass
-
- def supprime_aux(self):
- #print "supprime_aux",self
- JDC.supprime(self)
- self.jdc_pere=None
- self.etape_include=None
- # self.cata_ordonne_dico={}
- self.appli=None
- # self.context_ini={}
- # self.procedure=None
-
- def getContexteAvant(self,etape):
- """
- Retourne le dictionnaire des concepts connus avant etape
- On tient compte des concepts produits par le jdc pere
- en reactualisant le contexte initial context_ini
- On tient compte des commandes qui modifient le contexte
- comme DETRUIRE ou les macros
- Si etape == None, on retourne le contexte en fin de JDC
- """
- #print "jdc_include.getContexteAvant",etape,etape and etape.nom
- if self.etape_include:
- new_context=self.etape_include.parent.getContexteAvant(self.etape_include).copy()
- self.context_ini=new_context
- d= JDC.getContexteAvant(self,etape)
- return d
-
- def resetContext(self):
- #print "jdc_include.resetContext",self,self.nom
- if self.etape_include:
- self.etape_include.parent.resetContext()
- new_context=self.etape_include.parent.getContexteAvant(self.etape_include).copy()
- self.context_ini=new_context
- JDC.resetContext(self)
-
- def getSdApresEtape(self,nom_sd,etape,avec='non'):
- """
- Cette methode retourne la SD de nom nom_sd qui est eventuellement
- definie apres etape
- Si avec vaut 'non' exclut etape de la recherche
- """
- if self.etape_include:
- sd=self.etape_include.parent.getSdApresEtape(nom_sd,self.etape_include,'non')
- if sd:return sd
- return JDC.getSdApresEtape(self,nom_sd,etape,avec)
-
- def getSdApresEtapeAvecDetruire(self,nom_sd,sd,etape,avec='non'):
- """
- On veut savoir ce que devient le concept sd de nom nom_sd apres etape.
- Il peut etre detruit, remplace ou conserve
- Cette methode retourne la SD sd de nom nom_sd qui est eventuellement
- definie apres etape en tenant compte des concepts detruits
- Si avec vaut 'non' exclut etape de la recherche
- """
- #print "jdc_include.getSdApresEtapeAvecDetruire",nom_sd,sd,id(sd)
- autre_sd=JDC.getSdApresEtapeAvecDetruire(self,nom_sd,sd,etape,avec)
- # si autre_sd vaut None le concept sd a ete detruit. On peut terminer
- # la recherche en retournant None
- # Si autre_sd ne vaut pas sd, le concept a ete redefini. On peut terminer
- # la recherche en retournant le concept nouvellement defini
- # Sinon, on poursuit la recherche dans les etapes du niveau superieur.
- if autre_sd is None or autre_sd is not sd :return autre_sd
- return self.etape_include.parent.getSdApresEtapeAvecDetruire(nom_sd,sd,self.etape_include,'non')
-
- def deleteConcept(self,sd):
- """
- Fonction : Mettre a jour les etapes du JDC suite a la disparition du
- concept sd
- Seuls les mots cles simples MCSIMP font un traitement autre
- que de transmettre aux fils
- """
- # Nettoyage des etapes de l'include
- JDC.deleteConcept(self,sd)
- # Nettoyage des etapes du parent
- if self.etape_include:
- self.etape_include.parent.deleteConceptAfterEtape(self.etape_include,sd)
-
- def deleteConceptAfterEtape(self,etape,sd):
- """
- Fonction : Mettre a jour les etapes du JDC qui sont apres etape suite a
- la disparition du concept sd
- """
- # Nettoyage des etapes de l'include
- JDC.deleteConceptAfterEtape(self,etape,sd)
- # Nettoyage des etapes du parent
- if self.etape_include:
- self.etape_include.parent.deleteConceptAfterEtape(self.etape_include,sd)
-
- def updateConceptAfterEtape(self,etape,sd):
- """
- Fonction : mettre a jour les etapes du JDC suite a une modification
- du concept sd (principalement renommage)
- """
- JDC.updateConceptAfterEtape(self,etape,sd)
- if self.etape_include:
- self.etape_include.parent.updateConceptAfterEtape(self.etape_include,sd)
-
- def replaceConceptAfterEtape(self,etape,old_sd,sd):
- """
- Fonction : Mettre a jour les etapes du JDC qui sont apres etape suite au
- remplacement du concept old_sd par sd
- """
- # Nettoyage des etapes de l'include
- JDC.replaceConceptAfterEtape(self,etape,old_sd,sd)
- # Nettoyage des etapes du parent
- if self.etape_include:
- self.etape_include.parent.replaceConceptAfterEtape(self.etape_include,old_sd,sd)
-
- def changeFichier(self,fichier):
- if self.etape_include:
- self.etape_include.fichier_ini=fichier
- self.finModif()
-
- def controlContextApres(self,etape):
- """
- Cette methode verifie que les etapes apres l'etape etape
- ont bien des concepts produits acceptables (pas de conflit de
- nom principalement)
- Si des concepts produits ne sont pas acceptables ils sont supprimes.
- Effectue les verifications sur les etapes du jdc mais aussi sur les
- jdc parents s'ils existent.
- """
- #print "jdc_include.controlContextApres",self,etape
- #Regularise les etapes du jdc apres l'etape etape
- self.controlJdcContextApres(etape)
- if self.etape_include:
- #print "CONTROL_INCLUDE:",self.etape_include,self.etape_include.nom
- # il existe un jdc pere. On propage la regularisation
- self.etape_include.parent.controlContextApres(self.etape_include)
+ def __init__(self,definition=None,procedure=None,cata=None,
+ cata_ord_dico=None,parent=None,
+ nom='SansNom',appli=None,context_ini=None,
+ jdc_pere=None,etape_include=None,prefix_include=None,
+ recorded_units=None,old_recorded_units=None,**args):
+
+ JDC.__init__(self, definition=definition,
+ procedure=procedure,
+ cata=cata,
+ cata_ord_dico=cata_ord_dico,
+ parent=parent,
+ nom=nom,
+ appli=appli,
+ context_ini=context_ini,
+ **args
+ )
+ self.jdc_pere=jdc_pere
+ self.etape_include=etape_include
+ self.prefix_include=prefix_include
+ if recorded_units is not None:self.recorded_units=recorded_units
+ if old_recorded_units is not None:self.old_recorded_units=old_recorded_units
+
+ def o_register(self,sd):
+ return self.jdc_pere.o_register(sd)
+
+ def nommerSDProd(self,sd,sdnom,restrict='non'):
+ """
+ Nomme la SD apres avoir verifie que le nommage est possible : nom
+ non utilise
+ Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU)
+ Si le nom est deja utilise, leve une exception
+ Met le concept cree dans le contexe global g_context
+ """
+ #print "nommerSDProd",sd,sdnom,restrict
+ if self.prefix_include:
+ if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom
+
+ if sdnom != '' and sdnom[0] == '_':
+ # Si le nom du concept commence par le caractere _ on lui attribue
+ # un identificateur automatique comme dans JEVEUX (voir gcncon)
+ #
+ # nom commencant par __ : il s'agit de concepts qui seront detruits
+ # nom commencant par _ : il s'agit de concepts intermediaires qui seront gardes
+ # ATTENTION : il faut traiter differemment les concepts dont le nom
+ # commence par _ mais qui sont des concepts nommes automatiquement par
+ # une eventuelle sous macro.
+ if sdnom[1] in string.digits:
+ # Ce concept provient probablement d'une sous macro (cas improbable)
+ #pas de renommage
+ pass
+ elif sdnom[1] == '_':
+ #cas d'un concept a ne pas conserver apres execution de la commande
+ sdnom=sd.id[2:]
+ pass
+ else:
+ sdnom=sd.id[2:]
+ pass
+
+ o=self.sdsDict.get(sdnom,None)
+ if isinstance(o,ASSD):
+ raise AsException(tr("Nom de concept deja defini : %s" ,sdnom))
+
+ # On pourrait verifier que le jdc_pere apres l'etape etape_include
+ # ne contient pas deja un concept de ce nom
+ #if self.jdc_pere.getSdApresEtapeAvecDetruire(sdnom,etape=self.etape_include):
+ # Il existe un concept apres self => impossible d'inserer
+ # raise AsException("Nom de concept deja defini : %s" % sdnom)
+ # On a choisi de ne pas faire ce test ici mais de le faire en bloc
+ # si necessaire apres en appelant la methode verifContexte
+
+ # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
+ # Ajoute a la creation (appel de regSD).
+ self.sdsDict[sdnom]=sd
+ sd.nom=sdnom
+
+ # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
+ if restrict == 'non':
+ self.g_context[sdnom]=sd
+
+ def getVerifContexte(self):
+ #print "getVerifContexte"
+ j_context=self.getContexteAvant(None)
+ self.verifContexte(j_context)
+ return j_context
+
+ def forceContexte(self,contexte):
+ for nom_sd,sd in list(contexte.items()):
+ if not isinstance(sd,ASSD):continue
+ autre_sd= self.jdc_pere.getSdApresEtapeAvecDetruire(nom_sd,sd,
+ etape=self.etape_include)
+ if autre_sd is None:continue
+ if sd is not autre_sd:
+ # Il existe un autre concept de meme nom produit par une etape apres self
+ # on detruit ce concept pour pouvoir inserer les etapes du jdc_include
+ if sd.etape:
+ sd.etape.supprimeSdprod(sd)
+
+ return contexte
+
+ def verifContexte(self,context):
+ """
+ Cette methode verifie si le contexte passe en argument (context)
+ peut etre insere dans le jdc pere de l'include.
+ Elle verifie que les concepts contenus dans ce contexte n'entrent
+ pas en conflit avec les concepts produits dans le jdc pere
+ apres l'include.
+ Si le contexte ne peut pas etre insere, la methode leve une
+ exception sinon elle retourne le contexte inchange
+ """
+ #print "verifContexte"
+ for nom_sd,sd in list(context.items()):
+ if not isinstance(sd,ASSD):continue
+ autre_sd= self.jdc_pere.getSdApresEtapeAvecDetruire(nom_sd,sd,
+ etape=self.etape_include)
+ if autre_sd is None:continue
+ if sd is not autre_sd:
+ # Il existe un concept produit par une etape apres self
+ # => impossible d'inserer
+ raise Exception("Impossible d'inclure le fichier. Un concept de nom " +
+ "%s existe deja dans le jeu de commandes." % nom_sd)
+
+ return context
+
+ def getListeCmd(self):
+ """
+ Retourne la liste des commandes du catalogue
+ """
+ if self.jdc_pere is None:
+ return JDC.getListeCmd(self)
+ return self.jdc_pere.getListeCmd()
+
+ def getGroups(self):
+ """
+ Retourne la liste des commandes du catalogue par groupes
+ """
+ if self.jdc_pere is None:
+ return JDC.getGroups(self)
+ return self.jdc_pere.getGroups()
+
+ def initModif(self):
+ """
+ Met l'etat de l'etape a : modifie
+ Propage la modification au parent
+
+ Attention : initModif doit etre appele avant de realiser une modification
+ La validite devra etre recalculee apres cette modification
+ mais par un appel a finModif pour preserver l'etat modified
+ de tous les objets entre temps
+ """
+ #print "jdc_include.initModif",self,self.etape_include
+ self.state = 'modified'
+ if self.etape_include:
+ self.etape_include.initModif()
+
+ def finModif(self):
+ """
+ Methode appelee une fois qu'une modification a ete faite afin de
+ declencher d'eventuels traitements post-modification
+ ex : INCLUDE et POURSUITE
+ """
+ #print "jdc_include.finModif",self,self.etape_include
+ CONNECTOR.Emit(self,"valid")
+ if self.etape_include:
+ self.etape_include.finModif()
+
+ def supprime(self):
+ """
+ On ne supprime rien directement pour un jdc auxiliaire d'include ou de poursuite
+ Utiliser supprime_aux
+ """
+ pass
+
+ def supprime_aux(self):
+ #print "supprime_aux",self
+ JDC.supprime(self)
+ self.jdc_pere=None
+ self.etape_include=None
+ # self.cata_ordonne_dico={}
+ self.appli=None
+ # self.context_ini={}
+ # self.procedure=None
+
+ def getContexteAvant(self,etape):
+ """
+ Retourne le dictionnaire des concepts connus avant etape
+ On tient compte des concepts produits par le jdc pere
+ en reactualisant le contexte initial context_ini
+ On tient compte des commandes qui modifient le contexte
+ comme DETRUIRE ou les macros
+ Si etape == None, on retourne le contexte en fin de JDC
+ """
+ #print "jdc_include.getContexteAvant",etape,etape and etape.nom
+ if self.etape_include:
+ new_context=self.etape_include.parent.getContexteAvant(self.etape_include).copy()
+ self.context_ini=new_context
+ d= JDC.getContexteAvant(self,etape)
+ return d
+
+ def resetContext(self):
+ #print "jdc_include.resetContext",self,self.nom
+ if self.etape_include:
+ self.etape_include.parent.resetContext()
+ new_context=self.etape_include.parent.getContexteAvant(self.etape_include).copy()
+ self.context_ini=new_context
+ JDC.resetContext(self)
+
+ def getSdApresEtape(self,nom_sd,etape,avec='non'):
+ """
+ Cette methode retourne la SD de nom nom_sd qui est eventuellement
+ definie apres etape
+ Si avec vaut 'non' exclut etape de la recherche
+ """
+ if self.etape_include:
+ sd=self.etape_include.parent.getSdApresEtape(nom_sd,self.etape_include,'non')
+ if sd:return sd
+ return JDC.getSdApresEtape(self,nom_sd,etape,avec)
+
+ def getSdApresEtapeAvecDetruire(self,nom_sd,sd,etape,avec='non'):
+ """
+ On veut savoir ce que devient le concept sd de nom nom_sd apres etape.
+ Il peut etre detruit, remplace ou conserve
+ Cette methode retourne la SD sd de nom nom_sd qui est eventuellement
+ definie apres etape en tenant compte des concepts detruits
+ Si avec vaut 'non' exclut etape de la recherche
+ """
+ #print "jdc_include.getSdApresEtapeAvecDetruire",nom_sd,sd,id(sd)
+ autre_sd=JDC.getSdApresEtapeAvecDetruire(self,nom_sd,sd,etape,avec)
+ # si autre_sd vaut None le concept sd a ete detruit. On peut terminer
+ # la recherche en retournant None
+ # Si autre_sd ne vaut pas sd, le concept a ete redefini. On peut terminer
+ # la recherche en retournant le concept nouvellement defini
+ # Sinon, on poursuit la recherche dans les etapes du niveau superieur.
+ if autre_sd is None or autre_sd is not sd :return autre_sd
+ return self.etape_include.parent.getSdApresEtapeAvecDetruire(nom_sd,sd,self.etape_include,'non')
+
+ def deleteConcept(self,sd):
+ """
+ Fonction : Mettre a jour les etapes du JDC suite a la disparition du
+ concept sd
+ Seuls les mots cles simples MCSIMP font un traitement autre
+ que de transmettre aux fils
+ """
+ # Nettoyage des etapes de l'include
+ JDC.deleteConcept(self,sd)
+ # Nettoyage des etapes du parent
+ if self.etape_include:
+ self.etape_include.parent.deleteConceptAfterEtape(self.etape_include,sd)
+
+ def deleteConceptAfterEtape(self,etape,sd):
+ """
+ Fonction : Mettre a jour les etapes du JDC qui sont apres etape suite a
+ la disparition du concept sd
+ """
+ # Nettoyage des etapes de l'include
+ JDC.deleteConceptAfterEtape(self,etape,sd)
+ # Nettoyage des etapes du parent
+ if self.etape_include:
+ self.etape_include.parent.deleteConceptAfterEtape(self.etape_include,sd)
+
+ def updateConceptAfterEtape(self,etape,sd):
+ """
+ Fonction : mettre a jour les etapes du JDC suite a une modification
+ du concept sd (principalement renommage)
+ """
+ JDC.updateConceptAfterEtape(self,etape,sd)
+ if self.etape_include:
+ self.etape_include.parent.updateConceptAfterEtape(self.etape_include,sd)
+
+ def replaceConceptAfterEtape(self,etape,old_sd,sd):
+ """
+ Fonction : Mettre a jour les etapes du JDC qui sont apres etape suite au
+ remplacement du concept old_sd par sd
+ """
+ # Nettoyage des etapes de l'include
+ JDC.replaceConceptAfterEtape(self,etape,old_sd,sd)
+ # Nettoyage des etapes du parent
+ if self.etape_include:
+ self.etape_include.parent.replaceConceptAfterEtape(self.etape_include,old_sd,sd)
+
+ def changeFichier(self,fichier):
+ if self.etape_include:
+ self.etape_include.fichier_ini=fichier
+ self.finModif()
+
+ def controlContextApres(self,etape):
+ """
+ Cette methode verifie que les etapes apres l'etape etape
+ ont bien des concepts produits acceptables (pas de conflit de
+ nom principalement)
+ Si des concepts produits ne sont pas acceptables ils sont supprimes.
+ Effectue les verifications sur les etapes du jdc mais aussi sur les
+ jdc parents s'ils existent.
+ """
+ #print "jdc_include.controlContextApres",self,etape
+ #Regularise les etapes du jdc apres l'etape etape
+ self.controlJdcContextApres(etape)
+ if self.etape_include:
+ #print "CONTROL_INCLUDE:",self.etape_include,self.etape_include.nom
+ # il existe un jdc pere. On propage la regularisation
+ self.etape_include.parent.controlContextApres(self.etape_include)
class JDC_INCLUDE(JDC_POURSUITE):
- def getListeCmd(self):
- """
- Retourne la liste des commandes du catalogue
- """
- if self.jdc_pere is None:
- return JDC.getListeCmd(self)
- return [e for e in self.jdc_pere.getListeCmd() if e not in ("DEBUT","POURSUITE","FIN") ]
-
- def activeEtapes(self):
- for e in self.etapes:
- e.active()
+ def getListeCmd(self):
+ """
+ Retourne la liste des commandes du catalogue
+ """
+ if self.jdc_pere is None:
+ return JDC.getListeCmd(self)
+ return [e for e in self.jdc_pere.getListeCmd() if e not in ("DEBUT","POURSUITE","FIN") ]
+
+ def activeEtapes(self):
+ for e in self.etapes:
+ e.active()
class JDC_CATA_INCLUDE(JDC_CATA):
- class_instance=JDC_INCLUDE
+ class_instance=JDC_INCLUDE
class JDC_CATA_POURSUITE(JDC_CATA):
- class_instance=JDC_POURSUITE
+ class_instance=JDC_POURSUITE
from Accas import AU_MOINS_UN,A_CLASSER
A_CLASSER(('DEBUT','POURSUITE'),'FIN')
)
)
-
-
import os
try :
- from PyQt5.QtCore import QTranslator
- code_translator = QTranslator()
- eficas_translator = QTranslator()
+ from PyQt5.QtCore import QTranslator
+ code_translator = QTranslator()
+ eficas_translator = QTranslator()
except :
- code_translator = None
- eficas_translator = None
- print ('pas d import de qt, pas de traduction')
-
+ code_translator = None
+ eficas_translator = None
+ print ('pas d import de qt, pas de traduction')
+
def localise(application, locale=None,file=None,translatorFichier=None, debug=False ):
"""
"""
- if code_translator == None :
- print ('qt not avalaible, no translation')
- return
+ if code_translator == None :
+ print ('qt not avalaible, no translation')
+ return
from PyQt5.QtCore import QLibraryInfo
from PyQt5.QtCore import QLocale
from PyQt5.QtWidgets import QApplication
if locale=="ang" : locale="en"
if file != None and debug :
- print ('chargement de ', file,monPath)
- print (eficas_translator.load(file,monPath))
- print (QApplication.installTranslator(eficas_translator))
+ print ('chargement de ', file,monPath)
+ print (eficas_translator.load(file,monPath))
+ print (QApplication.installTranslator(eficas_translator))
elif eficas_translator.load("eficas_" + locale, monPath):
- QApplication.installTranslator(eficas_translator)
+ QApplication.installTranslator(eficas_translator)
elif debug:
- print ("Unable to load Eficas translator!")
+ print ("Unable to load Eficas translator!")
if debug : print ('translatorFichier :' ,translatorFichier)
if translatorFichier != None :
- if (code_translator.load(translatorFichier)) and debug:
- print (translatorFichier, ' loaded')
- elif (code_translator.load(translatorFichier+'_'+locale) and debug):
- print(translatorFichier+'_'+locale+ ' loaded')
- elif debug :
- print ("Unable to load Code translator! No file or No translation" + translatorFichier)
- if debug : print (QApplication.installTranslator(code_translator))
- else : QApplication.installTranslator(code_translator)
+ if (code_translator.load(translatorFichier)) and debug:
+ print (translatorFichier, ' loaded')
+ elif (code_translator.load(translatorFichier+'_'+locale) and debug):
+ print(translatorFichier+'_'+locale+ ' loaded')
+ elif debug :
+ print ("Unable to load Code translator! No file or No translation" + translatorFichier)
+ if debug : print (QApplication.installTranslator(code_translator))
+ else : QApplication.installTranslator(code_translator)
if __name__ == "__main__":
"""
# Modules Python
from __future__ import absolute_import
-try :
- from builtins import str
+try :
+ from builtins import str
except : pass
from Extensions.i18n import tr
class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
- """
- """
- nature = "MCNUPLET"
- txt_nat="Nuplet : "
-
- def __init__(self,val,definition,nom,parent):
- # val contient la valeur initial du nuplet
- self.val = val
- if val == None: self.val=()
- self.definition=definition
- self.nom=nom
- self.parent = parent
- # getValeurEffective affecte la valeur par defaut si necessaire
- self.valeur=self.getValeurEffective(self.val)
- if parent :
- self.jdc = self.parent.jdc
- self.niveau = self.parent.niveau
- self.etape = self.parent.etape
- else:
- # Le mot cle a ete cree sans parent
- self.jdc = None
- self.niveau = None
- self.etape = None
- self.state = 'undetermined'
- self.actif=1
- self.mcListe=self.buildMc()
-
- def buildMc(self):
- """
- Construit la liste des sous-entites de MCNUPLET
- a partir de la liste des arguments (valeur)
- """
- args = self.valeur
- if args ==None : args =()
- mcListe=[]
-
- # on cree les sous entites du NUPLET a partir des valeurs initiales
- k=0
- for v in self.definition.entites:
- if k < len(args):
- val=args[k]
+ """
+ """
+ nature = "MCNUPLET"
+ txt_nat="Nuplet : "
+
+ def __init__(self,val,definition,nom,parent):
+ # val contient la valeur initial du nuplet
+ self.val = val
+ if val == None: self.val=()
+ self.definition=definition
+ self.nom=nom
+ self.parent = parent
+ # getValeurEffective affecte la valeur par defaut si necessaire
+ self.valeur=self.getValeurEffective(self.val)
+ if parent :
+ self.jdc = self.parent.jdc
+ self.niveau = self.parent.niveau
+ self.etape = self.parent.etape
else:
- val=None
- objet=v(val=val,nom=repr(k),parent=self)
- if hasattr(objet.definition,'position'):
- if objet.definition.position == 'global' :
- self.append_mc_global(objet)
- #XXX et global_jdc ??
- mcListe.append(objet)
- k=k+1
- # Un nuplet n'a pas de mots inconnus
- self.reste_val={}
- return mcListe
-
- def isValid(self,cr='non'):
- """
- Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
- """
- if self.state == 'unchanged' :
- return self.valid
- else:
- valid = 1
- if hasattr(self,'valid'):
- old_valid = self.valid
+ # Le mot cle a ete cree sans parent
+ self.jdc = None
+ self.niveau = None
+ self.etape = None
+ self.state = 'undetermined'
+ self.actif=1
+ self.mcListe=self.buildMc()
+
+ def buildMc(self):
+ """
+ Construit la liste des sous-entites de MCNUPLET
+ a partir de la liste des arguments (valeur)
+ """
+ args = self.valeur
+ if args ==None : args =()
+ mcListe=[]
+
+ # on cree les sous entites du NUPLET a partir des valeurs initiales
+ k=0
+ for v in self.definition.entites:
+ if k < len(args):
+ val=args[k]
+ else:
+ val=None
+ objet=v(val=val,nom=repr(k),parent=self)
+ if hasattr(objet.definition,'position'):
+ if objet.definition.position == 'global' :
+ self.append_mc_global(objet)
+ #XXX et global_jdc ??
+ mcListe.append(objet)
+ k=k+1
+ # Un nuplet n'a pas de mots inconnus
+ self.reste_val={}
+ return mcListe
+
+ def isValid(self,cr='non'):
+ """
+ Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
+ """
+ if self.state == 'unchanged' :
+ return self.valid
else:
- old_valid = None
- for child in self.mcListe :
- if not child.isValid():
- valid = 0
- break
- if len(self.mcListe) != len(self.definition.entites):
- valid=0
- if cr == 'oui' :
- self.cr.fatal(''.join(("Nuplet : ",self.nom,tr("Longueur incorrecte"))))
- self.valid = valid
- self.state = 'unchanged'
- if old_valid:
- if old_valid != self.valid : self.initModifUp()
- return self.valid
-
- def __getitem__(self,key):
- """
- Retourne le key eme element du nuplet
- """
- # Un nuplet est toujours une liste de mots cles simples
- # On retourne donc la valeur
- return self.mcListe[key].valeur
-
- def __str__(self):
- """
- Retourne une representation du nuplet sous forme de chaine
- de caracteres
- """
- s='('
- for e in self.mcListe:
- s=s + str(e.valeur) + ','
- return s + ')'
-
- def __repr__(self):
- """
- Retourne une representation du nuplet sous forme de chaine
- de caracteres
- """
- s='('
- for e in self.mcListe:
- s=s + str(e.valeur) + ','
- return s + ')'
-
- def getRegles(self):
- """
- Retourne la liste des regles attachees au nuplet
- """
- return []
-
- def verifConditionBloc(self):
- """
- Verifie s'il y a des blocs sous le nuplet et retourne
- les blocs en question
- """
- # Il n y a pas de BLOCs sous un NUPLET
- return [],[]
-
- def isRepetable(self):
- """
- Indique si le NUPLET peut etre repete.
- Retourne 1 si c'est le cas.
- Retourne 0 dans le cas contraire.
- L'information est donnee par le catalogue, cad la definition de self
- """
- if self.definition.min != self.definition.max :
- return 1
- else :
- return 0
-
- def makeobjet(self):
- return self.definition(val = None, nom = self.nom,parent = self.parent)
-
- def getValeur(self):
- """
- Cette methode doit retourner la valeur de l'objet. Elle est utilisee par
- creeDictValeurs pour construire un dictionnaire contenant les mots cles
- d'une etape.
- Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
- des mots cle simples contenus.
- """
- l=[]
- for v in self.mcListe:
- l.append(v.valeur)
- return l
-
- def getVal(self):
- """
- Une autre methode qui retourne une "autre" valeur du mot cle facteur.
- Elle est utilisee par la methode getMocle
- """
- l=[]
- for v in self.mcListe:
- l.append(v.valeur)
- return l
-
- def isOblig(self):
- return self.definition.statut=='o'
-
- def getFr(self):
- """
- Retourne le texte d'aide dans la langue choisie
- """
- try :
- return getattr(self.definition,self.jdc.lang)
- except:
- return ''
-
- def creeDictValeurs(self,liste=[],condition=0):
- dico={}
- return dico
-
- def updateConditionBloc(self):
- """
- Realise l'update des blocs conditionnels fils de self
- et propage au parent (rien a faire pour nuplet)
- """
-
-
-
-
-
+ valid = 1
+ if hasattr(self,'valid'):
+ old_valid = self.valid
+ else:
+ old_valid = None
+ for child in self.mcListe :
+ if not child.isValid():
+ valid = 0
+ break
+ if len(self.mcListe) != len(self.definition.entites):
+ valid=0
+ if cr == 'oui' :
+ self.cr.fatal(''.join(("Nuplet : ",self.nom,tr("Longueur incorrecte"))))
+ self.valid = valid
+ self.state = 'unchanged'
+ if old_valid:
+ if old_valid != self.valid : self.initModifUp()
+ return self.valid
+
+ def __getitem__(self,key):
+ """
+ Retourne le key eme element du nuplet
+ """
+ # Un nuplet est toujours une liste de mots cles simples
+ # On retourne donc la valeur
+ return self.mcListe[key].valeur
+
+ def __str__(self):
+ """
+ Retourne une representation du nuplet sous forme de chaine
+ de caracteres
+ """
+ s='('
+ for e in self.mcListe:
+ s=s + str(e.valeur) + ','
+ return s + ')'
+
+ def __repr__(self):
+ """
+ Retourne une representation du nuplet sous forme de chaine
+ de caracteres
+ """
+ s='('
+ for e in self.mcListe:
+ s=s + str(e.valeur) + ','
+ return s + ')'
+
+ def getRegles(self):
+ """
+ Retourne la liste des regles attachees au nuplet
+ """
+ return []
+
+ def verifConditionBloc(self):
+ """
+ Verifie s'il y a des blocs sous le nuplet et retourne
+ les blocs en question
+ """
+ # Il n y a pas de BLOCs sous un NUPLET
+ return [],[]
+
+ def isRepetable(self):
+ """
+ Indique si le NUPLET peut etre repete.
+ Retourne 1 si c'est le cas.
+ Retourne 0 dans le cas contraire.
+ L'information est donnee par le catalogue, cad la definition de self
+ """
+ if self.definition.min != self.definition.max :
+ return 1
+ else :
+ return 0
+
+ def makeobjet(self):
+ return self.definition(val = None, nom = self.nom,parent = self.parent)
+
+ def getValeur(self):
+ """
+ Cette methode doit retourner la valeur de l'objet. Elle est utilisee par
+ creeDictValeurs pour construire un dictionnaire contenant les mots cles
+ d'une etape.
+ Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
+ des mots cle simples contenus.
+ """
+ l=[]
+ for v in self.mcListe:
+ l.append(v.valeur)
+ return l
+
+ def getVal(self):
+ """
+ Une autre methode qui retourne une "autre" valeur du mot cle facteur.
+ Elle est utilisee par la methode getMocle
+ """
+ l=[]
+ for v in self.mcListe:
+ l.append(v.valeur)
+ return l
+
+ def isOblig(self):
+ return self.definition.statut=='o'
+
+ def getFr(self):
+ """
+ Retourne le texte d'aide dans la langue choisie
+ """
+ try :
+ return getattr(self.definition,self.jdc.lang)
+ except:
+ return ''
+
+ def creeDictValeurs(self,liste=[],condition=0):
+ dico={}
+ return dico
+
+ def updateConditionBloc(self):
+ """
+ Realise l'update des blocs conditionnels fils de self
+ et propage au parent (rien a faire pour nuplet)
+ """
des groupes de commandes dans le catalogue
"""
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class NIVEAU(object):
- def __init__(self,nom='',label='',niveaux=(),valide_vide=1,actif=1):
- self.nom = nom
- self.label = label
- self.statut='o'
- self.min = 1
- self.max = 1
- self.entites = []
- self.l_noms_entites=[]
- self.valide_vide = valide_vide
- self.actif = actif
- self.d_niveaux = {}
- self.l_niveaux = niveaux
- for niveau in niveaux:
- self.d_niveaux[niveau.nom]=niveau
- self.d_niveaux.update(niveau.d_niveaux)
+ def __init__(self,nom='',label='',niveaux=(),valide_vide=1,actif=1):
+ self.nom = nom
+ self.label = label
+ self.statut='o'
+ self.min = 1
+ self.max = 1
+ self.entites = []
+ self.l_noms_entites=[]
+ self.valide_vide = valide_vide
+ self.actif = actif
+ self.d_niveaux = {}
+ self.l_niveaux = niveaux
+ for niveau in niveaux:
+ self.d_niveaux[niveau.nom]=niveau
+ self.d_niveaux.update(niveau.d_niveaux)
- def enregistre(self,commande):
- self.entites.append(commande)
- self.l_noms_entites.append(commande.nom)
-
- def getListeCmd(self):
- self.l_noms_entites.sort()
- return self.l_noms_entites
+ def enregistre(self,commande):
+ self.entites.append(commande)
+ self.l_noms_entites.append(commande.nom)
+ def getListeCmd(self):
+ self.l_noms_entites.sort()
+ return self.l_noms_entites
"""
# Modules Python
from __future__ import absolute_import
-try :
- from builtins import str
+try :
+ from builtins import str
except : pass
import types
from . import mcnuplet
class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
- """
- """
- class_instance = mcnuplet.MCNUPLET
- list_instance = N_MCLIST.MCList
- label='NUPLET'
- CR=N_CR.CR
+ """
+ """
+ class_instance = mcnuplet.MCNUPLET
+ list_instance = N_MCLIST.MCList
+ label='NUPLET'
+ CR=N_CR.CR
- def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1,
- elements=None):
- N_ENTITE.ENTITE.__init__(self)
- I_ENTITE.ENTITE.__init__(self)
- self.fr=fr
- self.ang=ang
- self.docu=docu
- self.statut=statut
- self.defaut=defaut
- self.min=min
- self.max=max
- if self.max =='**' : self.max=float('inf')
- if self.min =='**' : self.min=float('-inf')
- self.entites=elements
- self.regles=()
- # on force le statut des sous entites a obligatoire
- for e in elements:e.statut='o'
- self.idracine="NUPLET"
- self.affecter_parente()
+ def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1,
+ elements=None):
+ N_ENTITE.ENTITE.__init__(self)
+ I_ENTITE.ENTITE.__init__(self)
+ self.fr=fr
+ self.ang=ang
+ self.docu=docu
+ self.statut=statut
+ self.defaut=defaut
+ self.min=min
+ self.max=max
+ if self.max =='**' : self.max=float('inf')
+ if self.min =='**' : self.min=float('-inf')
+ self.entites=elements
+ self.regles=()
+ # on force le statut des sous entites a obligatoire
+ for e in elements:e.statut='o'
+ self.idracine="NUPLET"
+ self.affecter_parente()
- def verifCata(self):
- """
- Cette methode sert a valider les attributs de l'objet de definition
- de la classe NUPL
- """
- if type(self.min) != int :
- if self.min != '**' and self.min != float('-inf'):
- self.cr.fatal(tr("L'attribut 'min' doit etre un entier : ")+str(self.min))
- if type(self.max) != int :
- if self.max != '**' and self.max != float('inf'):
- self.cr.fatal(tr("L'attribut 'max' doit etre un entier : ")+str(self.max))
- if self.min > self.max :
- self.cr.fatal(tr("Nombres d'occurrence min et max invalides :") +str(self.min)+","+str(self.max))
- if type(self.fr) != bytes and type(self.fr) != str :
- self.cr.fatal(tr("L'attribut 'fr' doit etre une chaine de caracteres"))
- if self.statut not in ['o','f','c','d']:
- self.cr.fatal(tr("L'attribut 'statut' doit valoir 'o','f','c' ou 'd'"))
- if type(self.docu) != bytes and type(self.docu) != str :
- self.cr.fatal(tr("L'attribut 'docu' doit etre une chaine de caracteres"))
- self.verifCataRegles()
+ def verifCata(self):
+ """
+ Cette methode sert a valider les attributs de l'objet de definition
+ de la classe NUPL
+ """
+ if type(self.min) != int :
+ if self.min != '**' and self.min != float('-inf'):
+ self.cr.fatal(tr("L'attribut 'min' doit etre un entier : ")+str(self.min))
+ if type(self.max) != int :
+ if self.max != '**' and self.max != float('inf'):
+ self.cr.fatal(tr("L'attribut 'max' doit etre un entier : ")+str(self.max))
+ if self.min > self.max :
+ self.cr.fatal(tr("Nombres d'occurrence min et max invalides :") +str(self.min)+","+str(self.max))
+ if type(self.fr) != bytes and type(self.fr) != str :
+ self.cr.fatal(tr("L'attribut 'fr' doit etre une chaine de caracteres"))
+ if self.statut not in ['o','f','c','d']:
+ self.cr.fatal(tr("L'attribut 'statut' doit valoir 'o','f','c' ou 'd'"))
+ if type(self.docu) != bytes and type(self.docu) != str :
+ self.cr.fatal(tr("L'attribut 'docu' doit etre une chaine de caracteres"))
+ self.verifCataRegles()
- def __call__(self,val,nom,parent):
- """
- Construit la structure de donnees pour un NUPLET a partir de sa definition (self)
- de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
- """
- if (type(val) == tuple or type(val) == list) and type(val[0]) == tuple:
- # On est en presence d une liste de nuplets
- l=self.list_instance()
- l.init(nom=nom,parent=parent)
- for v in val:
- objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
- l.append(objet)
- return l
- else:
- # on est en presence d un seul nuplet
- return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+ def __call__(self,val,nom,parent):
+ """
+ Construit la structure de donnees pour un NUPLET a partir de sa definition (self)
+ de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
+ """
+ if (type(val) == tuple or type(val) == list) and type(val[0]) == tuple:
+ # On est en presence d une liste de nuplets
+ l=self.list_instance()
+ l.init(nom=nom,parent=parent)
+ for v in val:
+ objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
+ l.append(objet)
+ return l
+ else:
+ # on est en presence d un seul nuplet
+ return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
- def report(self):
- """
- Methode qui cree le rapport de verification du catalogue du nuplet
- """
- self.cr = self.CR()
- self.verifCata()
- for v in self.entites :
- cr = v.report()
- cr.debut =tr("Debut ")+v.__class__.__name__+ ' : '
- cr.fin =tr("Fin ")+v.__class__.__name__+ ' : '
- self.cr.add(cr)
- return self.cr
-
- def affecter_parente(self):
- """
- Cette methode a pour fonction de donner un nom et un pere aux
- sous entites qui n'ont aucun moyen pour atteindre leur parent
- directement
- Il s'agit principalement des mots cles
- """
- k=0
- for v in self.entites:
- v.pere = self
- v.nom = str(k)
- k=k+1
+ def report(self):
+ """
+ Methode qui cree le rapport de verification du catalogue du nuplet
+ """
+ self.cr = self.CR()
+ self.verifCata()
+ for v in self.entites :
+ cr = v.report()
+ cr.debut =tr("Debut ")+v.__class__.__name__+ ' : '
+ cr.fin =tr("Fin ")+v.__class__.__name__+ ' : '
+ self.cr.add(cr)
+ return self.cr
+ def affecter_parente(self):
+ """
+ Cette methode a pour fonction de donner un nom et un pere aux
+ sous entites qui n'ont aucun moyen pour atteindre leur parent
+ directement
+ Il s'agit principalement des mots cles
+ """
+ k=0
+ for v in self.entites:
+ v.pere = self
+ v.nom = str(k)
+ k=k+1
from __future__ import division
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import math
import types
import six
try:
- import Numeric
+ import Numeric
except:
- try:
- import numpy
- Numeric = numpy
- except ImportError:
- Numeric = None
+ try:
+ import numpy
+ Numeric = numpy
+ except ImportError:
+ Numeric = None
def mkf(value):
val=self.eval()
if val is None:return 0
try:
- return len(val)
+ return len(val)
except:
- return 1
+ return 1
def __complex__(self): return complex(self.eval())
def __int__(self): return int(self.eval())
def __long__(self): return int(self.eval())
def __rfloordiv__(self, other): return Binop('//', other, self)
def __pow__(self, other): return Binop('**', self, other)
def __rpow__(self, other): return Binop('**', other, self)
- def __getitem__(self,i):
+ def __getitem__(self,i):
if i > len(self) : raise StopIteration
return Binop('[]',self,i)
def __cmp__( self, other ): return self.eval().__cmp__(other)
def __hash__(self):return id(self)
def _div(a,b):
- if isinstance(a,six.integer_types) and isinstance(b,six.integer_types):
- if a%b:
- return a/b
+ if isinstance(a,six.integer_types) and isinstance(b,six.integer_types):
+ if a%b:
+ return a/b
+ else:
+ return a//b
else:
- return a//b
- else:
- return a/b
+ return a/b
class Binop(Formula):
def __str__(self):
if self.op == '[]':
- return "%s[%s]" % (self.values[0], self.values[1])
+ return "%s[%s]" % (self.values[0], self.values[1])
else:
- return "(%s %s %s)" % (self.values[0], self.op, self.values[1])
+ return "(%s %s %s)" % (self.values[0], self.op, self.values[1])
def __repr__(self):
if self.op == '[]':
- return "%s[%s]" % (self.values[0], self.values[1])
+ return "%s[%s]" % (self.values[0], self.values[1])
else:
- return "(%s %s %s)" % (self.values[0], self.op, self.values[1])
+ return "(%s %s %s)" % (self.values[0], self.op, self.values[1])
def eval(self):
result= self.opmap[self.op](self.values[0].eval(),
self.values[1].eval())
while isinstance(result,Formula):
- result=result.eval()
+ result=result.eval()
return result
def __adapt__(self,validator):
return validator.adapt(self.eval())
self._op = op
self._arg=[]
for a in arg:
- self._arg.append(mkf(a))
+ self._arg.append(mkf(a))
def __str__(self):
s="%s(" % self._nom
for a in self._arg:
- s=s+str(a)+','
+ s=s+str(a)+','
s=s+")"
return s
def __repr__(self):
s="%s(" % self._nom
for a in self._arg:
- s=s+str(a)+','
+ s=s+str(a)+','
s=s+")"
return s
def eval(self):
l=[]
for a in self._arg:
- l.append(a.eval())
+ l.append(a.eval())
return self._op(*l)
class Constant(Formula):
def cos(f): return Unop('ncos', f)
def sin(f): return Unop('nsin', f)
-def array(f,*tup,**args):
+def array(f,*tup,**args):
"""array de Numeric met en defaut la mecanique des parametres
on la supprime dans ce cas. Il faut que la valeur du parametre soit bien definie
"""
def __init__(self):
if hasattr(self,'pi') :return
import math
- try :
- self.toSurcharge()
+ try :
+ self.toSurcharge()
except : pass
def toSurcharge(self):
def toOriginal(self):
import math
try:
- import Numeric
+ import Numeric
except:
- import numpy
- Numeric = numpy
+ import numpy
+ Numeric = numpy
- try :
- Numeric.cos=originalMath.numeric_ncos
- Numeric.sin=originalMath.numeric_nsin
- Numeric.array=originalMath.numeric_narray
+ try :
+ Numeric.cos=originalMath.numeric_ncos
+ Numeric.sin=originalMath.numeric_nsin
+ Numeric.array=originalMath.numeric_narray
except : pass
math.sin=originalMath.sin
math.cos=originalMath.cos
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import types
# import de modules Eficas
from Noyau.N_CR import CR
from Noyau.N_UserASSD import UserASSD
+from Noyau.N_UserASSDMultiple import UserASSDMultiple
from Noyau import N_OBJECT
from Ihm import I_OBJECT
from .param2 import *
class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
- """
- Cette classe permet de creer des objets de type PARAMETRE
- cad des affectations directes dans le jeu de commandes (ex: a=10.)
- qui sont interpretees par le parseur de fichiers Python.
- Les objets ainsi crees constituent des parametres pour le jdc
- """
-
- nature = 'PARAMETRE'
- idracine = 'param'
-
- def __new__(cls,nom,valeur=None):
- # on est en relecture du .comm: l objet a ete detecte comme parametre par le parsing
- # mais il s agit d une reference, une UserASDD
- if (issubclass(valeur.__class__, UserASSD)):
- valeur.initialiseNom(nom)
- return valeur
- try :
- return super(PARAMETRE, cls).__new__(cls,*args,**kwargs)
- except :
- return super(PARAMETRE, cls).__new__(cls)
-
-
- def __init__(self,nom,valeur=None):
- #print ('__init__ de parametre pour', nom,valeur)
- self.nom = nom
- # La classe PARAMETRE n'a pas de definition : on utilise self pour
- # completude
- self.definition=self
- # parent ne peut etre qu'un objet de type JDC
- self.jdc = self.parent = CONTEXT.getCurrentStep()
- self.niveau=self.parent.niveau
- self.actif=1
- self.state='undetermined'
- self.register()
- self.dict_valeur=[]
- #self.valeur = self.interpreteValeur(valeur)
- #self.val=valeur
- self.valeur = valeur
- self.val=repr(valeur)
- self.fenetreIhm=None
-
- def interpreteValeur(self,val):
"""
- Essaie d'interpreter val (chaine de caracteres)comme :
- - un entier
- - un reel
- - une chaine de caracteres
- - une liste d'items d'un type qui precede
- Retourne la valeur interpretee
- """
- #if not val : return None
- valeur = None
-
- if type(val) == list:
- # 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) == bytes or type(val) == str:
- # on tente l'evaluation dans un contexte fourni par le parent s'il existe
- if self.parent:
- valeur=self.parent.evalInContext(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) == tuple:
+ Cette classe permet de creer des objets de type PARAMETRE
+ cad des affectations directes dans le jeu de commandes (ex: a=10.)
+ qui sont interpretees par le parseur de fichiers Python.
+ Les objets ainsi crees constituent des parametres pour le jdc
+ """
+
+ nature = 'PARAMETRE'
+ idracine = 'param'
+
+ def __new__(cls,nom,valeur=None):
+ # on est en relecture du .comm: l objet a ete detecte comme parametre par le parsing
+ # mais il s agit d une reference, une UserASDD
+ if (issubclass(valeur.__class__, UserASSDMultiple)):
+ valeur.initialiseNom(nom)
+ return valeur
+ if (issubclass(valeur.__class__, UserASSD)):
+ valeur.initialiseNom(nom)
+ return valeur
+ try :
+ return super(PARAMETRE, cls).__new__(cls,*args,**kwargs)
+ except :
+ return super(PARAMETRE, cls).__new__(cls)
+
+
+ def __init__(self,nom,valeur=None):
+ #print ('__init__ de parametre pour', nom,valeur)
+ self.nom = nom
+ # La classe PARAMETRE n'a pas de definition : on utilise self pour
+ # completude
+ self.definition=self
+ # parent ne peut etre qu'un objet de type JDC
+ self.jdc = self.parent = CONTEXT.getCurrentStep()
+ self.niveau=self.parent.niveau
+ self.actif=1
+ self.state='undetermined'
+ self.register()
+ self.dict_valeur=[]
+ #self.valeur = self.interpreteValeur(valeur)
+ #self.val=valeur
+ self.valeur = valeur
+ self.val=repr(valeur)
+ self.fenetreIhm=None
+
+ def interpreteValeur(self,val):
+ """
+ Essaie d'interpreter val (chaine de caracteres)comme :
+ - un entier
+ - un reel
+ - une chaine de caracteres
+ - une liste d'items d'un type qui precede
+ Retourne la valeur interpretee
+ """
+ #if not val : return None
+ valeur = None
+
+ if type(val) == list:
+ # Un premier traitement a ete fait lors de la saisie
+ # permet de tester les parametres qui sont des listes
l_new_val = []
- typ = None
- for v in valeur :
- if not typ:
- typ = type(v)
- else:
- if type(v) != typ :
- # la liste est heterogene --> on refuse d'interpreter
- # self comme une liste
- # on retourne la string initiale
- print(('liste heterogene ',val))
- return val
- l_new_val.append(v)
- return tuple(l_new_val)
-
- 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'interpreter
- return val
-
- def getValeurs(self):
- valeurretour=[]
- if self.dict_valeur != []:
- for val in self.dict_valeur:
- valeurretour.append(val)
- else:
- valeurretour.append(self.valeur)
- return valeurretour
-
- def setValeur(self,new_valeur):
- """
- Remplace la valeur de self par new_valeur interpretee
- """
- self.valeur = self.interpreteValeur(new_valeur)
- self.val=repr(self.valeur)
- self.parent.updateConceptAfterEtape(self,self)
- self.initModif()
-
- def setNom(self,new_nom):
- """
- Change le nom du parametre
- """
- self.initModif()
- self.nom=new_nom
- self.finModif()
-
- def initModif(self):
- """
- Methode qui declare l'objet courant comme modifie et propage
- cet etat modifie a ses ascendants
- """
- self.state = 'modified'
- if self.parent:
- self.parent.initModif()
-
- def getJdcRoot(self):
- if self.parent:
- return self.parent.getJdcRoot()
- else:
- return self
-
- def register(self):
- """
- Enregistre le parametre dans la liste des etapes de son parent (JDC)
- """
- self.parent.registerParametre(self)
- self.parent.register(self)
-
- def isValid(self,cr='non'):
- """
- Retourne 1 si self est valide, 0 sinon
- Un parametre est considere comme valide si :
- - il a un nom
- - il a une valeur
- """
- if self.nom == '' :
- if cr == 'oui':
- self.cr.fatal(tr("Pas de nom donne au parametre "))
- return 0
- else:
- if self.valeur == None :
- if cr == 'oui' :
- self.cr.fatal(tr("Le parametre %s ne peut valoir None" , self.nom))
+ for v in val :
+ try :
+ valeur=eval(str(v))
+ l_new_val.append(v)
+ except :
+ return None
+ return l_new_val
+
+ if type(val) == bytes or type(val) == str:
+ # on tente l'evaluation dans un contexte fourni par le parent s'il existe
+ if self.parent:
+ valeur=self.parent.evalInContext(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) == tuple:
+ l_new_val = []
+ typ = None
+ for v in valeur :
+ if not typ:
+ typ = type(v)
+ else:
+ if type(v) != typ :
+ # la liste est heterogene --> on refuse d'interpreter
+ # self comme une liste
+ # on retourne la string initiale
+ print(('liste heterogene ',val))
+ return val
+ l_new_val.append(v)
+ return tuple(l_new_val)
+
+ 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'interpreter
+ return val
+
+ def getValeurs(self):
+ valeurretour=[]
+ if self.dict_valeur != []:
+ for val in self.dict_valeur:
+ valeurretour.append(val)
+ else:
+ valeurretour.append(self.valeur)
+ return valeurretour
+
+ def setValeur(self,new_valeur):
+ """
+ Remplace la valeur de self par new_valeur interpretee
+ """
+ self.valeur = self.interpreteValeur(new_valeur)
+ self.val=repr(self.valeur)
+ self.parent.updateConceptAfterEtape(self,self)
+ self.initModif()
+
+ def setNom(self,new_nom):
+ """
+ Change le nom du parametre
+ """
+ self.initModif()
+ self.nom=new_nom
+ self.finModif()
+
+ def initModif(self):
+ """
+ Methode qui declare l'objet courant comme modifie et propage
+ cet etat modifie a ses ascendants
+ """
+ self.state = 'modified'
+ if self.parent:
+ self.parent.initModif()
+
+ def getJdcRoot(self):
+ if self.parent:
+ return self.parent.getJdcRoot()
+ else:
+ return self
+
+ def register(self):
+ """
+ Enregistre le parametre dans la liste des etapes de son parent (JDC)
+ """
+ self.parent.registerParametre(self)
+ self.parent.register(self)
+
+ def isValid(self,cr='non'):
+ """
+ Retourne 1 si self est valide, 0 sinon
+ Un parametre est considere comme valide si :
+ - il a un nom
+ - il a une valeur
+ """
+ if self.nom == '' :
+ if cr == 'oui':
+ self.cr.fatal(tr("Pas de nom donne au parametre "))
return 0
- return 1
-
- def isOblig(self):
- """
- Indique si self est obligatoire ou non : retourne toujours 0
- """
- return 0
-
- def isRepetable(self):
- """
- Indique si self est repetable ou non : retourne toujours 1
- """
- return 1
-
- def listeMcPresents(self):
- return []
-
- def supprime(self):
- """
- Methode qui supprime toutes les boucles de references afin que
- l'objet puisse etre correctement detruit par le garbage collector
- """
- self.parent = None
- self.jdc = None
- self.definition=None
- self.niveau=None
+ else:
+ if self.valeur == None :
+ if cr == 'oui' :
+ self.cr.fatal(tr("Le parametre %s ne peut valoir None" , self.nom))
+ return 0
+ return 1
+
+ def isOblig(self):
+ """
+ Indique si self est obligatoire ou non : retourne toujours 0
+ """
+ return 0
- def active(self):
- """
- Rend l'etape courante active.
- Il faut ajouter le parametre au contexte global du JDC
- """
- self.actif = 1
- try:
- self.jdc.appendParam(self)
- except:
+ def isRepetable(self):
+ """
+ Indique si self est repetable ou non : retourne toujours 1
+ """
+ return 1
+
+ def listeMcPresents(self):
+ return []
+
+ def supprime(self):
+ """
+ Methode qui supprime toutes les boucles de references afin que
+ l'objet puisse etre correctement detruit par le garbage collector
+ """
+ self.parent = None
+ self.jdc = None
+ self.definition=None
+ self.niveau=None
+
+ def active(self):
+ """
+ Rend l'etape courante active.
+ Il faut ajouter le parametre au contexte global du JDC
+ """
+ self.actif = 1
+ try:
+ self.jdc.appendParam(self)
+ except:
+ pass
+ CONNECTOR.Emit(self,"add",None)
+ CONNECTOR.Emit(self,"valid")
+
+ def inactive(self):
+ """
+ Rend l'etape courante inactive
+ Il faut supprimer le parametre du contexte global du JDC
+ """
+ self.actif = 0
+ self.jdc.delParam(self)
+ self.jdc.deleteConceptAfterEtape(self,self)
+ CONNECTOR.Emit(self,"supp",None)
+ CONNECTOR.Emit(self,"valid")
+
+ def isActif(self):
+ """
+ Booleenne qui retourne 1 si self est actif, 0 sinon
+ """
+ return self.actif
+
+ def setAttribut(self,nom_attr,new_valeur):
+ """
+ Remplace la valeur de self.nom_attr par new_valeur)
+ """
+ if hasattr(self,nom_attr):
+ setattr(self,nom_attr,new_valeur)
+ self.initModif()
+
+ def supprimeSdProds(self):
+ """
+ Il faut supprimer le parametre qui a ete entre dans la liste des
+ parametres du JDC
+ """
+ self.jdc.deleteParam(self)
+ self.parent.deleteConcept(self)
+
+ def updateContext(self,d):
+ """
+ Update le dictionnaire d avec le parametre que produit self
+ """
+ d[self.nom]=self
+
+ def __repr__(self):
+ """
+ Donne un echo de self sous la forme nom = valeur
+ """
+ if type(self.valeur) == bytes or type(self.valeur) == str :
+ 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) == list :
+ 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):
+ """
+ Retourne le nom du parametre comme representation de self
+ """
+ return self.nom
+
+ def getSdprods(self,nom_sd):
+ """
+ Retourne les concepts produits par la commande
+ """
+ return None
+
+ def report(self):
+ """ Genere l'objet rapport (classe CR) """
+ self.cr=CR()
+ self.isValid(cr='oui')
+ return self.cr
+
+ def ident(self):
+ """
+ Retourne le nom interne associe a self
+ Ce nom n'est jamais vu par l'utilisateur dans EFICAS
+ """
+ return self.nom
+
+ def deleteConcept(self,sd):
pass
- CONNECTOR.Emit(self,"add",None)
- CONNECTOR.Emit(self,"valid")
- def inactive(self):
- """
- Rend l'etape courante inactive
- Il faut supprimer le parametre du contexte global du JDC
- """
- self.actif = 0
- self.jdc.delParam(self)
- self.jdc.deleteConceptAfterEtape(self,self)
- CONNECTOR.Emit(self,"supp",None)
- CONNECTOR.Emit(self,"valid")
-
- def isActif(self):
- """
- Booleenne qui retourne 1 si self est actif, 0 sinon
- """
- return self.actif
-
- def setAttribut(self,nom_attr,new_valeur):
- """
- Remplace la valeur de self.nom_attr par new_valeur)
- """
- if hasattr(self,nom_attr):
- setattr(self,nom_attr,new_valeur)
- self.initModif()
-
- def supprimeSdProds(self):
- """
- Il faut supprimer le parametre qui a ete entre dans la liste des
- parametres du JDC
- """
- self.jdc.deleteParam(self)
- self.parent.deleteConcept(self)
-
- def updateContext(self,d):
- """
- Update le dictionnaire d avec le parametre que produit self
- """
- d[self.nom]=self
-
- def __repr__(self):
- """
- Donne un echo de self sous la forme nom = valeur
- """
- if type(self.valeur) == bytes or type(self.valeur) == str :
- 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) == list :
- 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):
- """
- Retourne le nom du parametre comme representation de self
- """
- return self.nom
-
- def getSdprods(self,nom_sd):
- """
- Retourne les concepts produits par la commande
- """
- return None
-
- def report(self):
- """ Genere l'objet rapport (classe CR) """
- self.cr=CR()
- self.isValid(cr='oui')
- return self.cr
-
- def ident(self):
- """
- Retourne le nom interne associe a self
- Ce nom n'est jamais vu par l'utilisateur dans EFICAS
- """
- return self.nom
-
- def deleteConcept(self,sd):
- pass
-
- def replaceConcept(self,old_sd,sd):
- pass
-
- def verifConditionBloc(self):
- """
- Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la definition) de self et
- retourne deux listes :
- - la premiere contient les noms des blocs a rajouter
- - la seconde contient les noms des blocs a supprimer
- """
- return [],[]
-
- def verifConditionRegles(self,liste_presents):
- """
- Retourne la liste des mots-cles a rajouter pour satisfaire les regles
- en fonction de la liste des mots-cles presents
- """
- return []
+ def replaceConcept(self,old_sd,sd):
+ pass
- def verifExistenceSd(self):
- pass
+ def verifConditionBloc(self):
+ """
+ Evalue les conditions de tous les blocs fils possibles
+ (en fonction du catalogue donc de la definition) de self et
+ retourne deux listes :
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
+ """
+ return [],[]
+
+ def verifConditionRegles(self,liste_presents):
+ """
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
+ """
+ return []
+
+ def verifExistenceSd(self):
+ pass
- def controlSdprods(self,d):
- """sans objet """
- pass
+ def controlSdprods(self,d):
+ """sans objet """
+ pass
- def close(self):
- pass
+ def close(self):
+ pass
- def resetContext(self):
- pass
+ def resetContext(self):
+ pass
- def eval(self):
- if isinstance(self.valeur,Formula):
- return self.valeur.eval()
- else:
- return self.valeur
+ 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())
+ def __adapt__(self,validator):
+ return validator.adapt(self.eval())
class COMBI_PARAMETRE(object) :
- def __init__(self,chainevaleur,valeur):
- self.chainevaleur=chainevaleur
- self.valeur=valeur
+ def __init__(self,chainevaleur,valeur):
+ self.chainevaleur=chainevaleur
+ self.valeur=valeur
- def __repr__(self):
- return self.chainevaleur
+ def __repr__(self):
+ return self.chainevaleur
- def isValid(self):
- if self.valeur and self.chainevaleur:
- return 1
+ def isValid(self):
+ if self.valeur and self.chainevaleur:
+ return 1
class ITEM_PARAMETRE(object) :
- 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
+ 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
pattern_eval = re.compile(r'^(EVAL)([ \t\r\f\v]*)\(([\w\W]*)')
class PARAMETRE_EVAL(parametre.PARAMETRE) :
- """
- Cette classe permet de creer des objets de type PARAMETRE_EVAL
- cad des affectations directes evaluees dans le jeu de commandes (ex: a=EVAL('''10.*SQRT(25)'''))
- qui sont interpretees par le parseur de fichiers Python.
- Les objets ainsi crees constituent des parametres evalues pour le jdc
- """
- nature = 'PARAMETRE_EVAL'
- idracine='param_eval'
-
- def __init__(self,nom,valeur=None):
- # parent ne peut etre qu'un objet de type JDC
- import Accas
- self.Accas_EVAL=Accas.EVAL
- self.valeur = self.interpreteValeur(valeur)
- self.val = valeur
- self.nom = nom
- self.jdc = self.parent = CONTEXT.getCurrentStep()
- self.definition=self
- self.niveau = self.parent.niveau
- self.actif=1
- self.state='undetermined'
- # Ceci est-il indispensable ???
- #self.appel = N_utils.calleeWhere(niveau=2)
- self.register()
-
- def __repr__(self):
"""
- Donne un echo de self sous la forme nom = valeur
- """
- return self.nom+' = '+ repr(self.valeur)
-
- def __str__(self):
- """
- Retourne le nom du parametre evalue comme representation de self
- """
- return self.nom
-
- def interpreteValeur(self,val):
- """
- Essaie d'interpreter val (chaine de caracteres ou None) comme :
- une instance de Accas.EVAL
- Retourne la valeur interpretee
- """
- if not val : return None
- d={}
- val = val.strip()
- if val[-1] == ';' : val = val[0:-1]
- d['EVAL'] = self.Accas_EVAL
- try:
- valeur = eval(val,{},d)
- return valeur
- except:
- traceback.print_exc()
- print(("Le texte %s n'est pas celui d'un parametre evalue" %val))
- return None
-
- def setValeur(self,new_valeur):
- """
- Remplace la valeur de self par new_valeur interpretee.
- """
- self.valeur = self.interpreteValeur(new_valeur)
- self.val = new_valeur
- self.initModif()
-
- def getNom(self) :
- """
- Retourne le nom du parametre
- """
- return self.nom
-
- def getValeur(self):
- """
- Retourne la valeur de self, cad le texte de l'objet class_eval.EVAL
- """
- if self.valeur :
- return self.valeur.valeur
- else:
- return ''
-
- def verifEval(self,exp_eval=None,cr='non'):
- """
- Cette methode a pour but de verifier si l'expression EVAL
- est syntaxiquement correcte.
- Retourne :
- - un booleen, qui vaut 1 si licite, 0 sinon
- - un message d'erreurs ('' si illicite)
- """
- if not exp_eval:
+ Cette classe permet de creer des objets de type PARAMETRE_EVAL
+ cad des affectations directes evaluees dans le jeu de commandes (ex: a=EVAL('''10.*SQRT(25)'''))
+ qui sont interpretees par le parseur de fichiers Python.
+ Les objets ainsi crees constituent des parametres evalues pour le jdc
+ """
+ nature = 'PARAMETRE_EVAL'
+ idracine='param_eval'
+
+ def __init__(self,nom,valeur=None):
+ # parent ne peut etre qu'un objet de type JDC
+ import Accas
+ self.Accas_EVAL=Accas.EVAL
+ self.valeur = self.interpreteValeur(valeur)
+ self.val = valeur
+ self.nom = nom
+ self.jdc = self.parent = CONTEXT.getCurrentStep()
+ self.definition=self
+ self.niveau = self.parent.niveau
+ self.actif=1
+ self.state='undetermined'
+ # Ceci est-il indispensable ???
+ #self.appel = N_utils.calleeWhere(niveau=2)
+ self.register()
+
+ def __repr__(self):
+ """
+ Donne un echo de self sous la forme nom = valeur
+ """
+ return self.nom+' = '+ repr(self.valeur)
+
+ def __str__(self):
+ """
+ Retourne le nom du parametre evalue comme representation de self
+ """
+ return self.nom
+
+ def interpreteValeur(self,val):
+ """
+ Essaie d'interpreter val (chaine de caracteres ou None) comme :
+ une instance de Accas.EVAL
+ Retourne la valeur interpretee
+ """
+ if not val : return None
+ d={}
+ val = val.strip()
+ if val[-1] == ';' : val = val[0:-1]
+ d['EVAL'] = self.Accas_EVAL
+ try:
+ valeur = eval(val,{},d)
+ return valeur
+ except:
+ traceback.print_exc()
+ print(("Le texte %s n'est pas celui d'un parametre evalue" %val))
+ return None
+
+ def setValeur(self,new_valeur):
+ """
+ Remplace la valeur de self par new_valeur interpretee.
+ """
+ self.valeur = self.interpreteValeur(new_valeur)
+ self.val = new_valeur
+ self.initModif()
+
+ def getNom(self) :
+ """
+ Retourne le nom du parametre
+ """
+ return self.nom
+
+ def getValeur(self):
+ """
+ Retourne la valeur de self, cad le texte de l'objet class_eval.EVAL
+ """
if self.valeur :
- exp_eval = self.valeur.valeur[3:-3] # on enleve les triples guillemets
+ return self.valeur.valeur
else:
- exp_eval = None
- if exp_eval :
- # on construit un interpreteur de formule
- formule=(self.nom,'',None,exp_eval)
- # on recupere la liste des constantes et des autres fonctions predefinies
- # et qui peuvent etre utilisees dans le corps de la formule courante
- l_ctes,l_form = self.jdc.getParametresFonctionsAvantEtape(self)
- # on cree un objet verificateur
- verificateur = interpreteur_formule.Interpreteur_Formule(formule=formule,
- constantes = l_ctes,
- fonctions = l_form)
- if cr == 'oui' :
- if not verificateur.cr.estvide():
- self.cr.fatal(verificateur.cr.getMessFatal())
- return verificateur.isValid(),''.join(verificateur.cr.crfatal)
- else:
- # pas d'expression EVAL --> self non valide
- if cr == 'oui' :
- self.cr.fatal(tr("Le parametre EVAL %s ne peut valoir None") , self.nom)
- return 0,tr("Le parametre EVAL ne peut valoir None")
-
- def verifNom(self,nom=None,cr='non'):
- """
- Verifie si le nom passe en argument (si aucun prend le nom courant)
- est un nom valide pour un parametre EVAL
- Retourne :
- - un booleen, qui vaut 1 si nom licite, 0 sinon
- - un message d'erreurs ('' si illicite)
- """
- if not nom :
- nom = self.nom
- if nom == "" :
- if cr == 'oui' : self.cr.fatal(tr("Pas de nom donne au parametre EVAL"))
- return 0,"Pas de nom donne au parametre EVAL"
- if len(nom) > 8 :
- if cr == 'oui' : self.cr.fatal(tr("Un nom de parametre ne peut depasser 8 caracteres"))
- return 0,"Un nom de parametre ne peut depasser 8 caracteres"
- sd = self.parent.getSdAutourEtape(nom,self)
- if sd :
- if cr == 'oui' : self.cr.fatal(tr("Un concept de nom %s existe deja !"), nom)
- return 0,"Un concept de nom %s existe deja !" %nom
- return 1,''
-
- def verifParametreEval(self,param=None,cr='non'):
- """
- Verifie la validite du parametre EVAL passe en argument.
- Ce nouveau parametre est passe sous la forme d'un tuple : (nom,valeur)
- Si aucun tuple passe, prend les valeurs courantes de l'objet
- Retourne :
- - un booleen, qui vaut 1 si EVAL licite, 0 sinon
+ return ''
+
+ def verifEval(self,exp_eval=None,cr='non'):
+ """
+ Cette methode a pour but de verifier si l'expression EVAL
+ est syntaxiquement correcte.
+ Retourne :
+ - un booleen, qui vaut 1 si licite, 0 sinon
- un message d'erreurs ('' si illicite)
- """
- if not param :
- if self.valeur :
- param = (self.nom,self.valeur.valeur)
+ """
+ if not exp_eval:
+ if self.valeur :
+ exp_eval = self.valeur.valeur[3:-3] # on enleve les triples guillemets
+ else:
+ exp_eval = None
+ if exp_eval :
+ # on construit un interpreteur de formule
+ formule=(self.nom,'',None,exp_eval)
+ # on recupere la liste des constantes et des autres fonctions predefinies
+ # et qui peuvent etre utilisees dans le corps de la formule courante
+ l_ctes,l_form = self.jdc.getParametresFonctionsAvantEtape(self)
+ # on cree un objet verificateur
+ verificateur = interpreteur_formule.Interpreteur_Formule(formule=formule,
+ constantes = l_ctes,
+ fonctions = l_form)
+ if cr == 'oui' :
+ if not verificateur.cr.estvide():
+ self.cr.fatal(verificateur.cr.getMessFatal())
+ return verificateur.isValid(),''.join(verificateur.cr.crfatal)
else:
- param = (self.nom,None)
- test_nom,erreur_nom = self.verifNom(param[0],cr=cr)
- test_eval,erreur_eval = self.verifEval(param[1],cr=cr)
- # test global = produit des tests partiels
- test = test_nom*test_eval
- # message d'erreurs global = concatenation des messages partiels
- erreur = ''
- if not test :
- for mess in (erreur_nom,erreur_eval):
- erreur = erreur+(len(mess) > 0)*'\n'+mess
- return test,erreur
-
- def update(self,param):
- """
- Methode externe.
- Met a jour les champs nom, valeur de self
- par les nouvelles valeurs passees dans le tuple formule.
- On stocke les valeurs SANS verifications.
- """
- self.initModif()
- self.setNom(param[0])
- self.setValeur('EVAL("""'+param[1]+'""")')
-
- def isValid(self,cr='non'):
- """
- Retourne 1 si self est valide, 0 sinon
- Un parametre evalue est considere comme valide si :
- - il a un nom
- - il a une valeur qui est interpretable par l'interpreteur de FORMULEs
- """
- resu,erreur= self.verifParametreEval(cr=cr)
- return resu
-
- def report(self):
- """
- Genere l'objet rapport (classe CR)
- """
- self.cr = CR()
- self.isValid(cr='oui')
- return self.cr
-
- def setNom(self,new_nom):
- """
- Remplace le nom de self par new_nom
- """
- self.nom = new_nom
-
-
+ # pas d'expression EVAL --> self non valide
+ if cr == 'oui' :
+ self.cr.fatal(tr("Le parametre EVAL %s ne peut valoir None") , self.nom)
+ return 0,tr("Le parametre EVAL ne peut valoir None")
+
+ def verifNom(self,nom=None,cr='non'):
+ """
+ Verifie si le nom passe en argument (si aucun prend le nom courant)
+ est un nom valide pour un parametre EVAL
+ Retourne :
+ - un booleen, qui vaut 1 si nom licite, 0 sinon
+ - un message d'erreurs ('' si illicite)
+ """
+ if not nom :
+ nom = self.nom
+ if nom == "" :
+ if cr == 'oui' : self.cr.fatal(tr("Pas de nom donne au parametre EVAL"))
+ return 0,"Pas de nom donne au parametre EVAL"
+ if len(nom) > 8 :
+ if cr == 'oui' : self.cr.fatal(tr("Un nom de parametre ne peut depasser 8 caracteres"))
+ return 0,"Un nom de parametre ne peut depasser 8 caracteres"
+ sd = self.parent.getSdAutourEtape(nom,self)
+ if sd :
+ if cr == 'oui' : self.cr.fatal(tr("Un concept de nom %s existe deja !"), nom)
+ return 0,"Un concept de nom %s existe deja !" %nom
+ return 1,''
+
+ def verifParametreEval(self,param=None,cr='non'):
+ """
+ Verifie la validite du parametre EVAL passe en argument.
+ Ce nouveau parametre est passe sous la forme d'un tuple : (nom,valeur)
+ Si aucun tuple passe, prend les valeurs courantes de l'objet
+ Retourne :
+ - un booleen, qui vaut 1 si EVAL licite, 0 sinon
+ - un message d'erreurs ('' si illicite)
+ """
+ if not param :
+ if self.valeur :
+ param = (self.nom,self.valeur.valeur)
+ else:
+ param = (self.nom,None)
+ test_nom,erreur_nom = self.verifNom(param[0],cr=cr)
+ test_eval,erreur_eval = self.verifEval(param[1],cr=cr)
+ # test global = produit des tests partiels
+ test = test_nom*test_eval
+ # message d'erreurs global = concatenation des messages partiels
+ erreur = ''
+ if not test :
+ for mess in (erreur_nom,erreur_eval):
+ erreur = erreur+(len(mess) > 0)*'\n'+mess
+ return test,erreur
+
+ def update(self,param):
+ """
+ Methode externe.
+ Met a jour les champs nom, valeur de self
+ par les nouvelles valeurs passees dans le tuple formule.
+ On stocke les valeurs SANS verifications.
+ """
+ self.initModif()
+ self.setNom(param[0])
+ self.setValeur('EVAL("""'+param[1]+'""")')
+
+ def isValid(self,cr='non'):
+ """
+ Retourne 1 si self est valide, 0 sinon
+ Un parametre evalue est considere comme valide si :
+ - il a un nom
+ - il a une valeur qui est interpretable par l'interpreteur de FORMULEs
+ """
+ resu,erreur= self.verifParametreEval(cr=cr)
+ return resu
+
+ def report(self):
+ """
+ Genere l'objet rapport (classe CR)
+ """
+ self.cr = CR()
+ self.isValid(cr='oui')
+ return self.cr
+
+ def setNom(self,new_nom):
+ """
+ Remplace le nom de self par new_nom
+ """
+ self.nom = new_nom
from __future__ import absolute_import
import glob,os,sys,traceback
try:
- from UserDict import UserDict
+ from UserDict import UserDict
except ImportError:
- from collections import UserDict
+ from collections import UserDict
class PluginLoader(UserDict):
- def __init__(self,module):
- UserDict.__init__(self)
- self.plugin_dir=module.__path__[0]
- self.plugin_setName=module.__name__
- _module_list = glob.glob( os.path.join( self.plugin_dir,
- '%s*py' % self.plugin_setName,
- )
- )
- _module_list.sort()
+ def __init__(self,module):
+ UserDict.__init__(self)
+ self.plugin_dir=module.__path__[0]
+ self.plugin_setName=module.__name__
+ _module_list = glob.glob( os.path.join( self.plugin_dir,
+ '%s*py' % self.plugin_setName,
+ )
+ )
+ _module_list.sort()
- for _module_name in _module_list:
+ for _module_name in _module_list:
- _module_name = os.path.basename(_module_name)[:-3]
- _import_name = '%s.%s' % ( self.plugin_setName,
- _module_name )
+ _module_name = os.path.basename(_module_name)[:-3]
+ _import_name = '%s.%s' % ( self.plugin_setName,
+ _module_name )
- try:
- _module = __import__( _import_name )
- except:
- sys.stderr.write('\n--- Plugin Module Error ---\n')
- traceback.print_exc()
- sys.stderr.write('---------------------------\n\n')
- continue
- try:
- _module = getattr(_module, _module_name)
- except AttributeError:
- sys.stderr.write('ERROR: Could not retrieve %s\n' % _import_name)
+ try:
+ _module = __import__( _import_name )
+ except:
+ sys.stderr.write('\n--- Plugin Module Error ---\n')
+ traceback.print_exc()
+ sys.stderr.write('---------------------------\n\n')
+ continue
+ try:
+ _module = getattr(_module, _module_name)
+ except AttributeError:
+ sys.stderr.write('ERROR: Could not retrieve %s\n' % _import_name)
- try:
- info = _module.entryPoint()
- except AttributeError:
- pass
- else:
- self.addEntryPoint(info)
+ try:
+ info = _module.entryPoint()
+ except AttributeError:
+ pass
+ else:
+ self.addEntryPoint(info)
- def addEntryPoint(self,infoDict):
- name=infoDict['name']
- factory=infoDict['factory']
- self[name]=factory
-
+ def addEntryPoint(self,infoDict):
+ name=infoDict['name']
+ factory=infoDict['factory']
+ self[name]=factory
"""
from __future__ import absolute_import
-try :
- from builtins import zip
- from builtins import map
- from builtins import range
-except :
- pass
+try :
+ from builtins import zip
+ from builtins import map
+ from builtins import range
+except :
+ pass
from .eficas_exception import EficasException
import re
Module-internal method.
Returns a formatted string from an unformatted string
- and an integer or a float specifying the parameter of
+ and an integer or a float specifying the parameter of
the string.
"""
from PyQt5.QtCore import QRegExp
Module-internal method.
Returns a formatted string from an unformatted string
- and a list whose concatenation specifies the parameter
+ and a list whose concatenation specifies the parameter
of the string.
"""
# XXX to add further functionality, e.g. list processing
def _preprocess_atom(string):
"""
_preprocess_atom(string-or-number-or-unicode) -> unicode
- Test if input is a Unicode object or a number; if so, then return it;
- otherwise, test if the input is a string; if so, then try to create
- a Unicode object out of it. To this end, assume the string is encoded
+ Test if input is a Unicode object or a number; if so, then return it;
+ otherwise, test if the input is a string; if so, then try to create
+ a Unicode object out of it. To this end, assume the string is encoded
in utf-8; if this fails, then assume the string is encoded in Latin-9.
"""
if isinstance(string, (six.text_type, int, float, complex)):
def _str_toUnicode(string):
"""
_str_toUnicode(string) -> unicode
- Tries to create a Unicode object out of the input string; assumes
- the string is UTF-8 encoded; if not, then assume the string is
+ Tries to create a Unicode object out of the input string; assumes
+ the string is UTF-8 encoded; if not, then assume the string is
Latin-9 encoded.
"""
try:
def tr(string, *args):
"""tr(string-or-unicode, iterable-or-float-or-int) -> unicode
tr(string-or-unicode) -> unicode
-
- Returns a formatted Unicode object from an unformatted
- string or Unicode object with formatting specifications, and,
+
+ Returns a formatted Unicode object from an unformatted
+ string or Unicode object with formatting specifications, and,
optionally, an iterable or an int or float.
Lets Python do the string formatting."""
try :
- from PyQt5.QtWidgets import QApplication
+ from PyQt5.QtWidgets import QApplication
except :
- return string
+ return string
string = _preprocess_atom(string)
if len(args) == 0:
def tr_qt(string, *args):
"""tr_qt(string, iterable-or-float-or-int) -> unicode
t_qtr(string) -> unicode
-
- Returns a formatted string from an unformatted
- Unicode string with formatting specifications, and,
+
+ Returns a formatted string from an unformatted
+ Unicode string with formatting specifications, and,
optionally, an iterable or an int or float.
Lets PyQt4 do the string formatting. To this end,
a conversion from Python to Qt string formatting
r = _reformat_qstring_from_dict(r, args[0])
elif isinstance(args[0], tuple):
r = _reformat_qstring_from_tuple(r, args[0])
- # XXX Pay attention to this: distinguish between tuple,
+ # XXX Pay attention to this: distinguish between tuple,
# dict and dict with key given in string.
elif r.count("%") in range(2) and r.count("%(") == 0:
r = _reformat_qstring_from_atom(r, _preproces_atom(repr(args[0])))
La classe CONNECTOR sert a enregistrer les observateurs d'objets et a delivrer
les messages emis a ces objets.
- Le principe general est le suivant : un objet (subscriber) s'enregistre aupres du
- connecteur global (theconnector) pour observer un objet emetteur de messages (publisher)
+ Le principe general est le suivant : un objet (subscriber) s'enregistre aupres du
+ connecteur global (theconnector) pour observer un objet emetteur de messages (publisher)
sur un canal donne (channel). Il demande a etre notifie par appel d'une fonction (listener).
La sequence est donc :
class CONNECTOR:
- def __init__(self):
- self.connections={}
-
- def Connect(self, object, channel, function, args):
- #print ("Connect",object, channel, function, args)
- idx = id(object)
- #if self.connections.has_key(idx):
- if idx in self.connections :
- channels = self.connections[idx]
- else:
- channels = self.connections[idx] = {}
-
- #if channels.has_key(channel):
- if channel in channels :
- receivers = channels[channel]
- else:
- receivers = channels[channel] = []
-
- for funct,fargs in receivers[:]:
- if funct() is None:
- receivers.remove((funct,fargs))
- elif (function,args) == (funct(),fargs):
- receivers.remove((funct,fargs))
-
- receivers.append((ref(function),args))
-
-
- def Disconnect(self, object, channel, function, args):
- try:
- receivers = self.connections[id(object)][channel]
- except KeyError:
- raise ConnectorError (
- 'no receivers for channel %s of %s' % (channel, object))
-
- for funct,fargs in receivers[:]:
- if funct() is None:
- receivers.remove((funct,fargs))
-
- for funct,fargs in receivers:
- if (function,args) == (funct(),fargs):
- receivers.remove((funct,fargs))
- if not receivers:
- # the list of receivers is empty now, remove the channel
- channels = self.connections[id(object)]
- del channels[channel]
- if not channels:
- # the object has no more channels
- del self.connections[id(object)]
- return
-
- raise ConnectorError(
- 'receiver %s%s is not connected to channel %s of %s' \
- % (function, args, channel, object))
-
-
-
- def Emit(self, object, channel, *args):
- #print "Emit",object, channel, args
- try:
- receivers = self.connections[id(object)][channel]
- except KeyError:
- return
- #print "Emit",object, channel, receivers
- # Attention : copie pour eviter les pbs lies aux deconnexion reconnexion
- # pendant l'execution des emit
- for rfunc, fargs in copy(receivers):
- try:
- func=rfunc()
- if func:
- #print (func,args,fargs)
- #rint args + fargs
- #apply(func, args + fargs)
- if args + fargs == () : func()
- else : func ( args + fargs)
- else:
- # Le receveur a disparu
- if (rfunc,fargs) in receivers:receivers.remove((rfunc,fargs))
- except:
- traceback.print_exc()
+ def __init__(self):
+ self.connections={}
+
+ def Connect(self, object, channel, function, args):
+ #print ("Connect",object, channel, function, args)
+ idx = id(object)
+ #if self.connections.has_key(idx):
+ if idx in self.connections :
+ channels = self.connections[idx]
+ else:
+ channels = self.connections[idx] = {}
+
+ #if channels.has_key(channel):
+ if channel in channels :
+ receivers = channels[channel]
+ else:
+ receivers = channels[channel] = []
+
+ for funct,fargs in receivers[:]:
+ if funct() is None:
+ receivers.remove((funct,fargs))
+ elif (function,args) == (funct(),fargs):
+ receivers.remove((funct,fargs))
+
+ receivers.append((ref(function),args))
+
+
+ def Disconnect(self, object, channel, function, args):
+ try:
+ receivers = self.connections[id(object)][channel]
+ except KeyError:
+ raise ConnectorError (
+ 'no receivers for channel %s of %s' % (channel, object))
+
+ for funct,fargs in receivers[:]:
+ if funct() is None:
+ receivers.remove((funct,fargs))
+
+ for funct,fargs in receivers:
+ if (function,args) == (funct(),fargs):
+ receivers.remove((funct,fargs))
+ if not receivers:
+ # the list of receivers is empty now, remove the channel
+ channels = self.connections[id(object)]
+ del channels[channel]
+ if not channels:
+ # the object has no more channels
+ del self.connections[id(object)]
+ return
+
+ raise ConnectorError(
+ 'receiver %s%s is not connected to channel %s of %s' \
+ % (function, args, channel, object))
+
+
+
+ def Emit(self, object, channel, *args):
+ #print "Emit",object, channel, args
+ try:
+ receivers = self.connections[id(object)][channel]
+ except KeyError:
+ return
+ #print "Emit",object, channel, receivers
+ # Attention : copie pour eviter les pbs lies aux deconnexion reconnexion
+ # pendant l'execution des emit
+ for rfunc, fargs in copy(receivers):
+ try:
+ func=rfunc()
+ if func:
+ #print (func,args,fargs)
+ #rint args + fargs
+ #apply(func, args + fargs)
+ if args + fargs == () : func()
+ else : func ( args + fargs)
+ else:
+ # Le receveur a disparu
+ if (rfunc,fargs) in receivers:receivers.remove((rfunc,fargs))
+ except:
+ traceback.print_exc()
def ref(target,callback=None):
- #if hasattr(target,"im_self"):
- # return BoundMethodWeakref(target)
- if hasattr(target,"__self__"):
- return BoundMethodWeakref(target)
- else:
- return weakref.ref(target,callback)
+ #if hasattr(target,"im_self"):
+ # return BoundMethodWeakref(target)
+ if hasattr(target,"__self__"):
+ return BoundMethodWeakref(target)
+ else:
+ return weakref.ref(target,callback)
class BoundMethodWeakref(object):
- def __init__(self,callable):
- #self.Self=weakref.ref(callable.im_self)
- #self.Func=weakref.ref(callable.im_func)
- self.Self=weakref.ref(callable.__self__)
- self.Func=weakref.ref(callable.__func__)
-
- def __call__(self):
- target=self.Self()
- if not target:return None
- func=self.Func()
- if func:
- return func.__get__(self.Self())
+ def __init__(self,callable):
+ #self.Self=weakref.ref(callable.im_self)
+ #self.Func=weakref.ref(callable.im_func)
+ self.Self=weakref.ref(callable.__self__)
+ self.Func=weakref.ref(callable.__func__)
+
+ def __call__(self):
+ target=self.Self()
+ if not target:return None
+ func=self.Func()
+ if func:
+ return func.__get__(self.Self())
_the_connector =CONNECTOR()
Connect = _the_connector.Connect
-Emit = _the_connector.Emit
+Emit = _the_connector.Emit
Disconnect = _the_connector.Disconnect
if __name__ == "__main__":
- class A:
- pass
-
- class B:
- def add(self,a):
- print(("--------------------------------add ", self , a))
-
- def __del__(self):
- print(("__del__", self))
+ class A:
+ pass
- def f(a):
- print((f, a))
+ class B:
+ def add(self,a):
+ print(("--------------------------------add ", self , a))
- a=A()
- b=B()
- c=B()
+ def __del__(self):
+ print(("__del__", self))
- Connect(a,"add",b.add,())
- Connect(a,"add",b.add,())
- Connect(a,"add",c.add,())
- Connect(a,"add",f,())
+ def f(a):
+ print((f, a))
- Emit(a,"add",1)
+ a=A()
+ b=B()
+ c=B()
- print ("del b")
- del b
+ Connect(a,"add",b.add,())
+ Connect(a,"add",b.add,())
+ Connect(a,"add",c.add,())
+ Connect(a,"add",f,())
- Emit(a,"add",1)
- print ("del f")
- del f
+ Emit(a,"add",1)
- Emit(a,"add",1)
- Disconnect(a,"add",c.add,())
- Emit(a,"add",1)
+ print ("del b")
+ del b
+ Emit(a,"add",1)
+ print ("del f")
+ del f
+ Emit(a,"add",1)
+ Disconnect(a,"add",c.add,())
+ Emit(a,"add",1)
from Noyau.N_VALIDATOR import ValError
class ASSD:
- def __repr__(self):
- return "concept " + self.getName() + " type " + self.__class__.__name__
+ def __repr__(self):
+ return "concept " + self.getName() + " type " + self.__class__.__name__
- def __str__(self):
- return self.getName() or "<None>"
+ def __str__(self):
+ return self.getName() or "<None>"
class assd(ASSD):
- def __convert__(cls,valeur):
- return valeur
- __convert__=classmethod(__convert__)
+ def __convert__(cls,valeur):
+ return valeur
+ __convert__=classmethod(__convert__)
class GEOM(ASSD):
- def __convert__(cls,valeur):
- return valeur
- __convert__= classmethod(__convert__)
+ def __convert__(cls,valeur):
+ return valeur
+ __convert__= classmethod(__convert__)
class geom(GEOM):
- pass
+ pass
class CO(ASSD):
- def __convert__(cls,valeur):
- if hasattr(valeur,'_etape') :
- # valeur est un concept CO qui a ete transforme par typeSDProd
- if valeur.etape == valeur._etape:
- # le concept est bien produit par l'etape
- return valeur
- raise ValError(u"Pas un concept CO")
- __convert__=classmethod(__convert__)
-
+ def __convert__(cls,valeur):
+ if hasattr(valeur,'_etape') :
+ # valeur est un concept CO qui a ete transforme par typeSDProd
+ if valeur.etape == valeur._etape:
+ # le concept est bien produit par l'etape
+ return valeur
+ raise ValError(u"Pas un concept CO")
+ __convert__=classmethod(__convert__)
class I_AVANT:
- """
- La regle I_AVANT verifie que l'on trouve l ordre des mots-cles
- de la regle parmi les arguments d'un JDC.
+ """
+ La regle I_AVANT verifie que l'on trouve l ordre des mots-cles
+ de la regle parmi les arguments d'un JDC.
- Ces arguments sont transmis a la regle pour validation sous la forme
- d'une liste de noms de mots-cles ou d'un dictionnaire dont
- les cles sont des noms de mots-cles.
- """
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
+ """
- def __init__(self,*args):
- if len(args) > 2 :
- print(("Erreur a la creation de la regle A_CLASSER(",args,")"))
- return
- if type(args[0]) == tuple:
- self.listeAvant=args[0]
- else :
- self.listeAvant=(args[0],)
- if type(args[1]) == tuple:
- self.listeApres=args[1]
- else :
- self.listeApres=(args[1],)
+ def __init__(self,*args):
+ if len(args) > 2 :
+ print(("Erreur a la creation de la regle A_CLASSER(",args,")"))
+ return
+ if type(args[0]) == tuple:
+ self.listeAvant=args[0]
+ else :
+ self.listeAvant=(args[0],)
+ if type(args[1]) == tuple:
+ self.listeApres=args[1]
+ else :
+ self.listeApres=(args[1],)
- def verif(self,args):
- """
- args peut etre un dictionnaire ou une liste. Les elements de args
- sont soit les elements de la liste soit les cles du dictionnaire.
- """
- # on compte le nombre de mots cles presents
- text =''
- boolListeAvant=0
- boolListeApres=0
- boolOK=1
- for nom in args:
- if nom in self.listeAvant :
- boolListeAvant=1
- if boolListeApres == 1 :
- boolOK = 0
- if nom in self.listeApres :
- boolListeApres=1
- if boolListeAvant == 0 and boolListeApres == 1 : boolOK = 0
- return text,boolOK
+ def verif(self,args):
+ """
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
+ """
+ # on compte le nombre de mots cles presents
+ text =''
+ boolListeAvant=0
+ boolListeApres=0
+ boolOK=1
+ for nom in args:
+ if nom in self.listeAvant :
+ boolListeAvant=1
+ if boolListeApres == 1 :
+ boolOK = 0
+ if nom in self.listeApres :
+ boolListeApres=1
+ if boolListeAvant == 0 and boolListeApres == 1 : boolOK = 0
+ return text,boolOK
- def getText(self):
- text = "Regle de classement "' :\n'
- for mc in self.listeAvant :
- text = text + mc + ', '
- text = text + " \nAvant : \n"
- for mc in self.listeApres :
- text = text + mc + ','
- return text
-
+ def getText(self):
+ text = "Regle de classement "' :\n'
+ for mc in self.listeAvant :
+ text = text + mc + ', '
+ text = text + " \nAvant : \n"
+ for mc in self.listeApres :
+ text = text + mc + ','
+ return text
from . import I_REGLE
class A_CLASSER(I_REGLE.REGLE):
- def getText(self):
- text = 'Regle ' + self.__class__.__name__+ ' :\n'
- t=" D'abord :\n"+' '*8
- for arg in self.args0:
- t=t+arg.strip()+' ou '
- text = text + t[0:-4] +'\n'
- t = " Ensuite :\n"+' '*8
- for arg in self.args1:
- t=t+arg.strip()+' ou '
- text = text + t[0:-4] +'\n'
- return text
-
+ def getText(self):
+ text = 'Regle ' + self.__class__.__name__+ ' :\n'
+ t=" D'abord :\n"+' '*8
+ for arg in self.args0:
+ t=t+arg.strip()+' ou '
+ text = text + t[0:-4] +'\n'
+ t = " Ensuite :\n"+' '*8
+ for arg in self.args1:
+ t=t+arg.strip()+' ou '
+ text = text + t[0:-4] +'\n'
+ return text
import Accas
def numberEntite(entite):
- """
- Fonction qui attribue un numero unique a tous les objets du catalogue
- Ce numero permet de conserver l'ordre des objets
- """
- global _no
- _no=_no+1
- entite._no=_no
+ """
+ Fonction qui attribue un numero unique a tous les objets du catalogue
+ Ce numero permet de conserver l'ordre des objets
+ """
+ global _no
+ _no=_no+1
+ entite._no=_no
class ENTITE:
- def __init__(self):
- numberEntite(self)
-
- def getDocu(self):
- if hasattr(self,'docu') :
- if self.docu != "" : return self.docu
- else:
- if hasattr(self,'pere'):
- return self.pere.getDocu()
+ def __init__(self):
+ numberEntite(self)
+
+ def getDocu(self):
+ if hasattr(self,'docu') :
+ if self.docu != "" : return self.docu
+ else:
+ if hasattr(self,'pere'):
+ return self.pere.getDocu()
+ else:
+ return None
else:
- return None
- else:
- return None
+ return None
- def getSug(self):
- if hasattr(self,'sug') :
- if self.sug != "" : return self.sug
- return None
+ def getSug(self):
+ if hasattr(self,'sug') :
+ if self.sug != "" : return self.sug
+ return None
- def checkDefinition(self, parent):
- """Verifie la definition d'un objet composite (commande, fact, bloc)."""
- args = self.entites.copy()
- mcs = set()
- for nom, val in args.items():
- if val.label == 'SIMP':
- mcs.add(nom)
- #XXX
- #if val.max != 1 and val.type == 'TXM':
- #print "#CMD", parent, nom
- elif val.label == 'FACT':
- val.checkDefinition(parent)
- #PNPNPN surcharge
- # CALC_SPEC !
- #assert self.label != 'FACT', \
- # 'Commande %s : Mot-clef facteur present sous un mot-clef facteur : interdit !' \
- # % parent
- else:
- continue
- del args[nom]
- # seuls les blocs peuvent entrer en conflit avec les mcs du plus haut niveau
- for nom, val in args.items():
- if val.label == 'BLOC':
- mcbloc = val.checkDefinition(parent)
- #XXX
- #print "#BLOC", parent, re.sub('\s+', ' ', val.condition)
- #assert mcs.isdisjoint(mcbloc), "Commande %s : Mot(s)-clef(s) vu(s) plusieurs fois : %s" \
- # % (parent, tuple(mcs.intersection(mcbloc)))
- return mcs
+ def checkDefinition(self, parent):
+ """Verifie la definition d'un objet composite (commande, fact, bloc)."""
+ args = self.entites.copy()
+ mcs = set()
+ for nom, val in args.items():
+ if val.label == 'SIMP':
+ mcs.add(nom)
+ #if val.max != 1 and val.type == 'TXM':
+ #print "#CMD", parent, nom
+ elif val.label == 'FACT':
+ val.checkDefinition(parent)
+ else:
+ continue
+ del args[nom]
+ # seuls les blocs peuvent entrer en conflit avec les mcs du plus haut niveau
+ for nom, val in args.items():
+ if val.label == 'BLOC':
+ mcbloc = val.checkDefinition(parent)
+ #print "#BLOC", parent, re.sub('\s+', ' ', val.condition)
+ #assert mcs.isdisjoint(mcbloc), "Commande %s : Mot(s)-clef(s) vu(s) plusieurs fois : %s" \
+ # % (parent, tuple(mcs.intersection(mcbloc)))
+ return mcs
-# def enregistreXML(self,root,catalogueXml):
-# import xml.etree.ElementTree as ET
-# import types
-# moi=ET.SubElement(root,str(self.__class__))
-# nom=ET.SubElement(moi,'nom')
-# nom.text=self.nom
-#
-# if hasattr(self,'validators') and (self.validators != () and self.validators != None):
-# valid=ET.SubElement(moi,'validators')
-# valid.text= str(self.validators.__class__)
-# catalogueXml.validatorsUtilises.append(self.validators)
-#
-# if hasattr(self,'regles') and (self.regles !=() and self.regles != None):
-# for regle in self.regles:
-# regle.enregistreXML(moi,catalogueXml)
-# catalogueXml.reglesUtilisees.append(self.regles)
-#
-# if ((self.getDocu() !="" and self.getDocu() !=None) or \
-# (self.fr != "" and self.fr != None) or \
-# (self.ang != "" and self.ang != None) ):
-# dico={}
-# if self.getDocu() !=None : dico["docu"]=self.getDocu()
-# if self.fr != None : dico["fr"]=six.text_type(self.fr,"iso-8859-1")
-# if self.ang != None : dico["ang"]=self.ang
-# doc=ET.SubElement(moi,'doc')
-# doc.attrib=dico
-#
-# if ((self.getSug() !=None) or \
-# (hasattr(self,'defaut') and (self.defaut != None) and (self.defaut != 'None'))) :
-# # il faut ajouter des sug dans le catalogue
-# # les attributs sont toujours du texte
-# dico={}
-# if (self.defaut != None) and (self.defaut != 'None') :
-# if isinstance(self.defaut,str ) : dico["defaut"]=six.text_type(self.defaut,"iso-8859-1")
-# else :dico["defaut"]=str(self.defaut)
-# if self.getSug() !=None:
-# if isinstance(self.getSug(),str ) : dico["sug"]=six.text_type(self.getSug(),"iso-8859-1")
-# else :dico["sug"]=str(self.getSug())
-#
-# doc=ET.SubElement(moi,'ValeurDef')
-# doc.attrib=dico
-#
-# dico={}
-# if hasattr(self,'into') and self.into!=None: dico['into']=str(self.into)
-# if hasattr(self,'val_max') and self.val_max != "**" : dico['max']=str(self.val_max)
-# if hasattr(self,'val_min') and self.val_min != "**" : dico['min']=str(self.val_min)
-# if dico != {} :
-# PV=ET.SubElement(moi,'PlageValeur')
-# PV.attrib=dico
-#
-# dico={}
-# if hasattr(self,'max') and self.max != 1 : dico['max']=str(self.max)
-# if hasattr(self,'min') and self.min != 1 : dico['max']=str(self.min)
-# if dico != {} :
-# Card=ET.SubElement(moi,'Cardinalite')
-# Card.attrib=dico
-#
-# dico={}
-# if hasattr(self,'reentrant') and self.reentrant not in ('f','n') : dico['reentrant']=str(self.reentrant)
-# if hasattr(self,'position') and self.position != "local": dico['position']=str(self.position)
-# if hasattr(self,'homo') and self.homo != 1 : dico['homogene']=str(self.homo)
-# if hasattr(self,'statut') : dico['statut']=str(self.statut)
-# if hasattr(self,'repetable') : dico['repetable']=str(self.repetable)
-# if dico != {} :
-# pos=ET.SubElement(moi,'situation')
-# pos.attrib=dico
-#
-# if hasattr(self,'type') and self.type != ():
-# typeAttendu=ET.SubElement(moi,'typeAttendu')
-# l=[]
-# for t in self.type:
-# if type(t) == type : l.append(t.__name__)
-# else : l.append(t)
-# typeAttendu.text=str(l)
-#
-# if hasattr(self,'sd_prod') and self.sd_prod != () and self.sd_prod !=None:
-# typeCree=ET.SubElement(moi,'typeCree')
-# typeCree.text=str(self.sd_prod.__name__)
-#
-# if hasattr(self,'op') and self.op !=None :
-# subRoutine=ET.SubElement(moi,'subRoutine')
-# subRoutine.text=str(self.op)
-#
-# if hasattr(self,'proc') and self.proc != None :
-# construction=ET.SubElement(moi,'Construction')
-# construction.text=self.proc.uri
-#
-# for nomFils, fils in self.entites.items() :
-# fils.enregistreXML(moi,catalogueXml)
-#
-# def enregistreXMLStructure(self,root,catalogueXml):
-# import xml.etree.ElementTree as ET
-# import types
-# moi=ET.SubElement(root,str(self.__class__))
-#
-# if hasattr(self,'into') and self.into!=None:
-# INTO=ET.SubElement(moi,'into')
-# INTO.text='into'
-#
-# dico={}
-# if hasattr(self,'val_max') and self.val_max != "**" : dico['max']=str(self.val_max)
-# if hasattr(self,'val_min') and self.val_min != "**" : dico['min']=str(self.val_min)
-# if dico != {} :
-# PV=ET.SubElement(moi,'maxOrMin')
-# PV.text='maxOrMin'
-#
-# dico={}
-# if hasattr(self,'max') and self.max != 1 : dico['max']=str(self.max)
-# if hasattr(self,'min') and self.min != 1 : dico['max']=str(self.min)
-# if dico != {} :
-# Card=ET.SubElement(moi,'liste')
-# Card.text="liste"
-#
-# dico={}
-# if hasattr(self,'statut') and self.statut=="f" :
-# statut=ET.SubElement(moi,'facultatif')
-# statut.text='facultatif'
-# if hasattr(self,'statut') and self.statut !="f" :
-# statut=ET.SubElement(moi,'obligatoire')
-# statut.text='obligatoire'
-#
-# if hasattr(self,'type') and self.type != ():
-# try :
-# if 'Fichier' in self.type : ty=ET.SubElement(moi,'Fichier')
-# ty.text='type'
-# except :
-# try :
-# if 'Repertoire' in self.type : ty=ET.SubElement(moi,'Repertoire')
-# ty.text='type'
-# except :
-# for t in self.type:
-# if t == "I" : ty=ET.SubElement(moi,'typeEntier')
-# elif t == "R" : ty=ET.SubElement(moi,'typeReel')
-# elif t == "TXM" : ty=ET.SubElement(moi,'typeTXM')
-# else :
-# try :
-# ty=ET.SubElement(moi,t.__name__)
-# except :
-# ty=ET.SubElement(moi,'autre')
-# ty.text='type'
-#
-# if hasattr(self,'sd_prod') and self.sd_prod != () and self.sd_prod !=None:
-# typeCree=ET.SubElement(moi,'typeCree')
-# typeCree.text='sd_prod'
-#
-# if hasattr(self,'op') and self.op !=None :
-# subRoutine=ET.SubElement(moi,'subRoutine')
-# subRoutine.text='op'
-#
-# if hasattr(self,'proc') and self.proc != None :
-# construction=ET.SubElement(moi,'Construction')
-# construction.text='proc'
#
-# for nomFils, fils in self.entites.items() :
-# fils.enregistreXMLStructure(moi,catalogueXml)
-#
+ def UQPossible(self):
+ return True
class ETAPE(I_MCCOMPO.MCCOMPO):
- def ident(self):
- return self.nom
-
- def getSdname(self):
- #print "SDNAME ",self.reuse,self.sd,self.sd.getName()
- if CONTEXT.debug :
- print(("SDNAME ", self.reuse, self.sd, self.sd.getName()))
- sdname=''
- if self.reuse != None:
- sdname= self.reuse.getName()
- else:
- if self.sd:sdname=self.sd.getName()
- if sdname.find('sansnom') != -1 or sdname.find('SD_') != -1:
- # dans le cas ou la SD est 'sansnom' ou 'SD_' on retourne la chaine vide
- return ''
- return sdname
-
- def isReentrant(self):
- """
- Indique si la commande est reentrante
- """
- return self.definition.reentrant == 'o'
-
- def initModif(self):
- """
- Met l'etat de l'etape a : modifie
- Propage la modification au parent
- """
- # initModif doit etre appele avant de realiser une modification
- # La validite devra etre recalculee apres cette modification
- # mais dans l'appel a finModif pour preserver l'etat modified
- # de tous les objets entre temps
- #print "initModif",self,self.parent
- self.state = 'modified'
- if self.parent:
- self.parent.initModif()
-
- def finModif(self):
- """
- Methode appelee une fois qu'une modification a ete faite afin de
- declencher d'eventuels traitements post-modification
- ex : INCLUDE et POURSUITE
- Ne pas mettre de traitement qui risque d'induire des recursions (soit a peu pres rien)
- """
- CONNECTOR.Emit(self,"valid")
- if self.parent:
- self.parent.finModif()
-
- def nommeSd(self,nom) :
- """
- Cette methode a pour fonction de donner un nom (nom) au concept
- produit par l'etape (self).
- - si le concept n'existe pas, on essaye de le creer a condition que l'etape soit valide ET non reentrante)
- - si il existe dea, on le renomme et on repercute les changements dans les autres etapes
- Les valeurs de retour sont :
- - 0 si le nommage n'a pas pu etre menea son terme,
- - 1 dans le cas contraire
- """
- # Le nom d'un concept doit etre un identificateur Python (toujours vrai ou insuffisant?)
- if not conceptRE.match(nom):
- return 0, tr("Un nom de concept doit etre un identificateur Python")
-
- # pour eviter que le nom du concept soit le nom de la classe --> souci pour utiliser le concept
- if (nom == self.definition.nom) : return (0, tr("un concept de type ")+ nom + tr(" ne peut pas se nommer ") + nom)
- if ( nom in dir(self.jdc.cata)) : return (0, nom + tr("est un not reserve"))
- #if (not isinstance(nom,str)) : return (0, tr("Le nom ") + nom + tr(" est un mot reserve"))
- #if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
- # return 0, tr("Nom de concept trop long (maxi 8 caracteres)")
-
- self.initModif()
- #
- # On verifie d'abord si les mots cles sont valides
- #
- if not self.isValid(sd='non') : return 0,"Nommage du concept refuse : l'operateur n'est pas valide"
- #
- # Cas particulier des operateurs obligatoirement reentrants
- # plus de concept reentrant (pour Aster)
- #
- if self.definition.reentrant == 'o':
- self.sd = self.reuse = self.jdc.getSdAvantEtape(nom,self)
- if self.sd != None :
- self.sdnom=self.sd.nom
- self.finModif()
- return 1, tr("Concept existant")
+ def ident(self):
+ return self.nom
+
+ def getSdname(self):
+ #print "SDNAME ",self.reuse,self.sd,self.sd.getName()
+ if CONTEXT.debug :
+ print(("SDNAME ", self.reuse, self.sd, self.sd.getName()))
+ sdname=''
+ if self.reuse != None:
+ sdname= self.reuse.getName()
else:
- return 0, tr("Operateur reentrant mais concept non existant")
- #
- # Cas particulier des operateurs facultativement reentrants
- #
- old_reuse=None
- if self.definition.reentrant == 'f' :
- sd = self.jdc.getSdAvantEtape(nom,self)
- if sd != None :
- if isinstance(sd,self.getType_produit()) :
- self.sd = self.reuse = sd
- self.sdnom = sd.nom
- self.finModif()
- return 1, tr("Operateur reentrant et concept existant trouve")
- else:
- return 0, tr("Concept deja existant et de mauvais type")
- else :
- # il faut enlever le lien vers une SD existante car si on passe ici
- # cela signifie que l'operateur n'est pas utilise en mode reentrant.
- # Si on ne fait pas cela, on risque de modifier une SD produite par un autre operateur
- if self.reuse :
- old_reuse=self.reuse
- self.sd = self.reuse = self.sdnom = None
- #
- # On est dans le cas ou l'operateur n'est pas reentrant ou est facultativement reentrant
- # mais est utilise en mode non reentrant
- #
- if self.sd == None :
- #Pas de concept produit preexistant
- if self.parent.getSdAutourEtape(nom,self):
- # Un concept de ce nom existe dans le voisinage de l'etape courante
- # On retablit l'ancien concept reentrant s'il existait
- if old_reuse:
- self.sd=self.reuse=old_reuse
- self.sdnom=old_reuse.nom
- return 0, tr("Nommage du concept refuse : un concept de meme nom existe deja")
- else:
- # Il n'existe pas de concept de ce nom dans le voisinage de l'etape courante
- # On peut donc creer le concept retourne
- # Il est cree sans nom mais enregistre dans la liste des concepts existants
- try:
- self.getSdProd()
- # Renommage du concept : Il suffit de changer son attribut nom pour le nommer
- self.sd.nom = nom
- self.sdnom=nom
- self.parent.sdsDict[nom]=self.sd
- self.parent.updateConceptAfterEtape(self,self.sd)
- self.finModif()
- return 1, tr("Nommage du concept effectue")
- except:
- return 0, tr("Nommage impossible %s", str(sys.exc_info()[1]))
- else :
- #Un concept produit preexiste
- old_nom=self.sd.nom
- if old_nom.find('sansnom') :
- # Dans le cas ou old_nom == sansnom, isValid retourne 0 alors que ...
- # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'etape est valide
- # on peut donc le nommer sans test prealable
- if self.parent.getSdAutourEtape(nom,self):
- return 0, tr("Nommage du concept refuse : un concept de meme nom existe deja")
+ if self.sd:sdname=self.sd.getName()
+ if sdname.find('sansnom') != -1 or sdname.find('SD_') != -1:
+ # dans le cas ou la SD est 'sansnom' ou 'SD_' on retourne la chaine vide
+ return ''
+ return sdname
+
+ def isReentrant(self):
+ """
+ Indique si la commande est reentrante
+ """
+ return self.definition.reentrant == 'o'
+
+ def initModif(self):
+ """
+ Met l'etat de l'etape a : modifie
+ Propage la modification au parent
+ """
+ # initModif doit etre appele avant de realiser une modification
+ # La validite devra etre recalculee apres cette modification
+ # mais dans l'appel a finModif pour preserver l'etat modified
+ # de tous les objets entre temps
+ #print "initModif",self,self.parent
+ self.state = 'modified'
+ if self.parent:
+ self.parent.initModif()
+
+ def finModif(self):
+ """
+ Methode appelee une fois qu'une modification a ete faite afin de
+ declencher d'eventuels traitements post-modification
+ ex : INCLUDE et POURSUITE
+ Ne pas mettre de traitement qui risque d'induire des recursions (soit a peu pres rien)
+ """
+ CONNECTOR.Emit(self,"valid")
+ if self.parent:
+ self.parent.finModif()
+
+ def nommeSd(self,nom) :
+ """
+ Cette methode a pour fonction de donner un nom (nom) au concept
+ produit par l'etape (self).
+ - si le concept n'existe pas, on essaye de le creer a condition que l'etape soit valide ET non reentrante)
+ - si il existe dea, on le renomme et on repercute les changements dans les autres etapes
+ Les valeurs de retour sont :
+ - 0 si le nommage n'a pas pu etre menea son terme,
+ - 1 dans le cas contraire
+ """
+ # Le nom d'un concept doit etre un identificateur Python (toujours vrai ou insuffisant?)
+ if not conceptRE.match(nom):
+ return 0, tr("Un nom de concept doit etre un identificateur Python")
+
+ # pour eviter que le nom du concept soit le nom de la classe --> souci pour utiliser le concept
+ if (nom == self.definition.nom) : return (0, tr("un concept de type ")+ nom + tr(" ne peut pas se nommer ") + nom)
+ if ( nom in dir(self.jdc.cata)) : return (0, nom + tr("est un not reserve"))
+ #if (not isinstance(nom,str)) : return (0, tr("Le nom ") + nom + tr(" est un mot reserve"))
+ #if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
+ # return 0, tr("Nom de concept trop long (maxi 8 caracteres)")
+
+ self.initModif()
+ #
+ # On verifie d'abord si les mots cles sont valides
+ #
+ if not self.isValid(sd='non') : return 0,"Nommage du concept refuse : l'operateur n'est pas valide"
+ #
+ # Cas particulier des operateurs obligatoirement reentrants
+ # plus de concept reentrant (pour Aster)
+ #
+ if self.definition.reentrant == 'o':
+ self.sd = self.reuse = self.jdc.getSdAvantEtape(nom,self)
+ if self.sd != None :
+ self.sdnom=self.sd.nom
+ self.finModif()
+ return 1, tr("Concept existant")
else:
- # Renommage du concept : Il suffit de changer son attribut nom pour le nommer
- self.sd.nom=nom
- self.sdnom=nom
- self.parent.updateConceptAfterEtape(self,self.sd)
- self.finModif()
- return 1, tr("Nommage du concept effectue")
- if self.isValid() :
- # Normalement l appel de isValid a mis a jour le concept produit (son type)
- # Il suffit de specifier l attribut nom de sd pour le nommer si le nom n est pas
- # deja attribue
+ return 0, tr("Operateur reentrant mais concept non existant")
+ #
+ # Cas particulier des operateurs facultativement reentrants
+ #
+ old_reuse=None
+ if self.definition.reentrant == 'f' :
+ sd = self.jdc.getSdAvantEtape(nom,self)
+ if sd != None :
+ if isinstance(sd,self.getType_produit()) :
+ self.sd = self.reuse = sd
+ self.sdnom = sd.nom
+ self.finModif()
+ return 1, tr("Operateur reentrant et concept existant trouve")
+ else:
+ return 0, tr("Concept deja existant et de mauvais type")
+ else :
+ # il faut enlever le lien vers une SD existante car si on passe ici
+ # cela signifie que l'operateur n'est pas utilise en mode reentrant.
+ # Si on ne fait pas cela, on risque de modifier une SD produite par un autre operateur
+ if self.reuse :
+ old_reuse=self.reuse
+ self.sd = self.reuse = self.sdnom = None
+ #
+ # On est dans le cas ou l'operateur n'est pas reentrant ou est facultativement reentrant
+ # mais est utilise en mode non reentrant
+ #
+ if self.sd == None :
+ #Pas de concept produit preexistant
if self.parent.getSdAutourEtape(nom,self):
- return 0, tr("Nommage du concept refuse : un concept de meme nom existe deja")
+ # Un concept de ce nom existe dans le voisinage de l'etape courante
+ # On retablit l'ancien concept reentrant s'il existait
+ if old_reuse:
+ self.sd=self.reuse=old_reuse
+ self.sdnom=old_reuse.nom
+ return 0, tr("Nommage du concept refuse : un concept de meme nom existe deja")
else:
- # Renommage du concept : Il suffit de changer son attribut nom pour le nommer
- self.sd.nom=nom
- self.sdnom=nom
- self.parent.updateConceptAfterEtape(self,self.sd)
- self.finModif()
- return 1, tr("Nommage du concept effectue")
- else:
- # Normalement on ne devrait pas passer ici
- return 0, 'Normalement on ne devrait pas passer ici'
-
- def getSdprods(self,nom_sd):
- """
- Fonction : retourne le concept produit par l etape de nom nom_sd
- s il existe sinon None
- """
- if self.sd:
- if self.sd.nom == nom_sd:return self.sd
-
- def active(self):
- """
- Rend l'etape courante active.
- Il faut ajouter la sd si elle existe au contexte global du JDC
- et a la liste des sd
- """
- if self.actif:return
- self.actif = 1
- self.initModif()
- if self.sd :
- try:
- self.jdc.appendSdProd(self.sd)
- except:
- pass
- CONNECTOR.Emit(self,"add",None)
- CONNECTOR.Emit(self,"valid")
-
- def inactive(self):
- """
- Rend l'etape courante inactive
- Il faut supprimer la sd du contexte global du JDC
- et de la liste des sd
- """
- self.actif = 0
- self.initModif()
- if self.sd :
- self.jdc.delSdprod(self.sd)
- self.jdc.deleteConceptAfterEtape(self,self.sd)
- CONNECTOR.Emit(self,"supp",None)
- CONNECTOR.Emit(self,"valid")
-
- def controlSdprods(self,d):
- """
- Cette methode doit verifier que ses concepts produits ne sont pas
- deja definis dans le contexte
- Si c'est le cas, les concepts produits doivent etre supprimes
- """
- print ("controlSdprods etape",d.keys(),self.sd and self.sd.nom,self.nom)
- if self.sd:
- if self.sd.nom in d :
- # Le concept est deja defini
- if self.reuse and self.reuse is d[self.sd.nom]:
- # Le concept est reutilise : situation normale
- pass
- else:
- # Redefinition du concept, on l'annule
- #XXX on pourrait simplement annuler son nom pour conserver les objets
- # l'utilisateur n'aurait alors qu'a renommer le concept (faisable??)
- self.initModif()
- sd=self.sd
- self.sd=self.reuse=self.sdnom=None
- #supprime les references a sd dans les etapes suivantes
- self.parent.deleteConceptAfterEtape(self,sd)
- self.finModif()
-
- def supprimeSdprod(self,sd):
- """
- Supprime le concept produit sd s'il est produit par l'etape
- """
- if sd is not self.sd:return
- if self.sd != None :
- self.initModif()
- self.parent.delSdprod(sd)
- self.sd=None
- self.finModif()
- self.parent.deleteConcept(sd)
-
- def supprimeSdProds(self):
- """
- Fonction:
- Lors d'une destruction d'etape, detruit tous les concepts produits
- Un operateur n a qu un concept produit
- Une procedure n'en a aucun
- Une macro en a en general plus d'un
- """
- self.deleteRef()
- #print "supprimeSdProds",self
- if self.reuse is self.sd :return
- # l'etape n'est pas reentrante
- # le concept retourne par l'etape est a supprimer car il etait
- # cree par l'etape
- if self.sd != None :
- self.parent.delSdprod(self.sd)
- self.parent.deleteConcept(self.sd)
-
- def close(self):
- return
-
- def updateConcept(self,sd):
- for child in self.mcListe :
- child.updateConcept(sd)
-
- def deleteConcept(self,sd):
- """
- Inputs :
- - sd=concept detruit
- Fonction :
- Mettre a jour les mots cles de l etape et eventuellement
- le concept produit si reuse
- suite a la disparition du concept sd
- Seuls les mots cles simples MCSIMP font un traitement autre
- que de transmettre aux fils
- """
- if self.reuse and self.reuse == sd:
- self.sd=self.reuse=None
+ # Il n'existe pas de concept de ce nom dans le voisinage de l'etape courante
+ # On peut donc creer le concept retourne
+ # Il est cree sans nom mais enregistre dans la liste des concepts existants
+ try:
+ self.getSdProd()
+ # Renommage du concept : Il suffit de changer son attribut nom pour le nommer
+ self.sd.nom = nom
+ self.sdnom=nom
+ self.parent.sdsDict[nom]=self.sd
+ self.parent.updateConceptAfterEtape(self,self.sd)
+ self.finModif()
+ return 1, tr("Nommage du concept effectue")
+ except:
+ return 0, tr("Nommage impossible %s", str(sys.exc_info()[1]))
+ else :
+ #Un concept produit preexiste
+ old_nom=self.sd.nom
+ if old_nom.find('sansnom') :
+ # Dans le cas ou old_nom == sansnom, isValid retourne 0 alors que ...
+ # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'etape est valide
+ # on peut donc le nommer sans test prealable
+ if self.parent.getSdAutourEtape(nom,self):
+ return 0, tr("Nommage du concept refuse : un concept de meme nom existe deja")
+ else:
+ # Renommage du concept : Il suffit de changer son attribut nom pour le nommer
+ self.sd.nom=nom
+ self.sdnom=nom
+ self.parent.updateConceptAfterEtape(self,self.sd)
+ self.finModif()
+ return 1, tr("Nommage du concept effectue")
+ if self.isValid() :
+ # Normalement l appel de isValid a mis a jour le concept produit (son type)
+ # Il suffit de specifier l attribut nom de sd pour le nommer si le nom n est pas
+ # deja attribue
+ if self.parent.getSdAutourEtape(nom,self):
+ return 0, tr("Nommage du concept refuse : un concept de meme nom existe deja")
+ else:
+ # Renommage du concept : Il suffit de changer son attribut nom pour le nommer
+ self.sd.nom=nom
+ self.sdnom=nom
+ self.parent.updateConceptAfterEtape(self,self.sd)
+ self.finModif()
+ return 1, tr("Nommage du concept effectue")
+ else:
+ # Normalement on ne devrait pas passer ici
+ return 0, 'Normalement on ne devrait pas passer ici'
+
+ def getSdprods(self,nom_sd):
+ """
+ Fonction : retourne le concept produit par l etape de nom nom_sd
+ s il existe sinon None
+ """
+ if self.sd:
+ if self.sd.nom == nom_sd:return self.sd
+
+ def active(self):
+ """
+ Rend l'etape courante active.
+ Il faut ajouter la sd si elle existe au contexte global du JDC
+ et a la liste des sd
+ """
+ if self.actif:return
+ self.actif = 1
self.initModif()
- for child in self.mcListe :
- child.deleteConcept(sd)
-
- def replaceConcept(self,old_sd,sd):
- """
- Inputs :
- - old_sd=concept remplace
- - sd = nouveau concept
- Fonction :
- Mettre a jour les mots cles de l etape et eventuellement
- le concept produit si reuse
- suite au remplacement du concept old_sd
- """
- if self.reuse and self.reuse == old_sd:
- self.sd=self.reuse=sd
+ if self.sd :
+ try:
+ self.jdc.appendSdProd(self.sd)
+ except:
+ pass
+ CONNECTOR.Emit(self,"add",None)
+ CONNECTOR.Emit(self,"valid")
+
+ def inactive(self):
+ """
+ Rend l'etape courante inactive
+ Il faut supprimer la sd du contexte global du JDC
+ et de la liste des sd
+ """
+ self.actif = 0
self.initModif()
- for child in self.mcListe :
- child.replaceConcept(old_sd,sd)
-
- def resetContext(self):
- pass
-
- def getNomsSdOperReentrant(self):
- """
- Retourne la liste des noms de concepts utilisesa l'interieur de la commande
- qui sont du type que peut retourner cette commande
- """
- liste_sd = self.getSd_utilisees()
- l_noms = []
- if type(self.definition.sd_prod) == types.FunctionType:
- d=self.creeDictValeurs(self.mcListe)
- try:
- classe_sd_prod = self.definition.sd_prod(*(), **d)
- except:
- return []
- else:
- classe_sd_prod = self.definition.sd_prod
- for sd in liste_sd :
- if sd.__class__ is classe_sd_prod : l_noms.append(sd.nom)
- l_noms.sort()
- return l_noms
-
- def getGenealogiePrecise(self):
- return [self.nom]
-
- def getNomDsXML(self):
- # en xml on a un choice
- index=0
- for e in self.parent.etapes :
- if e == self : break
- if e.nom == self.nom : index+=1
- nomDsXML = self.nom + "[" + str(index) + "]"
- return nomDsXML
-
-
- def getGenealogie(self):
- """
- Retourne la liste des noms des ascendants de l'objet self
- en s'arretant a la premiere ETAPE rencontree
- """
- return [self.nom]
-
- def verifExistenceSd(self):
- """
- Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
- avant etape, sinon enleve la referea ces concepts
- """
- #print "verifExistenceSd",self.sd
- for motcle in self.mcListe :
- motcle.verifExistenceSd()
-
- def updateMcGlobal(self):
- """
- Met a jour les mots cles globaux enregistres dans l'etape
- et dans le jdc parent.
- Une etape ne peut pas etre globale. Elle se contente de passer
- la requete a ses fils apres avoir reinitialise le dictionnaire
- des mots cles globaux.
- """
- self.mc_globaux={}
- I_MCCOMPO.MCCOMPO.updateMcGlobal(self)
-
- def updateConditionBloc(self):
- """
- Realise l'update des blocs conditionnels fils de self
- """
- self._updateConditionBloc()
-
- def getObjetCommentarise(self,format):
- """
- Cette methode retourne un objet commande commentarisee
- representant la commande self
- """
- import generator
- g=generator.plugins[format]()
- texte_commande = g.gener(self,format='beautifie')
- # Il faut enlever la premiere ligne vide de texte_commande que
- # rajoute le generator
- # on construit l'objet COMMANDE_COMM repesentatif de self mais non
- # enregistre dans le jdc (pas ajoute dans jdc.etapes)
- parent=self.parent
- pos=self.parent.etapes.index(self)
- # on ajoute une fin à la commande pour pouvoir en commenter 2
- texte_commande+='\nFin Commentaire'
- commande_comment = commande_comm.COMMANDE_COMM(texte=texte_commande,
- reg='non',
- parent=parent)
- self.parent.suppEntite(self)
- parent.addEntite(commande_comment,pos)
-
- return commande_comment
-
- def modified(self):
- """Le contenu de l'etape (mots cles, ...) a ete modifie"""
- if self.nom=="DETRUIRE":
- self.parent.controlContextApres(self)
-
-
-
+ if self.sd :
+ self.jdc.delSdprod(self.sd)
+ self.jdc.deleteConceptAfterEtape(self,self.sd)
+ CONNECTOR.Emit(self,"supp",None)
+ CONNECTOR.Emit(self,"valid")
+
+ def controlSdprods(self,d):
+ """
+ Cette methode doit verifier que ses concepts produits ne sont pas
+ deja definis dans le contexte
+ Si c'est le cas, les concepts produits doivent etre supprimes
+ """
+ #print ("controlSdprods etape",d.keys(),self.sd and self.sd.nom,self.nom)
+ if self.sd:
+ if self.sd.nom in d :
+ # Le concept est deja defini
+ if self.reuse and self.reuse is d[self.sd.nom]:
+ # Le concept est reutilise : situation normale
+ pass
+ else:
+ # Redefinition du concept, on l'annule
+ #XXX on pourrait simplement annuler son nom pour conserver les objets
+ # l'utilisateur n'aurait alors qu'a renommer le concept (faisable??)
+ self.initModif()
+ sd=self.sd
+ self.sd=self.reuse=self.sdnom=None
+ #supprime les references a sd dans les etapes suivantes
+ self.parent.deleteConceptAfterEtape(self,sd)
+ self.finModif()
+
+ def supprimeSdprod(self,sd):
+ """
+ Supprime le concept produit sd s'il est produit par l'etape
+ """
+ if sd is not self.sd:return
+ if self.sd != None :
+ self.initModif()
+ self.parent.delSdprod(sd)
+ self.sd=None
+ self.finModif()
+ self.parent.deleteConcept(sd)
+
+ def supprimeSdProds(self):
+ """
+ Fonction:
+ Lors d'une destruction d'etape, detruit tous les concepts produits
+ Un operateur n a qu un concept produit
+ Une procedure n'en a aucun
+ Une macro en a en general plus d'un
+ """
+ self.deleteRef()
+ #print "supprimeSdProds",self
+ if self.reuse is self.sd :return
+ # l'etape n'est pas reentrante
+ # le concept retourne par l'etape est a supprimer car il etait
+ # cree par l'etape
+ if self.sd != None :
+ self.parent.delSdprod(self.sd)
+ self.parent.deleteConcept(self.sd)
+
+ def close(self):
+ return
+
+ def updateConcept(self,sd):
+ for child in self.mcListe :
+ child.updateConcept(sd)
+
+ def deleteConcept(self,sd):
+ """
+ Inputs :
+ - sd=concept detruit
+ Fonction :
+ Mettre a jour les mots cles de l etape et eventuellement
+ le concept produit si reuse
+ suite a la disparition du concept sd
+ Seuls les mots cles simples MCSIMP font un traitement autre
+ que de transmettre aux fils
+ """
+ if self.reuse and self.reuse == sd:
+ self.sd=self.reuse=None
+ self.initModif()
+ for child in self.mcListe :
+ child.deleteConcept(sd)
+
+ def replaceConcept(self,old_sd,sd):
+ """
+ Inputs :
+ - old_sd=concept remplace
+ - sd = nouveau concept
+ Fonction :
+ Mettre a jour les mots cles de l etape et eventuellement
+ le concept produit si reuse
+ suite au remplacement du concept old_sd
+ """
+ if self.reuse and self.reuse == old_sd:
+ self.sd=self.reuse=sd
+ self.initModif()
+ for child in self.mcListe :
+ child.replaceConcept(old_sd,sd)
+
+ def resetContext(self):
+ pass
+
+ def getNomsSdOperReentrant(self):
+ """
+ Retourne la liste des noms de concepts utilisesa l'interieur de la commande
+ qui sont du type que peut retourner cette commande
+ """
+ liste_sd = self.getSd_utilisees()
+ l_noms = []
+ if type(self.definition.sd_prod) == types.FunctionType:
+ d=self.creeDictValeurs(self.mcListe)
+ try:
+ classe_sd_prod = self.definition.sd_prod(*(), **d)
+ except:
+ return []
+ else:
+ classe_sd_prod = self.definition.sd_prod
+ for sd in liste_sd :
+ if sd.__class__ is classe_sd_prod : l_noms.append(sd.nom)
+ l_noms.sort()
+ return l_noms
+
+ def getGenealogiePrecise(self):
+ return [self.nom]
+
+ def getNomDsXML(self):
+ # en xml on a un choice
+ index=0
+ for e in self.parent.etapes :
+ if e == self : break
+ if e.nom == self.nom : index+=1
+ nomDsXML = self.nom + "[" + str(index) + "]"
+ return nomDsXML
+
+
+ def getGenealogie(self):
+ """
+ Retourne la liste des noms des ascendants de l'objet self
+ en s'arretant a la premiere ETAPE rencontree
+ """
+ return [self.nom]
+
+ def verifExistenceSd(self):
+ """
+ Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
+ avant etape, sinon enleve la referea ces concepts
+ """
+ #print "verifExistenceSd",self.sd
+ for motcle in self.mcListe :
+ motcle.verifExistenceSd()
+
+ def updateMcGlobal(self):
+ """
+ Met a jour les mots cles globaux enregistres dans l'etape
+ et dans le jdc parent.
+ Une etape ne peut pas etre globale. Elle se contente de passer
+ la requete a ses fils apres avoir reinitialise le dictionnaire
+ des mots cles globaux.
+ """
+ self.mc_globaux={}
+ I_MCCOMPO.MCCOMPO.updateMcGlobal(self)
+
+ def updateConditionBloc(self):
+ """
+ Realise l'update des blocs conditionnels fils de self
+ """
+ self._updateConditionBloc()
+
+ def getObjetCommentarise(self,format):
+ """
+ Cette methode retourne un objet commande commentarisee
+ representant la commande self
+ """
+ import generator
+ g=generator.plugins[format]()
+ texte_commande = g.gener(self,format='beautifie')
+ # Il faut enlever la premiere ligne vide de texte_commande que
+ # rajoute le generator
+ # on construit l'objet COMMANDE_COMM repesentatif de self mais non
+ # enregistre dans le jdc (pas ajoute dans jdc.etapes)
+ parent=self.parent
+ pos=self.parent.etapes.index(self)
+ # on ajoute une fin à la commande pour pouvoir en commenter 2
+ texte_commande+='\nFin Commentaire'
+ commande_comment = commande_comm.COMMANDE_COMM(texte=texte_commande,
+ reg='non',
+ parent=parent)
+ self.parent.suppEntite(self)
+ parent.addEntite(commande_comment,pos)
+
+ return commande_comment
+
+ def modified(self):
+ """Le contenu de l'etape (mots cles, ...) a ete modifie"""
+ if self.nom=="DETRUIRE":
+ self.parent.controlContextApres(self)
+
+
+
#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
- def buildSd(self,nom):
- """
- Methode de Noyau surchargee pour poursuivre malgre tout
- si une erreur se produit pendant la creation du concept produit
- """
- try:
- sd=Noyau.N_ETAPE.ETAPE.buildSd(self,nom)
- except AsException as e :
- # Une erreur s'est produite lors de la construction du concept
- # Comme on est dans EFICAS, on essaie de poursuivre quand meme
- # Si on poursuit, on a le choix entre deux possibilites :
- # 1. on annule la sd associee a self
- # 2. on la conserve mais il faut la retourner
- # En plus il faut rendre coherents sdnom et sd.nom
- self.sd=None
- self.sdnom=None
- self.state="unchanged"
- self.valid=0
-
- return self.sd
+ def buildSd(self,nom):
+ """
+ Methode de Noyau surchargee pour poursuivre malgre tout
+ si une erreur se produit pendant la creation du concept produit
+ """
+ try:
+ sd=Noyau.N_ETAPE.ETAPE.buildSd(self,nom)
+ except AsException as e :
+ # Une erreur s'est produite lors de la construction du concept
+ # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+ # Si on poursuit, on a le choix entre deux possibilites :
+ # 1. on annule la sd associee a self
+ # 2. on la conserve mais il faut la retourner
+ # En plus il faut rendre coherents sdnom et sd.nom
+ self.sd=None
+ self.sdnom=None
+ self.state="unchanged"
+ self.valid=0
+
+ return self.sd
#ATTENTION SURCHARGE: cette methode doit etre gardee en synchronisation avec Noyau
- def makeRegister(self):
- """
- Initialise les attributs jdc, id, niveau et realise les
- enregistrements necessaires
- Pour EFICAS, on tient compte des niveaux
- Surcharge la methode makeRegister du package Noyau
- """
- if self.parent :
- self.jdc = self.parent.getJdcRoot()
- self.id= self.parent.register(self)
- self.UserError=self.jdc.UserError
- if self.definition.niveau :
- # La definition est dans un niveau. En plus on
- # l'enregistre dans le niveau
- self.nom_niveau_definition = self.definition.niveau.nom
- self.niveau = self.parent.dict_niveaux[self.nom_niveau_definition]
- self.niveau.register(self)
- else:
- # La definition est au niveau global
- self.nom_niveau_definition = 'JDC'
- self.niveau=self.parent
- else:
- self.jdc = self.parent =None
- self.id=None
- self.niveau=None
- self.UserError="UserError"
-
- def report(self):
- cr= Validation.V_ETAPE.ETAPE.report(self)
- #rafraichisst de la validite de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
- self.isValid()
- if not self.isValid() and self.nom == "INCLUDE" :
- self.cr.fatal('Etape : {} ligne : {} {}'.format(self.nom, self.appel[0], tr("\n Include Invalide. \n ne sera pas pris en compte")))
- return cr
-
+ def makeRegister(self):
+ """
+ Initialise les attributs jdc, id, niveau et realise les
+ enregistrements necessaires
+ Pour EFICAS, on tient compte des niveaux
+ Surcharge la methode makeRegister du package Noyau
+ """
+ if self.parent :
+ self.jdc = self.parent.getJdcRoot()
+ self.id= self.parent.register(self)
+ self.UserError=self.jdc.UserError
+ if self.definition.niveau :
+ # La definition est dans un niveau. En plus on
+ # l'enregistre dans le niveau
+ self.nom_niveau_definition = self.definition.niveau.nom
+ self.niveau = self.parent.dict_niveaux[self.nom_niveau_definition]
+ self.niveau.register(self)
+ else:
+ # La definition est au niveau global
+ self.nom_niveau_definition = 'JDC'
+ self.niveau=self.parent
+ else:
+ self.jdc = self.parent =None
+ self.id=None
+ self.niveau=None
+ self.UserError="UserError"
+
+ def report(self):
+ cr= Validation.V_ETAPE.ETAPE.report(self)
+ #rafraichisst de la validite de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
+ self.isValid()
+ if not self.isValid() and self.nom == "INCLUDE" :
+ self.cr.fatal('Etape : {} ligne : {} {}'.format(self.nom, self.appel[0], tr("\n Include Invalide. \n ne sera pas pris en compte")))
+ return cr
"""
class EVAL :
- """
- """
- def __init__(self,str):
- """
- L'objet EVAL est initialise avec une chaine de caracteres (str)
- """
- self.valeur = str
- self.val=None
+ """
+ """
+ def __init__(self,str):
+ """
+ L'objet EVAL est initialise avec une chaine de caracteres (str)
+ """
+ self.valeur = str
+ self.val=None
- def __repr__(self):
- return 'EVAL("""'+self.valeur+'""")'
-
- def accept(self,visitor):
- """
- Cette methode permet de parcourir l'arborescence des objets
- en utilisant le pattern VISITEUR
- """
- visitor.visitEVAL(self)
+ def __repr__(self):
+ return 'EVAL("""'+self.valeur+'""")'
+ def accept(self,visitor):
+ """
+ Cette methode permet de parcourir l'arborescence des objets
+ en utilisant le pattern VISITEUR
+ """
+ visitor.visitEVAL(self)
from . import I_REGLE
class EXCLUS(I_REGLE.REGLE):
- def purgeListe(self,liste_a_purger,listeMcPresents):
- regle_active=0
- for mc_present in listeMcPresents:
- if mc_present in self.mcs:
- regle_active=1
- break
- if not regle_active : return liste_a_purger
-
- for mc in self.mcs:
- # Il ne faut pas purger un mot cle present. Sa cardinalite est verifiee par ailleurs
- if mc in liste_a_purger and mc not in listeMcPresents:
- liste_a_purger.remove(mc)
- return liste_a_purger
+ def purgeListe(self,liste_a_purger,listeMcPresents):
+ regle_active=0
+ for mc_present in listeMcPresents:
+ if mc_present in self.mcs:
+ regle_active=1
+ break
+ if not regle_active : return liste_a_purger
+ for mc in self.mcs:
+ # Il ne faut pas purger un mot cle present. Sa cardinalite est verifiee par ailleurs
+ if mc in liste_a_purger and mc not in listeMcPresents:
+ liste_a_purger.remove(mc)
+ return liste_a_purger
class Fichier:
- def __init__(self,filtre='All Files (*)',existence='NonExistant',repertoire=None):
- self.filtre=filtre
- self.existence=existence
- self.repertoire=repertoire
+ def __init__(self,filtre='All Files (*)',existence='NonExistant',repertoire=None):
+ self.filtre=filtre
+ self.existence=existence
+ self.repertoire=repertoire
- def __convert__(self,valeur):
- # Attention ne verifie pas grand chose
- if type(valeur) != bytes and type(valeur) != str:
- return None
- return valeur
+ def __convert__(self,valeur):
+ # Attention ne verifie pas grand chose
+ if type(valeur) != bytes and type(valeur) != str:
+ return None
+ return valeur
- def info(self):
- return "Fichier de Type %s et %s" % (self.filtre,self.existence)
-
- __repr__=info
- __str__=info
+ def info(self):
+ return "Fichier de Type %s et %s" % (self.filtre,self.existence)
+ __repr__=info
+ __str__=info
from Extensions.eficas_exception import EficasException
class FONCTION(ASSD):
- def __init__(self,etape=None,sd=None,reg='oui'):
- if reg=='oui':
- self.jdc.registerFonction(self)
+ def __init__(self,etape=None,sd=None,reg='oui'):
+ if reg=='oui':
+ self.jdc.registerFonction(self)
- def getFormule(self):
- """
- Retourne une formule decrivant self sous la forme d'un tuple :
- (nom,type_retourne,arguments,corps)
- """
- if hasattr(self.etape,'getFormule'):
- # on est dans le cas d'une formule Aster
- return self.etape.getFormule()
- else:
- # on est dans le cas d'une fonction
- return (self.nom,'REEL','(REEL:x)','''bidon''')
+ def getFormule(self):
+ """
+ Retourne une formule decrivant self sous la forme d'un tuple :
+ (nom,type_retourne,arguments,corps)
+ """
+ if hasattr(self.etape,'getFormule'):
+ # on est dans le cas d'une formule Aster
+ return self.etape.getFormule()
+ else:
+ # on est dans le cas d'une fonction
+ return (self.nom,'REEL','(REEL:x)','''bidon''')
# On ajoute la classe formule pour etre coherent avec la
# modification de C Durand sur la gestion des formules dans le superviseur
class fonction(FONCTION) : pass
from Extensions import param2
-class formule(FONCTION) :
- def __call__(self,*val):
- if len(val) != len(self.nompar):
- raise TypeError(" %s() takes exactly %d argument (%d given)" % (self.nom,len(self.nompar),len(val)))
- return param2.Unop2(self.nom,self.realCall,val)
-
- def realCall(self,*val):
- if hasattr(self.parent,'contexte_fichier_init'):
- context=self.parent.contexte_fichier_init
- else : context={}
- i=0
- for param in self.nompar :
- context[param]=val[i]
- i=i+1
- try :
- res=eval(self.expression,self.jdc.const_context, context)
- except :
- print (75 * '!')
- print ('! ' + "Erreur evaluation formule %s" % self.nom + 20*'!')
- print (75 * '!')
- raise EficasException
- return res
-
+class formule(FONCTION) :
+ def __call__(self,*val):
+ if len(val) != len(self.nompar):
+ raise TypeError(" %s() takes exactly %d argument (%d given)" % (self.nom,len(self.nompar),len(val)))
+ return param2.Unop2(self.nom,self.realCall,val)
+ def realCall(self,*val):
+ if hasattr(self.parent,'contexte_fichier_init'):
+ context=self.parent.contexte_fichier_init
+ else : context={}
+ i=0
+ for param in self.nompar :
+ context[param]=val[i]
+ i=i+1
+ try :
+ res=eval(self.expression,self.jdc.const_context, context)
+ except :
+ print (75 * '!')
+ print ('! ' + "Erreur evaluation formule %s" % self.nom + 20*'!')
+ print (75 * '!')
+ raise EficasException
+ return res
return None,None,None
type_retourne="REEL"
if len(self.mcListe) > 0:
- child = self.mcListe[0] # child est un MCSIMP
- corps = child.getVal()
+ child = self.mcListe[0] # child est un MCSIMP
+ corps = child.getVal()
else:
- corps = None
+ corps = None
if len(self.mcListe) > 1:
- child = self.mcListe[1]
- l_args= child.getVal()
+ child = self.mcListe[1]
+ l_args= child.getVal()
else :
- l_args=None
+ l_args=None
return type_retourne,l_args,corps
def getNom(self):
if sd:
sd.nom = formule[0]
- # bidouille PN
- # Il faut que formule soit constituee de
+ # bidouille PN
+ # Il faut que formule soit constituee de
# nom de la formule
# type retourne
# parametres
self.buildMc()
self.mcListe=[]
if len(formule) < 4 :
- return 0
+ return 0
arguments=formule[3]
if arguments[0] == '(' :
- arguments=arguments[1:]
+ arguments=arguments[1:]
if arguments[-1] == ')' :
- arguments=arguments[:-1]
+ arguments=arguments[:-1]
self.arguments=tuple(arguments.split(','))
mocles={"NOM_PARA":self.arguments}
if formule[1] == "REEL":
- mocles["VALE"]=formule[2]
+ mocles["VALE"]=formule[2]
if formule[1] == "COMPLEXE":
- mocles["VALE_C"]=formule[2]
+ mocles["VALE_C"]=formule[2]
for k,v in self.definition.entites.items():
if not k in mocles : continue
child.valeur=mocles[k]
child.state = 'modified'
self.mcListe.append(child)
-
+
self.corps = formule[2]
self.type_retourne = formule[1]
sd = self.getSdProd()
return
def deleteConcept(self,sd):
- """
+ """
Inputs :
- sd=concept detruit
Fonction :
Mettre a jour les mots cles de l etape et eventuellement le concept produit si reuse
suite a la disparition du concept sd
Seuls les mots cles simples MCSIMP font un traitement autre que de transmettre aux fils,
- sauf les objets FORM_ETAPE qui doivent verifier que le concept detruit n'est pas
+ sauf les objets FORM_ETAPE qui doivent verifier que le concept detruit n'est pas
utilise dans le corps de la fonction
"""
self.initModif()
-
+
def replaceConcept(self,old_sd,sd):
"""
Inputs :
utilise dans le corps de la fonction
"""
self.initModif()
-
basestring = str
class LASSD:
- pass
+ pass
class JDC(I_OBJECT.OBJECT):
- """
- """
- def __init__(self):
- self.editmode=0
- self.etapes_niveaux=[]
- self.niveau=self
- self.params=[]
- self.fonctions=[]
- self._etape_context=None
- self.recorded_units={}
- self.old_recorded_units={}
-
-
- def getIndex(self,objet):
- """
- Retourne la position d'objet dans la liste self
- """
- return self.etapes.index(objet)
-
- def getSdAvantDuBonType(self,etape,types_permis):
- """
- Retourne la liste des concepts avant etape d'un type acceptable
- """
- d=self.getContexteAvant(etape)
-
- l=[]
- for k,v in d.items():
- #if type(v) != types.InstanceType and not isinstance(v,object): continue
- if not isinstance(v,object): continue
- # On considere que seul assd indique un type quelconque pas CO
- elif self.assd in types_permis :
- if v.etape.sdnom != "sansnom" : l.append(k)
- elif self.estPermis(v,types_permis):
- if v.etape.sdnom != "sansnom" : l.append(k)
- l.sort()
- return l
-
- def getSdCreeParObjet(self,classeAChercher):
- l=[]
- for v in list(self.sdsDict.keys()):
- if (isinstance(self.sdsDict[v], classeAChercher)) :
- l.append(self.sdsDict[v])
- return l
-
-
- def getVariables(self,etape):
- etapeStop=etape
- l=[]
- for etapeTraitee in self.etapes :
- if etapeTraitee==etapeStop:
- break
- if etapeTraitee.nom == 'VARIABLE' :
- variable=etapeTraitee.getMocle('ModelVariable')
- if variable != None :
- l.append(variable.nom)
- return l
-
- def getDistributions(self,etape):
- etapeStop=etape
- l=[]
- for etapeTraitee in self.etapes :
- if etapeTraitee==etapeStop: break
- if etapeTraitee.nom == 'DISTRIBUTION' and etapeTraitee.sd !=None : l.append(etapeTraitee.sd.nom)
- return l
-
-
- #def set_Copules_recalcule_etat(self):
- # for etapeTraitee in self.etapes :
- # if etapeTraitee.nom == 'CORRELATION' :
- #Matrix=etapeTraitee.getChild('Matrix')
- #if Matrix !=None :
- # Correlation=etapeTraitee.getChild('CorrelationMatrix')
- # if Correlation !=None : Correlation.state='arecalculer'
- # Matrix.state='arecalculer'
-
- #def recalculeEtatCorrelation(self):
- # for etapeTraitee in self.etapes :
- # if etapeTraitee.nom == 'CORRELATION' :
- #Matrix=etapeTraitee.getChild('Matrix')
- #if Matrix !=None :
- # Matrix.state='arecalculer'
- # Correlation=Matrix.getChild('CorrelationMatrix')
- # if Correlation !=None : Correlation.state='arecalculer'
- # Correlation.isValid()
- # Matrix.isValid()
- # etapeTraitee.state='arecalculer'
- # if etapeTraitee.state=='arecalculer': etapeTraitee.isValid()
-
- def recalculeEtatCorrelation(self):
- for etapeTraitee in self.etapes :
- if etapeTraitee.nom == 'CORRELATION' :
- Correlation=etapeTraitee.getChild('CorrelationMatrix')
- if Correlation !=None :
- Correlation.state='arecalculer'
- Correlation.isValid()
- etapeTraitee.isValid()
-
- def recalculeValiditeApresChangementGlobalJdc(self, motClef):
- print ("je passe dans recalculeValiditeApresChangementGlobalJdc")
+ """
+ """
+ def __init__(self):
+ self.editmode=0
+ self.etapes_niveaux=[]
+ self.niveau=self
+ self.params=[]
+ self.fonctions=[]
+ self._etape_context=None
+ self.recorded_units={}
+ self.old_recorded_units={}
+
+
+ def getIndex(self,objet):
+ """
+ Retourne la position d'objet dans la liste self
+ """
+ return self.etapes.index(objet)
+
+ def getSdAvantDuBonType(self,etape,types_permis):
+ """
+ Retourne la liste des concepts avant etape d'un type acceptable
+ """
+ #print ('getSdAvantDuBonType ', types_permis)
+ d=self.getContexteAvant(etape)
+
+ l=[]
+ for k,v in d.items():
+ #if type(v) != types.InstanceType and not isinstance(v,object): continue
+ if not isinstance(v,object): continue
+ # On considere que seul assd indique un type quelconque pas CO
+ elif self.assd in types_permis :
+ if v.etape.sdnom != "sansnom" : l.append(k)
+ elif self.estPermis(v,types_permis):
+ if v.etape.sdnom != "sansnom" : l.append(k)
+ l.sort()
+ return l
+
+ def getSdCreeParObjet(self,classeAChercher):
+ l=[]
+ for v in list(self.sdsDict.keys()):
+ if (isinstance(self.sdsDict[v], classeAChercher)) :
+ l.append(self.sdsDict[v])
+ return l
+
+
+ def getVariables(self,etape):
+ etapeStop=etape
+ l=[]
+ for etapeTraitee in self.etapes :
+ if etapeTraitee==etapeStop:
+ break
+ if etapeTraitee.nom == 'VARIABLE' :
+ variable=etapeTraitee.getMocle('ModelVariable')
+ if variable != None :
+ l.append(variable.nom)
+ return l
+
+ def getDistributions(self,etape):
+ etapeStop=etape
+ l=[]
+ for etapeTraitee in self.etapes :
+ if etapeTraitee==etapeStop: break
+ if etapeTraitee.nom == 'DISTRIBUTION' and etapeTraitee.sd !=None : l.append(etapeTraitee.sd.nom)
+ return l
+
+
+ #def set_Copules_recalcule_etat(self):
+ # for etapeTraitee in self.etapes :
+ # if etapeTraitee.nom == 'CORRELATION' :
+ #Matrix=etapeTraitee.getChild('Matrix')
+ #if Matrix !=None :
+ # Correlation=etapeTraitee.getChild('CorrelationMatrix')
+ # if Correlation !=None : Correlation.state='arecalculer'
+ # Matrix.state='arecalculer'
+
+ #def recalculeEtatCorrelation(self):
+ # for etapeTraitee in self.etapes :
+ # if etapeTraitee.nom == 'CORRELATION' :
+ #Matrix=etapeTraitee.getChild('Matrix')
+ #if Matrix !=None :
+ # Matrix.state='arecalculer'
+ # Correlation=Matrix.getChild('CorrelationMatrix')
+ # if Correlation !=None : Correlation.state='arecalculer'
+ # Correlation.isValid()
+ # Matrix.isValid()
+ # etapeTraitee.state='arecalculer'
+ # if etapeTraitee.state=='arecalculer': etapeTraitee.isValid()
+
+ def recalculeEtatCorrelation(self):
+ for etapeTraitee in self.etapes :
+ if etapeTraitee.nom == 'CORRELATION' :
+ Correlation=etapeTraitee.getChild('CorrelationMatrix')
+ if Correlation !=None :
+ Correlation.state='arecalculer'
+ Correlation.isValid()
+ etapeTraitee.isValid()
+
+ def recalculeValiditeApresChangementGlobalJdc(self, motClef):
+ #print ("je passe dans recalculeValiditeApresChangementGlobalJdc")
try :
- liste=self.getJdcRoot().cata.dict_condition[motClef.nom]
+ liste=self.getJdcRoot().cata.dict_condition[motClef.nom]
except :
- liste=()
+ liste=()
for etapeTraitee in self.etapes :
- if etapeTraitee.nom not in liste: continue
- #self.forceRecalculBloc(etapeTraitee)
- etapeTraitee.state='arecalculer'
- etapeTraitee.deepUpdateConditionBloc()
- etapeTraitee.isValid()
-
- def activeBlocsGlobaux(self):
- for nomMotClef in self.mc_globaux :
- motClef=self.mc_globaux[nomMotClef]
- if nomMotClef in list(self.cata.dict_condition.keys()):
- liste=self.cata.dict_condition[nomMotClef]
- else : liste=()
- for etapeTraitee in self.etapes :
- if etapeTraitee.nom not in liste: continue
- etapeTraitee.state='arecalculer'
- etapeTraitee.deepUpdateConditionBlocApresCreation()
- etapeTraitee.isValid()
-
-
-
- #def forceRecalculBloc(self,objet):
- # Attention : certains objets deviennent None quand on recalcule
- # les conditions d existence des blocs
- # if objet != None: objet.state='arecalculer'
- # if hasattr(objet,'listeMcPresents'):
- # for childNom in objet.listeMcPresents():
- # child=objet.getChild(childNom)
- # if hasattr(objet,'_updateConditionBloc'):objet._updateConditionBloc()
- # self.forceRecalculBloc(child)
-
-
- def getSdAvantDuBonTypePourTypeDeBase(self,etape,type):
- """
- Retourne la liste des concepts avant etape d'1 type de base acceptable
- Attention different de la routine precedente : 1 seul type passe en parametre
- Teste sur issubclass et par sur le type permis
- """
- d=self.getContexteAvant(etape)
- l=[]
- try :
- typeverif=self.cata.__dict__[type]
- except :
- return l
- for k,v in d.items():
- if issubclass(v.__class__,typeverif):
- l.append(k)
- l.sort()
- return l
-
- def chercheListAvant(self,etape,valeur):
- d=self.getContexteAvant(etape)
- for k,v in d.items():
- if issubclass(v.__class__,LASSD):
- if k == valeur :
- return k
- # Attention pour enlever les . a la fin des pretendus reels
- if k == valeur[0:-1] :
- return v
- return None
-
- def estPermis(self,v,types_permis):
- for type_ok in types_permis:
- if type_ok in ('R','I','C','TXM') and v in self.params :
- return 1
- elif type_ok == 'R' and v.__class__.__name__ == 'reel' :
- return 1
- elif type_ok == 'I' and v.__class__.__name__ == 'entier' :
- return 1
- elif type_ok == 'C' and v.__class__.__name__ == 'complexe' :
- return 1
- elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' :
- return 1
- elif type(type_ok) != type and not isinstance(type_ok,type):
- continue
- elif v.__class__ == type_ok or issubclass(v.__class__,type_ok):
- return 1
- return 0
-
- def addEntite(self,name,pos):
- """
- Ajoute une entite :
- Si name est le nom d une commande ou un commentaire ajoute
- une etape au JDC
- Sinon remonte une erreur
- """
- self.initModif()
- self.editmode=1
- if name == "COMMENTAIRE" :
- from Extensions import commentaire
- # ajout d'un commentaire
- self.setCurrentStep()
- ind = 1
- for child in self.etapes :
- if isinstance(child,commentaire.COMMENTAIRE):
- ind = ind+1
- objet = commentaire.COMMENTAIRE('',parent=self)
- objet.nom = "_comm_"+repr(ind)
- if pos == None : pos = 0
- self.etapes.insert(pos,objet)
- self.resetContext()
- self.editmode=0
- self.activeEtapes()
- CONNECTOR.Emit(self,"add",objet)
- self.finModif()
- return objet
- elif name == "PARAMETRE":
- # ajout d'un parametre
- self.setCurrentStep()
- nom_param = '_param_'+str(len(self.params)+1)
- objet = parametre.PARAMETRE(nom=nom_param)
- if pos == None : pos = 0
- self.etapes.insert(pos,objet)
+ if etapeTraitee.nom not in liste: continue
+ #self.forceRecalculBloc(etapeTraitee)
+ etapeTraitee.state='arecalculer'
+ etapeTraitee.deepUpdateConditionBloc()
+ etapeTraitee.isValid()
+ #print (etapeTraitee.nom ,etapeTraitee.isValid())
+
+ def activeBlocsGlobaux(self):
+ for nomMotClef in self.mc_globaux :
+ motClef=self.mc_globaux[nomMotClef]
+ if nomMotClef in list(self.cata.dict_condition.keys()):
+ liste=self.cata.dict_condition[nomMotClef]
+ else : liste=()
+ for etapeTraitee in self.etapes :
+ if etapeTraitee.nom not in liste: continue
+ etapeTraitee.state='arecalculer'
+ etapeTraitee.deepUpdateConditionBlocApresCreation()
+ etapeTraitee.isValid()
+
+
+
+ #def forceRecalculBloc(self,objet):
+ # Attention : certains objets deviennent None quand on recalcule
+ # les conditions d existence des blocs
+ # if objet != None: objet.state='arecalculer'
+ # if hasattr(objet,'listeMcPresents'):
+ # for childNom in objet.listeMcPresents():
+ # child=objet.getChild(childNom)
+ # if hasattr(objet,'_updateConditionBloc'):objet._updateConditionBloc()
+ # self.forceRecalculBloc(child)
+
+
+ def getSdAvantDuBonTypePourTypeDeBase(self,etape,type):
+ """
+ Retourne la liste des concepts avant etape d'1 type de base acceptable
+ Attention different de la routine precedente : 1 seul type passe en parametre
+ Teste sur issubclass et par sur le type permis
+ """
+ d=self.getContexteAvant(etape)
+ l=[]
+ try :
+ typeverif=self.cata.__dict__[type]
+ except :
+ return l
+ for k,v in d.items():
+ if issubclass(v.__class__,typeverif):
+ l.append(k)
+ l.sort()
+ return l
+
+ def chercheListAvant(self,etape,valeur):
+ d=self.getContexteAvant(etape)
+ for k,v in d.items():
+ if issubclass(v.__class__,LASSD):
+ if k == valeur :
+ return k
+ # Attention pour enlever les . a la fin des pretendus reels
+ if k == valeur[0:-1] :
+ return v
+ return None
+
+ def estPermis(self,v,types_permis):
+ for type_ok in types_permis:
+ if type_ok in ('R','I','C','TXM') and v in self.params :
+ return 1
+ elif type_ok == 'R' and v.__class__.__name__ == 'reel' :
+ return 1
+ elif type_ok == 'I' and v.__class__.__name__ == 'entier' :
+ return 1
+ elif type_ok == 'C' and v.__class__.__name__ == 'complexe' :
+ return 1
+ elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' :
+ return 1
+ elif type(type_ok) != type and not isinstance(type_ok,type):
+ continue
+ elif v.__class__ == type_ok or issubclass(v.__class__,type_ok):
+ return 1
+ return 0
+
+ def addEntite(self,name,pos):
+ """
+ Ajoute une entite :
+ Si name est le nom d une commande ou un commentaire ajoute
+ une etape au JDC
+ Sinon remonte une erreur
+ """
+ self.initModif()
+ self.editmode=1
+ if name == "COMMENTAIRE" :
+ from Extensions import commentaire
+ # ajout d'un commentaire
+ self.setCurrentStep()
+ ind = 1
+ for child in self.etapes :
+ if isinstance(child,commentaire.COMMENTAIRE):
+ ind = ind+1
+ objet = commentaire.COMMENTAIRE('',parent=self)
+ objet.nom = "_comm_"+repr(ind)
+ if pos == None : pos = 0
+ self.etapes.insert(pos,objet)
+ self.resetContext()
+ self.editmode=0
+ self.activeEtapes()
+ CONNECTOR.Emit(self,"add",objet)
+ self.finModif()
+ return objet
+ elif name == "PARAMETRE":
+ # ajout d'un parametre
+ self.setCurrentStep()
+ nom_param = '_param_'+str(len(self.params)+1)
+ objet = parametre.PARAMETRE(nom=nom_param)
+ if pos == None : pos = 0
+ self.etapes.insert(pos,objet)
+ self.resetContext()
+ self.editmode=0
+ self.activeEtapes()
+ CONNECTOR.Emit(self,"add",objet)
+ self.finModif()
+ return objet
+ elif name == "PARAMETRE_EVAL":
+ # ajout d'un parametre EVAL
+ self.setCurrentStep()
+ nom_param = '_param_'+str(len(self.params)+1)
+ objet = parametre_eval.PARAMETRE_EVAL(nom=nom_param)
+ if pos == None : pos = 0
+ self.etapes.insert(pos,objet)
+ self.resetContext()
+ self.editmode=0
+ self.activeEtapes()
+ CONNECTOR.Emit(self,"add",objet)
+ self.finModif()
+ return objet
+ elif not( isinstance(name, basestring)):
+ #elif type(name)==types.InstanceType:
+ #elif isinstance(name,object):
+ # on est dans le cas ou on veut ajouter une commande deja
+ # existante (par copie donc)
+ # on est donc necessairement en mode editeur ...
+ objet = name
+ # Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
+ from Extensions import commentaire
+ if not( isinstance (objet,commentaire.COMMENTAIRE)):
+ objet.reparent(self)
+ self.setCurrentStep()
+ if isinstance(objet,ETAPE):
+ if objet.nom_niveau_definition == 'JDC':
+ # l'objet depend directement du JDC
+ objet.niveau = self
+ else:
+ # l'etape depend d'un niveau et non directement du JDC :
+ # il faut l'enregistrer dans le niveau de parent
+ objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet)
+ objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition]
+ self.etapes.insert(pos,objet)
+ self.resetContext()
+ # il faut verifier que les concepts utilises par objet existent bien
+ # a ce niveau d'arborescence
+ objet.verifExistenceSd()
+ objet.updateMcGlobal()
+ self.editmode=0
+ self.activeEtapes()
+ CONNECTOR.Emit(self,"add",objet)
+ self.finModif()
+ return objet
+ else :
+ # On veut ajouter une nouvelle commande
+ try:
+ self.setCurrentStep()
+ cmd=self.getCmd(name)
+ # L'appel a make_objet n'a pas pour effet d'enregistrer l'etape
+ # aupres du step courant car editmode vaut 1
+ # Par contre elle a le bon parent grace a setCurrentStep
+ e=cmd.make_objet()
+ if pos == None : pos = 0
+ self.etapes.insert(pos,e)
+ self.resetCurrentStep()
+ self.resetContext()
+ self.editmode=0
+ self.activeEtapes()
+ self.enregistreEtapePyxb(e,pos)
+ # PN fait ds self.activeEtapes
+ CONNECTOR.Emit(self,"add",e)
+ self.finModif()
+ return e
+ except AsException as e:
+ traceback.print_exc()
+ self.resetCurrentStep()
+ self.editmode=0
+ raise AsException(tr("Impossible d'ajouter la commande")+name + '\n')
+ except:
+ #else :
+ traceback.print_exc()
+ self.resetCurrentStep()
+ self.editmode=0
+ raise AsException(tr("Impossible d ajouter la commande")+name)
+
+ def close(self):
+ #print "JDC.close",self
+ for etape in self.etapes:
+ if hasattr(etape,"close"):etape.close()
+ CONNECTOR.Emit(self,"close")
+
+ def setCurrentStep(self):
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(self)
+
+ def resetCurrentStep(self):
+ CONTEXT.unsetCurrentStep()
+
+ def listeMcPresents(self):
+ return []
+
+ def getSdAvantEtape(self,nom_sd,etape):
+ return self.getContexteAvant(etape).get(nom_sd,None)
+
+ def getSdApresEtapeAvecDetruire(self,nom_sd,sd,etape,avec='non'):
+ """
+ Cette methode retourne la SD sd de nom nom_sd qui est eventuellement
+ definie apres etape en tenant compte des concepts detruits
+ Si avec vaut 'non' exclut etape de la recherche
+ """
+ #print "JDC.getSdApresEtapeAvecDetruire",nom_sd,sd
+ ietap=self.etapes.index(etape)
+ if avec == 'non':ietap=ietap+1
+ d={nom_sd:sd}
+ for e in self.etapes[ietap:]:
+ if e.isActif():
+ e.updateContext(d)
+ autre_sd=d.get(nom_sd,None)
+ if autre_sd is None:
+ # Le concept a ete detruit. On interrompt la recherche car il n'y a
+ # pas eu de redefinition du concept (il n'y a pas de conflit potentiel).
+ return None
+ if autre_sd is not sd :
+ # L'etape produit un concept different de meme nom. La situation n'est
+ # pas saine (sauf peut etre si reuse ???)
+ if hasattr(e,'reuse') and e.reuse == autre_sd:
+ # Le concept etant reutilise, on interrompt la recherche.
+ # On considere qu'il n'y a pas de nouveau concept defini
+ # meme si dans les etapes suivantes le concept est detruit
+ # et un concept de meme nom cree.
+ # AVERIFIER : avec reuse le concept devrait etre le meme
+ # le passage par ici est tres improbable
+ return None
+ else:
+ # Le concept est produit par l'etape (Il y a conflit potentiel).
+ # Le concept est redefini par une etape posterieure.
+ return autre_sd
+ # Pas de destruction du concept ni de redefinition. On retourne le
+ # concept initial
+ return sd
+
+ def getSdApresEtape(self,nom_sd,etape,avec='non'):
+ """
+ Cette methode retourne la SD de nom nom_sd qui est eventuellement
+ definie apres etape
+ Si avec vaut 'non' exclut etape de la recherche
+ """
+ ietap=self.etapes.index(etape)
+ if avec == 'non':ietap=ietap+1
+ for e in self.etapes[ietap:]:
+ sd=e.getSdprods(nom_sd)
+ if sd:
+ if hasattr(e,'reuse'):
+ if e.reuse != sd:
+ return sd
+ return None
+
+ def getSdAutourEtape(self,nom_sd,etape,avec='non'):
+ """
+ Fonction: retourne la SD de nom nom_sd qui est eventuellement
+ definie avant ou apres etape
+ Permet de verifier si un concept de meme nom existe dans le perimetre
+ d'une etape
+ Si avec vaut 'non' exclut etape de la recherche
+ """
+ sd=self.getSdAvantEtape(nom_sd,etape)
+ if sd:return sd
+ sd=self.getSdApresEtape(nom_sd,etape,avec)
+ if sd:return sd
+ # Pour tenir compte des UserASSD # et des UserASSDMultiple a affiner
+ if nom_sd in self.sdsDict.keys() :
+ sd=self.sdsDict[nom_sd]
+ return sd
+
+ def getContexte_apres(self,etape):
+ """
+ Retourne le dictionnaire des concepts connus apres etape
+ On tient compte des commandes qui modifient le contexte
+ comme DETRUIRE ou les macros
+ Si etape == None, on retourne le contexte en fin de JDC
+ """
+ if not etape: return self.getContexteAvant(etape)
+
+ d=self.getContexteAvant(etape)
+ if etape.isActif():etape.updateContext(d)
+ self.index_etape_courante=self.index_etape_courante+1
+ return d
+
+ def activeEtapes(self):
+ """
+ """
+ for etape in self.etapes:
+ etape.active()
+
+ def deplaceEntite(self,indexNoeudACopier,indexNoeudOuColler,pos):
+ """
+ Pour le cut
+ """
+ if indexNoeudACopier==indexNoeudOuColler:return
+ etapeACopier=self.etapes[indexNoeudACopier]
+ try :
+ sd=self.etapes[indexNoeudACopier].sd
+ except :
+ sd=None
+ if pos=='before' and indexNoeudOuColler==0 :
+ self.etapes2=[etapeACopier,]+self.etapes[0:indexNoeudACopier]+self.etapes[indexNoeudACopier+1:]
+ elif indexNoeudACopier < indexNoeudOuColler :
+ self.etapes2=self.etapes[0:indexNoeudACopier]+self.etapes[indexNoeudACopier+1:indexNoeudOuColler+1]+[etapeACopier,]+self.etapes[indexNoeudOuColler+1:]
+ else:
+ self.etapes2=self.etapes[0:indexNoeudOuColler+1]+[etapeACopier,]+self.etapes[indexNoeudOuColler+1:indexNoeudACopier]+self.etapes[indexNoeudACopier+1:]
+ self.etapes=self.etapes2
+ if indexNoeudACopier < indexNoeudOuColler :
+ self.deleteConceptEntreEtapes(indexNoeudACopier,indexNoeudOuColler,sd)
self.resetContext()
- self.editmode=0
+ for e in self.etapes :
+ e.state = 'modified'
+ self.controlContextApres(None)
+ return 1
+
+
+ def suppEntite(self,etape) :
+ """
+ Cette methode a pour fonction de supprimer une etape dans
+ un jeu de commandes
+ Retourne 1 si la suppression a pu etre effectuee,
+ Retourne 0 dans le cas contraire
+ """
+ #PN correction de bugs
+ #print ('suppEntite', etape.nom)
+ if etape not in self.etapes: return 0
+
+ self.initModif()
+ index_etape=self.etapes.index(etape)
+
+ #etape.delObjPyxb()
+ self.etapes.remove(etape)
+
+ if etape.niveau is not self:
+ # Dans ce cas l'etape est enregistree dans un niveau
+ # Il faut la desenregistrer
+ etape.niveau.unregister(etape)
+
+ etape.supprimeSdProds()
+ etape.supprimeUserAssd()
+ etape.close()
+ etape.supprime()
self.activeEtapes()
- CONNECTOR.Emit(self,"add",objet)
- self.finModif()
- return objet
- elif name == "PARAMETRE_EVAL":
- # ajout d'un parametre EVAL
- self.setCurrentStep()
- nom_param = '_param_'+str(len(self.params)+1)
- objet = parametre_eval.PARAMETRE_EVAL(nom=nom_param)
- if pos == None : pos = 0
- self.etapes.insert(pos,objet)
+
+ # Apres suppression de l'etape il faut controler que les etapes
+ # suivantes ne produisent pas des concepts DETRUITS dans op_init de etape
+ if index_etape > 0:
+ index_etape=index_etape-1
+ etape=self.etapes[index_etape]
+ else:
+ etape=None
+ self.controlContextApres(etape)
+
self.resetContext()
- self.editmode=0
- self.activeEtapes()
- CONNECTOR.Emit(self,"add",objet)
+ CONNECTOR.Emit(self,"supp",etape)
self.finModif()
- return objet
- elif not( isinstance(name, basestring)):
- #elif type(name)==types.InstanceType:
- #elif isinstance(name,object):
- # on est dans le cas ou on veut ajouter une commande deja
- # existante (par copie donc)
- # on est donc necessairement en mode editeur ...
- objet = name
- # Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
- from Extensions import commentaire
- if not( isinstance (objet,commentaire.COMMENTAIRE)):
- objet.reparent(self)
- self.setCurrentStep()
- if isinstance(objet,ETAPE):
- if objet.nom_niveau_definition == 'JDC':
- # l'objet depend directement du JDC
- objet.niveau = self
- else:
- # l'etape depend d'un niveau et non directement du JDC :
- # il faut l'enregistrer dans le niveau de parent
- objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet)
- objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition]
- self.etapes.insert(pos,objet)
- self.resetContext()
- # il faut verifier que les concepts utilises par objet existent bien
- # a ce niveau d'arborescence
- objet.verifExistenceSd()
- objet.updateMcGlobal()
- self.editmode=0
+ return 1
+
+ def controlContextApres(self,etape):
+ """
+ Cette methode verifie que les etapes apres l'etape etape
+ ont bien des concepts produits acceptables (pas de conflit de
+ nom principalement)
+ Si des concepts produits ne sont pas acceptables ils sont supprimes.
+ Effectue les verifications sur les etapes du jdc mais aussi sur les
+ jdc parents s'ils existent.
+ """
+ #print ("controlContextApres",self,etape)
+ #Regularise les etapes du jdc apres l'etape etape
+ self.controlJdcContextApres(etape)
+
+ def controlJdcContextApres(self,etape):
+ """
+ Methode semblable a controlContextApres mais ne travaille
+ que sur les etapes et sous etapes du jdc
+ """
+ #print ("controlJdcContextApres",self,etape)
+ if etape is None:
+ # on demarre de la premiere etape
+ index_etape=0
+ else:
+ index_etape=self.etapes.index(etape)+1
+
+ try:
+ etape=self.etapes[index_etape]
+ except:
+ #derniere etape du jdc : rien a faire
+ return
+
+ context=self.getContexteAvant(etape)
+ for e in self.etapes[index_etape:]:
+ e.controlSdprods(context)
+ e.updateContext(context)
+
+ def analyse(self):
+ self.compile()
+ self.execCompile()
+ if not self.cr.estvide():return
self.activeEtapes()
- CONNECTOR.Emit(self,"add",objet)
+ if self.mc_globaux != {} : self.activeBlocsGlobaux()
+
+ def analyseXML(self):
+ #print ('analyseXML')
+ #print (self.procedure)
+ self.setCurrentContext()
+ self.analyseFromXML()
+
+ def registerParametre(self,param):
+ """
+ Cette methode sert a ajouter un parametre dans la liste des parametres
+ """
+ self.params.append(param)
+
+ def registerFonction(self,fonction):
+ """
+ Cette methode sert a ajouter une fonction dans la liste des fonctions
+ """
+ self.fonctions.append(fonction)
+
+ def deleteParam(self,param):
+ """
+ Supprime le parametre param de la liste des parametres
+ et du contexte gobal
+ """
+ if param in self.params : self.params.remove(param)
+ if param.nom in self.g_context : del self.g_context[param.nom]
+
+ def getParametresFonctionsAvantEtape(self,etape):
+ """
+ Retourne deux elements :
+ - une liste contenant les noms des parametres (constantes ou EVAL)
+ definis avant etape
+ - une liste contenant les formules definies avant etape
+ """
+ l_constantes = []
+ l_fonctions = []
+ # on recupere le contexte avant etape
+ # on ne peut mettre dans les deux listes que des elements de ce contexte
+ d=self.getContexteAvant(etape)
+ # construction de l_constantes
+ for param in self.params:
+ nom = param.nom
+ if not nom : continue
+ if nom in d: l_constantes.append(nom)
+ # construction de l_fonctions
+ for form in self.fonctions:
+ nom = form.nom
+ if not nom : continue
+ if nom in d: l_fonctions.append(form.getFormule())
+
+ # on ajoute les concepts produits par DEFI_VALEUR
+ # XXX On pourrait peut etre faire plutot le test sur le type
+ # de concept : entier, reel, complexe, etc.
+ for k,v in d.items():
+ if hasattr(v,'etape') and v.etape.nom in ('DEFI_VALEUR',):
+ l_constantes.append(k)
+
+ # on retourne les deux listes
+ return l_constantes,l_fonctions
+
+ def getNbEtapesAvant(self,niveau):
+ """
+ Retourne le nombre d etapes avant le debut de niveau
+ """
+ nb=0
+ for niv in self.etapes_niveaux:
+ if niv == niveau:break
+ nb=nb+len(niv.etapes)
+ return nb
+
+ def initModif(self):
+ """
+ Methode appelee au moment ou une modification va etre faite afin de
+ declencher d'eventuels traitements pre-modification
+ """
+ #print "initModif",self
+ self.state = 'modified'
+
+ def finModif(self):
+ #print "finModif",self
+ CONNECTOR.Emit(self,"valid")
+ self.isValid()
+ pass
+
+ def deepUpdateConditionBloc(self,motClef=None):
+ # pour le moment, on ne fait rien
+ self.getJdcRoot().recalculeValiditeApresChangementGlobalJdc(motClef)
+ #raise EficasException(tr("Pas implemente"))
+
+ def updateConditionBloc(self):
+ # pour le moment, on ne fait rien
+ raise EficasException(tr("Pas implemente"))
+
+ def getListeMcInconnus(self):
+ """
+ Retourne une liste contenant les mots-cles inconnus a la relecture du JDC
+ """
+ # cette liste a le format suivant : [etape,(bloc,mcfact,...),nom_mc,valeur_mc]
+ l_mc = []
+ for etape in self.etapes :
+ if etape.isActif() :
+ if not etape.isValid() :
+ l = etape.getListeMcInconnus()
+ if l : l_mc.extend(l)
+ return l_mc
+
+ def getGenealogiePrecise(self):
+ return []
+
+ def getGenealogie(self):
+ """
+ Retourne la liste des noms des ascendants de l'objet self
+ jusqu'a la premiere ETAPE parent.
+ """
+ return []
+
+ def getListeCmd(self):
+ """
+ Retourne la liste des commandes du catalogue
+ """
+ return self.niveau.definition.getListeCmd()
+
+ def getGroups(self):
+ """
+ Retourne la liste des groupes
+ """
+ return self.niveau.definition.liste_groupes,self.niveau.definition.dict_groupes
+
+ def setEtapeContext(self,etape):
+ """
+ Positionne l'etape qui sera utilisee dans NommerSdProd pour
+ decider si le concept passe pourra etre nomme
+ """
+ self._etape_context=etape
+
+ def resetContext(self):
+ """
+ Cette methode reinitialise le contexte glissant pour pouvoir
+ tenir compte des modifications de l'utilisateur : craation
+ de commandes, nommage de concepts, etc.
+ """
+ #print "resetContext",self,self.nom
+ self.currentContext={}
+ self.index_etape_courante=0
+ ind={}
+ for i,etape in enumerate(self.etapes):
+ ind[etape]=i
+ self.index_etapes=ind
+
+ # for etape in self.etapes:
+ # etape.resetContext()
+
+ def delSdprod(self,sd):
+ """
+ Supprime la SD sd de la liste des sd et des dictionnaires de contexte
+ """
+ #print "delSdprod",self,sd
+ #print "delSdprod",self.sds
+ #print "delSdprod",self.g_context
+ #print "delSdprod",self.sdsDict
+ #if sd in self.sds : self.sds.remove(sd)
+ if sd.nom in self.g_context : del self.g_context[sd.nom]
+ if sd.nom in self.sdsDict : del self.sdsDict[sd.nom]
+
+ def delParam(self,param):
+ """
+ Supprime le parametre param de la liste des paramatres
+ et du contexte gobal
+ """
+ if param in self.params : self.params.remove(param)
+ if param.nom in self.g_context : del self.g_context[param.nom]
+
+ def delFonction(self,fonction):
+ """
+ Supprime la fonction fonction de la liste des fonctions
+ et du contexte gobal
+ """
+ if fonction in self.fonctions : self.fonctions.remove(fonction)
+ if fonction.nom in self.g_context: del self.g_context[fonction.nom]
+
+ def appendSdProd(self,sd):
+ """
+ Ajoute la SD sd a la liste des sd en verifiant au prealable qu'une SD de
+ meme nom n'existe pas deja
+ """
+ if sd == None or sd.nom == None:return
+ o=self.sdsDict.get(sd.nom,None)
+ if isinstance(o,ASSD):
+ raise AsException(tr("Nom de concept deja defini "+ sd.nom))
+ self.sdsDict[sd.nom]=sd
+ self.g_context[sd.nom] = sd
+ #if sd not in self.sds : self.sds.append(sd)
+
+ def appendParam(self,param):
+ """
+ Ajoute le parametre param a la liste des params
+ et au contexte global
+ """
+ # il faudrait verifier qu'un parametre de meme nom n'existe pas deja !!!
+ if param not in self.params : self.params.append(param)
+ self.g_context[param.nom]=param
+
+ def appendFonction(self,fonction):
+ """
+ Ajoute la fonction fonction a la liste des fonctions
+ et au contexte global
+ """
+ # il faudrait verifier qu'une fonction de meme nom n'existe pas deja !!!
+ if fonction not in self.fonctions : self.fonctions.append(fonction)
+ self.g_context[fonction.nom]=fonction
+
+ def deleteConcept(self,sd):
+ """
+ Inputs :
+ - sd=concept detruit
+ Fonction :
+ Mettre a jour les etapes du JDC suite a la disparition du
+ concept sd
+ Seuls les mots cles simples MCSIMP font un traitement autre
+ que de transmettre aux fils
+ """
+ for etape in self.etapes :
+ etape.deleteConcept(sd)
+ #PN PN PN pour les matrices ????
+ #self.getVariables_avant(etape)
+
+ def replaceConceptAfterEtape(self,etape,old_sd,sd):
+ """
+ Met a jour les etapes du JDC qui sont apres etape en fonction
+ du remplacement du concept sd
+ """
+ index = self.etapes.index(etape)+1
+ if index == len(self.etapes) :
+ return # etape est la derniere etape du jdc ...on ne fait rien !
+ for child in self.etapes[index:]:
+ child.replaceConcept(old_sd,sd)
+
+ def updateConceptAfterEtape(self,etape,sd):
+ """
+ Met a jour les etapes du JDC qui sont apres etape en fonction
+ de la modification (principalement nommage) du concept sd
+ """
+ if etape is None:
+ #On traite toutes les etapes
+ index=0
+ else:
+ index = self.etapes.index(etape)+1
+ if index == len(self.etapes) :
+ return # etape est la derniere etape du jdc ...on ne fait rien !
+ for child in self.etapes[index:]:
+ child.updateConcept(sd)
+
+ def dumpState(self):
+ #print(("JDC.state: ",self.state))
+ for etape in self.etapes :
+ print((etape.nom+".state: ",etape.state))
+
+ def changeUnit(self,unit,etape,old_unit):
+ #print "changeUnit",unit,etape,old_unit
+ #print id(self.recorded_units),self.recorded_units
+ #if self.recorded_units.has_key(old_unit):del self.recorded_units[old_unit]
+ self.recordUnit(unit,etape)
+
+ def recordUnit(self,unit,etape):
+ """Enregistre les unites logiques incluses et les infos relatives a l'etape"""
+ #print "recordUnit",unit,etape
+ if unit is None:
+ # Cas de POURSUITE
+ self.recorded_units[None]=(etape.fichier_ini ,etape.fichier_text,etape.recorded_units)
+ else:
+ self.recorded_units[unit]=(etape.fichier_ini ,etape.fichier_text,etape.recorded_units)
+ #print id(self.recorded_units),self.recorded_units
+ #print self.recorded_units.get(None,(None,"",{}))[2]
+ #print self.recorded_units.get(None,(None,"",{}))[2].get(None,(None,"",{}))
+
+ def changeFichier(self,fichier):
self.finModif()
- return objet
- else :
- # On veut ajouter une nouvelle commande
- try:
- self.setCurrentStep()
- cmd=self.getCmd(name)
- # L'appel a make_objet n'a pas pour effet d'enregistrer l'etape
- # aupres du step courant car editmode vaut 1
- # Par contre elle a le bon parent grace a setCurrentStep
- e=cmd.make_objet()
- if pos == None : pos = 0
- self.etapes.insert(pos,e)
- self.resetCurrentStep()
- self.resetContext()
- self.editmode=0
- self.activeEtapes()
- self.enregistreEtapePyxb(e,pos)
- # PN fait ds self.activeEtapes
- CONNECTOR.Emit(self,"add",e)
- self.finModif()
- return e
- except AsException as e:
- traceback.print_exc()
- self.resetCurrentStep()
- self.editmode=0
- raise AsException(tr("Impossible d'ajouter la commande")+name + '\n')
+
+ def evalInContext(self,valeur,etape):
+ """ Tente d'evaluer valeur dans le contexte courant de etape
+ Retourne le parametre valeur inchange si l'evaluation est impossible
+ """
+ #contexte initial du jdc
+ context=self.condition_context.copy()
+ #contexte courant des concepts. Il contient les parametres
+ context.update(self.getContexteAvant(etape))
+ try :
+ objet = eval(valeur,context)
+ return objet
except:
- #else :
- traceback.print_exc()
- self.resetCurrentStep()
- self.editmode=0
- raise AsException(tr("Impossible d ajouter la commande")+name)
-
- def close(self):
- #print "JDC.close",self
- for etape in self.etapes:
- if hasattr(etape,"close"):etape.close()
- CONNECTOR.Emit(self,"close")
-
- def setCurrentStep(self):
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(self)
-
- def resetCurrentStep(self):
- CONTEXT.unsetCurrentStep()
-
- def listeMcPresents(self):
- return []
-
- def getSdAvantEtape(self,nom_sd,etape):
- return self.getContexteAvant(etape).get(nom_sd,None)
-
- def getSdApresEtapeAvecDetruire(self,nom_sd,sd,etape,avec='non'):
- """
- Cette methode retourne la SD sd de nom nom_sd qui est eventuellement
- definie apres etape en tenant compte des concepts detruits
- Si avec vaut 'non' exclut etape de la recherche
- """
- #print "JDC.getSdApresEtapeAvecDetruire",nom_sd,sd
- ietap=self.etapes.index(etape)
- if avec == 'non':ietap=ietap+1
- d={nom_sd:sd}
- for e in self.etapes[ietap:]:
- if e.isActif():
- e.updateContext(d)
- autre_sd=d.get(nom_sd,None)
- if autre_sd is None:
- # Le concept a ete detruit. On interrompt la recherche car il n'y a
- # pas eu de redefinition du concept (il n'y a pas de conflit potentiel).
- return None
- if autre_sd is not sd :
- # L'etape produit un concept different de meme nom. La situation n'est
- # pas saine (sauf peut etre si reuse ???)
- if hasattr(e,'reuse') and e.reuse == autre_sd:
- # Le concept etant reutilise, on interrompt la recherche.
- # On considere qu'il n'y a pas de nouveau concept defini
- # meme si dans les etapes suivantes le concept est detruit
- # et un concept de meme nom cree.
- # AVERIFIER : avec reuse le concept devrait etre le meme
- # le passage par ici est tres improbable
- return None
- else:
- # Le concept est produit par l'etape (Il y a conflit potentiel).
- # Le concept est redefini par une etape posterieure.
- return autre_sd
- # Pas de destruction du concept ni de redefinition. On retourne le
- # concept initial
- return sd
-
- def getSdApresEtape(self,nom_sd,etape,avec='non'):
- """
- Cette methode retourne la SD de nom nom_sd qui est eventuellement
- definie apres etape
- Si avec vaut 'non' exclut etape de la recherche
- """
- ietap=self.etapes.index(etape)
- if avec == 'non':ietap=ietap+1
- for e in self.etapes[ietap:]:
- sd=e.getSdprods(nom_sd)
- if sd:
- if hasattr(e,'reuse'):
- if e.reuse != sd:
- return sd
- return None
-
- def getSdAutourEtape(self,nom_sd,etape,avec='non'):
- """
- Fonction: retourne la SD de nom nom_sd qui est eventuellement
- definie avant ou apres etape
- Permet de verifier si un concept de meme nom existe dans le perimetre
- d'une etape
- Si avec vaut 'non' exclut etape de la recherche
- """
- sd=self.getSdAvantEtape(nom_sd,etape)
- if sd:return sd
- sd=self.getSdApresEtape(nom_sd,etape,avec)
- if sd:return sd
- # Pour tenir compte des UserASSD
- if nom_sd in self.sdsDict.keys() :
- sd=self.sdsDict[nom_sd]
- return sd
-
- def getContexte_apres(self,etape):
- """
- Retourne le dictionnaire des concepts connus apres etape
- On tient compte des commandes qui modifient le contexte
- comme DETRUIRE ou les macros
- Si etape == None, on retourne le contexte en fin de JDC
- """
- if not etape: return self.getContexteAvant(etape)
-
- d=self.getContexteAvant(etape)
- if etape.isActif():etape.updateContext(d)
- self.index_etape_courante=self.index_etape_courante+1
- return d
-
- def activeEtapes(self):
- """
- """
- for etape in self.etapes:
- etape.active()
-
- def deplaceEntite(self,indexNoeudACopier,indexNoeudOuColler,pos):
- """
- Pour le cut
- """
- if indexNoeudACopier==indexNoeudOuColler:return
- etapeACopier=self.etapes[indexNoeudACopier]
- try :
- sd=self.etapes[indexNoeudACopier].sd
- except :
- sd=None
- if pos=='before' and indexNoeudOuColler==0 :
- self.etapes2=[etapeACopier,]+self.etapes[0:indexNoeudACopier]+self.etapes[indexNoeudACopier+1:]
- elif indexNoeudACopier < indexNoeudOuColler :
- self.etapes2=self.etapes[0:indexNoeudACopier]+self.etapes[indexNoeudACopier+1:indexNoeudOuColler+1]+[etapeACopier,]+self.etapes[indexNoeudOuColler+1:]
- else:
- self.etapes2=self.etapes[0:indexNoeudOuColler+1]+[etapeACopier,]+self.etapes[indexNoeudOuColler+1:indexNoeudACopier]+self.etapes[indexNoeudACopier+1:]
- self.etapes=self.etapes2
- if indexNoeudACopier < indexNoeudOuColler :
- self.deleteConceptEntreEtapes(indexNoeudACopier,indexNoeudOuColler,sd)
- self.resetContext()
- for e in self.etapes :
- e.state = 'modified'
- self.controlContextApres(None)
- return 1
-
-
- def suppEntite(self,etape) :
- """
- Cette methode a pour fonction de supprimer une etape dans
- un jeu de commandes
- Retourne 1 si la suppression a pu etre effectuee,
- Retourne 0 dans le cas contraire
- """
- #PN correction de bugs
- print ('suppEntite', etape.nom)
- if etape not in self.etapes: return 0
-
- self.initModif()
- index_etape=self.etapes.index(etape)
-
- #etape.delObjPyxb()
- self.etapes.remove(etape)
-
- if etape.niveau is not self:
- # Dans ce cas l'etape est enregistree dans un niveau
- # Il faut la desenregistrer
- etape.niveau.unregister(etape)
-
- etape.supprimeSdProds()
- etape.close()
- etape.supprime()
- self.activeEtapes()
-
- # Apres suppression de l'etape il faut controler que les etapes
- # suivantes ne produisent pas des concepts DETRUITS dans op_init de etape
- if index_etape > 0:
- index_etape=index_etape-1
- etape=self.etapes[index_etape]
- else:
- etape=None
- self.controlContextApres(etape)
-
- self.resetContext()
- CONNECTOR.Emit(self,"supp",etape)
- self.finModif()
- return 1
-
- def controlContextApres(self,etape):
- """
- Cette methode verifie que les etapes apres l'etape etape
- ont bien des concepts produits acceptables (pas de conflit de
- nom principalement)
- Si des concepts produits ne sont pas acceptables ils sont supprimes.
- Effectue les verifications sur les etapes du jdc mais aussi sur les
- jdc parents s'ils existent.
- """
- print ("controlContextApres",self,etape)
- #Regularise les etapes du jdc apres l'etape etape
- self.controlJdcContextApres(etape)
-
- def controlJdcContextApres(self,etape):
- """
- Methode semblable a controlContextApres mais ne travaille
- que sur les etapes et sous etapes du jdc
- """
- print ("controlJdcContextApres",self,etape)
- if etape is None:
- # on demarre de la premiere etape
- index_etape=0
- else:
- index_etape=self.etapes.index(etape)+1
-
- try:
- etape=self.etapes[index_etape]
- except:
- #derniere etape du jdc : rien a faire
- return
-
- context=self.getContexteAvant(etape)
- for e in self.etapes[index_etape:]:
- e.controlSdprods(context)
- e.updateContext(context)
-
- def analyse(self):
- self.compile()
- self.execCompile()
- if not self.cr.estvide():return
- self.activeEtapes()
- if self.mc_globaux != {} : self.activeBlocsGlobaux()
-
- def analyseXML(self):
- print ('analyseXML')
- print (self.procedure)
- self.setCurrentContext()
- self.analyseFromXML()
-
- def registerParametre(self,param):
- """
- Cette methode sert a ajouter un parametre dans la liste des parametres
- """
- self.params.append(param)
-
- def registerFonction(self,fonction):
- """
- Cette methode sert a ajouter une fonction dans la liste des fonctions
- """
- self.fonctions.append(fonction)
-
- def deleteParam(self,param):
- """
- Supprime le parametre param de la liste des parametres
- et du contexte gobal
- """
- if param in self.params : self.params.remove(param)
- if param.nom in self.g_context : del self.g_context[param.nom]
-
- def getParametresFonctionsAvantEtape(self,etape):
- """
- Retourne deux elements :
- - une liste contenant les noms des parametres (constantes ou EVAL)
- definis avant etape
- - une liste contenant les formules definies avant etape
- """
- l_constantes = []
- l_fonctions = []
- # on recupere le contexte avant etape
- # on ne peut mettre dans les deux listes que des elements de ce contexte
- d=self.getContexteAvant(etape)
- # construction de l_constantes
- for param in self.params:
- nom = param.nom
- if not nom : continue
- if nom in d: l_constantes.append(nom)
- # construction de l_fonctions
- for form in self.fonctions:
- nom = form.nom
- if not nom : continue
- if nom in d: l_fonctions.append(form.getFormule())
-
- # on ajoute les concepts produits par DEFI_VALEUR
- # XXX On pourrait peut etre faire plutot le test sur le type
- # de concept : entier, reel, complexe, etc.
- for k,v in d.items():
- if hasattr(v,'etape') and v.etape.nom in ('DEFI_VALEUR',):
- l_constantes.append(k)
-
- # on retourne les deux listes
- return l_constantes,l_fonctions
-
- def getNbEtapesAvant(self,niveau):
- """
- Retourne le nombre d etapes avant le debut de niveau
- """
- nb=0
- for niv in self.etapes_niveaux:
- if niv == niveau:break
- nb=nb+len(niv.etapes)
- return nb
-
- def initModif(self):
- """
- Methode appelee au moment ou une modification va etre faite afin de
- declencher d'eventuels traitements pre-modification
- """
- #print "initModif",self
- self.state = 'modified'
-
- def finModif(self):
- #print "finModif",self
- CONNECTOR.Emit(self,"valid")
- self.isValid()
- pass
-
- def deepUpdateConditionBloc(self,motClef=None):
- # pour le moment, on ne fait rien
- self.getJdcRoot().recalculeValiditeApresChangementGlobalJdc(motClef)
- #raise EficasException(tr("Pas implemente"))
-
- def updateConditionBloc(self):
- # pour le moment, on ne fait rien
- raise EficasException(tr("Pas implemente"))
-
- def getListeMcInconnus(self):
- """
- Retourne une liste contenant les mots-cles inconnus a la relecture du JDC
- """
- # cette liste a le format suivant : [etape,(bloc,mcfact,...),nom_mc,valeur_mc]
- l_mc = []
- for etape in self.etapes :
- if etape.isActif() :
- if not etape.isValid() :
- l = etape.getListeMcInconnus()
- if l : l_mc.extend(l)
- return l_mc
-
- def getGenealogiePrecise(self):
- return []
-
- def getGenealogie(self):
- """
- Retourne la liste des noms des ascendants de l'objet self
- jusqu'a la premiere ETAPE parent.
- """
- return []
-
- def getListeCmd(self):
- """
- Retourne la liste des commandes du catalogue
- """
- return self.niveau.definition.getListeCmd()
-
- def getGroups(self):
- """
- Retourne la liste des groupes
- """
- return self.niveau.definition.liste_groupes,self.niveau.definition.dict_groupes
-
- def setEtapeContext(self,etape):
- """
- Positionne l'etape qui sera utilisee dans NommerSdProd pour
- decider si le concept passe pourra etre nomme
- """
- self._etape_context=etape
-
- def resetContext(self):
- """
- Cette methode reinitialise le contexte glissant pour pouvoir
- tenir compte des modifications de l'utilisateur : craation
- de commandes, nommage de concepts, etc.
- """
- #print "resetContext",self,self.nom
- self.currentContext={}
- self.index_etape_courante=0
- ind={}
- for i,etape in enumerate(self.etapes):
- ind[etape]=i
- self.index_etapes=ind
-
- # for etape in self.etapes:
- # etape.resetContext()
-
- def delSdprod(self,sd):
- """
- Supprime la SD sd de la liste des sd et des dictionnaires de contexte
- """
- #print "delSdprod",self,sd
- #print "delSdprod",self.sds
- #print "delSdprod",self.g_context
- #print "delSdprod",self.sdsDict
- #if sd in self.sds : self.sds.remove(sd)
- if sd.nom in self.g_context : del self.g_context[sd.nom]
- if sd.nom in self.sdsDict : del self.sdsDict[sd.nom]
-
- def delParam(self,param):
- """
- Supprime le parametre param de la liste des paramatres
- et du contexte gobal
- """
- if param in self.params : self.params.remove(param)
- if param.nom in self.g_context : del self.g_context[param.nom]
-
- def delFonction(self,fonction):
- """
- Supprime la fonction fonction de la liste des fonctions
- et du contexte gobal
- """
- if fonction in self.fonctions : self.fonctions.remove(fonction)
- if fonction.nom in self.g_context: del self.g_context[fonction.nom]
-
- def appendSdProd(self,sd):
- """
- Ajoute la SD sd a la liste des sd en verifiant au prealable qu'une SD de
- meme nom n'existe pas deja
- """
- if sd == None or sd.nom == None:return
- o=self.sdsDict.get(sd.nom,None)
- if isinstance(o,ASSD):
- raise AsException(tr("Nom de concept deja defini "+ sd.nom))
- self.sdsDict[sd.nom]=sd
- self.g_context[sd.nom] = sd
- #if sd not in self.sds : self.sds.append(sd)
-
- def appendParam(self,param):
- """
- Ajoute le parametre param a la liste des params
- et au contexte global
- """
- # il faudrait verifier qu'un parametre de meme nom n'existe pas deja !!!
- if param not in self.params : self.params.append(param)
- self.g_context[param.nom]=param
-
- def appendFonction(self,fonction):
- """
- Ajoute la fonction fonction a la liste des fonctions
- et au contexte global
- """
- # il faudrait verifier qu'une fonction de meme nom n'existe pas deja !!!
- if fonction not in self.fonctions : self.fonctions.append(fonction)
- self.g_context[fonction.nom]=fonction
-
- def deleteConcept(self,sd):
- """
- Inputs :
- - sd=concept detruit
- Fonction :
- Mettre a jour les etapes du JDC suite a la disparition du
- concept sd
- Seuls les mots cles simples MCSIMP font un traitement autre
- que de transmettre aux fils
- """
- for etape in self.etapes :
- etape.deleteConcept(sd)
- #PN PN PN pour les matrices ????
- #self.getVariables_avant(etape)
-
- def replaceConceptAfterEtape(self,etape,old_sd,sd):
- """
- Met a jour les etapes du JDC qui sont apres etape en fonction
- du remplacement du concept sd
- """
- index = self.etapes.index(etape)+1
- if index == len(self.etapes) :
- return # etape est la derniere etape du jdc ...on ne fait rien !
- for child in self.etapes[index:]:
- child.replaceConcept(old_sd,sd)
-
- def updateConceptAfterEtape(self,etape,sd):
- """
- Met a jour les etapes du JDC qui sont apres etape en fonction
- de la modification (principalement nommage) du concept sd
- """
- if etape is None:
- #On traite toutes les etapes
- index=0
- else:
- index = self.etapes.index(etape)+1
- if index == len(self.etapes) :
- return # etape est la derniere etape du jdc ...on ne fait rien !
- for child in self.etapes[index:]:
- child.updateConcept(sd)
-
- def dumpState(self):
- print(("JDC.state: ",self.state))
- for etape in self.etapes :
- print((etape.nom+".state: ",etape.state))
-
- def changeUnit(self,unit,etape,old_unit):
- #print "changeUnit",unit,etape,old_unit
- #print id(self.recorded_units),self.recorded_units
- #if self.recorded_units.has_key(old_unit):del self.recorded_units[old_unit]
- self.recordUnit(unit,etape)
-
- def recordUnit(self,unit,etape):
- """Enregistre les unites logiques incluses et les infos relatives a l'etape"""
- #print "recordUnit",unit,etape
- if unit is None:
- # Cas de POURSUITE
- self.recorded_units[None]=(etape.fichier_ini ,etape.fichier_text,etape.recorded_units)
- else:
- self.recorded_units[unit]=(etape.fichier_ini ,etape.fichier_text,etape.recorded_units)
- #print id(self.recorded_units),self.recorded_units
- #print self.recorded_units.get(None,(None,"",{}))[2]
- #print self.recorded_units.get(None,(None,"",{}))[2].get(None,(None,"",{}))
-
- def changeFichier(self,fichier):
- self.finModif()
-
- def evalInContext(self,valeur,etape):
- """ Tente d'evaluer valeur dans le contexte courant de etape
- Retourne le parametre valeur inchange si l'evaluation est impossible
- """
- #contexte initial du jdc
- context=self.condition_context.copy()
- #contexte courant des concepts. Il contient les parametres
- context.update(self.getContexteAvant(etape))
- try :
- objet = eval(valeur,context)
- return objet
- except:
- #traceback.print_exc()
- pass
- return valeur
+ #traceback.print_exc()
+ pass
+ return valeur
#ATTENTION SURCHARGE : cette methode doit etre gardee en synchronisation avec celle de Noyau
- def supprime(self):
- Noyau.N_JDC.JDC.supprime(self)
- for etape in self.etapes:
- etape.supprime()
- self.appliEficas=None
- self.g_context={}
- self.const_context={}
- self.sdsDict={}
- self.mc_globaux={}
- self.currentContext={}
- self.condition_context={}
- self.etapes_niveaux=[]
- self.niveau=None
- self.params=[]
- self.fonctions=[]
- self._etape_context=None
- self.etapes=[]
-
+ def supprime(self):
+ Noyau.N_JDC.JDC.supprime(self)
+ for etape in self.etapes:
+ etape.supprime()
+ self.appliEficas=None
+ self.g_context={}
+ self.const_context={}
+ self.sdsDict={}
+ self.mc_globaux={}
+ self.currentContext={}
+ self.condition_context={}
+ self.etapes_niveaux=[]
+ self.niveau=None
+ self.params=[]
+ self.fonctions=[]
+ self._etape_context=None
+ self.etapes=[]
+
#ATTENTION SURCHARGE : cette methode doit etre gardee en synchronisation avec celle de Noyau
- def register(self,etape):
- """
- Cette methode ajoute etape dans la liste
- des etapes self.etapes et retourne l identificateur d'etape
- fourni par l appel a gRegister
-
- A quoi sert editmode ?
- - Si editmode vaut 1, on est en mode edition de JDC. On cherche
- a enregistrer une etape que l'on a creee avec eficas (en passant
- par addEntite) auquel cas on ne veut recuperer que son numero
- d'enregistrement et c'est addEntite qui l'enregistre dans
- self.etapes a la bonne place...
- - Si editmode vaut 0, on est en mode relecture d'un fichier de
- commandes et on doit enregistrer l'etape a la fin de self.etapes
- (dans ce cas l'ordre des etapes est bien l'ordre chronologique
- de leur creation )
- """
- #import traceback
- #traceback.print_stack()
- if not self.editmode:
- self.etapes.append(etape)
- self.index_etapes[etape] = len(self.etapes) - 1
- else:
- pass
- return self.gRegister(etape)
+ def register(self,etape):
+ """
+ Cette methode ajoute etape dans la liste
+ des etapes self.etapes et retourne l identificateur d'etape
+ fourni par l appel a gRegister
+
+ A quoi sert editmode ?
+ - Si editmode vaut 1, on est en mode edition de JDC. On cherche
+ a enregistrer une etape que l'on a creee avec eficas (en passant
+ par addEntite) auquel cas on ne veut recuperer que son numero
+ d'enregistrement et c'est addEntite qui l'enregistre dans
+ self.etapes a la bonne place...
+ - Si editmode vaut 0, on est en mode relecture d'un fichier de
+ commandes et on doit enregistrer l'etape a la fin de self.etapes
+ (dans ce cas l'ordre des etapes est bien l'ordre chronologique
+ de leur creation )
+ """
+ #import traceback
+ #traceback.print_stack()
+ if not self.editmode:
+ self.etapes.append(etape)
+ self.index_etapes[etape] = len(self.etapes) - 1
+ else:
+ pass
+ return self.gRegister(etape)
#ATTENTION SURCHARGE : cette methode doit etre gardee en synchronisation avec celle de Noyau
- def nommerSDProd(self,sd,sdnom,restrict='non'):
- """
- Nomme la SD apres avoir verifie que le nommage est possible :
- nom non utilise
- Si le nom est deja utilise, leve une exception
- Met le concept cree dans le concept global g_context
- """
- # XXX En mode editeur dans EFICAS, le nommage doit etre gere differemment
- # Le dictionnaire g_context ne represente pas le contexte
- # effectif avant une etape.
- # Il faut utiliser getContexteAvant avec indication de l'etape
- # traitee.
- # Cette etape est indiquee par l'attribut _etape_context qui a ete
- # positionne prealablement par un appel a setEtapeContext
-
- if CONTEXT.debug : print(("JDC.nommerSDProd ",sd,sdnom))
-
- if self._etape_context:
- o=self.getContexteAvant(self._etape_context).get(sdnom,None)
- else:
- o=self.sdsDict.get(sdnom,None)
-
- if isinstance(o,ASSD):
- raise AsException(tr(" Nom de concept deja defini : "+ sdnom))
-
- # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
- # Ajoute a la creation (appel de regSD).
- #print (' je pass ici, pour ', sdnom, self.sdsDict)
- self.sdsDict[sdnom]=sd
- sd.nom=sdnom
-
- # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
- if restrict == 'non':
- self.g_context[sdnom]=sd
-
- def deleteConceptEntreEtapes(self,index1,index2,sd):
- if index2 <= index1 :return
- for child in self.etapes[index1:index2]:
- child.deleteConcept(sd)
-
- def deleteConceptAfterEtape(self,etape,sd):
- """
- Met a jour les etapes du JDC qui sont apres etape en fonction
- de la disparition du concept sd
- """
- index = self.etapes.index(etape)+1
- if index == len(self.etapes) :
- return # etape est la derniere etape du jdc ...on ne fait rien !
- for child in self.etapes[index:]:
- child.deleteConcept(sd)
+ def nommerSDProd(self,sd,sdnom,restrict='non'):
+ """
+ Nomme la SD apres avoir verifie que le nommage est possible :
+ nom non utilise
+ Si le nom est deja utilise, leve une exception
+ Met le concept cree dans le concept global g_context
+ """
+ # XXX En mode editeur dans EFICAS, le nommage doit etre gere differemment
+ # Le dictionnaire g_context ne represente pas le contexte
+ # effectif avant une etape.
+ # Il faut utiliser getContexteAvant avec indication de l'etape
+ # traitee.
+ # Cette etape est indiquee par l'attribut _etape_context qui a ete
+ # positionne prealablement par un appel a setEtapeContext
+
+ if CONTEXT.debug : print(("JDC.nommerSDProd ",sd,sdnom))
+
+ if self._etape_context:
+ o=self.getContexteAvant(self._etape_context).get(sdnom,None)
+ else:
+ o=self.sdsDict.get(sdnom,None)
+
+ if isinstance(o,ASSD):
+ raise AsException(tr(" Nom de concept deja defini : "+ sdnom))
+
+ # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
+ # Ajoute a la creation (appel de regSD).
+ #print (' je pass ici, pour ', sdnom, self.sdsDict)
+ self.sdsDict[sdnom]=sd
+ sd.nom=sdnom
+
+ # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
+ if restrict == 'non':
+ self.g_context[sdnom]=sd
+
+ def deleteConceptEntreEtapes(self,index1,index2,sd):
+ if index2 <= index1 :return
+ for child in self.etapes[index1:index2]:
+ child.deleteConcept(sd)
+
+ def deleteConceptAfterEtape(self,etape,sd):
+ """
+ Met a jour les etapes du JDC qui sont apres etape en fonction
+ de la disparition du concept sd
+ """
+ index = self.etapes.index(etape)+1
+ if index == len(self.etapes) :
+ return # etape est la derniere etape du jdc ...on ne fait rien !
+ for child in self.etapes[index:]:
+ child.deleteConcept(sd)
#ATTENTION SURCHARGE : les methodes ci-dessus surchargent des methodes de Noyau et Validation : a reintegrer
- def getFile(self,unite=None,fic_origine=''):
- """
- Retourne le nom du fichier correspondant a un numero d'unite
- logique (entier) ainsi que le source contenu dans le fichier
- """
- if self.appliEficas is not None:
- # Si le JDC est relie a une appliEficascation maitre, on delegue la recherche
- file,text= self.appliEficas.getFile(unite,fic_origine)
- else:
- file = None
- if unite != None:
- if os.path.exists(u"fort."+str(unite)):
- file= "fort."+str(unite)
- if file == None :
- raise AsException(tr("Impossible de trouver le fichier correspondant a l'unite "+str( unite)))
- if not os.path.exists(file):
- raise AsException(str(unite)+ tr(" n'est pas un fichier existant"))
- fproc=open(file,'r')
- text=fproc.read()
- fproc.close()
- #if file == None : return None,None
- text=text.replace('\r\n','\n')
- if file:
- linecache.cache[file]=0,0,text.split('\n'),file
- return file,text
-
- def isValid(self,cr='non'):
- if hasattr(self,'valid'): old_valid=self.valid
- else:old_valid=0
- valid=Validation.V_JDC.JDC.isValid(self,cr)
- if valid != old_valid:
- CONNECTOR.Emit(self,"valid")
- return valid
-
- def getLNomsEtapes(self):
- """
- Retourne la liste des noms des etapes de self
- """
- l=[]
- for etape in self.etapes:
- l.append(etape.nom)
- return l
+ def getFile(self,unite=None,fic_origine=''):
+ """
+ Retourne le nom du fichier correspondant a un numero d'unite
+ logique (entier) ainsi que le source contenu dans le fichier
+ """
+ if self.appliEficas is not None:
+ # Si le JDC est relie a une appliEficascation maitre, on delegue la recherche
+ file,text= self.appliEficas.getFile(unite,fic_origine)
+ else:
+ file = None
+ if unite != None:
+ if os.path.exists(u"fort."+str(unite)):
+ file= "fort."+str(unite)
+ if file == None :
+ raise AsException(tr("Impossible de trouver le fichier correspondant a l'unite "+str( unite)))
+ if not os.path.exists(file):
+ raise AsException(str(unite)+ tr(" n'est pas un fichier existant"))
+ fproc=open(file,'r')
+ text=fproc.read()
+ fproc.close()
+ #if file == None : return None,None
+ text=text.replace('\r\n','\n')
+ if file:
+ linecache.cache[file]=0,0,text.split('\n'),file
+ return file,text
+
+ def isValid(self,cr='non'):
+ if hasattr(self,'valid'): old_valid=self.valid
+ else:old_valid=0
+ valid=Validation.V_JDC.JDC.isValid(self,cr)
+ if valid != old_valid:
+ CONNECTOR.Emit(self,"valid")
+ return valid
+
+ def getLNomsEtapes(self):
+ """
+ Retourne la liste des noms des etapes de self
+ """
+ l=[]
+ for etape in self.etapes:
+ l.append(etape.nom)
+ return l
from Noyau import N_JDC_CATA
class JDC_CATA:
- def __init__(self):
- self.l_noms_entites=[]
+ def __init__(self):
+ self.l_noms_entites=[]
- def getListeCmd(self):
- self.l_noms_entites.sort()
- return self.l_noms_entites
+ def getListeCmd(self):
+ self.l_noms_entites.sort()
+ return self.l_noms_entites
- def getDocu(self):
- return
+ def getDocu(self):
+ return
#ATTENTION SURCHARGE: cette methode doit etre synchronisee avec celle du Noyau
- def enregistre(self,commande):
- """
- Cette methode surcharge la methode de la classe du Noyau
- Marche avec Noyau
- """
- N_JDC_CATA.JDC_CATA.enregistre(self,commande)
- self.l_noms_entites.append(commande.nom)
+ def enregistre(self,commande):
+ """
+ Cette methode surcharge la methode de la classe du Noyau
+ Marche avec Noyau
+ """
+ N_JDC_CATA.JDC_CATA.enregistre(self,commande)
+ self.l_noms_entites.append(commande.nom)
#
class LASSD:
- def __repr__(self):
- return self.getName()
+ def __repr__(self):
+ return self.getName()
class MACRO_ETAPE(I_ETAPE.ETAPE):
- def __init__(self):
- self.typret=None
- #indique si le jeu de commande inclus a pu etre analyse par convert
- #pour etre editable (0=NON, 1=OUI)
- self.text_converted=1
- self.text_error=""
- self.recorded_units={}
-
- def getSdprods(self,nom_sd):
- """
- Fonction : retourne le concept produit par l etape de nom nom_sd
- s il existe sinon None
- """
- if self.sd and self.sd.nom == nom_sd :return self.sd
- for co in self.sdprods:
- if co.nom == nom_sd:return co
- if type(self.definition.op_init) == types.FunctionType:
- d={}
- self.definition.op_init(*(self,d))
- return d.get(nom_sd,None)
- return None
-
- def getContexteJdc(self,fichier,text,doitEtreValide=1):
- """
- Interprete text comme un texte de jdc et retourne le contexte final.
-
- Le contexte final est le dictionnaire des sd disponibles a la derniere etape.
- Si text n'est pas un texte de jdc valide, retourne None
- ou leve une exception
- --> utilisee par ops.POURSUITE et INCLUDE
- """
- #print ("getContexteJdc",self,self.nom, text)
- # On recupere l'etape courante
- step=CONTEXT.getCurrentStep()
- self.text_included_converted=0
- try:
- #if 1 :
- # on essaie de creer un objet JDC auxiliaire avec un contexte initial
- # Attention getContexteAvant retourne un dictionnaire qui contient
- # le contexte courant. Ce dictionnaire est reactualise regulierement.
- # Si on veut garder l'etat du contexte fige, il faut en faire une copie.
- context_ini = self.parent.getContexteAvant(self).copy()
-
- # Indispensable avant de creer un nouveau JDC
- CONTEXT.unsetCurrentStep()
- args=self.jdc.args
- prefix_include=None
- if hasattr(self,'prefix'):
- prefix_include=self.prefix
- # ATTENTION : le dictionnaire recorded_units sert a memoriser les unites des
- # fichiers inclus. Il est preferable de garder le meme dictionnaire pendant
- # tout le traitement et de ne pas le reinitialiser brutalement (utiliser
- # clear plutot) si on ne veut pas perdre la memoire des unites.
- # En principe si la memorisation est faite au bon moment il n'est pas necessaire
- # de prendre cette precaution mais ce n'est pas vrai partout.
- old_recorded_units=self.recorded_units.copy()
-
- # on supprime l'ancien jdc_aux s'il existe
- if hasattr(self,'jdc_aux') and self.jdc_aux:
- self.jdc_aux.supprime_aux()
-
- if fichier is None:fichier="SansNom"
-
- # Il faut convertir le texte inclus en fonction du format
- # sauf les INCLUDE_MATERIAU
- self.text_converted=0
- self.text_error=""
- if self.nom != "INCLUDE_MATERIAU":
- format=self.jdc.appliEficas.format_fichier
- #on force a python pour Carmel
- if format=="CARMEL3D" : format="python"
- import convert
- if format in convert.plugins :
- # Le convertisseur existe on l'utilise
- p=convert.plugins[format]()
- p.text=text
- text=p.convert('exec',self.jdc.appliEficas)
- #Si le fichier ne peut pas etre converti, le cr n'est pas vide
- #et le texte est retourne tel que
- if not p.cr.estvide():
- self.text_converted=0
- self.text_error=str(p.cr)
- else:
- self.text_converted=1
-
-
- if hasattr(self,'sd') and self.sd != None : context_ini[self.sd.nom]=self.sd
- j=self.JdC_aux( procedure=text, nom=fichier,
- appliEficas=self.jdc.appliEficas,
- cata=self.jdc.cata,
- cata_ord_dico=self.jdc.cata_ordonne_dico,
- context_ini = context_ini,
- jdc_pere=self.jdc,etape_include=self,
- prefix_include=prefix_include,
- recorded_units=self.recorded_units,
- old_recorded_units=old_recorded_units,**args)
-
- j.analyse()
- if not j.cr.estvide(): self.text_included_converted=0
- else : self.text_included_converted=1
- self.text_included_error=str(j.cr)
- # On recupere les etapes internes (pour validation)
- self.etapes=j.etapes
- self.jdc_aux=j
- self.jdc.jdcDict=self.jdc_aux
-
- except:
- #else :
- traceback.print_exc()
- # On retablit l'etape courante step
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(step)
- return None
-
-
- if not j.cr.estvide() and doitEtreValide:
- # Erreurs dans l'INCLUDE. On garde la memoire du fichier
- # mais on n'insere pas les concepts
- # On retablit l'etape courante step
- #print (j.cr)
- #print ("valid ",j.isValid())
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(step)
- raise EficasException(tr("Impossible de relire le fichier %s \n ")+ str(j.cr))
-
-
- if not j.isValid() and doitEtreValide:
- # L'INCLUDE n'est pas valide.
- # on produit un rapport d'erreurs
- cr=j.report()
- #print ('cr', cr)
- # On retablit l'etape courante step
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(step)
- self.jdc.cr.fatal("Le fichier include contient des erreurs ")
- raise EficasException(tr("Le fichier include contient des erreurs "))
-
-
- # Si aucune erreur rencontree
- # ou qu on accepte un jdc incomplet
- # On recupere le contexte de l'include verifie
- try:
- j_context=j.getVerifContexte()
- #print j_context.keys()
- #print j.g_context.keys()
- except:
- # On retablit l'etape courante step
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(step)
- raise EficasException(" ")
-
- # Si on est arrive ici, le texte du fichier inclus (INCLUDE, POURSUITE, ...)
- # est valide et inserable dans le JDC
-
- # On remplit le dictionnaire des concepts produits inclus
- # en retirant les concepts presents dans le contexte initial
- # On ajoute egalement le concept produit dans le sdsDict du parent
- # sans verification car on est sur (verification integree) que
- # le nommage est possible
- self.g_context.clear()
- for k,v in j_context.items():
- if (not k in context_ini) or (context_ini[k] != v):
- self.g_context[k]=v
- self.parent.sdsDict[k]=v
-
- #Ce traitement n'est realise que dans les cas suivants:
- # - si convert n'a pas pu convertir le jeu de commandes
- # - et ce n'est pas un INCLUDE_MATERIAU
- #On collecte les variables Python qui ne sont pas dans le contexte initial
- #et dans le contexte valide et on en fait un pseudo-parametre (Variable)
- if self.text_converted == 0 and self.nom != "INCLUDE_MATERIAU":
- for k,v in j.g_context.items():
- if k in context_ini:continue
- if k in j_context:continue
- if isinstance(v,ASSD):continue
- if isinstance(v,I_ENTITE.ENTITE):continue
- if isinstance(v,I_OBJECT.OBJECT):continue
- if callable(v):continue
- self.g_context[k]=param2.Variable(k,v)
-
- # On recupere le contexte courant
- self.currentContext=j.currentContext
- self.index_etape_courante=j.index_etape_courante
- self.jdc_aux=j
-
- # On retablit l'etape courante step
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(step)
-
- return j_context
-
- def reevalueSdJdc(self):
- """
- Avec la liste des SD qui ont ete supprimees, propage la
- disparition de ces SD dans toutes les etapes et descendants
- """
- #print "reevalueSdJdc"
- l_sd_supp,l_sd_repl = self.diffContextes()
- for sd in l_sd_supp:
- self.parent.deleteConceptAfterEtape(self,sd)
- for old_sd,sd in l_sd_repl:
- self.parent.replaceConceptAfterEtape(self,old_sd,sd)
-
- def diffContextes(self):
- """
- Realise la difference entre les 2 contextes
- old_contexte_fichier_init et contexte_fichier_init
- cad retourne la liste des sd qui ont disparu ou ne derivent pas
- de la meme classe et des sd qui ont ete remplacees
- """
- if not hasattr(self,'old_contexte_fichier_init'):return [],[]
- l_sd_suppressed = []
- l_sd_replaced = []
- for old_key in self.old_contexte_fichier_init:
- if not old_key in self.contexte_fichier_init:
- if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
- l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
- else:
- if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
- # Un concept de meme nom existe
- old_class=self.old_contexte_fichier_init[old_key].__class__
- if not isinstance(self.contexte_fichier_init[old_key],old_class):
- # S'il n'est pas d'une classe derivee, on le supprime
- l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
+ def __init__(self):
+ self.typret=None
+ #indique si le jeu de commande inclus a pu etre analyse par convert
+ #pour etre editable (0=NON, 1=OUI)
+ self.text_converted=1
+ self.text_error=""
+ self.recorded_units={}
+
+ def getSdprods(self,nom_sd):
+ """
+ Fonction : retourne le concept produit par l etape de nom nom_sd
+ s il existe sinon None
+ """
+ if self.sd and self.sd.nom == nom_sd :return self.sd
+ for co in self.sdprods:
+ if co.nom == nom_sd:return co
+ if type(self.definition.op_init) == types.FunctionType:
+ d={}
+ self.definition.op_init(*(self,d))
+ return d.get(nom_sd,None)
+ return None
+
+ def getContexteJdc(self,fichier,text,doitEtreValide=1):
+ """
+ Interprete text comme un texte de jdc et retourne le contexte final.
+
+ Le contexte final est le dictionnaire des sd disponibles a la derniere etape.
+ Si text n'est pas un texte de jdc valide, retourne None
+ ou leve une exception
+ --> utilisee par ops.POURSUITE et INCLUDE
+ """
+ #print ("getContexteJdc",self,self.nom, text)
+ # On recupere l'etape courante
+ step=CONTEXT.getCurrentStep()
+ self.text_included_converted=0
+ try:
+ #if 1 :
+ # on essaie de creer un objet JDC auxiliaire avec un contexte initial
+ # Attention getContexteAvant retourne un dictionnaire qui contient
+ # le contexte courant. Ce dictionnaire est reactualise regulierement.
+ # Si on veut garder l'etat du contexte fige, il faut en faire une copie.
+ context_ini = self.parent.getContexteAvant(self).copy()
+
+ # Indispensable avant de creer un nouveau JDC
+ CONTEXT.unsetCurrentStep()
+ args=self.jdc.args
+ prefix_include=None
+ if hasattr(self,'prefix'):
+ prefix_include=self.prefix
+ # ATTENTION : le dictionnaire recorded_units sert a memoriser les unites des
+ # fichiers inclus. Il est preferable de garder le meme dictionnaire pendant
+ # tout le traitement et de ne pas le reinitialiser brutalement (utiliser
+ # clear plutot) si on ne veut pas perdre la memoire des unites.
+ # En principe si la memorisation est faite au bon moment il n'est pas necessaire
+ # de prendre cette precaution mais ce n'est pas vrai partout.
+ old_recorded_units=self.recorded_units.copy()
+
+ # on supprime l'ancien jdc_aux s'il existe
+ if hasattr(self,'jdc_aux') and self.jdc_aux:
+ self.jdc_aux.supprime_aux()
+
+ if fichier is None:fichier="SansNom"
+
+ # Il faut convertir le texte inclus en fonction du format
+ # sauf les INCLUDE_MATERIAU
+ self.text_converted=0
+ self.text_error=""
+ if self.nom != "INCLUDE_MATERIAU":
+ format=self.jdc.appliEficas.format_fichier
+ #on force a python pour Carmel
+ if format=="CARMEL3D" : format="python"
+ import convert
+ if format in convert.plugins :
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[format]()
+ p.text=text
+ text=p.convert('exec',self.jdc.appliEficas)
+ #Si le fichier ne peut pas etre converti, le cr n'est pas vide
+ #et le texte est retourne tel que
+ if not p.cr.estvide():
+ self.text_converted=0
+ self.text_error=str(p.cr)
+ else:
+ self.text_converted=1
+
+
+ if hasattr(self,'sd') and self.sd != None : context_ini[self.sd.nom]=self.sd
+ j=self.JdC_aux( procedure=text, nom=fichier,
+ appliEficas=self.jdc.appliEficas,
+ cata=self.jdc.cata,
+ cata_ord_dico=self.jdc.cata_ordonne_dico,
+ context_ini = context_ini,
+ jdc_pere=self.jdc,etape_include=self,
+ prefix_include=prefix_include,
+ recorded_units=self.recorded_units,
+ old_recorded_units=old_recorded_units,**args)
+
+ j.analyse()
+ if not j.cr.estvide(): self.text_included_converted=0
+ else : self.text_included_converted=1
+ self.text_included_error=str(j.cr)
+ # On recupere les etapes internes (pour validation)
+ self.etapes=j.etapes
+ self.jdc_aux=j
+ self.jdc.jdcDict=self.jdc_aux
+
+ except:
+ #else :
+ traceback.print_exc()
+ # On retablit l'etape courante step
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(step)
+ return None
+
+
+ if not j.cr.estvide() and doitEtreValide:
+ # Erreurs dans l'INCLUDE. On garde la memoire du fichier
+ # mais on n'insere pas les concepts
+ # On retablit l'etape courante step
+ #print (j.cr)
+ #print ("valid ",j.isValid())
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(step)
+ raise EficasException(tr("Impossible de relire le fichier %s \n ")+ str(j.cr))
+
+
+ if not j.isValid() and doitEtreValide:
+ # L'INCLUDE n'est pas valide.
+ # on produit un rapport d'erreurs
+ cr=j.report()
+ #print ('cr', cr)
+ # On retablit l'etape courante step
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(step)
+ self.jdc.cr.fatal("Le fichier include contient des erreurs ")
+ raise EficasException(tr("Le fichier include contient des erreurs "))
+
+
+ # Si aucune erreur rencontree
+ # ou qu on accepte un jdc incomplet
+ # On recupere le contexte de l'include verifie
+ try:
+ j_context=j.getVerifContexte()
+ #print j_context.keys()
+ #print j.g_context.keys()
+ except:
+ # On retablit l'etape courante step
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(step)
+ raise EficasException(" ")
+
+ # Si on est arrive ici, le texte du fichier inclus (INCLUDE, POURSUITE, ...)
+ # est valide et inserable dans le JDC
+
+ # On remplit le dictionnaire des concepts produits inclus
+ # en retirant les concepts presents dans le contexte initial
+ # On ajoute egalement le concept produit dans le sdsDict du parent
+ # sans verification car on est sur (verification integree) que
+ # le nommage est possible
+ self.g_context.clear()
+ for k,v in j_context.items():
+ if (not k in context_ini) or (context_ini[k] != v):
+ self.g_context[k]=v
+ self.parent.sdsDict[k]=v
+
+ #Ce traitement n'est realise que dans les cas suivants:
+ # - si convert n'a pas pu convertir le jeu de commandes
+ # - et ce n'est pas un INCLUDE_MATERIAU
+ #On collecte les variables Python qui ne sont pas dans le contexte initial
+ #et dans le contexte valide et on en fait un pseudo-parametre (Variable)
+ if self.text_converted == 0 and self.nom != "INCLUDE_MATERIAU":
+ for k,v in j.g_context.items():
+ if k in context_ini:continue
+ if k in j_context:continue
+ if isinstance(v,ASSD):continue
+ if isinstance(v,I_ENTITE.ENTITE):continue
+ if isinstance(v,I_OBJECT.OBJECT):continue
+ if callable(v):continue
+ self.g_context[k]=param2.Variable(k,v)
+
+ # On recupere le contexte courant
+ self.currentContext=j.currentContext
+ self.index_etape_courante=j.index_etape_courante
+ self.jdc_aux=j
+
+ # On retablit l'etape courante step
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(step)
+
+ return j_context
+
+ def reevalueSdJdc(self):
+ """
+ Avec la liste des SD qui ont ete supprimees, propage la
+ disparition de ces SD dans toutes les etapes et descendants
+ """
+ #print "reevalueSdJdc"
+ l_sd_supp,l_sd_repl = self.diffContextes()
+ for sd in l_sd_supp:
+ self.parent.deleteConceptAfterEtape(self,sd)
+ for old_sd,sd in l_sd_repl:
+ self.parent.replaceConceptAfterEtape(self,old_sd,sd)
+
+ def diffContextes(self):
+ """
+ Realise la difference entre les 2 contextes
+ old_contexte_fichier_init et contexte_fichier_init
+ cad retourne la liste des sd qui ont disparu ou ne derivent pas
+ de la meme classe et des sd qui ont ete remplacees
+ """
+ if not hasattr(self,'old_contexte_fichier_init'):return [],[]
+ l_sd_suppressed = []
+ l_sd_replaced = []
+ for old_key in self.old_contexte_fichier_init:
+ if not old_key in self.contexte_fichier_init:
+ if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
+ l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
else:
- l_sd_replaced.append((self.old_contexte_fichier_init[old_key],self.contexte_fichier_init[old_key]))
- return l_sd_suppressed,l_sd_replaced
-
- def controlSdprods(self,d):
- """
- Cette methode doit verifier que les concepts produits par la
- commande ne sont pas incompatibles avec le contexte fourni (d).
- Si c'est le cas, le concept produit doit etre supprime
- Si la macro a elle meme des etapes, elle doit propager
- le traitement (voir methode controlJdcContextApres de I_JDC)
- """
- #print ("I_MACRO_ETAPE.controlSdprods",d.keys(),self,self.nom,self.sd and self.sd.nom)
- if self.sd:
- if self.sd.nom in d:
- # Le concept est deja defini
- if self.reuse and self.reuse is d[self.sd.nom]:
- # Le concept est reutilise : situation normale
- pass
- else:
- # Redefinition du concept, on l'annule
- #XXX on pourrait simplement annuler son nom pour conserver les objets
- # l'utilisateur n'aurait alors qu'a renommer le concept (faisable??)
- self.initModif()
- sd=self.sd
- self.sd=self.reuse=self.sdnom=None
- self.parent.deleteConceptAfterEtape(self,sd)
- self.finModif()
-
- # On verifie les concepts a droite du signe =
- self.initModif()
- sdprods=self.sdprods[:]
- self.sdprods=[]
- for co in sdprods:
- if co.nom in d and co is not d[co.nom] :
- #nettoie les mots cles de l'etape qui ont comme valeur co
- self.deleteConcept(co)
- #supprime les references a co dans les etapes suivantes
- self.parent.deleteConceptAfterEtape(self,co)
- else:
- self.sdprods.append(co)
- self.finModif()
-
- for e in self.etapes:
- e.controlSdprods(d)
- e.updateContext(d)
-
- def supprimeSdprod(self,sd):
- """
- Supprime le concept produit sd s'il est produit par l'etape
- """
- #print ('supprimeSdprod de MACRO_ETAPE')
- if sd in self.sdprods:
- self.initModif()
- self.parent.delSdprod(sd)
- self.sdprods.remove(sd)
- self.finModif()
- self.parent.deleteConcept(sd)
- return
-
- if sd is not self.sd :return
- if self.sd is not None :
- self.initModif()
- self.parent.delSdprod(sd)
- self.sd=None
- self.finModif()
- self.parent.deleteConcept(sd)
-
- def supprimeSdProds(self):
- """
- Fonction: Lors de la destruction de la macro-etape, detruit tous les concepts produits
- Un operateur n a qu un concept produit
- Une procedure n'en a aucun
- Une macro en a en general plus d'un
- """
- #print "supprimeSdProds"
- if self.reuse is not self.sd :
- # l'etape n'est pas reentrante
- # le concept retourne par l'etape est a supprimer car il etait
- # cree par l'etape
- if self.sd != None :
- self.parent.delSdprod(self.sd)
- self.parent.deleteConcept(self.sd)
- # On detruit les concepts a droite du signe =
- for co in self.sdprods:
- self.parent.delSdprod(co)
- self.parent.deleteConcept(co)
- # Si la macro a des etapes et des concepts inclus, on les detruit
- for nom_sd,co in self.g_context.items():
- if not isinstance(co,ASSD):continue
- self.parent.delSdprod(co)
- self.parent.deleteConcept(co)
- # On met g_context a blanc
- self.g_context={}
-
- def close(self):
- #print "close",self
- if hasattr(self,"jdc_aux") and self.jdc_aux:
- # La macro a un jdc auxiliaire inclus. On demande sa fermeture
- self.jdc_aux.close()
-
- def resetContext(self):
- if hasattr(self,"jdc_aux") and self.jdc_aux:
- # La macro a un jdc auxiliaire inclus. On demande la reinitialisation du contexte
- self.jdc_aux.resetContext()
-
- def updateConcept(self,sd):
- I_ETAPE.ETAPE.updateConcept(self,sd)
- for etape in self.etapes:
- etape.updateConcept(sd)
-
- def deleteConcept(self,sd):
- """
- Fonction : Mettre a jour les mots cles de l etape et eventuellement
- le concept produit si reuse suite a la disparition du concept sd
- Seuls les mots cles simples MCSIMP font un traitement autre
- que de transmettre aux fils
- """
- #print "deleteConcept",sd
- I_ETAPE.ETAPE.deleteConcept(self,sd)
- for etape in self.etapes:
- etape.deleteConcept(sd)
-
- def replaceConcept(self,old_sd,sd):
- """
- Fonction : Mettre a jour les mots cles de l etape et le concept produit si reuse
- suite au remplacement du concept old_sd par sd
- """
- #print "replaceConcept",old_sd,sd
- I_ETAPE.ETAPE.replaceConcept(self,old_sd,sd)
- for etape in self.etapes:
- etape.replaceConcept(old_sd,sd)
-
- def changeFichierInit(self,new_fic,text):
- """
- Tente de changer le fichier include. Le precedent include est conserve
- dans old_xxx
- """
- if not hasattr(self,'fichier_ini'):
- self.fichier_ini=None
- self.fichier_text=None
- self.fichier_err="Le fichier n'est pas defini"
- self.contexte_fichier_init={}
- self.recorded_units={}
- self.jdc_aux=None
- self.fichier_unite="PasDefini"
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_include
-
- self.old_fic = self.fichier_ini
- self.old_text = self.fichier_text
- self.old_err = self.fichier_err
- self.old_context=self.contexte_fichier_init
- self.old_units=self.recorded_units
- self.old_etapes=self.etapes
- self.old_jdc_aux=self.jdc_aux
-
- self.fichier_ini = new_fic
- self.fichier_text=text
-
- try:
- self.makeContexteInclude(new_fic,text)
- except:
- l=traceback.format_exception_only(tr("Fichier invalide %s", sys.exc_info()[1]))
- self.fichier_err=''.join(l)
- raise EficasException(self.fichier_err)
-
- # L'evaluation de text dans un JDC auxiliaire s'est bien passe
- # on peut poursuivre le traitement
- self.initModif()
- self.state="undetermined"
- self.fichier_err=None
- # On enregistre la modification de fichier
- self.recordUnite()
- # Le contexte du parent doit etre reinitialise car les concepts produits ont change
- self.parent.resetContext()
-
- # Si des concepts ont disparu lors du changement de fichier, on demande leur suppression
- self.old_contexte_fichier_init=self.old_context
- self.reevalueSdJdc()
-
- self.finModif()
- if self.old_jdc_aux:
- self.old_jdc_aux.close()
-
- def restoreFichierInit(self):
- """
- Restaure le fichier init enregistre dans old_xxx
- """
- self.fichier_ini=self.old_fic
- self.fichier_text=self.old_text
- self.fichier_err=self.old_err
- self.contexte_fichier_init=self.old_context
- self.recorded_units=self.old_units
- self.etapes=self.old_etapes
- self.jdc_aux=self.old_jdc_aux
-
- def forceFichierInit(self):
- """
- Force le remplacement du fichier init meme si le remplacant est en erreur
- """
- # Reinitialisation complete du compte-rendu d'erreurs
- self.jdc_aux.cr=self.jdc_aux.CR()
- # On remplit le dictionnaire des concepts produits inclus
- # en retirant les concepts presents dans le contexte initial
- # On ajoute egalement le concept produit dans le sdsDict du parent
- # sans verification car on est sur (verification integree) que
- # le nommage est possible
- j_context=self.jdc_aux.getContexteAvant(None)
- self.g_context.clear()
- context_ini=self.jdc_aux.context_ini
- for k,v in j_context.items():
- if not k in context_ini or context_ini[k] != v:
- self.g_context[k]=v
- self.parent.sdsDict[k]=v
- # On recupere le contexte courant
- self.currentContext=self.jdc_aux.currentContext
- self.index_etape_courante=self.jdc_aux.index_etape_courante
- self.contexte_fichier_init = j_context
- self.fichier_err = None
-
- # On enregistre la modification de fichier
- self.initModif()
- self.state="undetermined"
- self.recordUnite()
- # Le contexte du parent doit etre reinitialise car les concepts produits ont change
- self.parent.resetContext()
-
- # On remplace les anciens concepts par les nouveaux (y compris ajouts
- # et suppression) et on propage les modifications aux etapes precedentes et suivantes
- # reevalueSdJdc construit la liste des differences entre les contextes contexte_fichier_init
- # et old_contexte_fichier_init et effectue les destructions et remplacements de concept
- # necessaires
- self.old_contexte_fichier_init=self.old_context
- self.reevalueSdJdc()
- self.finModif()
- if self.old_jdc_aux:
- self.old_jdc_aux.close()
-
- self.jdc_aux.forceContexte(self.g_context)
-
- def buildInclude(self,fichier,text):
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_include
- # un include partage la table des unites avec son parent (jdc)
- self.recorded_units=self.parent.recorded_units
- self.buildJdcaux(fichier,text)
-
- def buildPoursuite(self,fichier,text):
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_poursuite
- # une poursuite a sa propre table d'unites
- self.recorded_units={}
- self.buildJdcaux(fichier,text)
-
-
- def buildIncludeInclude(self,text):
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_include
- # un include partage la table des unites avec son parent (jdc)
-
-
- def buildIncludeEtape(self,text,doitEtreValide = 0):
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_include
- # un include partage la table des unites avec son parent (jdc)
- #self.buildJdcauxInclude(text)
- # Attention fonctionne pour import_Zone de MT
- # a adapter eventuellement
- try :
- #if 1 :
- contexte = self.getContexteJdc(None,text,doitEtreValide)
- except EficasException:
- return 0
-
- for e in self.etapes:
- e.niveau=self.niveau
- e.parent=self.parent
- e.state='change'
-
- index=self.jdc.etapes.index(self)
- self.jdc.etapes=self.jdc.etapes[:index+1]+self.etapes+self.jdc.etapes[index+1:]
-
- self.g_context={}
- self.etapes=[]
- self.jdc.resetContext()
- self.jdc_aux=None
- CONTEXT.unsetCurrentStep()
- return 1
-
-
- def buildJdcauxInclude(self,text):
-
- try :
- contexte = self.getContexteJdc(None,text)
- except EficasException:
- pass
- index=self.jdc.etapes.index(self)
- for e in self.etapes:
- e.niveau=self.niveau
- self.jdc.etapes=self.jdc.etapes[:index+1]+self.etapes+self.jdc.etapes[index+1:]
- self.g_context={}
- self.etapes=[]
- self.jdc_aux=None
- CONTEXT.unsetCurrentStep()
-
- def buildJdcaux(self,fichier,text):
- """
- Cree un jdc auxiliaire initialise avec text.
- Initialise le nom du fichier associe avec fichier
- N'enregistre pas d'association unite <-> fichier
- """
- self.fichier_ini = fichier
- self.fichier_text= text
- self.fichier_unite=None
- self.fichier_err = None
- try:
- contexte = self.getContexteJdc(fichier,text)
- if contexte is None :
- # Impossible de construire le jdc auxiliaire (sortie par None)
- # On simule une sortie par exception
- raise EficasException(tr("Impossible de construire le jeu de commandes correspondant au fichier"))
- else:
- # La construction du jdc auxiliaire est allee au bout
- self.contexte_fichier_init = contexte
- self.initModif()
- self.finModif()
- except:
- # Impossible de construire le jdc auxiliaire (sortie par exception)
- l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- if self.jdc.editor is not None:
- self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
- message= tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l)))
-
- self.g_context={}
- self.etapes=[]
- self.jdc_aux=None
- self.fichier_err = ''.join(l)
- self.contexte_fichier_init={}
- self.initModif()
- self.finModif()
- raise EficasException(" ")
-
- def makeContexteInclude(self,fichier,text):
- """
- Cette methode sert a craer un contexte en interpratant un texte source Python.
- """
- #print ("makeContexteInclude",fichier)
- # on recupere le contexte d'un nouveau jdc dans lequel on interprete text
- contexte = self.getContexteJdc(fichier,text)
- #print (contexte)
- if contexte == None :
- raise EficasException("Impossible de construire le jeu de commandes correspondant au fichier")
- else:
- # Pour les macros de type include : INCLUDE, INCLUDE_MATERIAU et POURSUITE
- # l'attribut g_context est un dictionnaire qui contient les concepts produits par inclusion
- # l'attribut contexte_fichier_init est un dictionnaire qui contient les concepts produits
- # en sortie de macro. g_context est obtenu en retirant de contexte_fichier_init les concepts
- # existants en debut de macro contenus dans context_ini (dans getContexteJdc)
- # g_context est utilise pour avoir les concepts produits par la macro
- # contexte_fichier_init est utilise pour avoir les concepts supprimes par la macro
- self.contexte_fichier_init = contexte
- #print ("fin makeContexteInclude",fichier)
-
- def reevalueFichierInitObsolete(self):
- """Recalcule les concepts produits par le fichier enregistre"""
- #print "reevalue_fichier_init"
- old_context=self.contexte_fichier_init
- try:
- self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
- except:
- l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- self.fichier_err = ''.join(l)
- self.g_context={}
- self.etapes=[]
- self.jdc_aux=None
- self.old_contexte_fichier_init=old_context
- self.contexte_fichier_init={}
- self.reevalueSdJdc()
- return
-
- # L'evaluation s'est bien passee
- self.fichier_err = None
- self.old_contexte_fichier_init=old_context
- self.reevalueSdJdc()
-
- def updateFichierInit(self,unite):
- """Reevalue le fichier init sans demander (dans la mesure du possible) a l'utilisateur
- les noms des fichiers
- Ceci suppose que les relations entre unites et noms ont ete memorisees prealablement
- L'include a ete initialise precedemment. Le jdc auxiliaire existe.
- """
- #print "updateFichierInit",unite,self.fichier_unite
- self.old_contexte_fichier_init=self.contexte_fichier_init
- old_fichier_ini=self.fichier_ini
- if not hasattr(self,"jdc_aux"):self.jdc_aux=None
- old_jdc_aux=self.jdc_aux
-
- #print "updateFichierInit",self,self.parent,self.parent.recorded_units
-
- if self.fichier_unite is None:
- # L'unite n'etait pas definie precedemment. On ne change que l'unite
- #print "updateFichierInit","pas de changement dans include"
- self.fichier_unite=unite
- return
- elif unite == self.fichier_unite :
- # L'unite n'a pas change
- #print "updateFichierInit","pas de changement dans include 3"
- return
- elif unite != self.fichier_unite :
- # L'unite etait definie precedemment. On remplace l'include
- #
- f,text=self.getFileMemo(unite=unite,fic_origine=self.parent.nom)
- if f is None:
- # Le fichier associe n'a pas pu etre defini
- # on change l'unite associee mais pas l'include
- #print "updateFichierInit","pas de changement dans include 2"
- self.fichier_unite=unite
+ if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
+ # Un concept de meme nom existe
+ old_class=self.old_contexte_fichier_init[old_key].__class__
+ if not isinstance(self.contexte_fichier_init[old_key],old_class):
+ # S'il n'est pas d'une classe derivee, on le supprime
+ l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
+ else:
+ l_sd_replaced.append((self.old_contexte_fichier_init[old_key],self.contexte_fichier_init[old_key]))
+ return l_sd_suppressed,l_sd_replaced
+
+ def controlSdprods(self,d):
+ """
+ Cette methode doit verifier que les concepts produits par la
+ commande ne sont pas incompatibles avec le contexte fourni (d).
+ Si c'est le cas, le concept produit doit etre supprime
+ Si la macro a elle meme des etapes, elle doit propager
+ le traitement (voir methode controlJdcContextApres de I_JDC)
+ """
+ #print ("I_MACRO_ETAPE.controlSdprods",d.keys(),self,self.nom,self.sd and self.sd.nom)
+ if self.sd:
+ if self.sd.nom in d:
+ # Le concept est deja defini
+ if self.reuse and self.reuse is d[self.sd.nom]:
+ # Le concept est reutilise : situation normale
+ pass
+ else:
+ # Redefinition du concept, on l'annule
+ #XXX on pourrait simplement annuler son nom pour conserver les objets
+ # l'utilisateur n'aurait alors qu'a renommer le concept (faisable??)
+ self.initModif()
+ sd=self.sd
+ self.sd=self.reuse=self.sdnom=None
+ self.parent.deleteConceptAfterEtape(self,sd)
+ self.finModif()
+
+ # On verifie les concepts a droite du signe =
+ self.initModif()
+ sdprods=self.sdprods[:]
+ self.sdprods=[]
+ for co in sdprods:
+ if co.nom in d and co is not d[co.nom] :
+ #nettoie les mots cles de l'etape qui ont comme valeur co
+ self.deleteConcept(co)
+ #supprime les references a co dans les etapes suivantes
+ self.parent.deleteConceptAfterEtape(self,co)
+ else:
+ self.sdprods.append(co)
+ self.finModif()
+
+ for e in self.etapes:
+ e.controlSdprods(d)
+ e.updateContext(d)
+
+ def supprimeSdprod(self,sd):
+ """
+ Supprime le concept produit sd s'il est produit par l'etape
+ """
+ #print ('supprimeSdprod de MACRO_ETAPE')
+ if sd in self.sdprods:
+ self.initModif()
+ self.parent.delSdprod(sd)
+ self.sdprods.remove(sd)
+ self.finModif()
+ self.parent.deleteConcept(sd)
return
- else:
- self.fichier_ini = f
- self.fichier_text=text
- self.fichier_unite=unite
- #print "updateFichierInit",self.recorded_units
-
- #print "updateFichierInit",self.fichier_ini,self.fichier_text,self.fichier_unite
- if old_fichier_ini == self.fichier_ini:
- # Le fichier inclus n'a pas change. On ne recree pas le contexte
- # mais on enregistre le changement d'association unite <-> fichier
- #print "updateFichierInit.fichier inchange",self.jdc_aux.context_ini
- self.parent.recordUnit(unite,self)
- return
+ if sd is not self.sd :return
+ if self.sd is not None :
+ self.initModif()
+ self.parent.delSdprod(sd)
+ self.sd=None
+ self.finModif()
+ self.parent.deleteConcept(sd)
+
+ def supprimeSdProds(self):
+ """
+ Fonction: Lors de la destruction de la macro-etape, detruit tous les concepts produits
+ Un operateur n a qu un concept produit
+ Une procedure n'en a aucun
+ Une macro en a en general plus d'un
+ """
+ #print "supprimeSdProds"
+ if self.reuse is not self.sd :
+ # l'etape n'est pas reentrante
+ # le concept retourne par l'etape est a supprimer car il etait
+ # cree par l'etape
+ if self.sd != None :
+ self.parent.delSdprod(self.sd)
+ self.parent.deleteConcept(self.sd)
+ # On detruit les concepts a droite du signe =
+ for co in self.sdprods:
+ self.parent.delSdprod(co)
+ self.parent.deleteConcept(co)
+ # Si la macro a des etapes et des concepts inclus, on les detruit
+ for nom_sd,co in self.g_context.items():
+ if not isinstance(co,ASSD):continue
+ self.parent.delSdprod(co)
+ self.parent.deleteConcept(co)
+ # On met g_context a blanc
+ self.g_context={}
- try:
+ def close(self):
+ #print "close",self
+ if hasattr(self,"jdc_aux") and self.jdc_aux:
+ # La macro a un jdc auxiliaire inclus. On demande sa fermeture
+ self.jdc_aux.close()
+
+ def resetContext(self):
+ if hasattr(self,"jdc_aux") and self.jdc_aux:
+ # La macro a un jdc auxiliaire inclus. On demande la reinitialisation du contexte
+ self.jdc_aux.resetContext()
+
+ def updateConcept(self,sd):
+ I_ETAPE.ETAPE.updateConcept(self,sd)
+ for etape in self.etapes:
+ etape.updateConcept(sd)
+
+ def deleteConcept(self,sd):
+ """
+ Fonction : Mettre a jour les mots cles de l etape et eventuellement
+ le concept produit si reuse suite a la disparition du concept sd
+ Seuls les mots cles simples MCSIMP font un traitement autre
+ que de transmettre aux fils
+ """
+ #print "deleteConcept",sd
+ I_ETAPE.ETAPE.deleteConcept(self,sd)
+ for etape in self.etapes:
+ etape.deleteConcept(sd)
+
+ def replaceConcept(self,old_sd,sd):
+ """
+ Fonction : Mettre a jour les mots cles de l etape et le concept produit si reuse
+ suite au remplacement du concept old_sd par sd
+ """
+ #print "replaceConcept",old_sd,sd
+ I_ETAPE.ETAPE.replaceConcept(self,old_sd,sd)
+ for etape in self.etapes:
+ etape.replaceConcept(old_sd,sd)
+
+ def changeFichierInit(self,new_fic,text):
+ """
+ Tente de changer le fichier include. Le precedent include est conserve
+ dans old_xxx
+ """
+ if not hasattr(self,'fichier_ini'):
+ self.fichier_ini=None
+ self.fichier_text=None
+ self.fichier_err="Le fichier n'est pas defini"
+ self.contexte_fichier_init={}
+ self.recorded_units={}
+ self.jdc_aux=None
+ self.fichier_unite="PasDefini"
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+
+ self.old_fic = self.fichier_ini
+ self.old_text = self.fichier_text
+ self.old_err = self.fichier_err
+ self.old_context=self.contexte_fichier_init
+ self.old_units=self.recorded_units
+ self.old_etapes=self.etapes
+ self.old_jdc_aux=self.jdc_aux
+
+ self.fichier_ini = new_fic
+ self.fichier_text=text
+
+ try:
+ self.makeContexteInclude(new_fic,text)
+ except:
+ l=traceback.format_exception_only(tr("Fichier invalide %s", sys.exc_info()[1]))
+ self.fichier_err=''.join(l)
+ raise EficasException(self.fichier_err)
+
+ # L'evaluation de text dans un JDC auxiliaire s'est bien passe
+ # on peut poursuivre le traitement
+ self.initModif()
+ self.state="undetermined"
self.fichier_err=None
- self.makeContexteInclude(self.fichier_ini,self.fichier_text)
- # Les 3 attributs fichier_ini fichier_text recorded_units doivent etre corrects
- # avant d'appeler changeUnit
- except:
- # Erreurs lors de l'evaluation de text dans un JDC auxiliaire
- l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- # On conserve la memoire du nouveau fichier
- # mais on n'utilise pas les concepts crees par ce fichier
- # on met l'etape en erreur : fichier_err=''.join(l)
- self.fichier_err=''.join(l)
+ # On enregistre la modification de fichier
+ self.recordUnite()
+ # Le contexte du parent doit etre reinitialise car les concepts produits ont change
+ self.parent.resetContext()
+
+ # Si des concepts ont disparu lors du changement de fichier, on demande leur suppression
+ self.old_contexte_fichier_init=self.old_context
+ self.reevalueSdJdc()
+
+ self.finModif()
+ if self.old_jdc_aux:
+ self.old_jdc_aux.close()
+
+ def restoreFichierInit(self):
+ """
+ Restaure le fichier init enregistre dans old_xxx
+ """
+ self.fichier_ini=self.old_fic
+ self.fichier_text=self.old_text
+ self.fichier_err=self.old_err
+ self.contexte_fichier_init=self.old_context
+ self.recorded_units=self.old_units
+ self.etapes=self.old_etapes
+ self.jdc_aux=self.old_jdc_aux
+
+ def forceFichierInit(self):
+ """
+ Force le remplacement du fichier init meme si le remplacant est en erreur
+ """
+ # Reinitialisation complete du compte-rendu d'erreurs
+ self.jdc_aux.cr=self.jdc_aux.CR()
+ # On remplit le dictionnaire des concepts produits inclus
+ # en retirant les concepts presents dans le contexte initial
+ # On ajoute egalement le concept produit dans le sdsDict du parent
+ # sans verification car on est sur (verification integree) que
+ # le nommage est possible
+ j_context=self.jdc_aux.getContexteAvant(None)
+ self.g_context.clear()
+ context_ini=self.jdc_aux.context_ini
+ for k,v in j_context.items():
+ if not k in context_ini or context_ini[k] != v:
+ self.g_context[k]=v
+ self.parent.sdsDict[k]=v
+ # On recupere le contexte courant
+ self.currentContext=self.jdc_aux.currentContext
+ self.index_etape_courante=self.jdc_aux.index_etape_courante
+ self.contexte_fichier_init = j_context
+ self.fichier_err = None
+
+ # On enregistre la modification de fichier
+ self.initModif()
+ self.state="undetermined"
+ self.recordUnite()
+ # Le contexte du parent doit etre reinitialise car les concepts produits ont change
+ self.parent.resetContext()
+
+ # On remplace les anciens concepts par les nouveaux (y compris ajouts
+ # et suppression) et on propage les modifications aux etapes precedentes et suivantes
+ # reevalueSdJdc construit la liste des differences entre les contextes contexte_fichier_init
+ # et old_contexte_fichier_init et effectue les destructions et remplacements de concept
+ # necessaires
+ self.old_contexte_fichier_init=self.old_context
+ self.reevalueSdJdc()
+ self.finModif()
+ if self.old_jdc_aux:
+ self.old_jdc_aux.close()
+
+ self.jdc_aux.forceContexte(self.g_context)
+
+ def buildInclude(self,fichier,text):
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+ # un include partage la table des unites avec son parent (jdc)
+ self.recorded_units=self.parent.recorded_units
+ self.buildJdcaux(fichier,text)
+
+ def buildPoursuite(self,fichier,text):
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_poursuite
+ # une poursuite a sa propre table d'unites
+ self.recorded_units={}
+ self.buildJdcaux(fichier,text)
+
+
+ def buildIncludeInclude(self,text):
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+ # un include partage la table des unites avec son parent (jdc)
+
+
+ def buildIncludeEtape(self,text,doitEtreValide = 0):
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+ # un include partage la table des unites avec son parent (jdc)
+ #self.buildJdcauxInclude(text)
+ # Attention fonctionne pour import_Zone de MT
+ # a adapter eventuellement
+ try :
+ #if 1 :
+ contexte = self.getContexteJdc(None,text,doitEtreValide)
+ except EficasException:
+ return 0
+
+ for e in self.etapes:
+ e.niveau=self.niveau
+ e.parent=self.parent
+ e.state='change'
+
+ index=self.jdc.etapes.index(self)
+ self.jdc.etapes=self.jdc.etapes[:index+1]+self.etapes+self.jdc.etapes[index+1:]
+
self.g_context={}
self.etapes=[]
+ self.jdc.resetContext()
self.jdc_aux=None
- self.contexte_fichier_init={}
+ CONTEXT.unsetCurrentStep()
+ return 1
+
+
+ def buildJdcauxInclude(self,text):
+
+ try :
+ contexte = self.getContexteJdc(None,text)
+ except EficasException:
+ pass
+ index=self.jdc.etapes.index(self)
+ for e in self.etapes:
+ e.niveau=self.niveau
+ self.jdc.etapes=self.jdc.etapes[:index+1]+self.etapes+self.jdc.etapes[index+1:]
+ self.g_context={}
+ self.etapes=[]
+ self.jdc_aux=None
+ CONTEXT.unsetCurrentStep()
+
+ def buildJdcaux(self,fichier,text):
+ """
+ Cree un jdc auxiliaire initialise avec text.
+ Initialise le nom du fichier associe avec fichier
+ N'enregistre pas d'association unite <-> fichier
+ """
+ self.fichier_ini = fichier
+ self.fichier_text= text
+ self.fichier_unite=None
+ self.fichier_err = None
+ try:
+ contexte = self.getContexteJdc(fichier,text)
+ if contexte is None :
+ # Impossible de construire le jdc auxiliaire (sortie par None)
+ # On simule une sortie par exception
+ raise EficasException(tr("Impossible de construire le jeu de commandes correspondant au fichier"))
+ else:
+ # La construction du jdc auxiliaire est allee au bout
+ self.contexte_fichier_init = contexte
+ self.initModif()
+ self.finModif()
+ except:
+ # Impossible de construire le jdc auxiliaire (sortie par exception)
+ l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+ if self.jdc.editor is not None:
+ self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ message= tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l)))
+
+ self.g_context={}
+ self.etapes=[]
+ self.jdc_aux=None
+ self.fichier_err = ''.join(l)
+ self.contexte_fichier_init={}
+ self.initModif()
+ self.finModif()
+ raise EficasException(" ")
+
+ def makeContexteInclude(self,fichier,text):
+ """
+ Cette methode sert a craer un contexte en interpratant un texte source Python.
+ """
+ #print ("makeContexteInclude",fichier)
+ # on recupere le contexte d'un nouveau jdc dans lequel on interprete text
+ contexte = self.getContexteJdc(fichier,text)
+ #print (contexte)
+ if contexte == None :
+ raise EficasException("Impossible de construire le jeu de commandes correspondant au fichier")
+ else:
+ # Pour les macros de type include : INCLUDE, INCLUDE_MATERIAU et POURSUITE
+ # l'attribut g_context est un dictionnaire qui contient les concepts produits par inclusion
+ # l'attribut contexte_fichier_init est un dictionnaire qui contient les concepts produits
+ # en sortie de macro. g_context est obtenu en retirant de contexte_fichier_init les concepts
+ # existants en debut de macro contenus dans context_ini (dans getContexteJdc)
+ # g_context est utilise pour avoir les concepts produits par la macro
+ # contexte_fichier_init est utilise pour avoir les concepts supprimes par la macro
+ self.contexte_fichier_init = contexte
+ #print ("fin makeContexteInclude",fichier)
+
+ def reevalueFichierInitObsolete(self):
+ """Recalcule les concepts produits par le fichier enregistre"""
+ #print "reevalue_fichier_init"
+ old_context=self.contexte_fichier_init
+ try:
+ self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
+ except:
+ l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+ self.fichier_err = ''.join(l)
+ self.g_context={}
+ self.etapes=[]
+ self.jdc_aux=None
+ self.old_contexte_fichier_init=old_context
+ self.contexte_fichier_init={}
+ self.reevalueSdJdc()
+ return
+
+ # L'evaluation s'est bien passee
+ self.fichier_err = None
+ self.old_contexte_fichier_init=old_context
+ self.reevalueSdJdc()
+
+ def updateFichierInit(self,unite):
+ """Reevalue le fichier init sans demander (dans la mesure du possible) a l'utilisateur
+ les noms des fichiers
+ Ceci suppose que les relations entre unites et noms ont ete memorisees prealablement
+ L'include a ete initialise precedemment. Le jdc auxiliaire existe.
+ """
+ #print "updateFichierInit",unite,self.fichier_unite
+ self.old_contexte_fichier_init=self.contexte_fichier_init
+ old_fichier_ini=self.fichier_ini
+ if not hasattr(self,"jdc_aux"):self.jdc_aux=None
+ old_jdc_aux=self.jdc_aux
+
+ #print "updateFichierInit",self,self.parent,self.parent.recorded_units
+
+ if self.fichier_unite is None:
+ # L'unite n'etait pas definie precedemment. On ne change que l'unite
+ #print "updateFichierInit","pas de changement dans include"
+ self.fichier_unite=unite
+ return
+ elif unite == self.fichier_unite :
+ # L'unite n'a pas change
+ #print "updateFichierInit","pas de changement dans include 3"
+ return
+ elif unite != self.fichier_unite :
+ # L'unite etait definie precedemment. On remplace l'include
+ #
+ f,text=self.getFileMemo(unite=unite,fic_origine=self.parent.nom)
+ if f is None:
+ # Le fichier associe n'a pas pu etre defini
+ # on change l'unite associee mais pas l'include
+ #print "updateFichierInit","pas de changement dans include 2"
+ self.fichier_unite=unite
+ return
+ else:
+ self.fichier_ini = f
+ self.fichier_text=text
+ self.fichier_unite=unite
+ #print "updateFichierInit",self.recorded_units
+
+ #print "updateFichierInit",self.fichier_ini,self.fichier_text,self.fichier_unite
+
+ if old_fichier_ini == self.fichier_ini:
+ # Le fichier inclus n'a pas change. On ne recree pas le contexte
+ # mais on enregistre le changement d'association unite <-> fichier
+ #print "updateFichierInit.fichier inchange",self.jdc_aux.context_ini
+ self.parent.recordUnit(unite,self)
+ return
- if old_jdc_aux:
- old_jdc_aux.close()
- self.parent.recordUnit(unite,self)
- # Le contexte du parent doit etre reinitialise car les concepts
- # produits ont change
- self.parent.resetContext()
- # Si des concepts ont disparu lors du changement de fichier, on
- # demande leur suppression
- self.reevalueSdJdc()
- #print "updateFichierInit",self.jdc_aux.context_ini.keys()
-
- def recordUnite(self):
- #print "recordUnite",self.nom
- if self.nom == "POURSUITE":
- self.parent.recordUnit(None,self)
- else:
- if hasattr(self,'fichier_unite') :
- self.parent.recordUnit(self.fichier_unite,self)
-
- def getFileMemo(self, unite=None, fname=None, fic_origine=''):
- """Retourne le nom du fichier et le source correspondant a l'unite unite
- Initialise en plus recorded_units
- """
- #print "getFileMemo",unite,fic_origine,self,self.parent
- #print self.parent.recorded_units
- if unite is None:
- # On est dans le cas d'une poursuite. On ne reutilise aucune unite de parent
- units={}
- else:
- # On est dans le cas d'un include. On reutilise toutes les unites de parent
- units=self.parent.recorded_units
-
- if unite in self.parent.recorded_units:
- f,text,units=self.parent.recorded_units[unite]
- elif self.jdc :
- if fname:
- if not osp.exists(fname):
- raise AsException(fname + tr(" n'est pas un fichier existant"))
- f = fname
- text = open(fname, 'r').read()
- else:
- f,text=self.jdc.getFile(unite=unite, fic_origine=fic_origine)
- else:
- f,text=None,None
-
- self.recorded_units=units
- if f is None and self.jdc.editor:
- self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
- message= tr("Ce fichier ne sera pas pris en compte\nLe fichier associe n'est pas defini"))
- return f,text
-
- def updateContext(self,d):
- """
- Met a jour le contexte contenu dans le dictionnaire d
- Une MACRO_ETAPE peut ajouter plusieurs concepts dans le contexte
- Une fonction enregistree dans op_init peut egalement modifier le contexte
- """
- #print ("updateContext",self,self.nom,d.keys())
- if hasattr(self,"jdc_aux") and self.jdc_aux:
- #ATTENTION: updateContext NE DOIT PAS appeler resetContext
- # car il appelle directement ou indirectement updateContext
- # equivalent a resetContext. Evite les recursions
+ try:
+ self.fichier_err=None
+ self.makeContexteInclude(self.fichier_ini,self.fichier_text)
+ # Les 3 attributs fichier_ini fichier_text recorded_units doivent etre corrects
+ # avant d'appeler changeUnit
+ except:
+ # Erreurs lors de l'evaluation de text dans un JDC auxiliaire
+ l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+ # On conserve la memoire du nouveau fichier
+ # mais on n'utilise pas les concepts crees par ce fichier
+ # on met l'etape en erreur : fichier_err=''.join(l)
+ self.fichier_err=''.join(l)
+ self.g_context={}
+ self.etapes=[]
+ self.jdc_aux=None
+ self.contexte_fichier_init={}
+
+ if old_jdc_aux:
+ old_jdc_aux.close()
+ self.parent.recordUnit(unite,self)
+ # Le contexte du parent doit etre reinitialise car les concepts
+ # produits ont change
+ self.parent.resetContext()
+ # Si des concepts ont disparu lors du changement de fichier, on
+ # demande leur suppression
+ self.reevalueSdJdc()
+ #print "updateFichierInit",self.jdc_aux.context_ini.keys()
+
+ def recordUnite(self):
+ #print "recordUnite",self.nom
+ if self.nom == "POURSUITE":
+ self.parent.recordUnit(None,self)
+ else:
+ if hasattr(self,'fichier_unite') :
+ self.parent.recordUnit(self.fichier_unite,self)
+
+ def getFileMemo(self, unite=None, fname=None, fic_origine=''):
+ """Retourne le nom du fichier et le source correspondant a l'unite unite
+ Initialise en plus recorded_units
+ """
+ #print "getFileMemo",unite,fic_origine,self,self.parent
+ #print self.parent.recorded_units
+ if unite is None:
+ # On est dans le cas d'une poursuite. On ne reutilise aucune unite de parent
+ units={}
+ else:
+ # On est dans le cas d'un include. On reutilise toutes les unites de parent
+ units=self.parent.recorded_units
+
+ if unite in self.parent.recorded_units:
+ f,text,units=self.parent.recorded_units[unite]
+ elif self.jdc :
+ if fname:
+ if not osp.exists(fname):
+ raise AsException(fname + tr(" n'est pas un fichier existant"))
+ f = fname
+ text = open(fname, 'r').read()
+ else:
+ f,text=self.jdc.getFile(unite=unite, fic_origine=fic_origine)
+ else:
+ f,text=None,None
+
+ self.recorded_units=units
+ if f is None and self.jdc.editor:
+ self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ message= tr("Ce fichier ne sera pas pris en compte\nLe fichier associe n'est pas defini"))
+ return f,text
+
+ def updateContext(self,d):
+ """
+ Met a jour le contexte contenu dans le dictionnaire d
+ Une MACRO_ETAPE peut ajouter plusieurs concepts dans le contexte
+ Une fonction enregistree dans op_init peut egalement modifier le contexte
+ """
+ #print ("updateContext",self,self.nom,d.keys())
+ if hasattr(self,"jdc_aux") and self.jdc_aux:
+ #ATTENTION: updateContext NE DOIT PAS appeler resetContext
+ # car il appelle directement ou indirectement updateContext
+ # equivalent a resetContext. Evite les recursions
self.jdc_aux.context_ini=d.copy()
self.jdc_aux.currentContext={}
self.jdc_aux.index_etape_courante=0
#ATTENTION: il ne faut pas utiliser self.jdc_aux.getContexteAvant
#car cet appel conduit a des remontees multiples incoherentes dans le
- # ou les parents.
+ # ou les parents.
#get_context_avant appelle updateContext qui NE DOIT PAS appeler getContexteAvant
#On n'a besoin que d'un update local connaissant
# le contexte amont : d qui sert a reinitialiser self.context_ini
e.updateContext(d)
return
- if type(self.definition.op_init) == types.FunctionType:
- self.definition.op_init(*(self,d))
- if self.sd != None :d[self.sd.nom]=self.sd
- for co in self.sdprods:
- d[co.nom]=co
- #print "updateContext.fin",d.keys()
+ if type(self.definition.op_init) == types.FunctionType:
+ self.definition.op_init(*(self,d))
+ if self.sd != None :d[self.sd.nom]=self.sd
+ for co in self.sdprods:
+ d[co.nom]=co
+ #print "updateContext.fin",d.keys()
#ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro)
- def copy(self):
- etape=Noyau.N_MACRO_ETAPE.MACRO_ETAPE.copy(self)
- if hasattr(etape,"etapes") :etape.etapes=[]
- if hasattr(etape,"jdc_aux") :
- etape.jdc_aux=None
- del etape.fichier_ini
- return etape
-
- def supprime(self):
- #print "supprime",self
- if hasattr(self,"jdc_aux") and self.jdc_aux:
- self.jdc_aux.supprime_aux()
- self.jdc_aux=None
- Noyau.N_MACRO_ETAPE.MACRO_ETAPE.supprime(self)
+ def copy(self):
+ etape=Noyau.N_MACRO_ETAPE.MACRO_ETAPE.copy(self)
+ if hasattr(etape,"etapes") :etape.etapes=[]
+ if hasattr(etape,"jdc_aux") :
+ etape.jdc_aux=None
+ del etape.fichier_ini
+ return etape
+
+ def supprime(self):
+ #print "supprime",self
+ if hasattr(self,"jdc_aux") and self.jdc_aux:
+ self.jdc_aux.supprime_aux()
+ self.jdc_aux=None
+ Noyau.N_MACRO_ETAPE.MACRO_ETAPE.supprime(self)
#ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro)
- def getFile(self,unite=None,fic_origine=''):
- """Retourne le nom du fichier et le source correspondant a l'unite unite
- """
- if self.jdc :
- f,text=self.jdc.getFile(unite=unite,fic_origine=fic_origine)
- else:
- f,text=None,None
- return f,text
-
-
- def makeInclude3(self,fichier=None):
- self.makeIncludeCarmel(fichier)
-
-
- def makeIncludeCND(self,fichier=None):
- unite=999
- if fichier==None : return
- if hasattr(self,'fichier_ini') : print((self.fichier_ini))
- if hasattr(self,'fichier_ini') : return
- self.fichier_ini=fichier
- from acquiertGroupes import getGroupes
- erreur,listeGroupes=getGroupes(fichier)
- if erreur != "" : print ("a traiter")
- texteSources=""
- texteCond=""
- texteNoCond=""
- texteVcut=""
- for groupe in listeGroupes :
- if groupe[0:8]=='CURRENT_': texteSources +=groupe[8:]+"=SOURCE();\n"
- if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
- if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
- #if groupe[0:5]=='VCUT_': texteVcut +=groupe[5:]+"=VCUT();\n"
- if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
- texte=texteSources+texteCond+texteNoCond+texteVcut
- #print (texte)
- self.buildIncludeInclude(texte)
- if CONTEXT.getCurrentStep()==None : CONTEXT.setCurrentStep(self)
- reevalue=0
-
- def makeIncludeCarmel(self,fichier=None):
- # Pour Carmel
- #print "je suis dans makeIncludeCarmel"
- unite=999
- if hasattr(self,'fichier_ini') : return
- reevalue=0
- if hasattr(self,'old_context_fichier_init' ):
- reevalue=1
- for concept in self.old_context_fichier_init.values():
- self.jdc.deleteConcept(concept)
- if fichier == None :
- fichier=str(self.jdc.appliEficas.getFile_dictDonnees())
- if fichier == str("") :
- self.fichier_ini="badfile"
- self.fichier_text=""
- self.fichier_err=tr("Le fichier n est pas defini")
- self.parent.recordUnit(999,self)
- try :
- MCFils=self.getChild('FileName')
- MCFils.setValeur(None)
- except :
- pass
- raise EficasException(self.fichier_err)
- self.fichier_ini = fichier
- f=open(self.fichier_ini,'r')
- self.fichier_text=f.read()
- f.close()
-
- self.contexte_fichier_init={}
- self.fichier_unite=999
- self.fichier_err=None
-
- try:
- #if 1 :
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_include
- except:
- #else:
- traceback.print_exc()
- self.makeIncl2Except()
- raise EficasException(" ")
-
- try:
- #if 1 :
- self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
- self.old_context_fichier_init=self.contexte_fichier_init
- self.parent.recordUnit(unite,self)
- try :
- MCFils=self.getChild('FileName')
- #MCFils.setValeur(fichier)
- #on appelle pas setValeur qui modifie le contexte ce qui fout le bazar
- #pas de modification de bloc
- MCFils.valeur=fichier
- MCFils.val=fichier
- except :
- pass
- except:
- #else:
- self.makeIncl2Except()
- # Cette P*** de ligne suivante ne fonctionne que pour Aster
- # si quelqu un a une idee merci de m en parler
- #CONTEXT.setCurrentStep(self)
-
- def makeInclude2(self,fichier=None):
- # Pour OT
- # gestion de l unicite SVP
- unite=999
-
- if hasattr(self,'fichier_ini') : return
- reevalue=0
- if hasattr(self,'old_context_fichier_init' ):
- reevalue=1
- for concept in self.old_context_fichier_init.values():
- self.jdc.deleteConcept(concept)
-
- if fichier == None :
- fichier=str(self.jdc.appliEficas.getFileVariable())
- if fichier == str("") :
- self.fichier_ini="badfile"
- self.fichier_text=""
- self.fichier_err=tr("Le fichier n est pas defini")
- self.parent.recordUnit(999,self)
- try :
- MCFils=self.getChild('FileName')
- MCFils.setValeur(None)
- except :
- pass
- raise EficasException(self.fichier_err)
-
- self.fichier_ini = fichier
- self.fichier_text = ""
- self.contexte_fichier_init={}
- self.fichier_unite=999
- self.fichier_err=None
- nbVariableOut=0
- try :
- from openturns import WrapperFile
- monWrapper=WrapperFile(fichier)
- data=monWrapper.getWrapperData()
- maVariableListe=data.getVariableList()
- nbVariables=maVariableListe.getSize()
- for i in range(nbVariables) :
- nom=maVariableListe[i].id_
- type=maVariableListe[i].type_
- if type :
- #ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='out',R=%d);\n" % (nom, nom, i)
- ligneTexte=""
- nbVariableOut=nbVariableOut+1
- else :
- ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='in',R=%d);\n" % (nom, nom, i)
- self.fichier_text = self.fichier_text + ligneTexte
- except:
- self.makeIncl2Except()
- raise EficasException(" ")
-
- if nbVariableOut != 1 :
- self.makeIncl2Except(mess=tr("le fichier doit contenir une unique variable de sortie"))
- raise EficasException(" ")
-
- try:
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_include
- except:
- traceback.print_exc()
- self.makeIncl2Except()
- raise EficasException(" ")
-
- try:
- self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
- self.old_context_fichier_init=self.contexte_fichier_init
- self.parent.recordUnit(unite,self)
- try :
- MCFils=self.getChild('FileName')
- MCFils.setValeur(fichier)
- except :
- pass
- except:
- self.makeIncl2Except()
-
- # recalcul validite pour la matrice eventuelle
- if reevalue :
- for e in self.jdc.etapes:
- if e.nom == "VARIABLE" :
- e.state="modified"
- try :
- mc=e.getChild('ModelVariable')
- mc.state="modified"
- except :
- pass
- if e.nom == "CORRELATION" :
- e.state="modified"
- try :
- mc=e.getChild('Matrix')
- mc.state="modified"
- mcFeuille=mc.getChild('CorrelationMatrix')
- mcFeuille.state="modified"
- except :
- pass
- e.isValid()
-
- def makeIncl2Except(self,mess=None):
- l=traceback.format_exception_only(tr("Fichier invalide"),sys.exc_info()[1])
- if self.jdc.editor is not None:
- if mess == None :
- self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
- message= tr("Le contenu de ce fichier ne sera pas pris en compte\n %s",\
- ''.join(l)))
-
- else :
- self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
- message=tr(mess))
- #self.parent.recordUnit(unite,self)
- self.g_context={}
- self.etapes=[]
- self.jdc_aux=None
- self.fichier_err = ''.join(l)
- self.contexte_fichier_init={}
- try :
+ def getFile(self,unite=None,fic_origine=''):
+ """Retourne le nom du fichier et le source correspondant a l'unite unite
+ """
+ if self.jdc :
+ f,text=self.jdc.getFile(unite=unite,fic_origine=fic_origine)
+ else:
+ f,text=None,None
+ return f,text
+
+
+ def makeInclude3(self,fichier=None):
+ self.makeIncludeCarmel(fichier)
+
+
+ def makeIncludeCND(self,fichier=None):
+ unite=999
+ if fichier==None : return
+ if hasattr(self,'fichier_ini') : print((self.fichier_ini))
+ if hasattr(self,'fichier_ini') : return
+ self.fichier_ini=fichier
+ from acquiertGroupes import getGroupes
+ erreur,listeGroupes=getGroupes(fichier)
+ if erreur != "" : print ("a traiter")
+ texteSources=""
+ texteCond=""
+ texteNoCond=""
+ texteVcut=""
+ for groupe in listeGroupes :
+ if groupe[0:8]=='CURRENT_': texteSources +=groupe[8:]+"=SOURCE();\n"
+ if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
+ if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
+ #if groupe[0:5]=='VCUT_': texteVcut +=groupe[5:]+"=VCUT();\n"
+ if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
+ texte=texteSources+texteCond+texteNoCond+texteVcut
+ #print (texte)
+ self.buildIncludeInclude(texte)
+ if CONTEXT.getCurrentStep()==None : CONTEXT.setCurrentStep(self)
+ reevalue=0
+
+ def makeIncludeCarmel(self,fichier=None):
+ # Pour Carmel
+ #print "je suis dans makeIncludeCarmel"
+ unite=999
+ if hasattr(self,'fichier_ini') : return
+ reevalue=0
+ if hasattr(self,'old_context_fichier_init' ):
+ reevalue=1
+ for concept in self.old_context_fichier_init.values():
+ self.jdc.deleteConcept(concept)
+ if fichier == None :
+ fichier=str(self.jdc.appliEficas.getFile_dictDonnees())
+ if fichier == str("") :
+ self.fichier_ini="badfile"
+ self.fichier_text=""
+ self.fichier_err=tr("Le fichier n est pas defini")
+ self.parent.recordUnit(999,self)
+ try :
+ MCFils=self.getChild('FileName')
+ MCFils.setValeur(None)
+ except :
+ pass
+ raise EficasException(self.fichier_err)
+ self.fichier_ini = fichier
+ f=open(self.fichier_ini,'r')
+ self.fichier_text=f.read()
+ f.close()
+
+ self.contexte_fichier_init={}
+ self.fichier_unite=999
+ self.fichier_err=None
+
+ try:
+ #if 1 :
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+ except:
+ #else:
+ traceback.print_exc()
+ self.makeIncl2Except()
+ raise EficasException(" ")
+
+ try:
+ #if 1 :
+ self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
+ self.old_context_fichier_init=self.contexte_fichier_init
+ self.parent.recordUnit(unite,self)
+ try :
+ MCFils=self.getChild('FileName')
+ #MCFils.setValeur(fichier)
+ #on appelle pas setValeur qui modifie le contexte ce qui fout le bazar
+ #pas de modification de bloc
+ MCFils.valeur=fichier
+ MCFils.val=fichier
+ except :
+ pass
+ except:
+ #else:
+ self.makeIncl2Except()
+ # Cette P*** de ligne suivante ne fonctionne que pour Aster
+ # si quelqu un a une idee merci de m en parler
+ #CONTEXT.setCurrentStep(self)
+
+ def makeInclude2(self,fichier=None):
+ # Pour OT
+ # gestion de l unicite SVP
+ unite=999
+
+ if hasattr(self,'fichier_ini') : return
+ reevalue=0
+ if hasattr(self,'old_context_fichier_init' ):
+ reevalue=1
+ for concept in self.old_context_fichier_init.values():
+ self.jdc.deleteConcept(concept)
+
+ if fichier == None :
+ fichier=str(self.jdc.appliEficas.getFileVariable())
+ if fichier == str("") :
+ self.fichier_ini="badfile"
+ self.fichier_text=""
+ self.fichier_err=tr("Le fichier n est pas defini")
+ self.parent.recordUnit(999,self)
+ try :
+ MCFils=self.getChild('FileName')
+ MCFils.setValeur(None)
+ except :
+ pass
+ raise EficasException(self.fichier_err)
+
+ self.fichier_ini = fichier
+ self.fichier_text = ""
+ self.contexte_fichier_init={}
+ self.fichier_unite=999
+ self.fichier_err=None
+ nbVariableOut=0
+ try :
+ from openturns import WrapperFile
+ monWrapper=WrapperFile(fichier)
+ data=monWrapper.getWrapperData()
+ maVariableListe=data.getVariableList()
+ nbVariables=maVariableListe.getSize()
+ for i in range(nbVariables) :
+ nom=maVariableListe[i].id_
+ type=maVariableListe[i].type_
+ if type :
+ #ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='out',R=%d);\n" % (nom, nom, i)
+ ligneTexte=""
+ nbVariableOut=nbVariableOut+1
+ else :
+ ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='in',R=%d);\n" % (nom, nom, i)
+ self.fichier_text = self.fichier_text + ligneTexte
+ except:
+ self.makeIncl2Except()
+ raise EficasException(" ")
+
+ if nbVariableOut != 1 :
+ self.makeIncl2Except(mess=tr("le fichier doit contenir une unique variable de sortie"))
+ raise EficasException(" ")
+
+ try:
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+ except:
+ traceback.print_exc()
+ self.makeIncl2Except()
+ raise EficasException(" ")
+
+ try:
+ self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
+ self.old_context_fichier_init=self.contexte_fichier_init
+ self.parent.recordUnit(unite,self)
+ try :
+ MCFils=self.getChild('FileName')
+ MCFils.setValeur(fichier)
+ except :
+ pass
+ except:
+ self.makeIncl2Except()
+
+ # recalcul validite pour la matrice eventuelle
+ if reevalue :
+ for e in self.jdc.etapes:
+ if e.nom == "VARIABLE" :
+ e.state="modified"
+ try :
+ mc=e.getChild('ModelVariable')
+ mc.state="modified"
+ except :
+ pass
+ if e.nom == "CORRELATION" :
+ e.state="modified"
+ try :
+ mc=e.getChild('Matrix')
+ mc.state="modified"
+ mcFeuille=mc.getChild('CorrelationMatrix')
+ mcFeuille.state="modified"
+ except :
+ pass
+ e.isValid()
+
+ def makeIncl2Except(self,mess=None):
+ l=traceback.format_exception_only(tr("Fichier invalide"),sys.exc_info()[1])
+ if self.jdc.editor is not None:
+ if mess == None :
+ self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ message= tr("Le contenu de ce fichier ne sera pas pris en compte\n %s",\
+ ''.join(l)))
+
+ else :
+ self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ message=tr(mess))
+ #self.parent.recordUnit(unite,self)
+ self.g_context={}
+ self.etapes=[]
+ self.jdc_aux=None
+ self.fichier_err = ''.join(l)
+ self.contexte_fichier_init={}
+ try :
MCFils=self.getChild('FileName')
MCFils.setValeur(None)
- except :
+ except :
pass
#ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro)
- #def makeInclude(self, unite=None, fname=None):
- def makeInclude(self, unite=None, fname=None):
- """
- Inclut un fichier dont l'unite logique est unite
- Cette methode est appelee par la fonction sd_prod de la macro INCLUDE
- Si l'INCLUDE est invalide, la methode doit produire une exception
- Sinon on retourne None. Les concepts produits par l'INCLUDE sont
- pris en compte par le JDC parent lors du calcul du contexte (appel de ???)
- """
- # On supprime l'attribut unite qui bloque l'evaluation du source de l'INCLUDE
- # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
- # Si unite n'a pas de valeur, l'etape est forcement invalide. On peut retourner None
- #if not unite and not fname:
- # return
- # 2020 on supprime unite
- # attention cependant c est utilise pour poursuite
- # PNPN a revoir
- if not fname : return
-
- if not hasattr(self,'fichier_ini') :
- # Si le fichier n'est pas defini on le demande
- f,text=self.getFileMemo(unite=unite, fname=fname, fic_origine=self.parent.nom)
- # On memorise le fichier retourne
- self.fichier_ini = f
- self.fichier_text = text
- self.contexte_fichier_init={}
- self.fichier_unite=unite
- self.fichier_err=None
- try:
- import Extensions.jdc_include
- except:
- traceback.print_exc()
- raise EficasException("pb import Extensions")
- self.JdC_aux=Extensions.jdc_include.JdC_include
-
- #print "makeInclude",self.fichier_ini,self.fichier_text
- if f is None and not text:
- self.fichier_err=tr("Le fichier INCLUDE n est pas defini")
- self.parent.recordUnit(unite,self)
- raise EficasException(self.fichier_err)
-
- try:
- self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
- self.parent.recordUnit(unite,self)
- except:
- l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1]))
- if self.jdc.editor:
- self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
- message=tr("Le contenu de ce fichier ne sera pas pris en compte\n"+''.join(l)))
- self.parent.recordUnit(unite,self)
- self.g_context={}
- self.etapes=[]
- self.jdc_aux=None
- self.fichier_err = ''.join(l)
- self.contexte_fichier_init={}
- raise EficasException(" ")
-
- else:
- # Si le fichier est deja defini on ne reevalue pas le fichier
- # et on leve une exception si une erreur a ete enregistree
- self.updateFichierInit(unite)
- self.fichier_unite=unite
- if self.fichier_err is not None: raise EficasException(self.fichier_err)
- #print ('self.g_context', self.g_context)
-
+ #def makeInclude(self, unite=None, fname=None):
+ def makeInclude(self, unite=None, fname=None):
+ """
+ Inclut un fichier dont l'unite logique est unite
+ Cette methode est appelee par la fonction sd_prod de la macro INCLUDE
+ Si l'INCLUDE est invalide, la methode doit produire une exception
+ Sinon on retourne None. Les concepts produits par l'INCLUDE sont
+ pris en compte par le JDC parent lors du calcul du contexte (appel de ???)
+ """
+ # On supprime l'attribut unite qui bloque l'evaluation du source de l'INCLUDE
+ # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
+ # Si unite n'a pas de valeur, l'etape est forcement invalide. On peut retourner None
+ #if not unite and not fname:
+ # return
+ # 2020 on supprime unite
+ # attention cependant c est utilise pour poursuite
+ # PNPN a revoir
+ if not fname : return
+
+ if not hasattr(self,'fichier_ini') :
+ # Si le fichier n'est pas defini on le demande
+ f,text=self.getFileMemo(unite=unite, fname=fname, fic_origine=self.parent.nom)
+ # On memorise le fichier retourne
+ self.fichier_ini = f
+ self.fichier_text = text
+ self.contexte_fichier_init={}
+ self.fichier_unite=unite
+ self.fichier_err=None
+ try:
+ import Extensions.jdc_include
+ except:
+ traceback.print_exc()
+ raise EficasException("pb import Extensions")
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+
+ #print "makeInclude",self.fichier_ini,self.fichier_text
+ if f is None and not text:
+ self.fichier_err=tr("Le fichier INCLUDE n est pas defini")
+ self.parent.recordUnit(unite,self)
+ raise EficasException(self.fichier_err)
+
+ try:
+ self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
+ self.parent.recordUnit(unite,self)
+ except:
+ l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1]))
+ if self.jdc.editor:
+ self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ message=tr("Le contenu de ce fichier ne sera pas pris en compte\n"+''.join(l)))
+ self.parent.recordUnit(unite,self)
+ self.g_context={}
+ self.etapes=[]
+ self.jdc_aux=None
+ self.fichier_err = ''.join(l)
+ self.contexte_fichier_init={}
+ raise EficasException(" ")
+
+ else:
+ # Si le fichier est deja defini on ne reevalue pas le fichier
+ # et on leve une exception si une erreur a ete enregistree
+ self.updateFichierInit(unite)
+ self.fichier_unite=unite
+ if self.fichier_err is not None: raise EficasException(self.fichier_err)
+ #print ('self.g_context', self.g_context)
+
#ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro)
- def makeContexte(self,fichier,text):
- """
- Cette methode sert a creer un contexte pour INCLUDE_MATERIAU
- en interpretant un texte source Python
- Elle est appelee par la fonction sd_prod d'INCLUDE_MATERIAU
- """
- #print "makeContexte",fichier
- # On supprime l'attribut mat qui bloque l'evaluation du source de l'INCLUDE_MATERIAU
- # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
- if hasattr(self,'mat'):del self.mat
- if not hasattr(self,'fichier_ini') or self.fichier_ini != fichier or self.fichier_mater != self.nom_mater:
- # le fichier est nouveau ou change
- self.fichier_ini =fichier
- self.fichier_unite =fichier
- self.fichier_mater=self.nom_mater
- self.fichier_text=text
- self.fichier_err=None
- self.contexte_fichier_init={}
- # On specifie la classe a utiliser pour le JDC auxiliaire
- try:
- import Extensions.jdc_include
- self.JdC_aux=Extensions.jdc_include.JdC_include
- except:
- raise EficasException(" ")
- try:
- self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
- if not self.nom_mater in self.g_context :
- #Pour permettre de lire un jeu de commandes avec des INCLUDE_MATERIAU errones
- self.g_context[self.nom_mater]=None
- if self.parent: self.parent.g_context[self.nom_mater]=None
- except:
- l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1]))
- self.fichier_err = ''.join(l)
- self.g_context={}
- #Pour permettre de lire un jeu de commandes avec des INCLUDE_MATERIAU errones
- if self.parent:
- self.parent.g_context[self.nom_mater]=None
- self.g_context[self.nom_mater]=None
- #-------------
- self.etapes=[]
- self.jdc_aux=None
- self.contexte_fichier_init={}
- raise EficasException(" ")
- else:
- # le fichier est le meme on ne le reevalue pas
- # et on leve une exception si une erreur a ete enregistree
- if self.fichier_err is not None: raise EficasException(self.fichier_err)
+ def makeContexte(self,fichier,text):
+ """
+ Cette methode sert a creer un contexte pour INCLUDE_MATERIAU
+ en interpretant un texte source Python
+ Elle est appelee par la fonction sd_prod d'INCLUDE_MATERIAU
+ """
+ #print "makeContexte",fichier
+ # On supprime l'attribut mat qui bloque l'evaluation du source de l'INCLUDE_MATERIAU
+ # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
+ if hasattr(self,'mat'):del self.mat
+ if not hasattr(self,'fichier_ini') or self.fichier_ini != fichier or self.fichier_mater != self.nom_mater:
+ # le fichier est nouveau ou change
+ self.fichier_ini =fichier
+ self.fichier_unite =fichier
+ self.fichier_mater=self.nom_mater
+ self.fichier_text=text
+ self.fichier_err=None
+ self.contexte_fichier_init={}
+ # On specifie la classe a utiliser pour le JDC auxiliaire
+ try:
+ import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
+ except:
+ raise EficasException(" ")
+ try:
+ self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
+ if not self.nom_mater in self.g_context :
+ #Pour permettre de lire un jeu de commandes avec des INCLUDE_MATERIAU errones
+ self.g_context[self.nom_mater]=None
+ if self.parent: self.parent.g_context[self.nom_mater]=None
+ except:
+ l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1]))
+ self.fichier_err = ''.join(l)
+ self.g_context={}
+ #Pour permettre de lire un jeu de commandes avec des INCLUDE_MATERIAU errones
+ if self.parent:
+ self.parent.g_context[self.nom_mater]=None
+ self.g_context[self.nom_mater]=None
+ #-------------
+ self.etapes=[]
+ self.jdc_aux=None
+ self.contexte_fichier_init={}
+ raise EficasException(" ")
+ else:
+ # le fichier est le meme on ne le reevalue pas
+ # et on leve une exception si une erreur a ete enregistree
+ if self.fichier_err is not None: raise EficasException(self.fichier_err)
#ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro)
- def updateSdprod(self,cr='non'):
- # Cette methode peut etre appelee dans EFICAS avec des mots cles de
- # la commande modifies. Ceci peut conduire a la construction ou
- # a la reconstruction d'etapes dans le cas d'INCLUDE ou d'INCLUDE_MATERIAU
- # Il faut donc positionner le current_step avant l'appel
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(self)
- valid=Validation.V_MACRO_ETAPE.MACRO_ETAPE.updateSdprod(self,cr=cr)
- CONTEXT.unsetCurrentStep()
- return valid
-
-#ATTENTION SURCHARGE: cette methode surcharge celle de Noyau a garder en synchro
- def buildSd(self,nom):
- """
- Methode de Noyau surchargee pour poursuivre malgre tout
- si une erreur se produit pendant la creation du concept produit
- """
- try:
- sd=Noyau.N_MACRO_ETAPE.MACRO_ETAPE.buildSd(self,nom)
- except :
- # return None
- #except AsException,e:
- # Une erreur s'est produite lors de la construction du concept
- # Comme on est dans EFICAS, on essaie de poursuivre quand meme
- # Si on poursuit, on a le choix entre deux possibilites :
- # 1. on annule la sd associee a self
- # 2. on la conserve mais il faut la retourner
- # On choisit de l'annuler
- # En plus il faut rendre coherents sdnom et sd.nom
- self.sd=None
- self.sdnom=None
- self.state="unchanged"
- self.valid=0
-
- return self.sd
-
-#ATTENTION SURCHARGE: cette methode surcharge celle de Noyau a garder en synchro
- def makePoursuite(self):
- """ Cette methode est appelee par la fonction sd_prod de la macro POURSUITE
- """
- #print "makePoursuite"
- if not hasattr(self,'fichier_ini') :
- # Si le fichier n'est pas defini on le demande
- f,text=self.getFileMemo(fic_origine=self.parent.nom)
- # On memorise le fichier retourne
- self.fichier_ini = f
- self.fichier_unite = None
- self.fichier_text = text
- self.fichier_err=None
- try:
- import Extensions.jdc_include
- except:
- traceback.print_exc()
- raise EficasException(" ")
- self.JdC_aux=Extensions.jdc_include.JdC_poursuite
- self.contexte_fichier_init={}
- #print "makePoursuite",self.fichier_ini,self.fichier_text
-
- if f is None:
- self.fichier_err="Le fichier POURSUITE n'est pas defini"
- self.jdc_aux=None
- self.parent.recordUnit(None,self)
- raise EficasException(self.fichier_err)
-
- try:
- self.makeContexteInclude(self.fichier_ini,self.fichier_text)
- self.parent.recordUnit(None,self)
- except:
- l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- if self.jdc.editor:
- self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier poursuite"),
- message=tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l)))
- self.parent.recordUnit(None,self)
- self.g_context={}
- self.etapes=[]
- self.jdc_aux=None
- self.fichier_err = ''.join(l)
- self.contexte_fichier_init={}
- raise EficasException(" ")
-
- else:
- # Si le fichier est deja defini on ne reevalue pas le fichier
- # et on leve une exception si une erreur a ete enregistree
- self.updateFichierInit(None)
- if self.fichier_err is not None: raise EficasException(self.fichier_err)
+ def updateSdprod(self,cr='non'):
+ # Cette methode peut etre appelee dans EFICAS avec des mots cles de
+ # la commande modifies. Ceci peut conduire a la construction ou
+ # a la reconstruction d'etapes dans le cas d'INCLUDE ou d'INCLUDE_MATERIAU
+ # Il faut donc positionner le current_step avant l'appel
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(self)
+ valid=Validation.V_MACRO_ETAPE.MACRO_ETAPE.updateSdprod(self,cr=cr)
+ CONTEXT.unsetCurrentStep()
+ return valid
+
+#ATTENTION SURCHARGE: cette methode surcharge celle de Noyau a garder en synchro
+ def buildSd(self,nom):
+ """
+ Methode de Noyau surchargee pour poursuivre malgre tout
+ si une erreur se produit pendant la creation du concept produit
+ """
+ try:
+ sd=Noyau.N_MACRO_ETAPE.MACRO_ETAPE.buildSd(self,nom)
+ except :
+ # return None
+ #except AsException,e:
+ # Une erreur s'est produite lors de la construction du concept
+ # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+ # Si on poursuit, on a le choix entre deux possibilites :
+ # 1. on annule la sd associee a self
+ # 2. on la conserve mais il faut la retourner
+ # On choisit de l'annuler
+ # En plus il faut rendre coherents sdnom et sd.nom
+ self.sd=None
+ self.sdnom=None
+ self.state="unchanged"
+ self.valid=0
+
+ return self.sd
+
+#ATTENTION SURCHARGE: cette methode surcharge celle de Noyau a garder en synchro
+ def makePoursuite(self):
+ """ Cette methode est appelee par la fonction sd_prod de la macro POURSUITE
+ """
+ #print "makePoursuite"
+ if not hasattr(self,'fichier_ini') :
+ # Si le fichier n'est pas defini on le demande
+ f,text=self.getFileMemo(fic_origine=self.parent.nom)
+ # On memorise le fichier retourne
+ self.fichier_ini = f
+ self.fichier_unite = None
+ self.fichier_text = text
+ self.fichier_err=None
+ try:
+ import Extensions.jdc_include
+ except:
+ traceback.print_exc()
+ raise EficasException(" ")
+ self.JdC_aux=Extensions.jdc_include.JdC_poursuite
+ self.contexte_fichier_init={}
+ #print "makePoursuite",self.fichier_ini,self.fichier_text
+
+ if f is None:
+ self.fichier_err="Le fichier POURSUITE n'est pas defini"
+ self.jdc_aux=None
+ self.parent.recordUnit(None,self)
+ raise EficasException(self.fichier_err)
+
+ try:
+ self.makeContexteInclude(self.fichier_ini,self.fichier_text)
+ self.parent.recordUnit(None,self)
+ except:
+ l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+ if self.jdc.editor:
+ self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier poursuite"),
+ message=tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l)))
+ self.parent.recordUnit(None,self)
+ self.g_context={}
+ self.etapes=[]
+ self.jdc_aux=None
+ self.fichier_err = ''.join(l)
+ self.contexte_fichier_init={}
+ raise EficasException(" ")
+
+ else:
+ # Si le fichier est deja defini on ne reevalue pas le fichier
+ # et on leve une exception si une erreur a ete enregistree
+ self.updateFichierInit(None)
+ if self.fichier_err is not None: raise EficasException(self.fichier_err)
from . import I_MCCOMPO
class MCBLOC(I_MCCOMPO.MCCOMPO):
- def getNomDsXML(self):
- return self.parent.getNomDsXML()
-
-
+ def getNomDsXML(self):
+ return self.parent.getNomDsXML()
from . import CONNECTOR
class MCCOMPO(I_OBJECT.OBJECT):
- def getLabelText(self):
- """
- Retourne le label de self
- utilise pour l'affichage dans l'arbre
- """
- return tr(self.nom)
-
- def getListeMcOrdonnee(self,liste,dico):
- """
- Retourne la liste ordonnee (suivant le catalogue) des mots-cles
- d'une entite composee dont le chemin complet est donne sous forme
- d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
- il faut encore rearranger cette liste (certains mots-cles deja
- presents ne doivent plus etre proposes, regles ...)
- """
- return self.filtreListeMc(self.getListeMcOrdonneeBrute(liste,dico))
-
- def getListeMcOrdonneeBrute(self,liste,dico):
- """
- Retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
- d'une entite composee dont le chemin complet est donne sous forme
- d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
- """
- for arg in liste:
- objet_cata = dico[arg]
- dico=objet_cata.entites
- l=[]
- specifique=0
- for obj in list(dico.keys()) :
- if not(hasattr(dico[obj],'cache')) or dico[obj].cache==0 :
- l.append(obj)
+ def getLabelText(self):
+ """
+ Retourne le label de self
+ utilise pour l'affichage dans l'arbre
+ """
+ return tr(self.nom)
+
+ def getListeMcOrdonnee(self,liste,dico):
+ """
+ Retourne la liste ordonnee (suivant le catalogue) des mots-cles
+ d'une entite composee dont le chemin complet est donne sous forme
+ d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+ il faut encore rearranger cette liste (certains mots-cles deja
+ presents ne doivent plus etre proposes, regles ...)
+ """
+ return self.filtreListeMc(self.getListeMcOrdonneeBrute(liste,dico))
+
+ def getListeMcOrdonneeBrute(self,liste,dico):
+ """
+ Retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
+ d'une entite composee dont le chemin complet est donne sous forme
+ d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+ """
+ for arg in liste:
+ objet_cata = dico[arg]
+ dico=objet_cata.entites
+ l=[]
+ specifique=0
+ for obj in list(dico.keys()) :
+ if not(hasattr(dico[obj],'cache')) or dico[obj].cache==0 :
+ l.append(obj)
+ else :
+ specifique=1
+ if specifique == 1 : return l
+ return objet_cata.ordre_mc
+
+ def filtreListeMc(self,liste_brute):
+ """
+ Cette methode est appelee par EFICAS afin de presenter a
+ l'utilisateur la liste des enfants possibles de self actualisee
+ en fonction du contexte de self. En clair, sont supprimes de la
+ liste des possibles (fournie par la definition), les mots-cles
+ exclus par les regles de self et les mots-cles ne pouvant plus
+ etre repetes
+ """
+ liste = copy(liste_brute)
+ listeMcPresents = self.listeMcPresents()
+ # on enleve les mots-cles non permis par les regles
+ for regle in self.definition.regles:
+ # la methode purgeListe est a developper pour chaque regle qui
+ # influe sur la liste de choix a proposer a l'utilisateur
+ # --> EXCLUS,UN_PARMI,PRESENT_ABSENT
+ liste = regle.purgeListe(liste,listeMcPresents)
+ # on enleve les mots-cles dont l'occurrence est deja atteinte
+ liste_copy = copy(liste)
+ for k in liste_copy:
+ objet = self.getChild(k,restreint = 'oui')
+ if objet != None :
+ # l'objet est deja present : il faut distinguer plusieurs cas
+ if isinstance(objet,MCSIMP):
+ # un mot-cle simple ne peut pas etre repete
+ liste.remove(k)
+ elif isinstance(objet,MCBLOC):
+ # un bloc conditionnel ne doit pas apparaitre dans la liste de choix
+ liste.remove(k)
+ elif isinstance(objet,MCFACT):
+ # un mot-cle facteur ne peut pas etre repete plus de self.max fois
+ if objet.definition.max == 1:
+ liste.remove(k)
+ elif isinstance(objet,MCList):
+ try :
+ nb_occur_maxi = objet[0].definition.max
+ if len(objet) >= nb_occur_maxi:
+ liste.remove(k)
+ except:
+ pass
+ else :
+ #XXX CCAR : les MCNUPLET ne sont pas traites
+ if CONTEXT.debug : print(' ',k,' est un objet de type inconnu :',type(objet))
else :
- specifique=1
- if specifique == 1 : return l
- return objet_cata.ordre_mc
-
- def filtreListeMc(self,liste_brute):
- """
- Cette methode est appelee par EFICAS afin de presenter a
- l'utilisateur la liste des enfants possibles de self actualisee
- en fonction du contexte de self. En clair, sont supprimes de la
- liste des possibles (fournie par la definition), les mots-cles
- exclus par les regles de self et les mots-cles ne pouvant plus
- etre repetes
- """
- liste = copy(liste_brute)
- listeMcPresents = self.listeMcPresents()
- # on enleve les mots-cles non permis par les regles
- for regle in self.definition.regles:
- # la methode purgeListe est a developper pour chaque regle qui
- # influe sur la liste de choix a proposer a l'utilisateur
- # --> EXCLUS,UN_PARMI,PRESENT_ABSENT
- liste = regle.purgeListe(liste,listeMcPresents)
- # on enleve les mots-cles dont l'occurrence est deja atteinte
- liste_copy = copy(liste)
- for k in liste_copy:
- objet = self.getChild(k,restreint = 'oui')
- if objet != None :
- # l'objet est deja present : il faut distinguer plusieurs cas
- if isinstance(objet,MCSIMP):
- # un mot-cle simple ne peut pas etre repete
- liste.remove(k)
- elif isinstance(objet,MCBLOC):
- # un bloc conditionnel ne doit pas apparaitre dans la liste de choix
- liste.remove(k)
- elif isinstance(objet,MCFACT):
- # un mot-cle facteur ne peut pas etre repete plus de self.max fois
- if objet.definition.max == 1:
- liste.remove(k)
- elif isinstance(objet,MCList):
- try :
- nb_occur_maxi = objet[0].definition.max
- if len(objet) >= nb_occur_maxi:
- liste.remove(k)
- except:
- pass
- else :
- #XXX CCAR : les MCNUPLET ne sont pas traites
- if CONTEXT.debug : print(' ',k,' est un objet de type inconnu :',type(objet))
- else :
- # l'objet est absent : on enleve de la liste les blocs
- if self.definition.entites[k].statut=='c' :
- liste.remove(k)
- if self.definition.entites[k].label=='BLOC':
- liste.remove(k)
- # Pour corriger les exces qui pourraient etre commis dans la methode purgeListe
- # des regles, on essaie de compenser comme suit :
- # on ajoute les mots cles facteurs presents dont l'occurence n'est pas atteinte
- for k in listeMcPresents:
- if k in liste:continue
- objet = self.getChild(k,restreint = 'oui')
- if isinstance(objet,MCFACT):
- # un mot-cle facteur ne peut pas etre repete plus de self.max fois
- if objet.definition.max > 1:
- liste.append(k)
- elif isinstance(objet,MCList):
- nb_occur_maxi = objet[0].definition.max
- if len(objet) < nb_occur_maxi:
- liste.append(k)
- return liste
-
- def listeMcPresents(self):
- """
- Retourne la liste des noms des mots-cles fils de self presents construite
- a partir de self.mcListe
- """
- l=[]
- for v in self.mcListe:
- k=v.nom
- l.append(k)
- return l
-
- def getIndexChild(self,nom_fils):
- """
- Retourne l'index dans la liste des fils de self du nouveau fils de nom nom_fils
- Permet de savoir a quelle position il faut ajouter un nouveau mot-cle
- """
- cata_ordonne = self.jdc.cata_ordonne_dico
- liste_noms_mc_ordonnee = self.getListeMcOrdonneeBrute(self.getGenealogie(),cata_ordonne)
- liste_noms_mc_presents = self.listeMcPresents()
- index=0
- for nom in liste_noms_mc_ordonnee:
- if nom == nom_fils:break
- if nom not in liste_noms_mc_presents :continue
- index=index+1
- return index
-
- def chercheIndiceDsLeContenu(self,objet) :
- # uniquement pour Pyxb
- # ajoute la taille des les Blocs
- # faut -il chercher plus loin ds les petits-enfants ?
- if objet.nature == 'MCList' : objet=objet[0]
- leRang=0
- positionDsLaListe=0
- try :
- positionDsLaListe=self.mcListe.index(objet)
- positionDsLaListeDeFactSiFact =0
- except :
- for mc in self.mcListe:
- if mc.nature == 'MCList':
- try :
- positionDsLaListeDeFactSiFact=mc.index(objet)
- break
- except :
- positionDsLaListe=positionDsLaListe+1
- else : positionDsLaListe=positionDsLaListe+1
- i=0
- while i < positionDsLaListe :
- leRang= leRang + self.mcListe[i].longueurDsArbre()
- i=i+1
- leRang=leRang+positionDsLaListeDeFactSiFact
- return leRang
-
-
- def ordonneListeMc(self,listeMc_a_ordonner,liste_noms_mc_ordonnee):
- """
- Retourne listeMc_a_ordonner ordonnee suivant l'ordre
- donne par liste_noms_mc_ordonnee
- """
- liste = []
- # on transforme liste_a_ordonner en un dictionnaire (plus facile a consulter)
- d_mc = {}
- for mc in listeMc_a_ordonner:
- d_mc[mc.nom]=mc
- # on construit la liste des objets ordonnes
- for nom_mc in liste_noms_mc_ordonnee:
- if nom_mc in d_mc:
- liste.append(d_mc.get(nom_mc))
- # on la retourne
- return liste
-
- def suppEntite(self,objet) :
- """
- Supprime le fils 'objet' de self :
- Retourne 1 si la suppression a pu etre effectuee,
- Retourne 0 dans le cas contraire
- """
- if not objet in self.mcListe:
- # Impossible de supprimer objet. Il n'est pas dans mcListe
- return 0
-
- self.initModif()
- objet.delObjPyxb()
-# PNPNPN a corriger
- try :
- objet.deleteRef()
- except : pass
- self.mcListe.remove(objet)
- CONNECTOR.Emit(self,"supp",objet)
- objet.deleteMcGlobal()
- objet.updateConditionBloc()
- objet.supprime()
- self.etape.modified()
- self.finModif()
- return 1
-
- def isOblig(self):
- return 0
-
- def addEntite(self,name,pos=None):
- """
- Ajoute le mot-cle name a la liste des mots-cles de
- l'objet MCCOMPOSE
- """
- #print ('addEntite', name, pos)
- self.initModif()
- if type(name)==bytes or type(name) == str :
- # on est en mode creation d'un motcle
- if self.ispermis(name) == 0 : return 0
- objet=self.definition.entites[name](val=None,nom=name,parent=self)
- else :
- # dans ce cas on est en mode copie d'un motcle
- objet = name
- # Appel de la methode qui fait le menage dans les references
- # sur les concepts produits (verification que les concepts existent
- # dans le contexte de la commande courante).
- objet.verifExistenceSd()
-
- # On verifie que l'ajout d'objet est autorise
- if self.ispermis(objet) == 0:
- self.jdc.editor.afficheAlerte(tr("Erreur"),
- tr("L'objet %(v_1)s ne peut etre un fils de %(v_2)s",\
- {'v_1': objet.nom, 'v_2': self.nom}))
+ # l'objet est absent : on enleve de la liste les blocs
+ if self.definition.entites[k].statut=='c' :
+ liste.remove(k)
+ if self.definition.entites[k].label=='BLOC':
+ liste.remove(k)
+ # Pour corriger les exces qui pourraient etre commis dans la methode purgeListe
+ # des regles, on essaie de compenser comme suit :
+ # on ajoute les mots cles facteurs presents dont l'occurence n'est pas atteinte
+ for k in listeMcPresents:
+ if k in liste:continue
+ objet = self.getChild(k,restreint = 'oui')
+ if isinstance(objet,MCFACT):
+ # un mot-cle facteur ne peut pas etre repete plus de self.max fois
+ if objet.definition.max > 1:
+ liste.append(k)
+ elif isinstance(objet,MCList):
+ nb_occur_maxi = objet[0].definition.max
+ if len(objet) < nb_occur_maxi:
+ liste.append(k)
+ return liste
+
+ def listeMcPresents(self):
+ """
+ Retourne la liste des noms des mots-cles fils de self presents construite
+ a partir de self.mcListe
+ """
+ l=[]
+ for v in self.mcListe:
+ k=v.nom
+ l.append(k)
+ return l
+
+ def getIndexChild(self,nom_fils):
+ """
+ Retourne l'index dans la liste des fils de self du nouveau fils de nom nom_fils
+ Permet de savoir a quelle position il faut ajouter un nouveau mot-cle
+ """
+ cata_ordonne = self.jdc.cata_ordonne_dico
+ liste_noms_mc_ordonnee = self.getListeMcOrdonneeBrute(self.getGenealogie(),cata_ordonne)
+ liste_noms_mc_presents = self.listeMcPresents()
+ index=0
+ for nom in liste_noms_mc_ordonnee:
+ if nom == nom_fils:break
+ if nom not in liste_noms_mc_presents :continue
+ index=index+1
+ return index
+
+ def chercheIndiceDsLeContenu(self,objet) :
+ # uniquement pour Pyxb
+ # ajoute la taille des les Blocs
+ # faut -il chercher plus loin ds les petits-enfants ?
+ if objet.nature == 'MCList' : objet=objet[0]
+ leRang=0
+ positionDsLaListe=0
+ try :
+ positionDsLaListe=self.mcListe.index(objet)
+ positionDsLaListeDeFactSiFact =0
+ except :
+ for mc in self.mcListe:
+ if mc.nature == 'MCList':
+ try :
+ positionDsLaListeDeFactSiFact=mc.index(objet)
+ break
+ except :
+ positionDsLaListe=positionDsLaListe+1
+ else : positionDsLaListe=positionDsLaListe+1
+ i=0
+ while i < positionDsLaListe :
+ leRang= leRang + self.mcListe[i].longueurDsArbre()
+ i=i+1
+ leRang=leRang+positionDsLaListeDeFactSiFact
+ return leRang
+
+
+ def ordonneListeMc(self,listeMc_a_ordonner,liste_noms_mc_ordonnee):
+ """
+ Retourne listeMc_a_ordonner ordonnee suivant l'ordre
+ donne par liste_noms_mc_ordonnee
+ """
+ liste = []
+ # on transforme liste_a_ordonner en un dictionnaire (plus facile a consulter)
+ d_mc = {}
+ for mc in listeMc_a_ordonner:
+ d_mc[mc.nom]=mc
+ # on construit la liste des objets ordonnes
+ for nom_mc in liste_noms_mc_ordonnee:
+ if nom_mc in d_mc:
+ liste.append(d_mc.get(nom_mc))
+ # on la retourne
+ return liste
+
+ def suppEntite(self,objet) :
+ """
+ Supprime le fils 'objet' de self :
+ Retourne 1 si la suppression a pu etre effectuee,
+ Retourne 0 dans le cas contraire
+ """
+ #print ('suppEntite', self.nom,objet.nom)
+ if not objet in self.mcListe:
+ # Impossible de supprimer objet. Il n'est pas dans mcListe
+ return 0
+
+ self.initModif()
+ objet.delObjPyxb()
+ objet.deleteRef()
+ self.mcListe.remove(objet)
+ CONNECTOR.Emit(self,"supp",objet)
+ objet.deleteMcGlobal()
+ objet.updateConditionBloc()
+ objet.supprime()
+ while self.etape.doitEtreRecalculee == True :
+ #print (' je suis dans le while')
+ self.etape.doitEtreRecalculee = False
+ self.etape.deepUpdateConditionBlocApresSuppression()
+ self.etape.modified()
self.finModif()
+ return 1
+
+ def isOblig(self):
return 0
- # On cherche s'il existe deja un mot cle de meme nom
- old_obj = self.getChild(objet.nom,restreint = 'oui')
- if not old_obj :
- # on normalize l'objet
- objet=objet.normalize()
- # Le mot cle n'existe pas encore. On l'ajoute a la position
- # demandee (pos)
- if pos == None :
- self.mcListe.append(objet)
- else :
- self.mcListe.insert(pos,objet)
- # Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
- objet.reparent(self)
- if self.cata.modeleMetier :
- if isinstance(objet,MCList): objet[0].addObjPyxb(self.chercheIndiceDsLeContenu(objet))
- else : objet.addObjPyxb(self.chercheIndiceDsLeContenu(objet))
- CONNECTOR.Emit(self,"add",objet)
- objet.updateMcGlobal()
- objet.updateConditionBloc()
- self.finModif()
- return objet
- else:
- # Le mot cle existe deja. Si le mot cle est repetable,
- # on cree une liste d'objets. Dans le cas contraire,
- # on emet un message d'erreur.
- if not old_obj.isRepetable():
- self.jdc.editor.afficheAlerte(tr("Erreur"),tr("L'objet %s ne peut pas etre repete", objet.nom))
+ def addEntite(self,name,pos=None):
+ """
+ Ajoute le mot-cle name a la liste des mots-cles de
+ l'objet MCCOMPOSE
+ """
+ #print ('addEntite', name, pos)
+ self.initModif()
+ if type(name)==bytes or type(name) == str :
+ # on est en mode creation d'un motcle
+ if self.ispermis(name) == 0 : return 0
+ objet=self.definition.entites[name](val=None,nom=name,parent=self)
+ else :
+ # dans ce cas on est en mode copie d'un motcle
+ objet = name
+ # Appel de la methode qui fait le menage dans les references
+ # sur les concepts produits (verification que les concepts existent
+ # dans le contexte de la commande courante).
+ objet.verifExistenceSd()
+
+ # On verifie que l'ajout d'objet est autorise
+ if self.ispermis(objet) == 0:
+ self.jdc.editor.afficheAlerte(tr("Erreur"),
+ tr("L'objet %(v_1)s ne peut etre un fils de %(v_2)s",\
+ {'v_1': objet.nom, 'v_2': self.nom}))
self.finModif()
return 0
- else:
- # une liste d'objets de meme type existe deja
- old_obj.addEntite(objet)
+
+ # On cherche s'il existe deja un mot cle de meme nom
+ old_obj = self.getChild(objet.nom,restreint = 'oui')
+ if not old_obj :
+ # on normalize l'objet
+ objet=objet.normalize()
+ # Le mot cle n'existe pas encore. On l'ajoute a la position
+ # demandee (pos)
+ if pos == None :
+ self.mcListe.append(objet)
+ else :
+ self.mcListe.insert(pos,objet)
+ # Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
+ objet.reparent(self)
if self.cata.modeleMetier :
- if isinstance(objet,MCList): objet[0].addObjPyxb(self.chercheIndiceDsLeContenu(objet))
- else : objet.addObjPyxb(self.chercheIndiceDsLeContenu(objet))
+ if isinstance(objet,MCList): objet[0].addObjPyxb(self.chercheIndiceDsLeContenu(objet))
+ else : objet.addObjPyxb(self.chercheIndiceDsLeContenu(objet))
+ CONNECTOR.Emit(self,"add",objet)
+ objet.updateMcGlobal()
+ objet.updateConditionBloc()
self.finModif()
- return old_obj
-
- def ispermis(self,fils):
- """
- Retourne 1 si l'objet de nom nom_fils
- est bien permis, cad peut bien etre un fils de self,
- Retourne 0 sinon
- """
- if type(fils) == bytes or type(fils) == str :
- # on veut juste savoir si self peut avoir un fils de nom 'fils'
- if fils in self.definition.entites:
- return 1
- else :
- return 0
- #elif type(fils) == types.InstanceType:
- elif isinstance(fils,object):
- # fils est un objet (commande,mcf,mclist)
- # on est dans le cas d'une tentative de copie de l'objet
- # on veut savoir si l'objet peut bien etre un fils de self :
- # la verification du nom de suffit pas (plusieurs commandes
- # ont le meme mot-cle facteur AFFE ... et c'est l'utilisateur
- # qui choisit le pere d'ou un risque d'erreur)
- if not fils.nom in self.definition.entites:
- return 0
- else:
- if fils.parent.nom != self.nom : return 0
- return 1
-
- def updateConcept(self,sd):
- for child in self.mcListe :
- child.updateConcept(sd)
-
- def deleteConcept(self,sd):
- """
- Inputs :
- - sd=concept detruit
- Fonction :
- Mettre a jour les fils de l objet suite a la disparition du
- concept sd
- Seuls les mots cles simples MCSIMP font un traitement autre que
- de transmettre aux fils
- """
- for child in self.mcListe :
- child.deleteConcept(sd)
-
- def replaceConcept(self,old_sd,sd):
- """
- Inputs :
- - old_sd=concept remplace
- - sd = nouveau concept
- Fonction :
- Mettre a jour les fils de l objet suite au remplacement du
- concept old_sd
- """
- for child in self.mcListe :
- child.replaceConcept(old_sd,sd)
-
- def getListeMcInconnus(self):
- """
- Retourne la liste des mots-cles inconnus dans self
- """
- l_mc = []
- if self.reste_val != {}:
- for k,v in self.reste_val.items() :
- l_mc.append([self,k,v])
- for child in self.mcListe :
- if child.isValid() : continue
- l_child = child.getListeMcInconnus()
- for mc in l_child:
- l = [self]
- l.extend(mc)
- l_mc.append(l)
- return l_mc
-
- def deepUpdateConditionBlocApresCreation(self):
- # idem deepUpdateConditionBloc sauf qu on cherche les MC qui
- # avait ete laisse de cote par la construction
- #print ('Ihm deepUpdateConditionBloc', self.nom, self.reste_val)
- if self.reste_val != {} : self.buildMcApresGlobal()
- for mcobj in self.mcListe:
- if mcobj.nature=="MCList" :
- for obj in mcobj : obj.deepUpdateConditionBlocApresCreation()
- elif hasattr(mcobj,"deepUpdateConditionBlocApresCreation"):
- mcobj.deepUpdateConditionBlocApresCreation()
-
-
- def deepUpdateConditionBloc(self):
- """
- Parcourt l'arborescence des mcobject et realise l'update
- des blocs conditionnels par appel de la methode updateConditionBloc
- """
- self._updateConditionBloc()
- for mcobj in self.mcListe:
- if hasattr(mcobj,"deepUpdateConditionBloc"):
- mcobj.deepUpdateConditionBloc()
-
- def updateConditionBloc(self):
- """
- Realise l'update des blocs conditionnels fils de self
- et propage au parent
- """
- self._updateConditionBloc()
- if self.parent:self.parent.updateConditionBloc()
-
- def _updateConditionBloc(self):
- """
- Realise l'update des blocs conditionnels fils de self
- """
- dict = self.creeDictCondition(self.mcListe,condition=1)
- #print ('_updateConditionBloc', dict)
- for k,v in self.definition.entites.items():
- if v.label != 'BLOC' :continue
- globs= self.jdc and self.jdc.condition_context or {}
- bloc=self.getChild(k,restreint = 'oui')
- presence=v.verifPresence(dict,globs)
- if presence and not bloc:
- # le bloc doit etre present
- # mais le bloc n'est pas present et il doit etre cree
- #print "AJOUT BLOC",k
- pos=self.getIndexChild(k)
- self.addEntite(k,pos)
- if not presence and bloc:
- # le bloc devrait etre absent
- # le bloc est present : il faut l'enlever
- #print "SUPPRESSION BLOC",k,bloc
- self.suppEntite(bloc)
-
- def verifConditionBloc(self):
- """
- Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la definition) de self
- et retourne deux listes :
- - la premiere contient les noms des blocs a rajouter
- - la seconde contient les noms des blocs a supprimer
- """
- liste_ajouts = []
- liste_retraits = []
- dict = self.creeDictCondition(self.mcListe,condition=1)
- for k,v in self.definition.entites.items():
- if v.label=='BLOC' :
- globs= self.jdc and self.jdc.condition_context or {}
- if v.verifPresence(dict,globs):
- # le bloc doit etre present
- if not self.getChild(k,restreint = 'oui'):
- # le bloc n'est pas present et il doit etre cree
- liste_ajouts.append(k)
- else :
- # le bloc doit etre absent
- if self.getChild(k,restreint = 'oui'):
- # le bloc est present : il faut l'enlever
- liste_retraits.append(k)
- return liste_ajouts,liste_retraits
-
- def verifExistenceSd(self):
- """
- Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
- avant etape, sinon enleve la reference a ces concepts
- """
- for motcle in self.mcListe :
- motcle.verifExistenceSd()
-
- def updateMcGlobal(self):
- """
- Met a jour les mots cles globaux enregistres dans l'etape parente
- et dans le jdc parent.
- Un mot cle compose ne peut pas etre global. Il se contente de passer
- la requete a ses fils.
- """
- for motcle in self.mcListe :
- motcle.updateMcGlobal()
-
- def deleteMcGlobal(self):
- for motcle in self.mcListe :
- motcle.deleteMcGlobal()
- try :
- motcle.updateMcGlobal()
- except :
- pass
-
- def initModifUp(self):
- Validation.V_MCCOMPO.MCCOMPO.initModifUp(self)
- CONNECTOR.Emit(self,"valid")
+ return objet
+ else:
+ # Le mot cle existe deja. Si le mot cle est repetable,
+ # on cree une liste d'objets. Dans le cas contraire,
+ # on emet un message d'erreur.
+ if not old_obj.isRepetable():
+ self.jdc.editor.afficheAlerte(tr("Erreur"),tr("L'objet %s ne peut pas etre repete", objet.nom))
+ self.finModif()
+ return 0
+ else:
+ # une liste d'objets de meme type existe deja
+ old_obj.addEntite(objet)
+ if self.cata.modeleMetier :
+ if isinstance(objet,MCList): objet[0].addObjPyxb(self.chercheIndiceDsLeContenu(objet))
+ else : objet.addObjPyxb(self.chercheIndiceDsLeContenu(objet))
+ self.finModif()
+ return old_obj
+
+ def ispermis(self,fils):
+ """
+ Retourne 1 si l'objet de nom nom_fils
+ est bien permis, cad peut bien etre un fils de self,
+ Retourne 0 sinon
+ """
+ if type(fils) == bytes or type(fils) == str :
+ # on veut juste savoir si self peut avoir un fils de nom 'fils'
+ if fils in self.definition.entites:
+ return 1
+ else :
+ return 0
+ #elif type(fils) == types.InstanceType:
+ elif isinstance(fils,object):
+ # fils est un objet (commande,mcf,mclist)
+ # on est dans le cas d'une tentative de copie de l'objet
+ # on veut savoir si l'objet peut bien etre un fils de self :
+ # la verification du nom de suffit pas (plusieurs commandes
+ # ont le meme mot-cle facteur AFFE ... et c'est l'utilisateur
+ # qui choisit le pere d'ou un risque d'erreur)
+ if not fils.nom in self.definition.entites:
+ return 0
+ else:
+ if fils.parent.nom != self.nom : return 0
+ return 1
+
+ def updateConcept(self,sd):
+ for child in self.mcListe :
+ child.updateConcept(sd)
+
+ def deleteConcept(self,sd):
+ """
+ Inputs :
+ - sd=concept detruit
+ Fonction :
+ Mettre a jour les fils de l objet suite a la disparition du
+ concept sd
+ Seuls les mots cles simples MCSIMP font un traitement autre que
+ de transmettre aux fils
+ """
+ for child in self.mcListe :
+ child.deleteConcept(sd)
+
+ def replaceConcept(self,old_sd,sd):
+ """
+ Inputs :
+ - old_sd=concept remplace
+ - sd = nouveau concept
+ Fonction :
+ Mettre a jour les fils de l objet suite au remplacement du
+ concept old_sd
+ """
+ for child in self.mcListe :
+ child.replaceConcept(old_sd,sd)
+
+ def getListeMcInconnus(self):
+ """
+ Retourne la liste des mots-cles inconnus dans self
+ """
+ l_mc = []
+ if self.reste_val != {}:
+ for k,v in self.reste_val.items() :
+ l_mc.append([self,k,v])
+ for child in self.mcListe :
+ if child.isValid() : continue
+ l_child = child.getListeMcInconnus()
+ for mc in l_child:
+ l = [self]
+ l.extend(mc)
+ l_mc.append(l)
+ return l_mc
+
+ def deepUpdateConditionBlocApresSuppression(self):
+ self._updateConditionBloc()
+ for mcobj in self.mcListe:
+ if mcobj.nature=="MCList" :
+ for obj in mcobj :
+ obj.deepUpdateConditionBlocApresSuppression()
+ obj.state='modified'
+ elif hasattr(mcobj,"deepUpdateConditionBlocApresSuppression"):
+ mcobj.deepUpdateConditionBlocApresSuppression()
+
+
+ def deepUpdateConditionBlocApresCreation(self):
+ # idem deepUpdateConditionBloc sauf qu on cherche les MC qui
+ # avait ete laisse de cote par la construction
+ # Comme on est en construction, on ne devrait pas avoir a detruire de bloc
+ # si on vient d un xml invalide, il faudra probablement traiter les blocs deja crees
+ # reste_val est au niveau du MCCompo, il faut donc tout parcourir
+ #print ('dans deepUpdateConditionBlocApresCreation pour', self.nom)
+ if self.reste_val != {} : self.buildMcApresGlobalEnCreation()
+ for mcobj in self.mcListe:
+ if mcobj.nature=="MCList" :
+ for obj in mcobj :
+ obj.deepUpdateConditionBlocApresCreation()
+ obj.state='modified'
+ elif hasattr(mcobj,"deepUpdateConditionBlocApresCreation"):
+ mcobj.deepUpdateConditionBlocApresCreation()
+ mcobj.state='modified'
+ self.state='modified'
+
+ def deepUpdateConditionBloc(self):
+ """
+ Parcourt l'arborescence des mcobject et realise l'update
+ des blocs conditionnels par appel de la methode updateConditionBloc
+ """
+ self._updateConditionBloc()
+ for mcobj in self.mcListe:
+ if hasattr(mcobj,"deepUpdateConditionBloc"):
+ mcobj.deepUpdateConditionBloc()
+ mcobj.state='modified'
+ if self.nature == 'PROCEDURE' :
+ if self.doitEtreRecalculee :
+ self.doitEtreRecalculee = False
+ self.deepUpdateConditionBloc()
+
+ def updateConditionBloc(self):
+ """
+ Realise l'update des blocs conditionnels fils de self
+ et propage au parent
+ """
+ self._updateConditionBloc()
+ if self.parent:self.parent.updateConditionBloc()
+
+ def _updateConditionBloc(self):
+ """
+ Realise l'update des blocs conditionnels fils de self
+ """
+ dict = self.creeDictCondition(self.mcListe,condition=1)
+ doitEtreReecrit=False
+ for k,v in self.definition.entites.items():
+ if v.label != 'BLOC' :continue
+ globs= self.jdc and self.jdc.condition_context or {}
+ bloc=self.getChild(k,restreint = 'oui')
+ presence=v.verifPresence(dict,globs)
+ if presence and not bloc:
+ # le bloc doit etre present
+ # mais le bloc n'est pas present et il doit etre cree
+ pos=self.getIndexChild(k)
+ self.addEntite(k,pos)
+ #print ("AJOUT",k,pos)
+ if not presence and bloc:
+ # le bloc devrait etre absent
+ # le bloc est present : il faut l'enlever
+ #print ("SUPPRESSION BLOC",k,bloc)
+ self.suppEntite(bloc)
+ doitEtreReecrit=True
+
+ def verifConditionBloc(self):
+ """
+ 2021 : obsolete ?
+ Evalue les conditions de tous les blocs fils possibles
+ (en fonction du catalogue donc de la definition) de self
+ et retourne deux listes :
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
+ """
+ liste_ajouts = []
+ liste_retraits = []
+ dict = self.creeDictCondition(self.mcListe,condition=1)
+ for k,v in self.definition.entites.items():
+ if v.label=='BLOC' :
+ globs= self.jdc and self.jdc.condition_context or {}
+ if v.verifPresence(dict,globs):
+ # le bloc doit etre present
+ if not self.getChild(k,restreint = 'oui'):
+ # le bloc n'est pas present et il doit etre cree
+ liste_ajouts.append(k)
+ else :
+ # le bloc doit etre absent
+ if self.getChild(k,restreint = 'oui'):
+ # le bloc est present : il faut l'enlever
+ liste_retraits.append(k)
+ return liste_ajouts,liste_retraits
+
+ def verifExistenceSd(self):
+ """
+ Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
+ avant etape, sinon enleve la reference a ces concepts
+ """
+ for motcle in self.mcListe :
+ motcle.verifExistenceSd()
+
+ def updateMcGlobal(self):
+ """
+ Met a jour les mots cles globaux enregistres dans l'etape parente
+ et dans le jdc parent.
+ Un mot cle compose ne peut pas etre global. Il se contente de passer
+ la requete a ses fils.
+ """
+ for motcle in self.mcListe :
+ motcle.updateMcGlobal()
+
+ def deleteMcGlobal(self):
+ for motcle in self.mcListe :
+ motcle.deleteMcGlobal()
+ # PN : je ne comprends pas les 4 lignes suivantes
+ # du coup je les vire
+ # surtout en dehors dans le for ?
+ # 20201217
+ #try :
+ # print (motcle)
+ # motcle.updateMcGlobal()
+ #except :
+ # pass
+ def supprimeUserAssd(self):
+ for objUserAssd in self.userASSDCrees:
+ objUserAssd.supprime(self)
+ def initModifUp(self):
+ Validation.V_MCCOMPO.MCCOMPO.initModifUp(self)
+ CONNECTOR.Emit(self,"valid")
import Noyau
class MCFACT(I_MCCOMPO.MCCOMPO):
- def isRepetable(self):
- """
- Indique si l'objet est repetable.
- Retourne 1 si le mot-cle facteur self peut etre repete
- Retourne 0 dans le cas contraire
- """
- if self.definition.max > 1:
- # marche avec '**'
- return 1
- else :
- return 0
+ def isRepetable(self):
+ """
+ Indique si l'objet est repetable.
+ Retourne 1 si le mot-cle facteur self peut etre repete
+ Retourne 0 dans le cas contraire
+ """
+ if self.definition.max > 1:
+ # marche avec '**'
+ return 1
+ else :
+ return 0
- def isOblig(self):
- if self.definition.statut != 'o' : return 0
- objet = self.parent.getChild(self.nom)
- if len(objet) > 1 : return 0
- else : return 1
+ def isOblig(self):
+ if self.definition.statut != 'o' : return 0
+ objet = self.parent.getChild(self.nom)
+ if len(objet) > 1 : return 0
+ else : return 1
- def getMinMax(self):
- """
- Retourne les valeurs min et max admissibles pour la valeur de self
- """
- return self.definition.min,self.definition.max
+ def getMinMax(self):
+ """
+ Retourne les valeurs min et max admissibles pour la valeur de self
+ """
+ return self.definition.min,self.definition.max
- def getNomDsXML(self):
- # en xml on a une sequence si max est superieur a 1
- # sinon non
- objet = self.parent.getChild(self.nom, restreint='oui')
- if len(objet) > 1 :
- index = objet.getIndex(self)
- nom = self.nom + "[" + str(index) + "]"
- else :
- if self.definition.max == 1 : nom = self.nom
- else : nom = self.nom+"[0]"
- nomDsXML=self.parent.getNomDsXML()+"."+nom
- return nomDsXML
+ def getNomDsXML(self):
+ # en xml on a une sequence si max est superieur a 1
+ # sinon non
+ objet = self.parent.getChild(self.nom, restreint='oui')
+ if len(objet) > 1 :
+ index = objet.getIndex(self)
+ nom = self.nom + "[" + str(index) + "]"
+ else :
+ if self.definition.max == 1 : nom = self.nom
+ else : nom = self.nom+"[0]"
+ nomDsXML=self.parent.getNomDsXML()+"."+nom
+ return nomDsXML
- def getLabelText(self):
- """
- Retourne le label de self suivant qu'il s'agit d'un MCFACT
- isole ou d'un MCFACT appartenant a une MCList :
- utilisee pour l'affichage dans l'arbre
- """
- objet = self.parent.getChild(self.nom, restreint='oui')
- # objet peut-etre self ou une MCList qui contient self ...
- if objet is None or objet is self:
- return tr("Erreur - mclist inexistante : %s", self.nom)
+ def getLabelText(self):
+ """
+ Retourne le label de self suivant qu'il s'agit d'un MCFACT
+ isole ou d'un MCFACT appartenant a une MCList :
+ utilisee pour l'affichage dans l'arbre
+ """
+ objet = self.parent.getChild(self.nom, restreint='oui')
+ # objet peut-etre self ou une MCList qui contient self ...
+ if objet is None or objet is self:
+ return tr("Erreur - mclist inexistante : %s", self.nom)
- try:
- if len(objet) > 1 :
- index = objet.getIndex(self)+1 # + 1 a cause de la numerotation qui commence a 0
- return tr(self.nom) +'_'+repr(index)+':'
- else:
- return tr(self.nom)
- except:
- return tr("Erreur - mot cle facteur de nom : %s", self.nom)
+ try:
+ if len(objet) > 1 :
+ index = objet.getIndex(self)+1 # + 1 a cause de la numerotation qui commence a 0
+ return tr(self.nom) +'_'+repr(index)+':'
+ else:
+ return tr(self.nom)
+ except:
+ return tr("Erreur - mot cle facteur de nom : %s", self.nom)
- def getGenealogiePrecise(self):
- nom=self.getLabelText()
- if nom[-1]==':' : nom=nom[0:-1]
- if self.parent:
- l=self.parent.getGenealogiePrecise()
- l.append(nom.strip())
- return l
- else:
- return [nom.strip()]
+ def getGenealogiePrecise(self):
+ nom=self.getLabelText()
+ if nom[-1]==':' : nom=nom[0:-1]
+ if self.parent:
+ l=self.parent.getGenealogiePrecise()
+ l.append(nom.strip())
+ return l
+ else:
+ return [nom.strip()]
- def initModif(self):
- """
- Met l'etat de l'objet a modified et propage au parent
- qui vaut None s'il n'existe pas
- """
- self.state = 'modified'
- parent= hasattr(self,"alt_parent") and self.alt_parent or self.parent
- if parent:
- parent.initModif()
+ def initModif(self):
+ """
+ Met l'etat de l'objet a modified et propage au parent
+ qui vaut None s'il n'existe pas
+ """
+ self.state = 'modified'
+ parent= hasattr(self,"alt_parent") and self.alt_parent or self.parent
+ if parent:
+ parent.initModif()
- def finModif(self):
- """
- Methode appelee apres qu'une modification a ete faite afin de declencher
- d'eventuels traitements post-modification
- """
- #print "finModif",self
- # pour les objets autres que les commandes, aucun traitement specifique
- # on remonte l'info de fin de modif au parent
- CONNECTOR.Emit(self,"valid")
- parent= hasattr(self,"alt_parent") and self.alt_parent or self.parent
- if parent:
- parent.finModif()
+ def finModif(self):
+ """
+ Methode appelee apres qu'une modification a ete faite afin de declencher
+ d'eventuels traitements post-modification
+ """
+ #print "finModif",self
+ # pour les objets autres que les commandes, aucun traitement specifique
+ # on remonte l'info de fin de modif au parent
+ CONNECTOR.Emit(self,"valid")
+ parent= hasattr(self,"alt_parent") and self.alt_parent or self.parent
+ if parent:
+ parent.finModif()
- def normalize(self):
- """ Retourne le MCFACT normalise. Pour un MCFACT isole, l'objet normalise
- est une MCLIST de longueur 1 qui contient ce MCFACT
- """
- new_obj = self.definition.list_instance()
- new_obj.init(nom=self.nom,parent=None)
- new_obj.append(self)
- return new_obj
+ def normalize(self):
+ """ Retourne le MCFACT normalise. Pour un MCFACT isole, l'objet normalise
+ est une MCLIST de longueur 1 qui contient ce MCFACT
+ """
+ new_obj = self.definition.list_instance()
+ new_obj.init(nom=self.nom,parent=None)
+ new_obj.append(self)
+ return new_obj
- def supprime(self):
- self.alt_parent=None
- Noyau.N_MCFACT.MCFACT.supprime(self)
+ def supprime(self):
+ self.alt_parent=None
+ Noyau.N_MCFACT.MCFACT.supprime(self)
from . import CONNECTOR
class MCList:
- def isMCList(self):
- """
- Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut)
- """
- return 1
-
- def getIndex(self,objet):
- """
- Retourne la position d'objet dans la liste self
- """
- return self.data.index(objet)
-
- def ajoutPossible(self):
- """
- Methode booleenne qui retourne 1 si on peut encore ajouter une occurrence
- de l'element que contient self, 0 sinon
- """
- max = self.data[0].definition.max
- if max == '**' or max == float('inf'):
- return 1
- else:
- if len(self) < max :
+ def isMCList(self):
+ """
+ Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut)
+ """
return 1
- else:
- return 0
-
- def isRepetable(self):
- """
- Indique si l'objet est repetable.
- Retourne 1 si le mot-cle facteur self peut etre repete
- Retourne 0 dans le cas contraire
- """
- if self.data[0].definition.max > 1:
- # marche avec '**'
- return 1
- else :
- return 0
-
- def isOblig(self):
- """
- Une MCList n'est jamais obligatoire (meme si le MCFACT qu'elle represente l'est
- """
- return self.data[0].definition.statut=='o'
-
- def suppEntite(self,obj):
- """
- Supprime le mot cle facteur obj de la MCLIST
- """
- if obj not in self:
- return 0
-
- self.initModif()
- self.remove(obj)
- CONNECTOR.Emit(self,"supp",obj)
- self.updateConditionBloc()
- obj.delObjPyxb()
- obj.supprime()
- self.etape.modified()
- self.finModif()
- return 1
-
- def addEntite(self,obj,pos=None):
- """
- Ajoute le mot cle facteur obj a la MCLIST a la position pos
- Retourne None si l'ajout est impossible
- """
- if type(obj)==bytes or type(obj) == str :
- # on est en mode creation d'un motcle
- raise EficasException(tr("traitement non-prevu"))
-
- if not self.ajoutPossible():
- self.jdc.editor.afficheAlerte(tr("Erreur"),
- tr("L'objet %s ne peut pas etre ajoute", obj.nom))
- return None
-
- if self.nom != obj.nom:
- return None
-
- if obj.isMCList():
- obj=obj.data[0]
-
- # traitement du copier coller seulement
- # Les autres cas d'ajout sont traites dans MCFACT
- self.initModif()
- obj.verifExistenceSd()
- obj.reparent(self.parent)
- if pos is None:
- self.append(obj)
- else:
- self.insert(pos,obj)
- CONNECTOR.Emit(self,"add",obj)
- self.finModif()
- self.updateConditionBloc()
- return obj
-
- def listeMcPresents(self):
- return []
-
- def updateConcept(self,sd):
- for child in self.data :
- child.updateConcept(sd)
-
- def deleteConcept(self,sd):
- """
- Inputs :
- - sd=concept detruit
- Fonction : Mettre a jour les fils de l objet suite a la disparition
- du concept sd
- Seuls les mots cles simples MCSIMP font un traitement autre
- que de transmettre aux fils
- """
- for child in self.data :
- child.deleteConcept(sd)
-
- def replaceConcept(self,old_sd,sd):
- """
- Inputs :
- - old_sd=concept remplace
- - sd=nouveau concept
- Fonction : Mettre a jour les fils de l objet suite au remplacement
- du concept old_sd
- """
- for child in self.data :
- child.replaceConcept(old_sd,sd)
-
- def getDocu(self):
- return self.data[0].definition.getDocu()
-
- def getListeMcInconnus(self):
- """
- Retourne la liste des mots-cles inconnus dans self
- """
- l_mc = []
- for mcfact in self.data :
- if mcfact.isValid() : continue
- l_child = mcfact.getListeMcInconnus()
- for mc in l_child:
- l = [self]
- l.extend(mc)
- l_mc.append(l)
- return l_mc
-
- def verifConditionRegles(self,liste_presents):
- """
- Retourne la liste des mots-cles a rajouter pour satisfaire les regles
- en fonction de la liste des mots-cles presents
- """
- # Sans objet pour une liste de mots cles facteurs
- return []
-
- def deepUpdateConditionBloc(self):
- """
- Parcourt l'arborescence des mcobject et realise l'update
- des blocs conditionnels par appel de la methode updateConditionBloc
- """
- #print "deepUpdateConditionBloc",self
- for mcfact in self.data :
- mcfact.deepUpdateConditionBloc()
-
- def updateConditionBloc(self):
- """
- Propage la mise a jour des conditions au parent.
- Une liste ne fait pas de traitement sur les conditions
- """
- if self.parent: self.parent.updateConditionBloc()
-
- def verifConditionBloc(self):
- """
- Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la definition) de self et
- retourne deux listes :
- - la premiere contient les noms des blocs a rajouter
- - la seconde contient les noms des blocs a supprimer
- """
- # Sans objet pour une liste de mots cles facteurs (a voir !!!)
- return [],[]
-
- def initModif(self):
- """
- Met l'etat de l'objet a modified et propage au parent
- qui vaut None s'il n'existe pas
- """
- self.state = 'modified'
- if self.parent:
- self.parent.initModif()
-
- def finModif(self):
- """
- Methode appelee apres qu'une modification a ete faite afin de declencher
- d'eventuels traitements post-modification
- """
- #print "finModif",self
- CONNECTOR.Emit(self,"valid")
- if self.parent:
- self.parent.finModif()
-
- def getGenealogiePrecise(self):
- if self.parent:
- return self.parent.getGenealogiePrecise()
- else:
+
+ def getIndex(self,objet):
+ """
+ Retourne la position d'objet dans la liste self
+ """
+ return self.data.index(objet)
+
+ def ajoutPossible(self):
+ """
+ Methode booleenne qui retourne 1 si on peut encore ajouter une occurrence
+ de l'element que contient self, 0 sinon
+ """
+ max = self.data[0].definition.max
+ if max == '**' or max == float('inf'):
+ return 1
+ else:
+ if len(self) < max :
+ return 1
+ else:
+ return 0
+
+ def isRepetable(self):
+ """
+ Indique si l'objet est repetable.
+ Retourne 1 si le mot-cle facteur self peut etre repete
+ Retourne 0 dans le cas contraire
+ """
+ if self.data[0].definition.max > 1:
+ # marche avec '**'
+ return 1
+ else :
+ return 0
+
+ def isOblig(self):
+ """
+ Une MCList n'est jamais obligatoire (meme si le MCFACT qu'elle represente l'est
+ """
+ return self.data[0].definition.statut=='o'
+
+ def suppEntite(self,obj):
+ """
+ Supprime le mot cle facteur obj de la MCLIST
+ """
+ if obj not in self:
+ return 0
+
+ self.initModif()
+ self.remove(obj)
+ CONNECTOR.Emit(self,"supp",obj)
+ self.updateConditionBloc()
+ obj.delObjPyxb()
+ obj.supprime()
+ self.etape.modified()
+ self.finModif()
+ return 1
+
+ def addEntite(self,obj,pos=None):
+ """
+ Ajoute le mot cle facteur obj a la MCLIST a la position pos
+ Retourne None si l'ajout est impossible
+ """
+ if type(obj)==bytes or type(obj) == str :
+ # on est en mode creation d'un motcle
+ raise EficasException(tr("traitement non-prevu"))
+
+ if not self.ajoutPossible():
+ self.jdc.editor.afficheAlerte(tr("Erreur"),
+ tr("L'objet %s ne peut pas etre ajoute", obj.nom))
+ return None
+
+ if self.nom != obj.nom:
+ return None
+
+ if obj.isMCList():
+ obj=obj.data[0]
+
+ # traitement du copier coller seulement
+ # Les autres cas d'ajout sont traites dans MCFACT
+ self.initModif()
+ obj.verifExistenceSd()
+ obj.reparent(self.parent)
+ if pos is None:
+ self.append(obj)
+ else:
+ self.insert(pos,obj)
+ CONNECTOR.Emit(self,"add",obj)
+ self.finModif()
+ self.updateConditionBloc()
+ return obj
+
+ def listeMcPresents(self):
return []
- def getGenealogie(self):
- """
- Retourne la liste des noms des ascendants.
- Un objet MCList n'est pas enregistre dans la genealogie.
- XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
- """
- if self.parent:
- return self.parent.getGenealogie()
- else:
+ def updateConcept(self,sd):
+ for child in self.data :
+ child.updateConcept(sd)
+
+ def deleteRef(self):
+ for child in self.data :
+ child.deleteRef()
+
+ def deleteConcept(self,sd):
+ """
+ Inputs :
+ - sd=concept detruit
+ Fonction : Mettre a jour les fils de l objet suite a la disparition
+ du concept sd
+ Seuls les mots cles simples MCSIMP font un traitement autre
+ que de transmettre aux fils
+ """
+ for child in self.data :
+ child.deleteConcept(sd)
+
+ def replaceConcept(self,old_sd,sd):
+ """
+ Inputs :
+ - old_sd=concept remplace
+ - sd=nouveau concept
+ Fonction : Mettre a jour les fils de l objet suite au remplacement
+ du concept old_sd
+ """
+ for child in self.data :
+ child.replaceConcept(old_sd,sd)
+
+ def getDocu(self):
+ return self.data[0].definition.getDocu()
+
+ def getListeMcInconnus(self):
+ """
+ Retourne la liste des mots-cles inconnus dans self
+ """
+ l_mc = []
+ for mcfact in self.data :
+ if mcfact.isValid() : continue
+ l_child = mcfact.getListeMcInconnus()
+ for mc in l_child:
+ l = [self]
+ l.extend(mc)
+ l_mc.append(l)
+ return l_mc
+
+ def verifConditionRegles(self,liste_presents):
+ """
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
+ """
+ # Sans objet pour une liste de mots cles facteurs
return []
- def getListeMcOrdonneeBrute(self,liste,dico):
- """
- Retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
- d'une entite composee dont le chemin complet est donne sous forme
- d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
- """
- for arg in liste:
- objet_cata = dico[arg]
- dico=objet_cata.entites
- return objet_cata.ordre_mc
-
- def verifExistenceSd(self):
- """
- Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
- avant etape, sinon enleve la reference a ces concepts
- """
- for motcle in self.data :
- motcle.verifExistenceSd()
-
- def getFr(self):
- """
- Retourne la chaine d'aide contenue dans le catalogue
- en tenant compte de la langue
- """
- try :
- return self.data[0].getFr()
- except:
- return ''
-
- def normalize(self):
- """
- Retourne l'objet normalise. Une liste est deja normalisee
- """
- return self
-
- def updateMcGlobal(self):
- """
- Met a jour les mots cles globaux enregistres dans l'etape parente
- et dans le jdc parent.
- Une liste ne peut pas etre globale. Elle se contente de passer
- la requete a ses fils.
- """
- for motcle in self.data :
- motcle.updateMcGlobal()
-
- def deleteMcGlobal(self):
- for motcle in self.data :
- motcle.deleteMcGlobal()
-
-
- #def __del__(self):
- # print "__del__",self
+ def deepUpdateConditionBloc(self):
+ """
+ Parcourt l'arborescence des mcobject et realise l'update
+ des blocs conditionnels par appel de la methode updateConditionBloc
+ """
+ #print "deepUpdateConditionBloc",self
+ for mcfact in self.data :
+ mcfact.deepUpdateConditionBloc()
+
+ def updateConditionBloc(self):
+ """
+ Propage la mise a jour des conditions au parent.
+ Une liste ne fait pas de traitement sur les conditions
+ """
+ if self.parent: self.parent.updateConditionBloc()
+
+ def verifConditionBloc(self):
+ """
+ Evalue les conditions de tous les blocs fils possibles
+ (en fonction du catalogue donc de la definition) de self et
+ retourne deux listes :
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
+ """
+ # Sans objet pour une liste de mots cles facteurs (a voir !!!)
+ return [],[]
+
+ def initModif(self):
+ """
+ Met l'etat de l'objet a modified et propage au parent
+ qui vaut None s'il n'existe pas
+ """
+ self.state = 'modified'
+ if self.parent:
+ self.parent.initModif()
+
+ def finModif(self):
+ """
+ Methode appelee apres qu'une modification a ete faite afin de declencher
+ d'eventuels traitements post-modification
+ """
+ #print "finModif",self
+ CONNECTOR.Emit(self,"valid")
+ if self.parent:
+ self.parent.finModif()
+
+ def getGenealogiePrecise(self):
+ if self.parent:
+ return self.parent.getGenealogiePrecise()
+ else:
+ return []
+
+ def getGenealogie(self):
+ """
+ Retourne la liste des noms des ascendants.
+ Un objet MCList n'est pas enregistre dans la genealogie.
+ XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
+ """
+ if self.parent:
+ return self.parent.getGenealogie()
+ else:
+ return []
+
+ def getListeMcOrdonneeBrute(self,liste,dico):
+ """
+ Retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
+ d'une entite composee dont le chemin complet est donne sous forme
+ d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+ """
+ for arg in liste:
+ objet_cata = dico[arg]
+ dico=objet_cata.entites
+ return objet_cata.ordre_mc
+
+ def verifExistenceSd(self):
+ """
+ Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
+ avant etape, sinon enleve la reference a ces concepts
+ """
+ for motcle in self.data :
+ motcle.verifExistenceSd()
+
+ def getFr(self):
+ """
+ Retourne la chaine d'aide contenue dans le catalogue
+ en tenant compte de la langue
+ """
+ try :
+ return self.data[0].getFr()
+ except:
+ return ''
+
+ def normalize(self):
+ """
+ Retourne l'objet normalise. Une liste est deja normalisee
+ """
+ return self
+
+ def updateMcGlobal(self):
+ """
+ Met a jour les mots cles globaux enregistres dans l'etape parente
+ et dans le jdc parent.
+ Une liste ne peut pas etre globale. Elle se contente de passer
+ la requete a ses fils.
+ """
+ for motcle in self.data :
+ motcle.updateMcGlobal()
+
+ def deleteMcGlobal(self):
+ for motcle in self.data :
+ motcle.deleteMcGlobal()
+
+
+ #def __del__(self):
+ # print "__del__",self
from Noyau.N_GEOM import GEOM,geom
from Noyau.N_CO import CO
from Accas.A_ASSD import UserASSD
+from Accas.A_ASSD import UserASSDMultiple
import Accas
# fin attention
class MCSIMP(I_OBJECT.OBJECT):
- def isValid(self,cr='non'):
- if self.state == 'unchanged':
- return self.valid
- for type_permis in self.definition.type:
- if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice':
- self.monType=type_permis
- return self.valideMatrice(cr=cr)
- validite=Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr)
+ def isValid(self,cr='non'):
+ if self.state == 'unchanged':
+ return self.valid
+ for type_permis in self.definition.type:
+ #if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice':
+ if hasattr(type_permis, "typElt") :
+ self.monType=type_permis
+ return self.valideMatrice(cr=cr)
+ validite=Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr)
- if self.definition.siValide != None and validite:
+ if self.definition.siValide != None and validite:
self.definition.siValide(self)
- return validite
+ return validite
- def getNomConcept(self):
- p=self
- while p.parent :
- try :
- nomconcept=p.getSdname()
- return nomconcept
- except:
+ def getNomConcept(self):
+ p=self
+ while p.parent :
try :
- nomconcept= p.object.getSdname()
- return nomconcept
- except :
- pass
- p=p.parent
- return ""
-
- def getText(self):
- """
- Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
- pointe par self
- """
-
- if self.valeur == None :
- return None
- elif type(self.valeur) == float :
- # traitement d'un flottant isole
- txt = str(self.valeur)
- clefobj=self.getNomConcept()
- if clefobj in self.jdc.appliEficas.dict_reels :
- if self.valeur in self.jdc.appliEficas.dict_reels[clefobj]:
- txt=self.jdc.appliEficas.dict_reels[clefobj][self.valeur]
- elif type(self.valeur) in (list,tuple) :
- if self.valeur==[] or self.valeur == (): return str(self.valeur)
- # traitement des listes
- txt='('
- sep=''
- for val in self.valeur:
- if type(val) == float :
- clefobj=self.getNomConcept()
- if clefobj in self.jdc.appliEficas.dict_reels:
- if val in self.jdc.appliEficas.dict_reels[clefobj]:
- txt=txt + sep +self.jdc.appliEficas.dict_reels[clefobj][val]
- else :
- txt=txt + sep + str(val)
- else :
- txt=txt + sep + str(val)
- else:
- if isinstance(val,tuple):
- texteVal='('
- for i in val :
- if isinstance(i, bytes) or isinstance(i,str) : texteVal = texteVal +"'"+str(i)+"',"
- else : texteVal = texteVal + str(i)+','
- texteVal=texteVal[:-1]+')'
- else :
- if isinstance(val,bytes) or isinstance(val, str): texteVal="'"+str(val)+"'"
- else :texteVal=str(val)
- txt = txt + sep+ texteVal
+ nomconcept=p.getSdname()
+ return nomconcept
+ except:
+ try :
+ nomconcept= p.object.getSdname()
+ return nomconcept
+ except :
+ pass
+ p=p.parent
+ return ""
+
+ def getText(self):
+ """
+ Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
+ pointe par self
+ """
+
+ if self.valeur == None :
+ return None
+ elif type(self.valeur) == float :
+ # traitement d'un flottant isole
+ txt = str(self.valeur)
+ clefobj=self.getNomConcept()
+ if clefobj in self.jdc.appliEficas.dict_reels :
+ if self.valeur in self.jdc.appliEficas.dict_reels[clefobj]:
+ txt=self.jdc.appliEficas.dict_reels[clefobj][self.valeur]
+ elif type(self.valeur) in (list,tuple) :
+ if self.valeur==[] or self.valeur == (): return str(self.valeur)
+ # traitement des listes
+ txt='('
+ sep=''
+ for val in self.valeur:
+ if type(val) == float :
+ clefobj=self.getNomConcept()
+ if clefobj in self.jdc.appliEficas.dict_reels:
+ if val in self.jdc.appliEficas.dict_reels[clefobj]:
+ txt=txt + sep +self.jdc.appliEficas.dict_reels[clefobj][val]
+ else :
+ txt=txt + sep + str(val)
+ else :
+ txt=txt + sep + str(val)
+ else:
+ if isinstance(val,tuple):
+ texteVal='('
+ for i in val :
+ if isinstance(i, bytes) or isinstance(i,str) : texteVal = texteVal +"'"+str(i)+"',"
+ else : texteVal = texteVal + str(i)+','
+ texteVal=texteVal[:-1]+')'
+ else :
+ if isinstance(val,bytes) or isinstance(val,str): texteVal="'"+str(val)+"'"
+ else :texteVal=str(val)
+ txt = txt + sep+ texteVal
## if len(txt) > 200:
## #ligne trop longue, on tronque
## txt=txt+" ..."
## break
- sep=','
- # cas des listes de tuples de longueur 1
- if isinstance(val,tuple) and len(self.valeur) == 1 : txt=txt+','
- txt=txt+')'
- else:
- # traitement des autres cas
- txt = str(self.valeur)
-
- # txt peut etre une longue chaine sur plusieurs lignes.
- # Il est possible de tronquer cette chaine au premier \n et
- # de limiter la longueur de la chaine a 30 caracteres. Cependant
- # ceci provoque une perte d'information pour l'utilisateur
- # Pour le moment on retourne la chaine telle que
- return txt
-
- def getVal(self):
- """
- Retourne une chaine de caractere representant la valeur de self
- """
- val=self.valeur
- if type(val) == float :
- clefobj=self.getNomConcept()
- if clefobj in self.jdc.appliEficas.dict_reels :
- if val in self.jdc.appliEficas.appliEficas.dict_reels[clefobj] :
- return self.jdc.appliEficas.dict_reels[clefobj][val]
- if type(val) != tuple :
- try:
- return val.getName()
- except:
- return val
- else :
- if val ==() or val == [] : return val
- s='( '
- for item in val :
- try :
- s=s+item.getName()+','
- except:
- s=s+repr(item)+','
- s=s+' )'
- return s
-
- def waitBool(self):
- for typ in self.definition.type:
+ sep=','
+ # cas des listes de tuples de longueur 1
+ if isinstance(val,tuple) and len(self.valeur) == 1 : txt=txt+','
+ txt=txt+')'
+ else:
+ # traitement des autres cas
+ txt = str(self.valeur)
+
+ # txt peut etre une longue chaine sur plusieurs lignes.
+ # Il est possible de tronquer cette chaine au premier \n et
+ # de limiter la longueur de la chaine a 30 caracteres. Cependant
+ # ceci provoque une perte d'information pour l'utilisateur
+ # Pour le moment on retourne la chaine telle que
+ return txt
+
+ def getVal(self):
+ """
+ Retourne une chaine de caractere representant la valeur de self
+ """
+ val=self.valeur
+ if type(val) == float :
+ clefobj=self.getNomConcept()
+ if clefobj in self.jdc.appliEficas.dict_reels :
+ if val in self.jdc.appliEficas.appliEficas.dict_reels[clefobj] :
+ return self.jdc.appliEficas.dict_reels[clefobj][val]
+ if type(val) != tuple :
+ try:
+ return val.getName()
+ except:
+ return val
+ else :
+ if val ==() or val == [] : return val
+ s='( '
+ for item in val :
+ try :
+ s=s+item.getName()+','
+ except:
+ s=s+repr(item)+','
+ s=s+' )'
+ return s
+
+ def waitBool(self):
+ for typ in self.definition.type:
+ try :
+ if typ == bool: return True
+ except :
+ pass
+ return False
+
+ def waitCo(self):
+ """
+ Methode booleenne qui retourne 1 si l'objet attend un objet ASSD
+ qui n'existe pas encore (type CO()), 0 sinon
+ """
+ for typ in self.definition.type:
+ if type(typ) == type or isinstance(typ,type):
+ if issubclass(typ,CO) :
+ return 1
+ return 0
+
+ def waitAssd(self):
+ """
+ Methode booleenne qui retourne 1 si le MCS attend un objet de type ASSD ou UserASSD
+ ou derive, 0 sinon
+ """
+ for typ in self.definition.type:
+ if type(typ) == type or isinstance(typ,type):
+ if issubclass(typ,ASSD) and not issubclass(typ,GEOM) :
+ return 1
+ return 0
+
+ def waitUserAssd(self):
+ """
+ Methode booleenne qui retourne 1 si le MCS attend un objet de type ASSD
+ ou derive, 0 sinon
+ """
+ for typ in self.definition.type:
+ if type(typ) == type or isinstance(typ,type):
+ if issubclass(typ,UserASSD) :
+ return 1
+ return 0
+
+ def waitUserAssdMultiple(self):
+ for typ in self.definition.type:
+ if type(typ) == type or isinstance(typ,type):
+ if issubclass(typ,UserASSDMultiple) :
+ return 1
+ return 0
+
+ def waitUserAssdOrAssdMultipleEnCreation(self):
+ for typ in self.definition.type:
+ if typ == 'createObject' :
+ return 1
+ return 0
+
+
+ def waitAssdOrGeom(self):
+ """
+ Retourne 1 si le mot-cle simple attend un objet de type
+ assd, ASSD, geom ou GEOM
+ Retourne 0 dans le cas contraire
+ """
+ for typ in self.definition.type:
+ if type(typ) == type or isinstance(typ,type):
+ if typ.__name__ in ("GEOM","ASSD","geom","assd") or issubclass(typ,GEOM) :
+ return 1
+ return 0
+
+ def waitGeom(self):
+ """
+ Retourne 1 si le mot-cle simple attend un objet de type GEOM
+ Retourne 0 dans le cas contraire
+ """
+ for typ in self.definition.type:
+ if type(typ) == type or isinstance(typ,type):
+ if issubclass(typ,GEOM) : return 1
+ return 0
+
+
+ def waitTxm(self):
+ """
+ Retourne 1 si le mot-cle simple attend un objet de type TXM
+ Retourne 0 dans le cas contraire
+ """
+ for typ in self.definition.type:
+ if typ == 'TXM' :return 1
+ return 0
+
+ def waitTuple(self):
+ for ss_type in self.definition.type:
+ if repr(ss_type).find('Tuple') != -1 :
+ return 1
+ return 0
+
+ def waitChaineAvecBlancs(self):
+ if self.definition.avecBlancs : return 1
+ return 0
+
+ def combienEltDsTuple(self):
+ for ss_type in self.definition.type:
+ if hasattr(ss_type,'ntuple'):
+ return ss_type.ntuple
+ return O
+
+ def waitMatrice(self):
+ if hasattr(self, 'isAMatrice') : return self.isAMatrice
+ for typ in self.definition.type:
try :
- if typ == bool: return True
- except :
- pass
- return False
-
- def waitCo(self):
- """
- Methode booleenne qui retourne 1 si l'objet attend un objet ASSD
- qui n'existe pas encore (type CO()), 0 sinon
- """
- for typ in self.definition.type:
- if type(typ) == type or isinstance(typ,type):
- if issubclass(typ,CO) :
- return 1
- return 0
-
- def waitAssd(self):
- """
- Methode booleenne qui retourne 1 si le MCS attend un objet de type ASSD ou UserASSD
- ou derive, 0 sinon
- """
- for typ in self.definition.type:
- if type(typ) == type or isinstance(typ,type):
- if issubclass(typ,ASSD) and not issubclass(typ,GEOM) :
- return 1
- return 0
-
- def waitUserAssd(self):
- """
- Methode booleenne qui retourne 1 si le MCS attend un objet de type ASSD
- ou derive, 0 sinon
- """
- for typ in self.definition.type:
- if type(typ) == type or isinstance(typ,type):
- if issubclass(typ,UserASSD) :
- return 1
- return 0
-
- def waitUserAssdEnCreation(self):
- for typ in self.definition.type:
- if typ == 'createObject' :
- return 1
- return 0
-
-
- def waitAssdOrGeom(self):
- """
- Retourne 1 si le mot-cle simple attend un objet de type
- assd, ASSD, geom ou GEOM
- Retourne 0 dans le cas contraire
- """
- for typ in self.definition.type:
- if type(typ) == type or isinstance(typ,type):
- if typ.__name__ in ("GEOM","ASSD","geom","assd") or issubclass(typ,GEOM) :
- return 1
- return 0
-
- def waitGeom(self):
- """
- Retourne 1 si le mot-cle simple attend un objet de type GEOM
- Retourne 0 dans le cas contraire
- """
- for typ in self.definition.type:
- if type(typ) == type or isinstance(typ,type):
- if issubclass(typ,GEOM) : return 1
- return 0
-
-
- def waitTxm(self):
- """
- Retourne 1 si le mot-cle simple attend un objet de type TXM
- Retourne 0 dans le cas contraire
- """
- for typ in self.definition.type:
- if typ == 'TXM' :return 1
- return 0
-
- def waitTuple(self):
- for ss_type in self.definition.type:
- if repr(ss_type).find('Tuple') != -1 :
- return 1
- return 0
-
-
- def getListeValeurs(self):
- """
- """
- if self.valeur == None:
- return []
- elif type(self.valeur) == tuple:
- return list(self.valeur)
- elif type(self.valeur) == list:
- return self.valeur
- else:
- return [self.valeur]
-
- def isOblig(self):
- return self.definition.statut=='o'
-
- def isImmuable(self):
- return self.definition.homo=='constant'
-
- def isInformation(self):
- return self.definition.homo=='information'
-
-
-
- def validVal(self,valeur):
- """
- Verifie que la valeur passee en argument (valeur) est valide
- sans modifier la valeur courante
- """
- lval=listProto.adapt(valeur)
- if lval is None:
- valid=0
- mess=tr("None n'est pas une valeur autorisee")
- else:
- try:
- for val in lval:
+ if hasattr(typ, 'typElt') : self.isAMatrice=1; return 1
+ except : pass
+ self.isAMatrice=0
+ return 0
+
+ def getListeValeurs(self):
+ """
+ """
+ if self.valeur == None:
+ return []
+ elif type(self.valeur) == tuple:
+ return list(self.valeur)
+ elif type(self.valeur) == list:
+ return self.valeur
+ else:
+ return [self.valeur]
+
+ def isOblig(self):
+ return self.definition.statut=='o'
+
+ def isImmuable(self):
+ return self.definition.homo=='constant'
+
+ def isInformation(self):
+ return self.definition.homo=='information'
+
+
+ def validVal(self,valeur):
+ """
+ Verifie que la valeur passee en argument (valeur) est valide
+ sans modifier la valeur courante
+ """
+ lval=listProto.adapt(valeur)
+ if lval is None:
+ valid=0
+ mess=tr("None n'est pas une valeur autorisee")
+ else:
+ try:
+ for val in lval:
+ self.typeProto.adapt(val)
+ self.intoProto.adapt(val)
+ self.cardProto.adapt(lval)
+ if self.definition.validators:
+ self.definition.validators.convert(lval)
+ valid,mess=1,""
+ except ValError as e:
+ mess=str(e)
+ valid=0
+ return valid,mess
+
+ def validValeur(self,new_valeur):
+ """
+ Verifie que la valeur passee en argument (new_valeur) est valide
+ sans modifier la valeur courante (evite d'utiliser setValeur et est plus performant)
+ """
+ validite,mess=self.validVal(new_valeur)
+ return validite
+
+ def validValeurPartielle(self,new_valeur):
+ """
+ Verifie que la valeur passee en argument (new_valeur) est une liste partiellement valide
+ sans modifier la valeur courante du mot cle
+ """
+ validite=1
+ try:
+ for val in new_valeur:
self.typeProto.adapt(val)
self.intoProto.adapt(val)
- self.cardProto.adapt(lval)
- if self.definition.validators:
- self.definition.validators.convert(lval)
- valid,mess=1,""
- except ValError as e:
- mess=str(e)
- valid=0
- return valid,mess
-
- def validValeur(self,new_valeur):
- """
- Verifie que la valeur passee en argument (new_valeur) est valide
- sans modifier la valeur courante (evite d'utiliser setValeur et est plus performant)
- """
- validite,mess=self.validVal(new_valeur)
- return validite
-
- def validValeurPartielle(self,new_valeur):
- """
- Verifie que la valeur passee en argument (new_valeur) est une liste partiellement valide
- sans modifier la valeur courante du mot cle
- """
- validite=1
- try:
- for val in new_valeur:
- self.typeProto.adapt(val)
- self.intoProto.adapt(val)
- #on ne verifie pas la cardinalite
- if self.definition.validators:
- validite=self.definition.validators.valideListePartielle(new_valeur)
- except ValError as e:
- validite=0
-
- return validite
-
- def updateConditionBloc(self):
- """ Met a jour les blocs conditionnels dependant du mot cle simple self
- """
- if self.definition.position == 'global' :
- self.etape.deepUpdateConditionBloc()
- elif self.definition.position == 'global_jdc' :
- self.jdc.deepUpdateConditionBloc(self)
- else:
- self.parent.updateConditionBloc()
-
- def setValeur(self,new_valeur,evaluation='oui'):
+ #on ne verifie pas la cardinalite
+ if self.definition.validators:
+ validite=self.definition.validators.valideListePartielle(new_valeur)
+ except ValError as e:
+ validite=0
+
+ return validite
+
+ def updateConditionBloc(self):
+ """ Met a jour les blocs conditionnels dependant du mot cle simple self
+ """
+ if self.definition.position == 'global' :
+ self.etape.deepUpdateConditionBloc()
+ elif self.definition.position == 'reCalculeEtape' :
+ print ('je passe par la pour ', self.nom)
+ self.etape.deepUpdateConditionBloc()
+ self.etape.demandeRedessine()
+ elif self.definition.position == 'global_jdc' :
+ self.jdc.deepUpdateConditionBloc(self)
+ self.etape.demandeRedessine()
+ elif self.definition.position == 'inGetAttribut' :
+ self.jdc.deepUpdateConditionBloc(self)
+ else:
+ self.parent.updateConditionBloc()
+
+ def setValeur(self,new_valeur,evaluation='oui'):
self.initModif()
self.valeur = new_valeur
self.val = new_valeur
- if self.valeur and self.waitUserAssd() and not(self.waitUserAssdEnCreation()) :
- if type(self.valeur) in (list,tuple):
- for v in self.valeur : v.ajoutUtilisePar(self)
- else : self.valeur.ajoutUtilisePar(self)
- if self.isValid():self.setValeurObjPyxb(new_valeur)
+ if self.valeur and self.waitUserAssd() and not(self.waitUserAssdOrAssdMultipleEnCreation()) :
+ if type(self.valeur) in (list,tuple):
+ for v in self.valeur : v.ajoutUtilisePar(self)
+ else : self.valeur.ajoutUtilisePar(self)
+ if self.isValid() and hasattr(self, 'objPyxb') and self.objPyxb : self.setValeurObjPyxb(new_valeur)
self.updateConditionBloc()
+ if self.definition.metAJour != None : self.updateAutresMotsClefs()
self.etape.modified()
self.finModif()
return 1
- def evalValeur(self,new_valeur):
- """
- Essaie d'evaluer new_valeur comme une SD, une declaration Python
- ou un EVAL: Retourne la valeur evaluee (ou None) et le test de reussite (1 ou 0)
- """
- sd = self.jdc.getSdAvantEtape(new_valeur,self.etape)
- #sd = self.jdc.getContexteAvant(self.etape).get(new_valeur,None)
- if sd is not None:
- return sd,1
- lsd = self.jdc.chercheListAvant(self.etape,new_valeur)
- if lsd :
- return lsd,1
- else:
- d={}
- # On veut EVAL avec tous ses comportements. On utilise Accas. Perfs ??
- d['EVAL']=Accas.EVAL
- try :
- objet = eval(new_valeur,d)
- return objet,1
- except Exception:
- itparam=self.chercheItemParametre(new_valeur)
- if itparam:
- return itparam,1
- try :
- object=eval(new_valeur.valeur,d)
- except :
- pass
- if CONTEXT.debug : traceback.print_exc()
- return None,0
-
- def evalVal(self,new_valeur):
- """
- Tente d'evaluer new_valeur comme un objet du jdc (par appel a evalValItem)
- ou comme une liste de ces memes objets
- Si new_valeur contient au moins un separateur (,), tente l'evaluation sur
- la chaine splittee
- """
- if new_valeur in ('True','False') and 'TXM' in self.definition.type :
- valeur=self.evalValItem(str(new_valeur))
- return new_valeur
- if type(new_valeur) in (list,tuple):
- valeurretour=[]
- for item in new_valeur :
- valeurretour.append(self.evalValItem(item))
- return valeurretour
- else:
- valeur=self.evalValItem(new_valeur)
- return valeur
-
- def evalValItem(self,new_valeur):
- """
- Tente d'evaluer new_valeur comme un concept, un parametre, un objet Python ou un UserASSD
- Si c'est impossible retourne new_valeur inchange
- argument new_valeur : string (nom de concept, de parametre, expression ou simple chaine)
- """
- if new_valeur in list(self.jdc.sdsDict.keys()) and self.waitUserAssd():
- valeur=self.jdc.sdsDict[new_valeur]
- return valeur
- elif self.etape and self.etape.parent:
- valeur=self.etape.parent.evalInContext(new_valeur,self.etape)
- return valeur
- else:
- try :
- valeur = eval(val)
- return valeur
- except:
- #traceback.print_exc()
- return new_valeur
- pass
-
- def chercheItemParametre (self,new_valeur):
+ def evalValeur(self,new_valeur):
+ """
+ Essaie d'evaluer new_valeur comme une SD, une declaration Python
+ ou un EVAL: Retourne la valeur evaluee (ou None) et le test de reussite (1 ou 0)
+ """
+ sd = self.jdc.getSdAvantEtape(new_valeur,self.etape)
+ #sd = self.jdc.getContexteAvant(self.etape).get(new_valeur,None)
+ if sd is not None:
+ return sd,1
+ lsd = self.jdc.chercheListAvant(self.etape,new_valeur)
+ if lsd :
+ return lsd,1
+ else:
+ d={}
+ # On veut EVAL avec tous ses comportements. On utilise Accas. Perfs ??
+ d['EVAL']=Accas.EVAL
+ try :
+ objet = eval(new_valeur,d)
+ return objet,1
+ except Exception:
+ itparam=self.chercheItemParametre(new_valeur)
+ if itparam:
+ return itparam,1
+ try :
+ object=eval(new_valeur.valeur,d)
+ except :
+ pass
+ if CONTEXT.debug : traceback.print_exc()
+ return None,0
+
+ def evalVal(self,new_valeur):
+ """
+ Tente d'evaluer new_valeur comme un objet du jdc (par appel a evalValItem)
+ ou comme une liste de ces memes objets
+ Si new_valeur contient au moins un separateur (,), tente l'evaluation sur
+ la chaine splittee
+ """
+ if new_valeur in ('True','False') and 'TXM' in self.definition.type :
+ valeur=self.evalValItem(str(new_valeur))
+ return new_valeur
+ if type(new_valeur) in (list,tuple):
+ valeurretour=[]
+ for item in new_valeur :
+ valeurretour.append(self.evalValItem(item))
+ return valeurretour
+ else:
+ valeur=self.evalValItem(new_valeur)
+ return valeur
+
+ def evalValItem(self,new_valeur):
+ """
+ Tente d'evaluer new_valeur comme un concept, un parametre, un objet Python ou un UserASSD
+ Si c'est impossible retourne new_valeur inchange
+ argument new_valeur : string (nom de concept, de parametre, expression ou simple chaine)
+ """
+ if new_valeur in list(self.jdc.sdsDict.keys()) and self.waitUserAssd():
+ valeur=self.jdc.sdsDict[new_valeur]
+ return valeur
+ elif self.etape and self.etape.parent:
+ valeur=self.etape.parent.evalInContext(new_valeur,self.etape)
+ return valeur
+ else:
+ try :
+ valeur = eval(val)
+ return valeur
+ except:
+ #traceback.print_exc()
+ return new_valeur
+ pass
+
+ def chercheItemParametre (self,new_valeur):
try:
- nomparam=new_valeur[0:new_valeur.find("[")]
- indice=new_valeur[new_valeur.find(u"[")+1:new_valeur.find(u"]")]
- for p in self.jdc.params:
- if p.nom == nomparam :
- if int(indice) < len(p.getValeurs()):
- itparam=parametre.ITEM_PARAMETRE(p,int(indice))
- return itparam
- return None
+ nomparam=new_valeur[0:new_valeur.find("[")]
+ indice=new_valeur[new_valeur.find(u"[")+1:new_valeur.find(u"]")]
+ for p in self.jdc.params:
+ if p.nom == nomparam :
+ if int(indice) < len(p.getValeurs()):
+ itparam=parametre.ITEM_PARAMETRE(p,int(indice))
+ return itparam
+ return None
except:
- return None
-
- def updateConcept(self,sd):
- if type(self.valeur) in (list,tuple) :
- if sd in self.valeur:
- if self.objPyxb :
- newVal=[]
- for v in self.valeur : newVal.append(v.nom)
- self.setValeurObjPyxb(newVal)
- self.initModif()
- self.finModif()
- else:
- if sd == self.valeur:
- if self.objPyxb : self.setValeurObjPyxb(sd.nom)
- self.initModif()
- self.finModif()
-
- def deleteConcept(self,sd):
- """
- Inputs :
- - sd=concept detruit
- Fonction :
- Met a jour la valeur du mot cle simple suite a la disparition
- du concept sd
- Attention aux matrices
- """
+ return None
+
+ def updateConcept(self,sd):
+ if not self.waitAssd() : return
+ if type(self.valeur) in (list,tuple) :
+ if sd in self.valeur:
+ newVal=[]
+ for v in self.valeur : newVal.append(v.nom)
+ self.initModif()
+ if hasattr(self, 'objPyxb') and self.objPyxb : self.setValeurObjPyxb(newVal)
+ self.finModif()
+ else:
+ if sd == self.valeur:
+ self.initModif()
+ if hasattr(self, 'objPyxb') and self.objPyxb : self.setValeurObjPyxb(sd.nom)
+ self.finModif()
+
+ def deleteConcept(self,sd):
+ """
+ Inputs :
+ - sd=concept detruit
+ Fonction :
+ Met a jour la valeur du mot cle simple suite a la disparition
+ du concept sd
+ Attention aux matrices
+ """
##PNPNPN a tester
- if type(self.valeur) == tuple :
- if sd in self.valeur:
- self.initModif()
- self.valeur=list(self.valeur)
- while sd in self.valeur : self.valeur.remove(sd)
- if self.objPyxb :
- newVal=[]
- for v in self.valeur : newVal.append(v.nom)
- if newVal == [] : self.delObjPyxb()
- else : self.setValeurObjPyxb(sd.nom)
- self.finModif()
- elif type(self.valeur) == list:
- if sd in self.valeur:
+ if type(self.valeur) == tuple :
+ if sd in self.valeur:
+ self.initModif()
+ self.valeur=list(self.valeur)
+ while sd in self.valeur : self.valeur.remove(sd)
+ if hasattr(self, 'objPyxb') and self.objPyxb :
+ newVal=[]
+ for v in self.valeur : newVal.append(v.nom)
+ if newVal == [] : self.delObjPyxb()
+ else : self.setValeurObjPyxb(sd.nom)
+ self.finModif()
+ elif type(self.valeur) == list:
+ if sd in self.valeur:
+ self.initModif()
+ while sd in self.valeur : self.valeur.remove(sd)
+ self.finModif()
+ else:
+ if self.valeur == sd:
+ self.initModif()
+ self.valeur=None
+ self.val=None
+ if hasattr(self, 'objPyxb') and self.objPyxb : self.setValeurObjPyxb()
+ self.finModif()
+ # Glut Horrible pour les matrices OT ???
+ #if sd.__class__.__name__== "variable":
+ # for type_permis in self.definition.type:
+ #if type(type_permis) == types.InstanceType:
+ # a voir en python 3
+ # if type_permis.__class__.__name__ == 'Matrice' :
+ # self.state="changed"
+ # self.isValid()
+
+
+ def replaceConcept(self,old_sd,sd):
+ """
+ Inputs :
+ - old_sd=concept remplace
+ - sd=nouveau concept
+ Fonction :
+ Met a jour la valeur du mot cle simple suite au remplacement
+ du concept old_sd
+ """
+ #print ("replaceConcept",old_sd,sd)
+ if type(self.valeur) == tuple :
+ if old_sd in self.valeur:
+ self.initModif()
+ self.valeur=list(self.valeur)
+ i=self.valeur.index(old_sd)
+ self.valeur[i]=sd
+ self.finModif()
+ elif type(self.valeur) == list:
+ if old_sd in self.valeur:
+ self.initModif()
+ i=self.valeur.index(old_sd)
+ self.valeur[i]=sd
+ self.finModif()
+ else:
+ if self.valeur == old_sd:
+ self.initModif()
+ self.valeur=sd
+ self.val=sd
+ self.finModif()
+
+ def setValeurCo(self,nomCO):
+ """
+ Affecte a self l'objet de type CO et de nom nomCO
+ """
+ step=self.etape.parent
+ if nomCO == None or nomCO == '':
+ new_objet=None
+ else:
+ # Avant de creer un concept il faut s'assurer du contexte : step
+ # courant
+ sd= step.getSdAutourEtape(nomCO,self.etape,avec='oui')
+ if sd:
+ # Si un concept du meme nom existe deja dans la portee de l'etape
+ # on ne cree pas le concept
+ return 0,tr("un concept de meme nom existe deja")
+ # Il n'existe pas de concept de meme nom. On peut donc le creer
+ # Il faut neanmoins que la methode NommerSdProd de step gere les
+ # contextes en mode editeur
+ # Normalement la methode du Noyau doit etre surchargee
+ # On declare l'etape du mot cle comme etape courante pour nommerSDProd
+ cs= CONTEXT.getCurrentStep()
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(step)
+ step.setEtapeContext(self.etape)
+ new_objet = Accas.CO(nomCO)
+ CONTEXT.unsetCurrentStep()
+ CONTEXT.setCurrentStep(cs)
self.initModif()
- while sd in self.valeur : self.valeur.remove(sd)
- self.finModif()
- else:
- if self.valeur == sd:
- self.initModif()
- self.valeur=None
- self.val=None
- if self.objPyxb : self.setValeurObjPyxb()
- self.finModif()
- # Glut Horrible pour les matrices ???
- if sd.__class__.__name__== "variable":
- for type_permis in self.definition.type:
- #if type(type_permis) == types.InstanceType:
- # a voir en python 3
- if type_permis.__class__.__name__ == 'Matrice' :
- self.state="changed"
- self.isValid()
-
-
- def replaceConcept(self,old_sd,sd):
- """
- Inputs :
- - old_sd=concept remplace
- - sd=nouveau concept
- Fonction :
- Met a jour la valeur du mot cle simple suite au remplacement
- du concept old_sd
- """
- print ("replaceConcept",old_sd,sd)
- if type(self.valeur) == tuple :
- if old_sd in self.valeur:
- self.initModif()
- self.valeur=list(self.valeur)
- i=self.valeur.index(old_sd)
- self.valeur[i]=sd
- self.finModif()
- elif type(self.valeur) == list:
- if old_sd in self.valeur:
- self.initModif()
- i=self.valeur.index(old_sd)
- self.valeur[i]=sd
- self.finModif()
- else:
- if self.valeur == old_sd:
- self.initModif()
- self.valeur=sd
- self.val=sd
+ self.valeur = new_objet
+ self.val = new_objet
+ # On force l'enregistrement de new_objet en tant que concept produit
+ # de la macro en appelant getType_produit avec force=1
+ self.etape.getType_produit(force=1)
self.finModif()
+ step.resetContext()
+ #print "setValeurCo",new_objet
+ return 1,tr("Concept cree")
+
+ def verifExistenceSd(self):
+ """
+ Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
+ avant etape, sinon enleve la referea ces concepts
+ """
+ #print "verifExistenceSd"
+ # Attention : possible probleme avec include
+ # A priori il n'y a pas de raison de retirer les concepts non existants
+ # avant etape. En fait il s'agit uniquement eventuellement de ceux crees par une macro
+ l_sd_avant_etape = list(self.jdc.getContexteAvant(self.etape).values())
+ if type(self.valeur) in (tuple,list) :
+ l=[]
+ for sd in self.valeur:
+ if isinstance(sd,ASSD) :
+ if sd in l_sd_avant_etape or self.etape.getSdprods(sd.nom) is sd:
+ l.append(sd)
+ else:
+ l.append(sd)
+ if len(l) < len(self.valeur):
+ self.initModif()
+ self.valeur=tuple(l)
+ self.finModif()
+ else:
+ if isinstance(self.valeur,ASSD) :
+ if self.valeur not in l_sd_avant_etape and self.etape.getSdprods(self.valeur.nom) is None:
+ self.initModif()
+ self.valeur = None
+ self.finModif()
+
+ def renommeSdCree(self,nouveauNom):
+ #print ( 'dans renommeSdCree', self.jdc.sdsDict, self.valeur)
+ if nouveauNom in self.jdc.sdsDict : return (0, 'concept deja existant')
+ if self.valeur == None : return (0, 'pb sur la valeur')
+ else : self.valeur.renomme(nouveauNom)
+ return (1, 'concept renomme')
+
+ def renommeSdCreeDsListe(self,objASSD, nouveauNom):
+ #print ( 'dans renommeSdCree', self.jdc.sdsDict, self.valeur, nouveauNom)
+ if nouveauNom in self.jdc.sdsDict : return (0, 'concept deja existant')
+ objASSD.renomme(nouveauNom)
+ return (1, 'concept renomme')
+
+
+
+ def getMinMax(self):
+ """
+ Retourne les valeurs min et max admissibles pour la valeur de self
+ """
+ return self.definition.min,self.definition.max
+
+
+ def getType(self):
+ """
+ Retourne le type attendu par le mot-cle simple
+ """
+ return self.definition.type
+
+ def deleteMcGlobal(self):
+ """ Retire self des declarations globales
+ """
+ # on est oblige de verifier si le nom est dans etape
+ # car parfois l ordre des creations/destruction n est pas clair
+ # quand on a des blocs freres qui contiennent le meme mc global
+ # cas de NumericalMethod dans VIMMP
+ if self.definition.position == 'global' :
+ etape = self.getEtape()
+ if etape and self.nom in etape.mc_globaux:
+ if etape.mc_globaux[self.nom] == self :
+ del etape.mc_globaux[self.nom]
+ elif self.definition.position == 'reCalculeEtape' :
+ etape = self.getEtape()
+ if etape :
+ if self.nom in etape.mc_globaux:
+ if etape.mc_globaux[self.nom] == self :
+ del etape.mc_globaux[self.nom]
+ self.etape.doitEtreRecalculee = True
+ #print ('deleteMcGlobal je mets doitEtreRecalculee = True avec', self.nom ,' pour ', etape.nom)
+ elif self.definition.position == 'global_jdc' :
+ if self.nom in self.jdc.mc_globaux:
+ try : del self.jdc.mc_globaux[self.nom]
+ except : print ('!!!!!!!! Souci delete mc_globaux')
+
+ def updateMcGlobal(self):
+ """
+ Met a jour les mots cles globaux enregistres dans l'etape parente
+ et dans le jdc parent.
+ Un mot cle simple peut etre global.
+ """
+ if self.definition.position == 'global' :
+ etape = self.getEtape()
+ if etape :
+ etape.mc_globaux[self.nom]=self
+ elif self.definition.position == 'reCalculeEtape' :
+ etape = self.getEtape()
+ if etape :
+ etape.mc_globaux[self.nom]=self
+ etape.doitEtreRecalculee=True
+ print ('je mets doitEtreRecalculee = True avec', self.nom ,' pour ', etape.nom)
+ print ('j ajoute au mc_globaux')
+ elif self.definition.position == 'global_jdc' :
+ if self.jdc:
+ self.jdc.mc_globaux[self.nom]=self
+
+ def nbrColonnes(self):
+ genea = self.getGenealogie()
+ if "VALE_C" in genea and "DEFI_FONCTION" in genea : return 3
+ if "VALE" in genea and "DEFI_FONCTION" in genea : return 2
+ return 0
+
+ def valideItem(self,item):
+ """Valide un item isole. Cet item est candidata l'ajout a la liste existante"""
+ valid=1
+ try:
+ #on verifie le type
+ self.typeProto.adapt(item)
+ #on verifie les choix possibles
+ self.intoProto.adapt(item)
+ #on ne verifie pas la cardinalite
+ if self.definition.validators:
+ valid=self.definition.validators.verifItem(item)
+ except ValError as e:
+ #traceback.print_exc()
+ valid=0
+ return valid
+
+ def verifType(self,item):
+ """Verifie le type d'un item de liste"""
+ try:
+ #on verifie le type
+ self.typeProto.adapt(item)
+ #on verifie les choix possibles
+ self.intoProto.adapt(item)
+ #on ne verifie pas la cardinalite mais on verifie les validateurs
+ if self.definition.validators:
+ valid=self.definition.validators.verifItem(item)
+ comment=""
+ valid=1
+ except ValError as e:
+ #traceback.print_exc()
+ comment=tr(e.__str__())
+ valid=0
+ return valid,comment
+
+ def valideMatrice(self,cr):
+ ok=1
+ commentaire =''
+ if self.valeur == None :
+ self.setValid(0)
+ return 0
+
+ if self.monType.methodeCalculTaille != None :
+ MCSIMP.__dict__[self.monType.methodeCalculTaille](*(self,))
+
+ if len(self.valeur) == self.monType.nbLigs :
+ for i in range(len(self.valeur)):
+ if len(self.valeur[i]) != self.monType.nbCols: ok=0
+ else : ok=0
+
+ if not ok :
+ self.setValid(0)
+ if cr == 'oui' :
+ self.cr.fatal(tr("La matrice n'est pas une matrice %(n_lign)d sur %(n_col)d", \
+ {'n_lign': self.monType.nbLigs, 'n_col': self.monType.nbCols}))
+ return 0
+
+ for i in range(self.monType.nbLigs):
+ for j in range(self.monType.nbCols):
+ val=self.valeur[i][j]
+ ok, commentaire = self.monType.verifItem(str(val),self.parent)
+ if self.monType.typElt not in ('TXM','I','R') and type(val) != self.monType.typElt :
+ ok=0; commentaire = 'mauvais type'; self.valeur=None
+ if not ok :
+ self.setValid(0)
+ if cr == 'oui' :
+ self.cr.fatal(tr(commentaire))
+ return 0
+ self.setValid(1)
+ return 1
- def setValeurCo(self,nomCO):
- """
- Affecte a self l'objet de type CO et de nom nomCO
- """
- step=self.etape.parent
- if nomCO == None or nomCO == '':
- new_objet=None
- else:
- # Avant de creer un concept il faut s'assurer du contexte : step
- # courant
- sd= step.getSdAutourEtape(nomCO,self.etape,avec='oui')
- if sd:
- # Si un concept du meme nom existe deja dans la portee de l'etape
- # on ne cree pas le concept
- return 0,tr("un concept de meme nom existe deja")
- # Il n'existe pas de concept de meme nom. On peut donc le creer
- # Il faut neanmoins que la methode NommerSdProd de step gere les
- # contextes en mode editeur
- # Normalement la methode du Noyau doit etre surchargee
- # On declare l'etape du mot cle comme etape courante pour nommerSDProd
- cs= CONTEXT.getCurrentStep()
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(step)
- step.setEtapeContext(self.etape)
- new_objet = Accas.CO(nomCO)
- CONTEXT.unsetCurrentStep()
- CONTEXT.setCurrentStep(cs)
- self.initModif()
- self.valeur = new_objet
- self.val = new_objet
- # On force l'enregistrement de new_objet en tant que concept produit
- # de la macro en appelant getType_produit avec force=1
- self.etape.getType_produit(force=1)
- self.finModif()
- step.resetContext()
- #print "setValeurCo",new_objet
- return 1,tr("Concept cree")
-
- def verifExistenceSd(self):
- """
- Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
- avant etape, sinon enleve la referea ces concepts
- """
- #print "verifExistenceSd"
- # Attention : possible probleme avec include
- # A priori il n'y a pas de raison de retirer les concepts non existants
- # avant etape. En fait il s'agit uniquement eventuellement de ceux crees par une macro
- l_sd_avant_etape = list(self.jdc.getContexteAvant(self.etape).values())
- if type(self.valeur) in (tuple,list) :
- l=[]
- for sd in self.valeur:
- if isinstance(sd,ASSD) :
- if sd in l_sd_avant_etape or self.etape.getSdprods(sd.nom) is sd:
- l.append(sd)
- else:
- l.append(sd)
- if len(l) < len(self.valeur):
- self.initModif()
- self.valeur=tuple(l)
- self.finModif()
- else:
- if isinstance(self.valeur,ASSD) :
- if self.valeur not in l_sd_avant_etape and self.etape.getSdprods(self.valeur.nom) is None:
- self.initModif()
- self.valeur = None
- self.finModif()
-
- def renommeSdCree(self,nouveauNom):
- print ( 'dans renommeSdCree', self.jdc.sdsDict, self.valeur)
- if nouveauNom in self.jdc.sdsDict : return (0, 'concept deja existant')
- if self.valeur == None : return (0, 'pb sur la valeur')
- else : self.valeur.renomme(nouveauNom)
- return (1, 'concept renomme')
-
- def renommeSdCreeDsListe(self,objASSD, nouveauNom):
- if nouveauNom in self.jdc.sdsDict : return (0, 'concept deja existant')
- objASSD.renomme(nouveauNom)
- return (1, 'concept renomme')
-
-
-
- def getMinMax(self):
- """
- Retourne les valeurs min et max admissibles pour la valeur de self
- """
- return self.definition.min,self.definition.max
-
-
- def getType(self):
- """
- Retourne le type attendu par le mot-cle simple
- """
- return self.definition.type
-
- def deleteMcGlobal(self):
- """ Retire self des declarations globales
- """
- if self.definition.position == 'global' :
- etape = self.getEtape()
- if etape :
- del etape.mc_globaux[self.nom]
- elif self.definition.position == 'global_jdc' :
-# PNPNPN a debuger
- print (self.nom)
- try :
- del self.jdc.mc_globaux[self.nom]
- except : pass
-
- def updateMcGlobal(self):
- """
- Met a jour les mots cles globaux enregistres dans l'etape parente
- et dans le jdc parent.
- Un mot cle simple peut etre global.
- """
- if self.definition.position == 'global' :
- etape = self.getEtape()
- if etape :
- etape.mc_globaux[self.nom]=self
- elif self.definition.position == 'global_jdc' :
- if self.jdc:
- self.jdc.mc_globaux[self.nom]=self
-
- def nbrColonnes(self):
- genea = self.getGenealogie()
- if "VALE_C" in genea and "DEFI_FONCTION" in genea : return 3
- if "VALE" in genea and "DEFI_FONCTION" in genea : return 2
- return 0
-
- def valideItem(self,item):
- """Valide un item isole. Cet item est candidata l'ajout a la liste existante"""
- valid=1
- try:
- #on verifie le type
- self.typeProto.adapt(item)
- #on verifie les choix possibles
- self.intoProto.adapt(item)
- #on ne verifie pas la cardinalite
- if self.definition.validators:
- valid=self.definition.validators.verifItem(item)
- except ValError as e:
- #traceback.print_exc()
- valid=0
- return valid
-
- def verifType(self,item):
- """Verifie le type d'un item de liste"""
- try:
- #on verifie le type
- self.typeProto.adapt(item)
- #on verifie les choix possibles
- self.intoProto.adapt(item)
- #on ne verifie pas la cardinalite mais on verifie les validateurs
- if self.definition.validators:
- valid=self.definition.validators.verifItem(item)
- comment=""
- valid=1
- except ValError as e:
- #traceback.print_exc()
- comment=tr(e.__str__())
- valid=0
- return valid,comment
-
- def valideMatrice(self,cr):
- #Attention, la matrice contient comme dernier tuple l ordre des variables
- if self.valideEnteteMatrice()==False :
- self.setValid(0)
- if cr == "oui" : self.cr.fatal(tr("La matrice n'a pas le bon entete"))
- return 0
- if self.monType.methodeCalculTaille != None :
- MCSIMP.__dict__[self.monType.methodeCalculTaille](*(self,))
- try :
- #if 1 :
- ok=0
- if len(self.valeur) == self.monType.nbLigs +1:
- ok=1
- for i in range(len(self.valeur) -1):
- if len(self.valeur[i])!= self.monType.nbCols:
- ok=0
- if ok:
- self.setValid(1)
- return 1
- except :
- #else :
+
+
+ def valideMatriceOT(self,cr):
+ #Attention, la matrice contient comme dernier tuple l ordre des variables
+ if self.valideEnteteMatrice()==False :
+ self.setValid(0)
+ if cr == "oui" : self.cr.fatal(tr("La matrice n'a pas le bon entete"))
+ return 0
+ if self.monType.methodeCalculTaille != None :
+ MCSIMP.__dict__[self.monType.methodeCalculTaille](*(self,))
+ try :
+ #if 1 :
+ ok=0
+ if len(self.valeur) == self.monType.nbLigs +1:
+ ok=1
+ for i in range(len(self.valeur) -1):
+ if len(self.valeur[i])!= self.monType.nbCols:
+ ok=0
+ if ok:
+ self.setValid(1)
+ return 1
+ except :
+ #else :
pass
- if cr == 'oui' :
- self.cr.fatal(tr("La matrice n'est pas une matrice %(n_lign)d sur %(n_col)d", \
- {'n_lign': self.monType.nbLigs, 'n_col': self.monType.nbCols}))
- self.setValid(0)
- return 0
-
-
- def nbDeVariables(self):
- listeVariables=self.jdc.getVariables(self.etape)
- self.monType.nbLigs=len(listeVariables)
- self.monType.nbCols=len(listeVariables)
-
- def valideEnteteMatrice(self):
- if self.jdc.getDistributions(self.etape) == () or self.valeur == None : return 0
- if self.jdc.getDistributions(self.etape) != self.valeur[0] : return 0
- return 1
-
- def changeEnteteMatrice(self):
- a=[self.jdc.getDistributions(self.etape),]
- for t in self.valeur[1:]:
- a.append(t)
- self.valeur=a
-
-
- def nbDeDistributions(self):
- listeVariables=self.jdc.getDistributions(self.etape)
- self.monType.nbLigs=len(listeVariables)
- self.monType.nbCols=len(listeVariables)
-
- def getNomDsXML(self):
- nomDsXML=self.parent.getNomDsXML()+"."+self.nom
- return nomDsXML
-
-
- def verifTypeIhm(self,val,cr='non'):
- try :
- val.eval()
- return 1
- except :
- traceback.print_exc()
- pass
- return self.verifType(val,cr)
-
- def verifTypeliste(self,val,cr='non') :
- verif=0
- for v in val :
- verif=verif+self.verifTypeIhm(v,cr)
- return verif
-
- def initModifUp(self):
- Validation.V_MCSIMP.MCSIMP.initModifUp(self)
- CONNECTOR.Emit(self,"valid")
-
- def deleteRef(self):
- print ('je suis dans deleteRef', self.nom)
- if self.definition.creeDesObjets :
- if self.valeur :
- self.valeur.deleteReference()
-
- for MC in self.valeur.utilisePar:
- MC.state='changed'
- CONNECTOR.Emit(MC,"valid")
+ if cr == 'oui' :
+ self.cr.fatal(tr("La matrice n'est pas une matrice %(n_lign)d sur %(n_col)d", \
+ {'n_lign': self.monType.nbLigs, 'n_col': self.monType.nbCols}))
+ self.setValid(0)
+ return 0
+
+
+ def nbDeVariables(self):
+ listeVariables=self.jdc.getVariables(self.etape)
+ self.monType.nbLigs=len(listeVariables)
+ self.monType.nbCols=len(listeVariables)
+ def valideEnteteMatrice(self):
+ if self.jdc.getDistributions(self.etape) == () or self.valeur == None : return 0
+ if self.jdc.getDistributions(self.etape) != self.valeur[0] : return 0
+ return 1
+
+ def changeEnteteMatrice(self):
+ a=[self.jdc.getDistributions(self.etape),]
+ for t in self.valeur[1:]:
+ a.append(t)
+ self.valeur=a
+
+
+ def nbDeDistributions(self):
+ listeVariables=self.jdc.getDistributions(self.etape)
+ self.monType.nbLigs=len(listeVariables)
+ self.monType.nbCols=len(listeVariables)
+
+ def getNomDsXML(self):
+ nomDsXML=self.parent.getNomDsXML()+"."+self.nom
+ return nomDsXML
+
+
+ def verifTypeIhm(self,val,cr='non'):
+ try :
+ val.eval()
+ return 1
+ except :
+ traceback.print_exc()
+ pass
+ return self.verifType(val,cr)
+
+ def verifTypeliste(self,val,cr='non') :
+ verif=0
+ for v in val :
+ verif=verif+self.verifTypeIhm(v,cr)
+ return verif
+
+ def initModifUp(self):
+ Validation.V_MCSIMP.MCSIMP.initModifUp(self)
+ CONNECTOR.Emit(self,"valid")
+
+ def deleteRef(self):
+ if self.valeur == None or self.valeur == [] : return
+ if not type(self.valeur) in (list, tuple): lesValeurs=(self.valeur,)
+ else : lesValeurs=self.valeur
+ for val in lesValeurs:
+ if self.definition.creeDesObjets :
+ val.deleteReference(self)
+ else :
+ if (hasattr (val, 'enleveUtilisePar')) : val.enleveUtilisePar(self)
+
+ def updateAutresMotsClefs(self):
+ print ('updateAutresMotsClefs')
+ for (nomMC, Xpath) in self.definition.metAJour :
+ exp=Xpath+'.getChild("'+nomMC+'")'
+ try :
+ lesMotsClefs = eval(exp)
+ except :
+ lesMotsClefs = []
+ if not type(lesMotsClefs) in (list, tuple): lesMotsClefs=(lesMotsClefs,)
+ if isinstance (lesMotsClefs, MCSIMP): lesMotsClefs=(lesMotsClefs,)
+ listeEtapesDejaRedessinees=[]
+ listeMotsClefsAppel=[]
+ for leMotCle in lesMotsClefs:
+ leMotCle.state='changed'
+ if not leMotCle.isValid() : leMotCle.val=None
+ if leMotCle.etape not in listeEtapesDejaRedessinees :
+ listeEtapesDejaRedessinees.append(leMotCle.etape)
+ listeMotsClefsAppel.append(leMotCle)
+ for leMotCle in listeMotsClefsAppel:
+ leMotCle.demandeRedessine()
+
+ print ('fin updateAutresMotsClefs')
conceptRE=re.compile(r'[a-zA-Z_]\w*$')
class OBJECT:
- from Noyau.N_CO import CO
- from Noyau.N_ASSD import assd
-
- def isMCList(self):
- """
- Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut)
- """
- return 0
-
- def getRegles(self):
- """
- Retourne les regles de self
- """
- if hasattr(self,'definition'):
- return self.definition.regles
- elif hasattr(self,'regles'):
- return self.regles
- else :
- return []
-
- def initModif(self):
- """
- Met l'etat de l'objet a modified et propage au parent
- qui vaut None s'il n'existe pas
- """
- self.state = 'modified'
- if self.parent:
- self.parent.initModif()
-
- def finModif(self):
- """
- Methode appelee apres qu'une modification a ete faite afin de declencher
- d'eventuels traitements post-modification
- """
- #print "finModif",self
- # pour les objets autres que les commandes, aucun traitement specifique
- # on remonte l'info de fin de modif au parent
- CONNECTOR.Emit(self,"valid")
- if self.parent:
- self.parent.finModif()
-
- def isRepetable(self):
- """
- Indique si l'objet est repetable
- """
- return 0
-
- def listeMcPresents(self):
- """
- Retourne la liste des noms des mots cles presents
- """
- return []
-
- def getDocu(self):
- return self.definition.getDocu()
-
- def getListeMcInconnus(self):
- """
- Retourne la liste des mots-cles inconnus dans self
- """
- return []
-
- def verifConditionRegles(self,liste_presents):
- """
- Retourne la liste des mots-cles a rajouter pour satisfaire les regles
- en fonction de la liste des mots-cles presents
- """
- liste=[]
- for regle in self.definition.regles:
- liste=regle.verifConditionRegle(liste,liste_presents)
- return liste
-
- def verifConditionBloc(self):
- """
- Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la definition) de self et
- retourne deux listes :
- - la premiere contient les noms des blocs a rajouter
- - la seconde contient les noms des blocs a supprimer
- """
- return [],[]
-
- def getGenealogiePrecise(self):
- if self.parent:
- l=self.parent.getGenealogiePrecise()
- l.append(self.nom.strip())
- return l
- else:
- return [self.nom.strip()]
-
-
- def getGenealogie(self):
- """
- Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC
- ou ETAPE) de self jusqu'au premier objet etape rencontre
- """
- if self.parent:
- l=self.parent.getGenealogie()
- l.append(self.nom.strip())
- return l
- else:
- return [self.nom.strip()]
-
- def getFr(self):
- """
- Retourne la chaine d'aide contenue dans le catalogue
- en tenant compte de la langue
- """
- try:
- #if 1 :
- c=getattr(self.definition,self.jdc.lang)
- return c
- except:
- #else:
- try :
- c=getattr(self.definition,"fr")
+ from Noyau.N_CO import CO
+ from Noyau.N_ASSD import assd
+
+ def isMCList(self):
+ """
+ Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut)
+ """
+ return 0
+
+ def getRegles(self):
+ """
+ Retourne les regles de self
+ """
+ if hasattr(self,'definition'):
+ return self.definition.regles
+ elif hasattr(self,'regles'):
+ return self.regles
+ else :
+ return []
+
+ def initModif(self):
+ """
+ Met l'etat de l'objet a modified et propage au parent
+ qui vaut None s'il n'existe pas
+ """
+ self.state = 'modified'
+ if self.parent:
+ self.parent.initModif()
+
+ def finModif(self):
+ """
+ Methode appelee apres qu'une modification a ete faite afin de declencher
+ d'eventuels traitements post-modification
+ """
+ #print "finModif",self
+ # pour les objets autres que les commandes, aucun traitement specifique
+ # on remonte l'info de fin de modif au parent
+ CONNECTOR.Emit(self,"valid")
+ if self.parent:
+ self.parent.finModif()
+
+ def isRepetable(self):
+ """
+ Indique si l'objet est repetable
+ """
+ return 0
+
+ def listeMcPresents(self):
+ """
+ Retourne la liste des noms des mots cles presents
+ """
+ return []
+
+ def getDocu(self):
+ return self.definition.getDocu()
+
+ def getListeMcInconnus(self):
+ """
+ Retourne la liste des mots-cles inconnus dans self
+ """
+ return []
+
+ def verifConditionRegles(self,liste_presents):
+ """
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
+ """
+ liste=[]
+ for regle in self.definition.regles:
+ liste=regle.verifConditionRegle(liste,liste_presents)
+ return liste
+
+ def verifConditionBloc(self):
+ """
+ Evalue les conditions de tous les blocs fils possibles
+ (en fonction du catalogue donc de la definition) de self et
+ retourne deux listes :
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
+ """
+ return [],[]
+
+ def getGenealogiePrecise(self):
+ if self.parent:
+ l=self.parent.getGenealogiePrecise()
+ l.append(self.nom.strip())
+ return l
+ else:
+ return [self.nom.strip()]
+
+
+ def getGenealogie(self):
+ """
+ Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC
+ ou ETAPE) de self jusqu'au premier objet etape rencontre
+ """
+ if self.parent:
+ l=self.parent.getGenealogie()
+ l.append(self.nom.strip())
+ return l
+ else:
+ return [self.nom.strip()]
+
+ def getFr(self):
+ """
+ Retourne la chaine d'aide contenue dans le catalogue
+ en tenant compte de la langue
+ """
+ try:
+ #if 1 :
+ c=getattr(self.definition,self.jdc.lang)
return c
- except :
- return ''
-
- def updateConcept(self,sd):
- pass
-
- def normalize(self):
- """ Retourne l'objet normalise. En general self sauf si
- pour etre insere dans l'objet pere il doit etre
- wrappe dans un autre objet (voir mot cle facteur).
- """
- return self
-
- def deleteMcGlobal(self):
- return
-
- def updateMcGlobal(self):
- return
-
- #def __del__(self):
- # print "__del__",self
-
- def nommeSd(self):
- # surcharge dans I_ETAPE.py
- if ( nom in dir(self.jdc.cata)) : return (0, nom + tr("mot reserve"))
- if not conceptRE.match(nom):
- return 0, tr("Un nom de concept doit etre un identificateur Python")
- self.initModif()
- #self.getSdProd()
- #self.sd.nom = nom
- #self.sdnom=nom
- #self.parent.updateConceptAfterEtape(self,self.sd)
- #self.finModif()
- #return 1, tr("Nommage du concept effectue")
-
- def deleteRef(self):
- # doit etre surcharge dans MC_COMPO et MC_SIMP
- pass
-
- def demandeRedessine(self):
- CONNECTOR.Emit(self,"redessine")
-
+ except:
+ #else:
+ try :
+ c=getattr(self.definition,"fr")
+ return c
+ except :
+ return ''
+
+ def updateConcept(self,sd):
+ pass
+
+ def normalize(self):
+ """ Retourne l'objet normalise. En general self sauf si
+ pour etre insere dans l'objet pere il doit etre
+ wrappe dans un autre objet (voir mot cle facteur).
+ """
+ return self
+
+ def deleteMcGlobal(self):
+ return
+
+ def updateMcGlobal(self):
+ return
+
+ #def __del__(self):
+ # print "__del__",self
+
+ def nommeSd(self):
+ # surcharge dans I_ETAPE.py
+ if ( nom in dir(self.jdc.cata)) : return (0, nom + tr("mot reserve"))
+ if not conceptRE.match(nom):
+ return 0, tr("Un nom de concept doit etre un identificateur Python")
+ self.initModif()
+ #self.getSdProd()
+ #self.sd.nom = nom
+ #self.sdnom=nom
+ #self.parent.updateConceptAfterEtape(self,self.sd)
+ #self.finModif()
+ #return 1, tr("Nommage du concept effectue")
+
+ def deleteRef(self):
+ # est surcharge dans MC_SIMP et dans MC_List
+ #print ('je suis dans deleteRef pour', self.nom)
+ for obj in (self.mcListe):
+ obj.deleteRef()
+
+ def supprimeUserAssd(self):
+ pass
+
+ def demandeRedessine(self):
+ #print ('demandeRedessine pour', self.nom, self, tout)
+ CONNECTOR.Emit(self,"redessine")
+
+ def isUQActivate(self):
+ # valide uniquement pour les MCSIMP
+ return True
class ErrorObj(OBJECT):pass
-
from . import I_REGLE
class PRESENT_ABSENT(I_REGLE.REGLE):
- def purgeListe(self,liste_a_purger,listeMcPresents):
- regle_active=0
- if self.mcs[0] in listeMcPresents:regle_active=1
- if not regle_active : return liste_a_purger
-
- # Il ne faut pas purger le mot cle present
- for mc in self.mcs[1:]:
- if mc in liste_a_purger :
- liste_a_purger.remove(mc)
- return liste_a_purger
+ def purgeListe(self,liste_a_purger,listeMcPresents):
+ regle_active=0
+ if self.mcs[0] in listeMcPresents:regle_active=1
+ if not regle_active : return liste_a_purger
+ # Il ne faut pas purger le mot cle present
+ for mc in self.mcs[1:]:
+ if mc in liste_a_purger :
+ liste_a_purger.remove(mc)
+ return liste_a_purger
from . import I_REGLE
class PRESENT_PRESENT(I_REGLE.REGLE):
- def verifConditionRegle(self,liste,l_mc_presents):
- mc0=self.mcs[0]
- for mc_present in l_mc_presents:
- if mc_present == mc0 :
- for mc in self.mcs[1:]:
- nb = l_mc_presents.count(mc)
- if nb == 0 : liste.append(mc)
+ def verifConditionRegle(self,liste,l_mc_presents):
+ mc0=self.mcs[0]
+ for mc_present in l_mc_presents:
+ if mc_present == mc0 :
+ for mc in self.mcs[1:]:
+ nb = l_mc_presents.count(mc)
+ if nb == 0 : liste.append(mc)
+ return liste
return liste
- return liste
-
-
from Extensions.eficas_exception import EficasException
class PROC_ETAPE(I_ETAPE.ETAPE):
- def getSdname(self):
- return ""
+ def getSdname(self):
+ return ""
- def getSdprods(self,nom_sd):
- """
- Fonction : retourne le concept produit par l etape de nom nom_sd
- s il existe sinon None
- Une PROC ne produit aucun concept
- """
- return None
+ def getSdprods(self,nom_sd):
+ """
+ Fonction : retourne le concept produit par l etape de nom nom_sd
+ s il existe sinon None
+ Une PROC ne produit aucun concept
+ """
+ return None
- def supprimeSdProds(self):
- """
- Fonction: Lors d'une destruction d'etape, detruit tous les concepts produits
- Une procedure n'en a aucun
- """
- return
+ def supprimeSdProds(self):
+ """
+ Fonction: Lors d'une destruction d'etape, detruit tous les concepts produits
+ Une procedure n'en a aucun
+ """
+ return
- def deleteConcept(self,sd):
- """
- Fonction : Mettre a jour les mots cles de l etape
- suite a la disparition du concept sd
- Seuls les mots cles simples MCSIMP font un traitement autre
- que de transmettre aux fils
+ def deleteConcept(self,sd):
+ """
+ Fonction : Mettre a jour les mots cles de l etape
+ suite a la disparition du concept sd
+ Seuls les mots cles simples MCSIMP font un traitement autre
+ que de transmettre aux fils
- Inputs :
- - sd=concept detruit
- """
- for child in self.mcListe :
- child.deleteConcept(sd)
+ Inputs :
+ - sd=concept detruit
+ """
+ for child in self.mcListe :
+ child.deleteConcept(sd)
- def replaceConcept(self,old_sd,sd):
- """
- Fonction : Mettre a jour les mots cles de l etape
- suite au remplacement du concept old_sd
+ def replaceConcept(self,old_sd,sd):
+ """
+ Fonction : Mettre a jour les mots cles de l etape
+ suite au remplacement du concept old_sd
- Inputs :
- - old_sd=concept remplace
- - sd=nouveau concept
- """
- for child in self.mcListe :
- child.replaceConcept(old_sd,sd)
+ Inputs :
+ - old_sd=concept remplace
+ - sd=nouveau concept
+ """
+ for child in self.mcListe :
+ child.replaceConcept(old_sd,sd)
#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
- def buildSd(self):
- """
- Methode de Noyau surchargee pour poursuivre malgre tout
- si une erreur se produit pendant la creation du concept produit
- """
- try:
- sd=Noyau.N_PROC_ETAPE.PROC_ETAPE.buildSd(self)
- except AsException :
- # Une erreur s'est produite lors de la construction du concept
- # Comme on est dans EFICAS, on essaie de poursuivre quand meme
- # Si on poursuit, on a le choix entre deux possibilites :
- # 1. on annule la sd associee a self
- # 2. on la conserve mais il faut la retourner
- # En plus il faut rendre coherents sdnom et sd.nom
- self.sd=None
- self.sdnom=None
- self.state="unchanged"
- self.valid=0
-
+ def buildSd(self):
+ """
+ Methode de Noyau surchargee pour poursuivre malgre tout
+ si une erreur se produit pendant la creation du concept produit
+ """
+ try:
+ sd=Noyau.N_PROC_ETAPE.PROC_ETAPE.buildSd(self)
+ except AsException :
+ # Une erreur s'est produite lors de la construction du concept
+ # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+ # Si on poursuit, on a le choix entre deux possibilites :
+ # 1. on annule la sd associee a self
+ # 2. on la conserve mais il faut la retourner
+ # En plus il faut rendre coherents sdnom et sd.nom
+ self.sd=None
+ self.sdnom=None
+ self.state="unchanged"
+ self.valid=0
class REGLE:
- def getText(self):
- text = self.__class__.__name__+ ' :\n'
- for mc in self.mcs :
- text = text + '\t' + mc.strip() + '\n'
- return text
-
- def purgeListe(self,liste_a_purger,listeMcPresents):
- """
- Cette methode doit retirer de la liste liste_a_purger
- les elements qui ne doivent plus apparaitre en fonction du contexte
- """
- # Dans le cas general on ne touche pas a la liste
- return liste_a_purger
-
- def hasOperande(self,nom):
- # On peut faire aussi try:self.mcs.index(nom);return 1;except:return 0
- for mc in self.mcs:
- if mc==nom : return 1
- return 0
-
- def verifConditionRegle(self,liste,l_mc_presents):
- return []
+ def getText(self):
+ text = self.__class__.__name__+ ' :\n'
+ for mc in self.mcs :
+ text = text + '\t' + mc.strip() + '\n'
+ return text
+
+ def purgeListe(self,liste_a_purger,listeMcPresents):
+ """
+ Cette methode doit retirer de la liste liste_a_purger
+ les elements qui ne doivent plus apparaitre en fonction du contexte
+ """
+ # Dans le cas general on ne touche pas a la liste
+ return liste_a_purger
+
+ def hasOperande(self,nom):
+ # On peut faire aussi try:self.mcs.index(nom);return 1;except:return 0
+ for mc in self.mcs:
+ if mc==nom : return 1
+ return 0
+
+ def verifConditionRegle(self,liste,l_mc_presents):
+ return []
# def enregistreXML(self,root,catalogueXml):
# regleXml=ET.SubElement(root,'regles')
# txt=""
# for mot in self.getText().split('\n'):
-# mot.replace(' ','')
+# mot.replace(' ','')
# txt=txt + mot + " "
# regleXml.text= txt
-
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2021 EDF R&D
+#
+# 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.
+#
+# 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
+#
+
+class I_Matrice:
+ def activeCouleur(self):
+ self.dictCouleurs={}
+ self.indiceCouleur=1
+ self.listeCouleurs=((10, 186, 181),(204, 204, 255),(121, 248, 248),(254, 231, 240),(250, 234, 115), (254, 191, 210),(248, 142, 85),(133, 193, 126),(210, 202, 236),(225, 206, 154), (187, 174, 152),(240, 195, 0),(242, 255, 255),(239, 239, 239),(149, 165, 149), (150, 131, 236),(201, 160, 220),(103, 159, 90),(176, 242, 182),(233, 201, 177))
+
class UN_PARMI(I_REGLE.REGLE):
- def purgeListe(self,liste_a_purger,listeMcPresents):
- regle_active=0
- for mc_present in listeMcPresents:
- if mc_present in self.mcs:
- regle_active=1
- break
- if not regle_active : return liste_a_purger
-
- # Si un des mots cles est present, on les enleve tous
- # sauf celui ci
- for mc in self.mcs:
- if mc in liste_a_purger and mc not in listeMcPresents:
- liste_a_purger.remove(mc)
- return liste_a_purger
+ def purgeListe(self,liste_a_purger,listeMcPresents):
+ regle_active=0
+ for mc_present in listeMcPresents:
+ if mc_present in self.mcs:
+ regle_active=1
+ break
+ if not regle_active : return liste_a_purger
+ # Si un des mots cles est present, on les enleve tous
+ # sauf celui ci
+ for mc in self.mcs:
+ if mc in liste_a_purger and mc not in listeMcPresents:
+ liste_a_purger.remove(mc)
+ return liste_a_purger
from Noyau.N_VALIDATOR import *
class Compulsory(Compulsory):
- def hasInto(self):
- return 0
- def valideListePartielle(self,liste_courante=None):
- return 1
+ def hasInto(self):
+ return 0
+ def valideListePartielle(self,liste_courante=None):
+ return 1
class OrdList(OrdList):
- def valideListePartielle(self,liste_courante=None):
- """
- Methode de validation de liste partielle pour le validateur OrdList
- """
- try:
- self.convert(liste_courante)
- valid=1
- except :
- valid=0
- return valid
-
+ def valideListePartielle(self,liste_courante=None):
+ """
+ Methode de validation de liste partielle pour le validateur OrdList
+ """
+ try:
+ self.convert(liste_courante)
+ valid=1
+ except :
+ valid=0
+ return valid
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# 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.
-#
-# 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
-#
-# Modules Python
-from __future__ import absolute_import
-try :
- from builtins import str
- from builtins import range
- from builtins import object
-except : pass
-
-import types,os,sys
-
-from six.moves import range
-from PyQt5.QtGui import QIcon
-from PyQt5.QtWidgets import QApplication, QMessageBox
-from PyQt5.QtCore import QTimer, QSize, Qt
-
-# Modules Eficas
-from Extensions.i18n import tr
-
-from InterfaceQT4.feuille import Feuille
-from UiQT5.desWidgetPlusieursBase import Ui_WidgetPlusieursBase
-from InterfaceQT4.politiquesValidation import PolitiquePlusieurs
-from InterfaceQT4.qtSaisie import SaisieValeur
-from InterfaceQT4.gereListe import GereListe
-from InterfaceQT4.gereListe import GerePlie
-from InterfaceQT4.gereListe import LECustom
-
-dicoLongueur={2:95,3:125,4:154,5:183,6:210,float('inf'):210}
-hauteurMax=253
-
-class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie):
-
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- #print "MonWidgetPlusieursBase", nom
- self.inFocusOutEvent=False
- self.nomLine="lineEditVal"
- self.inInit=True
- self.indexDernierLabel=0
- self.numLineEditEnCours=0
- self.listeAffichageWidget=[]
- Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- GereListe.__init__(self)
- self.gereIconePlier()
- self.BSelectFichier.clicked.connect(self.selectInFile)
-
- if sys.platform[0:5]!="linux":
- repIcon=self.node.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'arrow_up.png')
- icon = QIcon(fichier)
- self.RBHaut.setIcon(icon)
- self.RBHaut.setIconSize(QSize(32, 32))
- fichier2=os.path.join(repIcon, 'arrow_down.png')
- icon2 = QIcon(fichier2)
- self.RBBas.setIcon(icon2)
- fichier3=os.path.join(repIcon, 'file-explorer.png')
- icon3 = QIcon(fichier2)
- self.BSelectFichier.setIcon(icon3)
- self.BSelectFichier.setIconSize(QSize(32, 32))
- icon=QIcon(self.repIcon+"/MoinsBleu.png")
- self.RBMoins.setIcon(icon)
- icon=QIcon(self.repIcon+"/PlusBleu.png")
- self.RBPlus.setIcon(icon)
- icon=QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
- self.RBVoisListe.setIcon(icon)
-
-
- self.listeValeursCourantes=self.node.item.getListeValeurs()
- if self.monSimpDef.max != "**" and self.monSimpDef.max < 7:
- hauteurMax=dicoLongueur[self.monSimpDef.max]
- else :
- hauteurMax=220
- # if self.monSimpDef.max == self.monSimpDef.min : self.setMaximumHeight(hauteur)
- self.resize(self.width(),hauteurMax)
- self.setMinimumHeight(hauteurMax)
- self.finCommentaireListe()
- self.parentQt.commandesLayout.insertWidget(-1,self)
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
- self.AAfficher=self.lineEditVal1
- self.inInit=False
- # PNPN a completer __ si tuple le type des tuples sinon le tuple
- self.monCommentaireLabel.setText(self.finCommentaireListe())
-
-
- def setValeurs(self):
- self.vScrollBar = self.scrollArea.verticalScrollBar()
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- # construction du min de valeur a entrer
- if self.monSimpDef.max == "**" : aConstruire=7
- elif self.monSimpDef.max == float('inf'): aConstruire=7
- else : aConstruire=self.monSimpDef.max
-
- for i in range(1,aConstruire):
- self.ajoutLineEdit()
- QApplication.processEvents()
- self.scrollArea.ensureWidgetVisible(self.lineEditVal1)
- self.listeValeursCourantes=self.node.item.getListeValeurs()
- index=1
- for valeur in self.listeValeursCourantes :
- val=self.politique.getValeurTexte(valeur)
- nomLineEdit="lineEditVal"+str(index)
- if hasattr(self,nomLineEdit) :
- courant=getattr(self,nomLineEdit)
- if 'R' in self.objSimp.definition.type and str(val) != repr(val) : courant.setText(repr(val))
- else : courant.setText(str(val))
- else :
- self.ajoutLineEdit(val)
- index=index+1
- # ajout d'une ligne vide ou affichage commentaire
- if self.indexDernierLabel < self.monSimpDef.max : self.ajoutLineEdit()
- else : self.scrollArea.setToolTip('nb max de valeurs atteint')
- #self.adjustSize()
- #self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
-
-
- def ajoutLineEdit(self,valeur=None,):
- self.indexDernierLabel=self.indexDernierLabel+1
- nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
- if hasattr(self,nomLineEdit) :
- self.indexDernierLabel=self.indexDernierLabel-1
- return
- nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
- self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
- nouveauLE.setText("")
- if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
- else : nouveauLE.setStyleSheet("background:rgb(235,235,235)")
- nouveauLE.setFrame(False)
- nouveauLE.returnPressed.connect(self.changeValeur)
-
- setattr(self,nomLineEdit,nouveauLE)
- self.listeAffichageWidget.append(nouveauLE)
- self.etablitOrdre()
- if valeur != None : nouveauLE.setText(str(valeur))
- # deux lignes pour que le ensureVisible fonctionne
- self.estVisible=nouveauLE
- if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
-
- def etablitOrdre(self):
- i=0
- while(i +1 < len(self.listeAffichageWidget)):
- self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
- self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
- i=i+1
- # si on boucle on perd l'ordre
-
-
- def rendVisibleLigne(self):
- QApplication.processEvents()
- self.estVisible.setFocus()
- self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
-
-
- def finCommentaire(self):
- return self.finCommentaireListe()
-
- def ajout1Valeur(self,valeur=None):
- if valeur == None : return
- liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
- if validite == 0 : return
- if liste ==[] : return
- listeVal=[]
- for valeur in self.listeValeursCourantes : listeVal.append(valeur)
- validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
- if (comm2 != "" and comm != None) : return comm2
- if validite :
- self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
- if len(self.listeValeursCourantes) > self.monSimpDef.min :
- self.node.item.setValeur(self.listeValeursCourantes)
- self.reaffiche()
- return None
- else :
- return(comm2+" "+comm)
-
- def reaffiche(self):
- # A priori, on ne fait rien
- pass
-
-
- def ajoutNValeur(self,liste):
- #----------------------------
- # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
- # car alors le temps de verification devient prohibitif reconstructu=ion et verification a
- # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
-
-
- listeFormatee=list(liste)
-
- min,max=self.node.item.getMinMax()
- if self.objSimp.valeur == None : listeComplete=listeFormatee
- else : listeComplete =self.objSimp.valeur + listeFormatee
-
- if len(listeComplete) > max :
- texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
- self.editor.afficheInfos(texte,Qt.red)
- return
-
- validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete)
- if not validite :
- self.editor.affiche_infos(texte,Qt.red)
- return
-
- # on calcule le dernier lineedit rempli avant de changer la valeur
- if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
- else : indexDernierRempli=0
-
- self.politique.recordValeur(listeComplete)
-
- indexDernierRempli=0
- while ( indexDernierRempli < len(liste) ) :
- texte=liste[indexDernierRempli]
- if indexDernierRempli < self.indexDernierLabel:
- nomLineEdit="lineEditVal"+str(indexDernierRempli+1)
- courant=getattr(self,nomLineEdit)
- courant.setText(str(texte))
- else :
- self.ajoutLineEdit(texte)
- indexDernierRempli = indexDernierRempli + 1
-
-
- def changeValeur(self,changeDePlace=True,oblige=False):
- donneFocus=None
- derniereValeur=None
- self.listeValeursCourantes = []
- fin=self.indexDernierLabel
- for i in range (1, fin):
- nomLineEdit="lineEditVal"+str(i)
- courant=getattr(self,nomLineEdit)
- valeur=courant.text()
- lval=valeur.split(',')
- if len (lval) > 1 :
- msgBox=QMessageBox()
- msgBox.setText("separator ',' ")
- msgBox.setInformativeText("Do you want to enter " + str (lval) + "?")
- msgBox.setStandardButtons( QMessageBox.Ok | QMessageBox.Cancel)
- msgBox.setDefaultButton(QMessageBox.Ok)
- ret = msgBox.exec_()
- if ret != 1024 :
- courant.setText("")
- return
- courant.setText(lval[0])
- self.ajoutNValeur(lval[1:])
- self.listeValeursCourantes = []
-
- for i in range (1, self.indexDernierLabel+1):
- nomLineEdit="lineEditVal"+str(i)
- courant=getattr(self,nomLineEdit)
- valeur=courant.text()
- if valeur != None and valeur != "" :
- commentaire=self.ajout1Valeur(valeur)
- if (commentaire != None ):
- self.editor.afficheInfos(commentaire,Qt.red)
- courant.setText("")
- donneFocus=courant
- self.reaffiche()
- return
- else :
- self.editor.afficheInfos("")
- elif donneFocus==None : donneFocus=courant
-
- nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
- dernier=getattr(self,nomDernierLineEdit)
- derniereValeur=dernier.text()
- if changeDePlace:
- if donneFocus != None :
- donneFocus.setFocus()
- self.scrollArea.ensureWidgetVisible(donneFocus)
- elif self.indexDernierLabel < self.monSimpDef.max :
- self.ajoutLineEdit()
- if self.listeValeursCourantes == [] : return
- min,max = self.node.item.getMinMax()
- if len(self.listeValeursCourantes) < self.monSimpDef.min :
- self.editor.afficheInfos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
- if len(self.listeValeursCourantes) < min and oblige==True: return
- if len(self.listeValeursCourantes) > max : return
- self.node.item.setValeur(self.listeValeursCourantes)
- if len(self.listeValeursCourantes) == self.monSimpDef.max :
- self.editor.afficheInfos(tr('nb max de valeurs atteint'))
- self.setValide()
- self.reaffiche()
-
-
-
-# Avertissement quand on quitte le widget
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# 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.
-#
-# 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
-#
-
-from __future__ import absolute_import
-from __future__ import print_function
-try :
- from builtins import str
- from builtins import range
-except : pass
-
-import re
-import types,sys,os
-import traceback
-from . import typeNode
-
-import six
-from six.moves import range
-
-from PyQt5.QtWidgets import QTreeWidget , QTreeWidgetItem, QApplication, QMessageBox
-from PyQt5.QtGui import QIcon
-from PyQt5.QtCore import Qt
-from Extensions.i18n import tr
-from .gereRegles import GereRegles
-from .monChoixCommande import MonChoixCommande
-
-#------------------------------------------
-class JDCTree( QTreeWidget,GereRegles ):
-#------------------------------------------
-
- def __init__( self, jdc_item, QWParent):
- #if hasattr(QWParent,'widgetTree') :
- self.editor = QWParent
- self.plie=False
- if self.editor.widgetTree !=None :
- QTreeWidget.__init__(self, self.editor.widgetTree )
- self.editor.verticalLayout_2.addWidget(self)
- if self.editor.enteteQTree=='complet':
- self.headerItem().setText(0, "Commande ")
- self.headerItem().setText(1, "Concept/Valeur")
- else :
- self.headerItem().setText(0, "Commande ")
- self.setColumnWidth(0,200)
- self.setExpandsOnDoubleClick(False)
- self.setSelectionMode(3)
- else :
- QTreeWidget.__init__(self, None )
- self.item = jdc_item
- self.tree = self
- self.appliEficas = self.editor.appliEficas
- self.childrenComplete=[]
- self.racine=self.item.itemNode(self,self.item)
-
- self.itemCourant=None
-
- self.itemClicked.connect(self.handleOnItem)
- self.itemCollapsed.connect(self.handleCollapsedItem)
- self.itemExpanded.connect(self.handleExpandedItem)
-
- #PNPNPN verifier dans quel cas on se trouve : affiche l arbre ou la commande
- self.node_selected=self.racine
- self.inhibeExpand=True
- self.expandItem(self.racine)
- self.inhibeExpand=False
- #print ("self.editor.maConfiguration.afficheCommandesPliees", self.editor.maConfiguration.afficheCommandesPliees)
- if self.racine.children !=[] :
- #self.editor.initSplitterSizes(3)
- if self.editor.maConfiguration.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche()
- else : self.racine.children[0].deplieToutEtReaffiche()
- self.racine.children[0].fenetre.donnePremier()
- else :
- #self.editor.initSplitterSizes(2)
- self.racine.affichePanneau()
- #print self.editor.splitter.sizes()
- #PNPNPN
- #pdb.set_trace()
-
- def contextMenuEvent(self,event) :
- #print "contextMenuEvent"
- coord=event.globalPos()
- item= self.currentItem()
- self.handleContextMenu(item,coord)
-
- def handleContextMenu(self,item,coord):
- """
- Private slot to show the context menu of the listview.
-
- @param itm the selected listview item (QListWidgetItem)
- @param coord the position of the mouse pointer (QPoint)
- Attention : existeMenu permet de savoir si un menu est associe a cet item
- """
- #print "handleContextMenu"
- if item == None : return
- self.itemCourant=item
- if item.existeMenu == 0 : return
- if item.menu == None:
- item.createPopUpMenu()
- if item.menu != None:
- if item.item.getNom() == "DISTRIBUTION" and item.item.isValid() :
- item.Graphe.setEnabled(1)
- item.menu.exec_(coord)
-
-
- def handleCollapsedItem(self,item):
- #print "dans CollapsedItem", self.inhibeExpand
- if self.inhibeExpand == True : return
- self.itemCourant=item
- # On traite le cas de l item non selectionne
- itemParent=item
- while not (hasattr (itemParent,'getPanel')) :
- itemParent=itemParent.treeParent
- if self.tree.node_selected != itemParent :
- item.setExpanded(False)
- return
-
- itemParent=item
- item.setPlie()
- item.plieToutEtReaffiche()
- item.select()
-
- def handleExpandedItem(self,item):
- #print ("handleExpandedItem pour ", item.item.nom, self.inhibeExpand)
- #import traceback
- #traceback.print_stack()
- if self.inhibeExpand == True : return
- self.itemCourant=item
- self.inhibeExpand = True
- itemParent=item
- while not (hasattr (itemParent,'getPanel')) :
- if itemParent.plie==True : itemParent.setDeplie()
- itemParent=itemParent.treeParent
- if self.tree.node_selected != itemParent :
- item.setExpanded(True)
- self.inhibeExpand = False
- return
- item.deplieToutEtReaffiche()
- self.inhibeExpand = False
-
-
- def handleOnItem(self,item,int):
- #print ("je passe dans handleOnItem pour ",self, item.item.nom, item, item.item, item.item.getLabelText())
-
- from InterfaceQT4 import composimp
- self.inhibeExpand = True
- self.itemCourant=item
- itemParent=item
-
- while not (hasattr (itemParent,'getPanel')) :
- if itemParent.plie==True : itemParent.setDeplie()
- itemParent=itemParent.treeParent
-
- if itemParent.fenetre != self.editor.fenetreCentraleAffichee :
- estUneFeuille=(isinstance(item,composimp.Node))
- # il faut afficher le parent
- if estUneFeuille : itemParent.affichePanneau()
- elif self.editor.maConfiguration.afficheCommandesPliees : itemParent.plieToutEtReafficheSaufItem(item)
- else : itemParent.affichePanneau()
-
-
- elif (isinstance(item,composimp.Node)) and item.fenetre : item.fenetre.rendVisible()
- elif itemParent!=item:
- self.tree.handleExpandedItem(item)
- #item.fenetre.donnePremier()
- #item.fenetre.rendActif()
- #print 'il faut afficher le 1er'
-
- try :
- fr = item.item.getFr()
- chaineDecoupee= fr.split('\n')
- if len(chaineDecoupee) > 3 :
- txt='\n'.join(chaineDecoupee[0:2])+'...\nfull help : double clicked on validity chip of '+ str(item.item.nom)+ ' in central widget'
- else : txt=fr
-
- if self.editor:
- self.editor.afficheCommentaire(six.text_type(txt))
- except:
- pass
- item.select()
- self.inhibeExpand = False
- #print "je mets inhibeExpand a false handleOnItem"
-
-
- def choisitPremier(self,name):
- self.editor.layoutJDCCHOIX.removeWidget(self.racine.fenetre)
- self.racine.fenetre.close()
- new_node=self.racine.appendBrother(name,'after')
-
-# type de noeud
-COMMENT = "COMMENTAIRE"
-PARAMETERS = "PARAMETRE"
-
-#------------------------------------------
-class JDCNode(QTreeWidgetItem,GereRegles):
-#------------------------------------------
- def __init__( self, treeParent, item, itemExpand=False, ancien=False ):
- #print ("creation d'un noeud : ", item, " ",item.nom,"", treeParent, self)
- #self.a=0
-
-
- self.item = item
- self.vraiParent = treeParent
- self.treeParent = treeParent
- self.tree = self.treeParent.tree
- self.editor = self.treeParent.editor
- self.appliEficas = treeParent.appliEficas
- self.JESUISOFF=0
- self.childrenComplete=[]
-
-
- from InterfaceQT4 import compocomm
- from InterfaceQT4 import compoparam
- from InterfaceQT4 import composimp
- if (isinstance(self.item,compocomm.COMMTreeItem)) : name=tr("Commentaire")
- elif (isinstance(self.item,compoparam.PARAMTreeItem)) : name=tr(str(item.getLabelText()[0]))
- #else: name = tr(str(tr(item.getLabelText()[0]))+" :")
- else: name = tr(item.getLabelText()[0])
- if item.nom != tr(item.nom) : name = str(tr(item.nom)+" :")
- value = tr(str( item.getText() ) )
-
- # si specialisation de la fenetre
- if self.item.object.definition == None : self.fenetreIhm = None
- # Cas des listes de mots_clefs
- else : self.fenetreIhm = self.item.object.definition.fenetreIhm
-
- if self.editor.enteteQTree=='complet':mesColonnes=(name,value)
- else : mesColonnes=(name,)
-
- if self.treeParent.plie==True :
- self.plie = True
- self.appartientAUnNoeudPlie=True
- if self.treeParent.item.isMCList() : self.appartientAUnNoeudPlie = self.treeParent.appartientAUnNoeudPlie
- else :
- self.plie = False
- self.appartientAUnNoeudPlie = False
-
- #if item.nom == "POUTRE" :print "creation d'un noeud : ", item, " ",item.nom,"", self.treeParent, self.appartientAUnNoeudPlie , self.plie
-
- if ancien and itemExpand : self.plie = False
- if ancien and not itemExpand : self.plie = True
- if (isinstance(self.item,composimp.SIMPTreeItem)) : self.plie=False
-
- from InterfaceQT4 import compobloc
- from InterfaceQT4 import compomclist
-
- ajoutAuParentduNoeud=0
- self.treeParent=treeParent
- while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) :
- self.treeParent.childrenComplete.append(self)
- self.treeParent=self.treeParent.vraiParent
- self.treeParent.childrenComplete.append(self)
-
-
- if (isinstance(self,compobloc.Node) or (isinstance(self,compomclist.Node) and self.item.isMCList()) or ( hasattr(self.item.parent,'inhibeValidator') and isinstance(self,compomclist.Node) and self.item.parent.inhibeValidator)) :
- # Le dernier or ne sert que lorsqu'on est en train de creer une liste par les validator
- QTreeWidgetItem.__init__(self,None,mesColonnes)
- else :
- QTreeWidgetItem.__init__(self,self.treeParent,mesColonnes)
-
- self.setToolTip(0,self.item.getFr())
- self.setToolTip(1,self.item.getFr())
- repIcon=self.appliEficas.repIcon
-
- couleur=self.item.getIconName()
- monIcone = QIcon(repIcon+"/" + couleur + ".png")
-
- self.setIcon(0,monIcone)
-
- self.children = []
- self.buildChildren()
- self.menu=None
- self.existeMenu=1
-
- self.item.connect("valid",self.onValid,())
- self.item.connect("supp" ,self.onSupp,())
- self.item.connect("add" ,self.onAdd,())
-
- self.state=""
- self.fenetre=None
- try :
- if self.item.getObject().isBLOC() :
- self.setExpanded(True)
- self.plie=False
- except :
- pass
-
-
- def buildChildren(self,posInsertion=10000):
- """ Construit la liste des enfants de self """
- """ Se charge de remettre les noeuds Expanded dans le meme etat """
- #print ("*********** buildChildren ",self,self.item, self.item.nom)
- #print (poum)
-
- self.listeItemExpanded=[]
- self.listeItemPlie=[]
-
- for enfant in self.childrenComplete :
- if enfant.plie : self.listeItemPlie.append(enfant.item)
- else : self.listeItemExpanded.append(enfant.item)
-
- for enfant in self.childrenComplete :
- parent=enfant.treeParent
- parent.removeChild(enfant)
- enfant.JESUISOFF=1
-
-
- self.children = []
- self.childrenComplete = []
- sublist = self.item._getSubList()
- ind=0
-
- for item in sublist :
- itemExpand=False
- ancien=False
- if item in self.listeItemExpanded : itemExpand=True; ancien=True
- if item in self.listeItemPlie : itemExpand=False; ancien=True
- nouvelItem=item.itemNode(self,item,itemExpand,ancien)
- self.children.append(nouvelItem)
-
- #print ("fin *********** buildChildren ",self,self.item, self.item.nom, self.children)
-
-
- def chercheNoeudCorrespondant(self,objSimp):
- sublist = self.item._getSubList()
- for node in self.childrenComplete:
- if node.item.object==objSimp : return node
- return None
-
-
- def afficheCeNiveau(self):
- #print ('afficheCeNiveau pour ', self.item.nom, self.item.getLabelText())
- for indiceWidget in range(self.editor.widgetCentraleLayout.count()):
- widget=self.editor.widgetCentraleLayout.itemAt(indiceWidget)
- self.editor.widgetCentraleLayout.removeItem(widget)
- if self.editor.fenetreCentraleAffichee != None :
- self.editor.widgetCentraleLayout.removeWidget(self.editor.fenetreCentraleAffichee)
- self.editor.fenetreCentraleAffichee.setParent(None)
- self.editor.fenetreCentraleAffichee.close()
- self.editor.fenetreCentraleAffichee.deleteLater()
-
- from monWidgetNiveauFact import MonWidgetNiveauFact, MonWidgetNiveauFactTableau
- maDefinition=self.item.get_definition()
- monObjet=self.item.object
- if maDefinition.fenetreIhm=='Tableau' : self.maFenetreCadre=MonWidgetNiveauFactTableau(self,self.editor,maDefinition,monObjet)
- else : self.maFenetreCadre=MonWidgetNiveauFact(self,self.editor,maDefinition,monObjet)
- self.fenetre=self.maFenetreCadre
- self.editor.widgetCentraleLayout.addWidget(self.maFenetreCadre)
- self.editor.fenetreCentraleAffichee=self.maFenetreCadre
- self.select()
- #print ('fin afficheCeNiveau pour ', self.item.nom)
-
-
- def getPanelModifie(self):
-
- if self.fenetreIhm == None : return None
- if self.fenetreIhm=='deplie1Niveau':
- from InterfaceQT4.monWidgetCommandeDeplie1Niveau import MonWidgetCommandeDeplie1Niveau
- return MonWidgetCommandeDeplie1Niveau (self,self.editor ,self.item.object)
- return None
-
-
- def affichePanneau(self) :
- #if self.editor.code == 'ASTER' and not(self.item.isActif()) :
- # posera des pb si un code decide d appeler FIN un mot clef
- # on resoudera a ce moment la
- # pour l pas de poussiere sous le tapis
- #print ('_________________ds affichePanneau pour', self.item.nom)
- if not(self.item.isActif()) :
- from .monWidgetInactif import MonWidgetInactif
- self.fenetre = MonWidgetInactif(self,self.editor)
- else:
- itemParent=self
- while not (hasattr (itemParent,'getPanel')) : itemParent=itemParent.treeParent
- if itemParent!=self :
- #print ('j appelle affichePanneau pour ', itemParent.item.nom , 'par', self.item.nom)
- itemParent.affichePanneau()
- #print ('fin _________________ds affichePanneau pour', self.item.nom)
- return
- self.fenetre=self.getPanelModifie()
- if self.fenetre == None : self.fenetre=self.getPanel()
- self.editor.restoreSplitterSizes()
-
- for indiceWidget in range(self.editor.widgetCentraleLayout.count()):
- widget=self.editor.widgetCentraleLayout.itemAt(indiceWidget)
- self.editor.widgetCentraleLayout.removeItem(widget)
- # ceinture et bretelle
- #print 'old fenetre = ',self.editor.fenetreCentraleAffichee
- if self.editor.fenetreCentraleAffichee != None :
- self.editor.widgetCentraleLayout.removeWidget(self.editor.fenetreCentraleAffichee)
- self.editor.fenetreCentraleAffichee.setParent(None)
- self.editor.fenetreCentraleAffichee.close()
- self.editor.fenetreCentraleAffichee.deleteLater()
-
- self.editor.widgetCentraleLayout.addWidget(self.fenetre)
- #print ("j ajoute ", self.fenetre, self.fenetre.node.item.nom)
- self.editor.fenetreCentraleAffichee=self.fenetre
- self.tree.node_selected= self
-
- if self.editor.first :
- if not(isinstance(self.fenetre,MonChoixCommande)): self.editor.first=False
- self.tree.inhibeExpand=True
- self.tree.expandItem(self)
- self.tree.inhibeExpand=False
- #print( '_________________fin affichePanneau pour', self.item.nom)
-
-
- def createPopUpMenu(self):
- #implemente dans les noeuds derives si necessaire
- self.existeMenu = 0
-
- def commentIt(self):
- """
- Cette methode a pour but de commentariser la commande pointee par self
- """
- # On traite par une exception le cas ou l'utilisateur final cherche a desactiver
- # (commentariser) un commentaire.
- try :
- pos=self.treeParent.children.index(self)
- commande_comment = self.item.getObjetCommentarise()
- # On signale a l editeur du panel (le JDCDisplay) une modification
- self.editor.initModif()
- self.treeParent.buildChildren()
- self.treeParent.children[pos].select()
- self.treeParent.children[pos].affichePanneau()
- except Exception as e:
- traceback.print_exc()
- QMessageBox.critical( self.editor, "TOO BAD",str(e))
-
- def unCommentIt(self):
- """
- Realise la decommentarisation de self
- """
- try :
- pos=self.treeParent.children.index(self)
- commande,nom = self.item.unComment()
- self.editor.initModif()
- self.treeParent.buildChildren()
- self.treeParent.children[pos].select()
- self.treeParent.children[pos].affichePanneau()
- except Exception as e:
- QMessageBox.critical( self.editor, "Erreur !",str(e))
-
- def addComment( self, after=True ):
- """
- Ajoute un commentaire a l'interieur du JDC :
- """
- self.editor.initModif()
- if after:
- pos = 'after'
- else:
- pos = 'before'
- return self.appendBrother( COMMENT, pos )
-
- def addParameters( self, after=True ):
- """
- Ajoute un parametre a l'interieur du JDC :
- """
- self.editor.initModif()
- if after: pos = 'after'
- else: pos = 'before'
- child=self.appendBrother( PARAMETERS, pos )
- return child
-
-
- def select( self ):
- """
- Rend le noeud courant (self) selectionne et deselectionne
- tous les autres
- """
- #print "select pour", self.item.nom
- for item in self.tree.selectedItems() :
- item.setSelected(0)
- self.tree.setCurrentItem( self )
-
- #------------------------------------------------------------------
- # Methodes de creation et destruction de noeuds
- # Certaines de ces methodes peuvent etre appelees depuis l'externe
- #------------------------------------------------------------------
- def appendBrother(self,name,pos='after',plier=False):
- """
- Permet d'ajouter un objet frere a l'objet associe au noeud self
- par defaut on l'ajoute immediatement apres
- Methode externe
- """
- self.editor.initModif()
-
- from InterfaceQT4 import compojdc
- if (isinstance(self.treeParent, compojdc.Node)) and not self.verifiePosition(name,pos) : return 0
-
- if self.treeParent != self.vraiParent :
- index = self.vraiParent.children.index(self)
- if pos == 'before': index = index
- elif pos == 'after': index = index +1
- return self.vraiParent.appendChild(name,pos=index,plier=plier)
- else :
- index = self.treeParent.children.index(self)
- if pos == 'before': index = index
- elif pos == 'after': index = index +1
- else:
- print(six.text_type(pos), tr(" n'est pas un index valide pour appendBrother"))
- return 0
- return self.treeParent.appendChild(name,pos=index,plier=plier)
-
- def verifiePosition(self,name,pos,aLaRacine=False):
- if name not in self.editor.readercata.Classement_Commandes_Ds_Arbre : return True
- indexName=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(name)
-
- etapes=self.item.getJdc().etapes
- if etapes == [] : return True
-
- if aLaRacine == False :indexOu=etapes.index(self.item.object)
- else : indexOu=0
-
- if pos=="after" : indexOu = indexOu+1
- for e in etapes[:indexOu] :
- nom=e.nom
- if nom not in self.editor.readercata.Classement_Commandes_Ds_Arbre : continue
- indexEtape=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(nom)
- if indexEtape > indexName :
- comment=tr('le mot clef ')+name+tr(' doit etre insere avant ')+nom
- QMessageBox.information( None,tr('insertion impossible'),comment, )
- return False
- for e in etapes[indexOu:] :
- nom=e.nom
- if nom not in self.editor.readercata.Classement_Commandes_Ds_Arbre : continue
- indexEtape=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(nom)
- if indexEtape < indexName :
- comment=tr('le mot clef ')+name+tr(' doit etre insere apres ')+nom
- QMessageBox.information( None,tr('insertion impossible'),comment, )
- return False
- return True
-
- def appendChild(self,name,pos=None,plier=False):
- """
- Methode pour ajouter un objet fils a l'objet associe au noeud self.
- On peut l'ajouter en debut de liste (pos='first'), en fin (pos='last')
- ou en position intermediaire.
- Si pos vaut None, on le place a la position du catalogue.
- """
- #print ("************** appendChild ",self.item.getLabelText(), pos, plier)
- #import traceback
- #traceback.print_stack()
-
-
- self.editor.initModif()
- if pos == 'first':
- index = 0
- elif pos == 'last':
- index = len(self.children)
- elif type(pos) == int :
- # position fixee
- index = pos
- elif type(pos) == types.InstanceType:
- # pos est un item. Il faut inserer name apres pos
- index = self.item.getIndex(pos) +1
- elif type(name) == types.InstanceType:
- index = self.item.getIndexChild(name.nom)
- else:
- index = self.item.getIndexChild(name)
-
- # si on essaye d inserer a la racine
- if (isinstance(self.treeParent,JDCTree) and index==0) :
- verifiePosition=self.verifiePosition(name,'first',aLaRacine=True)
- if not verifiePosition : return 0
-
- self.tree.inhibeExpand=True
- obj=self.item.addItem(name,index) # emet le signal 'add'
- if obj is None:obj=0
- if obj == 0:return 0
- try :
- #if 1 :
- child=self.children[index]
- if plier == True : child.setPlie()
- else : child.setDeplie()
- except :
- child=self.children[index]
- try :
- if len(obj) > 1 : self.buildChildren()
- except : pass
- self.tree.inhibeExpand=False
- #print (" fin append child")
- return child
-
- def deplace(self):
- self.editor.initModif()
- index = self.treeParent.children.index(self) - 1
- if index < 0 : index =0
- ret=self.treeParent.item.deplaceEntite(self.item.getObject())
-
- def delete(self):
- """
- Methode externe pour la destruction de l'objet associe au noeud
- """
- self.editor.initModif()
- index = self.vraiParent.children.index(self) - 1
- if index < 0 : index =0
- recalcule=0
- if self.item.nom == "VARIABLE" :
- recalcule=1
- jdc=self.item.jdc
- ret,commentaire=self.vraiParent.item.suppItem(self.item)
- if ret==0 :
- self.editor.afficheInfos(commentaire,Qt.red)
- else :
- self.editor.afficheInfos(commentaire)
- self.treeParent.buildChildren()
- if self.treeParent.childrenComplete : toselect=self.treeParent.childrenComplete[index]
- else: toselect=self.treeParent
- if recalcule : jdc.recalculeEtatCorrelation()
- if ret==0 :
- if self.treeParent.childrenComplete :
- notdeleted=self.treeParent.childrenComplete[index+1]
- notdeleted.select()
- else :
- toselect.select()
- from InterfaceQT4 import compojdc
- # cas ou on detruit dans l arbre sans affichage
- if isinstance(self.treeParent,compojdc.Node) :
- toselect.affichePanneau()
- else :
- if self.treeParent.fenetre== None : return
- #print "J appelle reaffiche de browser apres delete"
- self.treeParent.fenetre.reaffiche(toselect)
-
- def deleteMultiple(self,liste=()):
- """
- Methode externe pour la destruction d une liste de noeud
- """
- from InterfaceQT4 import compojdc
- self.editor.initModif()
- index=9999
- recalcule=0
- jdc=self.treeParent
- parentPosition=jdc
- while not(isinstance(jdc,compojdc.Node)):
- jdc=jdc.treeParent
- for noeud in liste :
- if not( isinstance(noeud.treeParent, compojdc.Node)): continue
- if noeud.item.nom == "VARIABLE" : recalcule=1
- if noeud.treeParent.children.index(noeud) < index : index=noeud.treeParent.children.index(noeud)
- if index < 0 : index =0
-
- # Cas ou on detruit dans une ETape
- if index == 9999 :
- parentPosition=self.treeParent
- while not(isinstance(parentPosition, compojdc.Node)):
- index=parentPosition.treeParent.children.index(parentPosition)
- parentPosition=parentPosition.treeParent
-
- for noeud in liste:
- noeud.treeParent.item.suppItem(noeud.item)
-
- jdc.buildChildren()
- if recalcule : jdc.recalculeEtatCorrelation()
- try : toselect=parentPosition.children[index]
- except : toselect=jdc
- toselect.select()
- toselect.affichePanneau()
-#
-# #------------------------------------------------------------------
- def onValid(self):
-
- #print ("onValid pour ", self.item.nom)
- if self.JESUISOFF==1 : return
- if hasattr(self,'fenetre') and self.fenetre:
- try :
- self.fenetre.setValide()
- except :
- # print "onValid pour ", self.item.nom, self,'pb'
- pass
-
- if (self.item.nom == "VARIABLE" or self.item.nom == "DISTRIBUTION") and self.item.isValid():
- self.item.jdc.recalculeEtatCorrelation()
- if hasattr(self.item,'forceRecalcul'):
- self.forceRecalculChildren(self.item.forceRecalcul)
- self.editor.initModif()
-
- self.updateNodeValid()
- self.updateNodeLabel()
- self.updateNodeTexte()
-
- def onAdd(self,object):
- if self.JESUISOFF==1 : return
- #print "onAdd pour ", self.item.nom, object.nom
- self.editor.initModif()
- self.updateNodes()
- # PN -- non necessaire si item=jdc
- if hasattr(self.item,'jdc'): self.item.jdc.aReafficher=True
-
- def onSupp(self,object):
- if self.JESUISOFF==1 : return
- #print "onSup pour ", self.item.nom, object.nom
- self.editor.initModif()
- self.updateNodes()
- # PN -- non necessaire si item=jdc
- if hasattr(self.item,'jdc'): self.item.jdc.aReafficher=True
-
-
-
- def updateNodeValid(self):
- """Cette methode remet a jour la validite du noeud (icone)
- Elle appelle isValid
- """
- repIcon=self.appliEficas.repIcon
- couleur=self.item.getIconName()
- monIcone = QIcon(repIcon+"/" + couleur + ".png")
- self.setIcon(0,monIcone)
-
-
-
- def updateNodeLabel(self):
- """ Met a jour le label du noeud """
- #print "NODE updateNodeLabel", self.item.getLabelText()
- labeltext,fonte,couleur = self.item.getLabelText()
- # PNPN a reflechir
- self.setText(0, labeltext)
-
- def updateNodeLabelInBlack(self):
- if hasattr(self.appliEficas,'noeudColore'):
- self.appliEficas.noeudColore.setForeground(0,Qt.black)
- self.appliEficas.noeudColore.updateNodeLabel
-
- def updateNodeLabelInBlue(self):
- if hasattr(self.appliEficas,'noeudColore'): self.appliEficas.noeudColore.setForeground(0,Qt.black)
- self.setForeground(0,Qt.blue)
- labeltext,fonte,couleur = self.item.getLabelText()
- self.setText(0, labeltext)
- self.appliEficas.noeudColore=self
-
- def updatePlusieursNodeLabelInBlue(self,liste):
- if hasattr(self.appliEficas,'listeNoeudsColores'):
- for noeud in self.appliEficas.listeNoeudsColores:
- noeud.setTextColor( 0,Qt.black)
- noeud.updateNodeLabel()
- self.appliEficas.listeNoeudsColores=[]
- for noeud in liste :
- noeud.setTextColor( 0,Qt.blue )
- labeltext,fonte,couleur = noeud.item.getLabelText()
- noeud.setText(0, labeltext)
- self.appliEficas.listeNoeudsColores.append(noeud)
-
- def updateNodeTexteInBlack(self):
- """ Met a jour les noms des SD et valeurs des mots-cles """
- self.setTextColor( 1,Qt.black )
- value = self.item.getText()
- self.setText(1, value)
-
- def updateNodeTexte(self):
- """ Met a jour les noms des SD et valeurs des mots-cles """
- value = self.item.getText()
- self.setText(1, value)
-
-
- def updateNodeTexteInBlue(self):
- self.setTextColor( 1,Qt.blue )
- value = self.item.getText()
- self.setText(1, value)
-
- def updateNodes(self):
- #print 'NODE updateNodes', self.item.getLabelText()
- self.buildChildren()
-
- def updateValid(self) :
- """Cette methode a pour but de mettre a jour la validite du noeud
- et de propager la demande de mise a jour a son parent
- """
- #print "NODE updateValid", self.item.getLabelText()
- self.updateNodeValid()
- try :
- self.treeParent.updateValid()
- except:
- pass
-
- def updateTexte(self):
- """ Met a jour les noms des SD et valeurs des mots-cles """
- #print "NODE updateTexte", self.item.getLabelText()
- self.updateNodeVexte()
- if self.isExpanded() :
- for child in self.children:
- if child.isHidden() == false : child.updateTexte()
-
-
- def forceRecalculChildren(self,niveau):
- if self.state=='recalcule' :
- self.state=""
- return
- self.state='recalcule'
- if hasattr(self.item,'object'):
- self.item.object.state="modified"
- for child in self.children:
- if niveau > 0 : child.forceRecalculChildren(niveau - 1)
-
-
-
- def doPaste(self,node_selected,pos='after'):
- """
- Declenche la copie de l'objet item avec pour cible
- l'objet passe en argument : node_selected
- """
- objet_a_copier = self.item.getCopieObjet()
- child=node_selected.doPasteCommande(objet_a_copier,pos)
- if self.editor.fenetreCentraleAffichee : self.editor.fenetreCentraleAffichee.node.affichePanneau()
- self.updateNodeLabelInBlack()
- return child
-
- def doPasteCommande(self,objet_a_copier,pos='after'):
- """
- Realise la copie de l'objet passe en argument qui est necessairement
- un onjet
- """
- child=None
- try :
- #if 1 :
- child = self.appendBrother(objet_a_copier,pos)
- except :
- pass
- return child
-
- def doPastePremier(self,objet_a_copier):
- """
- Realise la copie de l'objet passe en argument (objet_a_copier)
- """
- objet = objet_a_copier.item.getCopieObjet()
- child = self.appendChild(objet,pos='first')
- return child
-
- def plieToutEtReafficheSaufItem(self, itemADeplier):
- self.inhibeExpand=True
- from InterfaceQT4 import compojdc
- if (isinstance(self, compojdc.Node)) :
- self.affichePanneau()
- self.inhibeExpand=False
- return
- self.editor.deplier = False
- for item in self.children :
- # il ne faut pas plier les blocs
- from InterfaceQT4 import compobloc
- if (isinstance(item,compobloc.Node)) : continue
- item.setPlie()
- if item==itemADeplier :
- itemADeplier.setDeplie()
- self.affichePanneau()
- self.inhibeExpand=False
-
- def plieToutEtReaffiche(self):
- #print ('plieToutEtReaffiche', self.item.getNom())
- from InterfaceQT4 import compojdc
- if (isinstance(self, compojdc.Node)) : self.affichePanneau(); return
- self.inhibeExpand=True
- self.editor.deplier = False
- for item in self.children :
- # il ne faut pas plier les blocs
- from InterfaceQT4 import compobloc
- if (isinstance(item,compobloc.Node)) : continue
- item.setPlie()
- self.affichePanneau()
- #print ("fin plieToutEtReaffiche", self.item.getNom())
-
- def deplieToutEtReaffiche(self):
- self.editor.deplier = True
- for item in self.children :
- item.setDeplie()
- self.affichePanneau()
-
- def setPlie(self):
- #print "je mets inhibeExpand a true dans setPlie"
- #print ("je suis dans plieTout", self.item.getNom())
- from . import compojdc
- if self.fenetre == self.editor.fenetreCentraleAffichee and isinstance(self.treeParent,compojdc.Node):
- return
- self.tree.inhibeExpand=True
- self.tree.collapseItem(self)
- self.setPlieChildren()
- self.tree.inhibeExpand=False
- #print "je mets inhibeExpand a false dans setPlie"
-
-
- # on ne plie pas au niveau 1
- # self.plie=False
- # for item in self.children :
- # item.appartientAUnNoeudPlie=False
-
- def setPlieChildren(self):
- self.plie=True
- from InterfaceQT4 import composimp
- if isinstance(self,composimp.Node) : return
- for c in self.children :
- c.setPlieChildren()
- #print "dans setPlieChildren appartientAUnNoeudPlie=True ", c, c.item.getLabelText()[0]
- c.appartientAUnNoeudPlie=True
- c.plie=True
- #print "dans setPlieChildren plie", c.item.nom
- # 01/2018 PNPN : boucle sur MT __ La ligne suivante ne me semble pas necessaire
- #if not (isinstance(c,composimp.Node)) :c.setExpanded(False)
-
- # Pour les blocs et les motcles list
- # on affiche un niveau de plus
- from InterfaceQT4 import compobloc
- from InterfaceQT4 import compomclist
- if (isinstance(self,compobloc.Node) or ( isinstance(self,compomclist.Node) and self.item.isMCList())) :
- niveauPere=self.treeParent
- while (isinstance(niveauPere,compobloc.Node) or (isinstance(niveauPere,compomclist.Node) and niveauPere.item.isMCList())) :
- niveauPere=niveauPere.treeParent
- for c in self.children :
- c.appartientAUnNoeudPlie=niveauPere.appartientAUnNoeudPlie
- #print ("dans setPlieChildren appartientAUnNoeudPlie=True ", c, c.item.getLabelText()[0], "mis a la valeur ", niveauPere.appartientAUnNoeudPlie)
- c.setExpanded(False)
-
-
- def setDeplie(self):
- #print "dans setPlieChildren pour", self.item.nom
- #print "je mets inhibeExpand a true dans setDeplie"
- self.tree.inhibeExpand=True
- self.plie=False
- self.tree.expandItem(self)
- self.setDeplieChildren()
- self.tree.inhibeExpand=False
- #print "je mets inhibeExpand a false dans setDePlie"
-
- def setDeplieChildren(self):
- #print "dans setDeplieChildren appartientAUnNoeudPlie=False ", self.item.getLabelText()
- for c in self.children :
- c.setDeplieChildren()
- #print "dans setDeplieChildren ", c.item.nom
- c.appartientAUnNoeudPlie=False
- c.setExpanded(True)
- c.plie=False
-
- def selectAvant(self):
- i=self.item.jdc.etapes.index(self.item.object)
- try :
- cherche=self.item.jdc.etapes[i-1]
- except :
- cherche=self.item.jdc.etapes[-1]
- node=None
- for i in self.tree.racine.children :
- if i.item.object== cherche :
- node=i
- break
- if node :
- node.affichePanneau()
- node.select()
-
- def selectApres(self):
- i=self.item.jdc.etapes.index(self.item.object)
- try :
- cherche=self.item.jdc.etapes[i+1]
- except :
- cherche=self.item.jdc.etapes[0]
- node=None
- for i in self.tree.racine.children :
- if i.item.object== cherche :
- node=i
- break
- if node :
- node.affichePanneau()
- node.select()
-
- def ouvreLesNoeudsDsLArbre(self):
- return
- self.inhibeExpand = True
- for i in range(self.childCount()):
- self.child(i).inhibeExpand=True
- self.child(i).setExpanded(True)
- self.child(i).ouvreLesNoeudsDsLArbre()
- self.child(i).inhibeExpand=False
- self.inhibeExpand = False
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import re
class JDCTree( QTreeWidget,GereRegles ):
#------------------------------------------
- def __init__( self, jdc_item, QWParent):
+ def __init__( self, jdc_item, QWParent):
#----------------------------------------
self.editor = QWParent
self.plie=False
if self.editor.widgetTree !=None :
- QTreeWidget.__init__(self, self.editor.widgetTree )
- self.editor.verticalLayout_2.addWidget(self)
- if self.editor.enteteQTree=='complet':
- self.headerItem().setText(0, "Commande ")
- self.headerItem().setText(1, "Concept/Valeur")
- else :
- self.headerItem().setText(0, "Commande ")
- self.setColumnWidth(0,200)
- self.setExpandsOnDoubleClick(False)
- self.setSelectionMode(3)
+ QTreeWidget.__init__(self, self.editor.widgetTree )
+ self.editor.verticalLayout_2.addWidget(self)
+ if self.editor.enteteQTree=='complet':
+ self.headerItem().setText(0, "Commande ")
+ self.headerItem().setText(1, "Concept/Valeur")
+ else :
+ self.headerItem().setText(0, "Commande ")
+ self.setColumnWidth(0,200)
+ self.setExpandsOnDoubleClick(False)
+ self.setSelectionMode(3)
else :
- QTreeWidget.__init__(self, None )
+ QTreeWidget.__init__(self, None )
self.item = jdc_item
- self.tree = self
+ self.tree = self
self.appliEficas = self.editor.appliEficas
self.childrenComplete=[]
self.racine=self.item.itemNode(self,self.item)
-
+
self.itemCourant=None
self.itemClicked.connect(self.handleOnItem)
self.inhibeExpand = True
self.expandItem(self.racine)
self.inhibeExpand = False
- if self.racine.children !=[] :
- if self.editor.maConfiguration.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche()
- else : self.racine.children[0].deplieToutEtReaffiche()
- self.racine.children[0].fenetre.donnePremier()
- else :
- self.racine.affichePanneau()
+ if self.racine.children !=[] :
+ if self.editor.maConfiguration.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche()
+ else : self.racine.children[0].deplieToutEtReaffiche()
+ self.racine.children[0].fenetre.donnePremier()
+ else :
+ self.racine.affichePanneau()
def contextMenuEvent(self,event) :
#---------------------------------
#-------------------------------------
"""
Private slot to show the context menu of the listview.
-
+
@param itm the selected listview item (QListWidgetItem)
@param coord the position of the mouse pointer (QPoint)
Attention : existeMenu permet de savoir si un menu est associe a cet item
if item.existeMenu == 0 : return
if item.menu == None:
- item.createPopUpMenu()
+ item.createPopUpMenu()
# PNPN reflechir a qqchose de generique pour remplacer cette fonctionnalite
- if item.menu != None:
- if item.item.getNom() == "DISTRIBUTION" and item.item.isValid() :
- item.Graphe.setEnabled(1)
- item.menu.exec_(coord)
-
+ #if item.menu != None:
+ # if item.item.getNom() == "DISTRIBUTION" and item.item.isValid() :
+ # item.Graphe.setEnabled(1)
+ # item.menu.exec_(coord)
+
def handleCollapsedItem(self,item):
#----------------------------------
# On traite le cas de l item non selectionne
self.itemCourant = item
itemParent = item
- while not (hasattr (itemParent,'getPanel')) : itemParent=itemParent.treeParent
- if self.tree.node_selected != itemParent :
- item.setExpanded(False)
- return
+ while not (hasattr (itemParent,'getPanel')) : itemParent=itemParent.treeParent
+ if self.tree.node_selected != itemParent :
+ item.setExpanded(False)
+ return
item.setPlie()
item.plieToutEtReaffiche()
if self.inhibeExpand == True : return
self.itemCourant = item
- self.inhibeExpand = True
+ self.inhibeExpand = True
itemParent = item
- while not (hasattr (itemParent,'getPanel')) :
- if itemParent.plie==True : itemParent.setDeplie()
- itemParent=itemParent.treeParent
- if self.tree.node_selected != itemParent :
- item.setExpanded(True)
- self.inhibeExpand = False
- return
+ while not (hasattr (itemParent,'getPanel')) :
+ if itemParent.plie==True : itemParent.setDeplie()
+ itemParent=itemParent.treeParent
+ if self.tree.node_selected != itemParent :
+ item.setExpanded(True)
+ self.inhibeExpand = False
+ return
item.deplieToutEtReaffiche()
- self.inhibeExpand = False
+ self.inhibeExpand = False
def handleOnItem(self,item,int):
#----------------------------------
#print ("je passe dans handleOnItem pour ",self, item.item.nom, item, item.item, item.item.getLabelText())
-
+
from InterfaceQT4 import composimp
- self.inhibeExpand = True
+ self.inhibeExpand = True
self.itemCourant = item
itemParent = item
itemAvant = item
+ # PN : 22 juil 2021 --> bizarre ce itemAvant Verifier le while
+ while not (hasattr (itemParent,'getPanel')) :
+ if itemParent.plie==True : itemParent.setDeplie()
+ itemAvant=itemParent
+ itemParent=itemParent.treeParent
- while not (hasattr (itemParent,'getPanel')) :
- if itemParent.plie==True : itemParent.setDeplie()
- itemAvant=itemParent
- itemParent=itemParent.treeParent
-
- if itemParent.fenetre != self.editor.fenetreCentraleAffichee :
+ if itemParent.fenetre != self.editor.fenetreCentraleAffichee :
estUneFeuille=(isinstance(item,composimp.Node))
# il faut afficher le parent
# Attention - Specification particuliere pour MT qui permet de nn afficher qu 1 niveau
# le catalogue contient cette indication dans fenetreIhm
- #if estUneFeuille and itemParent.fenetreIhm=='deplie1Niveau' :
- # itemAvant.afficheCeNiveau()
- # return
- #if estUneFeuille : itemParent.affichePanneau()
- if itemParent.fenetreIhm == 'deplie1Niveau' :
- if item == itemParent : itemParent.affichePanneau()
- else : itemAvant.afficheCeNiveau()
- elif estUneFeuille : itemParent.affichePanneau()
+ if estUneFeuille and itemParent.fenetreIhm=='deplie1Niveau' :
+ itemAvant.afficheCeNiveau()
+ return
+ if estUneFeuille : itemParent.affichePanneau()
elif self.editor.maConfiguration.afficheCommandesPliees : itemParent.plieToutEtReafficheSaufItem(item)
- else : itemParent.affichePanneau()
+ else : itemParent.affichePanneau()
elif (isinstance(item,composimp.Node)) and item.fenetre : item.fenetre.rendVisible()
# aide
try :
- fr = item.item.getFr()
- chaineDecoupee= fr.split('\n')
- if len(chaineDecoupee) > 3 :
- txt='\n'.join(chaineDecoupee[0:2])+'...\nfull help : double clicked on validity chip of '+ str(item.item.nom)+ ' in central widget'
- else : txt=fr
- if self.editor: self.editor.afficheCommentaire(str(txt))
+ fr = item.item.getFr()
+ chaineDecoupee= fr.split('\n')
+ if len(chaineDecoupee) > 3 :
+ txt='\n'.join(chaineDecoupee[0:2])+'...\nfull help : double clicked on validity chip of '+ str(item.item.nom)+ ' in central widget'
+ else : txt=fr
+ if self.editor: self.editor.afficheCommentaire(str(txt))
except:
pass
item.select()
- self.inhibeExpand = False
+ self.inhibeExpand = False
def choisitPremier(self,name):
self.editor.layoutJDCCHOIX.removeWidget(self.racine.fenetre)
self.racine.fenetre.close()
new_node=self.racine.appendBrother(name,'after')
-
+
# type de noeud
COMMENT = "COMMENTAIRE"
PARAMETERS = "PARAMETRE"
-
+
#------------------------------------------
class JDCNode(QTreeWidgetItem,GereRegles):
#------------------------------------------
self.firstAffiche = True
self.childrenComplete=[]
-
+
from InterfaceQT4 import compocomm
from InterfaceQT4 import compoparam
from InterfaceQT4 import composimp
else : name = tr(item.getLabelText()[0])
if item.nom != tr(item.nom) : name = str(tr(item.nom)+" :")
value = tr(str(item.getText() ) )
-
+
# si specialisation de la fenetre
if self.item.object.definition == None : self.fenetreIhm = None
- # Cas des listes de mots_clefs
+ # Cas des listes de mots_clefs
else : self.fenetreIhm = self.item.object.definition.fenetreIhm
-
+
if self.editor.enteteQTree=='complet':mesColonnes=(name,value)
else : mesColonnes=(name,)
#if item.nom == "POUTRE" :print "creation d'un noeud : ", item, " ",item.nom,"", self.treeParent, self.appartientAUnNoeudPlie , self.plie
if ancien and itemExpand : self.plie = False
- if ancien and not itemExpand : self.plie = True
+ if ancien and not itemExpand : self.plie = True
if (isinstance(self.item,composimp.SIMPTreeItem)) : self.plie=False
from InterfaceQT4 import compobloc
ajoutAuParentduNoeud=0
self.treeParent=treeParent
- while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) :
- self.treeParent.childrenComplete.append(self)
- self.treeParent=self.treeParent.vraiParent
+ while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) :
+ self.treeParent.childrenComplete.append(self)
+ self.treeParent=self.treeParent.vraiParent
self.treeParent.childrenComplete.append(self)
- if (isinstance(self,compobloc.Node) or (isinstance(self,compomclist.Node) and self.item.isMCList()) or ( hasattr(self.item.parent,'inhibeValidator') and isinstance(self,compomclist.Node) and self.item.parent.inhibeValidator)) :
+ if (isinstance(self,compobloc.Node) or (isinstance(self,compomclist.Node) and self.item.isMCList()) or ( hasattr(self.item.parent,'inhibeValidator') and isinstance(self,compomclist.Node) and self.item.parent.inhibeValidator)) :
# Le dernier or ne sert que lorsqu'on est en train de creer une liste par les validator
- QTreeWidgetItem.__init__(self,None,mesColonnes)
+ QTreeWidgetItem.__init__(self,None,mesColonnes)
else :
- QTreeWidgetItem.__init__(self,self.treeParent,mesColonnes)
+ QTreeWidgetItem.__init__(self,self.treeParent,mesColonnes)
self.setToolTip(0,self.item.getFr())
self.setToolTip(1,self.item.getFr())
self.state=""
self.fenetre=None
try :
- if self.item.getObject().isBLOC() :
- self.setExpanded(True)
+ if self.item.getObject().isBLOC() :
+ self.setExpanded(True)
self.plie=False
except :
- pass
+ pass
def buildChildren(self,posInsertion=10000):
""" Se charge de remettre les noeuds Expanded dans le meme etat """
#print ("*********** buildChildren ",self,self.item, self.item.nom)
#print (poum)
-
+
self.listeItemExpanded=[]
self.listeItemPlie=[]
parent = enfant.treeParent
parent.removeChild(enfant)
enfant.JESUISOFF=1
-
-
+
+
self.children = []
self.childrenComplete = []
sublist = self.item._getSubList()
ind=0
-
+
for item in sublist :
itemExpand=False
ancien=False
#print ("fin *********** buildChildren ",self,self.item, self.item.nom, self.children)
-
+
def chercheNoeudCorrespondant(self,objSimp):
#-------------------------------------------
sublist = self.item._getSubList()
monObjet = self.item.object
if maDefinition.fenetreIhm=='Tableau' : self.maFenetreCadre=MonWidgetNiveauFactTableau(self,self.editor,maDefinition,monObjet)
else : self.maFenetreCadre=MonWidgetNiveauFact(self,self.editor,maDefinition,monObjet)
-
+
self.fenetre = self.maFenetreCadre
self.editor.widgetCentraleLayout.addWidget(self.maFenetreCadre)
self.editor.fenetreCentraleAffichee=self.maFenetreCadre
self.select()
#print ('fin afficheCeNiveau pour ', self.item.nom)
-
-
+
+
def getPanelModifie(self):
#-------------------------
-
+
if self.fenetreIhm == None : return None
if self.fenetreIhm =='deplie1Niveau':
- from InterfaceQT4.monWidgetCommandeDeplie1Niveau import MonWidgetCommandeDeplie1Niveau
- return MonWidgetCommandeDeplie1Niveau (self,self.editor ,self.item.object)
+ from InterfaceQT4.monWidgetCommandeDeplie1Niveau import MonWidgetCommandeDeplie1Niveau
+ return MonWidgetCommandeDeplie1Niveau (self,self.editor ,self.item.object)
return None
-
+
def affichePanneau(self) :
#-------------------------
#print ('_________________ds affichePanneau pour', self.item.nom)
# pour l instant pas d inactif
- if not(self.item.isActif()) :
+ if not(self.item.isActif()) :
from .monWidgetInactif import MonWidgetInactif
self.fenetre = MonWidgetInactif(self,self.editor)
else:
- itemParent=self
- while not (hasattr (itemParent,'getPanel')) : itemParent=itemParent.treeParent
- if itemParent != self :
- #print ('j appelle affichePanneau pour ', itemParent.item.nom , 'par', self.item.nom)
- itemParent.affichePanneau()
- #print ('fin _________________ds affichePanneau pour', self.item.nom)
- return
-
- self.fenetre = self.getPanelModifie()
- if self.fenetre == None : self.fenetre=self.getPanel()
- self.editor.restoreSplitterSizes()
-
+ itemParent=self
+ while not (hasattr (itemParent,'getPanel')) : itemParent=itemParent.treeParent
+ if itemParent != self :
+ #print ('j appelle affichePanneau pour ', itemParent.item.nom , 'par', self.item.nom)
+ itemParent.affichePanneau()
+ #print ('fin _________________ds affichePanneau pour', self.item.nom)
+ return
+
+ self.fenetre = self.getPanelModifie()
+ if self.fenetre == None : self.fenetre=self.getPanel()
+ self.editor.restoreSplitterSizes()
+
for indiceWidget in range(self.editor.widgetCentraleLayout.count()):
widget = self.editor.widgetCentraleLayout.itemAt(indiceWidget)
self.editor.widgetCentraleLayout.removeItem(widget)
# ceinture et bretelle
#print 'old fenetre = ',self.editor.fenetreCentraleAffichee
- if self.editor.fenetreCentraleAffichee != None :
+ if self.editor.fenetreCentraleAffichee != None :
try :
- self.editor.widgetCentraleLayout.removeWidget(self.editor.fenetreCentraleAffichee)
- self.editor.fenetreCentraleAffichee.setParent(None)
- self.editor.fenetreCentraleAffichee.close()
- self.editor.fenetreCentraleAffichee.deleteLater()
+ self.editor.widgetCentraleLayout.removeWidget(self.editor.fenetreCentraleAffichee)
+ self.editor.fenetreCentraleAffichee.setParent(None)
+ self.editor.fenetreCentraleAffichee.close()
+ self.editor.fenetreCentraleAffichee.deleteLater()
except :
- pass
+ pass
self.editor.widgetCentraleLayout.addWidget(self.fenetre)
#print ("j ajoute ", self.fenetre, self.fenetre.node.item.nom)
self.tree.node_selected= self
if self.editor.first :
- if not(isinstance(self.fenetre,MonChoixCommande)): self.editor.first=False
+ if not(isinstance(self.fenetre,MonChoixCommande)): self.editor.first=False
self.tree.inhibeExpand=True
self.tree.expandItem(self)
self.tree.inhibeExpand=False
#print( '_________________fin affichePanneau pour', self.item.nom)
-
+
def createPopUpMenu(self):
#-------------------------
except Exception as e:
traceback.print_exc()
QMessageBox.critical( self.editor, "TOO BAD",str(e))
-
+
def unCommentIt(self):
#-------------------------
"""
self.treeParent.children[pos].affichePanneau()
except Exception as e:
QMessageBox.critical( self.editor, "Erreur !",str(e))
-
+
def addComment( self, after=True ):
#-----------------------------------
"""
else:
pos = 'before'
return self.appendBrother( COMMENT, pos )
-
+
def addParameters( self, after=True ):
#-------------------------------------
"""
else: pos = 'before'
child=self.appendBrother( PARAMETERS, pos )
return child
-
-
+
+
def select( self ):
#------------------
"""
Rend le noeud courant (self) selectionne et deselectionne
tous les autres
- """
+ """
#print "select pour", self.item.nom
for item in self.tree.selectedItems() :
item.setSelected(0)
- self.tree.setCurrentItem( self )
-
+ self.tree.setCurrentItem( self )
+
#------------------------------------------------------------------
# Methodes de creation et destruction de noeuds
#------------------------------------------------------------------
#----------------------------------------------------
"""
Permet d'ajouter un objet frere a l'objet associe au noeud self
- par defaut on l'ajoute immediatement apres
+ par defaut on l'ajoute immediatement apres
Methode externe
"""
self.editor.initModif()
from InterfaceQT4 import compojdc
if (isinstance(self.treeParent, compojdc.Node)) and not self.verifiePosition(name,pos) : return 0
-
+
if self.treeParent != self.vraiParent :
- index = self.vraiParent.children.index(self)
- if pos == 'before' : index = index
- elif pos == 'after' : index = index +1
- return self.vraiParent.appendChild(name,pos=index,plier=plier)
+ index = self.vraiParent.children.index(self)
+ if pos == 'before' : index = index
+ elif pos == 'after' : index = index +1
+ return self.vraiParent.appendChild(name,pos=index,plier=plier)
else :
- index = self.treeParent.children.index(self)
- if pos == 'before': index = index
- elif pos == 'after' : index = index +1
- else:
- print(pos, tr(" n'est pas un index valide pour appendBrother"))
- return 0
- return self.treeParent.appendChild(name,pos=index,plier=plier)
+ index = self.treeParent.children.index(self)
+ if pos == 'before': index = index
+ elif pos == 'after' : index = index +1
+ else:
+ print(pos, tr(" n'est pas un index valide pour appendBrother"))
+ return 0
+ return self.treeParent.appendChild(name,pos=index,plier=plier)
def verifiePosition(self,name,pos,aLaRacine=False):
#----------------------------------------------------
if nom not in self.editor.readercata.Classement_Commandes_Ds_Arbre : continue
indexEtape=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(nom)
if indexEtape > indexName :
- comment=tr('le mot clef ')+name+tr(' doit etre insere avant ')+nom
- QMessageBox.information( None,tr('insertion impossible'),comment, )
- return False
+ comment=tr('le mot clef ')+name+tr(' doit etre insere avant ')+nom
+ QMessageBox.information( None,tr('insertion impossible'),comment, )
+ return False
for e in etapes[indexOu:] :
nom=e.nom
if nom not in self.editor.readercata.Classement_Commandes_Ds_Arbre : continue
indexEtape=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(nom)
if indexEtape < indexName :
- comment=tr('le mot clef ')+name+tr(' doit etre insere apres ')+nom
- QMessageBox.information( None,tr('insertion impossible'),comment, )
- return False
+ comment=tr('le mot clef ')+name+tr(' doit etre insere apres ')+nom
+ QMessageBox.information( None,tr('insertion impossible'),comment, )
+ return False
return True
def appendChild(self,name,pos=None,plier=False):
#import traceback
#traceback.print_stack()
-
+
self.editor.initModif()
if pos == 'first' : index = 0
elif pos == 'last' : index = len(self.children)
# si on essaye d inserer a la racine
if (isinstance(self.treeParent,JDCTree) and index==0) :
- verifiePosition=self.verifiePosition(name,'first',aLaRacine=True)
- if not verifiePosition : return 0
+ verifiePosition=self.verifiePosition(name,'first',aLaRacine=True)
+ if not verifiePosition : return 0
self.tree.inhibeExpand = True
obj = self.item.addItem(name,index) # emet le signal 'add'
try :
#if 1 :
- child = self.children[index]
- if plier == True : child.setPlie()
- else : child.setDeplie()
+ child = self.children[index]
+ if plier == True : child.setPlie()
+ else : child.setDeplie()
except :
- child=self.children[index]
+ child=self.children[index]
- try :
- if len(obj) > 1 : self.buildChildren()
+ try :
+ if len(obj) > 1 : self.buildChildren()
except : pass
self.tree.inhibeExpand=False
def deplace(self):
#-----------------
self.editor.initModif()
- index = self.treeParent.children.index(self) - 1
+ index = self.treeParent.children.index(self) - 1
if index < 0 : index =0
ret=self.treeParent.item.deplaceEntite(self.item.getObject())
def delete(self):
#----------------
- """
+ """
Methode externe pour la destruction de l'objet associe au noeud
"""
self.editor.initModif()
- index = self.vraiParent.children.index(self) - 1
+ index = self.vraiParent.children.index(self) - 1
if index < 0 : index =0
recalcule=0
if self.item.nom == "VARIABLE" :
- recalcule=1
- jdc=self.item.jdc
+ recalcule=1
+ jdc=self.item.jdc
ret,commentaire=self.vraiParent.item.suppItem(self.item)
if ret==0 : self.editor.afficheInfos(commentaire,Qt.red)
from InterfaceQT4 import compojdc
# cas ou on detruit dans l arbre sans affichage
- if isinstance(self.treeParent,compojdc.Node) :
- toselect.affichePanneau()
+ if isinstance(self.treeParent,compojdc.Node) :
+ toselect.affichePanneau()
else :
- if self.treeParent.fenetre== None : return
- #print "J appelle reaffiche de browser apres delete"
- self.treeParent.fenetre.reaffiche(toselect)
+ if self.treeParent.fenetre== None : return
+ #print "J appelle reaffiche de browser apres delete"
+ self.treeParent.fenetre.reaffiche(toselect)
def deleteMultiple(self,liste=()):
#--------------------------------
- """
+ """
Methode externe pour la destruction d une liste de noeud
"""
- from InterfaceQT4 import compojdc
+ from InterfaceQT4 import compojdc
self.editor.initModif()
index=9999
recalcule=0
jdc=self.treeParent
parentPosition=jdc
while not(isinstance(jdc,compojdc.Node)):
- jdc=jdc.treeParent
+ jdc=jdc.treeParent
for noeud in liste :
if not( isinstance(noeud.treeParent, compojdc.Node)): continue
if noeud.item.nom == "VARIABLE" : recalcule=1
if index < 0 : index =0
# Cas ou on detruit dans une ETape
- if index == 9999 :
- parentPosition=self.treeParent
- while not(isinstance(parentPosition, compojdc.Node)):
- index=parentPosition.treeParent.children.index(parentPosition)
- parentPosition=parentPosition.treeParent
+ if index == 9999 :
+ parentPosition=self.treeParent
+ while not(isinstance(parentPosition, compojdc.Node)):
+ index=parentPosition.treeParent.children.index(parentPosition)
+ parentPosition=parentPosition.treeParent
for noeud in liste:
noeud.treeParent.item.suppItem(noeud.item)
except : toselect=jdc
toselect.select()
toselect.affichePanneau()
-#
+#
# ------------------------------------------------------------------
- def onValid(self):
+ def onValid(self):
#-----------------
#print ("onValid pour ", self.item.nom)
if self.JESUISOFF==1 : return
- if hasattr(self,'fenetre') and self.fenetre:
- try : self.fenetre.setValide()
- except : pass
+ if hasattr(self,'fenetre') and self.fenetre:
+ try : self.fenetre.setValide()
+ except : pass
# PNPN lignes suivantes a repenser
if (self.item.nom == "VARIABLE" or self.item.nom == "DISTRIBUTION") and self.item.isValid():
self.item.jdc.recalculeEtatCorrelation()
if hasattr(self.item,'forceRecalcul') : self.forceRecalculChildren(self.item.forceRecalcul)
self.editor.initModif()
-
+
self.updateNodeValid()
self.updateNodeLabel()
self.updateNodeTexte()
self.editor.initModif()
self.updateNodes()
if hasattr(self.item,'jdc'): self.item.jdc.aReafficher=True
-
+
def onSupp(self,object):
#-----------------------
#print ("onSup pour ", self.item.nom, object)
self.editor.initModif()
self.updateNodes()
if hasattr(self.item,'jdc'): self.item.jdc.aReafficher=True
-
+
def onRedessine(self):
#---------------------
- print ('dans redessine pour', self)
- self.updateNodeTexte()
- #if not(self.fenetre): return
- # a priori l objet C++ n est plus la si la fenetre n est pas visible
+ #print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!je passe dans onRedessine pour', self.item.nom)
+ self.affichePanneau()
def updateNodeValid(self):
#-----------------------
# PNPN a reflechir
if self.item.nom != tr(self.item.nom) : labeltext = str(tr(self.item.nom)+" :")
self.setText(0, tr(labeltext))
-
+
def updateNodeLabelInBlack(self):
#-------------------------------
- if hasattr(self.appliEficas,'noeudColore'):
+ if hasattr(self.appliEficas,'noeudColore'):
self.appliEficas.noeudColore.setForeground(0,Qt.black)
self.appliEficas.noeudColore.updateNodeLabel
-
+
def updateNodeLabelInBlue(self):
#-------------------------------
if hasattr(self.appliEficas,'noeudColore'): self.appliEficas.noeudColore.setForeground(0,Qt.black)
self.setForeground(0,Qt.blue)
labeltext,fonte,couleur = self.item.getLabelText()
if self.item.nom != tr(self.item.nom) : labeltext = str(tr(self.item.nom)+" :")
- self.setText(0, labeltext)
+ self.setText(0, labeltext)
self.appliEficas.noeudColore=self
def updatePlusieursNodeLabelInBlue(self,liste):
#----------------------------------------------
if hasattr(self.appliEficas,'listeNoeudsColores'):
- for noeud in self.appliEficas.listeNoeudsColores:
- noeud.setTextColor( 0,Qt.black)
- noeud.updateNodeLabel()
+ for noeud in self.appliEficas.listeNoeudsColores:
+ noeud.setTextColor( 0,Qt.black)
+ noeud.updateNodeLabel()
self.appliEficas.listeNoeudsColores=[]
for noeud in liste :
noeud.setTextColor( 0,Qt.blue )
if item.nom != tr(item.nom) : labeltext = str(tr(item.nom)+" :")
labeltext,fonte,couleur = noeud.item.getLabelText()
- noeud.setText(0, labeltext)
+ noeud.setText(0, labeltext)
self.appliEficas.listeNoeudsColores.append(noeud)
def updateNodeTexteInBlack(self):
""" Met a jour les noms des SD et valeurs des mots-cles """
value = self.item.getText()
self.setText(1, value)
-
+
def updateNodeTexteInBlue(self):
#--------------------------------
self.updateNodeValid()
try : self.treeParent.updateValid()
except: pass
-
+
def updateTexte(self):
#----------------------
""" Met a jour les noms des SD et valeurs des mots-cles """
def forceRecalculChildren(self,niveau):
#--------------------------------------
- if self.state == 'recalcule' :
- self.state = ""
- return
+ if self.state == 'recalcule' :
+ self.state = ""
+ return
self.state='recalcule'
if hasattr(self.item,'object'):
- self.item.object.state="modified"
+ self.item.object.state="modified"
for child in self.children:
- if niveau > 0 : child.forceRecalculChildren(niveau - 1)
-
-
+ if niveau > 0 : child.forceRecalculChildren(niveau - 1)
+
+
def doPaste(self,node_selected,pos='after'):
#--------------------------------------------
child=None
try :
#if 1 :
- child = self.appendBrother(objet_a_copier,pos)
+ child = self.appendBrother(objet_a_copier,pos)
except :
- pass
+ pass
return child
def doPastePremier(self,objet_a_copier):
if (isinstance(self, compojdc.Node)) :
self.affichePanneau()
self.inhibeExpand=False
- return
+ return
self.editor.deplier = False
for item in self.children :
- # il ne faut pas plier les blocs
+ # il ne faut pas plier les blocs
from InterfaceQT4 import compobloc
if (isinstance(item,compobloc.Node)) : continue
item.setPlie()
- if item==itemADeplier :
- itemADeplier.setDeplie()
+ if item==itemADeplier :
+ itemADeplier.setDeplie()
self.affichePanneau()
self.inhibeExpand=False
#-----------------------------
#print ('plieToutEtReaffiche', self.item.getNom())
from InterfaceQT4 import compojdc
- if (isinstance(self, compojdc.Node)) : self.affichePanneau(); return
+ if (isinstance(self, compojdc.Node)) : self.affichePanneau(); return
self.inhibeExpand=True
self.editor.deplier = False
for item in self.children :
- # il ne faut pas plier les blocs
+ # il ne faut pas plier les blocs
from InterfaceQT4 import compobloc
if (isinstance(item,compobloc.Node)) : continue
item.setPlie()
#print "je mets inhibeExpand a true dans setPlie"
#print ("je suis dans plieTout", self.item.getNom())
from . import compojdc
- if self.fenetre == self.editor.fenetreCentraleAffichee and isinstance(self.treeParent,compojdc.Node):
- return
+ if self.fenetre == self.editor.fenetreCentraleAffichee and isinstance(self.treeParent,compojdc.Node):
+ return
self.tree.inhibeExpand=True
self.tree.collapseItem(self)
self.setPlieChildren()
# on affiche un niveau de plus
from InterfaceQT4 import compobloc
from InterfaceQT4 import compomclist
- if (isinstance(self,compobloc.Node) or ( isinstance(self,compomclist.Node) and self.item.isMCList())) :
+ if (isinstance(self,compobloc.Node) or ( isinstance(self,compomclist.Node) and self.item.isMCList())) :
niveauPere=self.treeParent
- while (isinstance(niveauPere,compobloc.Node) or (isinstance(niveauPere,compomclist.Node) and niveauPere.item.isMCList())) :
- niveauPere=niveauPere.treeParent
+ while (isinstance(niveauPere,compobloc.Node) or (isinstance(niveauPere,compomclist.Node) and niveauPere.item.isMCList())) :
+ niveauPere=niveauPere.treeParent
for c in self.children :
c.appartientAUnNoeudPlie=niveauPere.appartientAUnNoeudPlie
#print ("dans setPlieChildren appartientAUnNoeudPlie=True ", c, c.item.getLabelText()[0], "mis a la valeur ", niveauPere.appartientAUnNoeudPlie)
c.appartientAUnNoeudPlie=False
c.setExpanded(True)
c.plie=False
-
+
def selectAvant(self):
#-----------------------------
i=self.item.jdc.etapes.index(self.item.object)
except : cherche=self.item.jdc.etapes[-1]
node=None
for i in self.tree.racine.children :
- if i.item.object== cherche :
- node=i
- break
- if node :
- node.affichePanneau()
- node.select()
+ if i.item.object== cherche :
+ node=i
+ break
+ if node :
+ node.affichePanneau()
+ node.select()
def selectApres(self):
#---------------------
except : cherche=self.item.jdc.etapes[0]
node=None
for i in self.tree.racine.children :
- if i.item.object== cherche :
- node=i
- break
- if node :
- node.affichePanneau()
- node.select()
-
+ if i.item.object== cherche :
+ node=i
+ break
+ if node :
+ node.affichePanneau()
+ node.select()
class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
-
+
def createPopUpMenu(self):
typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
class BLOCTreeItem(compofact.FACTTreeItem):
- itemNode=Node
+ itemNode=Node
- def isCopiable(self):
- return 0
+ def isCopiable(self):
+ return 0
import Accas
treeitem = BLOCTreeItem
-objet = Accas.MCBLOC
+objet = Accas.MCBLOC
self.Decommente.setStatusTip(tr("Decommente la commande "))
if hasattr(self.item,'unComment'):
- self.menu.addAction(self.Decommente)
+ self.menu.addAction(self.Decommente)
def decommenter(self) :
item= self.tree.currentItem()
debComm=self.item.getText()
self.setText(1,tr(debComm))
-
+
class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
- itemNode=Node
+ itemNode=Node
def init(self):
- self.setFunction = self.setValeur
+ self.setFunction = self.setValeur
def getIconName(self):
- """
- Retourne le nom de l'icone associee au noeud qui porte self,
- dependant de la validite de l'objet
- NB : un commentaire est toujours valide ...
- """
- return "ast-white-percent"
+ """
+ Retourne le nom de l'icone associee au noeud qui porte self,
+ dependant de la validite de l'objet
+ NB : un commentaire est toujours valide ...
+ """
+ return "ast-white-percent"
def getLabelText(self):
""" Retourne 3 valeurs :
return tr('Commentaire'),None,None
def getValeur(self):
- """
- Retourne la valeur de l'objet Commentaire cad son texte
- """
- return self.object.getValeur() or ''
-
+ """
+ Retourne la valeur de l'objet Commentaire cad son texte
+ """
+ return self.object.getValeur() or ''
+
def getText(self):
texte = self.object.valeur
texte = texte.split('\n')[0]
return texte[0:24]
def setValeur(self,valeur):
- """
- Affecte valeur a l'objet COMMENTAIRE
- """
- self.object.setValeur(valeur)
-
+ """
+ Affecte valeur a l'objet COMMENTAIRE
+ """
+ self.object.setValeur(valeur)
+
def getSubList(self):
- """
- Retourne la liste des fils de self
- """
- return []
+ """
+ Retourne la liste des fils de self
+ """
+ return []
def getObjetCommentarise(self):
- """
- La methode getObjetCommentarise() de la classe compocomm.COMMTreeItem
- surcharge la methode getObjetCommentarise de la classe Objecttreeitem.ObjectTreeItem
- elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
- """
- raise EficasException( 'Impossible de commentariser un commentaire' )
-
+ """
+ La methode getObjetCommentarise() de la classe compocomm.COMMTreeItem
+ surcharge la methode getObjetCommentarise de la classe Objecttreeitem.ObjectTreeItem
+ elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
+ """
+ raise EficasException( 'Impossible de commentariser un commentaire' )
+
import Extensions
treeitem =COMMTreeItem
-objet = Extensions.commentaire.COMMENTAIRE
+objet = Extensions.commentaire.COMMENTAIRE
itemNode=compocomm.Node
def init(self):
- self.setFunction = self.setValeur
+ self.setFunction = self.setValeur
def getIconName(self):
- """
- Retourne le nom de l'icone associee au noeud qui porte self,
- dependant de la validite de l'objet
- NB : une commande commentarisee est toujours valide ...
- """
- if self.isValid():
- return "ast-green-percent"
- else:
- return "ast-red-percent"
+ """
+ Retourne le nom de l'icone associee au noeud qui porte self,
+ dependant de la validite de l'objet
+ NB : une commande commentarisee est toujours valide ...
+ """
+ if self.isValid():
+ return "ast-green-percent"
+ else:
+ return "ast-red-percent"
def getLabelText(self):
""" Retourne 3 valeurs :
return 'commentaire'
def getValeur(self):
- """
- Retourne la valeur de la commande commentarisee cad son texte
- """
- return self.object.getValeur() or ''
-
+ """
+ Retourne la valeur de la commande commentarisee cad son texte
+ """
+ return self.object.getValeur() or ''
+
def getText(self):
texte = self.object.valeur
texte = texte.split('\n')[0]
return texte[0:24]
def setValeur(self,valeur):
- """
- Afefcte valeur a l'objet commande commentarisee
- """
- self.object.setValeur(valeur)
-
+ """
+ Afefcte valeur a l'objet commande commentarisee
+ """
+ self.object.setValeur(valeur)
+
def getSubList(self):
- """
- Retourne la liste des fils de self
- """
- return []
+ """
+ Retourne la liste des fils de self
+ """
+ return []
def unComment(self):
- """
- Demande a l'objet commande commentarisee de se decommentariser.
- Si l'operation s'effectue correctement, retourne l'objet commande
- et eventuellement le nom de la sd produite, sinon leve une exception
- """
- try:
- commande,nom = self.object.unComment()
- #self.parent.children[pos].select()
- except Exception as e:
- traceback.print_exc()
- raise EficasException(e)
- return commande,nom
-
+ """
+ Demande a l'objet commande commentarisee de se decommentariser.
+ Si l'operation s'effectue correctement, retourne l'objet commande
+ et eventuellement le nom de la sd produite, sinon leve une exception
+ """
+ try:
+ commande,nom = self.object.unComment()
+ #self.parent.children[pos].select()
+ except Exception as e:
+ traceback.print_exc()
+ raise EficasException(e)
+ return commande,nom
+
import Accas
treeitem =COMMANDE_COMMTreeItem
-objet = Accas.COMMANDE_COMM
+objet = Accas.COMMANDE_COMM
maCommande=commande
if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
else : self.niveau=1
- if hasattr(self,'plie') and self.plie==True :
- from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
- widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
- elif self.editor.maConfiguration.afficheFirstPlies and self.firstAffiche:
- self.firstAffiche = False
- self.setPlie()
- from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
- widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
+ if hasattr(self,'plie') and self.plie==True :
+ from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
+ widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
+ elif self.editor.maConfiguration.afficheFirstPlies and self.firstAffiche:
+ self.firstAffiche = False
+ self.setPlie()
+ from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
+ widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
else:
- from InterfaceQT4.monWidgetFact import MonWidgetFact
- widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
+ from InterfaceQT4.monWidgetFact import MonWidgetFact
+ widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
return widget
class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
- itemNode=Node
-
- def isExpandable(self):
- # ----------------------
- return 1
-
- def getText(self):
- # ----------------
- return ''
-
- def getLabelText(self):
- # ----------------------
- """ Retourne 3 valeurs :
- - le texte à afficher dans le noeud representant l'item
- - la fonte dans laquelle afficher ce texte
- - la couleur du texte
- """
- # None --> fonte et couleur par defaut
- if not(hasattr(self.object,'getLabelText')): return self.object.nom,None,None
- return self.object.getLabelText(),None,None
-
- def isValid(self):
- # ----------------
- return self.object.isValid()
-
- def isCopiable(self):
- # ----------------
- return 1
-
- def getIconName(self):
- # ----------------
- if self.object.isValid() : return "ast-green-los"
- elif self.object.isOblig(): return "ast-red-los"
- else : return "ast-yel-los"
-
- #PNPN ????
- #def keys(self):
- # keys=self.object.mc_dict
- # return keys
-
- def getSubList(self):
- # ----------------
- """
- Reactualise la liste des items fils stockes dans self.sublist
- """
- liste=self.object.mcListe
- sublist=[None]*len(liste)
- # suppression des items lies aux objets disparus
- for item in self.sublist:
- old_obj=item.getObject()
- if old_obj in liste:
- pos=liste.index(old_obj)
- sublist[pos]=item
- else:
- pass # objets supprimes ignores
- # ajout des items lies aux nouveaux objets
- pos=0
- for obj in liste:
- if sublist[pos] is None:
- # nouvel objet : on cree un nouvel item
- def setFunction(value, object=obj):
- object.setval(value)
- item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
- sublist[pos]=item
- pos=pos+1
-
- self.sublist=sublist
- return self.sublist
-
- def addItem(self,name,pos):
- objet = self.object.addEntite(name,pos)
- return objet
-
- def suppItem(self,item) :
- """
- Cette methode a pour fonction de supprimer l'item passee en argument
- des fils de l'item FACT qui est son pere
- - item = item du MOCLE a supprimer du MOCLE pere
- - item.getObject() = MCSIMP ou MCBLOC
- """
- itemobject=item.getObject()
- if itemobject.isOblig() :
- return (0, tr('Impossible de supprimer un mot-cle obligatoire '))
-
- if self.object.suppEntite(itemobject):
- message = tr("Mot-cle %s supprime")+ itemobject.nom
- return (1, message)
- else:
- return (0,tr('Pb interne : impossible de supprimer ce mot-cle'))
+ itemNode=Node
+
+ def isExpandable(self):
+ # ----------------------
+ return 1
+
+ def getText(self):
+ # ----------------
+ return ''
+
+ def getLabelText(self):
+ # ----------------------
+ """ Retourne 3 valeurs :
+ - le texte à afficher dans le noeud representant l'item
+ - la fonte dans laquelle afficher ce texte
+ - la couleur du texte
+ """
+ # None --> fonte et couleur par defaut
+ if not(hasattr(self.object,'getLabelText')): return self.object.nom,None,None
+ return self.object.getLabelText(),None,None
+
+ def isValid(self):
+ # ----------------
+ return self.object.isValid()
+
+ def isCopiable(self):
+ # ----------------
+ return 1
+
+ def getIconName(self):
+ # ----------------
+ if self.object.isValid() : return "ast-green-los"
+ elif self.object.isOblig(): return "ast-red-los"
+ else : return "ast-yel-los"
+
+ #PNPN ????
+ #def keys(self):
+ # keys=self.object.mc_dict
+ # return keys
+
+ def getSubList(self):
+ # ----------------
+ """
+ Reactualise la liste des items fils stockes dans self.sublist
+ """
+ liste=self.object.mcListe
+ sublist=[None]*len(liste)
+ # suppression des items lies aux objets disparus
+ for item in self.sublist:
+ old_obj=item.getObject()
+ if old_obj in liste:
+ pos=liste.index(old_obj)
+ sublist[pos]=item
+ else:
+ pass # objets supprimes ignores
+ # ajout des items lies aux nouveaux objets
+ pos=0
+ for obj in liste:
+ if sublist[pos] is None:
+ # nouvel objet : on cree un nouvel item
+ def setFunction(value, object=obj):
+ object.setval(value)
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
+ sublist[pos]=item
+ pos=pos+1
+
+ self.sublist=sublist
+ return self.sublist
+
+ def addItem(self,name,pos):
+ objet = self.object.addEntite(name,pos)
+ return objet
+
+ def suppItem(self,item) :
+ """
+ Cette methode a pour fonction de supprimer l'item passee en argument
+ des fils de l'item FACT qui est son pere
+ - item = item du MOCLE a supprimer du MOCLE pere
+ - item.getObject() = MCSIMP ou MCBLOC
+ """
+ itemobject=item.getObject()
+ if itemobject.isOblig() :
+ return (0, tr('Impossible de supprimer un mot-cle obligatoire '))
+
+ if self.object.suppEntite(itemobject):
+ message = tr("Mot-cle %s supprime")+ itemobject.nom
+ return (1, message)
+ else:
+ return (0,tr('Pb interne : impossible de supprimer ce mot-cle'))
import Accas
objet = Accas.MCFACT
class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode):
-
+
def getPanel(self):
- from .monWidgetFormule import MonWidgetFormule
- return MonWidgetFormule(self,self.editor,self.item.object)
+ from .monWidgetFormule import MonWidgetFormule
+ return MonWidgetFormule(self,self.editor,self.item.object)
+
-
def createPopUpMenu(self):
- typeNode.PopUpMenuNode.createPopUpMenu(self)
+ typeNode.PopUpMenuNode.createPopUpMenu(self)
class FORMULETreeItem(compooper.EtapeTreeItem):
itemNode=FormuleNode
def init(self):
- self.setFunction = self.setValeur
+ self.setFunction = self.setValeur
# ---------------------------------------------------------------------------
-# API de FORMULE pour l'arbre
+# API de FORMULE pour l'arbre
# ---------------------------------------------------------------------------
def getSubList(self):
- """
- Retourne la liste des fils de self
- On considere que FORMULE n'a pas de fils
- --> modification par rapport a MACRO classique
- """
- # dans EFICAS on ne souhaite pas afficher les mots-cles fils de FORMULE
- # de facon traditionnelle
- return []
+ """
+ Retourne la liste des fils de self
+ On considere que FORMULE n'a pas de fils
+ --> modification par rapport a MACRO classique
+ """
+ # dans EFICAS on ne souhaite pas afficher les mots-cles fils de FORMULE
+ # de facon traditionnelle
+ return []
def getIconName(self):
- """
- Retourne le nom de l'icone a afficher dans l'arbre
- Ce nom depend de la validite de l'objet
- """
- if self.object.isActif():
- if self.object.isValid():
- return "ast-green-square"
+ """
+ Retourne le nom de l'icone a afficher dans l'arbre
+ Ce nom depend de la validite de l'objet
+ """
+ if self.object.isActif():
+ if self.object.isValid():
+ return "ast-green-square"
+ else:
+ return "ast-red-square"
else:
- return "ast-red-square"
- else:
- return "ast-white-text"
+ return "ast-white-text"
def getLabelText(self):
- """ Retourne 3 valeurs :
- - le texte a afficher dans le noeud representant l'item
- - la fonte dans laquelle afficher ce texte
- - la couleur du texte
- """
- return self.labeltext,None,None
- #if self.object.isActif():
- # None --> fonte et couleur par defaut
- # return tr(self.labeltext),None,None
- #else:
- # return tr(self.labeltext),None,None
- #return self.labeltext,fontes.standard_italique,None
-
+ """ Retourne 3 valeurs :
+ - le texte a afficher dans le noeud representant l'item
+ - la fonte dans laquelle afficher ce texte
+ - la couleur du texte
+ """
+ return self.labeltext,None,None
+ #if self.object.isActif():
+ # None --> fonte et couleur par defaut
+ # return tr(self.labeltext),None,None
+ #else:
+ # return tr(self.labeltext),None,None
+ #return self.labeltext,fontes.standard_italique,None
+
# ---------------------------------------------------------------------------
# Methodes permettant la modification et la lecture des attributs
# du parametre = API graphique de la FORMULE pour Panel et EFICAS
# ---------------------------------------------------------------------------
def getNom(self):
- """
- Retourne le nom de la FORMULE
- """
- return self.object.getNom()
+ """
+ Retourne le nom de la FORMULE
+ """
+ return self.object.getNom()
def getType(self):
- """
- Retourne le type de la valeur retournee par la FORMULE
- """
- return self.object.type_retourne
+ """
+ Retourne le type de la valeur retournee par la FORMULE
+ """
+ return self.object.type_retourne
def getArgs(self):
- """
- Retourne les arguments de la FORMULE
- """
- args=""
- for mot in self.object.mcListe:
- if mot.nom == 'NOM_PARA':
- args=mot.valeur
- break
- if args :
- if args[0] == "(" and args[-1] ==")":
- args=args[1:-1]
- # transforme en tuple si ce n est pas deja le casa
- try :
- args=args.split(',')
- except :
- pass
- return args
+ """
+ Retourne les arguments de la FORMULE
+ """
+ args=""
+ for mot in self.object.mcListe:
+ if mot.nom == 'NOM_PARA':
+ args=mot.valeur
+ break
+ if args :
+ if args[0] == "(" and args[-1] ==")":
+ args=args[1:-1]
+ # transforme en tuple si ce n est pas deja le casa
+ try :
+ args=args.split(',')
+ except :
+ pass
+ return args
def getCorps(self):
- """
- Retourne le corps de la FORMULE
- """
- corps=""
- for mot in self.object.mcListe:
- if mot.nom == 'VALE':
- corps=mot.valeur
- break
- return corps
+ """
+ Retourne le corps de la FORMULE
+ """
+ corps=""
+ for mot in self.object.mcListe:
+ if mot.nom == 'VALE':
+ corps=mot.valeur
+ break
+ return corps
def getListeTypesAutorises(self):
- """
- Retourne la liste des types autorises pour les valeurs de sortie
- d'une FORMULE
- """
- return self.object.l_types_autorises
+ """
+ Retourne la liste des types autorises pour les valeurs de sortie
+ d'une FORMULE
+ """
+ return self.object.l_types_autorises
def saveFormule(self,new_nom,new_typ,new_arg,new_exp):
- """
- Verifie si (new_nom,new_typ,new_arg,new_exp) definit bien une FORMULE
- licite :
- - si oui, stocke ces parametres comme nouveaux parametres de la
- FORMULE courante et retourne 1
- - si non, laisse les parametres anciens de la FORMULE inchanges et
- retourne 0
- """
- test,erreur = self.object.verifFormule_python(formule=(new_nom,new_typ,new_arg,
- new_exp))
- if test :
- # la formule est bien correcte : on sauve les nouveaux parametres
- test=self.object.updateFormulePython(formule=(new_nom,new_typ,new_exp,new_arg))
- return test,erreur
+ """
+ Verifie si (new_nom,new_typ,new_arg,new_exp) definit bien une FORMULE
+ licite :
+ - si oui, stocke ces parametres comme nouveaux parametres de la
+ FORMULE courante et retourne 1
+ - si non, laisse les parametres anciens de la FORMULE inchanges et
+ retourne 0
+ """
+ test,erreur = self.object.verifFormule_python(formule=(new_nom,new_typ,new_arg,
+ new_exp))
+ if test :
+ # la formule est bien correcte : on sauve les nouveaux parametres
+ test=self.object.updateFormulePython(formule=(new_nom,new_typ,new_exp,new_arg))
+ return test,erreur
# ---------------------------------------------------------------------------
# Acces aux methodes de verification de l'objet FORM_ETAPE
def getPanel(self):
from .monChoixCommande import MonChoixCommande
return MonChoixCommande(self,self.item, self.editor)
-
+
def createPopUpMenu(self):
typeNode.PopUpMenuRacine.createPopUpMenu(self)
def addParameters(self,apres):
param=self.appendChild("PARAMETRE",pos=0)
return param
-
+
class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
- itemNode=Node
-
- def isExpandable(self):
- return 1
-
- def getText(self):
- return " "
-
- def getLabelText(self):
- # None --> fonte et couleur par defaut
- return tr(self.object.nom),None,None
-
- def getJdc(self):
- """
- Retourne l'objet pointe par self
- """
- return self.object
-
- def getIconName(self):
- if self.object.isValid():
- return "ast-green-square"
- else:
- return "ast-red-square"
-
- #def keys(self):
- # if self.object.etapes_niveaux != []:
- # return range(len(self.object.etapes_niveaux))
- # else:
- # return range(len(self.object.etapes))
-
- def addItem(self,name,pos):
- cmd = self._object.addEntite(name,pos)
- return cmd
-
- def suppItem(self,item) :
- # item = item de l'ETAPE a supprimer du JDC
- # item.getObject() = ETAPE ou COMMENTAIRE
- # self.object = JDC
-
- itemobject=item.getObject()
- if self.object.suppEntite(itemobject):
- if itemobject.nature == "COMMENTAIRE" :
- message = tr("Commentaire supprime")
- else :
- message = tr("Commande %s supprimee",itemobject.nom)
- return 1,message
- else:
- message=tr("Pb interne : impossible de supprimer cet objet")
- return 0,message
-
- def getSubList(self):
- """
- Retourne la liste des items fils de l'item jdc.
- Cette liste est conservee et mise a jour a chaque appel
- """
- if self.object.etapes_niveaux != []:
- liste = self.object.etapes_niveaux
- else:
- liste = self.object.etapes
- sublist=[None]*len(liste)
- # suppression des items lies aux objets disparus
- for item in self.sublist:
- old_obj=item.getObject()
- if old_obj in liste:
- pos=liste.index(old_obj)
- sublist[pos]=item
- else:
- pass # objets supprimes ignores
- # ajout des items lies aux nouveaux objets
- pos=0
- for obj in liste:
- if sublist[pos] is None:
- # nouvel objet : on cree un nouvel item
- item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj)
- sublist[pos]=item
- pos=pos+1
-
- self.sublist=sublist
- return self.sublist
-
- def getLNomsEtapes(self):
- """ Retourne la liste des noms des etapes de self.object"""
- return self.object.getLNomsEtapes()
-
- def getListeCmd(self):
- listeCmd = self.object.niveau.definition.getListeCmd()
- return listeCmd
+ itemNode=Node
+
+ def isExpandable(self):
+ return 1
+
+ def getText(self):
+ return " "
+
+ def getLabelText(self):
+ # None --> fonte et couleur par defaut
+ return tr(self.object.nom),None,None
+
+ def getJdc(self):
+ """
+ Retourne l'objet pointe par self
+ """
+ return self.object
+
+ def getIconName(self):
+ if self.object.isValid():
+ return "ast-green-square"
+ else:
+ return "ast-red-square"
+
+ #def keys(self):
+ # if self.object.etapes_niveaux != []:
+ # return range(len(self.object.etapes_niveaux))
+ # else:
+ # return range(len(self.object.etapes))
+
+ def addItem(self,name,pos):
+ cmd = self._object.addEntite(name,pos)
+ return cmd
+
+ def suppItem(self,item) :
+ # item = item de l'ETAPE a supprimer du JDC
+ # item.getObject() = ETAPE ou COMMENTAIRE
+ # self.object = JDC
+
+ itemobject=item.getObject()
+ if self.object.suppEntite(itemobject):
+ if itemobject.nature == "COMMENTAIRE" :
+ message = tr("Commentaire supprime")
+ else :
+ message = tr("Commande %s supprimee",itemobject.nom)
+ return 1,message
+ else:
+ message=tr("Pb interne : impossible de supprimer cet objet")
+ return 0,message
+
+ def getSubList(self):
+ """
+ Retourne la liste des items fils de l'item jdc.
+ Cette liste est conservee et mise a jour a chaque appel
+ """
+ if self.object.etapes_niveaux != []:
+ liste = self.object.etapes_niveaux
+ else:
+ liste = self.object.etapes
+ sublist=[None]*len(liste)
+ # suppression des items lies aux objets disparus
+ for item in self.sublist:
+ old_obj=item.getObject()
+ if old_obj in liste:
+ pos=liste.index(old_obj)
+ sublist[pos]=item
+ else:
+ pass # objets supprimes ignores
+ # ajout des items lies aux nouveaux objets
+ pos=0
+ for obj in liste:
+ if sublist[pos] is None:
+ # nouvel objet : on cree un nouvel item
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj)
+ sublist[pos]=item
+ pos=pos+1
+
+ self.sublist=sublist
+ return self.sublist
+
+ def getLNomsEtapes(self):
+ """ Retourne la liste des noms des etapes de self.object"""
+ return self.object.getLNomsEtapes()
+
+ def getListeCmd(self):
+ listeCmd = self.object.niveau.definition.getListeCmd()
+ return listeCmd
import Accas
treeitem =JDCTreeItem
-objet = Accas.JDC
+objet = Accas.JDC
from InterfaceQT4 import typeNode
-class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):
-
+class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):
+
def getPanel(self):
- from .monWidgetCommande import MonWidgetCommande
- return MonWidgetCommande (self,self.editor ,self.item.object)
+ from .monWidgetCommande import MonWidgetCommande
+ return MonWidgetCommande (self,self.editor ,self.item.object)
def createPopUpMenu(self):
- typeNode.PopUpMenuNode.createPopUpMenu(self)
+ typeNode.PopUpMenuNode.createPopUpMenu(self)
# def view3D(self) :
# from Editeur import TroisDPal
# troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
# troisD.envoievisu()
-
-
+
+
class MACROTreeItem(compooper.EtapeTreeItem):
# """ Cette classe herite d'une grande partie des comportements
# de la classe compooper.EtapeTreeItem
class INCLUDETreeItemBase(MACROTreeItem):
- def __init__(self,appliEficas, labeltext, object, setFunction):
- MACROTreeItem.__init__(self,appliEficas, labeltext, object, setFunction)
+ def __init__(self,appliEficas, labeltext, object, setFunction):
+ MACROTreeItem.__init__(self,appliEficas, labeltext, object, setFunction)
def isCopiable(self):
- return 0
+ return 0
-class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):
+class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):
def getPanel(self):
- from .monWidgetCommande import MonWidgetCommande
- return MonWidgetCommande (self,self.editor ,self.item.object)
+ from .monWidgetCommande import MonWidgetCommande
+ return MonWidgetCommande (self,self.editor ,self.item.object)
def createPopUpMenu(self):
- typeNode.PopUpMenuNode.createPopUpMenu(self)
-
+ typeNode.PopUpMenuNode.createPopUpMenu(self)
+
def makeEdit(self): #,appliEficas,node
if self.item.object.text_converted == 0:
- # Le texte du fichier inclus n'a pas pu etre converti par le module convert
- msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
- msg=msg+self.item.object.text_error
- return
-
+ # Le texte du fichier inclus n'a pas pu etre converti par le module convert
+ msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
+ msg=msg+self.item.object.text_error
+ return
+
if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
- #L'include n'est pas initialise
- self.item.object.buildInclude(None,"")
-
+ #L'include n'est pas initialise
+ self.item.object.buildInclude(None,"")
+
# On cree un nouvel onglet dans le bureau
self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom )
-
+
class INCLUDETreeItem(INCLUDETreeItemBase):
itemNode=INCLUDENode
-
+
# ------------------------------------
# Classes necessaires a POURSUITE
# ------------------------------------
-
-class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):
+
+class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):
def getPanel(self):
- from .monWidgetCommande import MonWidgetCommande
- return MonWidgetCommande (self,self.editor ,self.item.object)
+ from .monWidgetCommande import MonWidgetCommande
+ return MonWidgetCommande (self,self.editor ,self.item.object)
def createPopUpMenu(self):
- typeNode.PopUpMenuNode.createPopUpMenu(self)
+ typeNode.PopUpMenuNode.createPopUpMenu(self)
def makeEdit(self): #,appliEficas,node
if self.item.object.text_converted == 0:
- msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
- msg=msg+self.item.object.text_error
- return
-
+ msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
+ msg=msg+self.item.object.text_error
+ return
+
if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
text="""DEBUT()
FIN()"""
self.object.buildPoursuite(None,text)
-
+
# On cree un nouvel onglet dans le bureau
self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom)
-
+
class POURSUITETreeItem(INCLUDETreeItemBase):
- itemNode=POURSUITENode
+ itemNode=POURSUITENode
# ----------------------------------------
# Classes necessaires a INCLUDE MATERIAU
# ----------------------------------------
-
+
class MATERIAUNode(MACRONode):
def getPanel(self):
- from .monWidgetCommande import MonWidgetCommande
- return MonWidgetCommande (self,self.editor ,self.item.object)
+ from .monWidgetCommande import MonWidgetCommande
+ return MonWidgetCommande (self,self.editor ,self.item.object)
def createPopUpMenu(self):
- typeNode.PopUpMenuNode.createPopUpMenu(self)
+ typeNode.PopUpMenuNode.createPopUpMenu(self)
def makeView(self) :
- if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None:
- QMessageBox.information( self,tr("Include vide"),tr("L'include doit etre correctement initialise pour etre visualise"))
- return
- f = open(self.item.object.fichier_ini, "rb")
- texte = f.read()
- f.close()
- from desVisu import DVisu
- monVisuDialg=DVisu(parent=self.editor.appliEficas,fl=0)
- monVisuDialg.TB.setText(texte)
- monVisuDialg.show()
+ if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None:
+ QMessageBox.information( self,tr("Include vide"),tr("L'include doit etre correctement initialise pour etre visualise"))
+ return
+ f = open(self.item.object.fichier_ini, "rb")
+ texte = f.read()
+ f.close()
+ from desVisu import DVisu
+ monVisuDialg=DVisu(parent=self.editor.appliEficas,fl=0)
+ monVisuDialg.TB.setText(texte)
+ monVisuDialg.show()
class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
# ------------------------------------
# TreeItem
# ------------------------------------
-
+
def treeitem(appliEficas, labeltext, object, setFunction=None):
- """ Factory qui retourne l'item adapte au type de macro :
- INCLUDE, POURSUITE, MACRO
- """
- if object.nom == "INCLUDE_MATERIAU":
- return INCLUDE_MATERIAUTreeItem(appliEficas, labeltext, object, setFunction)
- elif object.nom == "INCLUDE" or object.nom== "DICTDATA":
- return INCLUDETreeItem(appliEficas, labeltext, object, setFunction)
- elif object.nom == "POURSUITE":
- return POURSUITETreeItem(appliEficas, labeltext, object, setFunction)
- else:
- return MACROTreeItem(appliEficas, labeltext, object, setFunction)
+ """ Factory qui retourne l'item adapte au type de macro :
+ INCLUDE, POURSUITE, MACRO
+ """
+ if object.nom == "INCLUDE_MATERIAU":
+ return INCLUDE_MATERIAUTreeItem(appliEficas, labeltext, object, setFunction)
+ elif object.nom == "INCLUDE" or object.nom== "DICTDATA":
+ return INCLUDETreeItem(appliEficas, labeltext, object, setFunction)
+ elif object.nom == "POURSUITE":
+ return POURSUITETreeItem(appliEficas, labeltext, object, setFunction)
+ else:
+ return MACROTreeItem(appliEficas, labeltext, object, setFunction)
import Accas
objet=Accas.MACRO_ETAPE
-
-
else : self.niveau=1
# attention si l objet est une mclist on utilise bloc
if not (monObjet.isMCList()) :
- if hasattr(self,'plie') and self.plie==True :
- from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
- widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
- elif self.editor.maConfiguration.afficheFirstPlies and self.firstAffiche:
- self.firstAffiche = False
- self.setPlie()
- from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
- widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
- else:
- from InterfaceQT4.monWidgetFact import MonWidgetFact
- widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
+ if hasattr(self,'plie') and self.plie==True :
+ from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
+ widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
+ elif self.editor.maConfiguration.afficheFirstPlies and self.firstAffiche:
+ self.firstAffiche = False
+ self.setPlie()
+ from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
+ widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
+ else:
+ from InterfaceQT4.monWidgetFact import MonWidgetFact
+ widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
else :
- from InterfaceQT4.monWidgetBloc import MonWidgetBloc
- widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
+ from InterfaceQT4.monWidgetBloc import MonWidgetBloc
+ widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
return widget
Elle adapte ces objets pour leur permettre d'etre integres en tant que
noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
Cette classe delegue les appels de methode et les acces
- aux attributs a l'objet du noyau soit manuellement soit
+ aux attributs a l'objet du noyau soit manuellement soit
automatiquement (voir classe Delegate et attribut object).
"""
itemNode=Node
def updateDelegate(self):
if len(self._object) > 1:
- self.setDelegate(self._object)
+ self.setDelegate(self._object)
else:
- self.setDelegate(self._object.data[0])
+ self.setDelegate(self._object.data[0])
def panel(self,jdcdisplay,pane,node):
""" Retourne une instance de l'objet panneau associe a l'item (self)
Si la liste est plus longue on utilise le panneau MCLISTPanel.
"""
if len(self._object) > 1:
- return MCLISTPanel(jdcdisplay,pane,node)
+ return MCLISTPanel(jdcdisplay,pane,node)
elif isinstance(self._object.data[0],ErrorObj):
- return compoerror.ERRORPanel(jdcdisplay,pane,node)
+ return compoerror.ERRORPanel(jdcdisplay,pane,node)
else:
- return compofact.FACTPanel(jdcdisplay,pane,node)
+ return compofact.FACTPanel(jdcdisplay,pane,node)
def isExpandable(self):
if len(self._object) > 1:
- return Objecttreeitem.SequenceTreeItem.isExpandable(self)
+ return Objecttreeitem.SequenceTreeItem.isExpandable(self)
else:
- return compofact.FACTTreeItem.isExpandable(self)
+ return compofact.FACTTreeItem.isExpandable(self)
def getSubList(self):
self.updateDelegate()
if len(self._object) <= 1:
- self._object.data[0].alt_parent=self._object
- return compofact.FACTTreeItem.getSubList(self)
+ self._object.data[0].alt_parent=self._object
+ return compofact.FACTTreeItem.getSubList(self)
liste=self._object.data
sublist=[None]*len(liste)
# suppression des items lies aux objets disparus
for item in self.sublist:
- old_obj=item.getObject()
- if old_obj in liste:
- pos=liste.index(old_obj)
- sublist[pos]=item
- else:
- pass # objets supprimes ignores
+ old_obj=item.getObject()
+ if old_obj in liste:
+ pos=liste.index(old_obj)
+ sublist[pos]=item
+ else:
+ pass # objets supprimes ignores
# ajout des items lies aux nouveaux objets
pos=0
for obj in liste:
- if sublist[pos] is None:
- # nouvel objet : on cree un nouvel item
- def setFunction(value, object=obj):
- object=value
- item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
- sublist[pos]=item
- #Attention : on ajoute une information supplementaire pour l'actualisation de
- # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
- # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
- # informations de validite. alt_parent permet de remedier a ce defaut.
- obj.alt_parent=self._object
- pos=pos+1
+ if sublist[pos] is None:
+ # nouvel objet : on cree un nouvel item
+ def setFunction(value, object=obj):
+ object=value
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
+ sublist[pos]=item
+ #Attention : on ajoute une information supplementaire pour l'actualisation de
+ # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
+ # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
+ # informations de validite. alt_parent permet de remedier a ce defaut.
+ obj.alt_parent=self._object
+ pos=pos+1
self.sublist=sublist
return self.sublist
def getDocu(self):
""" Retourne la clef de doc de l'objet pointe par self """
- return self.object.getDocu()
+ return self.object.getDocu()
def isCopiable(self):
if len(self._object) > 1:
- return Objecttreeitem.SequenceTreeItem.isCopiable(self)
+ return Objecttreeitem.SequenceTreeItem.isCopiable(self)
else:
- return compofact.FACTTreeItem.isCopiable(self)
+ return compofact.FACTTreeItem.isCopiable(self)
def isMCFact(self):
"""
Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
"""
return len(self._object) > 1
-
+
def getCopieObjet(self):
return self._object.data[0].copy()
def addItem(self,obj,pos):
#print "compomclist.addItem",obj,pos
if len(self._object) <= 1:
- return compofact.FACTTreeItem.addItem(self,obj,pos)
+ return compofact.FACTTreeItem.addItem(self,obj,pos)
o= self.object.addEntite(obj,pos)
return o
def suppItem(self,item):
"""
- Retire un objet MCFACT de la MCList (self.object)
+ Retire un objet MCFACT de la MCList (self.object)
"""
#print "compomclist.suppItem",item
obj=item.getObject()
if len(self._object) <= 1:
- return compofact.FACTTreeItem.suppItem(self,item)
+ return compofact.FACTTreeItem.suppItem(self,item)
if self.object.suppEntite(obj):
- if len(self._object) == 1: self.updateDelegate()
- message = "Mot-clef " + obj.nom + " supprime"
- return (1,message)
+ if len(self._object) == 1: self.updateDelegate()
+ message = "Mot-clef " + obj.nom + " supprime"
+ return (1,message)
else:
- return (0,tr('Impossible de supprimer ce mot-clef'))
+ return (0,tr('Impossible de supprimer ce mot-clef'))
+
-
import Accas
-objet = Accas.MCList
+objet = Accas.MCList
def treeitem(appliEficas,labeltext,object,setFunction):
- """ Factory qui produit un objet treeitem adapte a un objet
- Accas.MCList (attribut objet de ce module)
- """
- return MCListTreeItem(appliEficas,labeltext,object,setFunction)
+ """ Factory qui produit un objet treeitem adapte a un objet
+ Accas.MCList (attribut objet de ce module)
+ """
+ return MCListTreeItem(appliEficas,labeltext,object,setFunction)
#
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import os
self.editor.initModif()
test,mess = self.item.nommeSd(nom)
if (test== 0):
- self.editor.afficheInfos(mess,'red')
- old=self.item.getText()
- self.monWidgetNom.setText(old)
+ self.editor.afficheInfos(mess,'red')
+ old=self.item.getText()
+ self.monWidgetNom.setText(old)
else :
- self.editor.afficheCommentaire(tr("Nommage du concept effectue"))
- self.onValid()
- try :
- self.fenetre.LENom.setText(nom)
- except :
- pass
+ self.editor.afficheCommentaire(tr("Nommage du concept effectue"))
+ self.onValid()
+ try :
+ self.fenetre.LENom.setText(nom)
+ except :
+ pass
def getPanel(self):
class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
- """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
- Accas. Elle leur permet d'etre affichés comme des noeuds
- d'un arbre graphique.
- Cette classe a entre autres deux attributs importants :
- - _object qui est un pointeur vers l'objet du noyau
- - object qui pointe vers l'objet auquel sont délégués les
- appels de méthode et les acces aux attributs
- Dans le cas d'une ETAPE, _object et object pointent vers le
- meme objet.
- """
- itemNode=Node
-
- def isExpandable(self):
- return 1
-
- def getIconName(self):
- """
- Retourne le nom de l'icone a afficher dans l'arbre
- Ce nom depend de la validite de l'objet
- """
- if not self.object.isActif():
- return "ast-white-square"
- elif self.object.isValid():
- return "ast-green-square"
- else:
- valid=self.validChild()
- valid=valid * self.validRegles("non")
- if self.reste_val != {}:
- valid=0
- if valid==0 :
- return "ast-red-square"
- else :
- try :
- # on traite ici le cas d include materiau
- # print self.object.definition.nom
- if self.object.fichier_ini != self.object.nom_mater :
- return "ast-red-square"
- except :
- pass
- return "ast-yellow-square"
-
- def getLabelText(self):
- """ Retourne 3 valeurs :
- - le texte a afficher dans le noeud représentant l'item
- - la fonte dans laquelle afficher ce texte
- - la couleur du texte
- """
- return self.labeltext,None,None
- #if self.object.isActif():
+ """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
+ Accas. Elle leur permet d'etre affichés comme des noeuds
+ d'un arbre graphique.
+ Cette classe a entre autres deux attributs importants :
+ - _object qui est un pointeur vers l'objet du noyau
+ - object qui pointe vers l'objet auquel sont délégués les
+ appels de méthode et les acces aux attributs
+ Dans le cas d'une ETAPE, _object et object pointent vers le
+ meme objet.
+ """
+ itemNode=Node
+
+ def isExpandable(self):
+ return 1
+
+ def getIconName(self):
+ """
+ Retourne le nom de l'icone a afficher dans l'arbre
+ Ce nom depend de la validite de l'objet
+ """
+ if not self.object.isActif():
+ return "ast-white-square"
+ elif self.object.isValid():
+ return "ast-green-square"
+ else:
+ valid=self.validChild()
+ valid= valid * self.validRegles("non")
+ if self.reste_val != {} : valid=0
+ if valid==0 :
+ return "ast-red-square"
+ else :
+ try :
+ # on traite ici le cas d include materiau
+ # print self.object.definition.nom
+ if self.object.fichier_ini != self.object.nom_mater :
+ return "ast-red-square"
+ except :
+ pass
+ return "ast-yellow-square"
+
+ def getLabelText(self):
+ """ Retourne 3 valeurs :
+ - le texte a afficher dans le noeud représentant l'item
+ - la fonte dans laquelle afficher ce texte
+ - la couleur du texte
+ """
+ return self.labeltext,None,None
+ #if self.object.isActif():
# None --> fonte et couleur par défaut
- # return self.labeltext,None,None
- #else:
- # return self.labeltext, None, None #CS_pbruno todo
-
- #def get_objet(self,name) :
- # for v in self.object.mcListe:
- # if v.nom == name : return v
- # return None
-
- # def getType_sd_prod(self):
- # """
- # Retourne le nom du type du concept résultat de l'étape
- # """
- # sd_prod=self.object.getType_produit()
- # if sd_prod:
- # return sd_prod.__name__
- # else:
- # return ""
-
- def addItem(self,name,pos):
- mcent = self._object.addEntite(name,pos)
- return mcent
-
-
- def suppItem(self,item) :
- # item : item du MOCLE de l'ETAPE a supprimer
- # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
- itemobject=item.getObject()
- if itemobject.isOblig() :
- return (0,tr('Impossible de supprimer un mot-clef obligatoire '))
- if self.object.suppEntite(itemobject):
- message = tr("Mot-clef %s supprime " , itemobject.nom)
- return (1,message)
- else :
- return (0,tr('Pb interne : impossible de supprimer ce mot-clef'))
-
- def getText(self):
- try:
- return self.object.getSdname()
- except:
- return ''
-
- # PNPN ????
- #def keys(self):
- # keys=self.object.mc_dict
- # return keys
-
- def getSubList(self):
- """
- Reactualise la liste des items fils stockes dans self.sublist
- """
- if self.isActif():
- liste=self.object.mcListe
- else:
- liste=[]
-
- sublist=[None]*len(liste)
- # suppression des items lies aux objets disparus
- for item in self.sublist:
- old_obj=item.getObject()
- if old_obj in liste:
- pos=liste.index(old_obj)
- sublist[pos]=item
- else:
- pass # objets supprimes ignores
-
- # ajout des items lies aux nouveaux objets
- pos=0
- for obj in liste:
- if sublist[pos] is None:
- # nouvel objet : on cree un nouvel item
- def setFunction(value, object=obj):
- object.setval(value)
- item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
- sublist[pos]=item
- pos=pos+1
-
- self.sublist=sublist
- return self.sublist
-
- def isValid(self):
- return self.object.isValid()
-
- def isCopiable(self):
- """
- Retourne 1 si l'objet est copiable, 0 sinon
- """
- return 1
-
- def updateDeplace(self,item):
- if item.sd and item.sd.nom:
- self.object.sd=item.sd
- self.object.sd.nom=item.sd.nom
-
- def update(self,item):
- if item.sd and item.sd.nom:
- self.nommeSd(item.sd.nom)
-
- def nommeSd(self,nom):
- """ Lance la méthode de nommage de la SD """
- oldnom=""
- if self.object.sd != None :
- oldnom=self.object.sd.nom
- test,mess= self.object.nommeSd(nom)
- if test:self.object.parent.resetContext()
- if (test and oldnom in self.appliEficas.dict_reels ):
- self.appliEficas.dict_reels[nom]=self.appliEficas.dict_reels[oldnom]
- return test,mess
-
- def isReentrant(self):
- return self.object.isReentrant()
-
- def getNomsSdOperReentrant(self):
- return self.object.getNomsSdOperReentrant()
-
- def getObjetCommentarise(self):
- """
- Cette méthode retourne un objet commentarisé
- représentatif de self.object
- """
- # Format de fichier utilisé
- format=self.appliEficas.formatFichierIn
- return self.object.getObjetCommentarise(format)
-
- def getObjetCommentarise_BAK(self):
- """
- Cette méthode retourne un objet commentarisé
- représentatif de self.object
- """
- import generator,Accas
- # Format de fichier utilisé
- format=self.appliEficas.format_fichier
- g=generator.plugins[format]()
- texte_commande = g.gener(self.object,format='beautifie')
- # Il faut enlever la premiere ligne vide de texte_commande que
- # rajoute le generator
- rebut,texte_commande = texte_commande.split('\n',1)
- # on construit l'objet COMMANDE_COMM repésentatif de self mais non
- # enregistré dans le jdc
- commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
- parent=self.object.parent)
- commande_comment.niveau = self.object.niveau
- commande_comment.jdc = commande_comment.parent = self.object.jdc
-
- pos=self.object.parent.etapes.index(self.object)
- parent=self.object.parent
- self.object.parent.suppEntite(self.object)
- parent.addEntite(commande_comment,pos)
-
- return commande_comment
+ # return self.labeltext,None,None
+ #else:
+ # return self.labeltext, None, None #CS_pbruno todo
+
+ #def get_objet(self,name) :
+ # for v in self.object.mcListe:
+ # if v.nom == name : return v
+ # return None
+
+ # def getType_sd_prod(self):
+ # """
+ # Retourne le nom du type du concept résultat de l'étape
+ # """
+ # sd_prod=self.object.getType_produit()
+ # if sd_prod:
+ # return sd_prod.__name__
+ # else:
+ # return ""
+
+ def addItem(self,name,pos):
+ mcent = self._object.addEntite(name,pos)
+ return mcent
+
+
+ def suppItem(self,item) :
+ # item : item du MOCLE de l'ETAPE a supprimer
+ # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
+ itemobject=item.getObject()
+ if itemobject.isOblig() :
+ return (0,tr('Impossible de supprimer un mot-clef obligatoire '))
+ if self.object.suppEntite(itemobject):
+ message = tr("Mot-clef %s supprime " , itemobject.nom)
+ return (1,message)
+ else :
+ return (0,tr('Pb interne : impossible de supprimer ce mot-clef'))
+
+ def getText(self):
+ try:
+ return self.object.getSdname()
+ except:
+ return ''
+
+ # PNPN ????
+ #def keys(self):
+ # keys=self.object.mc_dict
+ # return keys
+
+ def getSubList(self):
+ """
+ Reactualise la liste des items fils stockes dans self.sublist
+ """
+ if self.isActif():
+ liste=self.object.mcListe
+ else:
+ liste=[]
+
+ sublist=[None]*len(liste)
+ # suppression des items lies aux objets disparus
+ for item in self.sublist:
+ old_obj=item.getObject()
+ if old_obj in liste:
+ pos=liste.index(old_obj)
+ sublist[pos]=item
+ else:
+ pass # objets supprimes ignores
+
+ # ajout des items lies aux nouveaux objets
+ pos=0
+ for obj in liste:
+ if sublist[pos] is None:
+ # nouvel objet : on cree un nouvel item
+ def setFunction(value, object=obj):
+ object.setval(value)
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
+ sublist[pos]=item
+ pos=pos+1
+
+ self.sublist=sublist
+ return self.sublist
+
+ def isValid(self):
+ return self.object.isValid()
+
+ def isCopiable(self):
+ """
+ Retourne 1 si l'objet est copiable, 0 sinon
+ """
+ return 1
+
+ def updateDeplace(self,item):
+ if item.sd and item.sd.nom:
+ self.object.sd=item.sd
+ self.object.sd.nom=item.sd.nom
+
+ def update(self,item):
+ if item.sd and item.sd.nom:
+ self.nommeSd(item.sd.nom)
+
+ def nommeSd(self,nom):
+ """ Lance la méthode de nommage de la SD """
+ oldnom=""
+ if self.object.sd != None :
+ oldnom=self.object.sd.nom
+ test,mess= self.object.nommeSd(nom)
+ if test:self.object.parent.resetContext()
+ if (test and oldnom in self.appliEficas.dict_reels ):
+ self.appliEficas.dict_reels[nom]=self.appliEficas.dict_reels[oldnom]
+ return test,mess
+
+ def isReentrant(self):
+ return self.object.isReentrant()
+
+ def getNomsSdOperReentrant(self):
+ return self.object.getNomsSdOperReentrant()
+
+ def getObjetCommentarise(self):
+ """
+ Cette méthode retourne un objet commentarisé
+ représentatif de self.object
+ """
+ # Format de fichier utilisé
+ format=self.appliEficas.formatFichierIn
+ return self.object.getObjetCommentarise(format)
+
+ def getObjetCommentarise_BAK(self):
+ """
+ Cette méthode retourne un objet commentarisé
+ représentatif de self.object
+ """
+ import generator,Accas
+ # Format de fichier utilisé
+ format=self.appliEficas.format_fichier
+ g=generator.plugins[format]()
+ texte_commande = g.gener(self.object,format='beautifie')
+ # Il faut enlever la premiere ligne vide de texte_commande que
+ # rajoute le generator
+ rebut,texte_commande = texte_commande.split('\n',1)
+ # on construit l'objet COMMANDE_COMM repésentatif de self mais non
+ # enregistré dans le jdc
+ commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
+ parent=self.object.parent)
+ commande_comment.niveau = self.object.niveau
+ commande_comment.jdc = commande_comment.parent = self.object.jdc
+
+ pos=self.object.parent.etapes.index(self.object)
+ parent=self.object.parent
+ self.object.parent.suppEntite(self.object)
+ parent.addEntite(commande_comment,pos)
+
+ return commande_comment
import Accas
treeitem = EtapeTreeItem
-objet = Accas.ETAPE
-
+objet = Accas.ETAPE
"""
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from . import typeNode
-class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
+class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
def getPanel(self):
- """
- """
+ """
+ """
from .monWidgetParam import MonWidgetParam
return MonWidgetParam(self, self.editor,self.item.object)
"""
itemNode=Node
- def init(self):
- self.setFunction = self.setValeur
+ def init(self):
+ self.setFunction = self.setValeur
# ---------------------------------------------------------------------------
-# API du PARAMETRE pour l'arbre
+# API du PARAMETRE pour l'arbre
# ---------------------------------------------------------------------------
def getIconName(self):
- """
- Retourne le nom de l'icone associee au noeud qui porte self,
- dependant de la validite de l'objet
- NB : un PARAMETRE est toujours valide ...
- """
- if self.isActif():
- if self.isValid():
- return "ast-green-square"
- else:
- return "ast-red-square"
- else:
- return "ast-white-square"
+ """
+ Retourne le nom de l'icone associee au noeud qui porte self,
+ dependant de la validite de l'objet
+ NB : un PARAMETRE est toujours valide ...
+ """
+ if self.isActif():
+ if self.isValid():
+ return "ast-green-square"
+ else:
+ return "ast-red-square"
+ else:
+ return "ast-white-square"
def getLabelText(self):
""" Retourne 3 valeurs :
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
- return tr('PARAMETRE'),None,None
+ return tr('PARAMETRE'),None,None
def getText(self):
- """
- Retourne le texte a afficher apres le nom de la commande (ici apres 'parametre')
- Ce texte est tronque a 25 caracteres
- """
- texte=self.object.nom+"="+str(self.object.valeur)
- if type(self.object.valeur) == list :
- texte=self.nom+' = ['
- for l in self.object.valeur :
- texte=texte+str(l) +","
- texte=texte[0:-1]+']'
- texte = texte.split('\n')[0]
- if len(texte) < 25 :
- return texte
- else :
- return texte[0:24]+'...'
+ """
+ Retourne le texte a afficher apres le nom de la commande (ici apres 'parametre')
+ Ce texte est tronque a 25 caracteres
+ """
+ texte=self.object.nom+"="+str(self.object.valeur)
+ if type(self.object.valeur) == list :
+ texte=self.nom+' = ['
+ for l in self.object.valeur :
+ texte=texte+str(l) +","
+ texte=texte[0:-1]+']'
+ texte = texte.split('\n')[0]
+ if len(texte) < 25 :
+ return texte
+ else :
+ return texte[0:24]+'...'
def getSubList(self):
- """
- Retourne la liste des fils de self
- """
- return []
-
+ """
+ Retourne la liste des fils de self
+ """
+ return []
+
# ---------------------------------------------------------------------------
# Methodes permettant la modification et la lecture des attributs
# du parametre = API graphique du PARAMETRE pour Panel et EFICAS
# ---------------------------------------------------------------------------
def getValeur(self):
- """
- Retourne la valeur de l'objet PARAMETRE cad son texte
- """
- if self.object.valeur is None: return ''
- else: return self.object.valeur
+ """
+ Retourne la valeur de l'objet PARAMETRE cad son texte
+ """
+ if self.object.valeur is None: return ''
+ else: return self.object.valeur
def getNom(self):
- """
- Retourne le nom du parametre
- """
- return self.object.nom
+ """
+ Retourne le nom du parametre
+ """
+ return self.object.nom
def setValeur(self,new_valeur):
- """
- Affecte valeur a l'objet PARAMETRE
- """
- self.object.setValeur(new_valeur)
+ """
+ Affecte valeur a l'objet PARAMETRE
+ """
+ self.object.setValeur(new_valeur)
def setNom(self,new_nom):
- """
- Renomme le parametre
- """
- self.object.setNom(new_nom)
- #self.object.setAttribut('nom',new_nom)
+ """
+ Renomme le parametre
+ """
+ self.object.setNom(new_nom)
+ #self.object.setAttribut('nom',new_nom)
def getFr(self):
- """
- Retourne le fr associe au parametre, cad la bulle d'aide pour EFICAS
- """
- return tr("Definition d'un parametre")
-
+ """
+ Retourne le fr associe au parametre, cad la bulle d'aide pour EFICAS
+ """
+ return tr("Definition d'un parametre")
+
import Extensions.parametre
treeitem =PARAMTreeItem
objet = Extensions.parametre.PARAMETRE
class ProcEtapeTreeItem(compooper.EtapeTreeItem):
itemNode=Node
-
+
import Accas
treeitem = ProcEtapeTreeItem
-objet = Accas.PROC_ETAPE
-
+objet = Accas.PROC_ETAPE
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from InterfaceQT4 import browser
from Noyau.N_CR import justifyText
from Accas import SalomeEntry
+from Accas import ASSD
from Accas import UserASSD
-
-class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
+from Accas import UserASSDMultiple
+
+class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
def createPopUpMenu(self):
typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
monObjet=self.item.object
monNom=self.item.nom
- # label informatif
+ # label informatif
if monObjet.isInformation():
- from InterfaceQT4.monWidgetInfo import MonWidgetInfo
- widget=MonWidgetInfo(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- self.widget=widget
- return widget
+ from InterfaceQT4.monWidgetInfo import MonWidgetInfo
+ widget=MonWidgetInfo(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ self.widget=widget
+ return widget
- # Attention l ordre des if est important
- # Attention il faut gerer les blocs et les facteurs
- # a gerer comme dans composimp
- # Gestion des matrices
+ # Attention l ordre des if est important
+ # Attention il faut gerer les blocs et les facteurs
+ # a gerer comme dans composimp
+ # Gestion des matrices
if self.item.waitMatrice ():
- from InterfaceQT4.monWidgetMatrice import MonWidgetMatrice
- widget=MonWidgetMatrice(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- self.widget=widget
- return widget
+ from InterfaceQT4.monWidgetMatrice import MonWidgetMatrice
+ widget=MonWidgetMatrice(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ self.widget=widget
+ return widget
- #print "____________________________", monNom, self.item.waitCo()
- #print "____________________________", monNom, self.item.waitAssd()
+ #print "____________________________", monNom, self.item.waitCo()
+ #print "____________________________", monNom, self.item.waitAssd()
# Gestion d'une seule valeur (eventuellement un tuple ou un complexe)
if maDefinition.into != [] and maDefinition.into != None:
- if type(maDefinition.into) ==types.FunctionType : monInto=maDefinition.into()
+ if type(maDefinition.into) ==types.FunctionType : monInto=maDefinition.into()
else : monInto = maDefinition.into
if maDefinition.max == 1 :
# A verifier
- if maDefinition.intoSug != [] and maDefinition.intoSug != None:
- from InterfaceQT4.monWidgetCBIntoSug import MonWidgetCBIntoSug
- widget=MonWidgetCBIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif maDefinition.into != [] and maDefinition.into != None:
- if maDefinition.fenetreIhm=='menuDeroulant' :
- from InterfaceQT4.monWidgetCB import MonWidgetCB
- widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif len(monInto) < 4 :
- from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButton
- widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif len(monInto) < 7 :
- from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButton
- widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetCB import MonWidgetCB
- widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- elif self.item.waitBool() :
- from InterfaceQT4.monWidgetSimpBool import MonWidgetSimpBool
- widget=MonWidgetSimpBool(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item.waitFichier():
- from InterfaceQT4.monWidgetSimpFichier import MonWidgetSimpFichier
- widget=MonWidgetSimpFichier(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- # PNPNPN - a faire
- elif self.item.waitDate():
- from InterfaceQT4.monWidgetDate import MonWidgetDate
- widget=MonWidgetDate(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item.waitHeure():
- from InterfaceQT4.monWidgetHeure import MonWidgetHeure
- widget=MonWidgetHeure(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- elif self.item.waitTuple() :
- num=self.item.object.definition.type[0].ntuple
- nomDeLaClasse = 'MonWidgetSimpTuple'+str(num)
- nomDuFichier = 'InterfaceQT4.monWidgetSimpTupleN'
- try :
- #if 1 :
- _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
- #print (_temp)
- MonWidgetSimpTuple = getattr(_temp,nomDeLaClasse)
- except :
- print ("Pas de Tuple de longueur : ", num)
- # print ("Prevenir la maintenance ")
- widget=MonWidgetSimpTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- elif self.item.waitComplex():
- from InterfaceQT4.monWidgetSimpComplexe import MonWidgetSimpComplexe
- widget=MonWidgetSimpComplexe(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- elif self.item.waitCo():
- if len(self.item.getSdAvantDuBonType()) == 0 :
- from InterfaceQT4.monWidgetUniqueSDCO import MonWidgetUniqueSDCO
- widget=MonWidgetUniqueSDCO(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetSDCOInto import MonWidgetSDCOInto
- widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item.waitAssd():
-
- # PN - pour ne pas appeller trop souvent self.item.getSdAvantDuBonType()
- if not (self.item.waitUserAssdEnCreation()) : maListe=self.item.getSdAvantDuBonType()
- if self.item.waitUserAssdEnCreation() :
- from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeUserAssd
- widget=MonWidgetCreeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- #elif len(self.item.getSdAvantDuBonType()) == 0 :
- elif len(maListe) == 0 :
- from InterfaceQT4.monWidgetVide import MonWidgetVide
- widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- #elif len(self.item.getSdAvantDuBonType()) < 4 :
- elif len(maListe) < 4 :
- from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButtonSD
- widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- #elif len(self.item.getSdAvantDuBonType()) < 7 :
- elif len(maListe) < 7 :
- from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
- widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ if maDefinition.intoSug != [] and maDefinition.intoSug != None:
+ from InterfaceQT4.monWidgetCBIntoSug import MonWidgetCBIntoSug
+ widget=MonWidgetCBIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif maDefinition.into != [] and maDefinition.into != None:
+ if maDefinition.fenetreIhm=='menuDeroulant' :
+ from InterfaceQT4.monWidgetCB import MonWidgetCB
+ widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif len(monInto) < 4 :
+ from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButton
+ widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif len(monInto) < 7 :
+ from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButton
+ widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetCB import MonWidgetCB
+ widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ elif self.item.waitBool() :
+ from InterfaceQT4.monWidgetSimpBool import MonWidgetSimpBool
+ widget=MonWidgetSimpBool(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif self.item.waitFichier():
+ from InterfaceQT4.monWidgetSimpFichier import MonWidgetSimpFichier
+ widget=MonWidgetSimpFichier(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ # PNPNPN - a faire
+ elif self.item.waitDate():
+ from InterfaceQT4.monWidgetDate import MonWidgetDate
+ widget=MonWidgetDate(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif self.item.waitHeure():
+ from InterfaceQT4.monWidgetHeure import MonWidgetHeure
+ widget=MonWidgetHeure(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ elif self.item.waitTuple() :
+ num=self.item.object.definition.type[0].ntuple
+ nomDeLaClasse = 'MonWidgetSimpTuple'+str(num)
+ nomDuFichier = 'InterfaceQT4.monWidgetSimpTupleN'
+ try :
+ #if 1 :
+ _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
+ #print (_temp)
+ MonWidgetSimpTuple = getattr(_temp,nomDeLaClasse)
+ #print (MonWidgetSimpTuple)
+ except :
+ print ("Pas de Tuple de longueur : ", num)
+ # print ("Prevenir la maintenance ")
+ widget=MonWidgetSimpTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ elif self.item.waitComplex():
+ from InterfaceQT4.monWidgetSimpComplexe import MonWidgetSimpComplexe
+ widget=MonWidgetSimpComplexe(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ elif self.item.waitCo():
+ if len(self.item.getSdAvantDuBonType()) == 0 :
+ from InterfaceQT4.monWidgetUniqueSDCO import MonWidgetUniqueSDCO
+ widget=MonWidgetUniqueSDCO(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetSDCOInto import MonWidgetSDCOInto
+ widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif self.item.waitAssd():
+
+ # PN - pour ne pas appeller trop souvent self.item.getSdAvantDuBonType()
+ if not (self.item.waitUserAssdOrAssdMultipleEnCreation()) : maListe=self.item.getSdAvantDuBonType()
+ if self.item.waitUserAssdOrAssdMultipleEnCreation() :
+ from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeUserAssd
+ widget=MonWidgetCreeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ #elif len(self.item.getSdAvantDuBonType()) == 0 :
+ elif len(maListe) == 0 :
+ from InterfaceQT4.monWidgetVide import MonWidgetVide
+ widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ #elif len(self.item.getSdAvantDuBonType()) < 4 :
+ elif len(maListe) < 4 :
+ from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButtonSD
+ widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ #elif len(self.item.getSdAvantDuBonType()) < 7 :
+ elif len(maListe) < 7 :
+ from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
+ widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetCB import MonWidgetCBSD
+ widget=MonWidgetCBSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ elif self.item.waitSalome() and self.editor.salome:
+ from InterfaceQT4.monWidgetSimpSalome import MonWidgetSimpSalome
+ widget=MonWidgetSimpSalome(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ elif self.item.waitTxm():
+ from InterfaceQT4.monWidgetSimpTxt import MonWidgetSimpTxt
+ widget=MonWidgetSimpTxt(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from InterfaceQT4.monWidgetCB import MonWidgetCBSD
- widget=MonWidgetCBSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- elif self.item.waitSalome() and self.editor.salome:
- from InterfaceQT4.monWidgetSimpSalome import MonWidgetSimpSalome
- widget=MonWidgetSimpSalome(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- elif self.item.waitTxm():
- from InterfaceQT4.monWidgetSimpTxt import MonWidgetSimpTxt
- widget=MonWidgetSimpTxt(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetSimpBase import MonWidgetSimpBase
- widget=MonWidgetSimpBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ from InterfaceQT4.monWidgetSimpBase import MonWidgetSimpBase
+ widget=MonWidgetSimpBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
# Gestion des listes
else :
- if maDefinition.intoSug != [] and maDefinition.intoSug != None:
- if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from InterfaceQT4.monWidgetIntoSug import MonWidgetIntoSug
- widget=MonWidgetIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
- widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- #if maDefinition.into != [] and maDefinition.into != None:
- # Attention pas fini --> on attend une liste de ASSD avec ordre
- elif self.item.waitAssd() and self.item.isListSansOrdreNiDoublon():
- listeAAfficher = self.item.getSdAvantDuBonType()
- if len(listeAAfficher) == 0:
- from InterfaceQT4.monWidgetVide import MonWidgetVide
- widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
- widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item.waitAssd() and not self.item.waitUserAssdEnCreation() :
- listeAAfficher = self.item.getSdAvantDuBonType()
- #if not (self.item.waitUserAssdEnCreation()) : maListe=self.item.getSdAvantDuBonType()
- mctype=maDefinition.type[0]
- enable_salome_selection = self.editor.salome and \
- (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \
- (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection))
- if enable_salome_selection:
- from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
- widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif len(listeAAfficher) == 0:
- from InterfaceQT4.monWidgetVide import MonWidgetVide
- widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from InterfaceQT4.monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
- widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlieASSD
- widget=MonWidgetPlusieursPlieASSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item.waitTuple() :
- if self.item.object.definition.fenetreIhm == 'Tableau' :
- from InterfaceQT4.monWidgetTableau import MonWidgetTableau
- widget=MonWidgetTableau(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- num=self.item.object.definition.type[0].ntuple
- nomDeLaClasse = 'MonWidgetPlusieursTuple'+str(num)
- nomDuFichier = 'InterfaceQT4.monWidgetPlusieursTupleN'
- #try:
- if 1 :
- _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
- MonWidgetPlusieursTuple = getattr(_temp,nomDeLaClasse)
- #except :
- # print ("Pas de Tuple de longueur : ", num)
- # print ("Prevenir la maintenance ")
- widget=MonWidgetPlusieursTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
-
- elif self.item.hasInto():
- if self.item.isListSansOrdreNiDoublon():
-
- if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
- widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
- widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from InterfaceQT4.monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
- widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
- widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- else :
- if self.item.waitUserAssdEnCreation() :
- from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeListeUserAssd
- widget=MonWidgetCreeListeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
- widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ if maDefinition.intoSug != [] and maDefinition.intoSug != None:
+ if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
+ from InterfaceQT4.monWidgetIntoSug import MonWidgetIntoSug
+ widget=MonWidgetIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
+ widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ #if maDefinition.into != [] and maDefinition.into != None:
+ # Attention pas fini --> on attend une liste de ASSD avec ordre
+ elif self.item.waitAssd() and self.item.isListSansOrdreNiDoublon():
+ listeAAfficher = self.item.getSdAvantDuBonType()
+ if len(listeAAfficher) == 0:
+ from InterfaceQT4.monWidgetVide import MonWidgetVide
+ widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
+ widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif self.item.waitAssd() and not self.item.waitUserAssdOrAssdMultipleEnCreation() :
+ listeAAfficher = self.item.getSdAvantDuBonType()
+ # a changer selon UserASSD ou UserASSDMultiple
+ mctype=maDefinition.type[0]
+ enable_salome_selection = self.editor.salome and \
+ (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \
+ (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection))
+ if enable_salome_selection:
+ from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
+ widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif len(listeAAfficher) == 0:
+ from InterfaceQT4.monWidgetVide import MonWidgetVide
+ widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
+ from InterfaceQT4.monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
+ widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlieASSD
+ widget=MonWidgetPlusieursPlieASSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif self.item.waitTuple() :
+ if self.item.object.definition.fenetreIhm == 'Tableau' :
+ from InterfaceQT4.monWidgetTableau import MonWidgetTableau
+ widget=MonWidgetTableau(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ num=self.item.object.definition.type[0].ntuple
+ nomDeLaClasse = 'MonWidgetPlusieursTuple'+str(num)
+ nomDuFichier = 'InterfaceQT4.monWidgetPlusieursTupleN'
+ try:
+ _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
+ MonWidgetPlusieursTuple = getattr(_temp,nomDeLaClasse)
+ except :
+ print ("Pas de Tuple de longueur : ", num)
+ print ("Prevenir la maintenance ")
+ widget=MonWidgetPlusieursTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+ elif self.item.hasInto():
+ if self.item.isListSansOrdreNiDoublon():
+
+ if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
+ from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
+ widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
+ widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
+ from InterfaceQT4.monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
+ widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
+ widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
- widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ if self.item.waitUserAssdOrAssdMultipleEnCreation() :
+ from InterfaceQT4.monWidgetPlusieursCreeUserAssd import MonWidgetPlusieursCreeUserAssd
+ widget=MonWidgetPlusieursCreeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
+ from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
+ widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+ else :
+ from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
+ widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
self.widget=widget
return widget
-
-
+
+
class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
- itemNode=Node
-
- def init(self) :
- self.expandable = 0
-
-
- #-----------------------------------------------
- #
- # Methodes liees aux informations sur le Panel
- # ou au mot-clef simple
- #
- #-----------------------------------------------
- # isList
- # hasInto
- # getMinMax
- # getMultiplicite
- # getIntervalle
- # getListeValeurs
- # getListePossible
-
- def isList(self):
- """
- Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
- ou s'il n'en attend pas (valeur de retour 0)
-
- Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
- Dans le cas sans validateur, l'information est donnee par l'attribut max
- de la definition du mot cle.
- Dans le cas avec validateur, il faut combiner l'information precedente avec
- celle issue de l'appel de la methode isList sur le validateur.On utilisera
- l'operateur ET pour effectuer cette combinaison (AndVal).
- """
- is_a_list=0
- min,max = self.getMinMax()
- assert (min <= max)
- if max > 1 :
- is_a_list=1
- # Dans le cas avec validateurs, pour que le mot cle soit considere
- # comme acceptant une liste, il faut que max soit superieur a 1
- # ET que la methode isList du validateur retourne 1. Dans les autres cas
- # on retournera 0 (n'attend pas de liste)
- if self.definition.validators :
- is_a_list= self.definition.validators.isList() * is_a_list
- return is_a_list
-
- def isListSansOrdreNiDoublon(self):
- if self.definition.homo=="SansOrdreNiDoublon" : return 1
- return 0
-
-
- def hasInto(self):
- """
- Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
- ou s'il n'en propose pas (valeur de retour 0)
-
- Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
- Dans le cas sans validateur, l'information est donnee par l'attribut into
- de la definition du mot cle.
- Dans le cas avec validateurs, pour que le mot cle soit considere
- comme proposant un choix, il faut que into soit present OU
- que la methode hasInto du validateur retourne 1. Dans les autres cas
- on retournera 0 (ne propose pas de choix)
- """
- has_an_into=0
- if self.definition.into:
- has_an_into=1
- elif self.definition.validators :
- has_an_into= self.definition.validators.hasInto()
- return has_an_into
-
- def hasIntoSug(self):
- if self.definition.intoSug: return 1
- return 0
-
-
- def getMinMax(self):
- """ Retourne les valeurs min et max de la definition de object """
- return self.object.getMinMax()
-
- def getMultiplicite(self):
- """ A preciser.
- Retourne la multiplicite des valeurs affectees a l'objet
- represente par l'item. Pour le moment retourne invariablement 1.
- """
- return 1
-
- def getIntervalle(self):
- """
- Retourne le domaine de valeur attendu par l'objet represente
- par l'item.
- """
- return self.object.getintervalle()
-
- def getListeValeurs(self) :
- """ Retourne la liste des valeurs de object """
- valeurs=self.object.getListeValeurs()
- try :
- if "R" in self.object.definition.type:
- clef=self.object.getNomConcept()
- if clef in self.appliEficas.dict_reels:
- if type(valeurs) == tuple:
- valeurs_reelles=[]
- for val in valeurs :
- if val in self.appliEficas.dict_reels[clef]:
- valeurs_reelles.append(self.appliEficas.dict_reels[clef][val])
+ itemNode=Node
+
+ def init(self) :
+ self.expandable = 0
+
+
+ #-----------------------------------------------
+ #
+ # Methodes liees aux informations sur le Panel
+ # ou au mot-clef simple
+ #
+ #-----------------------------------------------
+ # isList
+ # hasInto
+ # getMinMax
+ # getMultiplicite
+ # getIntervalle
+ # getListeValeurs
+ # getListePossible
+
+ def isList(self):
+ """
+ Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
+ ou s'il n'en attend pas (valeur de retour 0)
+
+ Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+ Dans le cas sans validateur, l'information est donnee par l'attribut max
+ de la definition du mot cle.
+ Dans le cas avec validateur, il faut combiner l'information precedente avec
+ celle issue de l'appel de la methode isList sur le validateur.On utilisera
+ l'operateur ET pour effectuer cette combinaison (AndVal).
+ """
+ is_a_list=0
+ min,max = self.getMinMax()
+ assert (min <= max)
+ if max > 1 :
+ is_a_list=1
+ # Dans le cas avec validateurs, pour que le mot cle soit considere
+ # comme acceptant une liste, il faut que max soit superieur a 1
+ # ET que la methode isList du validateur retourne 1. Dans les autres cas
+ # on retournera 0 (n'attend pas de liste)
+ if self.definition.validators :
+ is_a_list= self.definition.validators.isList() * is_a_list
+ return is_a_list
+
+ def isListSansOrdreNiDoublon(self):
+ if self.definition.homo=="SansOrdreNiDoublon" : return 1
+ return 0
+
+
+ def hasInto(self):
+ """
+ Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
+ ou s'il n'en propose pas (valeur de retour 0)
+
+ Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+ Dans le cas sans validateur, l'information est donnee par l'attribut into
+ de la definition du mot cle.
+ Dans le cas avec validateurs, pour que le mot cle soit considere
+ comme proposant un choix, il faut que into soit present OU
+ que la methode hasInto du validateur retourne 1. Dans les autres cas
+ on retournera 0 (ne propose pas de choix)
+ """
+ has_an_into=0
+ if self.definition.into:
+ has_an_into=1
+ elif self.definition.validators :
+ has_an_into= self.definition.validators.hasInto()
+ return has_an_into
+
+ def hasIntoSug(self):
+ if self.definition.intoSug: return 1
+ return 0
+
+
+ def getMinMax(self):
+ """ Retourne les valeurs min et max de la definition de object """
+ return self.object.getMinMax()
+
+ def getMultiplicite(self):
+ """ A preciser.
+ Retourne la multiplicite des valeurs affectees a l'objet
+ represente par l'item. Pour le moment retourne invariablement 1.
+ """
+ return 1
+
+ def getIntervalle(self):
+ """
+ Retourne le domaine de valeur attendu par l'objet represente
+ par l'item.
+ """
+ return self.object.getintervalle()
+
+ def getListeValeurs(self) :
+ """ Retourne la liste des valeurs de object """
+ valeurs=self.object.getListeValeurs()
+ try :
+ if "R" in self.object.definition.type:
+ clef=self.object.getNomConcept()
+ if clef in self.appliEficas.dict_reels:
+ if type(valeurs) == tuple:
+ valeurs_reelles=[]
+ for val in valeurs :
+ if val in self.appliEficas.dict_reels[clef]:
+ valeurs_reelles.append(self.appliEficas.dict_reels[clef][val])
+ else :
+ valeurs_reelles.append(val)
else :
- valeurs_reelles.append(val)
- else :
- if valeurs in self.appliEficas.dict_reels[clef]:
- valeurs_reelles=self.appliEficas.dict_reels[clef][valeurs]
- valeurs=valeurs_reelles
- except :
- pass
- return valeurs
-
- def getListePossible(self,listeActuelle=[]):
- if hasattr(self.definition.validators,'into'):
- valeurspossibles = self.definition.validators.into
- else:
- valeurspossibles = self.get_definition().into
-
- if listeActuelle==[] : return valeurspossibles
-
- #On ne garde que les items valides
- listevalideitem=[]
- if type(valeurspossibles) in (list,tuple) :
- pass
- else :
- valeurspossibles=(valeurspossibles,)
- for item in valeurspossibles:
- encorevalide=self.valideItem(item)
- if encorevalide :
- listevalideitem.append(item)
-
- #on ne garde que les choix possibles qui passent le test de valideListePartielle
- listevalideliste=[]
- for item in listevalideitem:
- encorevalide=self.valideListePartielle(item,listeActuelle)
- if encorevalide :
- listevalideliste.append(item)
- #print listevalideliste
- return listevalideliste
-
- def getListePossibleAvecSug(self,listeActuelle=[]):
- if hasattr(self.definition,'intoSug'):
- valeurspossibles = self.definition.intoSug
- else:
- return listeActuelle
-
- if listeActuelle==[] : return valeurspossibles
- valeurspossibles = valeurspossibles+listeActuelle
-
- #On ne garde que les items valides
- listevalideitem=[]
- if type(valeurspossibles) in (list,tuple) :
- pass
- else :
- valeurspossibles=(valeurspossibles,)
- for item in valeurspossibles:
- encorevalide=self.valideItem(item)
- if encorevalide :
- listevalideitem.append(item)
-
- #on ne garde que les choix possibles qui passent le test de valideListePartielle
- listevalideliste=[]
- for item in listevalideitem:
- encorevalide=self.valideListePartielle(item,listeActuelle)
- if encorevalide :
- listevalideliste.append(item)
- return listevalideliste
-
- def getListeParamPossible(self):
- liste_param=[]
- l1,l2=self.jdc.getParametresFonctionsAvantEtape(self.getEtape())
- for param in self.object.jdc.params:
- if param.nom not in l1 : continue
- encorevalide=self.valideItem(param.valeur)
- if encorevalide:
- type_param=param.valeur.__class__.__name__
- for typ in self.definition.type:
- if typ=='R':
- liste_param.append(param)
- if typ=='I' and type_param=='int':
- liste_param.append(param)
- if typ=='TXM' and type_param=='str':
- liste_param.append(repr(param))
- if ('grma' in repr(typ)) and type_param=='str':
- liste_param.append(param.nom)
- return liste_param
-
- #--------------------------------------------------
- #
- # Methodes liees a la validite des valeurs saisies
- #
- #---------------------------------------------------
- # valideItem
- # valideListePartielle
- # valideListeComplete
- # infoErreurItem
- # infoErreurListe
- # isInIntervalle
- # isValid
-
- def valideItem(self,item):
- """
- La validation est realisee directement par l'objet
- """
- return self.object.valideItem(item)
-
- def valideListePartielle(self,item,listecourante):
- #On protege la liste en entree en la copiant
- valeur=list(listecourante)
- if item : valeur.append(item)
- return self.object.validValeurPartielle(valeur)
-
- def valideListeComplete (self,valeur):
- return self.object.validValeur(valeur)
-
- def infoErreurItem(self) :
- commentaire=""
- if self.definition.validators :
- commentaire=self.definition.validators.infoErreurItem()
- return commentaire
-
- def aide(self) :
- commentaire=""
- if self.definition.validators :
- commentaire=self.definition.validators.aide()
- return commentaire
-
- def infoErreurListe(self) :
- commentaire=""
- if self.definition.validators :
- commentaire=self.definition.validators.infoErreurListe()
- return commentaire
-
- def isInIntervalle(self,valeur):
- """
- Retourne 1 si la valeur est dans l'intervalle permis par
- l'objet represente par l'item.
- """
- return self.valideItem(valeur)
-
- def isValid(self):
- valide=self.object.isValid()
- return valide
-
- #--------------------------------------------------
- #
- # Autres ...
- #
- #---------------------------------------------------
- # getIconName
- # getText
- # setValeurCo
- # getSdAvantDuBonType
-
-
- def getIconName(self):
- if self.appliEficas.maConfiguration.differencieSiDefaut and self.isValid():
- if self.object.definition.defaut != None :
- if self.object.valeur == self.object.definition.defaut : return "ast-green-dark-ball"
- if self.object.definition.max > 1 and list(self.object.valeur) == list(self.object.definition.defaut) : return "ast-green-dark-ball"
- return "ast-green-ball"
- elif self.isValid():
- return "ast-green-ball"
- elif self.object.isOblig():
- return "ast-red-ball"
- else:
- return "ast-yel-ball"
-
- def getText(self):
- """
- Classe SIMPTreeItem
- Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
- pointe par self
- """
- text= self.object.getText()
- if text == None : text=""
- return text
-
-
- def setValeurCo(self,nomCo):
- """
- Affecte au MCS pointe par self l'objet de type CO et de nom nom_co
- """
- ret = self.object.setValeurCo(nomCo)
- #print "setValeurCo",ret
- return ret
-
- def getSdAvantDuBonType(self):
- """
- Retourne la liste des noms des SD presentes avant l'etape qui contient
- le MCS pointe par self et du type requis par ce MCS
- """
- a=self.object.etape.parent.getSdAvantDuBonType(self.object.etape,self.object.definition.type)
- if self.waitUserAssd() : l=self.jdc.getSdCreeParObjet(self.object.definition.type)
- else :l=[]
- return a+l
-
- def getSdAvantDuBonTypePourTypeDeBase(self):
- a=self.object.jdc.getSdAvantDuBonTypePourTypeDe_Base(self.object.etape,"LASSD")
- return a
-
-
-
- def deleteValeurCo(self,valeur=None):
- """
- Supprime la valeur du mot cle (de type CO)
- il faut propager la destruction aux autres etapes
- """
- if not valeur : valeur=self.object.valeur
- # XXX faut il vraiment appeler delSdprod ???
- #self.object.etape.parent.delSdprod(valeur)
- self.object.etape.parent.deleteConcept(valeur)
-
- #-----------------------------------------------
- #
- # Methodes liees au type de l objet attendu
- #
- #-----------------------------------------------
- # waitCo
- # waitGeom
- # waitComplex
- # waitReel
- # waitAssd
- # getType
-
- def waitCo(self):
- """
- Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un objet de type ASSD qui n'existe pas encore (type CO()),
- 0 sinon
- """
- return self.object.waitCo()
-
- def waitFichier(self):
- maDefinition=self.object.definition
- try :
- if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
- return 1
- except :
- return 0
-
- def waitGeom(self):
- """
- Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un objet GEOM, 0 sinon
- """
- return self.object.waitGeom()
-
- def waitTxm(self):
- return self.object.waitTxm()
-
-
- def waitComplex(self):
- """ Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un complexe, 0 sinon """
- if 'C' in self.object.definition.type:
- return 1
- else:
- return 0
-
- def waitReel(self):
- """ Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un reel, 0 sinon """
- if 'R' in self.object.definition.type:
- return 1
- else:
- return 0
-
- def waitTuple(self) :
- return self.object.waitTuple()
-
- def waitDate(self):
- """ Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un reel, 0 sinon """
- if 'DateHHMMAAAA' in self.object.definition.type:
- return 1
- else:
- return 0
-
- def waitHeure(self):
- """ Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un reel, 0 sinon """
- if 'HeureHHMMSS' in self.object.definition.type:
- return 1
- else:
- return 0
-
-
-
- def waitTuple(self):
- """ Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un Tuple, 0 sinon """
- for ss_type in self.object.definition.type:
- if repr(ss_type).find('Tuple') != -1 :
- return 1
- return 0
-
- def waitMatrice(self):
- """ Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un Tuple, 0 sinon """
- for ss_type in self.object.definition.type:
- if repr(ss_type).find('Matrice') != -1 :
- return 1
- return 0
-
- def waitAssd(self):
- """Methode booleenne qui retourne 1 si l'objet pointe par self
- attend un objet de type ASSD ou derive, 0 sinon """
- return self.object.waitAssd()
-
- def waitAssdOrTypeBase(self) :
- boo=0
- if len(self.object.definition.type) > 1 :
- if self.waitReel() :
- boo = 1
- if 'I' in self.object.definition.type :
- boo = 1
- return boo
-
- def waitSalome(self):
- monType = self.object.definition.type[0]
- if 'grma' in repr(monType) : return True
- if 'grno' in repr(monType) : return True
- try :
- if issubclass(monType, SalomeEntry) : return True
- except :
- pass
- return False
-
- def getType(self):
- """
- Retourne le type de valeur attendu par l'objet represente par l'item.
- """
- return self.object.getType()
-
- #-----------------------------------------------------
- #
- # Methodes liees a l evaluation de la valeur saisie
- #
- #-----------------------------------------------------
- # evalValeur
- # evalValeurItem
- # isCO
- # traiteReel
-
- def evalValeur(self,valeur):
- """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
- - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
- - retourne 'valeur' (chaine de caracteres) sinon
- """
- newvaleur=self.evalVal(valeur)
- return newvaleur,1
-
-
- def evalValeurItem(self,valeur):
- """ Lance l'interpretation de 'valeur' qui doit ne pas etre un tuple
- - va retourner la valeur de retour et la validite
- selon le type de l objet attendu
- - traite les reels et les parametres
- """
- #print "evalValeurItem",valeur
- if valeur==None or valeur == "" :
- return None,0
- validite=1
- if self.waitReel():
- valeurinter = self.traiteReel(valeur)
- if valeurinter != None :
+ if valeurs in self.appliEficas.dict_reels[clef]:
+ valeurs_reelles=self.appliEficas.dict_reels[clef][valeurs]
+ valeurs=valeurs_reelles
+ except :
+ pass
+ return valeurs
+
+ def getListePossible(self,listeActuelle=[]):
+ if hasattr(self.definition.validators,'into'):
+ valeurspossibles = self.definition.validators.into
+ else:
+ valeurspossibles = self.get_definition().into
+
+ if listeActuelle==[] : return valeurspossibles
+
+ #On ne garde que les items valides
+ listevalideitem=[]
+ if type(valeurspossibles) in (list,tuple) :
+ pass
+ else :
+ valeurspossibles=(valeurspossibles,)
+ for item in valeurspossibles:
+ encorevalide=self.valideItem(item)
+ if encorevalide :
+ listevalideitem.append(item)
+
+ #on ne garde que les choix possibles qui passent le test de valideListePartielle
+ listevalideliste=[]
+ for item in listevalideitem:
+ encorevalide=self.valideListePartielle(item,listeActuelle)
+ if encorevalide :
+ listevalideliste.append(item)
+ #print listevalideliste
+ return listevalideliste
+
+ def getListePossibleAvecSug(self,listeActuelle=[]):
+ if hasattr(self.definition,'intoSug'):
+ valeurspossibles = self.definition.intoSug
+ else:
+ return listeActuelle
+
+ if listeActuelle==[] : return valeurspossibles
+ valeurspossibles = valeurspossibles+listeActuelle
+
+ #On ne garde que les items valides
+ listevalideitem=[]
+ if type(valeurspossibles) in (list,tuple) :
+ pass
+ else :
+ valeurspossibles=(valeurspossibles,)
+ for item in valeurspossibles:
+ encorevalide=self.valideItem(item)
+ if encorevalide :
+ listevalideitem.append(item)
+
+ #on ne garde que les choix possibles qui passent le test de valideListePartielle
+ listevalideliste=[]
+ for item in listevalideitem:
+ encorevalide=self.valideListePartielle(item,listeActuelle)
+ if encorevalide :
+ listevalideliste.append(item)
+ return listevalideliste
+
+ def getListeParamPossible(self):
+ liste_param=[]
+ l1,l2=self.jdc.getParametresFonctionsAvantEtape(self.getEtape())
+ for param in self.object.jdc.params:
+ if param.nom not in l1 : continue
+ encorevalide=self.valideItem(param.valeur)
+ if encorevalide:
+ type_param=param.valeur.__class__.__name__
+ for typ in self.definition.type:
+ if typ=='R':
+ liste_param.append(param)
+ if typ=='I' and type_param=='int':
+ liste_param.append(param)
+ if typ=='TXM' and type_param=='str':
+ liste_param.append(repr(param))
+ if ('grma' in repr(typ)) and type_param=='str':
+ liste_param.append(param.nom)
+ return liste_param
+
+ #--------------------------------------------------
+ #
+ # Methodes liees a la validite des valeurs saisies
+ #
+ #---------------------------------------------------
+ # valideItem
+ # valideListePartielle
+ # valideListeComplete
+ # infoErreurItem
+ # infoErreurListe
+ # isInIntervalle
+ # isValid
+
+ def valideItem(self,item):
+ """
+ La validation est realisee directement par l'objet
+ """
+ return self.object.valideItem(item)
+
+ def valideListePartielle(self,item,listecourante):
+ #On protege la liste en entree en la copiant
+ valeur=list(listecourante)
+ if item : valeur.append(item)
+ return self.object.validValeurPartielle(valeur)
+
+ def valideListeComplete (self,valeur):
+ return self.object.validValeur(valeur)
+
+ def infoErreurItem(self) :
+ commentaire=""
+ if self.definition.validators :
+ commentaire=self.definition.validators.infoErreurItem()
+ return commentaire
+
+ def aide(self) :
+ commentaire=""
+ if self.definition.validators :
+ commentaire=self.definition.validators.aide()
+ return commentaire
+
+ def infoErreurListe(self) :
+ commentaire=""
+ if self.definition.validators :
+ commentaire=self.definition.validators.infoErreurListe()
+ return commentaire
+
+ def isInIntervalle(self,valeur):
+ """
+ Retourne 1 si la valeur est dans l'intervalle permis par
+ l'objet represente par l'item.
+ """
+ return self.valideItem(valeur)
+
+ def isValid(self):
+ valide=self.object.isValid()
+ return valide
+
+ #--------------------------------------------------
+ #
+ # Autres ...
+ #
+ #---------------------------------------------------
+ # getIconName
+ # getText
+ # setValeurCo
+ # getSdAvantDuBonType
+
+
+ def getIconName(self):
+ if self.appliEficas.maConfiguration.differencieSiDefaut and self.isValid():
+ if self.object.definition.defaut != None :
+ if self.object.valeur == self.object.definition.defaut : return "ast-green-dark-ball"
+ if self.object.definition.max > 1 and list(self.object.valeur) == list(self.object.definition.defaut) : return "ast-green-dark-ball"
+ return "ast-green-ball"
+ elif self.isValid():
+ return "ast-green-ball"
+ elif self.object.isOblig():
+ return "ast-red-ball"
+ else:
+ return "ast-yel-ball"
+
+ def getText(self):
+ """
+ Classe SIMPTreeItem
+ Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
+ pointe par self
+ """
+ if self.waitUserAssdMultiple() or self.object.waitUserAssd() or self.object.waitAssd(): return self.object.nom
+ text = self.object.getText()
+ if text == None : text=""
+ return text
+
+
+ def setValeurCo(self,nomCo):
+ """
+ Affecte au MCS pointe par self l'objet de type CO et de nom nom_co
+ """
+ ret = self.object.setValeurCo(nomCo)
+ #print "setValeurCo",ret
+ return ret
+
+ def getSdAvantDuBonType(self):
+ """
+ Retourne la liste des noms des SD presentes avant l'etape qui contient
+ le MCS pointe par self et du type requis par ce MCS
+ """
+ # A changer pour tenir compte des UserASSDMultiple
+ # ici on passe par parent pour avoir le bon type
+ #if self.waitUserAssdMultiple() :
+ # l=self.object.parent.getSdCreeParObjetAvecFiltre(self.object)
+ # return l
+ if self.waitUserAssdMultiple() :
+ l=self.object.getUserAssdPossible()
+ return l
+ a=self.object.etape.parent.getSdAvantDuBonType(self.object.etape,self.object.definition.type)
+ if self.waitUserAssd() : l=self.jdc.getSdCreeParObjet(self.object.definition.type)
+ else :l=[]
+ return a+l
+
+ def getSdAvantDuBonTypePourTypeDeBase(self):
+ a=self.object.jdc.getSdAvantDuBonTypePourTypeDe_Base(self.object.etape,"LASSD")
+ return a
+
+ def deleteValeurCo(self,valeur=None):
+ """
+ Supprime la valeur du mot cle (de type CO)
+ il faut propager la destruction aux autres etapes
+ """
+ if not valeur : valeur=self.object.valeur
+ # XXX faut il vraiment appeler delSdprod ???
+ #self.object.etape.parent.delSdprod(valeur)
+ self.object.etape.parent.deleteConcept(valeur)
+
+ #-----------------------------------------------
+ #
+ # Methodes liees au type de l objet attendu
+ #
+ #-----------------------------------------------
+ # waitCo
+ # waitGeom
+ # waitComplex
+ # waitReel
+ # waitAssd
+ # getType
+
+ def waitCo(self):
+ """
+ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un objet de type ASSD qui n'existe pas encore (type CO()),
+ 0 sinon
+ """
+ return self.object.waitCo()
+
+ def waitFichier(self):
+ maDefinition=self.object.definition
+ try :
+ if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
+ return 1
+ except :
+ return 0
+
+ def waitGeom(self):
+ """
+ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un objet GEOM, 0 sinon
+ """
+ return self.object.waitGeom()
+
+ def waitTxm(self):
+ return self.object.waitTxm()
+
+
+ def waitComplex(self):
+ """ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un complexe, 0 sinon """
+ if 'C' in self.object.definition.type:
+ return 1
+ else:
+ return 0
+
+ def waitReel(self):
+ """ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un reel, 0 sinon """
+ if 'R' in self.object.definition.type:
+ return 1
+ else:
+ return 0
+
+ def waitTuple(self) :
+ return self.object.waitTuple()
+
+ def waitDate(self):
+ """ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un reel, 0 sinon """
+ if 'DateHHMMAAAA' in self.object.definition.type:
+ return 1
+ else:
+ return 0
+
+ def waitHeure(self):
+ """ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un reel, 0 sinon """
+ if 'HeureHHMMSS' in self.object.definition.type:
+ return 1
+ else:
+ return 0
+
+
+
+ def waitTuple(self):
+ """ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un Tuple, 0 sinon """
+ for ss_type in self.object.definition.type:
+ if repr(ss_type).find('Tuple') != -1 :
+ return 1
+ return 0
+
+ def waitMatrice(self):
+ """ Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un Tuple, 0 sinon """
+ for ss_type in self.object.definition.type:
+ if repr(ss_type).find('Matrice') != -1 :
+ return 1
+ return 0
+
+ def waitAssd(self):
+ """Methode booleenne qui retourne 1 si l'objet pointe par self
+ attend un objet de type ASSD ou derive, 0 sinon """
+ return self.object.waitAssd()
+
+ def waitAssdOrTypeBase(self) :
+ boo=0
+ if len(self.object.definition.type) > 1 :
+ if self.waitReel() :
+ boo = 1
+ if 'I' in self.object.definition.type :
+ boo = 1
+ return boo
+
+ def waitSalome(self):
+ monType = self.object.definition.type[0]
+ if 'grma' in repr(monType) : return True
+ if 'grno' in repr(monType) : return True
+ try :
+ if issubclass(monType, SalomeEntry) : return True
+ except :
+ pass
+ return False
+
+ def getType(self):
+ """
+ Retourne le type de valeur attendu par l'objet represente par l'item.
+ """
+ return self.object.getType()
+
+ #-----------------------------------------------------
+ #
+ # Methodes liees a l evaluation de la valeur saisie
+ #
+ #-----------------------------------------------------
+ # evalValeur
+ # evalValeurItem
+ # isCO
+ # traiteReel
+
+ def evalValeur(self,valeur):
+ """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
+ - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
+ - retourne 'valeur' (chaine de caracteres) sinon
+ """
+ newvaleur=self.evalVal(valeur)
+ return newvaleur,1
+
+
+ def evalValeurItem(self,valeur):
+ """ Lance l'interpretation de 'valeur' qui doit ne pas etre un tuple
+ - va retourner la valeur de retour et la validite
+ selon le type de l objet attendu
+ - traite les reels et les parametres
+ """
+ #print "evalValeurItem",valeur
+ if valeur==None or valeur == "" :
+ return None,0
+ validite=1
+ if self.waitReel():
+ valeurinter = self.traiteReel(valeur)
+ if valeurinter != None :
valeurretour,validite= self.object.evalValeur(valeurinter)
- else:
+ else:
valeurretour,validite= self.object.evalValeur(valeur)
- elif self.waitGeom():
- valeurretour,validite = valeur,1
- else :
- valeurretour,validite= self.object.evalValeur(valeur)
-
- if validite == 0:
- if (type(valeur) == bytes or type(valeur) == str )and self.object.waitTxm():
- essai_valeur="'" + valeur + "'"
- valeurretour,validite= self.object.evalValeur(essai_valeur)
-
- if hasattr(valeurretour,'__class__'):
- #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
- if valeurretour.__class__.__name__ in ('PARAMETRE',):
- validite=1
-
- #if self.waitCo():
- # CCAR : il ne faut pas essayer de creer un concept
- # il faut simplement en chercher un existant ce qui a du etre fait par self.object.evalValeur(valeur)
- #try:
- #valeurretour=Accas.CO(valeur)
- #except:
- #valeurretour=None
- #validite=0
- # on est dans le cas ou on a evalue et ou on n'aurait pas du
- if self.object.waitTxm() :
- if type(valeurretour) != bytes:
- valeurretour=str(valeur)
- validite=1
- return valeurretour,validite
-
- def isCO(self,valeur=None):
- """
- Indique si valeur est un concept produit de la macro
- Cette methode n'a de sens que pour un MCSIMP d'une MACRO
- Si valeur vaut None on teste la valeur du mot cle
- """
- # Pour savoir si un concept est un nouveau concept de macro
- # on regarde s'il est present dans l'attribut sdprods de l'etape
- # ou si son nom de classe est CO.
- # Il faut faire les 2 tests car une macro non valide peut etre
- # dans un etat pas tres catholique avec des CO pas encore types
- # et donc pas dans sdprods (resultat d'une exception dans typeSDProd)
- if not valeur:valeur=self.object.valeur
- if valeur in self.object.etape.sdprods:return 1
- #if type(valeur) is not types.InstanceType:return 0
- if type(valeur) is not object:return 0
- if valeur.__class__.__name__ == 'CO':return 1
- return 0
-
- def isParam(self,valeur) :
- for param in self.jdc.params:
- if (repr(param) == valeur):
- return 1
- return 0
-
- def traiteReel(self,valeur):
- """
- Cette fonction a pour but de rajouter le '.' en fin de chaine pour un reel
- ou de detecter si on fait reference a un concept produit par DEFI_VALEUR
- ou un EVAL ...
- """
- valeur = valeur.strip()
- liste_reels = self.getSdAvantDuBonType()
- if valeur in liste_reels:
- return valeur
- if len(valeur) >= 3 :
- if valeur[0:4] == 'EVAL' :
- # on a trouve un EVAL --> on retourne directement la valeur
- return valeur
- if valeur.find('.') == -1 :
- # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
- if (self.isParam(valeur)):
- return valeur
- else:
- if valeur.find('e') != -1:
- # Notation scientifique ?
- try :
- r=eval(valeur)
- return valeur
- except :
- return None
- else :
- return valeur+'.'
- else:
- return valeur
-
+ elif self.waitGeom():
+ valeurretour,validite = valeur,1
+ else :
+ valeurretour,validite= self.object.evalValeur(valeur)
+
+ if validite == 0:
+ if (type(valeur) == bytes or type(valeur) == str )and self.object.waitTxm():
+ essai_valeur="'" + valeur + "'"
+ valeurretour,validite= self.object.evalValeur(essai_valeur)
+
+ if hasattr(valeurretour,'__class__'):
+ #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+ if valeurretour.__class__.__name__ in ('PARAMETRE',):
+ validite=1
+
+ #if self.waitCo():
+ # CCAR : il ne faut pas essayer de creer un concept
+ # il faut simplement en chercher un existant ce qui a du etre fait par self.object.evalValeur(valeur)
+ #try:
+ #valeurretour=Accas.CO(valeur)
+ #except:
+ #valeurretour=None
+ #validite=0
+ # on est dans le cas ou on a evalue et ou on n'aurait pas du
+ if self.object.waitTxm() :
+ if type(valeurretour) != bytes:
+ valeurretour=str(valeur)
+ validite=1
+ return valeurretour,validite
+
+ def isCO(self,valeur=None):
+ """
+ Indique si valeur est un concept produit de la macro
+ Cette methode n'a de sens que pour un MCSIMP d'une MACRO
+ Si valeur vaut None on teste la valeur du mot cle
+ """
+ # Pour savoir si un concept est un nouveau concept de macro
+ # on regarde s'il est present dans l'attribut sdprods de l'etape
+ # ou si son nom de classe est CO.
+ # Il faut faire les 2 tests car une macro non valide peut etre
+ # dans un etat pas tres catholique avec des CO pas encore types
+ # et donc pas dans sdprods (resultat d'une exception dans typeSDProd)
+ if not valeur:valeur=self.object.valeur
+ if valeur in self.object.etape.sdprods:return 1
+ #if type(valeur) is not types.InstanceType:return 0
+ if type(valeur) is not object:return 0
+ if valeur.__class__.__name__ == 'CO':return 1
+ return 0
+
+ def isParam(self,valeur) :
+ for param in self.jdc.params:
+ if (repr(param) == valeur):
+ return 1
+ return 0
+
+ def traiteReel(self,valeur):
+ """
+ Cette fonction a pour but de rajouter le '.' en fin de chaine pour un reel
+ ou de detecter si on fait reference a un concept produit par DEFI_VALEUR
+ ou un EVAL ...
+ """
+ valeur = valeur.strip()
+ liste_reels = self.getSdAvantDuBonType()
+ if valeur in liste_reels:
+ return valeur
+ if len(valeur) >= 3 :
+ if valeur[0:4] == 'EVAL' :
+ # on a trouve un EVAL --> on retourne directement la valeur
+ return valeur
+ if valeur.find('.') == -1 :
+ # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
+ if (self.isParam(valeur)):
+ return valeur
+ else:
+ if valeur.find('e') != -1:
+ # Notation scientifique ?
+ try :
+ r=eval(valeur)
+ return valeur
+ except :
+ return None
+ else :
+ return valeur+'.'
+ else:
+ return valeur
+
import Accas
treeitem = SIMPTreeItem
objet = Accas.MCSIMP
-
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
- from builtins import object
+ from builtins import str
+ from builtins import range
+ from builtins import object
except : pass
import os, sys, types, re
class configBase(object):
- #-------------------------------
- def __init__(self,appliEficas,repIni):
- #-------------------------------
-
- # Classe de base permettant de lire, afficher
- # et sauvegarder les fichiers utilisateurs
- # On a deux directories : la directory generale (Repertoire d install + Nom du code
- # Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
- # et la directorie de l utilisateur
- # HOME/.Eficas_Openturns
- # Le fichier prefs.py va etre lu dans la directory generale
- # puis surcharge eventuellement par celui contenu dans ${PREFS_CATA_$CODE}
- # par celui de l utilisateur
- # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
- # dans le fichier general sinon
-
- self.appliEficas = appliEficas
- self.code = appliEficas.code
- self.salome = appliEficas.salome
- if self.salome : self.name="editeur_salome.ini"
- else : self.name="editeur.ini"
- self.rep_mat = None
- self.repIni = repIni
-
- if self.code == None : self.code=''
- #if sys.platform[0:5]=="linux" :
- #self.rep_user = os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
- self.rep_user = os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
- #else :
- # self.rep_user = os.path.join('C:/','.config/Eficas',self.code)
-
-
- self.setValeursParDefaut()
-
- if self.code != '' :
- self.lectureFichierIniStandard()
- self.lectureFichierIniIntegrateur()
- self.lectureFichierIniUtilisateur()
-
- if self.boutonDsMenuBar:
- self.closeAutreCommande = True
- self.closeFrameRechercheCommande = True
-
- #Particularite des schemas MAP
- if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
-
- #if self.appliEficas: self.parent=appliEficas.top
- #else: self.parent=None
-
- if not os.path.isdir(self.savedir) :
- if sys.platform[0:5]=="linux" :
- #self.savedir=os.environ['HOME']
- self.savedir=os.path.expanduser("~")
- else:
- self.savedir='C:/'
-
-
-
- def setValeursParDefaut(self):
- #-----------------------------
-
- # Valeurs par defaut
- if not os.path.isdir(self.rep_user) : os.makedirs(self.rep_user)
- self.path_doc = os.path.abspath(os.path.join(self.repIni,'..','Doc'))
- self.exec_acrobat = 'acroread'
- nomDir="Eficas_"+self.code
- #if sys.platform[0:5]=="linux" :
- #self.savedir = os.path.abspath(os.path.join(os.environ['HOME'],nomDir))
- self.savedir=os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
- #else:
- # self.savedir = os.path.abspath('C:/')
- self.modeNouvCommande='initial'
- self.affiche="alpha"
- self.closeAutreCommande = False
- self.closeFrameRechercheCommande = False
- self.closeFrameRechercheCommandeSurPageDesCommandes = False
- self.closeEntete = False
- self.closeArbre = False
- self.demandeLangue=False
- self.suiteTelemac=False
- self.nombreDeBoutonParLigne=0
- self.translatorFichier=None
- self.dicoImages= {}
- self.dicoIcones= {}
- self.afficheCommandesPliees = True
- self.afficheFirstPlies = False
- self.simpleClic = False
- self.afficheOptionnelVide=False
- self.afficheListesPliees=True
- self.boutonDsMenuBar=False
- self.ficIcones=None
- self.repIcones=None
- self.differencieSiDefaut=False
- self.typeDeCata='Python'
- self.closeParenthese=False
- self.closeOptionnel=False
- self.afficheFactOptionnel=False
- self.enleverActionStructures=False
- self.enleverPoubellePourCommande=False
- self.enleverParametres=False
- self.enleverSupprimer=False
- self.ajoutExecution=False
- self.utilParExtensions=[]
- self.rendVisiblesLesCaches=False
- self.pasDeMCOptionnels=False
-
- self.dumpXSD=False
- self.withXSD=False
- self.afficheIhm=True
-
-
-
-
- #--------------------------------------
- def lectureFichierIniStandard(self):
- #--------------------------------------
-
- name='prefs_'+self.appliEficas.code
- try :
- prefsCode=__import__(name)
- except :
- self.catalogues=[]
- print ('pas de fichier de prefs')
- return
- for k in dir(prefsCode):
- if (k[0:1] != "__" and k[-1:-2] !='__'):
- valeur=getattr(prefsCode,k)
- setattr(self,k,valeur)
-
-
-
- #--------------------------------------
- def lectureFichierIniIntegrateur(self):
- #--------------------------------------
- # Verifie l'existence du fichier "standard"
- # appelle la lecture de ce fichier
- clef="PREFS_CATA_"+self.code
- try :
- repIntegrateur=os.path.abspath(os.environ[clef])
- except :
- return
-
- fic_ini_integrateur=os.path.join(repIntegrateur,self.name)
- if not os.path.isfile(fic_ini_integrateur): return
- txt = read_file(fic_ini_integrateur)
- d=locals()
- try:
- exec(txt, d)
- except :
- try :
- from PyQt5.QtWidgets import QMessageBox
- QMessageBox.critical( None, tr("Import du fichier de Configuration"),
- tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
- except :
- print("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
- return
- self.labels_eficas.append('rep_aide')
- for k in self.labels_eficas :
- try :
- setattr(self,k,d[k])
- except :
- pass
- #Glut pour les repertoires materiaux
- #et pour la doc
- for k in d :
- if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
- setattr(self,k,d[k])
-
-
- #--------------------------------------
- def lectureFichierIniUtilisateur(self):
- #--------------------------------------
- # Surcharge les parametres standards par les parametres utilisateur s'ils existent
- self.fic_ini_utilisateur = os.path.join(self.rep_user,self.name)
- if not os.path.isfile(self.fic_ini_utilisateur): return
-
- txt = read_file(self.fic_ini_utilisateur)
- d=locals()
- try:
- exec(txt, d)
- except :
- l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
- try :
- from PyQt5.QtWidgets import QMessageBox
- QMessageBox.critical( None, tr("Import du fichier de Configuration"),
- tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
- except :
- print ("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
- for k in self.labels_user :
- try :
- setattr(self,k,d[k])
- except :
- pass
- for k in d :
- if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
- setattr(self,k,d[k])
-
- #--------------------------------------
- def saveParams(self):
- #--------------------------------------
- # sauvegarde
- # les nouveaux parametres dans le fichier de configuration utilisateur
- #
- texte=""
- for clef in self.labels_user :
- if hasattr(self,clef):
- valeur=getattr(self,clef)
- texte= texte + clef+" = " + repr(valeur) +"\n"
- #Glut pour les repertoires materiaux
- #et pour la doc
- for k in dir(self):
- if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
- valeur=getattr(self,k)
- texte= texte + k+" = " + repr(valeur) +"\n"
-
- f=open(self.fic_ini_utilisateur,'w+')
- f.write(texte)
- f.close()
+ #-------------------------------
+ def __init__(self,appliEficas,repIni):
+ #-------------------------------
+
+ # Classe de base permettant de lire, afficher
+ # et sauvegarder les fichiers utilisateurs
+ # On a deux directories : la directory generale (Repertoire d install + Nom du code
+ # Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
+ # et la directorie de l utilisateur
+ # HOME/.Eficas_Openturns
+ # Le fichier prefs.py va etre lu dans la directory generale
+ # puis surcharge eventuellement par celui contenu dans ${PREFS_CATA_$CODE}
+ # par celui de l utilisateur
+ # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
+ # dans le fichier general sinon
+
+ self.appliEficas = appliEficas
+ self.code = appliEficas.code
+ self.salome = appliEficas.salome
+ if self.salome : self.name="editeur_salome.ini"
+ else : self.name="editeur.ini"
+ self.rep_mat = None
+ self.repIni = repIni
+
+ if self.code == None : self.code=''
+ #if sys.platform[0:5]=="linux" :
+ #self.rep_user = os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
+ self.rep_user = os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
+ #else :
+ # self.rep_user = os.path.join('C:/','.config/Eficas',self.code)
+
+
+ self.setValeursParDefaut()
+
+ if self.code != '' :
+ self.lectureFichierIniStandard()
+ self.lectureFichierIniIntegrateur()
+ self.lectureFichierIniUtilisateur()
+
+ if self.boutonDsMenuBar:
+ self.closeAutreCommande = True
+ self.closeFrameRechercheCommande = True
+
+ #Particularite des schemas MAP
+ if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
+
+ #if self.appliEficas: self.parent=appliEficas.top
+ #else: self.parent=None
+
+ if not os.path.isdir(self.savedir) :
+ if sys.platform[0:5]=="linux" :
+ #self.savedir=os.environ['HOME']
+ self.savedir=os.path.expanduser("~")
+ else:
+ self.savedir='C:/'
+
+
+
+ def setValeursParDefaut(self):
+ #-----------------------------
+
+ # Valeurs par defaut
+ if not os.path.isdir(self.rep_user) : os.makedirs(self.rep_user)
+ self.path_doc = os.path.abspath(os.path.join(self.repIni,'..','Doc'))
+ self.exec_acrobat = 'acroread'
+ nomDir="Eficas_"+self.code
+ #if sys.platform[0:5]=="linux" :
+ #self.savedir = os.path.abspath(os.path.join(os.environ['HOME'],nomDir))
+ self.savedir=os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
+ #else:
+ # self.savedir = os.path.abspath('C:/')
+ self.modeNouvCommande='initial'
+ self.affiche="alpha"
+ self.closeAutreCommande = False
+ self.closeFrameRechercheCommande = False
+ self.closeFrameRechercheCommandeSurPageDesCommandes = False
+ self.closeEntete = False
+ self.closeArbre = False
+ self.demandeLangue=False
+ self.suiteTelemac=False
+ self.nombreDeBoutonParLigne=0
+ self.translatorFichier=None
+ self.dicoImages= {}
+ self.dicoIcones= {}
+ self.afficheCommandesPliees = True
+ self.afficheFirstPlies = False
+ self.simpleClic = False
+ self.afficheOptionnelVide=False
+ self.afficheListesPliees=True
+ self.boutonDsMenuBar=False
+ self.ficIcones=None
+ self.repIcones=None
+ self.differencieSiDefaut=False
+ self.typeDeCata='Python'
+ self.closeParenthese=False
+ self.closeOptionnel=False
+ self.afficheFactOptionnel=False
+ self.enleverActionStructures=False
+ self.enleverPoubellePourCommande=False
+ self.enleverParametres=False
+ self.enleverSupprimer=False
+ self.ajoutExecution=False
+ self.utilParExtensions=[]
+ self.rendVisiblesLesCaches=False
+ self.pasDeMCOptionnels=False
+
+ self.dumpXSD=False
+ self.withXSD=False
+ self.afficheIhm=True
+
+
+
+
+ #--------------------------------------
+ def lectureFichierIniStandard(self):
+ #--------------------------------------
+
+ name='prefs_'+self.appliEficas.code
+ try :
+ prefsCode=__import__(name)
+ except :
+ self.catalogues=[]
+ print ('pas de fichier de prefs')
+ return
+ for k in dir(prefsCode):
+ if (k[0:1] != "__" and k[-1:-2] !='__'):
+ valeur=getattr(prefsCode,k)
+ setattr(self,k,valeur)
+
+
+
+ #--------------------------------------
+ def lectureFichierIniIntegrateur(self):
+ #--------------------------------------
+ # Verifie l'existence du fichier "standard"
+ # appelle la lecture de ce fichier
+ clef="PREFS_CATA_"+self.code
+ try :
+ repIntegrateur=os.path.abspath(os.environ[clef])
+ except :
+ return
+
+ fic_ini_integrateur=os.path.join(repIntegrateur,self.name)
+ if not os.path.isfile(fic_ini_integrateur): return
+ txt = read_file(fic_ini_integrateur)
+ d=locals()
+ try:
+ exec(txt, d)
+ except :
+ try :
+ from PyQt5.QtWidgets import QMessageBox
+ QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
+ except :
+ print("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
+ return
+ self.labels_eficas.append('rep_aide')
+ for k in self.labels_eficas :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+ #Glut pour les repertoires materiaux
+ #et pour la doc
+ for k in d :
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ setattr(self,k,d[k])
+
+
+ #--------------------------------------
+ def lectureFichierIniUtilisateur(self):
+ #--------------------------------------
+ # Surcharge les parametres standards par les parametres utilisateur s'ils existent
+ self.fic_ini_utilisateur = os.path.join(self.rep_user,self.name)
+ if not os.path.isfile(self.fic_ini_utilisateur): return
+
+ txt = read_file(self.fic_ini_utilisateur)
+ d=locals()
+ try:
+ exec(txt, d)
+ except :
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ try :
+ from PyQt5.QtWidgets import QMessageBox
+ QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
+ except :
+ print ("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
+ for k in self.labels_user :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+ for k in d :
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ setattr(self,k,d[k])
+
+ #--------------------------------------
+ def saveParams(self):
+ #--------------------------------------
+ # sauvegarde
+ # les nouveaux parametres dans le fichier de configuration utilisateur
+ #
+ texte=""
+ for clef in self.labels_user :
+ if hasattr(self,clef):
+ valeur=getattr(self,clef)
+ texte= texte + clef+" = " + repr(valeur) +"\n"
+ #Glut pour les repertoires materiaux
+ #et pour la doc
+ for k in dir(self):
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ valeur=getattr(self,k)
+ texte= texte + k+" = " + repr(valeur) +"\n"
+
+ f=open(self.fic_ini_utilisateur,'w+')
+ f.write(texte)
+ f.close()
#
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,sys,os, re
from desBaseWidget import Ui_baseWidget
from InterfaceQT4.monViewTexte import ViewText
-from monWidgetCreeParam import MonWidgetCreeParam
+from monWidgetCreeParam import MonWidgetCreeParam
DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
debug = False
-
+
from InterfaceQT4.editorSsIhm import JDCEditorSsIhm
JDCEditorSsIhm. __init__ (self,appliEficas,fichier, jdc,units,include)
if self.jdc:
- comploader.chargerComposants()
- self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+ comploader.chargerComposants()
+ self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
# Particularites IHM : met la fenetre a jour
if self.maConfiguration.closeOptionnel : self.fermeOptionnel()
if self.maConfiguration.boutonDsMenuBar : self.appliEficas.remplitIconesCommandes()
-
+
self.formatFichierOut = self.appliEficas.formatFichierOut
self.formatFichierIn = self.appliEficas.formatFichierIn
self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
if self.appliEficas.readercata.demandeCatalogue==True :
- nomFichierTranslation='translatorFichier'+'_'+str(self.appliEficas.readercata.labelCode)
- if hasattr(self.appliEficas.maConfiguration,nomFichierTranslation) :
- translatorFichier=getattr(self.appliEficas.maConfiguration,nomFichierTranslation)
- from Extensions import localisation
- localisation.localise(None,self.appliEficas.langue,translatorFichier=translatorFichier)
+ nomFichierTranslation='translatorFichier'+'_'+str(self.appliEficas.readercata.labelCode)
+ if hasattr(self.appliEficas.maConfiguration,nomFichierTranslation) :
+ translatorFichier=getattr(self.appliEficas.maConfiguration,nomFichierTranslation)
+ from Extensions import localisation
+ localisation.localise(None,self.appliEficas.langue,translatorFichier=translatorFichier)
if self.jdc_item and self.appliEficas.ssIhm==False :
# saveFileLegerAs
# ---------------------------------------------
-# Methodes Surchargees
+# Methodes Surchargees
# ---------------------------------------------
#-----------------------------------------------------------------------#
#--------------------------------#
def informe(self,titre,txt,critique=True):
#--------------------------------#
- if critique :
- self.afficheInfos(tr(txt),Qt.red)
- QMessageBox.critical( self, tr(titre), tr(txt))
- else :
- QMessageBox.warning( self, tr(titre),tr(txt))
+ if critique :
+ self.afficheInfos(tr(txt),Qt.red)
+ QMessageBox.critical( self, tr(titre), tr(txt))
+ else :
+ QMessageBox.warning( self, tr(titre),tr(txt))
#--------------------------------#
def ajoutCommentaire(self):
#--------------------------------#
if self.tree.selectedItems()==[] :
- QMessageBox.warning( self, tr("Pas de noeud selectionne"),tr("Selectionnez un Noeud \nLe commentaire sera place apres le noeud selectionne"))
- return
+ QMessageBox.warning( self, tr("Pas de noeud selectionne"),tr("Selectionnez un Noeud \nLe commentaire sera place apres le noeud selectionne"))
+ return
noeudAvantCommentaire=self.tree.selectedItems()[0]
- if noeudAvantCommentaire ==self.tree.racine :
+ if noeudAvantCommentaire ==self.tree.racine :
self.tree.racine.appendChild("COMMENTAIRE",pos=0)
return
noeudAvantCommentaire.addComment(True)
self.monExe.closeWriteChannel()
self.w.exec_()
try:
- commande="rm "+ nomFichier
- os.system(commande)
+ commande="rm "+ nomFichier
+ os.system(commande)
except :
- pass
+ pass
def readFromStdErr(self):
a=self.monExe.readAllStandardError()
a=self.monExe.readAllStandardOutput()
self.w.view.append(str(a.data()))
-
+
#-----------------------#
def gestionParam(self):
#-----------------------#
#----------------------------------------------#
if couleur=='red' : couleur = Qt.red
if self.sb:
- mapalette=self.sb.palette()
- mapalette.setColor( QPalette.WindowText, couleur )
- self.sb.setPalette( mapalette );
- self.sb.showMessage(message,4000)
- self.couleur=couleur
+ mapalette=self.sb.palette()
+ mapalette.setColor( QPalette.WindowText, couleur )
+ self.sb.setPalette( mapalette );
+ self.sb.showMessage(message,4000)
+ self.couleur=couleur
#------------------------------#
def afficheAlerte(self,titre,message):
#---------------------------------------#
def chercheNoeudSelectionne(self,copie=1):
#---------------------------------------#
- """
- appele par Cut et Copy pour positionner self.node_selected
- """
- self.node_selected=[]
- if len(self.tree.selectedItems()) == 0 : return
- self.node_selected=self.tree.selectedItems()
+ """
+ appele par Cut et Copy pour positionner self.node_selected
+ """
+ self.node_selected=[]
+ if len(self.tree.selectedItems()) == 0 : return
+ self.node_selected=self.tree.selectedItems()
#---------------------#
def handleSupprimer(self):
#---------------------#
- self.chercheNoeudSelectionne()
- if len(self.node_selected) == 0 : return
- self.QWParent.noeud_a_editer = []
- if self.node_selected[0]==self.tree.racine: return
- if len(self.node_selected) == 1 : self.node_selected[0].delete()
- else : self.node_selected[0].deleteMultiple(self.node_selected)
+ self.chercheNoeudSelectionne()
+ if len(self.node_selected) == 0 : return
+ self.QWParent.noeud_a_editer = []
+ if self.node_selected[0]==self.tree.racine: return
+ if len(self.node_selected) == 1 : self.node_selected[0].delete()
+ else : self.node_selected[0].deleteMultiple(self.node_selected)
#---------------------#
def handleRechercher(self):
#---------------------#
- from .monRecherche import DRecherche
- monRechercheDialg=DRecherche(parent=self,fl=0)
- monRechercheDialg.show()
+ from .monRecherche import DRecherche
+ monRechercheDialg=DRecherche(parent=self,fl=0)
+ monRechercheDialg.show()
#--------------------------------#
def handleRechercherDsCatalogue(self):
#-----------------------------#
- from .monRechercheCatalogue import DRechercheCatalogue
- monRechercheDialg=DRechercheCatalogue(self.QWParent,self)
- monRechercheDialg.show()
+ from .monRechercheCatalogue import DRechercheCatalogue
+ monRechercheDialg=DRechercheCatalogue(self.QWParent,self)
+ monRechercheDialg.show()
#---------------------#
def handleDeplier(self):
#---------------------#
- if self.tree == None : return
- #self.tree.collapseAll()
- if self.deplier :
- #print "je plie"
- self.tree.expandItem(self.tree.topLevelItem(0))
- self.deplier = False
- if self.fenetreCentraleAffichee != None :
- if hasattr(self.fenetreCentraleAffichee.node,'plieToutEtReaffiche'):
- self.fenetreCentraleAffichee.node.plieToutEtReaffiche()
- else:
- #print "je deplie"
- self.tree.expandItem(self.tree.topLevelItem(0))
- self.deplier = True
- if self.fenetreCentraleAffichee != None :
- if hasattr(self.fenetreCentraleAffichee.node,'deplieToutEtReaffiche'):
- self.fenetreCentraleAffichee.node.deplieToutEtReaffiche()
+ if self.tree == None : return
+ #self.tree.collapseAll()
+ if self.deplier :
+ #print "je plie"
+ self.tree.expandItem(self.tree.topLevelItem(0))
+ self.deplier = False
+ if self.fenetreCentraleAffichee != None :
+ if hasattr(self.fenetreCentraleAffichee.node,'plieToutEtReaffiche'):
+ self.fenetreCentraleAffichee.node.plieToutEtReaffiche()
+ else:
+ #print "je deplie"
+ self.tree.expandItem(self.tree.topLevelItem(0))
+ self.deplier = True
+ if self.fenetreCentraleAffichee != None :
+ if hasattr(self.fenetreCentraleAffichee.node,'deplieToutEtReaffiche'):
+ self.fenetreCentraleAffichee.node.deplieToutEtReaffiche()
#---------------------#
def handleEditCut(self):
#---------------------#
- """
- Stocke dans Eficas.noeud_a_editer le noeud a couper
- """
- #print "handleEditCut"
- self.chercheNoeudSelectionne()
- self.QWParent.edit="couper"
- self.QWParent.noeud_a_editer = self.node_selected
+ """
+ Stocke dans Eficas.noeud_a_editer le noeud a couper
+ """
+ #print "handleEditCut"
+ self.chercheNoeudSelectionne()
+ self.QWParent.edit="couper"
+ self.QWParent.noeud_a_editer = self.node_selected
#-----------------------#
def handleEditCopy(self):
#-----------------------#
- """
- Stocke dans Eficas.noeud_a_editer le noeud a copier
- """
- self.chercheNoeudSelectionne()
- if len(self.node_selected) == 0 : return
- if len(self.node_selected) == 1 : self.node_selected[0].updateNodeLabelInBlue()
- else : self.node_selected[0].updatePlusieursNodeLabelInBlue(self.node_selected)
- self.QWParent.edit="copier"
- self.QWParent.noeud_a_editer = self.node_selected
+ """
+ Stocke dans Eficas.noeud_a_editer le noeud a copier
+ """
+ self.chercheNoeudSelectionne()
+ if len(self.node_selected) == 0 : return
+ if len(self.node_selected) == 1 : self.node_selected[0].updateNodeLabelInBlue()
+ else : self.node_selected[0].updatePlusieursNodeLabelInBlue(self.node_selected)
+ self.QWParent.edit="copier"
+ self.QWParent.noeud_a_editer = self.node_selected
#------------------------#
def handleEditPaste(self):
#------------------------#
- """
- Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
- Ne permet que la copie d'objets de type Commande ou MCF
- """
- self.chercheNoeudSelectionne()
- if (not(hasattr(self.QWParent,'noeud_a_editer'))) or len(self.QWParent.noeud_a_editer)==0:
- QMessageBox.information( self,
- tr("Copie impossible"),
- tr("Veuillez selectionner un objet a copier"))
- return
- if len(self.node_selected) != 1 :
- QMessageBox.information( self,
- tr("Copie impossible"),
- tr("Veuillez selectionner un seul objet : la copie se fera apres le noeud selectionne"))
- return
- noeudOuColler=self.node_selected[0]
-
- if len(self.QWParent.noeud_a_editer)!=1:
- #self.handleEditPasteMultiple()
- QMessageBox.information( self, tr("Copie impossible"), tr("Aucun Objet n a ete copie ou coupe"))
- return
-
- noeudACopier=self.QWParent.noeud_a_editer[0]
-
- if (self.QWParent.edit != "couper"):
- #print (noeudOuColler.item.parent.getChild(noeudOuColler.item.nom))
- try:
- if noeudOuColler == self.tree.racine :
- child=noeudOuColler.doPastePremier(noeudACopier)
- else :
- child=noeudACopier.doPaste(noeudOuColler,'after')
-
- if child==None or child==0:
- QMessageBox.critical( self,tr( "Copie refusee"),tr('Eficas n a pas reussi a copier l objet'))
- self.message = ''
- self.afficheInfos("Copie refusee",Qt.red)
- if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
- try :
- nom=noeudACopier.item.sd.nom
- child.item.nommeSd(nom)
- except :
- pass
- return
- self.initModif()
- child.select()
- except :
- traceback.print_exc()
- QMessageBox.critical( self,tr( "Copie refusee"),tr('Copie refusee pour ce type d objet'))
- self.message = ''
- self.afficheInfos("Copie refusee",Qt.red)
- return
-
- # il faut declarer le JDCDisplay_courant modifie
- # suppression eventuelle du noeud selectionne
- # si possible on renomme l objet comme le noeud couper
-
- if (self.QWParent.edit == "couper"):
- if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
- QMessageBox.critical( self, tr("Deplacement refuse"),tr('Deplacement refuse entre 2 fichiers. Seule la copie est autorisee '))
-
- #if 1:
- try :
- # indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
- indexNoeudACopier=self.getTreeIndex(noeudACopier)
- noeudACopier.treeParent.item.deplaceEntite(indexNoeudACopier,indexNoeudOuColler,pos)
- noeudACopier.treeParent.buildChildren()
-
- #else:
- except:
- pass
- self.QWParent.noeud_a_editer=[]
+ """
+ Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
+ Ne permet que la copie d'objets de type Commande ou MCF
+ """
+ self.chercheNoeudSelectionne()
+ if (not(hasattr(self.QWParent,'noeud_a_editer'))) or len(self.QWParent.noeud_a_editer)==0:
+ QMessageBox.information( self,
+ tr("Copie impossible"),
+ tr("Veuillez selectionner un objet a copier"))
+ return
+ if len(self.node_selected) != 1 :
+ QMessageBox.information( self,
+ tr("Copie impossible"),
+ tr("Veuillez selectionner un seul objet : la copie se fera apres le noeud selectionne"))
+ return
+ noeudOuColler=self.node_selected[0]
- # on rend la copie a nouveau possible en liberant le flag edit
- self.QWParent.edit="copier"
- noeudACopier.select()
+ if len(self.QWParent.noeud_a_editer)!=1:
+ #self.handleEditPasteMultiple()
+ QMessageBox.information( self, tr("Copie impossible"), tr("Aucun Objet n a ete copie ou coupe"))
+ return
+
+ noeudACopier=self.QWParent.noeud_a_editer[0]
+
+ if (self.QWParent.edit != "couper"):
+ #print (noeudOuColler.item.parent.getChild(noeudOuColler.item.nom))
+ try:
+ if noeudOuColler == self.tree.racine :
+ child=noeudOuColler.doPastePremier(noeudACopier)
+ else :
+ child=noeudACopier.doPaste(noeudOuColler,'after')
+
+ if child==None or child==0:
+ QMessageBox.critical( self,tr( "Copie refusee"),tr('Eficas n a pas reussi a copier l objet'))
+ self.message = ''
+ self.afficheInfos("Copie refusee",Qt.red)
+ if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
+ try :
+ nom=noeudACopier.item.sd.nom
+ child.item.nommeSd(nom)
+ except :
+ pass
+ return
+ self.initModif()
+ child.select()
+ except :
+ traceback.print_exc()
+ QMessageBox.critical( self,tr( "Copie refusee"),tr('Copie refusee pour ce type d objet'))
+ self.message = ''
+ self.afficheInfos("Copie refusee",Qt.red)
+ return
+
+ # il faut declarer le JDCDisplay_courant modifie
+ # suppression eventuelle du noeud selectionne
+ # si possible on renomme l objet comme le noeud couper
+
+ if (self.QWParent.edit == "couper"):
+ if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
+ QMessageBox.critical( self, tr("Deplacement refuse"),tr('Deplacement refuse entre 2 fichiers. Seule la copie est autorisee '))
+
+ #if 1:
+ try :
+ # indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
+ indexNoeudACopier=self.getTreeIndex(noeudACopier)
+ noeudACopier.treeParent.item.deplaceEntite(indexNoeudACopier,indexNoeudOuColler,pos)
+ noeudACopier.treeParent.buildChildren()
+
+ #else:
+ except:
+ pass
+ self.QWParent.noeud_a_editer=[]
+
+ # on rend la copie a nouveau possible en liberant le flag edit
+ self.QWParent.edit="copier"
+ noeudACopier.select()
#----------------------------------#
def handleDeplaceMultiple(self):
#----------------------------------#
- pass
+ pass
#----------------------------------#
def handleEditPasteMultiple(self):
# On ne garde que les niveaux "Etape"
# On insere dans l'ordre du JDC
- listeNoeudsACouper=[]
- listeIndex=[]
- listeChild=[]
- listeItem=[]
- from InterfaceQT4 import compojdc
- noeudOuColler=self.node_selected[0]
- if not (isinstance(noeudOuColler.treeParent, compojdc.Node)):
- QMessageBox.information( self,
- tr("Copie impossible a cet endroit",),
- tr("Veuillez selectionner une commande, un parametre, un commentaire ou une macro"))
- return
- indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
-
- for noeud in self.QWParent.noeud_a_editer :
- if not (isinstance(noeud.treeParent, compojdc.Node)): continue
- indexInTree=noeud.treeParent.children.index(noeud)
- indice = 0
+ listeNoeudsACouper=[]
+ listeIndex=[]
+ listeChild=[]
+ listeItem=[]
+ from InterfaceQT4 import compojdc
+ noeudOuColler=self.node_selected[0]
+ if not (isinstance(noeudOuColler.treeParent, compojdc.Node)):
+ QMessageBox.information( self,
+ tr("Copie impossible a cet endroit",),
+ tr("Veuillez selectionner une commande, un parametre, un commentaire ou une macro"))
+ return
+ indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
+
+ for noeud in self.QWParent.noeud_a_editer :
+ if not (isinstance(noeud.treeParent, compojdc.Node)): continue
+ indexInTree=noeud.treeParent.children.index(noeud)
+ indice = 0
+ for index in listeIndex:
+ if index < indexInTree : indice = indice +1
+ listeIndex.insert(indice, indexInTree)
+ listeNoeudsACouper.insert(indice, noeud)
+
+ noeudJdc=noeudOuColler.treeParent
+ dejaCrees=0
+ # on les cree a l'envers parcequ'on ajoute a NoeudOuColler
+ listeIndex.reverse()
+ for index in listeIndex:
+ indexTravail=index
+ if indexNoeudOuColler < index:
+ indexTravail=indexTravail+dejaCrees
+ noeudOuColler=noeudJdc.children[indexNoeudOuColler]
+ noeud=noeudJdc.children[indexTravail]
+ child=noeud.doPaste(noeudOuColler)
+ listeChild.append(child)
+ dejaCrees=dejaCrees+1
+
+ self.QWParent.noeud_a_editer = []
+ for i in range(len(listeIndex)):
+ noeud=noeudJdc.children[indexNoeudOuColler+1+i]
+ self.QWParent.noeud_a_editer.append(noeud)
+
+ listeASupprimer=[]
+ if self.QWParent.edit !="couper" : return
+
for index in listeIndex:
- if index < indexInTree : indice = indice +1
- listeIndex.insert(indice, indexInTree)
- listeNoeudsACouper.insert(indice, noeud)
-
- noeudJdc=noeudOuColler.treeParent
- dejaCrees=0
- # on les cree a l'envers parcequ'on ajoute a NoeudOuColler
- listeIndex.reverse()
- for index in listeIndex:
- indexTravail=index
- if indexNoeudOuColler < index:
- indexTravail=indexTravail+dejaCrees
- noeudOuColler=noeudJdc.children[indexNoeudOuColler]
- noeud=noeudJdc.children[indexTravail]
- child=noeud.doPaste(noeudOuColler)
- listeChild.append(child)
- dejaCrees=dejaCrees+1
-
- self.QWParent.noeud_a_editer = []
- for i in range(len(listeIndex)):
- noeud=noeudJdc.children[indexNoeudOuColler+1+i]
- self.QWParent.noeud_a_editer.append(noeud)
-
- listeASupprimer=[]
- if self.QWParent.edit !="couper" : return
-
- for index in listeIndex:
- indexTravail=index
- if indexNoeudOuColler < index:
- indexTravail=indexTravail+(len(listeIndex))
- noeud=noeudJdc.children[indexTravail]
-
- listeItem.append(noeud.item)
- listeASupprimer.append(noeud)
-
- for i in range(len(listeChild)):
- self.tree.item.suppItem(listeItem[i])
- listeChild[i].item.update(listeItem[i])
-
- self.QWParent.noeud_a_editer = []
+ indexTravail=index
+ if indexNoeudOuColler < index:
+ indexTravail=indexTravail+(len(listeIndex))
+ noeud=noeudJdc.children[indexTravail]
+
+ listeItem.append(noeud.item)
+ listeASupprimer.append(noeud)
+
+ for i in range(len(listeChild)):
+ self.tree.item.suppItem(listeItem[i])
+ listeChild[i].item.update(listeItem[i])
+
+ self.QWParent.noeud_a_editer = []
#----------------------------------#
def handleAjoutEtape(self,nomEtape):
#----------------------------------#
- self.chercheNoeudSelectionne()
- if len(self.node_selected) == 0 or self.node_selected[0] == self.tree.racine :
- nodeOuAjouter=self.tree.racine
- nouveau=nodeOuAjouter.appendChild(nomEtape,pos='first')
- else :
- nodeOuAjouter=self.node_selected[0]
- if nodeOuAjouter != self.tree.racine :
- while nodeOuAjouter.treeParent != self.tree.racine:
- nodeOuAjouter=nodeOuAjouter.treeParent
- nouveau=nodeOuAjouter.appendBrother(nomEtape)
- try :
- self.node_selected[0].setSelected(False)
- except : pass
- nouveau.setSelected(True)
- nouveau.affichePanneau()
+ self.chercheNoeudSelectionne()
+ if len(self.node_selected) == 0 or self.node_selected[0] == self.tree.racine :
+ nodeOuAjouter=self.tree.racine
+ nouveau=nodeOuAjouter.appendChild(nomEtape,pos='first')
+ else :
+ nodeOuAjouter=self.node_selected[0]
+ if nodeOuAjouter != self.tree.racine :
+ while nodeOuAjouter.treeParent != self.tree.racine:
+ nodeOuAjouter=nodeOuAjouter.treeParent
+ nouveau=nodeOuAjouter.appendBrother(nomEtape)
+ try :
+ self.node_selected[0].setSelected(False)
+ except : pass
+ nouveau.setSelected(True)
+ nouveau.affichePanneau()
#---------------------------#
def getFileVariable(self) :
#---------------------------#
- titre = tr("Choix d'un fichier XML")
- texte = tr("Le fichier contient une commande MODEL\n")
- texte = texte+tr('Donnez le nom du fichier XML qui contient la description des variables')
- QMessageBox.information( self, titre,tr(texte))
+ titre = tr("Choix d'un fichier XML")
+ texte = tr("Le fichier contient une commande MODEL\n")
+ texte = texte+tr('Donnez le nom du fichier XML qui contient la description des variables')
+ QMessageBox.information( self, titre,tr(texte))
- fichier = QFileDialog.getOpenFileName(self.appliEficas,
- tr('Ouvrir Fichier'),
- self.appliEficas.maConfiguration.savedir,
- tr('Wrapper Files (*.xml);;''All Files (*)'))
- return fichier
+ fichier = QFileDialog.getOpenFileName(self.appliEficas,
+ tr('Ouvrir Fichier'),
+ self.appliEficas.maConfiguration.savedir,
+ tr('Wrapper Files (*.xml);;''All Files (*)'))
+ return fichier
#------------#
def run(self):
#------------#
- fonction="run"+self.code
- if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
+ fonction="run"+self.code
+ if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
#------------#
def saveRun(self):
#------------#
- fonction="saveRun"+self.code
- if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
+ fonction="saveRun"+self.code
+ if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
# ---------------------------------------------
-# Methodes Non Crees dans ssIHM
+# Methodes Non Crees dans ssIHM
# ---------------------------------------------
#---------------#
def runVP(self):
#---------------#
- texte=self.getTextJDC("MAPVp",pourRun=1)
- print (texte)
+ texte=self.getTextJDC("MAPVp",pourRun=1)
+ print (texte)
#---------------#
def runMAP(self):
#---------------#
- if not(self.jdc.isValid()):
- QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution MAP"))
- return
- if len(self.jdc.etapes) != 1 :
- QMessageBox.critical( self, tr("Execution impossible "),tr("le JDC doit contenir un et un seul composant"))
- return
- if self.modified or self.fichier==None :
- self.fichierMapInput = self.__generateTempFilename(prefix = "map_run", suffix = ".map")
- texte=self.getTextJDC("MAP")
- self.writeFile( self.fichierMapInput, txt = texte)
- else :
- self.fichierMapInput=self.fichier
- composant=self.jdc.etapes[0].nom.lower()[0:-5]
-
-
- # :TRICKY: to determine if a component requires SALOME, loads the component from Eficas catalog
- # then instantiate corresponding class and call getUseSalome() method
- try:
- from mapengine.spec import factory
- mapComponent = factory.new(composant)[0]
-
- command = "map"
- if mapComponent.getUseSalome():
- command += " -r sappli"
- textePython=(command + " run -n "+composant +" -i "+self.fichierMapInput)
-
- #textePython="ls -l"
- self._viewTextExecute( textePython,"map_run",".sh")
- #try:
- # commande="rm "+self.fichierMapInput
- # os.system(commande)
- #except :
- # pass
- except Exception as e:
- print((traceback.print_exc()))
+ if not(self.jdc.isValid()):
+ QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution MAP"))
+ return
+ if len(self.jdc.etapes) != 1 :
+ QMessageBox.critical( self, tr("Execution impossible "),tr("le JDC doit contenir un et un seul composant"))
+ return
+ if self.modified or self.fichier==None :
+ self.fichierMapInput = self.__generateTempFilename(prefix = "map_run", suffix = ".map")
+ texte=self.getTextJDC("MAP")
+ self.writeFile( self.fichierMapInput, txt = texte)
+ else :
+ self.fichierMapInput=self.fichier
+ composant=self.jdc.etapes[0].nom.lower()[0:-5]
+
+
+ # :TRICKY: to determine if a component requires SALOME, loads the component from Eficas catalog
+ # then instantiate corresponding class and call getUseSalome() method
+ try:
+ from mapengine.spec import factory
+ mapComponent = factory.new(composant)[0]
+
+ command = "map"
+ if mapComponent.getUseSalome():
+ command += " -r sappli"
+ textePython=(command + " run -n "+composant +" -i "+self.fichierMapInput)
+
+ #textePython="ls -l"
+ self._viewTextExecute( textePython,"map_run",".sh")
+ #try:
+ # commande="rm "+self.fichierMapInput
+ # os.system(commande)
+ #except :
+ # pass
+ except Exception as e:
+ print((traceback.print_exc()))
#-------------------#
def runZCRACKS(self):
#-------------------#
- if not(self.jdc.isValid()):
- QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
- return
- if self.modified or self.fichier==None :
- #if 1:
- self.fichierZcracksInput = self.__generateTempFilename(prefix = "zcracks_run", suffix = ".z7p")
- texte=self.getTextJDC("ZCRACKS",pourRun=1)
- self.writeFile( self.fichierZcracksInput, txt = texte)
- else :
- self.fichierZcracksInput=self.fichier
- try :
- #commande ="Zrun -zp "
- commande="more "
- textePython=(commande + self.fichierZcracksInput)
- self._viewTextExecute( textePython,"run_zcracks",".sh")
- except Exception as e:
- print((traceback.print_exc()))
+ if not(self.jdc.isValid()):
+ QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
+ return
+ if self.modified or self.fichier==None :
+ #if 1:
+ self.fichierZcracksInput = self.__generateTempFilename(prefix = "zcracks_run", suffix = ".z7p")
+ texte=self.getTextJDC("ZCRACKS",pourRun=1)
+ self.writeFile( self.fichierZcracksInput, txt = texte)
+ else :
+ self.fichierZcracksInput=self.fichier
+ try :
+ #commande ="Zrun -zp "
+ commande="more "
+ textePython=(commande + self.fichierZcracksInput)
+ self._viewTextExecute( textePython,"run_zcracks",".sh")
+ except Exception as e:
+ print((traceback.print_exc()))
#-------------------#
def runCARMELCND(self):
#-------------------#
- #if not(self.jdc.isValid()):
- # QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
- # return
- if self.modified or self.fichier==None :
- QMessageBox.critical( self, tr( "Execution impossible "),tr("Sauvegarder SVP avant l'execution "))
- return
- if not hasattr(self,'generator'): texte=self.getTextJDC(self.formatFichierOut)
- from PrepareRunCarmel import prepareRunCarmel
- fichierGenerique=os.path.basename(self.fichier).split(".")[0]
- repMed=os.path.dirname(self.fichier)
- repExeCarmel=self.generator.get_repExeCarmel()
- textePython=prepareRunCarmel(repExeCarmel,repMed,fichierGenerique)
- nomFichier = self.__generateTempFilename("carmel_run", suffix = ".sh")
- f=open(nomFichier,'w')
- f.write(textePython)
- f.close()
- commande="xterm -e sh "+nomFichier +"\n"
- os.system(commande)
+ #if not(self.jdc.isValid()):
+ # QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
+ # return
+ if self.modified or self.fichier==None :
+ QMessageBox.critical( self, tr( "Execution impossible "),tr("Sauvegarder SVP avant l'execution "))
+ return
+ if not hasattr(self,'generator'): texte=self.getTextJDC(self.formatFichierOut)
+ from PrepareRunCarmel import prepareRunCarmel
+ fichierGenerique=os.path.basename(self.fichier).split(".")[0]
+ repMed=os.path.dirname(self.fichier)
+ repExeCarmel=self.generator.get_repExeCarmel()
+ textePython=prepareRunCarmel(repExeCarmel,repMed,fichierGenerique)
+ nomFichier = self.__generateTempFilename("carmel_run", suffix = ".sh")
+ f=open(nomFichier,'w')
+ f.write(textePython)
+ f.close()
+ commande="xterm -e sh "+nomFichier +"\n"
+ os.system(commande)
#-------------------#
def runCarmelCS(self):
#-------------------#
- try :
- commande="runSession pilotyacsCS.py"
- os.system(commande)
- except Exception as e:
- print((traceback.print_exc()))
+ try :
+ commande="runSession pilotyacsCS.py"
+ os.system(commande)
+ except Exception as e:
+ print((traceback.print_exc()))
#-----------------------------------------------------#
def determineNomFichier(self,path,extension):
#-----------------------------------------------------#
- if self.appliEficas.code in DictExtensions:
- chaine1=DictExtensions[self.appliEficas.code]+" (*."+DictExtensions[self.appliEficas.code]+");;"
- extensions= tr(chaine1+ "All Files (*)")
- else :
- extensions= tr("JDC (*.comm);;" "All Files (*)")
-
- if self.appliEficas.code == "MAP" :
- extensions = extensions + ";; Run (*.input);;"
-
- fn = QFileDialog.getSaveFileName( self,
- tr("sauvegarde"), path,
- extensions,None,
- QFileDialog.DontConfirmOverwrite)
- if fn == None : return (0, None)
- fn=fn[0]
- if fn=='': return (0, None)
-
- ext = QFileInfo(fn).suffix()
- if ext == '': fn+=extension
-
- if QFileInfo(fn).exists():
- msgBox = QMessageBox(self)
- msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
- msgBox.setText(tr("Le fichier")+ " "+str(fn)+ " " +tr("existe deja"))
- msgBox.addButton(tr("&Ecraser"),0)
- msgBox.addButton(tr("&Abandonner"),1)
- abort=msgBox.exec_()
- if abort == 1 : return (0, "")
- return (1,fn)
+ if self.appliEficas.code in DictExtensions:
+ chaine1=DictExtensions[self.appliEficas.code]+" (*."+DictExtensions[self.appliEficas.code]+");;"
+ extensions= tr(chaine1+ "All Files (*)")
+ else :
+ extensions= tr("JDC (*.comm);;" "All Files (*)")
+
+ if self.appliEficas.code == "MAP" :
+ extensions = extensions + ";; Run (*.input);;"
+
+ fn = QFileDialog.getSaveFileName( self,
+ tr("sauvegarde"), path,
+ extensions,None,
+ QFileDialog.DontConfirmOverwrite)
+ if fn == None : return (0, None)
+ fn=fn[0]
+ if fn=='': return (0, None)
+
+ ext = QFileInfo(fn).suffix()
+ if ext == '': fn+=extension
+
+ if QFileInfo(fn).exists():
+ msgBox = QMessageBox(self)
+ msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
+ msgBox.setText(tr("Le fichier")+ " "+str(fn)+ " " +tr("existe deja"))
+ msgBox.addButton(tr("&Ecraser"),0)
+ msgBox.addButton(tr("&Abandonner"),1)
+ abort=msgBox.exec_()
+ if abort == 1 : return (0, "")
+ return (1,fn)
#-----------------#
def saveRunMAP(self):
#-----------------#
extension=".input"
if not(self.jdc.isValid()):
- QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
- tr("Un JdC valide est necessaire pour creer un .input")
- )
- return
+ QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
+ tr("Un JdC valide est necessaire pour creer un .input")
+ )
+ return
try :
- composant=self.jdc.etapes[0].nom.lower()[0:-5]
+ composant=self.jdc.etapes[0].nom.lower()[0:-5]
except :
- QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
- tr("Choix du composant obligatoire")
- )
- return
+ QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
+ tr("Choix du composant obligatoire")
+ )
+ return
if hasattr(self.maConfiguration, "savedir"): path=self.maConfiguration.savedir
else : path='C:/'
monNomFichier=""
if self.fichier is not None and self.fichier != "" :
- maBase=str(QFileInfo(self.fichier).baseName())+".input"
- monPath=str(QFileInfo(self.fichier).absolutePath())
- monNomFichier=os.path.join(monPath,maBase)
+ maBase=str(QFileInfo(self.fichier).baseName())+".input"
+ monPath=str(QFileInfo(self.fichier).absolutePath())
+ monNomFichier=os.path.join(monPath,maBase)
elif hasattr(self,'monNomFichierInput'):
monNomFichier=self.monNomFichierInput
for c in monDialog.children():
if isinstance(c,QDialogButtonBox):
- for b in c.children():
- if isinstance(b,QPushButton):
- avant=b.text()
- if avant=="&Open": b.setText("Save")
+ for b in c.children():
+ if isinstance(b,QPushButton):
+ avant=b.text()
+ if avant=="&Open": b.setText("Save")
mesFiltres= "input Map (*.input);;All Files (*)"
monDialog.setNameFilters(mesFiltres)
if monNomFichier!="" : monDialog.selectFile(monNomFichier)
#-----------------------------------------#
try :
#if 1:
- from ajoutGroupe import handleAjoutGroupFiltre
- #print listeGroup
- handleAjoutGroupFiltre(self,listeGroup)
- #print "apres handleAjoutGroupFiltre"
+ from ajoutGroupe import handleAjoutGroupFiltre
+ #print listeGroup
+ handleAjoutGroupFiltre(self,listeGroup)
+ #print "apres handleAjoutGroupFiltre"
except :
#else :
- pass
+ pass
#-----------------------------------------------------------------#
#saveas=True # Pour forcer le nom
self.generator=self.maConfiguration.mesGenerators.plugins[self.formatFichierOut]()
if self.fichierComplet is None or saveas:
- if path is None: path=self.maConfiguration.savedir
- bOK, fn=self.determineNomFichier(path,extension)
- if bOK == 0 : return (0, None)
- if fn == None : return (0, None)
- if fn== '' : return (0, None)
+ if path is None: path=self.maConfiguration.savedir
+ bOK, fn=self.determineNomFichier(path,extension)
+ if bOK == 0 : return (0, None)
+ if fn == None : return (0, None)
+ if fn== '' : return (0, None)
- ulfile = os.path.abspath(fn)
- self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
- fn = QDir.toNativeSeparators(fn)
+ ulfile = os.path.abspath(fn)
+ self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+ fn = QDir.toNativeSeparators(fn)
self.fichierComplet = os.path.splitext(fn)[0]+extension
return (0, None) # do nothing if text wasn't changed
if self.appliEficas.code in DictExtensions :
- extension=DictExtensions[self.appliEficas.code]
+ extension=DictExtensions[self.appliEficas.code]
else :
- extension='.comm'
+ extension='.comm'
newName = None
fn = self.fichier
if self.fichier is None or saveas:
- if path is None: path=self.maConfiguration.savedir
- bOK, fn=self.determineNomFichier(path,extension)
- if bOK == 0 : return (0, None)
- if fn == None : return (0, None)
- if fn== '' : return (0, None)
+ if path is None: path=self.maConfiguration.savedir
+ bOK, fn=self.determineNomFichier(path,extension)
+ if bOK == 0 : return (0, None)
+ if fn == None : return (0, None)
+ if fn== '' : return (0, None)
- ulfile = os.path.abspath(fn)
- self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
- fn = QDir.toNativeSeparators(fn)
- newName = fn
+ ulfile = os.path.abspath(fn)
+ self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+ fn = QDir.toNativeSeparators(fn)
+ newName = fn
if not (self.writeFile(fn,formatLigne=formatLigne)): return (0, None)
self.fichier = fn
self.modified = False
if self.fileInfo is None or saveas:
- self.fileInfo = QFileInfo(self.fichier)
- self.fileInfo.setCaching(0)
+ self.fileInfo = QFileInfo(self.fichier)
+ self.fileInfo.setCaching(0)
self.lastModified = self.fileInfo.lastModified()
if newName is not None:
- self.appliEficas.addToRecentList(newName)
- self.tree.racine.item.getObject().nom=os.path.basename(newName)
- self.tree.racine.updateNodeLabel()
+ self.appliEficas.addToRecentList(newName)
+ self.tree.racine.item.getObject().nom=os.path.basename(newName)
+ self.tree.racine.updateNodeLabel()
+
-
if self.jdc.cata.modeleMetier:self.jdc.toXml(self.fichier)
if self.jdc.cata.modeleMetier and self.jdc.isValid():
if self.generator != self.XMLgenerator :
- self.XMLgenerator.gener(self.jdc)
- self.XMLgenerator.writeDefault(fn)
+ self.XMLgenerator.gener(self.jdc)
+ self.XMLgenerator.writeDefault(fn)
if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
#if hasattr(self.generator, "writeDefault"):
msgBox.addButton(tr("&Annuler"),2)
res=msgBox.exec_()
if res == 0 :
- self.generator.writeDefault(fn)
- return (1, self.fichier)
+ self.generator.writeDefault(fn)
+ return (1, self.fichier)
if res == 2 : return (0, None)
if self.appliEficas.salome : self.appliEficas.close()
else : sys.exit(1)
if self.salome :
- self.appliEficas.addJdcInSalome( self.fichier)
+ self.appliEficas.addJdcInSalome( self.fichier)
self.modified = 0
nouveauTitre=self.titre+" "+str(os.path.basename(self.fichier))
self.appliEficas.setWindowTitle(nouveauTitre)
the name of the saved file
"""
if fileName != None :
- self.fichier = fileName
- return self.saveFile()
+ self.fichier = fileName
+ return self.saveFile()
return self.saveFile(path,1,"beautifie")
CONTEXT.setCurrentStep(etape)
etape.buildIncludeEtape(texte)
if not (etape.text_included_converted) :
- QMessageBox.information( self,
- tr("Impossible d importer le texte"),
- etape.text_included_error)
-
+ QMessageBox.information( self,
+ tr("Impossible d importer le texte"),
+ etape.text_included_error)
+
self.tree.racine.buildChildren()
#-----------------------------------#
# ajoute une etape de JdC a partir d un texte
monItem=itemApres
etape=monItem.item.object
-
+
CONTEXT.setCurrentStep(etape)
try :
- ok=etape.buildIncludeEtape(texte)
+ ok=etape.buildIncludeEtape(texte)
except :
- ok=0
+ ok=0
if not ok :
- QMessageBox.information( self,
- tr("Import texte"),
- tr("Impossible d importer le texte"))
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
self.tree.racine.buildChildren()
return ok
# ajoute une etape de JdC a partir d un texte
CONTEXT.setCurrentStep(etape)
try :
- ok=etape.buildIncludeEtape(texte,doitEtreValide=0)
+ ok=etape.buildIncludeEtape(texte,doitEtreValide=0)
except :
- ok=0
+ ok=0
if not ok :
- QMessageBox.information( self,
- tr("Import texte"),
- tr("Impossible d importer le texte"))
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
self.tree.racine.buildChildren()
return ok
#-----------------------------------------
def initSplitterSizes(self, nbWidget=3):
#-----------------------------------------
- #print ("je passe ds initSplitterSizes", nbWidget)
+ #print ("je passe ds initSplitterSizes", nbWidget)
- if self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes3=[1,1550,300]
- #elif self.code in [ 'MAP'] : self.splitterSizes3=[700,300]
- else : self.splitterSizes3=[150,1000,300]
+ if self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes3=[1,1550,300]
+ #elif self.code in [ 'MAP'] : self.splitterSizes3=[700,300]
+ else : self.splitterSizes3=[150,1000,300]
- if self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes2=[5,1500]
- else : self.splitterSizes2=[300,1000]
+ if self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes2=[5,1500]
+ else : self.splitterSizes2=[300,1000]
#-----------------------------------------
def restoreSplitterSizes(self,nbWidget=3):
#----------------------------------------
-
- #traceback.print_stack()
- #print ("je passe ds restoreSplitterSizes")
- if not(hasattr(self,'splitter')) : return
- if nbWidget==2 : newSizes=self.splitterSizes2
- if nbWidget==3 : newSizes=self.splitterSizes3
- #self.inhibeSplitter = 1
- #print (newSizes)
- self.splitter.setSizes(newSizes)
- #self.inhibeSplitter = 0
- QApplication.processEvents()
- # seule la fentetre du milieu est necessaire
- self.splitter.widget(1).resizeEvent=self.saveSplitterSizes
-
+
+ #traceback.print_stack()
+ #print ("je passe ds restoreSplitterSizes")
+ if not(hasattr(self,'splitter')) : return
+ if nbWidget==2 : newSizes=self.splitterSizes2
+ if nbWidget==3 : newSizes=self.splitterSizes3
+ #self.inhibeSplitter = 1
+ #print (newSizes)
+ self.splitter.setSizes(newSizes)
+ #self.inhibeSplitter = 0
+ QApplication.processEvents()
+ # seule la fentetre du milieu est necessaire
+ self.splitter.widget(1).resizeEvent=self.saveSplitterSizes
+
#-----------------------------------------
def saveSplitterSizes(self,event):
#-----------------------------------------
- #print ("je passe ds saveSplitterSizes")
- if self.inhibeSplitter : return
- if self.widgetOptionnel == None : self.splitterSizes2 = self.splitter.sizes()[0:2]
- else : self.splitterSizes3 = self.splitter.sizes()[0:3]
+ #print ("je passe ds saveSplitterSizes")
+ if self.inhibeSplitter : return
+ if self.widgetOptionnel == None : self.splitterSizes2 = self.splitter.sizes()[0:2]
+ else : self.splitterSizes3 = self.splitter.sizes()[0:3]
#------------------------
def fermeOptionnel(self):
#------------------------
- if self.widgetOptionnel == None : return
+ if self.widgetOptionnel == None : return
- self.inhibeSplitter=1
- self.widgetOptionnel.setParent(None)
- self.widgetOptionnel.close()
- self.widgetOptionnel.deleteLater()
- self.widgetOptionnel=None
- self.inhibeSplitter=0
- self.restoreSplitterSizes(2)
+ self.inhibeSplitter=1
+ self.widgetOptionnel.setParent(None)
+ self.widgetOptionnel.close()
+ self.widgetOptionnel.deleteLater()
+ self.widgetOptionnel=None
+ self.inhibeSplitter=0
+ self.restoreSplitterSizes(2)
#------------------------
def ajoutOptionnel(self):
#------------------------
- #if len(self.splitterSizes) == 2 : self.splitterSizes.append(self.oldSizeWidgetOptionnel)
- #else : self.splitterSizes[2] = self.oldSizeWidgetOptionnel # ceinture pour les close bizarres
- #self.splitterSizes[1] = self.splitterSizes[1] - self.splitterSizes[2]
-
- self.restoreSplitterSizes(3)
+ #if len(self.splitterSizes) == 2 : self.splitterSizes.append(self.oldSizeWidgetOptionnel)
+ #else : self.splitterSizes[2] = self.oldSizeWidgetOptionnel # ceinture pour les close bizarres
+ #self.splitterSizes[1] = self.splitterSizes[1] - self.splitterSizes[2]
+
+ self.restoreSplitterSizes(3)
#------------------------
def fermeArbre(self):
#------------------------
- #print (self.widgetTree)
- self.oldWidgetTree=self.widgetTree
- self.widgetTree.hide()
- #self.widgetTree=None
+ #print (self.widgetTree)
+ self.oldWidgetTree=self.widgetTree
+ self.widgetTree.hide()
+ #self.widgetTree=None
#------------------------
def ouvreArbre(self):
#------------------------
- #print ('je passe la')
- #print (self.widgetTree)
- #self.widgetTree=self.oldWidgetTree
- self.widgetTree.show()
- #self.restoreSplitterSizes(3)
+ #print ('je passe la')
+ #print (self.widgetTree)
+ #self.widgetTree=self.oldWidgetTree
+ self.widgetTree.show()
+ #self.restoreSplitterSizes(3)
#-----------------------
def getEtapeCourante(self) :
#-----------------------
- if len(self.tree.selectedItems()) != 1 : return None
- etape=self.tree.selectedItems()[0].item.object.getEtape()
- return etape
+ if len(self.tree.selectedItems()) != 1 : return None
+ etape=self.tree.selectedItems()[0].item.object.getEtape()
+ return etape
#-----------------------------
def getTreeIndex(self,noeud):
#----------------------------
- indexNoeud=-1
- if noeud in noeud.treeParent.children :
- indexNoeud=noeud.treeParent.children.index(noeud)
- else :
- if hasattr(noeud,'vraiParent') :
- noeudVrai = noeud
- noeudVraiParent = noeud.vraiParent
- while noeudVraiParent != noeud.treeParent and hasattr(noeudVraiParent,'vraiParent') :
- noeudVrai = noeudVraiParent
- noeudVraiParent = noeudVraiParent.vraiParent
- pass
- if noeudVraiParent == noeud.treeParent :
- indexNoeud=noeud.treeParent.children.index(noeudVrai)
- pass
- pass
- pass
- return indexNoeud
+ indexNoeud=-1
+ if noeud in noeud.treeParent.children :
+ indexNoeud=noeud.treeParent.children.index(noeud)
+ else :
+ if hasattr(noeud,'vraiParent') :
+ noeudVrai = noeud
+ noeudVraiParent = noeud.vraiParent
+ while noeudVraiParent != noeud.treeParent and hasattr(noeudVraiParent,'vraiParent') :
+ noeudVrai = noeudVraiParent
+ noeudVraiParent = noeudVraiParent.vraiParent
+ pass
+ if noeudVraiParent == noeud.treeParent :
+ indexNoeud=noeud.treeParent.children.index(noeudVrai)
+ pass
+ pass
+ pass
+ return indexNoeud
#-------------------# Pour execution avec output et error dans le bash
def runPSEN(self):
#-------------------#
-
- #if self.modified or self.fichier==None : self.saveFile()
- self.saveFile()
-
- #lancement avec le .bat
- path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','PSEN_Eficas','PSEN'))
- WrapperFilePath = os.path.join(path1, 'PSSEWrapper.py')
- import subprocess
- p = subprocess.Popen(['python',WrapperFilePath])
- (out,err)=p.communicate()
- print (out)
- print (err)
+
+ #if self.modified or self.fichier==None : self.saveFile()
+ self.saveFile()
+
+ #lancement avec le .bat
+ path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','PSEN_Eficas','PSEN'))
+ WrapperFilePath = os.path.join(path1, 'PSSEWrapper.py')
+ import subprocess
+ p = subprocess.Popen(['python',WrapperFilePath])
+ (out,err)=p.communicate()
+ print (out)
+ print (err)
#-------------------# Pour execution avec output et error dans le bash
def runPSEN_N1(self):
#-------------------#
-
-
- self.saveFile()
- path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
- sys.path.append(path1)
-
- if not(self.jdc.isValid()):
- QMessageBox.information( self, tr( "Unvalid JDC"),tr("incorrect keywords will be ignored"))
- if 'dicoImbrique' in generator.plugins:
- self.generator=generator.plugins['dicoImbrique']()
- jdc_formate=self.generator.gener(self.jdc)
- dico=self.generator.Dico
-
- ###to delete
- #fileDico = r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
- fileDico = os.path.join(path1, 'dicoN1.py') #r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
- f = open( str(fileDico), 'w')
- f.write("Dico =" + str(dico) )
- f.close()
- ###
-
-
- print ('in runPSEN_N1', dico)
- print (dico)
- from Run import run
- run(dico)
- #res,txt_exception=run(dico)
- #if res : QMessageBox.information( self, tr("fin de script run"), txt_exception)
- #else : QMessageBox.critical( self, tr("Erreur fatale script run"), txt_exception)
-
+
+
+ self.saveFile()
+ path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+ sys.path.append(path1)
+
+ if not(self.jdc.isValid()):
+ QMessageBox.information( self, tr( "Unvalid JDC"),tr("incorrect keywords will be ignored"))
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.generator.Dico
+
+ ###to delete
+ #fileDico = r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
+ fileDico = os.path.join(path1, 'dicoN1.py') #r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
+ f = open( str(fileDico), 'w')
+ f.write("Dico =" + str(dico) )
+ f.close()
+ ###
+
+
+ print ('in runPSEN_N1', dico)
+ print (dico)
+ from Run import run
+ run(dico)
+ #res,txt_exception=run(dico)
+ #if res : QMessageBox.information( self, tr("fin de script run"), txt_exception)
+ #else : QMessageBox.critical( self, tr("Erreur fatale script run"), txt_exception)
+
#-------------------# Pour execution avec output et error dans le bash
def process_N1(self):
#-------------------#
- path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
- sys.path.append(path1)
+ path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+ sys.path.append(path1)
- if 'dicoImbrique' in generator.plugins:
- self.generator=generator.plugins['dicoImbrique']()
- jdc_formate=self.generator.gener(self.jdc)
- dico=self.getDico() #generator.Dico
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.getDico() #generator.Dico
- for k in dico['CONTINGENCY_PROCESSING']:
- #print (k)
- if k[0:19] == 'Component_List_For_' or k[0:21] =='Contingency_List_For_' :
- newK=k.replace('__',' ')
- l="'"+str(newK)+"'"
- dico['CONTINGENCY_PROCESSING'][l]=dico['CONTINGENCY_PROCESSING'][k]
- del dico['CONTINGENCY_PROCESSING'][k]
+ for k in dico['CONTINGENCY_PROCESSING']:
+ #print (k)
+ if k[0:19] == 'Component_List_For_' or k[0:21] =='Contingency_List_For_' :
+ newK=k.replace('__',' ')
+ l="'"+str(newK)+"'"
+ dico['CONTINGENCY_PROCESSING'][l]=dico['CONTINGENCY_PROCESSING'][k]
+ del dico['CONTINGENCY_PROCESSING'][k]
- ###to delete
- fileDico = os.path.join(path1, 'dicoN1_process.py')
- f = open( str(fileDico), 'w')
- f.write("Dico =" + str(dico) )
- f.close()
- ###
- return dico
+ ###to delete
+ fileDico = os.path.join(path1, 'dicoN1_process.py')
+ f = open( str(fileDico), 'w')
+ f.write("Dico =" + str(dico) )
+ f.close()
+ ###
+ return dico
#return self.getDico()
#-------------------# Pour execution avec output et error dans le bash
def process_VP(self):
#-------------------#
- if 'dicoImbrique' in generator.plugins:
- self.generator=generator.plugins['dicoImbrique']()
- jdc_formate=self.generator.gener(self.jdc)
- dico=self.getDico() #generator.Dico
- return dico
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.getDico() #generator.Dico
+ return dico
if __name__ == "__main__":
print ('in main')
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,sys,os, re
import subprocess
import traceback
-
-import traceback
-
# Modules Eficas
import convert, generator
if fichier != None : self.extensionFichier = os.path.splitext(fichier)[1]
else : self.extensionFichier = None
self.jdc = jdc
- self.first = True
+ self.first = True
self.jdc_item = None
self.dicoNouveauxMC = {}
self.dicoNouveauxFact = {}
if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.readercata.demandeCatalogue==True or self.appliEficas.multi==True:
- if self.maConfiguration.typeDeCata == 'XML' :
- from InterfaceQT4 import readercataXML as readercata
- else :
- from InterfaceQT4 import readercata
- self.readercata = readercata.ReaderCata( self, self.appliEficas )
- self.appliEficas.readercata=self.readercata
- self.appliEficas.code=self.code
+ if self.maConfiguration.typeDeCata == 'XML' :
+ from InterfaceQT4 import readercataXML as readercata
+ else :
+ from InterfaceQT4 import readercata
+ self.readercata = readercata.ReaderCata( self, self.appliEficas )
+ self.appliEficas.readercata=self.readercata
+ self.appliEficas.code=self.code
else :
- self.readercata=self.appliEficas.readercata
+ self.readercata=self.appliEficas.readercata
if self.readercata.fichierCata == None : return #Sortie Salome
self.titre=self.readercata.titre
self.formatFichierOut = self.appliEficas.formatFichierOut
self.formatFichierIn = self.appliEficas.formatFichierIn
- if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
+ #if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
self.dict_reels={}
self.liste_simp_reel=[]
self.dicoNouveauxMC={}
try:
- self.maConfiguration.generator_module
- _module = __import__(self.maConfiguration.generator_module)
- info = _module.entryPoint()
- generator.plugins.addEntryPoint(info)
+ self.maConfiguration.generator_module
+ _module = __import__(self.maConfiguration.generator_module)
+ info = _module.entryPoint()
+ generator.plugins.addEntryPoint(info)
except:
- pass
+ pass
try:
- self.maConfiguration.convert_module
- #print self.maConfiguration.convert_module
- _module = __import__(self.maConfiguration.convert_module)
- info = _module.entryPoint()
- convert.plugins.addEntryPoint(info)
+ self.maConfiguration.convert_module
+ #print self.maConfiguration.convert_module
+ _module = __import__(self.maConfiguration.convert_module)
+ info = _module.entryPoint()
+ convert.plugins.addEntryPoint(info)
except :
- pass
+ pass
self.maConfiguration.mesGenerators = generator
self.maConfiguration.mesconvertisseurs = convert
try : self.XMLgenerator=generator.plugins['xml']()
except : self.XMLgenerator=None
-
+
if self.formatFichierOut in generator.plugins.keys():
- self.generator = generator.plugins[self.formatFichierOut]()
+ self.generator = generator.plugins[self.formatFichierOut]()
self.fileInfo = None
self.nouveau=0
if self.fichier is not None: # fichier jdc fourni
if jdc==None :
- #print ('PNPN : chgt try en if')
- try :
- #if 1 :
- self.jdc = self.readFile(self.fichier)
- except :
- print ("mauvaise lecture du fichier")
- if self.salome :
- try : self.appliEficas.addJdcInSalome( self.fichier)
- except : print ("mauvais enregistrement dans Salome")
+ #print ('PNPN : chgt try en if')
+ try :
+ #if 1 :
+ self.jdc = self.readFile(self.fichier)
+ except :
+ print ("mauvaise lecture du fichier")
+ if self.salome :
+ try : self.appliEficas.addJdcInSalome( self.fichier)
+ except : print ("mauvais enregistrement dans Salome")
else :
- self.jdc=jdc
+ self.jdc=jdc
if self.jdc is not None and units is not None:
- self.jdc.recorded_units=units
- self.jdc.old_recorded_units=units
+ self.jdc.recorded_units=units
+ self.jdc.old_recorded_units=units
else:
if not self.jdc: # nouveau jdc
self.jdc.lang = self.appliEficas.langue
self.jdc.aReafficher=False
txt_exception = None
- if not jdc:
+ if not jdc:
if self.extensionFichier == '.xml' :
- if self.appliEficas.maConfiguration.withXSD: self.jdc.analyseXML()
- else : print ('run MDM with -x option (MDM for XML)'); exit()
+ if self.appliEficas.maConfiguration.withXSD: self.jdc.analyseXML()
+ else : print ('run MDM with -x option (MDM for XML)'); exit()
else : self.jdc.analyse()
txt_exception = self.jdc.cr.getMessException()
if txt_exception :
formatIn=self.appliEficas.formatFichierIn
if self.extensionFichier == '.xml' and self.appliEficas.maConfiguration.withXSD: formatIn='xml'
if formatIn in convert.plugins:
- # Le convertisseur existe on l'utilise
- p=convert.plugins[formatIn]()
- p.readfile(fn)
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[formatIn]()
+ p.readfile(fn)
- if p.text=="" : self.nouveau=1
- #print ('PNPN --> CIST a faire')
+ if p.text=="" : self.nouveau=1
+ #print ('PNPN --> CIST a faire')
- if formatIn != 'xml':
+ if formatIn != 'xml':
pareil,texteNew=self.verifieChecksum(p.text)
if not pareil : self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
p.text=texteNew
p.text=texteNew
text=p.convert('exec',self.appliEficas)
if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
- else:
+ else:
text=p.text
else :
self.afficheInfos("Type de fichier non reconnu",'red')
jdc.lang = self.appliEficas.langue
if units is not None:
- jdc.recorded_units=units
- jdc.old_recorded_units=units
- # chgt le 15/10/19
+ jdc.recorded_units=units
+ jdc.old_recorded_units=units
+ # chgt le 15/10/19
# Attention positionne contexte ?
# est ce qu on ne doit pas changer le format en Accas si on vient d accas ?
jdc.editor=self
return jdc
- #--------------------------------#
+ #--------------------------------#
def _newJDCInclude( self ,units = None):
#--------------------------------#
"""
J.editor=self
J.analyse()
if units is not None:
- J.recorded_units=units
- J.old_recorded_units=units
+ J.recorded_units=units
+ J.old_recorded_units=units
return J
#-----------------------#
def generDico(self):
#-----------------------#
- if 'dico' in generator.plugins:
- self.generator=generator.plugins['dico']()
- #print (self.generator)
- jdc_formate=self.generator.gener(self.jdc)
- #print (jdc_formate)
- dico=self.generator.Dico
- #print (dico)
- return dico
+ if 'dico' in generator.plugins:
+ self.generator=generator.plugins['dico']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ #print (jdc_formate)
+ dico=self.generator.Dico
+ #print (dico)
+ return dico
#-----------------------#
def viewJdcSource(self):
#-----------------------#
if self.fichier == None : return
if os.path.isfile(self.fichier):
- f=open(self.fichier,'r')
- texteSource=f.read()
- f.close()
- self._viewText(texteSource, "JDC_SOURCE")
+ f=open(self.fichier,'r')
+ texteSource=f.read()
+ f.close()
+ self._viewText(texteSource, "JDC_SOURCE")
else :
- self._viewText("file doesn't exist", "JDC_SOURCE")
+ self._viewText("file doesn't exist", "JDC_SOURCE")
#-----------------------#
def viewJdcRegles(self):
#-----------------------#
# on ajoute les regles
- texte_global, test_global = self.jdc.verifRegles()
+ texte_global, test_global = self.jdc.verifRegles()
self._viewText(texte_global, "JDC_REGLES")
#-----------------------#
#---------------------#
def getFileName(self):
#---------------------#
- return self.fichier
+ return self.fichier
#-------------------#
def initModif(self):
#-------------------#
- """
- Met l'attribut modified a 'o' : utilise par Eficas pour savoir
- si un JDC doit etre sauvegarde avant destruction ou non
- """
- self.modified = True
+ """
+ Met l'attribut modified a 'o' : utilise par Eficas pour savoir
+ si un JDC doit etre sauvegarde avant destruction ou non
+ """
+ self.modified = True
#--------------------------------------------------#
txt = self.getTextJDC(self.formatFichierOut,formatLigne=formatLigne)
eol = '\n'
if len(txt) >= len(eol):
- if txt[-len(eol):] != eol:
- txt += eol
+ if txt[-len(eol):] != eol:
+ txt += eol
else:
txt += eol
txt=self.ajoutVersionCataDsJDC(txt)
print('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :' , str(why))
self.afficheInfos('Le fichier'+str(fn) + 'n a pas pu etre sauvegarde ' , 'red')
return 0
-
+
#-----------------------------------------------------------#
def getTextJDC(self,format = None,pourRun=0,formatLigne="beautifie"):
#-----------------------------------------------------------#
- if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
- if format == None : format = self.formatFichierOut
- if format in generator.plugins:
-
- # Le generateur existe on l'utilise
- self.generator=generator.plugins[format]()
- try :
- jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
- if pourRun : jdc_formate=self.generator.textePourRun
- if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
- except ValueError as e:
- self.informe( "Erreur a la generation",str(e),'red')
- return
-
- if not self.generator.cr.estvide():
- self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
+ if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+ if format == None : format = self.formatFichierOut
+ if format in generator.plugins:
+
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ try :
+ jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+ if pourRun : jdc_formate=self.generator.textePourRun
+ if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
+ except ValueError as e:
+ self.informe( "Erreur a la generation",str(e),'red')
+ return
+
+ if not self.generator.cr.estvide():
+ self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
+ return ""
+ else:
+ return jdc_formate
+ else:
+ # Il n'existe pas c'est une erreur
+ self.informe("Format inconnu", self.format + " non reconnu" )
return ""
- else:
- return jdc_formate
- else:
- # Il n'existe pas c'est une erreur
- self.informe("Format inconnu", self.format + " non reconnu" )
- return ""
#------------------------------#
def verifieChecksum(self,text):
checkAvant=text[indexDeb:indexFin+13]
textJDC=text[0:indexDeb]+text[indexFin+13:-1]
if self.code != 'PSEN' and self.code != 'PSEN_N1':
- checksum=self.getChecksum(textJDC)
- pareil=(checkAvant==checksum)
+ checksum=self.getChecksum(textJDC)
+ pareil=(checkAvant==checksum)
else :
- pareil=1
+ pareil=1
return pareil, textJDC
#---------------------------#
def getChecksum(self,texte):
#---------------------------#
try :
- import haslib
- newtexte=texte.replace('"','\\"')
- hash_checksum = hashlib.md5()
- hash_checksum.update(newtexte.encode('utf-8'))
- checksum = hash_checksum.hexdigest()
- ligne = ligne="#CHECKSUM:"+checksum+":FIN CHECKSUM"
- except :
- try :
- newtexte=texte.replace('"','\\"')
- commande='echo "'+newtexte+'"|md5sum'
- a=os.popen(commande)
- checksum=a.read()
- a.close()
- except :
- checksum='Fichier trop long \n'
- ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
- return ligne
+ import haslib
+ newtexte=texte.replace('"','\\"')
+ hash_checksum = hashlib.md5()
+ hash_checksum.update(newtexte.encode('utf-8'))
+ checksum = hash_checksum.hexdigest()
+ ligne = ligne="#CHECKSUM:"+checksum+":FIN CHECKSUM"
+ except :
+ try :
+ newtexte=texte.replace('"','\\"')
+ commande='echo "'+newtexte+'"|md5sum'
+ a=os.popen(commande)
+ checksum=a.read()
+ a.close()
+ except :
+ checksum='Fichier trop long \n'
+ ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+ return ligne
#----------------------#
def getDico(self):
#---------------------#
- if 'dicoImbrique' in generator.plugins:
- self.generator=generator.plugins['dicoImbrique']()
- #print (self.generator)
- jdc_formate=self.generator.gener(self.jdc)
- dico=self.generator.Dico
- return dico
- else :
- self.afficheInfos(tr("Format %s non reconnu" , 'Dictionnaire Imbrique' ),'red')
- return ""
-
- #-----------------------------------------#
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.generator.Dico
+ return dico
+ else :
+ self.afficheInfos(tr("Format %s non reconnu" , 'Dictionnaire Imbrique' ),'red')
+ return ""
+
+ #-----------------------------------------#
def chercheGroupes(self):
#-----------------------------------------#
listeMA,listeNO=self.getTextJDC("GroupMA")
dicoCourant={}
format = self.appliEficas.formatFichierOut
if format in generator.plugins:
- # Le generateur existe on l'utilise
- self.generator=generator.plugins[format]()
- jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.maConfiguration)
- dicoCourant=self.generator.dico
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.maConfiguration)
+ dicoCourant=self.generator.dico
return dicoCourant
#-----------------------------------------------------------------#
def saveFileLegerAs(self, fileName = None) :
#-----------------------------------------------------------------#
if fileName != None :
- self.fichier = fileName
- return self.saveFileLeger(fileName)
+ self.fichier = fileName
+ return self.saveFileLeger(fileName)
return self.saveFileLeger()
#-----------------------------------------------------------------#
#--------------------------------#
def ajoutCommentaire(self):
#--------------------------------#
- print ('pas programme sans Ihm')
- print ('prevenir la maintenance du besoin')
+ print ('pas programme sans Ihm')
+ print ('prevenir la maintenance du besoin')
#--------------------------------------#
def informe(self,titre,txt,critique=True):
#--------------------------------------#
# methode differenre avec et sans ihm
- if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
- print (titre)
- print (txt)
- if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+ print (titre)
+ print (txt)
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
#--------------------------------------#
def afficheInfos(self,txt,couleur=None):
#--------------------------------------#
# methode differenre avec et sans ihm
- print (txt)
+ print (txt)
#-----------------------------------------------------------------------#
def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
if self.jdc.cata.modeleMetier and self.jdc.isValid():
if self.generator != self.XMLgenerator :
- self.XMLgenerator.gener(self.jdc)
- self.XMLgenerator.writeDefault(fichier)
- return(1,self.fichier)
+ self.XMLgenerator.gener(self.jdc)
+ self.XMLgenerator.writeDefault(fichier)
+ return(1,self.fichier)
if self.jdc.isValid() and hasattr(self.generator, "writeDefault"):
self.generator.writeDefault(fichier)
elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
etape=monItem.item.object
CONTEXT.set_current_step(etape)
try :
- ok=etape.build_includeEtape(texte)
+ ok=etape.build_includeEtape(texte)
except :
- ok=0
+ ok=0
if not ok :
- QMessageBox.information( self,
- tr("Import texte"),
- tr("Impossible d importer le texte"))
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
self.tree.racine.build_children()
return ok
# dans le JDC
ouChercher=etape
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
monMC=ouChercher.getChild(MCFils,restreint="oui")
if monMC != None : ouChercher.suppentite(monMC)
ouChercher.state='changed'
ouChercher=etape
if debug : print (ouChercher)
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
monMC=ouChercher.getChild(MCFils,restreint="oui")
if monMC == None : monMC = ouChercher.addEntite(MCFils)
monMC.valeur=valeurs
ouChercher=etape
if debug : print (ouChercher)
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
# Attention si +sieursMCFACT
ouChercher=ouChercher[0]
if debug : print (ouChercher)
# dans le JDC
ouChercher=etape
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
monMC=etape.getChild(ouChercher,restreint="oui")
if monMC== None : monMC= ouChercher.addEntite(MCFils)
monMC.isvalid()
# pour VP
monObj=etape
for mot in listeAvant :
- monObj=monObj.getChild(mot,restreint="oui")
- if monObj==None : return False
+ monObj=monObj.getChild(mot,restreint="oui")
+ if monObj==None : return False
if monObj == None : return False
if monObj.valeur != valeur :
- # PNPN le setValeur fait des bugs --> pourquoi
- #monObj.setValeur(valeur)
- monObj.valeur=valeur
- monObj.isValid()
+ # PNPN le setValeur fait des bugs --> pourquoi
+ #monObj.setValeur(valeur)
+ monObj.valeur=valeur
+ monObj.isValid()
return True
#-------------------------------------------------#
if debug : print ('etape trouvee', ouChercher)
if ouChercher==None : return None
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- if debug : print (mot, ouChercher)
- if ouChercher==None : return None
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
monMC=ouChercher.getChild(MCFils,restreint="oui")
if debug : print ('monMC', monMC)
if monMC== None : return None
ouChercher=etape
debug=0
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- if debug : print (mot, ouChercher)
- if ouChercher==None : return None
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
monMC=ouChercher.getChild(MCFils,restreint="oui")
if debug : print ('monMC', monMC)
return monMC
if e.nom == nomEtape : ouChercher=e; break
if ouChercher==None : return None
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- #print (mot, ouChercher)
- if ouChercher==None : return None
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ #print (mot, ouChercher)
+ if ouChercher==None : return None
monMC=ouChercher.getChild(MCFils,restreint="oui")
monMC.set_valeur(valeur)
monMC.isvalid()
# dans le JDC
ouChercher=etape
if isinstance (etape, str):
- ouChercher=None
- for e in self.jdc.etapes:
- if e.nom == etape : ouChercher=e; break
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == etape : ouChercher=e; break
if ouChercher==None : return
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- if ouChercher==None : return
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if ouChercher==None : return
monMC=ouChercher.getChild(MCFils,restreint="oui")
if monMC== None : monMC= ouChercher.addEntite(MCFils)
for mot in listeAvant :
try :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
# Le mot clef n est pas la
except : return 0
try :
- monMC=ouChercher.getChild(MCFils,restreint="oui")
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
# Le mot clef n est pas la
except : return 0
if monMC == None : return 0
if hasattr(monMC.definition,'into') :
- if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
- else : maListeDeValeur=monMC.definition.into
+ if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
+ else : maListeDeValeur=monMC.definition.into
else :
- return 0
+ return 0
monMC.state='changed'
return 1
ouChercher=definitionEtape
if len(listeMC) > 1 :
- for mc in listeMC[0:-1]:
- mcfact=ouChercher.entites[mc]
- ouChercher=mcfact
+ for mc in listeMC[0:-1]:
+ mcfact=ouChercher.entites[mc]
+ ouChercher=mcfact
mcAccas=ouChercher.entites[listeMC[-1]]
mcAccas.defaut=valeurs
# dans le MDD
#print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
if isinstance (etape, str):
- for e in self.jdc.etapes:
- if e.nom == etape : etape=e; break
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
if etape == None : return
#definitionEtape=getattr(self.jdc.cata[0],etape)
definitionEtape=getattr(self.jdc.cata,etape)
self.changeIntoDefMC(etape,listeMC,into)
if isinstance (etape, str):
- for e in self.jdc.etapes:
- if e.nom == etape : etape=e; break
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
if etape == None : return
ouChercher = etape
indexDeb=text.find("#VERSION_CATALOGUE:")
indexFin=text.find(":FIN VERSION_CATALOGUE")
if indexDeb < 0 :
- self.versionCataDuJDC="sans"
- textJDC=text
+ self.versionCataDuJDC="sans"
+ textJDC=text
else :
- self.versionCataDuJDC=text[indexDeb+19:indexFin]
- textJDC=text[0:indexDeb]+text[indexFin+23:-1]
+ self.versionCataDuJDC=text[indexDeb+19:indexFin]
+ textJDC=text[0:indexDeb]+text[indexFin+23:-1]
self.versionCata="sans"
if hasattr(self.readercata.cata,'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata.VERSION_CATALOGUE
#---------------------------#
def _newJDCCND(self):
#---------------------------#
- extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
-
- #if self.salome == 0 :
- QMessageBox.information( self,
- tr("Fichier Med"),
- tr("Veuillez selectionner un fichier Med"))
- QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
- caption='Fichier Med',
- filter=extensions)
- QSfichier=QSfichier[0]
- self.fichierMED=QSfichier
- from acquiertGroupes import getGroupes
- erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
- if erreur != "" : print ("a traiter")
- texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
- texteSources=""
- texteCond=""
- texteNoCond=""
- texteVcut=""
- texteZs=""
- for groupe in self.listeGroupes :
- if groupe[0:8]=='CURRENT_':
- texteSources +=groupe[8:]+"=SOURCE("
- texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n"
- if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
- if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
- if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
- if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n"
- texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
- self.newTexteCND=texte
- self.modified=1
- return texte
+ extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
+
+ #if self.salome == 0 :
+ QMessageBox.information( self,
+ tr("Fichier Med"),
+ tr("Veuillez selectionner un fichier Med"))
+ QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
+ caption='Fichier Med',
+ filter=extensions)
+ QSfichier=QSfichier[0]
+ self.fichierMED=QSfichier
+ from acquiertGroupes import getGroupes
+ erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
+ if erreur != "" : print ("a traiter")
+ texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
+ texteSources=""
+ texteCond=""
+ texteNoCond=""
+ texteVcut=""
+ texteZs=""
+ for groupe in self.listeGroupes :
+ if groupe[0:8]=='CURRENT_':
+ texteSources +=groupe[8:]+"=SOURCE("
+ texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n"
+ if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
+ if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
+ if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
+ if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n"
+ texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
+ self.newTexteCND=texte
+ self.modified=1
+ return texte
if __name__ == "__main__":
- print ('a faire')
+ print ('a faire')
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
-
import sys,os
repIni = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
ihmQTDir = os.path.join(repIni,"UiQT5")
if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
if editeurDir not in sys.path : sys.path.append(editeurDir)
+if sys.version_info[0] < 3:
+ print("Must be using Python 3")
+ sys.exit()
def lanceEficas(code=None, multi=False, langue='en', labelCode=None):
#-------------------------------------------------------------------
Lance l'appli EFICAS avec Ihm
"""
try :
- from PyQt5.QtWidgets import QApplication
+ from PyQt5.QtWidgets import QApplication
except :
- print('Please, set qt environment')
- return
+ print('Please, set qt environment')
+ return
from Editeur import session
options = session.parse(sys.argv)
res=app.exec_()
sys.exit(res)
-def getEficasSsIhm(code=None, multi=False, langue='en', labelCode=None,forceXML=False, genereXSD=False):
-#------------------------------------------------------------------------------------------------------
+def getEficasSsIhm(code=None, multi=False, langue='en', ssCode=None, labelCode=None,forceXML=False, genereXSD=False, fichierCata=None):
+#-------------------------------------------------------------------------------------------------------------------------
"""
Lance l'appli EFICAS sans Ihm
"""
if forceXML : options.withXSD=True
from InterfaceQT4.qtEficasSsIhm import AppliSsIhm
- Eficas=AppliSsIhm(code=code, salome=0, multi=multi, langue=langue, labelCode=labelCode, genereXSD=genereXSD)
+ Eficas=AppliSsIhm(code=code, salome=0, multi=multi, langue=langue, ssCode=ssCode, labelCode=labelCode, genereXSD=genereXSD, fichierCata=fichierCata)
return Eficas
from Editeur import session
options = session.parse(sys.argv)
if code != None : options.code = code
- if options.fichierCata == None :
- print ('Use -c cata_name.py')
- return
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
monEficasSsIhm = getEficasSsIhm(code=options.code,genereXSD=True)
monEditor=monEficasSsIhm.getEditor()
- texteXSD=monEficasSsIhm.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
+ #texteXSD=monEficasSsIhm.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
+ texteXSD=monEditor.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
#if fichierCataTrunc[0:4] in ('cata','Cata'): fichierCataTrunc=fichierCataTrunc[4:]
from Editeur import session
options=session.parse(sys.argv)
if code != None : options.code = code
- if options.fichierCata == None :
- print ('Use -c cata_name.py')
- return
- fichier=options.comm[0]
- if fichier==None :
- print ('comm file is needed')
- return
-
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
+ try : fichier=options.comm[0]
+ except : fichier=None
+ if fichier==None :
+ print ('comm file is needed')
+ return
+
monEficasSsIhm = getEficasSsIhm(code=options.code, forceXML=True)
from .editorSsIhm import JDCEditorSsIhm
monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
- fichierXML=fichier[:fichier.rfind(".")]+'.xml'
+ if options.fichierXMLOut == None :
+ fichierXMLOut=fichier[:fichier.rfind(".")]+'.xml'
+ else :
+ fichierXMLOut=options.fichierXMLOut
+ if not(monEditeur.jdc.isValid()):
+ print ('Fichier comm is not valid')
+ return
+ #print ('Fichier comm is not valid')
monEditeur.XMLgenerator.gener(monEditeur.jdc)
- monEditeur.XMLgenerator.writeDefault(fichierXML)
+ monEditeur.XMLgenerator.writeDefault(fichierXMLOut)
+
+def genereStructure(code=None):
+#------------------------------
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if code != None : options.code = code
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
+
+ monEficasSsIhm = getEficasSsIhm(code=options.code,genereXSD=True)
+ monEditor=monEficasSsIhm.getEditor()
+ texteStructure=monEditor.dumpStructure()
+
+ fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
+ fileStructure = fichierCataTrunc + '.txt'
+ f = open( str(fileStructure), 'w')
+ f.write(str(texteStructure))
+ f.close()
+
def validateDataSet(code=None):
#------------------------------
from Editeur import session
options=session.parse(sys.argv)
if code != None : options.code = code
- if options.fichierCata == None :
- print ('Use -c cata_name.py')
- return
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
fichier=options.comm[0]
- if fichier==None :
- print ('comm file is needed')
- return
+ if fichier==None :
+ print ('comm file is needed')
+ return
from .editorSsIhm import JDCEditorSsIhm
monEficasSsIhm = getEficasSsIhm(code=options.code)
monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
else : print ('Jdc is valid')
return monEditeur.jdc.isValid()
-def validateFonction(laFonction, debug=True):
+def validateFonction(laFonction, debug=False):
#-------------------------------
# ici un singleton pour avoir l editor, le catalogue et...
monEficasSsIhm = getEficasSsIhm(code='Essai')
def fonctionValidee(*args, **kwargs):
laFonctionName = laFonction.__name__
if debug : print('Appel {} avec args={} et kwargs={}'.format( laFonction.__name__, args, kwargs))
- listArgsNames = list(OrderedDict.fromkeys(getargspec(laFonction)[0]))
- listKwargsNames = list(kwargs.keys())
- if debug : print (listArgsNames)
- if debug : print (listKwargsNames)
- #listTousNames = listArgsNames+listKwargsNames
- #if debug : print (listTousNames)
- #args_dict = OrderedDict(list(zip(args_name, args)) + list(kwargs.iteritems()))
- #print (args_dict)
-
- #laDefDeLaFonctionDansAccas = getattr(monEditor.readercata.cata,laFonctionName)
- #print (laDefDeLaFonctionDansAccas)
- #print (laDefDeLaFonctionDansAccas.entites)
- #print (dir(laDefDeLaFonctionDansAccas))
- #print (args)
- #dict1={'monArgument1' : 'a', 'monArgument2' : 'uuu'}
-
- #objConstruit = laDefDeLaFonctionDansAccas.makeObjetPourVerifSignature(**dict1)
- #print (objConstruit)
- #print (objConstruit.isValid())
- ret = laFonction(*args, **kwargs)
- return ret
+ laDefDeLaFonctionDansAccas = getattr(monEditor.readercata.cata,laFonctionName)
+ objConstruit = laDefDeLaFonctionDansAccas.makeObjetPourVerifSignature(*args,**kwargs)
+ if (objConstruit.isValid()) :
+ ret = laFonction(*args, **kwargs)
+ return ret
+ else :
+ print ('mauvais arguments')
+ print (objConstruit.CR())
+ return None
return fonctionValidee
#maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
return fonctionValidee
-
+
return laFonction
-
+
+def createFromDocumentAccas(fichierCata=None,fichier=None,code=None):
+#------------------------------------------------------------
+ if fichier == None : print ('file is needed'); return None
+ if fichierCata == None : print ('cata file is needed'); return None
+
+ from Noyau.N_OBJECT import activeSurcharge
+ activeSurcharge()
+
+ from .editorSsIhm import JDCEditorSsIhm
+ monEficasSsIhm = getEficasSsIhm(code='Essai', fichierCata=fichierCata)
+ monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
+ return monEditeur.jdc
+ #from Noyau
# --------------------------- toutes les fonctions après sont obseletes
def lanceEficas_ssIhm(code=None,fichier=None,ssCode=None,version=None,debug=False,langue='en'):
"""
- Lance l'appli EFICAS SsIhm
+ Lance l'appli EFICAS SsIhm
"""
# Analyse des arguments de la ligne de commande
print ('deprecated')
from Editeur import session
options=session.parse(sys.argv)
- if version!=None and options.version == None : options.version=version
+ if version!=None and options.version == None : options.version=version
if fichier == None : fichier=options.comm[0]
if code == None : code=options.code
from . import readercata
if not hasattr ( Eficas, 'readercata'):
- monreadercata = readercata.ReaderCata( parent, Eficas )
- Eficas.readercata=monreadercata
+ monreadercata = readercata.ReaderCata( parent, Eficas )
+ Eficas.readercata=monreadercata
from .editor import JDCEditor
monEditeur=JDCEditor(Eficas,fichier)
print ('deprecated')
#print 'lanceEficas_ssIhm_reecrit', fichier
monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version,langue=langue)
- if ou == None :
- fileName=fichier.split(".")[0]+"_reecrit.comm"
- fn=fichier.split(".")[0]+"_cr.txt"
+ if ou == None :
+ fileName=fichier.split(".")[0]+"_reecrit.comm"
+ fn=fichier.split(".")[0]+"_cr.txt"
else :
- f=fichier.split(".")[0]+"_reecrit.comm"
- f1=os.path.basename(f)
- fn=fichier.split(".")[0]+"_cr.txt"
- f2=os.path.basename(fn)
- fileName=os.path.join(ou,f1)
- fileCr=os.path.join(ou,f2)
+ f=fichier.split(".")[0]+"_reecrit.comm"
+ f1=os.path.basename(f)
+ fn=fichier.split(".")[0]+"_cr.txt"
+ f2=os.path.basename(fn)
+ fileName=os.path.join(ou,f1)
+ fileCr=os.path.join(ou,f2)
debut=False
if debug :
- import cProfile, pstats, StringIO
- pr = cProfile.Profile()
- pr.enable()
- monEditeur.saveFileAs(fileName=fileName)
- pr.disable()
- s = StringIO.StringIO()
- sortby = 'cumulative'
- ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
- ps.print_stats()
- print (s.getValue())
+ import cProfile, pstats, StringIO
+ pr = cProfile.Profile()
+ pr.enable()
+ monEditeur.saveFileAs(fileName=fileName)
+ pr.disable()
+ s = StringIO.StringIO()
+ sortby = 'cumulative'
+ ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
+ ps.print_stats()
+ print (s.getValue())
elif not leger : monEditeur.saveFileAs(fileName=fileName)
else : monEditeur.saveFileLegerAs(fileName=fileName)
if cr:
- f = open(fileCr, 'w')
- f.write(str(monEditeur.jdc.report()))
- f.close()
+ f = open(fileCr, 'w')
+ f.write(str(monEditeur.jdc.report()))
+ f.close()
def lanceEficas_param(code='Adao',fichier=None,version='V0',macro='ASSIMILATION_STUDY'):
"""
from . import readercata
if not hasattr ( Eficas, 'readercata'):
- monreadercata = readercata.ReaderCata( parent, Eficas )
- Eficas.readercata=monreadercata
+ monreadercata = readercata.ReaderCata( parent, Eficas )
+ Eficas.readercata=monreadercata
from .editor import JDCEditor
monEditeur=JDCEditor(Eficas,fichier)
jdc = ""
for line in fcomm.readlines():
if not (line[0]=='#'):
- jdc+="%s"%line
+ jdc+="%s"%line
# Warning, we have to make sure that the jdc comes as a simple
# string without any extra spaces/newlines
import sys
sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
lanceEficas(code=None,multi=True)
-
-
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except :
- pass
+ pass
import types,os
import traceback
from .qtSaisie import SaisieValeur
nomMax=230
-# empirique les metrics ne fonctionnent pas
+# empirique les metrics ne fonctionnent pas
# ---------------------------------------------------------------------- #
class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
# --------------------------------------------------------------------- #
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- #print ("Feuille", monSimpDef,nom,objSimp)
- QWidget.__init__(self,None)
- self.node=node
- self.node.fenetre=self
-
- # on se positionne pour les icones
- #os.chdir(os.path.abspath(os.path.join(os.path.dirname(__file__))))
- self.setupUi(self)
- self.prendLeFocus=0
-
- maPolice= QFont("Times", 10)
- self.setFont(maPolice)
- self.setFocusPolicy(Qt.StrongFocus)
-
- self.parentQt=parentQt
- self.editor=self.node.editor
- self.appliEficas=self.editor.appliEficas
- self.repIcon=self.appliEficas.repIcon
- self.monSimpDef=monSimpDef
- self.nom=nom
- self.objSimp=objSimp
- self.node.fenetre=self
- self.maCommande=commande
-
- self.aRedimensionner=0
- self.setSuggestion()
- self.setValeurs()
- self.setNom()
- self.setValide()
- self.setIconePoubelle()
- self.setIconesFichier()
- self.setIconesSalome()
- self.setIconesGenerales()
- self.setCommentaire()
- self.setZoneInfo()
-
-
- def setNom(self):
- self.debutToolTip=""
- nomTraduit=tr(self.objSimp.nom)
- #metrix= QFontMetrics(self.label.font())
- #maxLongueur = self.label.width() - 2
- #print ('______________________')
- #print (nomTraduit)
- #print (self.label.font().pixelSize())
- #longueur2 = metrix.boundingRect(nomTraduit).width()
- longueur=QFontMetrics(self.label.font()).width(nomTraduit)
- if longueur >= nomMax :
- nouveauNom=self.formate(nomTraduit)
- self.label.setText(nouveauNom)
- else :
- self.label.setText(nomTraduit)
- #clidedText = metrics.elidedText(text, Qt.ElideRight, label.width());
- #if (clippedText != nomTraduit): self.label.setToolTip(nomTraduit)
- #self.label.setText(clippedText)
-
- #def agrandit(self):
- # inutile pour certains widgets
- # if self.height() < 40 :
- # self.setMinimumHeight(50)
- # self.resize(self.width(),200)
-
- #def mousePressEvent(self, event):
- #print 'mousePressEvent'
- #import inspect
- #print (inspect.getmro(self.__class__))
- #self.__class__.mousePressEvent(self, event)
-
-
-
- def setValeurs(self):
- # print "passe dans setValeurs pour ", self.objSimp.nom
- # print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ #print ("Feuille", monSimpDef,nom,objSimp)
+ QWidget.__init__(self,None)
+ self.node=node
+ self.node.fenetre=self
+
+ # on se positionne pour les icones
+ #os.chdir(os.path.abspath(os.path.join(os.path.dirname(__file__))))
+ self.setupUi(self)
+ self.prendLeFocus=0
+
+ maPolice= QFont("Times", 10)
+ self.setFont(maPolice)
+ self.setFocusPolicy(Qt.StrongFocus)
+
+ self.parentQt=parentQt
+ self.editor=self.node.editor
+ self.appliEficas=self.editor.appliEficas
+ self.repIcon=self.appliEficas.repIcon
+ self.monSimpDef=monSimpDef
+ self.nom=nom
+ self.objSimp=objSimp
+ self.node.fenetre=self
+ self.maCommande=commande
+
+ self.aRedimensionner=0
+ self.setSuggestion()
+ self.setValeurs()
+ self.setNom()
+ self.setValide()
+ self.setIconePoubelle()
+ self.setIconesFichier()
+ self.setIconesSalome()
+ self.setIconesGenerales()
+ self.setCommentaire()
+ self.setZoneInfo()
+ self.setUnite()
+ self.setUQ()
+
+
+ def setUnite(self):
+ if self.monSimpDef.unite == None :
+ if hasattr( self,'lineEditUnite') : self.lineEditUnite.setText(' ')
+ else :
+ if hasattr( self,'lineEditUnite') : self.lineEditUnite.setText(self.monSimpDef.unite)
+ else : self.editor.informe('Erreur de Catalogue','Champ Unite non prevu pour '+ self.nom + ' correction du catalogue souhaitable, prevenez la maintenance', False)
+
+ def setUQ(self):
+ if not (self.editor.appliEficas.maConfiguration.afficheUQ) and hasattr(self,'checkBoxUQ') :
+ self.checkBoxUQ.close()
+ return
+ if not self.monSimpDef.UQPossible():
+ self.checkBoxUQ.close()
+ return
+ if self.objSimp.isUQActivate() and hasattr(self,'checkBoxUQ') :
+ self.checkBoxUQ.setChecked(True)
+
+ def setNom(self):
+ self.debutToolTip=""
+ nomTraduit=tr(self.objSimp.nom)
+ #metrix= QFontMetrics(self.label.font())
+ #maxLongueur = self.label.width() - 2
+ #print ('______________________')
+ #print (nomTraduit)
+ #print (self.label.font().pixelSize())
+ #longueur2 = metrix.boundingRect(nomTraduit).width()
+ longueur=QFontMetrics(self.label.font()).width(nomTraduit)
+ if longueur >= nomMax :
+ nouveauNom=self.formate(nomTraduit)
+ self.label.setText(nouveauNom)
+ else :
+ self.label.setText(nomTraduit)
+ #clidedText = metrics.elidedText(text, Qt.ElideRight, label.width());
+ #if (clippedText != nomTraduit): self.label.setToolTip(nomTraduit)
+ #self.label.setText(clippedText)
+
+ #def agrandit(self):
+ # inutile pour certains widgets
+ # if self.height() < 40 :
+ # self.setMinimumHeight(50)
+ # self.resize(self.width(),200)
+
+ #def mousePressEvent(self, event):
+ #print 'mousePressEvent'
+ #import inspect
+ #print (inspect.getmro(self.__class__))
+ #self.__class__.mousePressEvent(self, event)
+
+
+
+ def setValeurs(self):
+ # print "passe dans setValeurs pour ", self.objSimp.nom
+ # print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
pass
- def finCommentaire(self):
- return ""
+ def finCommentaire(self):
+ return ""
+
-
- def finCommentaireListe(self):
+ def finCommentaireListe(self):
commentaire=""
mc = self.node.item.get_definition()
d_aides = { 'TXM' : 'chaines de caracteres',
'C' : 'complexes'}
type = mc.type[0]
if not type in d_aides :
- if mc.min == mc.max:
- commentaire=tr("Entrez ")+str(mc.min)+tr(" valeurs ")+'\n'
- else :
- if mc.max != "**" :
- commentaire=tr("entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")+'\n'
- else :
- commentaire=""
+ if mc.min == mc.max:
+ commentaire=tr("Entrez ")+str(mc.min)+tr(" valeurs ")+'\n'
+ else :
+ if mc.max != "**" :
+ commentaire=tr("entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")+'\n'
+ else :
+ commentaire=""
else :
- if mc.min == mc.max:
- commentaire=tr("Entrez ")+str(mc.min)+" "+tr(d_aides[type])+'\n'
- elif mc.max == float('inf') :
- commentaire=tr("Entrez une liste de ") + tr(d_aides[type])+'\n'
- else :
- commentaire=tr("Entrez entre ")+"\n"+str(mc.min)+(" et ")+str(mc.max) +" " +tr(d_aides[type])+'\n'
+ if mc.min == mc.max:
+ commentaire=tr("Entrez ")+str(mc.min)+" "+tr(d_aides[type])+'\n'
+ elif mc.max == float('inf') :
+ commentaire=tr("Entrez une liste de ") +" "+tr(d_aides[type])+'\n'
+ else :
+ commentaire=tr("Entrez entre ")+"\n"+str(mc.min)+(" et ")+str(mc.max) +" " +tr(d_aides[type])+'\n'
aideval=self.node.item.aide()
- commentaire=commentaire + tr(aideval)
+ commentaire=commentaire + tr(aideval)
return str(commentaire)
- def setSuggestion(self):
- if self.monSimpDef.getSug() != None and self.monSimpDef.getSug() != "":
- suggere=str('<html><head/><body><p><span style=" font-size:8pt;">suggestion : ')+str(self.monSimpDef.getSug())+"</span></p></body></html>"
- if hasattr(self,'lineEditVal'): self.lineEditVal.setToolTip(suggere)
-
- def setCommentaire(self):
- c = self.debutToolTip
- #if self.node.item.definition.validators : c+=self.node.item.definition.validators.aide()
- self.aide=c
- if self.objSimp.getFr() != None and self.objSimp.getFr() != "":
- #c2 = '<html><head/><body><p>'+c+self.objSimp.getFr().decode('latin-1','replace')+"</p></body></html>"
- c2 = '<html><head/><body><p>'+c+self.objSimp.getFr()
- #c2 = '<html><head/><body><p>'+c+self.objSimp.getFr()+"</p></body></html>"
- self.label.setToolTip(c2)
- #self.aide=self.objSimp.getFr().decode('latin-1','ignore')+" "+c
- self.aide=self.objSimp.getFr()+" "+c
- else :
- c+=self.finCommentaire()
- if c != "" and c != None :
- self.aide=c
- #c=str('<html><head/><body><p><span style=" font-size:8pt; ">')+c+"</span></p></body></html>"
- c=str('<html><head/><body><p>')+c+"</p></body></html>"
- self.label.setToolTip(c)
-
- if self.editor.maConfiguration.differencieSiDefaut :
+ def setSuggestion(self):
+ if self.monSimpDef.getSug() != None and self.monSimpDef.getSug() != "":
+ suggere=str('<html><head/><body><p><span style=" font-size:8pt;">suggestion : ')+str(self.monSimpDef.getSug())+"</span></p></body></html>"
+ if hasattr(self,'lineEditVal'): self.lineEditVal.setToolTip(suggere)
+
+ def setCommentaire(self):
+ c = self.debutToolTip
+ #if self.node.item.definition.validators : c+=self.node.item.definition.validators.aide()
+ self.aide=c
+ if self.objSimp.getFr() != None and self.objSimp.getFr() != "":
+ #c2 = '<html><head/><body><p>'+c+self.objSimp.getFr().decode('latin-1','replace')+"</p></body></html>"
+ c2 = '<html><head/><body><p>'+c+self.objSimp.getFr()
+ #c2 = '<html><head/><body><p>'+c+self.objSimp.getFr()+"</p></body></html>"
+ self.label.setToolTip(c2)
+ #self.aide=self.objSimp.getFr().decode('latin-1','ignore')+" "+c
+ self.aide=self.objSimp.getFr()+" "+c
+ else :
+ c+=self.finCommentaire()
+ if c != "" and c != None :
+ self.aide=c
+ #c=str('<html><head/><body><p><span style=" font-size:8pt; ">')+c+"</span></p></body></html>"
+ c=str('<html><head/><body><p>')+c+"</p></body></html>"
+ self.label.setToolTip(c)
+
+ if self.editor.maConfiguration.differencieSiDefaut :
self.label.setToolTip('defaut : ' + tr(str(self.node.item.object.definition.defaut)))
- def showEvent(self, event):
- if self.prendLeFocus==1 :
- self.activateWindow()
- "il faut deriver le showEvent pour" , self.nom
- self.prendLeFocus=0
- QWidget.showEvent(self,event)
-
- def aideALaSaisie(self):
- mc = self.node.item.get_definition()
- mctype = mc.type[0]
- d_aides = { 'TXM' : tr(u"chaine de caracteres"),
- 'R' : tr("reel"),
- 'I' : tr("entier"),
- 'C' : tr("complexe"),
- 'Matrice' : tr(u'Matrice'),
- 'Fichier' : tr(u'fichier'),
- 'FichierNoAbs' : tr(u'fichier existant'),
- 'Repertoire' : tr(u'repertoire')}
-
- if mc.min == mc.max: commentaire=tr("Entrez ")+" "+str(mc.min)+" "
- else : commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)
-
- try :
- if issubclass(mctype,object) : ctype = getattr(mctype, 'help_message', tr("Type de base inconnu"))
- else : ctype = d_aides.get(mctype, tr("Type de base inconnu"))
- except:
- ctype = d_aides.get(mctype, tr("Type de base inconnu"))
- if ctype == tr("Type de base inconnu") and "Tuple" in str(mctype): ctype=str(mctype)
-
- commentaire+=ctype
- if mc.max!=1 : commentaire+="s"
- return commentaire
-
- def setZoneInfo(self):
- # info=str(self.nom)+' '
- # if self.monSimpDef.getFr() != None and self.monSimpDef.getFr() != "": info+=self.monSimpDef.getSug() +" "
- # if self.monSimpDef.getSug() != None and self.monSimpDef.getSug() != "": info+="Valeur suggeree : "self.monSimpDef.getSug()
- pass
-
- def reaffiche(self):
-
- if self.editor.jdc.aReafficher==True :
- self.parentQt.reaffiche()
-
- #PN PN PN pas satisfaisant
- #nodeAVoir=self.parentQt.node.chercheNoeudCorrespondant(self.objSimp)
- #print nodeAVoir.fenetre
- #print "nodeAVoir.fenetre.isVisible()", nodeAVoir.fenetre.isVisible()
- #if nodeAVoir.fenetre.isVisible() : return
- #self.editor.fenetreCentraleAffichee.rendVisibleNoeud(nodeAVoir)
- #nodeAVoir.fenetre.setFocus()
- # return # on est bien postionne
-
- if self.objSimp.isValid() and hasattr(self, 'AAfficher'):
- nodeAVoir=self.parentQt.node.chercheNoeudCorrespondant(self.objSimp)
- try :
- index=self.editor.fenetreCentraleAffichee.listeAffichageWidget.index(nodeAVoir.fenetre.AAfficher)
- if (index==len(self.editor.fenetreCentraleAffichee.listeAffichageWidget)-1) :
- try :
- nodeAVoir.fenetre.setValeursApresBouton()
- except :
- pass
- else :
- self.editor.fenetreCentraleAffichee.afficheSuivant(nodeAVoir.fenetre.AAfficher)
- except :
- pass
- else :
- if self.objSimp.isValid() and hasattr(self, 'AAfficher'):
- try :
- self.setValeursApresBouton()
- except :
- pass
- self.editor.fenetreCentraleAffichee.afficheSuivant(self.AAfficher)
- else :
- if hasattr(self, 'AAfficher'): self.AAfficher.setFocus(7)
-
- def reaffichePourDeplier(self):
- self.parentQt.reaffiche()
-
- def rendVisible(self):
- pass
-
- #def enterEvent(self,event):
- # print "je passe dans enterEvent", self.nom
- # QWidget.enterEvent(self,event)
-
- def traiteClicSurLabel(self,texte):
- #aide=self.aide.encode('latin-1', 'ignore').decode('latin-1')+"\n"+self.aideALaSaisie().encode('latin-1', 'ignore').decode('latin-1')
- try :
- aide=self.aide+"\n"+self.aideALaSaisie()
- except :
- aide=self.aideALaSaisie()
- self.editor.afficheCommentaire(aide)
-
- def formate(self,t):
- l=len(t)//2
- newText=t[0:l]+'-\n'+t[l:]
- return newText
-
-
-
+ def showEvent(self, event):
+ if self.prendLeFocus==1 :
+ self.activateWindow()
+ "il faut deriver le showEvent pour" , self.nom
+ self.prendLeFocus=0
+ QWidget.showEvent(self,event)
+
+ def aideALaSaisie(self):
+ mc = self.node.item.get_definition()
+ mctype = mc.type[0]
+ d_aides = { 'TXM' : tr(u"chaine de caracteres"),
+ 'R' : tr("reel"),
+ 'I' : tr("entier"),
+ 'C' : tr("complexe"),
+ 'Matrice' : tr(u'Matrice'),
+ 'Fichier' : tr(u'fichier'),
+ 'FichierNoAbs' : tr(u'fichier existant'),
+ 'Repertoire' : tr(u'repertoire')}
+
+ if mc.min == mc.max: commentaire=tr("Entrez ")+" "+str(mc.min)+" "
+ else : commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max) + " "
+
+ try :
+ if issubclass(mctype,object) : ctype = getattr(mctype, 'help_message', tr("Type de base inconnu"))
+ else : ctype = d_aides.get(mctype, tr("Type de base inconnu"))
+ except:
+ ctype = d_aides.get(mctype, tr("Type de base inconnu"))
+ if ctype == tr("Type de base inconnu") and "Tuple" in str(mctype): ctype=str(mctype)
+ if ctype == tr("Type de base inconnu") and "bool" in str(mctype): ctype='bool'
+
+ if mc.max!=1 :
+ if ctype == 'chaine de caractere' and mc.max>1 : ctype = 'chaines de caractere'
+ else : ctype = ctype + 's'
+ commentaire+=ctype
+ if mc.max!=1 : commentaire+="s"
+ return commentaire
+
+ def setZoneInfo(self):
+ # info=str(self.nom)+' '
+ # if self.monSimpDef.getFr() != None and self.monSimpDef.getFr() != "": info+=self.monSimpDef.getSug() +" "
+ # if self.monSimpDef.getSug() != None and self.monSimpDef.getSug() != "": info+="Valeur suggeree : "self.monSimpDef.getSug()
+ pass
+
+ def reaffiche(self):
+
+ if self.editor.jdc.aReafficher==True :
+ self.parentQt.reaffiche()
+
+ #PN PN PN pas satisfaisant
+ #nodeAVoir=self.parentQt.node.chercheNoeudCorrespondant(self.objSimp)
+ #print nodeAVoir.fenetre
+ #print "nodeAVoir.fenetre.isVisible()", nodeAVoir.fenetre.isVisible()
+ #if nodeAVoir.fenetre.isVisible() : return
+ #self.editor.fenetreCentraleAffichee.rendVisibleNoeud(nodeAVoir)
+ #nodeAVoir.fenetre.setFocus()
+ # return # on est bien postionne
+
+ if self.objSimp.isValid() and hasattr(self, 'AAfficher'):
+ nodeAVoir=self.parentQt.node.chercheNoeudCorrespondant(self.objSimp)
+ try :
+ index=self.editor.fenetreCentraleAffichee.listeAffichageWidget.index(nodeAVoir.fenetre.AAfficher)
+ if (index==len(self.editor.fenetreCentraleAffichee.listeAffichageWidget)-1) :
+ try :
+ nodeAVoir.fenetre.setValeursApresBouton()
+ except :
+ pass
+ else :
+ self.editor.fenetreCentraleAffichee.afficheSuivant(nodeAVoir.fenetre.AAfficher)
+ except :
+ pass
+ else :
+ if self.objSimp.isValid() and hasattr(self, 'AAfficher'):
+ try :
+ self.setValeursApresBouton()
+ except :
+ pass
+ self.editor.fenetreCentraleAffichee.afficheSuivant(self.AAfficher)
+ else :
+ if hasattr(self, 'AAfficher'): self.AAfficher.setFocus(7)
+
+ def reaffichePourDeplier(self):
+ self.parentQt.reaffiche()
+
+ def rendVisible(self):
+ pass
+
+ #def enterEvent(self,event):
+ # print "je passe dans enterEvent", self.nom
+ # QWidget.enterEvent(self,event)
+
+ def traiteClicSurLabel(self,texte):
+ #aide=self.aide.encode('latin-1', 'ignore').decode('latin-1')+"\n"+self.aideALaSaisie().encode('latin-1', 'ignore').decode('latin-1')
+ try :
+ aide=self.aide+"\n"+self.aideALaSaisie()
+ except :
+ aide=self.aideALaSaisie()
+ self.editor.afficheCommentaire(aide)
+
+ def formate(self,t):
+ l=len(t)//2
+ newText=t[0:l]+'-\n'+t[l:]
+ return newText
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import types,os,re,sys
class FacultatifOuOptionnel(object):
- def setReglesEtAide(self):
- listeRegles=()
- try :
- listeRegles = self.node.item.getRegles()
- except :
- pass
- if hasattr(self,"RBRegle"):
- if listeRegles==() : self.RBRegle.close()
+ def setReglesEtAide(self):
+ listeRegles=()
+ try :
+ listeRegles = self.node.item.getRegles()
+ except :
+ pass
+ if hasattr(self,"RBRegle"):
+ if listeRegles==() : self.RBRegle.close()
+ else :
+ icon3=QIcon(self.repIcon+"/lettreRblanc30.png")
+ self.RBRegle.setIcon(icon3)
+ self.RBRegle.clicked.connect(self.viewRegles)
+
+ cle_doc=None
+ if not hasattr(self,"RBInfo"):return
+ icon=QIcon(self.repIcon+"/point-interrogation30.png")
+ self.RBInfo.setIcon(icon)
+
+ from .monWidgetCommande import MonWidgetCommande
+ if isinstance(self,MonWidgetCommande) and self.editor.code =="MAP":
+ self.cle_doc = self.chercheDocMAP()
else :
- icon3=QIcon(self.repIcon+"/lettreRblanc30.png")
- self.RBRegle.setIcon(icon3)
- self.RBRegle.clicked.connect(self.viewRegles)
-
- cle_doc=None
- if not hasattr(self,"RBInfo"):return
- icon=QIcon(self.repIcon+"/point-interrogation30.png")
- self.RBInfo.setIcon(icon)
-
- from .monWidgetCommande import MonWidgetCommande
- if isinstance(self,MonWidgetCommande) and self.editor.code =="MAP":
- self.cle_doc = self.chercheDocMAP()
- else :
- self.cle_doc = self.node.item.getDocu()
- if self.cle_doc == None : self.RBInfo.close()
- else : self.RBInfo.clicked.connect (self.viewDoc)
-
-
- def chercheDocMAP(self):
- try :
- clef=self.editor.maConfiguration.adresse+"/"
- except :
- return None
- for k in self.editor.readercata.cata.JdC.dict_groupes:
- if self.obj.nom in self.editor.readercata.cata.JdC.dict_groupes[k]:
- clef+=k
- break
- clef+="/"+ self.obj.nom[0:-5].lower()+"/spec_"+self.obj.nom[0:-5].lower()+".html"
-
- return clef
-
- def viewDoc(self):
- try :
- if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.cle_doc
- else : cmd="start "+self.cle_doc
- os.system(cmd)
- except:
- QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
-
- def viewRegles(self):
- self.node.appellebuildLBRegles()
-
-
- def setIconePoubelle(self):
- if not(hasattr(self,"RBPoubelle")):return
-
- if self.node.item.object.isOblig() and not( hasattr(self.node.item.object,'isDeletable') ):
- icon=QIcon(self.repIcon+"/deleteRondVide.png")
- self.RBPoubelle.setIcon(icon)
- return
- icon=QIcon(self.repIcon+"/deleteRond.png")
- self.RBPoubelle.setIcon(icon)
- self.RBPoubelle.clicked.connect(self.aDetruire)
-
- def setIconesSalome(self):
- if not (hasattr(self,"RBSalome")): return
- from Accas import SalomeEntry
- mc = self.node.item.get_definition()
- mctype = mc.type[0]
- enable_salome_selection = self.editor.salome and \
- (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \
- (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection))
-
- if enable_salome_selection:
- icon=QIcon(self.repIcon+"/flecheSalome.png")
- self.RBSalome.setIcon(icon)
- self.RBSalome.pressed.connect(self.BSalomePressed)
+ self.cle_doc = self.node.item.getDocu()
+ if self.cle_doc == None : self.RBInfo.close()
+ else : self.RBInfo.clicked.connect (self.viewDoc)
+
+
+ def chercheDocMAP(self):
+ try :
+ clef=self.editor.maConfiguration.adresse+"/"
+ except :
+ return None
+ for k in self.editor.readercata.cata.JdC.dict_groupes:
+ if self.obj.nom in self.editor.readercata.cata.JdC.dict_groupes[k]:
+ clef+=k
+ break
+ clef+="/"+ self.obj.nom[0:-5].lower()+"/spec_"+self.obj.nom[0:-5].lower()+".html"
+
+ return clef
+
+ def viewDoc(self):
+ try :
+ if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.cle_doc
+ else : cmd="start "+self.cle_doc
+ os.system(cmd)
+ except:
+ QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
+
+ def viewRegles(self):
+ self.node.appellebuildLBRegles()
+
+
+ def setIconePoubelle(self):
+ if not(hasattr(self,"RBPoubelle")):return
+
+ if self.node.item.object.isOblig() and not( hasattr(self.node.item.object,'isDeletable') ):
+ icon=QIcon(self.repIcon+"/deleteRondVide.png")
+ self.RBPoubelle.setIcon(icon)
+ return
+ icon=QIcon(self.repIcon+"/deleteRond.png")
+ self.RBPoubelle.setIcon(icon)
+ self.RBPoubelle.clicked.connect(self.aDetruire)
+
+ def setIconesSalome(self):
+ if not (hasattr(self,"RBSalome")): return
+ from Accas import SalomeEntry
+ mc = self.node.item.get_definition()
+ mctype = mc.type[0]
+ enable_salome_selection = self.editor.salome and \
+ (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \
+ (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection))
+
+ if enable_salome_selection:
+ icon=QIcon(self.repIcon+"/flecheSalome.png")
+ self.RBSalome.setIcon(icon)
+ self.RBSalome.pressed.connect(self.BSalomePressed)
#PNPN --> Telemac A revoir surement
# cela ou le catalogue grpma ou salomeEntry
- if not(('grma' in repr(mctype)) or ('grno' in repr(mctype))) or not(self.editor.salome):
- if hasattr(self,"RBSalomeVue") : self.RBSalomeVue.close()
- else :
- icon1=QIcon(self.repIcon+"/eye.png")
- self.RBSalomeVue.setIcon(icon1)
- self.RBSalomeVue.clicked.connect(self.BView2DPressed)
- else:
- self.RBSalome.close()
- self.RBSalomeVue.close()
-
-
- def setIconesFichier(self):
- if not ( hasattr(self,"BFichier")): return
- mc = self.node.item.get_definition()
- mctype = mc.type[0]
- if mctype == "FichierOuRepertoire":
- self.BFichierOuRepertoire=self.BFichier
- self.BFichierOuRepertoire.clicked.connect(self.BFichierOuRepertoirePressed)
- self.BVisuFichier.close()
- elif mctype == "Repertoire":
- self.BRepertoire=self.BFichier
- self.BRepertoire.clicked.connect(self.BRepertoirePressed)
- self.BVisuFichier.close()
- else :
- self.BFichier.clicked.connect(self.BFichierPressed)
- self.BVisuFichier.clicked.connect(self.BFichierVisu)
-
-
-
- def setIconesGenerales(self):
- repIcon=self.node.editor.appliEficas.repIcon
- if hasattr(self,"BVisuListe") :
- fichier=os.path.join(repIcon, 'plusnode.png')
- icon = QIcon(fichier)
- self.BVisuListe.setIcon(icon)
- if hasattr(self,"RBDeplie") :
- fichier=os.path.join(repIcon, 'plusnode.png')
- icon = QIcon(fichier)
- self.RBDeplie.setIcon(icon)
- if hasattr(self,"RBPlie") :
- fichier=os.path.join(repIcon, 'minusnode.png')
- icon = QIcon(fichier)
- self.RBPlie.setIcon(icon)
- if hasattr(self,"BVisuFichier") :
- fichier=os.path.join(repIcon, 'visuFichier.png')
- icon = QIcon(fichier)
- self.BVisuFichier.setIcon(icon)
-
-
-
- def setRun(self):
- if hasattr(self.editor.appliEficas, 'mesScripts') :
- if self.editor.code in self.editor.appliEficas.mesScripts :
- self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
- if self.obj.nom in self.dict_commandes_mesScripts :
- self.ajoutScript()
- icon=QIcon(self.repIcon+"/roue.png")
- if hasattr(self,"RBRun"):self.RBRun.setIcon(icon)
- return
- if hasattr(self,"RBRun"): self.RBRun.close()
- if hasattr(self,"CBScripts"): self.CBScripts.close()
-
-
- def aDetruire(self):
- self.node.delete()
-
- def setValide(self):
- if not(hasattr (self,'RBValide')) : return
- couleur=self.node.item.getIconName()
- monIcone = QIcon(self.repIcon+"/" + couleur + ".png")
- self.RBValide.setIcon(monIcone)
-
- # il faut chercher la bonne fenetre
- def rendVisible(self):
- #print "je passe par rendVisible de FacultatifOuOptionnel"
- #print self
- #print self.node.fenetre
- #print "return pour etre sure"
- return
- #PNPN
- newNode=self.node.treeParent.chercheNoeudCorrespondant(self.node.item.object)
- #print newNode
- self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(newNode.fenetre)
- #newNode.fenetre.setFocus()
-
-
- def ajoutScript(self):
+ if not(('grma' in repr(mctype)) or ('grno' in repr(mctype))) or not(self.editor.salome):
+ if hasattr(self,"RBSalomeVue") : self.RBSalomeVue.close()
+ else :
+ icon1=QIcon(self.repIcon+"/eye.png")
+ self.RBSalomeVue.setIcon(icon1)
+ self.RBSalomeVue.clicked.connect(self.BView2DPressed)
+ else:
+ self.RBSalome.close()
+ self.RBSalomeVue.close()
+
+
+ def setIconesFichier(self):
+ if not ( hasattr(self,"BFichier")): return
+ mc = self.node.item.get_definition()
+ mctype = mc.type[0]
+ if mctype == "FichierOuRepertoire":
+ self.BFichierOuRepertoire=self.BFichier
+ self.BFichierOuRepertoire.clicked.connect(self.BFichierOuRepertoirePressed)
+ self.BVisuFichier.close()
+ elif mctype == "Repertoire":
+ self.BRepertoire=self.BFichier
+ self.BRepertoire.clicked.connect(self.BRepertoirePressed)
+ self.BVisuFichier.close()
+ else :
+ self.BFichier.clicked.connect(self.BFichierPressed)
+ self.BVisuFichier.clicked.connect(self.BFichierVisu)
+
+
+
+ def setIconesGenerales(self):
+ repIcon=self.node.editor.appliEficas.repIcon
+ if hasattr(self,"BVisuListe") :
+ fichier=os.path.join(repIcon, 'plusnode.png')
+ icon = QIcon(fichier)
+ self.BVisuListe.setIcon(icon)
+ if hasattr(self,"RBDeplie") :
+ fichier=os.path.join(repIcon, 'plusnode.png')
+ icon = QIcon(fichier)
+ self.RBDeplie.setIcon(icon)
+ if hasattr(self,"RBPlie") :
+ fichier=os.path.join(repIcon, 'minusnode.png')
+ icon = QIcon(fichier)
+ self.RBPlie.setIcon(icon)
+ if hasattr(self,"BVisuFichier") :
+ fichier=os.path.join(repIcon, 'visuFichier.png')
+ icon = QIcon(fichier)
+ self.BVisuFichier.setIcon(icon)
+
+
+
+ def setRun(self):
+ if hasattr(self.editor.appliEficas, 'mesScripts') :
+ if self.editor.code in self.editor.appliEficas.mesScripts :
+ self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
+ if self.obj.nom in self.dict_commandes_mesScripts :
+ self.ajoutScript()
+ icon=QIcon(self.repIcon+"/roue.png")
+ if hasattr(self,"RBRun"):self.RBRun.setIcon(icon)
+ return
+ if hasattr(self,"RBRun"): self.RBRun.close()
+ if hasattr(self,"CBScripts"): self.CBScripts.close()
+
+
+ def aDetruire(self):
+ self.node.delete()
+
+ def setValide(self):
+ if not(hasattr (self,'RBValide')) : return
+ couleur=self.node.item.getIconName()
+ monIcone = QIcon(self.repIcon+"/" + couleur + ".png")
+ self.RBValide.setIcon(monIcone)
+
+ # il faut chercher la bonne fenetre
+ def rendVisible(self):
+ #print "je passe par rendVisible de FacultatifOuOptionnel"
+ #print self
+ #print self.node.fenetre
+ #print "return pour etre sure"
+ return
+ #PNPN
+ newNode=self.node.treeParent.chercheNoeudCorrespondant(self.node.item.object)
+ #print newNode
+ self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(newNode.fenetre)
+ #newNode.fenetre.setFocus()
+
+
+ def ajoutScript(self):
if not hasattr(self,'CBScripts') : return # Cas des Widgets Plies
self.dictCommandes={}
listeCommandes=self.dict_commandes_mesScripts[self.obj.nom]
if type(listeCommandes) != tuple: listeCommandes=(listeCommandes,)
i=0
for commande in listeCommandes :
- conditionSalome=commande[3]
- if (self.appliEficas.salome == 0 and conditionSalome == True): continue
- self.CBScripts.addItem(commande[1])
- self.dictCommandes[commande[1]]=i
- i=i+1
+ conditionSalome=commande[3]
+ if (self.appliEficas.salome == 0 and conditionSalome == True): continue
+ self.CBScripts.addItem(commande[1])
+ self.dictCommandes[commande[1]]=i
+ i=i+1
self.CBScripts.activated.connect(self.choixSaisi)
- def choixSaisi(self):
- fction=str(self.CBScripts.currentText())
- numero= self.dictCommandes[fction]
- self.node.appelleFonction(numero,nodeTraite=self.node)
- #self.reaffiche()
+ def choixSaisi(self):
+ fction=str(self.CBScripts.currentText())
+ numero= self.dictCommandes[fction]
+ self.node.appelleFonction(numero,nodeTraite=self.node)
+ #self.reaffiche()
class ContientIcones(object):
- def BFichierVisu(self):
- fichier=self.lineEditVal.text()
- if fichier == None or str(fichier)=="" : return
- from .monViewTexte import ViewText
- try :
- if sys.platform[0:5]=="linux" :
- #cmd="xdg-open "+ str(fichier)
- #changer pour marcher dans l'EDC
- #cmd="gedit "+ str(fichier)
- from os.path import splitext
- fileName,extension = splitext(fichier)
- if extension in self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions:
- cmd=self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions[extension] + " " + str(fichier)
- else: cmd="xdg-open "+ str(fichier)
- os.system(cmd)
- else :
- os.startfile(str(fichier))
- except:
- try :
- fp=open(fichier)
- txt=fp.read()
- nomFichier=QFileInfo(fichier).baseName()
- maVue=ViewText(self,entete=nomFichier)
- maVue.setText(txt)
- maVue.show()
- fp.close()
- except:
- QMessageBox.warning( None,
- tr("Visualisation Fichier "),
- tr("Impossibilite d'afficher le Fichier"),)
-
- def BFichierPressed(self):
- mctype = self.node.item.get_definition().type
- if len(mctype) > 1:
- filters = mctype[1]
- elif hasattr(mctype[0], "filters"):
- filters = mctype[0].filters
- else:
- filters = ""
- if len(mctype) > 2 and mctype[2] == "Sauvegarde":
- fichier = QFileDialog.getSaveFileName(self.appliEficas,
- tr('Sauvegarder Fichier'),
- self.appliEficas.maConfiguration.savedir,
- filters)
- else:
- #print(filters)
- fichier = QFileDialog.getOpenFileName(self.appliEficas,
- tr('Ouvrir Fichier'),
- self.appliEficas.maConfiguration.savedir,
- filters)
-
- fichier=fichier[0]
- if not(fichier == ""):
- ulfile = os.path.abspath(fichier)
- self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
- self.lineEditVal.setText(fichier)
- self.editor.afficheCommentaire(tr("Fichier selectionne"))
- self.LEvaleurPressed()
- if (QFileInfo(fichier).suffix() in listeSuffixe ):
- self.image=fichier
- if (not hasattr(self,"BSelectInFile")):
- try :
- self.BSelectInFile = QPushButton(self)
- self.BSelectInFile.setMinimumSize(QSize(140,40))
- self.BSelectInFile.setObjectName("BSelectInFile")
- self.gridLayout.addWidget(self.BSelectInFile,1,1,1,1)
- self.BSelectInFile.setText(tr("Selection"))
- self.BSelectInFile.clicked.connect(self.BSelectInFilePressed)
- except :
- pass
- else :
- self.BSelectInFile.setVisible(1)
-
- elif hasattr(self, "BSelectInFile"):
- self.BSelectInFile.setVisible(0)
-
- def BFichierOuRepertoirePressed(self):
- self.fileName=""
- self.file_dialog=QFileDialog()
- self.file_dialog.setFileMode(QFileDialog.Directory);
- self.file_dialog.setFileMode(QFileDialog.Directory|QFileDialog.ExistingFiles)
- self.file_dialog.setOption(QFileDialog.DontUseNativeDialog,True);
- self.file_dialog.setWindowTitle('Choose File or Directory')
- self.explore(self.file_dialog)
- self.file_dialog.exec_()
- if self.fileName == "" : return
- self.lineEditVal.setText(self.fileName)
- self.LEvaleurPressed()
-
-
- def explore(self,widget):
- for c in widget.children() :
- if isinstance(c, QTreeView) :
- c.clicked.connect (self.changeBoutonOpen)
- self.monTreeView=c
- try :
- if c.text() == "&Open" : self.monBoutonOpen=c
- except : pass
- self.explore(c)
-
-
- def changeBoutonOpen(self):
- self.monBoutonOpen.setEnabled(True)
- self.monBoutonOpen.setText("Choose")
- self.monBoutonOpen.clicked.connect(self.monBoutonOpenClicked)
- index = self.monTreeView.currentIndex();
- self.fileName2 = self.monTreeView.model().data(index)
-
- def monBoutonOpenClicked(self):
- try :
- self.fileName=self.file_dialog.selectedFiles()[0]
- except :
- self.fileName=self.file_dialog.directory().absolutePath()
- self.file_dialog.close()
- self.file_dialog=None
-
- def BRepertoirePressed(self):
- directory = QFileDialog.getExistingDirectory(self.appliEficas,
- directory = self.appliEficas.maConfiguration.savedir,
- options = QFileDialog.ShowDirsOnly)
-
- if not (directory == "") :
- absdir = os.path.abspath(directory)
- self.appliEficas.maConfiguration.savedir = os.path.dirname(absdir)
- self.lineEditVal.setText(directory)
- self.LEvaleurPressed()
-
- def BSelectInFilePressed(self):
- from monSelectImage import MonSelectImage
- MonSelectImage(file=self.image,parent=self).show()
-
-
-
- def BSalomePressed(self):
+ def BFichierVisu(self):
+ fichier=self.lineEditVal.text()
+ if fichier == None or str(fichier)=="" : return
+ from .monViewTexte import ViewText
+ try :
+ if sys.platform[0:5]=="linux" :
+ #cmd="xdg-open "+ str(fichier)
+ #changer pour marcher dans l'EDC
+ #cmd="gedit "+ str(fichier)
+ from os.path import splitext
+ fileName,extension = splitext(fichier)
+ if extension in self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions:
+ cmd=self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions[extension] + " " + str(fichier)
+ else: cmd="xdg-open "+ str(fichier)
+ os.system(cmd)
+ else :
+ os.startfile(str(fichier))
+ except:
+ try :
+ fp=open(fichier)
+ txt=fp.read()
+ nomFichier=QFileInfo(fichier).baseName()
+ maVue=ViewText(self,entete=nomFichier)
+ maVue.setText(txt)
+ maVue.show()
+ fp.close()
+ except:
+ QMessageBox.warning( None,
+ tr("Visualisation Fichier "),
+ tr("Impossibilite d'afficher le Fichier"),)
+
+ def BFichierPressed(self):
+ mctype = self.node.item.get_definition().type
+ if len(mctype) > 1:
+ filters = mctype[1]
+ elif hasattr(mctype[0], "filters"):
+ filters = mctype[0].filters
+ else:
+ filters = ""
+ if len(mctype) > 2 and mctype[2] == "Sauvegarde":
+ fichier = QFileDialog.getSaveFileName(self.appliEficas,
+ tr('Use File'),
+ self.appliEficas.maConfiguration.savedir,
+ filters)
+ else:
+ #print(filters)
+ fichier = QFileDialog.getOpenFileName(self.appliEficas,
+ tr('Ouvrir Fichier'),
+ self.appliEficas.maConfiguration.savedir,
+ filters)
+
+ fichier=fichier[0]
+ if not(fichier == ""):
+ ulfile = os.path.abspath(fichier)
+ self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+ self.lineEditVal.setText(fichier)
+ self.editor.afficheCommentaire(tr("Fichier selectionne"))
+ self.LEvaleurPressed()
+ if (QFileInfo(fichier).suffix() in listeSuffixe ):
+ self.image=fichier
+ if (not hasattr(self,"BSelectInFile")):
+ try :
+ self.BSelectInFile = QPushButton(self)
+ self.BSelectInFile.setMinimumSize(QSize(140,40))
+ self.BSelectInFile.setObjectName("BSelectInFile")
+ self.gridLayout.addWidget(self.BSelectInFile,1,1,1,1)
+ self.BSelectInFile.setText(tr("Selection"))
+ self.BSelectInFile.clicked.connect(self.BSelectInFilePressed)
+ except :
+ pass
+ else :
+ self.BSelectInFile.setVisible(1)
+
+ elif hasattr(self, "BSelectInFile"):
+ self.BSelectInFile.setVisible(0)
+
+ def BFichierOuRepertoirePressed(self):
+ self.fileName=""
+ self.file_dialog=QFileDialog()
+ self.file_dialog.setFileMode(QFileDialog.Directory);
+ self.file_dialog.setFileMode(QFileDialog.Directory|QFileDialog.ExistingFiles)
+ self.file_dialog.setOption(QFileDialog.DontUseNativeDialog,True);
+ self.file_dialog.setWindowTitle('Choose File or Directory')
+ self.explore(self.file_dialog)
+ self.file_dialog.exec_()
+ if self.fileName == "" : return
+ self.lineEditVal.setText(self.fileName)
+ self.LEvaleurPressed()
+
+
+ def explore(self,widget):
+ for c in widget.children() :
+ if isinstance(c, QTreeView) :
+ c.clicked.connect (self.changeBoutonOpen)
+ self.monTreeView=c
+ try :
+ if c.text() == "&Open" : self.monBoutonOpen=c
+ except : pass
+ self.explore(c)
+
+
+ def changeBoutonOpen(self):
+ self.monBoutonOpen.setEnabled(True)
+ self.monBoutonOpen.setText("Choose")
+ self.monBoutonOpen.clicked.connect(self.monBoutonOpenClicked)
+ index = self.monTreeView.currentIndex();
+ self.fileName2 = self.monTreeView.model().data(index)
+
+ def monBoutonOpenClicked(self):
+ try :
+ self.fileName=self.file_dialog.selectedFiles()[0]
+ except :
+ self.fileName=self.file_dialog.directory().absolutePath()
+ self.file_dialog.close()
+ self.file_dialog=None
+
+ def BRepertoirePressed(self):
+ directory = QFileDialog.getExistingDirectory(self.appliEficas,
+ directory = self.appliEficas.maConfiguration.savedir,
+ options = QFileDialog.ShowDirsOnly)
+
+ if not (directory == "") :
+ absdir = os.path.abspath(directory)
+ self.appliEficas.maConfiguration.savedir = os.path.dirname(absdir)
+ self.lineEditVal.setText(directory)
+ self.LEvaleurPressed()
+
+ def BSelectInFilePressed(self):
+ from monSelectImage import MonSelectImage
+ MonSelectImage(file=self.image,parent=self).show()
+
+
+
+ def BSalomePressed(self):
self.editor.afficheCommentaire("")
selection=[]
commentaire=""
if 'grma' in repr(kwType): kwType = "GROUP_MA"
if kwType in ("GROUP_NO","GROUP_MA"):
- selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+ selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
mc = self.node.item.get_definition()
if (isinstance(mc.type,tuple) and len(mc.type) > 1 and "(*.med)" in mc.type[1] ):
- selection, commentaire = self.appliEficas.selectMeshFile(editor=self.editor)
- #print selection, commentaire
- if commentaire != "" :
- QMessageBox.warning( None,
- tr("Export Med vers Fichier "),
- tr("Impossibilite d exporter le Fichier"),)
- return
- else :
- self.lineEditVal.setText(str(selection))
- return
+ selection, commentaire = self.appliEficas.selectMeshFile(editor=self.editor)
+ #print selection, commentaire
+ if commentaire != "" :
+ QMessageBox.warning( None,
+ tr("Export Med vers Fichier "),
+ tr("Impossibilite d exporter le Fichier"),)
+ return
+ else :
+ self.lineEditVal.setText(str(selection))
+ return
from Accas import SalomeEntry
if inspect.isclass(kwType) and issubclass(kwType, SalomeEntry):
- selection, commentaire = self.appliEficas.selectEntryFromSalome(kwType,editor=self.editor)
+ selection, commentaire = self.appliEficas.selectEntryFromSalome(kwType,editor=self.editor)
if commentaire !="" :
self.editor.afficheInfos(tr(str(commentaire)))
if selection == [] : return
min,max=self.node.item.getMinMax()
- if max > 1 :
- self.ajoutNValeur(selection)
- return
+ if max > 1 :
+ self.ajoutNValeur(selection)
+ return
monTexte=""
for geomElt in selection: monTexte=geomElt+","
self.lineEditVal.setText(str(monTexte))
self.LEvaleurPressed()
- def BView2DPressed(self):
+ def BView2DPressed(self):
try :
- # cas d un Simp de base
- valeur=self.lineEditVal.text()
+ # cas d un Simp de base
+ valeur=self.lineEditVal.text()
except :
- valeur=self.textSelected
+ valeur=self.textSelected
valeur = str(valeur)
if valeur == str("") : return
if valeur :
- ok, msgError = self.appliEficas.displayShape(valeur)
- if not ok:
- self.editor.afficheInfos(msgError,Qt.red)
+ ok, msgError = self.appliEficas.displayShape(valeur)
+ if not ok:
+ self.editor.afficheInfos(msgError,Qt.red)
- def BParametresPressed(self):
+ def BParametresPressed(self):
liste=self.node.item.getListeParamPossible()
from monListeParamPanel import MonListeParamPanel
MonListeParamPanel(liste=liste,parent=self).show()
-
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import types,os
# ---------------------- #
class LECustom(QLineEdit):
# ---------------------- #
- def __init__(self,parent,parentQt,i):
+ def __init__(self,parent,parentQt,i):
"""
Constructor
"""
self.numDsLaListe=-1
self.parentTuple=None
self.valeur=None
-
- def focusInEvent(self,event):
- #print ("dans focusInEvent de LECustom")
- self.parentQt.aEuLeFocus=True
- self.aEuLeFocus=True
- self.parentQt.LineEditEnCours=self
- self.parentQt.numLineEditEnCours=self.num
- self.parentQt.textSelected=self.text()
- self.setStyleSheet("border: 2px solid gray")
- QLineEdit.focusInEvent(self,event)
-
- def focusOutEvent(self,event):
- #print (self.aEuLeFocus)
- self.setStyleSheet("border: 0px")
- if self.dansUnTuple : self.setStyleSheet("background:rgb(235,235,235); border: 0px;")
- elif self.num % 2 == 1 : self.setStyleSheet("background:rgb(210,210,210)")
- else : self.setStyleSheet("background:rgb(235,235,235)")
- if self.aEuLeFocus:
- self.aEuLeFocus=False
- self.litValeur()
- if self.dansUnTuple : self.parentTuple.getValeur()
- QLineEdit.focusOutEvent(self,event)
-
-
- def litValeur(self):
- #print ("dans litValeur de LECustom")
- self.aEuLeFocus=False
- val=str(self.text())
- if str(val)=="" or val==None :
- self.valeur=None
- return
- try :
- valeur=eval(val,{})
- except :
- try :
- d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
- valeur=eval(val,d)
- except :
- valeur=val
- self.valeur=valeur
- #print ('self.valeur', self.valeur)
-
-
- def clean(self):
- self.setText("")
-
- def getValeur(self):
- #return self.text()
- self.litValeur()
- return self.valeur
-
- def setValeur(self,valeur):
- self.setText(valeur)
+ self.aEuLeFocus=True
+
+ def focusInEvent(self,event):
+ #print ("dans focusInEvent de LECustom")
+ self.parentQt.aEuLeFocus=True
+ self.aEuLeFocus=True
+ self.parentQt.lineEditEnCours=self
+ self.parentQt.numLineEditEnCours=self.num
+ self.parentQt.textSelected=self.text()
+ self.setStyleSheet("border: 2px solid gray")
+ QLineEdit.focusInEvent(self,event)
+
+ def focusOutEvent(self,event):
+ #print ('focusOutEvent', self.aEuLeFocus)
+ self.setStyleSheet("border: 0px")
+ if self.dansUnTuple : self.setStyleSheet("background:rgb(235,235,235); border: 0px;")
+ elif self.num % 2 == 1 : self.setStyleSheet("background:rgb(210,210,210)")
+ else : self.setStyleSheet("background:rgb(235,235,235)")
+ if self.aEuLeFocus:
+ self.aEuLeFocus=False
+ self.litValeur()
+ if self.dansUnTuple : self.parentTuple.getValeur()
+ QLineEdit.focusOutEvent(self,event)
+
+
+ def litValeur(self):
+ #print ("dans litValeur de LECustom")
+ self.aEuLeFocus=False
+ val=str(self.text())
+ if str(val)=="" or val==None :
+ self.valeur=None
+ return
+ try :
+ valeur=eval(val,{})
+ except :
+ try :
+ d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
+ valeur=eval(val,d)
+ except :
+ valeur=val
+ self.valeur=valeur
+ #print ('self.valeur', self.valeur)
+
+
+ def clean(self):
+ self.setText("")
+
+ def getValeur(self):
+ #return self.text()
+ self.litValeur()
+ return self.valeur
+
+ def setValeur(self,valeur):
+ self.setText(valeur)
# --------------------------- #
class LECustomTuple(LECustom):
# --------------------------- #
- def __init__(self,parent):
- # index sera mis a jour par TupleCustom
- parentQt=parent.parent().parent().parent()
- LECustom. __init__(self,parent,parentQt,0)
- #print (dir(self))
+ def __init__(self,parent):
+ # index sera mis a jour par TupleCustom
+ parentQt=parent.parent().parent().parent()
+ LECustom. __init__(self,parent,parentQt,0)
+ #print (dir(self))
# ---------------------------- #
class MonLabelListeClic(QLabel):
# ---------------------------- #
- def __init__(self,parent):
+ def __init__(self,parent):
QLabel.__init__(self,parent)
self.parent=parent
- def event(self,event) :
- if event.type() == QEvent.MouseButtonRelease:
+ def event(self,event) :
+ if event.type() == QEvent.MouseButtonRelease:
self.texte=self.text()
self.parent.traiteClicSurLabelListe(self.texte)
- return QLabel.event(self,event)
-
-
-
+ return QLabel.event(self,event)
# ------------- #
class GereListe(object):
# ------------- #
-
- def __init__(self):
- self.connecterSignaux()
-
-
- def connecterSignaux(self):
- if hasattr(self,'RBHaut'):
- self.RBHaut.clicked.connect(self.hautPushed)
- self.RBBas.clicked.connect(self.basPushed)
- self.RBMoins.clicked.connect(self.moinsPushed)
- self.RBPlus.clicked.connect(self.plusPushed)
- self.RBVoisListe.clicked.connect(self.voisListePushed)
- if hasattr(self,'PBAlpha'):
- self.PBCata.clicked.connect(self.cataPushed)
- self.PBAlpha.clicked.connect(self.alphaPushed)
- self.PBFind.clicked.connect(self.findPushed)
- self.LEFiltre.returnPressed.connect(self.LEFiltreReturnPressed)
- if hasattr(self, 'PBValideFeuille'):
- self.PBValideFeuille.clicked.connect(self.changeValeur)
-
- def filtreListe(self):
- l=[]
- if self.filtre != "" :
- for i in self.listeAAfficher :
- if i.find(self.filtre) == 0 :l.append(i)
- self.listeAAfficher=l
- if self.alpha : self.listeAAfficher.sort()
-
- def LEFiltreReturnPressed(self):
- self.filtre= self.LEFiltre.text()
- self.prepareListeResultatFiltre()
-
- def findPushed(self):
- self.filtre= self.LEFiltre.text()
- self.prepareListeResultatFiltre()
-
- def alphaPushed(self):
- #print "alphaPushed" ,self.alpha
- if self.alpha == 1 : return
- self.alpha=1
- self.prepareListeResultat()
-
- def cataPushed(self):
- if self.alpha == 0 : return
- self.alpha=0
- self.prepareListeResultat()
-
- def hautPushed(self):
- if self.numLineEditEnCours == 0 : return
- if self.numLineEditEnCours == 1 : return
- else : numEchange=self.numLineEditEnCours-1
- self.echange(self.numLineEditEnCours,numEchange)
- self.LineEditEnCours.setFocus(True)
- self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
-
-
- def basPushed(self):
- if self.numLineEditEnCours == 0 : return
- if self.numLineEditEnCours == self.indexDernierLabel : return
- else : numEchange=self.numLineEditEnCours+1
- self.echange(self.numLineEditEnCours,numEchange)
- self.LineEditEnCours.setFocus(True)
- self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
-
- def echange(self,num1,num2):
- # on donne le focus au a celui ou on a bouge
- # par convention le 2
- nomLineEdit=self.nomLine+str(num1)
- #print (nomLineEdit)
- courant=getattr(self,nomLineEdit)
- valeurAGarder=courant.text()
- nomLineEdit2=self.nomLine+str(num2)
- #print (nomLineEdit2)
- courant2=getattr(self,nomLineEdit2)
- courant.setText(courant2.text())
- courant2.setText(valeurAGarder)
- self.changeValeur(changeDePlace=False)
- self.numLineEditEnCours=num2
- self.LineEditEnCours=courant2
- self.LineEditEnCours.setFocus(True)
-
- def moinsPushed(self):
- # on supprime le dernier
- if self.numLineEditEnCours == 0 : return
- if self.indexDernierLabel == 0 : return
- if self.numLineEditEnCours==self.indexDernierLabel :
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
- courant=getattr(self,nomLineEdit)
- courant.clean()
- else :
- for i in range (self.numLineEditEnCours, self.indexDernierLabel):
- aRemonter=i+1
- nomLineEdit=self.nomLine+str(aRemonter)
- courant=getattr(self,nomLineEdit)
- valeurARemonter=courant.getValeur()
- nomLineEdit=self.nomLine+str(i)
- courant=getattr(self,nomLineEdit)
- if valeurARemonter != None : courant.setValeur(valeurARemonter)
- else : courant.clean()
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
- courant=getattr(self,nomLineEdit)
- courant.clean()
- self.changeValeur(changeDePlace=False,oblige=True)
- self.setValide()
-
- def plusPushed(self):
- if self.indexDernierLabel == self.monSimpDef.max:
- if len(self.listeValeursCourantes) < self.monSimpDef.max : self.chercheLigneVide()
- else : self.editor.afficheInfos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red)
- return
- self.ajoutLineEdit()
- self.descendLesLignes()
- self.chercheLigneVide()
- QTimer.singleShot(1, self.rendVisibleLigne)
-
- def chercheLigneVide(self):
- for i in range(self.indexDernierLabel) :
- nomLineEdit=self.nomLine+str(i+1)
- courant=getattr(self,nomLineEdit)
- valeur=courant.getValeur()
- if valeur=="" or valeur == None :
- courant.setFocus(True)
- self.estVisible=courant
- return
-
-
- def descendLesLignes(self):
- if self.numLineEditEnCours==self.indexDernierLabel : return
- nomLineEdit=self.nomLine+str(self.numLineEditEnCours+1)
- courant=getattr(self,nomLineEdit)
- valeurADescendre=courant.getValeur()
- courant.clean()
- for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
- aDescendre=i+1
- nomLineEdit=self.nomLine+str(aDescendre)
- courant=getattr(self,nomLineEdit)
- valeurAGarder=courant.getValeur()
- courant.setValeur(valeurADescendre)
- valeurADescendre=valeurAGarder
- self.changeValeur(changeDePlace=False)
- if hasattr (self, 'LineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
-
- def voisListePushed(self):
- texteValeurs=""
- for v in self.node.item.getListeValeurs():
- texteValeurs+=str(v)+", "
- entete="Valeurs pour "+self.nom
- f=ViewText(self,self.editor,entete,texteValeurs[0:-2])
- f.show()
-
-
- def selectInFile(self):
- init=str( self.editor.maConfiguration.savedir)
- fn = QFileDialog.getOpenFileName(self.node.appliEficas,
- tr("Fichier de donnees"),
- init,
- tr('Tous les Fichiers (*)',))
- fn=fn[0]
- if fn == None : return
- if fn == "" : return
- ulfile = os.path.abspath(fn)
- self.editor.maConfiguration.savedir=os.path.split(ulfile)[0]
-
- from .monSelectVal import MonSelectVal
- MonSelectVal(file=fn,parent=self).show()
-
- def noircirResultatFiltre(self):
- filtre=str(self.LEFiltre.text())
- for cb in self.listeCbRouge:
- palette = QPalette(Qt.red)
- palette.setColor(QPalette.WindowText,Qt.black)
- cb.setPalette(palette)
- t=cb.text()
- cb.setText(t)
- self.LEFiltre.setText("")
- self.listeCbRouge = []
+ def __init__(self):
+ self.connecterSignaux()
+
+ def connecterSignaux(self):
+ if hasattr(self,'RBHaut'):
+ self.RBHaut.clicked.connect(self.hautPushed)
+ self.RBBas.clicked.connect(self.basPushed)
+ self.RBMoins.clicked.connect(self.moinsPushed)
+ self.RBPlus.clicked.connect(self.plusPushed)
+ self.RBVoisListe.clicked.connect(self.voisListePushed)
+ if hasattr(self,'PBAlpha'):
+ self.PBCata.clicked.connect(self.cataPushed)
+ self.PBAlpha.clicked.connect(self.alphaPushed)
+ self.PBFind.clicked.connect(self.findPushed)
+ self.LEFiltre.returnPressed.connect(self.LEFiltreReturnPressed)
+ if hasattr(self, 'PBValideFeuille'):
+ self.PBValideFeuille.clicked.connect(self.changeValeur)
+
+ def filtreListe(self):
+ l=[]
+ if self.filtre != "" :
+ for i in self.listeAAfficher :
+ if i.find(self.filtre) == 0 :l.append(i)
+ self.listeAAfficher=l
+ if self.alpha : self.listeAAfficher.sort()
+
+ def LEFiltreReturnPressed(self):
+ self.filtre= self.LEFiltre.text()
+ self.prepareListeResultatFiltre()
+
+ def findPushed(self):
+ self.filtre= self.LEFiltre.text()
+ self.prepareListeResultatFiltre()
+
+ def alphaPushed(self):
+ #print "alphaPushed" ,self.alpha
+ if self.alpha == 1 : return
+ self.alpha=1
+ self.prepareListeResultat()
+
+ def cataPushed(self):
+ if self.alpha == 0 : return
+ self.alpha=0
+ self.prepareListeResultat()
+
+ def hautPushed(self):
+ #print ('hautPushed')
+ if self.numLineEditEnCours == 0 : return
+ if self.numLineEditEnCours == 1 : return
+ else : numEchange=self.numLineEditEnCours-1
+ self.echange(self.numLineEditEnCours,numEchange)
+ self.lineEditEnCours.setFocus(True)
+ self.scrollArea.ensureWidgetVisible(self.lineEditEnCours)
+
+
+ def basPushed(self):
+ #print ('hautPushed')
+ if self.numLineEditEnCours == 0 : return
+ if self.numLineEditEnCours == self.indexDernierLabel : return
+ else : numEchange=self.numLineEditEnCours+1
+ self.echange(self.numLineEditEnCours,numEchange)
+ self.lineEditEnCours.setFocus(True)
+ self.scrollArea.ensureWidgetVisible(self.lineEditEnCours)
+
+ def echange(self,num1,num2):
+ # on donne le focus au a celui ou on a bouge
+ # par convention le 2
+ #print ('echange')
+ nomLineEdit=self.nomLine+str(num1)
+ #print (nomLineEdit)
+ courant=getattr(self,nomLineEdit)
+ valeurAGarder=courant.text()
+ nomLineEdit2=self.nomLine+str(num2)
+ #print (nomLineEdit2)
+ courant2=getattr(self,nomLineEdit2)
+ courant.setText(courant2.text())
+ courant2.setText(valeurAGarder)
+ # pour monWidgetCreeUserAssd
+ self.num1=num1
+ self.num2=num2
+ self.changeValeur(changeDePlace=False)
+ self.numLineEditEnCours=num2
+ self.lineEditEnCours=courant2
+ self.lineEditEnCours.setFocus(True)
+
+ def moinsPushed(self):
+ # on supprime le dernier
+ #print ('moinsPushed')
+ if self.numLineEditEnCours == 0 : return
+ if self.indexDernierLabel == 0 : return
+ if self.numLineEditEnCours==self.indexDernierLabel :
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+ courant=getattr(self,nomLineEdit)
+ courant.clean()
+ else :
+ for i in range (self.numLineEditEnCours, self.indexDernierLabel):
+ aRemonter=i+1
+ nomLineEdit=self.nomLine+str(aRemonter)
+ courant=getattr(self,nomLineEdit)
+ valeurARemonter=courant.getValeur()
+ nomLineEdit=self.nomLine+str(i)
+ courant=getattr(self,nomLineEdit)
+ if valeurARemonter != None : courant.setValeur(valeurARemonter)
+ else : courant.clean()
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+ courant=getattr(self,nomLineEdit)
+ courant.clean()
+ self.changeValeur(changeDePlace=False,oblige=True)
+ self.setValide()
+
+ def plusPushed(self):
+ #print ('plusPushed gereliste')
+ if self.indexDernierLabel == self.monSimpDef.max:
+ if len(self.listeValeursCourantes) < self.monSimpDef.max : self.chercheLigneVide()
+ else : self.editor.afficheInfos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red)
+ return
+ self.ajoutLineEdit()
+ self.descendLesLignes()
+ self.chercheLigneVide()
+ QTimer.singleShot(1, self.rendVisibleLigne)
+
+ def chercheLigneVide(self):
+ #print ('chercheLigneVide')
+ for i in range(self.indexDernierLabel) :
+ nomLineEdit=self.nomLine+str(i+1)
+ courant=getattr(self,nomLineEdit)
+ valeur=courant.getValeur()
+ if valeur=="" or valeur == None :
+ courant.setFocus(True)
+ self.estVisible=courant
+
+ def descendLesLignes(self):
+ #print ('descendLesLignes')
+ if self.numLineEditEnCours==self.indexDernierLabel : return
+ nomLineEdit=self.nomLine+str(self.numLineEditEnCours+1)
+ courant=getattr(self,nomLineEdit)
+ valeurADescendre=courant.getValeur()
+ courant.clean()
+ for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
+ aDescendre=i+1
+ nomLineEdit=self.nomLine+str(aDescendre)
+ courant=getattr(self,nomLineEdit)
+ valeurAGarder=courant.getValeur()
+ courant.setValeur(valeurADescendre)
+ valeurADescendre=valeurAGarder
+ self.changeValeur(changeDePlace=False)
+ if hasattr (self, 'lineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.lineEditEnCours)
+
+ def voisListePushed(self):
+ texteValeurs=""
+ for v in self.node.item.getListeValeurs():
+ texteValeurs+=str(v)+", "
+ entete="Valeurs pour "+self.nom
+ f=ViewText(self,self.editor,entete,texteValeurs[0:-2])
+ f.show()
+
+
+ def selectInFile(self):
+ init=str( self.editor.maConfiguration.savedir)
+ fn = QFileDialog.getOpenFileName(self.node.appliEficas,
+ tr("Fichier de donnees"),
+ init,
+ tr('Tous les Fichiers (*)',))
+ fn=fn[0]
+ if fn == None : return
+ if fn == "" : return
+ ulfile = os.path.abspath(fn)
+ self.editor.maConfiguration.savedir=os.path.split(ulfile)[0]
+
+ from .monSelectVal import MonSelectVal
+ MonSelectVal(file=fn,parent=self).show()
+
+ def noircirResultatFiltre(self):
+ filtre=str(self.LEFiltre.text())
+ for cb in self.listeCbRouge:
+ palette = QPalette(Qt.red)
+ palette.setColor(QPalette.WindowText,Qt.black)
+ cb.setPalette(palette)
+ t=cb.text()
+ cb.setText(t)
+ self.LEFiltre.setText("")
+ self.listeCbRouge = []
# ----------- #
class GerePlie(object):
# ----------- #
- def gereIconePlier(self):
- if not(hasattr(self,'BFermeListe')) : return
- self.editor.listeDesListesOuvertes.add(self.node.item)
- repIcon=self.node.editor.appliEficas.repIcon
- if not (self.editor.afficheListesPliees):
- fichier=os.path.join(repIcon, 'empty.png')
- icon = QIcon(fichier)
- self.BFermeListe.setIcon(icon)
- return
- fichier=os.path.join(repIcon, 'minusnode.png')
- icon = QIcon(fichier)
- self.BFermeListe.setIcon(icon)
- self.BFermeListe.clicked.connect( self.selectWidgetPlie)
-
- def selectWidgetPlie(self):
- self.editor.listeDesListesOuvertes.remove(self.node.item)
- self.reaffichePourDeplier()
+ def gereIconePlier(self):
+ if not(hasattr(self,'BFermeListe')) : return
+ self.editor.listeDesListesOuvertes.add(self.node.item)
+ repIcon=self.node.editor.appliEficas.repIcon
+ if not (self.editor.afficheListesPliees):
+ fichier=os.path.join(repIcon, 'empty.png')
+ icon = QIcon(fichier)
+ self.BFermeListe.setIcon(icon)
+ return
+ fichier=os.path.join(repIcon, 'minusnode.png')
+ icon = QIcon(fichier)
+ self.BFermeListe.setIcon(icon)
+ self.BFermeListe.clicked.connect( self.selectWidgetPlie)
+
+ def selectWidgetPlie(self):
+ self.editor.listeDesListesOuvertes.remove(self.node.item)
+ self.reaffichePourDeplier()
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
- from builtins import object
+ from builtins import str
+ from builtins import range
+ from builtins import object
except : pass
import types,os
# ---------------------- #
class LECustom(QLineEdit):
# ---------------------- #
- def __init__(self,parent,parentQt,i):
+ def __init__(self,parent,parentQt,i):
"""
Constructor
"""
QLineEdit.__init__(self,parent)
-
+
self.valeur=None
self.aEuLeFocus=False
self.parentQt=parentQt
self.numDsLaListe=-1
self.returnPressed.connect(self.litValeur)
- def focusInEvent(self,event):
- #print ("dans focusInEvent de LECustom",self.parentQt)
- print ("dans focusInEvent de LECustom",self.num,self.numDsLaListe)
- self.parentQt.aEuLeFocus=True
- self.aEuLeFocus=True
- self.parentQt.LineEditEnCours=self
- self.parentQt.numLineEditEnCours=self.num
- self.parentQt.textSelected=self.text()
- self.setStyleSheet("border: 2px solid gray")
- QLineEdit.focusInEvent(self,event)
-
- def focusOutEvent(self,event):
- #print ("dans focusOutEvent de LECustom",self.num,self.numDsLaListe, self.aEuLeFocus)
- self.setStyleSheet("border: 0px")
- if self.dansUnTuple : self.setStyleSheet("background:rgb(235,235,235); border: 0px;")
- elif self.num % 2 == 1 : self.setStyleSheet("background:rgb(210,210,210)")
- else : self.setStyleSheet("background:rgb(235,235,235)")
-
- if self.aEuLeFocus:
- self.aEuLeFocus=False
- self.litValeur()
- QLineEdit.focusOutEvent(self,event)
-
- def litValeur(self):
- self.aEuLeFocus=False
- val=str(self.text())
- if str(val)=="" or val==None :
- self.valeur=None
- return
- try :
- valeur=eval(val,{})
- except :
- try :
- d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
- valeur=eval(val,d)
- except :
- valeur=val
-
- self.valeur=valeur
-
- def clean(self):
- self.setText("")
-
- def getValeur(self):
- return self.text()
-
- def setValeur(self,valeur):
- self.setText(valeur)
- self.valeur=valeur
-
- #def leaveEvent(self,event):
- # ne sert a rien. quand on modifie la valeur on prend le focus
-
-
+ def focusInEvent(self,event):
+ #print ("dans focusInEvent de LECustom",self.parentQt)
+ print ("dans focusInEvent de LECustom",self.num,self.numDsLaListe)
+ self.parentQt.aEuLeFocus=True
+ self.aEuLeFocus=True
+ self.parentQt.LineEditEnCours=self
+ self.parentQt.numLineEditEnCours=self.num
+ self.parentQt.textSelected=self.text()
+ self.setStyleSheet("border: 2px solid gray")
+ QLineEdit.focusInEvent(self,event)
+
+ def focusOutEvent(self,event):
+ #print ("dans focusOutEvent de LECustom",self.num,self.numDsLaListe, self.aEuLeFocus)
+ self.setStyleSheet("border: 0px")
+ if self.dansUnTuple : self.setStyleSheet("background:rgb(235,235,235); border: 0px;")
+ elif self.num % 2 == 1 : self.setStyleSheet("background:rgb(210,210,210)")
+ else : self.setStyleSheet("background:rgb(235,235,235)")
+
+ if self.aEuLeFocus:
+ self.aEuLeFocus=False
+ self.litValeur()
+ QLineEdit.focusOutEvent(self,event)
+
+ def litValeur(self):
+ self.aEuLeFocus=False
+ val=str(self.text())
+ if str(val)=="" or val==None :
+ self.valeur=None
+ return
+ try :
+ valeur=eval(val,{})
+ except :
+ try :
+ d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
+ valeur=eval(val,d)
+ except :
+ valeur=val
+
+ self.valeur=valeur
+
+ def clean(self):
+ self.setText("")
+
+ def getValeur(self):
+ return self.text()
+
+ def setValeur(self,valeur):
+ self.setText(valeur)
+ self.valeur=valeur
+
+ #def leaveEvent(self,event):
+ # ne sert a rien. quand on modifie la valeur on prend le focus
+
+
# --------------------------- #
class LECustomTuple(LECustom):
# --------------------------- #
- def __init__(self,parent):
- # index sera mis a jour par TupleCustom
- parentQt=parent.parent().parent().parent()
- LECustom. __init__(self,parent,parentQt,0)
- #print (dir(self))
+ def __init__(self,parent):
+ # index sera mis a jour par TupleCustom
+ parentQt=parent.parent().parent().parent()
+ LECustom. __init__(self,parent,parentQt,0)
+ #print (dir(self))
# ---------------------------- #
class MonLabelListeClic(QLabel):
# ---------------------------- #
- def __init__(self,parent):
+ def __init__(self,parent):
QLabel.__init__(self,parent)
self.parent=parent
- def event(self,event) :
- if event.type() == QEvent.MouseButtonRelease:
+ def event(self,event) :
+ if event.type() == QEvent.MouseButtonRelease:
self.texte=self.text()
self.parent.traiteClicSurLabelListe(self.texte)
- return QLabel.event(self,event)
+ return QLabel.event(self,event)
class GereListe(object):
# ------------- #
- def __init__(self):
- self.aEuLeFocus=False
- self.connecterSignaux()
-
-
- def leaveEvent(self,event):
- if self.aEuLeFocus :
- print ('appel de changeValeur')
- self.changeValeur()
- self.aEuLeFocus=False
- QWidget.leaveEvent(self,event)
-
- def connecterSignaux(self):
- if hasattr(self,'RBHaut'):
- self.RBHaut.clicked.connect(self.hautPushed)
- self.RBBas.clicked.connect(self.basPushed)
- self.RBMoins.clicked.connect(self.moinsPushed)
- self.RBPlus.clicked.connect(self.plusPushed)
- self.RBVoisListe.clicked.connect(self.voisListePushed)
- if hasattr(self,'PBAlpha'):
- self.PBCata.clicked.connect(self.cataPushed)
- self.PBAlpha.clicked.connect(self.alphaPushed)
- self.PBFind.clicked.connect(self.findPushed)
- self.LEFiltre.returnPressed.connect(self.LEFiltreReturnPressed)
-
- def filtreListe(self):
- l=[]
- if self.filtre != "" :
- for i in self.listeAAfficher :
- if i.find(self.filtre) == 0 :l.append(i)
- self.listeAAfficher=l
- if self.alpha : self.listeAAfficher.sort()
-
- def LEFiltreReturnPressed(self):
- self.filtre= self.LEFiltre.text()
- self.prepareListeResultatFiltre()
-
- def findPushed(self):
- self.filtre= self.LEFiltre.text()
- self.prepareListeResultatFiltre()
-
- def alphaPushed(self):
- #print "alphaPushed" ,self.alpha
- if self.alpha == 1 : return
- self.alpha=1
- self.prepareListeResultat()
-
- def cataPushed(self):
- if self.alpha == 0 : return
- self.alpha=0
- self.prepareListeResultat()
-
- def hautPushed(self):
- if self.numLineEditEnCours == 1 : return
- else : numEchange=self.numLineEditEnCours-1
- self.echange(self.numLineEditEnCours,numEchange)
- self.LineEditEnCours.setFocus(True)
- self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
-
-
- def basPushed(self):
- if self.numLineEditEnCours == self.indexDernierLabel : return
- else : numEchange=self.numLineEditEnCours+1
- self.echange(self.numLineEditEnCours,numEchange)
- self.LineEditEnCours.setFocus(True)
- self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
-
- def echange(self,num1,num2):
- # on donne le focus au a celui ou on a bouge
- # par convention le 2
- nomLineEdit=self.nomLine+str(num1)
- #print nomLineEdit
- courant=getattr(self,nomLineEdit)
- valeurAGarder=courant.text()
- nomLineEdit2=self.nomLine+str(num2)
- #print nomLineEdit2
- courant2=getattr(self,nomLineEdit2)
- courant.setText(courant2.text())
- courant2.setText(valeurAGarder)
- self.changeValeur(changeDePlace=False)
- self.numLineEditEnCours=num2
- self.LineEditEnCours=courant2
- self.LineEditEnCours.setFocus(True)
-
- def moinsPushed(self):
- # on supprime le dernier
- if self.numLineEditEnCours == 0 : return
- if self.indexDernierLabel == 0 : return
- if self.numLineEditEnCours==self.indexDernierLabel :
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
- courant=getattr(self,nomLineEdit)
- courant.clean()
- else :
- for i in range (self.numLineEditEnCours, self.indexDernierLabel):
- aRemonter=i+1
- nomLineEdit=self.nomLine+str(aRemonter)
- courant=getattr(self,nomLineEdit)
- valeurARemonter=courant.getValeur()
- nomLineEdit=self.nomLine+str(i)
- courant=getattr(self,nomLineEdit)
- if valeurARemonter != None : courant.setValeur(valeurARemonter)
- else : courant.clean()
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
- courant=getattr(self,nomLineEdit)
- courant.clean()
- self.changeValeur(changeDePlace=False,oblige=True)
- self.setValide()
-
- def plusPushed(self):
- if self.indexDernierLabel == self.monSimpDef.max:
- if len(self.listeValeursCourantes) < self.monSimpDef.max : self.chercheLigneVide()
- else : self.editor.afficheInfos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red)
- return
- self.ajoutLineEdit()
- self.descendLesLignes()
- self.chercheLigneVide()
- QTimer.singleShot(1, self.rendVisibleLigne)
-
- def chercheLigneVide(self):
- for i in range(self.indexDernierLabel) :
- nomLineEdit=self.nomLine+str(i+1)
- courant=getattr(self,nomLineEdit)
- valeur=courant.getValeur()
- if valeur=="" :
- courant.setFocus(True)
- self.estVisible=courant
- return
-
-
- def descendLesLignes(self):
- if self.numLineEditEnCours==self.indexDernierLabel : return
- nomLineEdit=self.nomLine+str(self.numLineEditEnCours+1)
- courant=getattr(self,nomLineEdit)
- valeurADescendre=courant.getValeur()
- courant.clean()
- for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
- aDescendre=i+1
- nomLineEdit=self.nomLine+str(aDescendre)
- courant=getattr(self,nomLineEdit)
- valeurAGarder=courant.getValeur()
- courant.setValeur(valeurADescendre)
- valeurADescendre=valeurAGarder
- self.changeValeur(changeDePlace=False)
- if hasattr (self, 'LineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
-
- def voisListePushed(self):
- texteValeurs=""
- for v in self.node.item.getListeValeurs():
- texteValeurs+=str(v)+", "
- entete="Valeurs pour "+self.nom
- f=ViewText(self,self.editor,entete,texteValeurs[0:-2])
- f.show()
-
-
- def selectInFile(self):
- init=str( self.editor.maConfiguration.savedir)
- fn = QFileDialog.getOpenFileName(self.node.appliEficas,
- tr("Fichier de donnees"),
- init,
- tr('Tous les Fichiers (*)',))
- fn=fn[0]
- if fn == None : return
- if fn == "" : return
- ulfile = os.path.abspath(six.text_type(fn))
- self.editor.maConfiguration.savedir=os.path.split(ulfile)[0]
-
- from .monSelectVal import MonSelectVal
- MonSelectVal(file=fn,parent=self).show()
-
- def noircirResultatFiltre(self):
- filtre=str(self.LEFiltre.text())
- for cb in self.listeCbRouge:
- palette = QPalette(Qt.red)
- palette.setColor(QPalette.WindowText,Qt.black)
- cb.setPalette(palette)
- t=cb.text()
- cb.setText(t)
- self.LEFiltre.setText("")
- self.listeCbRouge = []
-
-
+ def __init__(self):
+ self.aEuLeFocus=False
+ self.connecterSignaux()
+
+
+ def leaveEvent(self,event):
+ if self.aEuLeFocus :
+ print ('appel de changeValeur')
+ self.changeValeur()
+ self.aEuLeFocus=False
+ QWidget.leaveEvent(self,event)
+
+ def connecterSignaux(self):
+ if hasattr(self,'RBHaut'):
+ self.RBHaut.clicked.connect(self.hautPushed)
+ self.RBBas.clicked.connect(self.basPushed)
+ self.RBMoins.clicked.connect(self.moinsPushed)
+ self.RBPlus.clicked.connect(self.plusPushed)
+ self.RBVoisListe.clicked.connect(self.voisListePushed)
+ if hasattr(self,'PBAlpha'):
+ self.PBCata.clicked.connect(self.cataPushed)
+ self.PBAlpha.clicked.connect(self.alphaPushed)
+ self.PBFind.clicked.connect(self.findPushed)
+ self.LEFiltre.returnPressed.connect(self.LEFiltreReturnPressed)
+
+ def filtreListe(self):
+ l=[]
+ if self.filtre != "" :
+ for i in self.listeAAfficher :
+ if i.find(self.filtre) == 0 :l.append(i)
+ self.listeAAfficher=l
+ if self.alpha : self.listeAAfficher.sort()
+
+ def LEFiltreReturnPressed(self):
+ self.filtre= self.LEFiltre.text()
+ self.prepareListeResultatFiltre()
+
+ def findPushed(self):
+ self.filtre= self.LEFiltre.text()
+ self.prepareListeResultatFiltre()
+
+ def alphaPushed(self):
+ #print "alphaPushed" ,self.alpha
+ if self.alpha == 1 : return
+ self.alpha=1
+ self.prepareListeResultat()
+
+ def cataPushed(self):
+ if self.alpha == 0 : return
+ self.alpha=0
+ self.prepareListeResultat()
+
+ def hautPushed(self):
+ if self.numLineEditEnCours == 1 : return
+ else : numEchange=self.numLineEditEnCours-1
+ self.echange(self.numLineEditEnCours,numEchange)
+ self.LineEditEnCours.setFocus(True)
+ self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
+
+
+ def basPushed(self):
+ if self.numLineEditEnCours == self.indexDernierLabel : return
+ else : numEchange=self.numLineEditEnCours+1
+ self.echange(self.numLineEditEnCours,numEchange)
+ self.LineEditEnCours.setFocus(True)
+ self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
+
+ def echange(self,num1,num2):
+ # on donne le focus au a celui ou on a bouge
+ # par convention le 2
+ nomLineEdit=self.nomLine+str(num1)
+ #print nomLineEdit
+ courant=getattr(self,nomLineEdit)
+ valeurAGarder=courant.text()
+ nomLineEdit2=self.nomLine+str(num2)
+ #print nomLineEdit2
+ courant2=getattr(self,nomLineEdit2)
+ courant.setText(courant2.text())
+ courant2.setText(valeurAGarder)
+ self.changeValeur(changeDePlace=False)
+ self.numLineEditEnCours=num2
+ self.LineEditEnCours=courant2
+ self.LineEditEnCours.setFocus(True)
+
+ def moinsPushed(self):
+ # on supprime le dernier
+ if self.numLineEditEnCours == 0 : return
+ if self.indexDernierLabel == 0 : return
+ if self.numLineEditEnCours==self.indexDernierLabel :
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+ courant=getattr(self,nomLineEdit)
+ courant.clean()
+ else :
+ for i in range (self.numLineEditEnCours, self.indexDernierLabel):
+ aRemonter=i+1
+ nomLineEdit=self.nomLine+str(aRemonter)
+ courant=getattr(self,nomLineEdit)
+ valeurARemonter=courant.getValeur()
+ nomLineEdit=self.nomLine+str(i)
+ courant=getattr(self,nomLineEdit)
+ if valeurARemonter != None : courant.setValeur(valeurARemonter)
+ else : courant.clean()
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+ courant=getattr(self,nomLineEdit)
+ courant.clean()
+ self.changeValeur(changeDePlace=False,oblige=True)
+ self.setValide()
+
+ def plusPushed(self):
+ if self.indexDernierLabel == self.monSimpDef.max:
+ if len(self.listeValeursCourantes) < self.monSimpDef.max : self.chercheLigneVide()
+ else : self.editor.afficheInfos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red)
+ return
+ self.ajoutLineEdit()
+ self.descendLesLignes()
+ self.chercheLigneVide()
+ QTimer.singleShot(1, self.rendVisibleLigne)
+
+ def chercheLigneVide(self):
+ for i in range(self.indexDernierLabel) :
+ nomLineEdit=self.nomLine+str(i+1)
+ courant=getattr(self,nomLineEdit)
+ valeur=courant.getValeur()
+ if valeur=="" :
+ courant.setFocus(True)
+ self.estVisible=courant
+ return
+
+
+ def descendLesLignes(self):
+ if self.numLineEditEnCours==self.indexDernierLabel : return
+ nomLineEdit=self.nomLine+str(self.numLineEditEnCours+1)
+ courant=getattr(self,nomLineEdit)
+ valeurADescendre=courant.getValeur()
+ courant.clean()
+ for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
+ aDescendre=i+1
+ nomLineEdit=self.nomLine+str(aDescendre)
+ courant=getattr(self,nomLineEdit)
+ valeurAGarder=courant.getValeur()
+ courant.setValeur(valeurADescendre)
+ valeurADescendre=valeurAGarder
+ self.changeValeur(changeDePlace=False)
+ if hasattr (self, 'LineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
+
+ def voisListePushed(self):
+ texteValeurs=""
+ for v in self.node.item.getListeValeurs():
+ texteValeurs+=str(v)+", "
+ entete="Valeurs pour "+self.nom
+ f=ViewText(self,self.editor,entete,texteValeurs[0:-2])
+ f.show()
+
+
+ def selectInFile(self):
+ init=str( self.editor.maConfiguration.savedir)
+ fn = QFileDialog.getOpenFileName(self.node.appliEficas,
+ tr("Fichier de donnees"),
+ init,
+ tr('Tous les Fichiers (*)',))
+ fn=fn[0]
+ if fn == None : return
+ if fn == "" : return
+ ulfile = os.path.abspath(six.text_type(fn))
+ self.editor.maConfiguration.savedir=os.path.split(ulfile)[0]
+
+ from .monSelectVal import MonSelectVal
+ MonSelectVal(file=fn,parent=self).show()
+
+ def noircirResultatFiltre(self):
+ filtre=str(self.LEFiltre.text())
+ for cb in self.listeCbRouge:
+ palette = QPalette(Qt.red)
+ palette.setColor(QPalette.WindowText,Qt.black)
+ cb.setPalette(palette)
+ t=cb.text()
+ cb.setText(t)
+ self.LEFiltre.setText("")
+ self.listeCbRouge = []
+
+
# ----------- #
class GerePlie(object):
# ----------- #
- def gereIconePlier(self):
- if not(hasattr(self,'BFermeListe')) : return
- self.editor.listeDesListesOuvertes.add(self.node.item)
- repIcon=self.node.editor.appliEficas.repIcon
- if not (self.editor.afficheListesPliees):
- fichier=os.path.join(repIcon, 'empty.png')
- icon = QIcon(fichier)
- self.BFermeListe.setIcon(icon)
- return
- fichier=os.path.join(repIcon, 'minusnode.png')
- icon = QIcon(fichier)
- self.BFermeListe.setIcon(icon)
- self.BFermeListe.clicked.connect( self.selectWidgetPlie)
-
- def selectWidgetPlie(self):
- self.editor.listeDesListesOuvertes.remove(self.node.item)
- self.reaffichePourDeplier()
-
-
-
+ def gereIconePlier(self):
+ if not(hasattr(self,'BFermeListe')) : return
+ self.editor.listeDesListesOuvertes.add(self.node.item)
+ repIcon=self.node.editor.appliEficas.repIcon
+ if not (self.editor.afficheListesPliees):
+ fichier=os.path.join(repIcon, 'empty.png')
+ icon = QIcon(fichier)
+ self.BFermeListe.setIcon(icon)
+ return
+ fichier=os.path.join(repIcon, 'minusnode.png')
+ icon = QIcon(fichier)
+ self.BFermeListe.setIcon(icon)
+ self.BFermeListe.clicked.connect( self.selectWidgetPlie)
+
+ def selectWidgetPlie(self):
+ self.editor.listeDesListesOuvertes.remove(self.node.item)
+ self.reaffichePourDeplier()
from __future__ import absolute_import
try :
- from builtins import object
+ from builtins import object
except : pass
from PyQt5.QtCore import Qt
class GereRegles(object) :
- def appellebuildLBRegles(self):
- from .browser import JDCTree
- if isinstance(self,JDCTree):
- self.appellebuildLBReglesForJdC()
- else :
- self.appellebuildLBReglesForCommand()
- self.buildLBRegles(self.listeRegles,self.listeNomsEtapes)
- self.afficheRegles()
-
- def appellebuildLBReglesForCommand(self):
- self.listeRegles = self.item.getRegles()
- self.listeNomsEtapes = self.item.getMcPresents()
+ def appellebuildLBRegles(self):
+ from .browser import JDCTree
+ if isinstance(self,JDCTree):
+ self.appellebuildLBReglesForJdC()
+ else :
+ self.appellebuildLBReglesForCommand()
+ self.buildLBRegles(self.listeRegles,self.listeNomsEtapes)
+ self.afficheRegles()
- def appellebuildLBReglesForJdC(self):
- self.listeRegles=self.item.getRegles()
- self.listeNomsEtapes = self.item.getLNomsEtapes()
+ def appellebuildLBReglesForCommand(self):
+ self.listeRegles = self.item.getRegles()
+ self.listeNomsEtapes = self.item.getMcPresents()
+ def appellebuildLBReglesForJdC(self):
+ self.listeRegles=self.item.getRegles()
+ self.listeNomsEtapes = self.item.getLNomsEtapes()
- def buildLBRegles(self,listeRegles,listeNomsEtapes):
- self.liste=[]
- if len(listeRegles) > 0:
- for regle in listeRegles :
- texteRegle=regle.getText()
- texteMauvais,test = regle.verif(listeNomsEtapes)
- for ligne in texteRegle.split("\n") :
- if ligne == "" : continue
- if ligne[0]=="\t" : ligne=" "+ligne[1:]
- if test :
- self.liste.append((ligne,Qt.black))
- else :
- self.liste.append((ligne,Qt.red))
- self.liste.append(("",Qt.red))
- if self.liste==[] : self.liste.append(("pas de regle de construction pour ce jeu de commandes",Qt.black))
-
- def afficheRegles(self):
- titre="Regles pour "+self.item.nom
- w = ViewRegles( self.editor,self.liste,titre )
- w.exec_()
-
+ def buildLBRegles(self,listeRegles,listeNomsEtapes):
+ self.liste=[]
+ if len(listeRegles) > 0:
+ for regle in listeRegles :
+ texteRegle=regle.getText()
+ texteMauvais,test = regle.verif(listeNomsEtapes)
+ for ligne in texteRegle.split("\n") :
+ if ligne == "" : continue
+ if ligne[0]=="\t" : ligne=" "+ligne[1:]
+ if test :
+ self.liste.append((ligne,Qt.black))
+ else :
+ self.liste.append((ligne,Qt.red))
+ self.liste.append(("",Qt.red))
+ if self.liste==[] : self.liste.append(("pas de regle de construction pour ce jeu de commandes",Qt.black))
+ def afficheRegles(self):
+ titre="Regles pour "+self.item.nom
+ w = ViewRegles( self.editor,self.liste,titre )
+ w.exec_()
#
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from PyQt5.QtWidgets import QFileDialog, QApplication
def traduction(directPath,editor,version):
- if version == "V9V10" :
- from Traducteur import traduitV9V10
- suffixe="v10.comm"
+ if version == "V9V10" :
+ from Traducteur import traduitV9V10
+ suffixe="v10.comm"
if version == "V10V11" :
- from Traducteur import traduitV10V11
- suffixe="v11.comm"
+ from Traducteur import traduitV10V11
+ suffixe="v11.comm"
if version == "V11V12" :
- from Traducteur import traduitV11V12
- suffixe="v12.comm"
+ from Traducteur import traduitV11V12
+ suffixe="v12.comm"
- fn = QFileDialog.getOpenFileName(
- editor.appliEficas,
+ fn = QFileDialog.getOpenFileName(
+ editor.appliEficas,
tr('Traduire Fichier'),
- directPath ,
+ directPath ,
tr('Fichiers JDC (*.comm);;''Tous les Fichiers (*)'))
texte= f.read()
f.close()
else :
- texte = Entete
- commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null"
- try :
- if os.system(commande) == 0 :
- texte = texte + tr("Pas de difference entre le fichier origine et le fichier traduit")
- except :
- pass
+ texte = Entete
+ commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null"
+ try :
+ if os.system(commande) == 0 :
+ texte = texte + tr("Pas de difference entre le fichier origine et le fichier traduit")
+ except :
+ pass
from .monVisu import DVisu
titre = "conversion de "+ FichieraTraduire
monVisuDialg.setWindowTitle(titre)
monVisuDialg.TB.setText(texte)
monVisuDialg.show()
-
from Extensions.i18n import tr
from .gereIcones import FacultatifOuOptionnel
-import Accas
+import Accas
import traceback
-
+
# Import des panels
class Groupe(QWidget,FacultatifOuOptionnel):
- """
- """
- def __init__(self,node,editor,parentQt,definition,obj,niveau,commande=None):
- #print ("groupe : ",self.node.item.nom," ",self.node.fenetre)
- QWidget.__init__(self,None)
- self.node=node
- self.node.fenetre=self
- self.setupUi(self)
- self.editor=editor
- self.obj=obj
- self.niveau=niveau
- self.definition=definition
- self.parentQt=parentQt
- self.maCommande=commande
- self.listeFocus=[]
- self.appliEficas=self.editor.appliEficas
- self.repIcon=self.appliEficas.repIcon
- self.jdc=self.node.item.getJdc()
- self.setIconePoubelle()
- self.setIconesGenerales()
- self.setRun()
- self.setValide()
- self.setReglesEtAide()
- self.afficheMots()
- self.listeMCAAjouter=[]
- self.dictMCVenantDesBlocs={}
- if hasattr(self,'RBDeplie') : self.RBDeplie.clicked.connect(self.setDeplie)
- if hasattr(self,'RBPlie') : self.RBPlie.clicked.connect( self.setPlie)
-
- self.setAcceptDrops(True)
- #if hasattr (self, 'commandesLayout'):
- # print (' j ajoute un spacer dans ', self.node.item.nom)
- # spacerItem = QSpacerItem(20, 5, QSizePolicy.Minimum, QSizePolicy.Expanding)
- # self.commandesLayout.addItem(spacerItem)
-
- def donneFocus(self):
- for fenetre in self.listeFocus:
- if fenetre==None : return
- if fenetre.node.item.isValid() == 0 :
- fenetre.prendLeFocus=1
- fenetre.hide()
- fenetre.show()
-
-
- def afficheMots(self):
- #print ("ds afficheMots ",self.node.item.nom,self.node.plie)
- for node in self.node.children:
- # non return mais continue car il faut tenir compte des blocs
- if node.appartientAUnNoeudPlie==True : continue
- widget=node.getPanelGroupe(self,self.maCommande)
- #print ("widget pour ", node.item.nom, widget)
- self.listeFocus.append(node.fenetre)
- #print "fin pour " , self.node.item.nom
-
-
- def calculOptionnel(self):
+ """
+ """
+ def __init__(self,node,editor,parentQt,definition,obj,niveau,commande=None):
+ #print ("groupe : ",self.node.item.nom," ",self.node.fenetre)
+ QWidget.__init__(self,None)
+ self.node=node
+ self.node.fenetre=self
+ self.setupUi(self)
+ self.editor=editor
+ self.obj=obj
+ self.niveau=niveau
+ self.definition=definition
+ self.parentQt=parentQt
+ self.maCommande=commande
+ self.listeFocus=[]
+ self.appliEficas=self.editor.appliEficas
+ self.repIcon=self.appliEficas.repIcon
+ self.jdc=self.node.item.getJdc()
+ self.setIconePoubelle()
+ self.setIconesGenerales()
+ self.setRun()
+ self.setValide()
+ self.setReglesEtAide()
+ self.afficheMots()
+ self.listeMCAAjouter=[]
+ self.dictMCVenantDesBlocs={}
+ if hasattr(self,'RBDeplie') : self.RBDeplie.clicked.connect(self.setDeplie)
+ if hasattr(self,'RBPlie') : self.RBPlie.clicked.connect( self.setPlie)
+
+ self.setAcceptDrops(True)
+ #if hasattr (self, 'commandesLayout'):
+ # print (' j ajoute un spacer dans ', self.node.item.nom)
+ # spacerItem = QSpacerItem(20, 5, QSizePolicy.Minimum, QSizePolicy.Expanding)
+ # self.commandesLayout.addItem(spacerItem)
+
+ def donneFocus(self):
+ for fenetre in self.listeFocus:
+ if fenetre==None : return
+ if fenetre.node.item.isValid() == 0 :
+ fenetre.prendLeFocus=1
+ fenetre.hide()
+ fenetre.show()
+
+
+ def afficheMots(self):
+ #print ("ds afficheMots ",self.node.item.nom,self.node.plie)
+ for node in self.node.children:
+ # non return mais continue car il faut tenir compte des blocs
+ if node.appartientAUnNoeudPlie==True : continue
+ widget=node.getPanelGroupe(self,self.maCommande)
+ #print ("widget pour ", node.item.nom, widget)
+ self.listeFocus.append(node.fenetre)
+ #print "fin pour " , self.node.item.nom
+
+
+ def calculOptionnel(self):
self.listeMc=[]
self.listeMcRegle=[]
self.dictToolTipMc={}
# n ont pas toutes ces methodes
try :
#if 1 :
- self.listeMc = self.obj.getListeMcOrdonnee(genea,self.jdc.cata_ordonne_dico)
- listeNomsPresents=self.obj.dictMcPresents()
- for regle in self.obj.getRegles():
- (monToolTip,regleOk)=regle.verif(listeNomsPresents)
- if regleOk : continue
- for mc in regle.mcs :
- self.listeMcRegle.append(mc)
- self.dictToolTipMc[mc]=monToolTip
+ self.listeMc = self.obj.getListeMcOrdonnee(genea,self.jdc.cata_ordonne_dico)
+ listeNomsPresents=self.obj.dictMcPresents()
+ for regle in self.obj.getRegles():
+ (monToolTip,regleOk)=regle.verif(listeNomsPresents)
+ if regleOk : continue
+ for mc in regle.mcs :
+ self.listeMcRegle.append(mc)
+ self.dictToolTipMc[mc]=monToolTip
except :
- #print ('in except')
- #print (self)
- return
-
- def afficheOptionnel(self):
+ #print ('in except')
+ #print (self)
+ return
+
+ def afficheOptionnel(self):
if self.editor.maConfiguration.closeOptionnel : return
liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
self.monOptionnel=self.editor.widgetOptionnel
self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
-
-
- def ajouteMCOptionnelDesBlocs(self):
- self.dictMCVenantDesBlocs={}
- i=0
- self.calculOptionnel()
- liste=self.listeMc
- liste_rouge=self.listeMcRegle
- for MC in self.listeMc : self.dictMCVenantDesBlocs[MC]=self
- # ce cas est le cas machine tournant sr le plie
- try :
- while i < self.commandesLayout.count():
- from .monWidgetBloc import MonWidgetBloc
- widget=self.commandesLayout.itemAt(i).widget()
- i=i+1
- if not(isinstance(widget,MonWidgetBloc)) : continue
- widget.calculOptionnel()
- listeW,listeW_rouge=widget.ajouteMCOptionnelDesBlocs()
- for MC in widget.dictMCVenantDesBlocs:
- if MC in self.dictMCVenantDesBlocs: print ("Pb Sur les MC" )
- else : self.dictMCVenantDesBlocs[MC]=widget.dictMCVenantDesBlocs[MC]
- liste=liste+listeW
- liste_rouge=liste_rouge+listeW_rouge
- except :
- pass
- return (liste,liste_rouge)
-
-
- def reaffiche(self,nodeAVoir=None):
- #print "dans reaffiche de groupe.py", nodeAVoir
- self.parentQt.reaffiche(nodeAVoir)
-
- def recalculeListeMC(self,listeMC):
- #print "pas si peu utile"
- #on ajoute et on enleve
- listeNode=[]
- for name in listeMC :
- nodeAEnlever=self.node.appendChild(name)
- if nodeAEnlever.item.isMCList():
- nodeAEnlever=nodeAEnlever.children[-1]
- listeNode.append(nodeAEnlever)
- self.afficheOptionnel()
- self.monOptionnel.affiche(self.listeMc)
- if len(listeNode) == 0 : return
- if len(listeNode) == 1 :
- listeNode[0].delete()
- self.editor.afficheInfos("")
- return
- for noeud in listeNode:
- noeud.treeParent.item.suppItem(noeud.item)
- noeud.treeParent.buildChildren()
- self.editor.afficheInfos("")
-
- def ajoutMC(self,texteListeNom):
- listeNom=texteListeNom.split("+")[1:]
- firstNode=None
- for nom in listeNom:
- if nom not in self.dictMCVenantDesBlocs:
- #print "bizarre, bizarre"
- self.editor.initModif()
- nouveau=self.node.appendChild(nom)
- else :
- self.editor.initModif()
- widget=self.dictMCVenantDesBlocs[nom]
- nouveau=widget.node.appendChild(nom)
- if firstNode==None : firstNode=nouveau
- if nouveau == None or nouveau == 0 :
- self.editor.afficheInfos(tr('insertion impossible a cet endroit pour '+nom),Qt.red)
- try :
- self.reaffiche(firstNode)
- if firstNode!=None and firstNode !=0 and firstNode.item!=None : firstNode.select()
- except :
- pass
-
-
- def setPlie(self):
- self.node.setPlie()
- self.reaffiche(self.node)
-
- def setDeplie(self):
- #print ('je passe ds setDeplie de groupe', self.obj.nom)
- self.node.firstDeplie = False
- self.node.setDeplie()
- self.reaffiche(self.node)
-
-
- def traiteClicSurLabel(self,texte):
- if self.editor.code != "CARMELCND" : self.afficheOptionnel()
-
-
- def propageChange(self,leType):
- self.parentQt.propageChange(leType)
+
+ def ajouteMCOptionnelDesBlocs(self):
+ self.dictMCVenantDesBlocs={}
+ i=0
+ self.calculOptionnel()
+ liste=self.listeMc
+ liste_rouge=self.listeMcRegle
+ for MC in self.listeMc : self.dictMCVenantDesBlocs[MC]=self
+ # ce cas est le cas machine tournant sr le plie
+ try :
+ while i < self.commandesLayout.count():
+ from .monWidgetBloc import MonWidgetBloc
+ widget=self.commandesLayout.itemAt(i).widget()
+ i=i+1
+ if not(isinstance(widget,MonWidgetBloc)) : continue
+ widget.calculOptionnel()
+ listeW,listeW_rouge=widget.ajouteMCOptionnelDesBlocs()
+ for MC in widget.dictMCVenantDesBlocs:
+ if MC in self.dictMCVenantDesBlocs: print ("Pb Sur les MC" )
+ else : self.dictMCVenantDesBlocs[MC]=widget.dictMCVenantDesBlocs[MC]
+ liste=liste+listeW
+ liste_rouge=liste_rouge+listeW_rouge
+ except :
+ pass
+ return (liste,liste_rouge)
+
+
+ def reaffiche(self,nodeAVoir=None):
+ #print "dans reaffiche de groupe.py", nodeAVoir
+ self.parentQt.reaffiche(nodeAVoir)
+
+ def recalculeListeMC(self,listeMC):
+ #print "pas si peu utile"
+ #on ajoute et on enleve
+ listeNode=[]
+ for name in listeMC :
+ nodeAEnlever=self.node.appendChild(name)
+ if nodeAEnlever.item.isMCList():
+ nodeAEnlever=nodeAEnlever.children[-1]
+ listeNode.append(nodeAEnlever)
+ self.afficheOptionnel()
+ self.monOptionnel.affiche(self.listeMc)
+ if len(listeNode) == 0 : return
+ if len(listeNode) == 1 :
+ listeNode[0].delete()
+ self.editor.afficheInfos("")
+ return
+ for noeud in listeNode:
+ noeud.treeParent.item.suppItem(noeud.item)
+ noeud.treeParent.buildChildren()
+ self.editor.afficheInfos("")
+
+ def ajoutMC(self,texteListeNom):
+ listeNom=texteListeNom.split("+")[1:]
+ firstNode=None
+ for nom in listeNom:
+ if nom not in self.dictMCVenantDesBlocs:
+ #print "bizarre, bizarre"
+ self.editor.initModif()
+ nouveau=self.node.appendChild(nom)
+ else :
+ self.editor.initModif()
+ widget=self.dictMCVenantDesBlocs[nom]
+ nouveau=widget.node.appendChild(nom)
+ if firstNode==None : firstNode=nouveau
+ if nouveau == None or nouveau == 0 :
+ self.editor.afficheInfos(tr('insertion impossible a cet endroit pour '+nom),Qt.red)
+ try :
+ self.reaffiche(firstNode)
+ if firstNode!=None and firstNode !=0 and firstNode.item!=None : firstNode.select()
+ except :
+ pass
+
+
+ def setPlie(self):
+ self.node.setPlie()
+ self.reaffiche(self.node)
+
+ def setDeplie(self):
+ #print ('je passe ds setDeplie de groupe', self.obj.nom)
+ self.node.firstDeplie = False
+ self.node.setDeplie()
+ self.reaffiche(self.node)
+
+
+ def traiteClicSurLabel(self,texte):
+ if self.editor.code != "CARMELCND" : self.afficheOptionnel()
+ try :
+ fr = self.node.item.getFr()
+ self.editor.afficheCommentaire(str(fr))
+ except :
+ pass
+
+
+
+ def propageChange(self,leType,donneLefocus):
+ self.parentQt.propageChange(leType,donneLefocus)
class MonBoutonValide(QToolButton) :
- def __init__(self,parent):
+ def __init__(self,parent):
QToolButton.__init__(self,parent)
- while( not(hasattr(parent,'node'))):
- parent= parent.parent()
+ while( not(hasattr(parent,'node'))):
+ parent= parent.parent()
self.parent=parent
- def mouseDoubleClickEvent(self, event):
+ def mouseDoubleClickEvent(self, event):
#print "dans mouseDoubleClickEvent"
strAide=self.parent.node.item.object.getFr()
if hasattr(self.parent.node.item.object.definition, 'defaut') :
- strAide+='\ndefaut : \n'+str(self.parent.node.item.object.definition.defaut)
+ strAide+='\ndefaut : \n'+str(self.parent.node.item.object.definition.defaut)
strRapport=str(self.parent.node.item.object.report())
self.parent.editor._viewText(strAide+"\n"+strRapport, "JDC_RAPPORT")
- def mousePressEvent(self, event):
- #print "dans mousePressEvent"
- if self.parent.node.item.object.isValid() :
- myToolTip=tr("objet valide")
- if self.parent.editor.maConfiguration.differencieSiDefaut :
- if hasattr(self.parent.node.item.object.definition, 'defaut') :
- if self.parent.node.item.object.valeur != self.parent.node.item.object.definition.defaut :
- myToolTip+='\ndefaut : \n'+str(self.parent.node.item.object.definition.defaut)
-
- QToolTip.showText(event.globalPos(),myToolTip )
- else :
- t=""
- texte=self.parent.node.item.object.report().report()
- deb=1
- for l in texte.split('\n')[2:-2]:
- if re.match('^[\t !]*$',l) : continue
- if re.match('^ *Fin Mot-cl',l) : continue
- if re.match('^ *D?but Mot-cl',l) : continue
- if re.match('^ *Mot-cl',l) : continue
- l=l.replace('!','')
- if deb :
- deb=0
- t=l
- else :
- t=t+'\n'+l
- myToolTip=tr(t)
- QToolTip.showText(event.globalPos(),myToolTip )
-
+ def mousePressEvent(self, event):
+ #print "dans mousePressEvent"
+ if self.parent.node.item.object.isValid() :
+ myToolTip=tr("objet valide")
+ if self.parent.editor.maConfiguration.differencieSiDefaut :
+ if hasattr(self.parent.node.item.object.definition, 'defaut') :
+ if self.parent.node.item.object.valeur != self.parent.node.item.object.definition.defaut :
+ myToolTip+='\ndefaut : \n'+str(self.parent.node.item.object.definition.defaut)
+ QToolTip.showText(event.globalPos(),myToolTip )
+ else :
+ t=""
+ texte=self.parent.node.item.object.report().report()
+ deb=1
+ for l in texte.split('\n')[2:-2]:
+ if re.match('^[\t !]*$',l) : continue
+ if re.match('^ *Fin Mot-cl',l) : continue
+ if re.match('^ *D?but Mot-cl',l) : continue
+ if re.match('^ *Mot-cl',l) : continue
+ l=l.replace('!','')
+ if deb :
+ deb=0
+ t=l
+ else :
+ t=t+'\n'+l
+ myToolTip=tr(t)
+ QToolTip.showText(event.globalPos(),myToolTip )
# Import des panels
class MonChoixCata(Ui_DChoixCata,QDialog):
- """
- """
- def __init__(self, QWparent, listeCata, title = None):
- QDialog.__init__(self, QWparent)
- self.setModal(True)
- self.setupUi(self)
- self.CBChoixCata.addItems(listeCata)
- self.TLNb.setText(tr("%d versions du catalogue sont disponibles", len(listeCata)))
- if title is not None:
- self.setWindowTitle(tr(title))
- self.buttonOk.clicked.connect(self.cataChoisi)
- self.buttonCancel.clicked.connect(self.sortSansChoix)
+ """
+ """
+ def __init__(self, QWparent, listeCata, title = None):
+ QDialog.__init__(self, QWparent)
+ self.setModal(True)
+ self.setupUi(self)
+ self.CBChoixCata.addItems(listeCata)
+ self.TLNb.setText(tr("%d versions du catalogue sont disponibles", len(listeCata)))
+ if title is not None:
+ self.setWindowTitle(tr(title))
+ self.buttonOk.clicked.connect(self.cataChoisi)
+ self.buttonCancel.clicked.connect(self.sortSansChoix)
- def sortSansChoix(self):
- QDialog.reject(self)
-
- def cataChoisi(self):
- QDialog.accept(self)
+ def sortSansChoix(self):
+ QDialog.reject(self)
+ def cataChoisi(self):
+ QDialog.accept(self)
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import os,sys,re
from PyQt5.QtGui import QPalette
from PyQt5.QtCore import QProcess, QFileInfo, Qt, QSize
-
+
# Import des panels
class MonChoixCode(Ui_ChoixCode,QDialog):
- """
- Classe definissant le panel associe aux mots-cles qui demandent
- a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discretes
- """
- def __init__(self, appliEficas=None):
- QDialog.__init__(self,parent=appliEficas,flags=Qt.Window)
- self.setModal(True)
- self.setupUi(self)
- self.appliEficas=appliEficas
- self.verifieInstall()
- self.code=None
- self.buttonBox.accepted.disconnect(self.accept)
- self.buttonBox.accepted.connect(self.choisitCode)
- # self.pB_OK.clicked.connect(self.choisitCode)
- #self.pB_cancel.clicked.connect(self.sortie)
+ """
+ Classe definissant le panel associe aux mots-cles qui demandent
+ a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discretes
+ """
+ def __init__(self, appliEficas=None):
+ QDialog.__init__(self,parent=appliEficas,flags=Qt.Window)
+ self.setModal(True)
+ self.setupUi(self)
+ self.appliEficas=appliEficas
+ self.verifieInstall()
+ self.code=None
+ self.buttonBox.accepted.disconnect(self.accept)
+ self.buttonBox.accepted.connect(self.choisitCode)
+ # self.pB_OK.clicked.connect(self.choisitCode)
+ #self.pB_cancel.clicked.connect(self.sortie)
- def sortie(self):
- QDialog.reject(self)
+ def sortie(self):
+ QDialog.reject(self)
- def verifieInstall(self):
- self.groupCodes=QButtonGroup(self.groupBox)
- vars=list(os.environ.items())
- listeCode=('Adao','Carmel3D','CarmelCND','CF','MAP','MT','PSEN','PSEN_N1','Telemac','ZCracks',)
- for code in listeCode:
- dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
- try :
- l=os.listdir(dirCode)
- bouton=QRadioButton(self.groupBox)
- bouton.setText(code)
- self.groupCodes.addButton(bouton)
- self.vlBouton.addWidget(bouton)
- except :
- clef="PREFS_CATA_"+code
- try :
+ def verifieInstall(self):
+ self.groupCodes=QButtonGroup(self.groupBox)
+ vars=list(os.environ.items())
+ listeCode=('Adao','Carmel3D','CarmelCND','CF','MAP','MT','PSEN','PSEN_N1','Telemac','ZCracks',)
+ for code in listeCode:
+ dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
+ try :
+ l=os.listdir(dirCode)
+ bouton=QRadioButton(self.groupBox)
+ bouton.setText(code)
+ self.groupCodes.addButton(bouton)
+ self.vlBouton.addWidget(bouton)
+ except :
+ clef="PREFS_CATA_"+code
+ try :
+ repIntegrateur=os.path.abspath(os.environ[clef])
+ l=os.listdir(repIntegrateur)
+ bouton=QRadioButton(self.groupBox)
+ bouton.setText(code)
+ bouton.show()
+ self.groupCodes.addButton(bouton)
+ except :
+ pass
+ listeCodesIntegrateur=[]
+ for k,v in vars:
+ if re.search('^PREFS_CATA_',k) != None and k[11:] not in listeCode:
+ listeCodesIntegrateur.append(k[11:])
+ for code in listeCodesIntegrateur:
+ try :
+ clef="PREFS_CATA_"+code
repIntegrateur=os.path.abspath(os.environ[clef])
l=os.listdir(repIntegrateur)
- bouton=QRadioButton(self.groupBox)
+ bouton=QRadioButton(self)
bouton.setText(code)
bouton.show()
self.groupCodes.addButton(bouton)
- except :
+ except :
pass
- listeCodesIntegrateur=[]
- for k,v in vars:
- if re.search('^PREFS_CATA_',k) != None and k[11:] not in listeCode:
- listeCodesIntegrateur.append(k[11:])
- for code in listeCodesIntegrateur:
- try :
- clef="PREFS_CATA_"+code
- repIntegrateur=os.path.abspath(os.environ[clef])
- l=os.listdir(repIntegrateur)
- bouton=QRadioButton(self)
- bouton.setText(code)
- bouton.show()
- self.groupCodes.addButton(bouton)
- except :
- pass
- self.appliEficas.listeCode=self.appliEficas.listeCode+listeCodesIntegrateur
+ self.appliEficas.listeCode=self.appliEficas.listeCode+listeCodesIntegrateur
- def choisitCode(self):
- bouton=self.groupCodes.checkedButton()
- if bouton==None : return
- code=str(bouton.text())
- codeUpper=code.upper()
- self.appliEficas.code=codeUpper
- try :
- dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
- l=os.listdir(dirCode)
- sys.path.insert(0,dirCode)
- except :
- clef="PREFS_CATA_"+code
- repIntegrateur=os.path.abspath(os.environ[clef])
- l=os.listdir(repIntegrateur)
- sys.path.insert(0,repIntegrateur)
- self.close()
+ def choisitCode(self):
+ bouton=self.groupCodes.checkedButton()
+ if bouton==None : return
+ code=str(bouton.text())
+ codeUpper=code.upper()
+ self.appliEficas.code=codeUpper
+ try :
+ dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
+ l=os.listdir(dirCode)
+ sys.path.insert(0,dirCode)
+ except :
+ clef="PREFS_CATA_"+code
+ repIntegrateur=os.path.abspath(os.environ[clef])
+ l=os.listdir(repIntegrateur)
+ sys.path.insert(0,repIntegrateur)
+ self.close()
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from desChoixCommandes import Ui_ChoixCommandes
from Extensions.i18n import tr
import os
-
+
# Import des panels
class MonChoixCommande(Ui_ChoixCommandes,QWidget):
- """
- """
- def __init__(self,node, jdc_item, editor):
- QWidget.__init__(self,parent=None)
- self.setupUi(self)
-
- self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
- iconeFile=os.path.join(self.repIcon,'lettreRblanc30.png')
- icon = QIcon(iconeFile)
- self.RBRegle.setIcon(icon)
- self.RBRegle.setIconSize(QSize(21, 31))
-
- self.item = jdc_item
- self.node = node
- self.editor = editor
- self.simpleClic=self.editor.maConfiguration.simpleClic
- self.jdc = self.item.object.getJdcRoot()
- debutTitre=self.editor.titre
- self.listeWidget=[]
- self.dicoCmd={}
- if self.editor.fichier != None :
- nouveauTitre=debutTitre+" "+os.path.basename(self.editor.fichier)
- else :
- nouveauTitre=debutTitre
- self.editor.appliEficas.setWindowTitle(nouveauTitre)
-
-
- self.RBalpha.clicked.connect(self.afficheAlpha)
- self.RBGroupe.clicked.connect(self.afficheGroupe)
- self.RBOrdre.clicked.connect(self.afficheOrdre)
- self.RBClear.clicked.connect(self.clearFiltre)
- self.RBCasse.toggled.connect(self.ajouteRadioButtons)
- self.LEFiltre.returnPressed.connect(self.ajouteRadioButtons)
- self.LEFiltre.textChanged.connect(self.ajouteRadioButtons)
-
- if self.node.tree.item.getRegles() == () :
- self.RBRegle.close()
- self.labelRegle.close()
- else :
- self.RBRegle.clicked.connect(self.afficheRegle)
-
- if self.editor.readercata.Ordre_Des_Commandes == None : self.RBOrdre.close()
-
-
- #self.editor.labelCommentaire.setText("")
- if self.editor.widgetOptionnel!= None :
- self.editor.fermeOptionnel()
- self.editor.widgetOptionnel=None
- self.name=None
-
- self.boolAlpha=0
- self.boolGroupe=0
- self.boolOrdre=0
- if self.editor.maConfiguration.affiche=="alpha" :
- self.boolAlpha==1;
- self.RBalpha.setChecked(True);
- self.afficheAlpha()
- elif self.editor.maConfiguration.affiche=="groupe" :
- self.boolGroupe==1;
- self.RBGroupe.setChecked(True);
- self.afficheGroupe()
- elif self.editor.maConfiguration.affiche=="ordre" :
- self.boolOrdre==1;
- self.RBOrdre.setChecked(True);
- self.afficheOrdre()
- if self.editor.maConfiguration.closeFrameRechercheCommandeSurPageDesCommandes == True : self.frameAffichage.close()
-
- if self.editor.widgetTree != None : self.editor.restoreSplitterSizes(2)
- else: self.editor.restoreSplitterSizes(3)
-
- def afficheRegle(self):
- self.node.tree.appellebuildLBRegles()
-
- def afficheAlpha(self):
- self.boolAlpha=1
- self.boolGroupe=0
- self.boolOrdre=0
- self.ajouteRadioButtons()
-
- def afficheGroupe(self):
- self.boolAlpha=0
- self.boolGroupe=1
- self.boolOrdre=0
- self.ajouteRadioButtons()
-
- def afficheOrdre(self):
- self.boolAlpha=0
- self.boolGroupe=0
- self.boolOrdre=1
- self.ajouteRadioButtons()
-
- def insereNoeudApresClick(self,event):
- #print self.editor.Classement_Commandes_Ds_Arbre
- #if self.editor.Classement_Commandes_Ds_Arbre!= () : self.chercheOu()
- #print ('dans insereNoeudApresClick')
- nodeCourrant=self.node.tree.currentItem()
- if nodeCourrant==None: nodeCourrant=self.node.tree.racine
- if self.name != None :
- plier=self.editor.maConfiguration.afficheCommandesPliees
- if nodeCourrant==self.node : nouveau=self.node.appendChild(self.name,'first',plier)
- else : nouveau=nodeCourrant.appendBrother(self.name,plier=plier)
- else :
- nouveau = 0
- if nouveau == 0 : return # on n a pas insere le noeud
- nouveau.setDeplie()
- #if self.editor.afficheApresInsert==True : nouveau.plieToutEtReaffiche()
- if self.editor.afficheApresInsert == True :
- #if self.editor.affichePlie==True: nouveau.plieToutEtReaffiche()
- if self.editor.maConfiguration.afficheCommandesPliees ==True: nouveau.plieToutEtReaffiche()
- else : nouveau.deplieToutEtReaffiche()
- nouveau.fenetre.donnePremier()
- #nouveau.deplieToutEtReaffiche()
- else :
- self.node.setSelected(False)
- nouveau.setSelected(True)
- self.node.tree.setCurrentItem(nouveau)
- if event != None : event.accept()
-
-
-
- def creeListeCommande(self,filtre):
- listeGroupes,dictGroupes=self.jdc.getGroups()
- sensibleALaCasse=self.RBCasse.isChecked()
- if "CACHE" in dictGroupes: aExclure=list(dictGroupes["CACHE"])
- else: aExclure=()
- listeACreer=[]
- listeEtapesDejaPresentes=[]
- if self.editor.maConfiguration.rendVisiblesLesCaches :
- for e in self.jdc.etapes:
- listeEtapesDejaPresentes.append(e.nom)
- for c in aExclure :
- if c not in listeEtapesDejaPresentes : aExclure.remove(c)
- for l in self.jdc.getListeCmd():
- if l not in aExclure :
- if sensibleALaCasse and (filtre != None and not filtre in l) : continue
- if (not sensibleALaCasse) and filtre != None and (not filtre in l) and (not filtre.upper() in l) : continue
- listeACreer.append(l)
- return listeACreer
-
- def ajouteRadioButtons(self):
- if self.editor.maConfiguration.nombreDeBoutonParLigne != 0 :
- self.ajoutePushButtons()
- return
- #print 'ds ajouteRadioButtons'
- filtre=str(self.LEFiltre.text())
- if filtre==str("") : filtre=None
- if hasattr(self,'buttonGroup') :
- for b in self.buttonGroup.buttons():
- self.buttonGroup.removeButton(b)
- b.setParent(None)
- b.close()
- else :
- self.buttonGroup = QButtonGroup()
- for w in self.listeWidget :
- w.setParent(None)
- w.close()
- self.listeWidget=[]
- if self.boolAlpha==1 :
- liste=self.creeListeCommande(filtre)
- for cmd in liste :
- self.dicoCmd[tr(cmd)]=cmd
- rbcmd=(QRadioButton(tr(cmd)))
- self.buttonGroup.addButton(rbcmd)
- self.commandesLayout.addWidget(rbcmd)
- #if self.simpleClic : rbcmd.mouseReleaseEvent=self.insereNoeudApresClick
- #else : rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
- #self.buttonGroup.buttonClicked.connect(self.rbClique)
- if not(self.simpleClic ): rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
- if self.simpleClic :
- self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
- else :
- self.buttonGroup.buttonClicked.connect(self.rbClique)
- elif self.boolGroupe==1 :
- listeGroupes,dictGroupes=self.jdc.getGroups()
- for grp in listeGroupes:
- if grp == "CACHE" : continue
- label=QLabel(self)
- text=tr('<html><head/><body><p><span style=\" font-weight:600;\">Groupe : '+tr(grp)+'</span></p></body></html>')
- label.setText(text)
- self.listeWidget.append(label)
- aAjouter=1
- sensibleALaCasse=self.RBCasse.isChecked()
- for cmd in dictGroupes[grp]:
- if sensibleALaCasse and (filtre != None and not filtre in cmd) : continue
- if (not sensibleALaCasse) and filtre != None and (not filtre in cmd) and (not filtre.upper() in cmd) : continue
- if aAjouter == 1 :
- self.commandesLayout.addWidget(label)
- aAjouter=0
- self.dicoCmd[tr(cmd)]=cmd
- rbcmd=(QRadioButton(tr(cmd)))
- self.buttonGroup.addButton(rbcmd)
- self.commandesLayout.addWidget(rbcmd)
- if not(self.simpleClic ): rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
- if self.simpleClic :
- self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
- else :
- self.buttonGroup.buttonClicked.connect(self.rbClique)
- label2=QLabel(self)
- label2.setText(" ")
- self.listeWidget.append(label2)
- self.commandesLayout.addWidget(label2)
- elif self.boolOrdre==1 :
- listeFiltre=self.creeListeCommande(filtre)
- liste=[]
- if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
- else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
- for cmd in Ordre_Des_Commandes :
- if cmd in listeFiltre :
- liste.append(cmd)
- for cmd in liste :
- self.dicoCmd[tr(cmd)]=cmd
- rbcmd=(QRadioButton(tr(cmd)))
- self.buttonGroup.addButton(rbcmd)
- self.commandesLayout.addWidget(rbcmd)
- if not(self.simpleClic ): rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
- if self.simpleClic :
- self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
- else :
- self.buttonGroup.buttonClicked.connect(self.rbClique)
-
-
-
- def ajoutePushButtons(self):
- if hasattr(self,'buttonGroup') :
- for b in self.buttonGroup.buttons():
- self.buttonGroup.removeButton(b)
- b.setParent(None)
- b.close()
- else :
- self.buttonGroup = QButtonGroup()
- self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
- for w in self.listeWidget :
- w.setParent(None)
- w.close()
- self.listeWidget=[]
-
- if not hasattr(self,'maGrilleBouton') :
- #self.commandesLayout.close()
- self.maGrilleBouton=QGridLayout()
- self.maGrilleBouton.setSpacing(20)
- self.verticalLayout.addLayout(self.maGrilleBouton)
- col=-1
- ligne = 0
-
- if self.boolAlpha==1 :
- liste=self.creeListeCommande(None)
- elif self.boolOrdre:
- liste=self.creeListeCommande(None)
- listeFiltre=self.creeListeCommande(None)
- liste=[]
- if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
- else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
- for cmd in Ordre_Des_Commandes :
- if cmd in listeFiltre :
- liste.append(cmd)
- for cmd in liste :
- col=col+1
- if col == self.editor.maConfiguration.nombreDeBoutonParLigne :
- col=0
- ligne=ligne+1
- self.dicoCmd[tr(cmd)]=cmd
- rbcmd=QPushButton(tr(cmd))
- rbcmd.setGeometry(QRect(40, 20, 211, 71))
- rbcmd.setMaximumSize(QSize(250, 81))
- rbcmd.setStyleSheet("background-color : rgb(66, 165, 238);\n"
+ """
+ """
+ def __init__(self,node, jdc_item, editor):
+ QWidget.__init__(self,parent=None)
+ self.setupUi(self)
+
+ self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
+ iconeFile=os.path.join(self.repIcon,'lettreRblanc30.png')
+ icon = QIcon(iconeFile)
+ self.RBRegle.setIcon(icon)
+ self.RBRegle.setIconSize(QSize(21, 31))
+
+ self.item = jdc_item
+ self.node = node
+ self.editor = editor
+ self.simpleClic=self.editor.maConfiguration.simpleClic
+ self.jdc = self.item.object.getJdcRoot()
+ debutTitre=self.editor.titre
+ self.listeWidget=[]
+ self.dicoCmd={}
+ if self.editor.fichier != None :
+ nouveauTitre=debutTitre+" "+os.path.basename(self.editor.fichier)
+ else :
+ nouveauTitre=debutTitre
+ self.editor.appliEficas.setWindowTitle(nouveauTitre)
+
+
+ self.RBalpha.clicked.connect(self.afficheAlpha)
+ self.RBGroupe.clicked.connect(self.afficheGroupe)
+ self.RBOrdre.clicked.connect(self.afficheOrdre)
+ self.RBClear.clicked.connect(self.clearFiltre)
+ self.RBCasse.toggled.connect(self.ajouteRadioButtons)
+ self.LEFiltre.returnPressed.connect(self.ajouteRadioButtons)
+ self.LEFiltre.textChanged.connect(self.ajouteRadioButtons)
+
+ if self.node.tree.item.getRegles() == () :
+ self.RBRegle.close()
+ self.labelRegle.close()
+ else :
+ self.RBRegle.clicked.connect(self.afficheRegle)
+
+ if self.editor.readercata.Ordre_Des_Commandes == None : self.RBOrdre.close()
+
+
+ #self.editor.labelCommentaire.setText("")
+ if self.editor.widgetOptionnel!= None :
+ self.editor.fermeOptionnel()
+ self.editor.widgetOptionnel=None
+ self.name=None
+
+ self.boolAlpha=0
+ self.boolGroupe=0
+ self.boolOrdre=0
+ if self.editor.maConfiguration.affiche=="alpha" :
+ self.boolAlpha==1;
+ self.RBalpha.setChecked(True);
+ self.afficheAlpha()
+ elif self.editor.maConfiguration.affiche=="groupe" :
+ self.boolGroupe==1;
+ self.RBGroupe.setChecked(True);
+ self.afficheGroupe()
+ elif self.editor.maConfiguration.affiche=="ordre" :
+ self.boolOrdre==1;
+ self.RBOrdre.setChecked(True);
+ self.afficheOrdre()
+ if self.editor.maConfiguration.closeFrameRechercheCommandeSurPageDesCommandes == True : self.frameAffichage.close()
+
+ if self.editor.widgetTree != None : self.editor.restoreSplitterSizes(2)
+ else: self.editor.restoreSplitterSizes(3)
+
+ def afficheRegle(self):
+ self.node.tree.appellebuildLBRegles()
+
+ def afficheAlpha(self):
+ self.boolAlpha=1
+ self.boolGroupe=0
+ self.boolOrdre=0
+ self.ajouteRadioButtons()
+
+ def afficheGroupe(self):
+ self.boolAlpha=0
+ self.boolGroupe=1
+ self.boolOrdre=0
+ self.ajouteRadioButtons()
+
+ def afficheOrdre(self):
+ self.boolAlpha=0
+ self.boolGroupe=0
+ self.boolOrdre=1
+ self.ajouteRadioButtons()
+
+ def insereNoeudApresClick(self,event):
+ #print self.editor.Classement_Commandes_Ds_Arbre
+ #if self.editor.Classement_Commandes_Ds_Arbre!= () : self.chercheOu()
+ #print ('dans insereNoeudApresClick')
+ nodeCourrant=self.node.tree.currentItem()
+ if nodeCourrant==None: nodeCourrant=self.node.tree.racine
+ if self.name != None :
+ plier=self.editor.maConfiguration.afficheCommandesPliees
+ if nodeCourrant==self.node : nouveau=self.node.appendChild(self.name,'first',plier)
+ else : nouveau=nodeCourrant.appendBrother(self.name,plier=plier)
+ else :
+ nouveau = 0
+ if nouveau == 0 : return # on n a pas insere le noeud
+ nouveau.setDeplie()
+ #if self.editor.afficheApresInsert==True : nouveau.plieToutEtReaffiche()
+ if self.editor.afficheApresInsert == True :
+ #if self.editor.affichePlie==True: nouveau.plieToutEtReaffiche()
+ if self.editor.maConfiguration.afficheCommandesPliees ==True: nouveau.plieToutEtReaffiche()
+ else : nouveau.deplieToutEtReaffiche()
+ nouveau.fenetre.donnePremier()
+ #nouveau.deplieToutEtReaffiche()
+ else :
+ self.node.setSelected(False)
+ nouveau.setSelected(True)
+ self.node.tree.setCurrentItem(nouveau)
+ if event != None : event.accept()
+
+
+
+ def creeListeCommande(self,filtre):
+ listeGroupes,dictGroupes=self.jdc.getGroups()
+ sensibleALaCasse=self.RBCasse.isChecked()
+ if "CACHE" in dictGroupes: aExclure=list(dictGroupes["CACHE"])
+ else: aExclure=[]
+ listeACreer=[]
+ listeEtapesDejaPresentes=[]
+ if self.editor.maConfiguration.rendVisiblesLesCaches :
+ for e in self.jdc.etapes:
+ listeEtapesDejaPresentes.append(e.nom)
+ for c in aExclure :
+ if c not in listeEtapesDejaPresentes : aExclure.remove(c)
+ #for e in self.jdc.etapes:
+ # print (e.nom)
+ # print (e.definition.repetable)
+ # if e.definition.repetable == 'n' : aExclure.append(e.nom)
+ #print (aExclure)
+ for l in self.jdc.getListeCmd():
+ if l not in aExclure :
+ if sensibleALaCasse and (filtre != None and not filtre in l) : continue
+ if (not sensibleALaCasse) and filtre != None and (not filtre in l) and (not filtre.upper() in l) : continue
+ listeACreer.append(l)
+ return listeACreer
+
+ def ajouteRadioButtons(self):
+ if self.editor.maConfiguration.nombreDeBoutonParLigne != 0 :
+ self.ajoutePushButtons()
+ return
+ #print 'ds ajouteRadioButtons'
+ filtre=str(self.LEFiltre.text())
+ if filtre==str("") : filtre=None
+ if hasattr(self,'buttonGroup') :
+ for b in self.buttonGroup.buttons():
+ self.buttonGroup.removeButton(b)
+ b.setParent(None)
+ b.close()
+ else :
+ self.buttonGroup = QButtonGroup()
+ for w in self.listeWidget :
+ w.setParent(None)
+ w.close()
+ self.listeWidget=[]
+ if self.boolAlpha==1 :
+ liste=self.creeListeCommande(filtre)
+ for cmd in liste :
+ self.dicoCmd[tr(cmd)]=cmd
+ rbcmd=(QRadioButton(tr(cmd)))
+ self.buttonGroup.addButton(rbcmd)
+ self.commandesLayout.addWidget(rbcmd)
+ #if self.simpleClic : rbcmd.mouseReleaseEvent=self.insereNoeudApresClick
+ #else : rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+ #self.buttonGroup.buttonClicked.connect(self.rbClique)
+ if not(self.simpleClic ): rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+ if self.simpleClic :
+ self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
+ else :
+ self.buttonGroup.buttonClicked.connect(self.rbClique)
+ elif self.boolGroupe==1 :
+ listeGroupes,dictGroupes=self.jdc.getGroups()
+ for grp in listeGroupes:
+ if grp == "CACHE" : continue
+ label=QLabel(self)
+ text=tr('<html><head/><body><p><span style=\" font-weight:600;\">Groupe : '+tr(grp)+'</span></p></body></html>')
+ label.setText(text)
+ self.listeWidget.append(label)
+ aAjouter=1
+ sensibleALaCasse=self.RBCasse.isChecked()
+ for cmd in dictGroupes[grp]:
+ if sensibleALaCasse and (filtre != None and not filtre in cmd) : continue
+ if (not sensibleALaCasse) and filtre != None and (not filtre in cmd) and (not filtre.upper() in cmd) : continue
+ if aAjouter == 1 :
+ self.commandesLayout.addWidget(label)
+ aAjouter=0
+ self.dicoCmd[tr(cmd)]=cmd
+ rbcmd=(QRadioButton(tr(cmd)))
+ self.buttonGroup.addButton(rbcmd)
+ self.commandesLayout.addWidget(rbcmd)
+ if not(self.simpleClic ): rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+ if self.simpleClic :
+ self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
+ else :
+ self.buttonGroup.buttonClicked.connect(self.rbClique)
+ label2=QLabel(self)
+ label2.setText(" ")
+ self.listeWidget.append(label2)
+ self.commandesLayout.addWidget(label2)
+ elif self.boolOrdre==1 :
+ listeFiltre=self.creeListeCommande(filtre)
+ liste=[]
+ if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
+ else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
+ for cmd in Ordre_Des_Commandes :
+ if cmd in listeFiltre :
+ liste.append(cmd)
+ for cmd in liste :
+ self.dicoCmd[tr(cmd)]=cmd
+ rbcmd=(QRadioButton(tr(cmd)))
+ self.buttonGroup.addButton(rbcmd)
+ self.commandesLayout.addWidget(rbcmd)
+ if not(self.simpleClic ): rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+ if self.simpleClic :
+ self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
+ else :
+ self.buttonGroup.buttonClicked.connect(self.rbClique)
+
+
+
+ def ajoutePushButtons(self):
+ if hasattr(self,'buttonGroup') :
+ for b in self.buttonGroup.buttons():
+ self.buttonGroup.removeButton(b)
+ b.setParent(None)
+ b.close()
+ else :
+ self.buttonGroup = QButtonGroup()
+ self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
+ for w in self.listeWidget :
+ w.setParent(None)
+ w.close()
+ self.listeWidget=[]
+
+ if not hasattr(self,'maGrilleBouton') :
+ #self.commandesLayout.close()
+ self.maGrilleBouton=QGridLayout()
+ self.maGrilleBouton.setSpacing(20)
+ self.verticalLayout.addLayout(self.maGrilleBouton)
+ col=-1
+ ligne = 0
+
+ if self.boolAlpha==1 :
+ liste=self.creeListeCommande(None)
+ elif self.boolOrdre:
+ liste=self.creeListeCommande(None)
+ listeFiltre=self.creeListeCommande(None)
+ liste=[]
+ if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
+ else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
+ for cmd in Ordre_Des_Commandes :
+ if cmd in listeFiltre :
+ liste.append(cmd)
+ for cmd in liste :
+ col=col+1
+ if col == self.editor.maConfiguration.nombreDeBoutonParLigne :
+ col=0
+ ligne=ligne+1
+ self.dicoCmd[tr(cmd)]=cmd
+ rbcmd=QPushButton(tr(cmd))
+ rbcmd.setGeometry(QRect(40, 20, 211, 71))
+ rbcmd.setMaximumSize(QSize(250, 81))
+ rbcmd.setStyleSheet("background-color : rgb(66, 165, 238);\n"
"/*border-style : outset;*/\n"
"border-radius : 20px;\n"
"border-width : 30 px;\n"
"border-color : beige;\n"
"text-align : center")
- #print ('self.editor.maConfiguration.dicoImages', self.editor.maConfiguration.dicoImages)
- if cmd in self.editor.maConfiguration.dicoImages :
- fichier=self.editor.maConfiguration.dicoImages[cmd]
- icon = QIcon()
- icon.addPixmap(QPixmap(fichier), QIcon.Normal, QIcon.Off)
- rbcmd.setIcon(icon)
- rbcmd.setIconSize(QSize(48, 48))
-
- self.buttonGroup.addButton(rbcmd)
- self.maGrilleBouton.addWidget(rbcmd,ligne,col)
-
- def clearFiltre(self):
- self.LEFiltre.setText("")
- self.ajouteRadioButtons()
-
- def rbCliqueEtInsere(self,id):
- self.rbClique(id)
- self.insereNoeudApresClick(None)
-
- def rbClique(self,id):
-
- try :
- self.name=self.dicoCmd[id.text()]
- except :
+ #print ('self.editor.maConfiguration.dicoImages', self.editor.maConfiguration.dicoImages)
+ if cmd in self.editor.maConfiguration.dicoImages :
+ fichier=self.editor.maConfiguration.dicoImages[cmd]
+ icon = QIcon()
+ icon.addPixmap(QPixmap(fichier), QIcon.Normal, QIcon.Off)
+ rbcmd.setIcon(icon)
+ rbcmd.setIconSize(QSize(48, 48))
+
+ self.buttonGroup.addButton(rbcmd)
+ self.maGrilleBouton.addWidget(rbcmd,ligne,col)
+
+ def clearFiltre(self):
+ self.LEFiltre.setText("")
+ self.ajouteRadioButtons()
+
+ def rbCliqueEtInsere(self,id):
+ self.rbClique(id)
+ self.insereNoeudApresClick(None)
+
+ def rbClique(self,id):
+
try :
- self.name=self.dicoCmd[str(id.text())]
+ self.name=self.dicoCmd[id.text()]
except :
- print ('pb d accent : contacter la maintenance')
+ try :
+ self.name=self.dicoCmd[str(id.text())]
+ except :
+ print ('pb d accent : contacter la maintenance')
- definitionEtape=getattr(self.jdc.cata,self.name)
- #commentaire=getattr(definitionEtape,self.jdc.lang)
- try :
- commentaire=getattr(definitionEtape,self.jdc.lang)
- except :
+ definitionEtape=getattr(self.jdc.cata,self.name)
+ #commentaire=getattr(definitionEtape,self.jdc.lang)
try :
- commentaire=getattr(definitionEtape,"ang")
+ commentaire=getattr(definitionEtape,self.jdc.lang)
except :
- commentaire=""
- self.editor.afficheCommentaire(commentaire)
+ try :
+ commentaire=getattr(definitionEtape,"ang")
+ except :
+ commentaire=""
+ self.editor.afficheCommentaire(commentaire)
- def setValide(self):
- #PNPN a priori pas d icone mais peut-etre a faire
- pass
+ def setValide(self):
+ #PNPN a priori pas d icone mais peut-etre a faire
+ pass
from PyQt5.QtGui import QPalette
from PyQt5.QtCore import QProcess, QFileInfo, Qt, QSize
-
+
# Import des panels
class MonChoixLangue(Ui_ChoixLangue,QDialog):
- """
- Classe definissant le panel associe aux mots-cles qui demandent
- a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discretes
- """
- def __init__(self, appliEficas=None):
- QDialog.__init__(self,appliEficas)
- self.setModal(True)
- self.setupUi(self)
- self.appliEficas=appliEficas
- self.installLangue()
- self.code=None
- self.pB_OK.clicked.connect(self.choisitLangue)
-
-
- def installLangue(self):
- if self.appliEficas.langue == 'fr' : self.rbFrancais.setChecked(True)
- else : self.rbEnglish.setChecked(True)
-
- def choisitLangue(self):
- if self.rbFrancais.isChecked() : self.appliEficas.langue='fr'
- else : self.appliEficas.langue ='ang'
- self.close()
-
+ """
+ Classe definissant le panel associe aux mots-cles qui demandent
+ a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discretes
+ """
+ def __init__(self, appliEficas=None):
+ QDialog.__init__(self,appliEficas)
+ self.setModal(True)
+ self.setupUi(self)
+ self.appliEficas=appliEficas
+ self.installLangue()
+ self.code=None
+ self.pB_OK.clicked.connect(self.choisitLangue)
+
+
+ def installLangue(self):
+ if self.appliEficas.langue == 'fr' : self.rbFrancais.setChecked(True)
+ else : self.rbEnglish.setChecked(True)
+
+ def choisitLangue(self):
+ if self.rbFrancais.isChecked() : self.appliEficas.langue='fr'
+ else : self.appliEficas.langue ='ang'
+ self.close()
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,os
# Classe definissant le panel associee aux mots-cles qui demandent
# a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
# discretes
- def __init__(self,node, parent = None,name = None,fl = 0):
+ def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonFonctionPanel"
self.node=node
self.setNbValeurs()
MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
- def setNbValeurs(self):
+ def setNbValeurs(self):
self.nbValeurs = 1
if self.node.item.waitTuple()== 1 :
- for a in self.node.item.definition.type :
- try :
- self.nbValeurs = a.ntuple
- break
- except :
- pass
+ for a in self.node.item.definition.type :
+ try :
+ self.nbValeurs = a.ntuple
+ break
+ except :
+ pass
genea=self.node.item.getGenealogie()
self.nbValeursASaisir=self.nbValeurs
if "VALE" in genea: self.nbValeurs=2
if "VALE_C" in genea: self.nbValeurs=3
- def decoupeListeValeurs(self,liste):
+ def decoupeListeValeurs(self,liste):
#decoupe la liste des valeurs en n ( les x puis les y)
l_valeurs=[]
if ((len(liste)% self.nbValeursASaisir != 0 and (len(liste)% self.nbValeurs))):
i=0
while ( i < len(liste) ) :
try :
- t=tuple(liste[i:i+self.nbValeurs])
- i=i+self.nbValeurs
+ t=tuple(liste[i:i+self.nbValeurs])
+ i=i+self.nbValeurs
except:
- t=tuple(liste[i:len(liste)])
+ t=tuple(liste[i:len(liste)])
l_valeurs.append(t)
return l_valeurs
- def buildLBValeurs(self,listeValeurs=None):
+ def buildLBValeurs(self,listeValeurs=None):
self.LBValeurs.clear()
if listeValeurs== None :
- listeValeurs=self.node.item.getListeValeurs()
+ listeValeurs=self.node.item.getListeValeurs()
if self.node.item.waitTuple()== 1 :
- listeATraiter=listeValeurs
- for valeur in listeATraiter:
- str_valeur=str(valeur)
- self.LBValeurs.addItem(str_valeur)
- else :
- for valeur in self.decoupeListeValeurs(listeValeurs):
- if type(valeur) == tuple:
- TupleEnTexte="("
- for val in valeur :
- TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
- TupleEnTexte = TupleEnTexte[0:-2] +")"
- self.LBValeurs.addItem(TupleEnTexte)
- else :
- self.LBValeurs.addItem(str(valeur))
-
-
- def ajout1Valeur(self,liste=[]):
+ listeATraiter=listeValeurs
+ for valeur in listeATraiter:
+ str_valeur=str(valeur)
+ self.LBValeurs.addItem(str_valeur)
+ else :
+ for valeur in self.decoupeListeValeurs(listeValeurs):
+ if type(valeur) == tuple:
+ TupleEnTexte="("
+ for val in valeur :
+ TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
+ TupleEnTexte = TupleEnTexte[0:-2] +")"
+ self.LBValeurs.addItem(TupleEnTexte)
+ else :
+ self.LBValeurs.addItem(str(valeur))
+
+
+ def ajout1Valeur(self,liste=[]):
# Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
validite=1
if liste == [] :
- if self.node.item.waitTuple()== 1 :
- liste=SaisieValeur.TraiteLEValeurTuple(self)
- if liste == [''] : return
- else :
- liste,validite=SaisieValeur.TraiteLEValeur(self)
- if validite == 0 : return
+ if self.node.item.waitTuple()== 1 :
+ liste=SaisieValeur.TraiteLEValeurTuple(self)
+ if liste == [''] : return
+ else :
+ liste,validite=SaisieValeur.TraiteLEValeur(self)
+ if validite == 0 : return
if liste ==[] : return
if (self.node.item.waitTuple()== 1 and len(liste) != self.nbValeurs):
- commentaire = str(liste)
- commentaire += tr(" n est pas un tuple de ")
- commentaire += str(self.nbValeursASaisir)
+ commentaire = str(liste)
+ commentaire += tr(" n est pas un tuple de ")
+ commentaire += str(self.nbValeursASaisir)
commentaire += tr(" valeurs")
- self.LEValeur.setText(str(liste))
+ self.LEValeur.setText(str(liste))
self.editor.afficheInfos(commentaire,Qt.red)
return
if self.node.item.waitTuple()== 1 :
- liste2=tuple(liste)
- liste=liste2
+ liste2=tuple(liste)
+ liste=liste2
index=self.LBValeurs.currentRow()
if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
- index=0
+ index=0
else :
- index=self.LBValeurs.currentRow() + 1
+ index=self.LBValeurs.currentRow() + 1
indexListe=index*self.nbValeurs
if index == 0 : indexListe=len(self.listeValeursCourantes)
listeVal=[]
for valeur in self.listeValeursCourantes :
- listeVal.append(valeur)
+ listeVal.append(valeur)
if self.node.item.waitTuple()== 1 :
- indexListe = index
- validite,comm,comm2,listeRetour=self.politique.ajoutTuple(liste,index,listeVal)
+ indexListe = index
+ validite,comm,comm2,listeRetour=self.politique.ajoutTuple(liste,index,listeVal)
else :
- validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,index,listeVal)
+ validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,index,listeVal)
self.Commentaire.setText(tr(comm2))
if not validite :
- self.editor.afficheInfos(comm,Qt.red)
+ self.editor.afficheInfos(comm,Qt.red)
else:
- self.LEValeur.setText("")
- l1=self.listeValeursCourantes[:indexListe]
- l3=self.listeValeursCourantes[indexListe:]
- if self.node.item.waitTuple()== 1 :
- listeATraiter=listeRetour
- else :
- listeATraiter=self.decoupeListeValeurs(listeRetour)
- for valeur in listeATraiter :
- if type(valeur) == tuple:
- TupleEnTexte="("
- for val in valeur :
- TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
- str_valeur = TupleEnTexte[0:-2] +")"
- else :
- str_valeur=str(valeur)
- self.LBValeurs.insertItem(index,str_valeur)
- item=self.LBValeurs.item(index)
- item.setSelected(1)
- self.LBValeurs.setCurrentItem(item)
- index=index+1
- self.listeValeursCourantes=l1+listeRetour+l3
- self.buildLBValeurs(self.listeValeursCourantes)
-
-
- def ajoutNValeur(self,liste) :
+ self.LEValeur.setText("")
+ l1=self.listeValeursCourantes[:indexListe]
+ l3=self.listeValeursCourantes[indexListe:]
+ if self.node.item.waitTuple()== 1 :
+ listeATraiter=listeRetour
+ else :
+ listeATraiter=self.decoupeListeValeurs(listeRetour)
+ for valeur in listeATraiter :
+ if type(valeur) == tuple:
+ TupleEnTexte="("
+ for val in valeur :
+ TupleEnTexte = TupleEnTexte + str(self.politique.getValeurTexte(val)) +", "
+ str_valeur = TupleEnTexte[0:-2] +")"
+ else :
+ str_valeur=str(valeur)
+ self.LBValeurs.insertItem(index,str_valeur)
+ item=self.LBValeurs.item(index)
+ item.setSelected(1)
+ self.LBValeurs.setCurrentItem(item)
+ index=index+1
+ self.listeValeursCourantes=l1+listeRetour+l3
+ self.buildLBValeurs(self.listeValeursCourantes)
+
+
+ def ajoutNValeur(self,liste) :
if len(liste)%self.nbValeurs != 0 :
- texte="Nombre de valeur incorrecte"
- #self.Commentaire.setText(texte)
- self.editor.afficheInfos(texte,Qt.red)
- return
+ texte="Nombre de valeur incorrecte"
+ #self.Commentaire.setText(texte)
+ self.editor.afficheInfos(texte,Qt.red)
+ return
listeDecoupee=self.decoupeListeValeurs(liste)
for vals in listeDecoupee :
self.ajout1Valeur(vals)
-
- def sup1Valeur(self):
+
+ def sup1Valeur(self):
index=self.LBValeurs.currentRow()
if index == None : return
removed_item = self.LBValeurs.takeItem(index)
indexAOter=index*self.nbValeurs + i
indexInterdit.append(indexAOter)
if self.node.item.waitTuple()== 1 :
- indexInterdit=[index]
+ indexInterdit=[index]
i=0
for valeur in self.listeValeursCourantes :
- if not (i in indexInterdit) :
+ if not (i in indexInterdit) :
listeVal.append(valeur)
i = i+1
self.listeValeursCourantes=listeVal
listeValeurs=self.listeValeursCourantes
-
-
from desGroupeOptionnel import Ui_groupeOptionnel
from desPBOptionnelMT import Ui_customPB
-
+
# Import des panels
class MonRBButtonCustom(QCheckBox):
- def __init__(self,texte,monOptionnel,parent=None,couleur=None):
- QCheckBox.__init__(self,tr(texte),parent)
- self.mousePressed=True
- self.monOptionnel=monOptionnel
- self.setToolTip(tr("clicker: affichage aide, double-click: ajout"))
- if couleur != None :
- mapalette=self.palette()
- mapalette.setColor( QPalette.WindowText, couleur )
- mapalette.setColor( QPalette.Base, Qt.green )
- self.setPalette( mapalette );
- self.setText(tr(texte))
- try :
- monToolTip=monOptionnel.parentMC.dictToolTipMc[texte]
- self.setToolTip(monToolTip)
- except :
- pass
-
-
- def mouseDoubleClickEvent(self, event):
- #print "dans mouseDoubleClickEvent", self
- if self not in self.monOptionnel.dicoCb:
- event.accept()
- return
- listeCheckedMC="+"+self.monOptionnel.dicoCb[self]
- self.monOptionnel.parentMC.ajoutMC(listeCheckedMC)
- event.accept()
-
-
- def mousePressEvent(self, event):
- if not( event.button() != Qt.RightButton) :
- event.accept()
- return
- if self.monOptionnel.cbPressed != None :
- self.monOptionnel.cbPressed.setChecked(False)
- self.monOptionnel.cbPressed=self
- if self.mousePressed == False :
- self.mousePressed=True
- else :
- self.mousePressed=False
- self.ajoutAideMC()
- QCheckBox.mousePressEvent(self, event)
- event.accept()
-
- def ajoutAideMC(self):
- try :
- maDefinition = self.monOptionnel.parentMC.definition.entites[self.texte]
- maLangue = self.monOptionnel.parentMC.jdc.lang
- if hasattr(maDefinition,maLangue):
- self.monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang)
- else :
- self.monAide = ""
- except :
- self.monAide = ""
- self.monOptionnel.parentMC.editor.afficheCommentaire(self.monAide)
-
+ def __init__(self,texte,monOptionnel,parent=None,couleur=None):
+ QCheckBox.__init__(self,tr(texte),parent)
+ self.mousePressed=True
+ self.monOptionnel=monOptionnel
+ self.setToolTip(tr("clicker: affichage aide, double-click: ajout"))
+ if couleur != None :
+ mapalette=self.palette()
+ mapalette.setColor( QPalette.WindowText, couleur )
+ mapalette.setColor( QPalette.Base, Qt.green )
+ self.setPalette( mapalette );
+ self.setText(tr(texte))
+ try :
+ monToolTip=monOptionnel.parentMC.dictToolTipMc[texte]
+ self.setToolTip(monToolTip)
+ except :
+ pass
+
+
+ def mouseDoubleClickEvent(self, event):
+ #print "dans mouseDoubleClickEvent", self
+ if self not in self.monOptionnel.dicoCb:
+ event.accept()
+ return
+ listeCheckedMC="+"+self.monOptionnel.dicoCb[self]
+ self.monOptionnel.parentMC.ajoutMC(listeCheckedMC)
+ event.accept()
+
+
+ def mousePressEvent(self, event):
+ if not( event.button() != Qt.RightButton) :
+ event.accept()
+ return
+ if self.monOptionnel.cbPressed != None :
+ self.monOptionnel.cbPressed.setChecked(False)
+ self.monOptionnel.cbPressed=self
+ if self.mousePressed == False :
+ self.mousePressed=True
+ else :
+ self.mousePressed=False
+ self.ajoutAideMC()
+ QCheckBox.mousePressEvent(self, event)
+ event.accept()
+
+ def ajoutAideMC(self):
+ try :
+ maDefinition = self.monOptionnel.parentMC.definition.entites[self.texte]
+ maLangue = self.monOptionnel.parentMC.jdc.lang
+ if hasattr(maDefinition,maLangue):
+ self.monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang)
+ else :
+ self.monAide = ""
+ except :
+ self.monAide = ""
+ self.monOptionnel.parentMC.editor.afficheCommentaire(self.monAide)
+
class MonPBButtonCustom(QWidget,Ui_customPB):
- def __init__(self,texte,monOptionnel,parent=None,couleur=None):
- QWidget.__init__(self)
- self.setupUi(self)
- if couleur != None :
- self.monPb.setText(texte)
- self.monPb.setStyleSheet('QPushButton {background-color: #A3C1DA; color: red;}')
- #mapalette=self.monPb.palette()
- #mapalette.setColor( QPalette.ButtonText, Qt.red )
- #self.monPb.setPalette( mapalette )
- self.monPb.update()
- #self.update()
- try :
- monToolTip=monOptionnel.parentMC.dictToolTipMc[texte]
- self.monPb.setToolTip(monToolTip)
- except :
- pass
- self.monPb.setText(texte)
- self.monPb.clicked.connect(self.ajoutMC)
-
- self.texte=texte
- self.monOptionnel=monOptionnel
- self.definitAideMC()
- self.setToolTip(self.monAide)
-
- def ajoutMC (self) :
- listeCheckedMC="+"+self.monOptionnel.dicoCb[self]
- self.monOptionnel.parentMC.ajoutMC(listeCheckedMC)
-
- def definitAideMC(self):
- try :
- maDefinition = self.monOptionnel.parentMC.definition.entites[self.texte]
- maLangue = self.monOptionnel.parentMC.jdc.lang
- if hasattr(maDefinition,maLangue):
- self.monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang)
- except :
- self.monAide = ""
-
-class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel):
- """
- """
- def __init__(self,liste,liste_rouge,parentQt,parentMC):
- #print ("dans init de monWidgetOptionnel ", parentQt, liste,parentMC)
- QWidget.__init__(self,None)
- self.setupUi(self)
- self.listeChecked=[]
- self.dicoCb={}
- self.mousePressed=False
- self.cbPressed=None
- self.cb=None
- self.parentQt=parentQt
- self.parentMC=parentMC
-
-
- if liste != [] :
- self.affiche(liste,liste_rouge)
- self.afficheTitre()
- elif self.parentQt.parentQt.maConfiguration.afficheOptionnelVide != False :
- self.afficheTitre()
- self.MCOptionnelLayout.insertWidget(0,QLabel(tr('Pas de MC Optionnel')))
- else :
- self.frameLabelMC.close()
- #print "dans fin de monWidgetOptionnel ", parentQt
-
-
- def afficheTitre(self):
- labeltext,fonte,couleur = self.parentMC.node.item.getLabelText()
- #print (labeltext)
- l=tr(labeltext)
- li=[]
- while len(l) > 25:
- li.append(l[0:24])
- l=l[24:]
- li.append(l)
- texte=""
- for l in li : texte+=l+"\n"
- texte=texte[0:-1]
- self.MCLabel.setText(texte)
-
- def affiche(self,liste,liste_rouge):
- #print ("dans Optionnel ____ affiche", liste,liste_rouge)
- self.dicoCb={}
- liste.reverse()
- for mot in liste :
- #if mot in liste_rouge : print ('je dois afficher en rouge' , mot)
- couleur=None
- if mot in liste_rouge : couleur=Qt.red
- if self.parentQt.parentQt.maConfiguration.simpleClic == False :
- cb = MonRBButtonCustom(mot,self,couleur=couleur)
- cb.clicked.connect(cb.ajoutAideMC)
- else :
- cb = MonPBButtonCustom(mot,self,couleur=couleur)
-
- self.MCOptionnelLayout.insertWidget(0,cb)
- self.dicoCb[cb]=mot
- self.scrollAreaCommandesOptionnelles.horizontalScrollBar().setSliderPosition(0)
+ def __init__(self,texte,monOptionnel,parent=None,couleur=None):
+ QWidget.__init__(self)
+ self.setupUi(self)
+ if couleur != None :
+ self.monPb.setText(texte)
+ self.monPb.setStyleSheet('QPushButton {background-color: #A3C1DA; color: red;}')
+ #mapalette=self.monPb.palette()
+ #mapalette.setColor( QPalette.ButtonText, Qt.red )
+ #self.monPb.setPalette( mapalette )
+ self.monPb.update()
+ #self.update()
+ try :
+ monToolTip=monOptionnel.parentMC.dictToolTipMc[texte]
+ self.monPb.setToolTip(monToolTip)
+ except :
+ pass
+ self.monPb.setText(texte)
+ self.monPb.clicked.connect(self.ajoutMC)
+
+ self.texte=texte
+ self.monOptionnel=monOptionnel
+ self.definitAideMC()
+ self.setToolTip(self.monAide)
+
+ def ajoutMC (self) :
+ listeCheckedMC="+"+self.monOptionnel.dicoCb[self]
+ self.monOptionnel.parentMC.ajoutMC(listeCheckedMC)
+
+ def definitAideMC(self):
+ try :
+ maDefinition = self.monOptionnel.parentMC.definition.entites[self.texte]
+ maLangue = self.monOptionnel.parentMC.jdc.lang
+ if hasattr(maDefinition,maLangue):
+ self.monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang)
+ except :
+ self.monAide = ""
+class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel):
+ """
+ """
+ def __init__(self,liste,liste_rouge,parentQt,parentMC):
+ #print ("dans init de monWidgetOptionnel ", parentQt, liste,parentMC)
+ QWidget.__init__(self,None)
+ self.setupUi(self)
+ self.listeChecked=[]
+ self.dicoCb={}
+ self.mousePressed=False
+ self.cbPressed=None
+ self.cb=None
+ self.parentQt=parentQt
+ self.parentMC=parentMC
+
+
+ if liste != [] :
+ self.affiche(liste,liste_rouge)
+ self.afficheTitre()
+ elif self.parentQt.parentQt.maConfiguration.afficheOptionnelVide != False :
+ self.afficheTitre()
+ self.MCOptionnelLayout.insertWidget(0,QLabel(tr('Pas de MC Optionnel')))
+ else :
+ self.frameLabelMC.close()
+ #print "dans fin de monWidgetOptionnel ", parentQt
+
+
+ def afficheTitre(self):
+ labeltext,fonte,couleur = self.parentMC.node.item.getLabelText()
+ #print (labeltext)
+ l=tr(labeltext)
+ li=[]
+ while len(l) > 25:
+ li.append(l[0:24])
+ l=l[24:]
+ li.append(l)
+ texte=""
+ for l in li : texte+=l+"\n"
+ texte=texte[0:-1]
+ self.MCLabel.setText(texte)
+
+ def affiche(self,liste,liste_rouge):
+ #print ("dans Optionnel ____ affiche", liste,liste_rouge)
+ self.dicoCb={}
+ liste.reverse()
+ for mot in liste :
+ #if mot in liste_rouge : print ('je dois afficher en rouge' , mot)
+ couleur=None
+ if mot in liste_rouge : couleur=Qt.red
+ if self.parentQt.parentQt.maConfiguration.simpleClic == False :
+ cb = MonRBButtonCustom(mot,self,couleur=couleur)
+ cb.clicked.connect(cb.ajoutAideMC)
+ else :
+ cb = MonPBButtonCustom(mot,self,couleur=couleur)
+
+ self.MCOptionnelLayout.insertWidget(0,cb)
+ self.dicoCb[cb]=mot
+ self.scrollAreaCommandesOptionnelles.horizontalScrollBar().setSliderPosition(0)
class MonLabelClic(QLabel) :
- def __init__(self,parent):
+ def __init__(self,parent):
QLabel.__init__(self,parent)
- # Pas propre mais impossible de faire fonctionner isinstance sur Groupe, MonWidgetCommande
+ # Pas propre mais impossible de faire fonctionner isinstance sur Groupe, MonWidgetCommande
# PNPNPN ? a ameliorer
if isinstance (parent,QFrame): parent=parent.parent()
while not( hasattr(parent,'traiteClicSurLabel')) :
- try : parent=parent.parent()
- except : print ("pb avec MonLabelClic"); break
+ try : parent=parent.parent()
+ except : print ("pb avec MonLabelClic"); break
self.parent=parent
- def event(self,event) :
- if event.type() == QEvent.MouseButtonRelease:
+ def event(self,event) :
+ if event.type() == QEvent.MouseButtonRelease:
self.texte=self.text()
self.parent.traiteClicSurLabel(self.texte)
- return QLabel.event(self,event)
-
+ return QLabel.event(self,event)
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from PyQt5.QtWidgets import QButtonGroup, QToolButton
#----------------------
# -------------------------------
- def __init__(self,appliEficas):
+ def __init__(self,appliEficas):
# -------------------------------
- self.appliEficas = appliEficas
- self.buttonGroup = QButtonGroup()
-
- for etape in self.appliEficas.readercata.cata.JdC.commandes :
- nomEtape = etape.nom
- toolButton = QToolButton(self.appliEficas.toolBarCommande)
- icon = QIcon()
- if nomEtape in self.appliEficas.maConfiguration.dicoIcones:
- fichier = self.appliEficas.maConfiguration.dicoIcones[nomEtape]
- icon.addPixmap(QPixmap(fichier), QIcon.Normal, QIcon.Off)
- toolButton.setIcon(icon)
- else :
- try : label = nomEtape[0:3]
- except : label = nomEtape
- toolButton.setText(label)
+ self.appliEficas = appliEficas
+ self.buttonGroup = QButtonGroup()
- action = self.appliEficas.toolBarCommande.addWidget(toolButton)
- action.setVisible(True)
- toolButton.setObjectName(nomEtape)
- toolButton.setToolTip(tr(nomEtape))
- self.buttonGroup.addButton(toolButton)
+ for etape in self.appliEficas.readercata.cata.JdC.commandes :
+ nomEtape = etape.nom
+ toolButton = QToolButton(self.appliEficas.toolBarCommande)
+ icon = QIcon()
+ if nomEtape in self.appliEficas.maConfiguration.dicoIcones:
+ fichier = self.appliEficas.maConfiguration.dicoIcones[nomEtape]
+ icon.addPixmap(QPixmap(fichier), QIcon.Normal, QIcon.Off)
+ toolButton.setIcon(icon)
+ else :
+ try : label = nomEtape[0:3]
+ except : label = nomEtape
+ toolButton.setText(label)
- self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
-
- def rbCliqueEtInsere(self,id):
- self.appliEficas.handleAjoutEtape(id.objectName())
+ action = self.appliEficas.toolBarCommande.addWidget(toolButton)
+ action.setVisible(True)
+ toolButton.setObjectName(nomEtape)
+ toolButton.setToolTip(tr(nomEtape))
+ self.buttonGroup.addButton(toolButton)
+ self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
+ def rbCliqueEtInsere(self,id):
+ self.appliEficas.handleAjoutEtape(id.objectName())
# Import des panels
class DRecherche(Ui_desRecherche ,QDialog):
- """
- """
- def __init__(self,parent = None , name = None,fl = 0):
- QDialog.__init__(self,parent)
- self.parentQT=parent
- self.tree=self.parentQT.tree
- self.setupUi(self)
- self.PBSuivant.setDefault(True)
- self.PBSuivant.setAutoDefault(False)
- self.PBSuivant.clicked.connect( self.suivantClicked)
- self.LERecherche.returnPressed.connect(self.recherche)
- self.surLigne=0
- self.listeTrouvee=()
- self.nodeSurligne=None
+ """
+ """
+ def __init__(self,parent = None , name = None,fl = 0):
+ QDialog.__init__(self,parent)
+ self.parentQT=parent
+ self.tree=self.parentQT.tree
+ self.setupUi(self)
+ self.PBSuivant.setDefault(True)
+ self.PBSuivant.setAutoDefault(False)
+ self.PBSuivant.clicked.connect( self.suivantClicked)
+ self.LERecherche.returnPressed.connect(self.recherche)
+ self.surLigne=0
+ self.listeTrouvee=()
+ self.nodeSurligne=None
- def suivantClicked(self):
- #if self.motAChercher!=self.LERecherche.text(): self.recherche()
- if self.listeTrouvee=={} : return
- if self.surLigne > len(self.listeTrouvee) -1 : return
- if self.nodeSurligne!=None : self.nodeSurligne.updateNodeTexteInBlack()
- #self.listeTrouvee[self.surLigne].updateNodeTexteInBlue()
- #self.nodeSurligne=self.listeTrouvee[self.surLigne]
- self.listeTrouvee[self.surLigne].select()
- self.listeTrouvee[self.surLigne].affichePanneau()
- self.surLigne=self.surLigne+1
- self.PBSuivant.setFocus()
- if self.surLigne == len(self.listeTrouvee): self.surLigne=0
-
- def recherche(self):
- self.motAChercher=self.LERecherche.text()
- self.listeTrouvee=self.tree.findItems(self.motAChercher,Qt.MatchContains|Qt.MatchRecursive,0)
- self.surLigne=0
+ def suivantClicked(self):
+ #if self.motAChercher!=self.LERecherche.text(): self.recherche()
+ if self.listeTrouvee=={} : return
+ if self.surLigne > len(self.listeTrouvee) -1 : return
+ if self.nodeSurligne!=None : self.nodeSurligne.updateNodeTexteInBlack()
+ #self.listeTrouvee[self.surLigne].updateNodeTexteInBlue()
+ #self.nodeSurligne=self.listeTrouvee[self.surLigne]
+ self.listeTrouvee[self.surLigne].select()
+ self.listeTrouvee[self.surLigne].affichePanneau()
+ self.surLigne=self.surLigne+1
+ self.PBSuivant.setFocus()
+ if self.surLigne == len(self.listeTrouvee): self.surLigne=0
+ def recherche(self):
+ self.motAChercher=self.LERecherche.text()
+ self.listeTrouvee=self.tree.findItems(self.motAChercher,Qt.MatchContains|Qt.MatchRecursive,1)
+ self.surLigne=0
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from desRechercheCatalogue import Ui_desRechercheCatalogue
# Import des panels
class DRechercheCatalogue (Ui_desRechercheCatalogue ,QDialog):
- """
- """
- def __init__(self,parent,editor ):
- QDialog.__init__(self,parent)
- #self.setModal(True)
- self.setupUi(self)
- self.editor=editor
- self.CBRecherche.setEditable(True)
- self.CBRecherche.lineEdit().returnPressed.connect(self.rechercheCB)
- self.CBRecherche.currentIndexChanged.connect(self.rechercheCB)
- self.CBRecherche.currentTextChanged.connect(self.rechercheCB)
+ """
+ """
+ def __init__(self,parent,editor ):
+ QDialog.__init__(self,parent)
+ #self.setModal(True)
+ self.setupUi(self)
+ self.editor=editor
+ self.CBRecherche.setEditable(True)
+ self.CBRecherche.lineEdit().returnPressed.connect(self.rechercheCB)
+ self.CBRecherche.currentIndexChanged.connect(self.rechercheCB)
+ self.CBRecherche.currentTextChanged.connect(self.rechercheCB)
- self.initRecherche()
+ self.initRecherche()
- def initRecherche(self):
- listeChoix=list(self.editor.readercata.dicoInverse.keys())
- self.CBRecherche.addItem("")
- for choix in listeChoix:
- self.CBRecherche.addItem(choix)
- monCompleteur=QCompleter(listeChoix,self)
- monCompleteur.setCompletionMode(QCompleter.PopupCompletion)
- self.CBRecherche.setCompleter(monCompleteur)
+ def initRecherche(self):
+ listeChoix=list(self.editor.readercata.dicoInverse.keys())
+ self.CBRecherche.addItem("")
+ for choix in listeChoix:
+ self.CBRecherche.addItem(choix)
+ monCompleteur=QCompleter(listeChoix,self)
+ monCompleteur.setCompletionMode(QCompleter.PopupCompletion)
+ self.CBRecherche.setCompleter(monCompleteur)
- def rechercheCB(self):
- motAChercher=self.CBRecherche.lineEdit().text()
- self.recherche(motAChercher)
+ def rechercheCB(self):
+ motAChercher=self.CBRecherche.lineEdit().text()
+ self.recherche(motAChercher)
- def recherche(self,motAChercher):
- if str(motAChercher)=="" or str(motAChercher) == None : return
- if str(motAChercher) not in self.editor.readercata.dicoInverse:return
- try :
- #if 1 :
- genea= self.editor.readercata.dicoInverse[str(motAChercher)]
- listeGenea=[]
- for t in genea : listeGenea.append(t[0])
- listeGenea.reverse()
- texte=''
- i=0
- for mc in listeGenea :
- ligne = i*' '+str(mc) + ' / '+tr(str(mc))+'\n'
- i=i+1
- texte += ligne
- self.teGenea.setText(texte)
- self.teDoc.setText(getattr(genea[0][1],self.editor.appliEficas.langue))
-
-
- except :
- pass
+ def recherche(self,motAChercher):
+ if str(motAChercher)=="" or str(motAChercher) == None : return
+ if str(motAChercher) not in self.editor.readercata.dicoInverse:return
+ try :
+ #if 1 :
+ genea= self.editor.readercata.dicoInverse[str(motAChercher)]
+ listeGenea=[]
+ for t in genea : listeGenea.append(t[0])
+ listeGenea.reverse()
+ texte=''
+ i=0
+ for mc in listeGenea :
+ ligne = i*' '+str(mc) + ' / '+tr(str(mc))+'\n'
+ i=i+1
+ texte += ligne
+ self.teGenea.setText(texte)
+ self.teDoc.setText(getattr(genea[0][1],self.editor.appliEficas.langue))
+
+ except :
+ pass
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from desSelectVal import Ui_DSelVal
from PyQt5.QtGui import QPalette
class DSelVal(Ui_DSelVal,QDialog):
- def __init__(self,parent ,modal ) :
- QDialog.__init__(self,parent)
- self.setupUi(self)
+ def __init__(self,parent ,modal ) :
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
class MonSelectVal(DSelVal):
- """
- Classe definissant le panel associe aux mots-cles qui demandent
- a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discretes
- """
- def __init__(self,file,parent,name = None,fl = 0):
+ """
+ Classe definissant le panel associe aux mots-cles qui demandent
+ a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discretes
+ """
+ def __init__(self,file,parent,name = None,fl = 0):
#print "MonSelectVal"
self.parent=parent
DSelVal.__init__(self,parent,0)
self.initVal()
self.connecterSignaux()
- def connecterSignaux(self) :
+ def connecterSignaux(self) :
self.Bespace.clicked.connect(self.selectEsp)
self.BpointVirgule.clicked.connect(self.selectPoint)
self.Bvirgule.clicked.connect(self.selectVir)
self.BImportTout.clicked.connect(self.BImportToutPressed)
self.parent.editor.sb.messageChanged.connect(self.messageAChanger)
- def connecterSignauxQT4(self) :
+ def connecterSignauxQT4(self) :
self.connect(self.Bespace,SIGNAL("clicked()"),self.selectEsp)
self.connect(self.BpointVirgule,SIGNAL("clicked()"),self.selectPoint)
self.connect(self.Bvirgule,SIGNAL("clicked()"),self.selectVir)
self.connect(self.BImportTout,SIGNAL("clicked()"),self.BImportToutPressed)
self.connect(self.parent.editor.sb,SIGNAL("messageChanged(QString)"),self.messageAChanger)
- def messageAChanger(self):
- message=self.parent.editor.sb.currentMessage()
- mapalette=self.sb.palette()
- mapalette.setColor( QPalette.Text,Qt.red )
- self.sb.setPalette( mapalette )
- self.sb.setText(message)
- QTimer.singleShot(3000, self.efface)
-
- def efface(self):
- self.sb.setText("")
-
- def readVal(self):
+ def messageAChanger(self):
+ message=self.parent.editor.sb.currentMessage()
+ mapalette=self.sb.palette()
+ mapalette.setColor( QPalette.Text,Qt.red )
+ self.sb.setPalette( mapalette )
+ self.sb.setText(message)
+ QTimer.singleShot(3000, self.efface)
+
+ def efface(self):
+ self.sb.setText("")
+
+ def readVal(self):
if self.file == "" : return
try :
- f = open(self.file, "r")
- self.texte = f.read()
- f.close()
+ f = open(self.file, "r")
+ self.texte = f.read()
+ f.close()
except :
- QMessageBox.warning( self,tr( "Fichier Indisponible"),tr( "Lecture impossible"))
- self.texte=""
- return
+ QMessageBox.warning( self,tr( "Fichier Indisponible"),tr( "Lecture impossible"))
+ self.texte=""
+ return
- def initVal(self):
+ def initVal(self):
self.TBtext.clear()
self.TBtext.setText(self.texte)
- def selectEsp(self):
+ def selectEsp(self):
self.separateur=" "
-
- def selectVir(self):
+
+ def selectVir(self):
self.separateur=","
-
- def selectPoint(self):
+
+ def selectPoint(self):
self.separateur=";"
-
- def BImportSelPressed(self):
+
+ def BImportSelPressed(self):
texte = self.TBtext.textCursor().selectedText()
textTraite=texte.replace(u'\u2029',"\n")
self.textTraite=str(textTraite)
self.traitement()
-
- def BImportToutPressed(self):
+
+ def BImportToutPressed(self):
self.textTraite=self.texte
self.traitement()
- def traitement(self):
+ def traitement(self):
if self.textTraite == "" : return
if self.textTraite[-1]=="\n" : self.textTraite=self.textTraite[0:-1]
self.textTraite=self.textTraite.replace("\n",self.separateur)
liste1=self.textTraite.split(self.separateur)
liste=[]
for val in liste1 :
- if val != '' and val != ' ' and val != self.separateur :
- val=str(val)
- try :
- #if 1 :
- val2=eval(val,{})
- liste.append(val2)
- except :
- pass
- self.parent.ajoutNValeur(liste)
-
+ if val != '' and val != ' ' and val != self.separateur :
+ val=str(val)
+ try :
+ #if 1 :
+ val2=eval(val,{})
+ liste.append(val2)
+ except :
+ pass
+ self.parent.ajoutNValeur(liste)
if entete != None : self.setWindowTitle (entete)
for ligne in liste :
- texte=ligne[0]
- couleur=ligne[1]
- if couleur==Qt.black :
- self.LBRegles.addItem(texte)
- else :
- monItem=QListWidgetItem(texte)
- monItem.setForeground(Qt.red)
- self.LBRegles.addItem(monItem)
-
-
-
+ texte=ligne[0]
+ couleur=ligne[1]
+ if couleur==Qt.black :
+ self.LBRegles.addItem(texte)
+ else :
+ monItem=QListWidgetItem(texte)
+ monItem.setForeground(Qt.red)
+ self.LBRegles.addItem(monItem)
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
if entete != None : self.setWindowTitle (entete)
if entete != None : self.setText (texte)
-
- def setText(self, txt ):
+
+ def setText(self, txt ):
self.view.setText(txt)
-
+
def saveFile(self):
#recuperation du nom du fichier
if self.editor != None :
- dir=self.editor.appliEficas.maConfiguration.savedir
+ dir=self.editor.appliEficas.maConfiguration.savedir
else:
- dir='/tmp'
+ dir='/tmp'
fn = QFileDialog.getSaveFileName(None,
tr("Sauvegarder le fichier"),
dir)
ulfile = os.path.abspath(fn)
if self.editor != None :
- self.editor.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+ self.editor.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
try:
- f = open(fn, 'w')
- f.write(str(self.view.toPlainText()))
- f.close()
- return 1
+ f = open(fn, 'w')
+ f.write(str(self.view.toPlainText()))
+ f.close()
+ return 1
except IOError as why:
- QMessageBox.critical(self, tr("Sauvegarder le fichier"),
- tr('Le fichier')+str(fn) + tr('n a pas pu etre sauvegarde : ') + str(why))
- return
-
-
+ QMessageBox.critical(self, tr("Sauvegarder le fichier"),
+ tr('Le fichier')+str(fn) + tr('n a pas pu etre sauvegarde : ') + str(why))
+ return
# Import des panels
class DVisu(Ui_DVisu, QDialog):
- """
- """
- def __init__(self,parent = None , name = None,fl = 0):
- QDialog.__init__(self,parent)
- self.setModal(True)
- self.setupUi(self)
+ """
+ """
+ def __init__(self,parent = None , name = None,fl = 0):
+ QDialog.__init__(self,parent)
+ self.setModal(True)
+ self.setupUi(self)
- def on_buttonCancel_clicked(self):
- QDialog.reject(self)
+ def on_buttonCancel_clicked(self):
+ QDialog.reject(self)
- def on_buttonOk_clicked(self):
- QDialog.accept(self)
+ def on_buttonOk_clicked(self):
+ QDialog.accept(self)
# Modules Eficas
from Extensions.i18n import tr
-from .monWidgetRadioButton import MonWidgetRadioButtonCommun
-from desWidget4a6RadioButton import Ui_Widget4a6RadioButton
+from .monWidgetRadioButton import MonWidgetRadioButtonCommun
+from desWidget4a6RadioButton import Ui_Widget4a6RadioButton
class MonWidget4a6RadioButton (Ui_Widget4a6RadioButton,MonWidgetRadioButtonCommun):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print "dans le init de MonWidget4a6RadioButton",self
if type(monSimpDef.into) ==types.FunctionType : self.maListeDeValeur=monSimpDef.into()
else : self.maListeDeValeur=monSimpDef.into
MonWidgetRadioButtonCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- def setMaxI(self):
+ def setMaxI(self):
self.maxI=6
class MonWidget4a6RadioButtonSD (Ui_Widget4a6RadioButton,MonWidgetRadioButtonCommun):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print "dans le init de MonWidget4a6RadioButton",self
self.maListeDeValeur=node.item.getSdAvantDuBonType()
MonWidgetRadioButtonCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- def setMaxI(self):
+ def setMaxI(self):
self.maxI=6
-
# Modules Eficas
from Extensions.i18n import tr
-from .monWidgetRadioButton import MonWidgetRadioButtonCommun
-from desWidget4a6RadioButton import Ui_Widget4a6RadioButton
+from .monWidgetRadioButton import MonWidgetRadioButtonCommun
+from desWidget4a6RadioButton import Ui_Widget4a6RadioButton
class MonWidget4a6RadioButtonSD (Ui_Widget4a6RadioButton,MonWidgetRadioButtonCommun):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print "dans le init de MonWidget4a6RadioButton",self
self.maListeDeValeur=node.item.getSdAvantDuBonType()
MonWidgetRadioButtonCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- def setMaxI(self):
+ def setMaxI(self):
self.maxI=6
-
# Import des panels
class MonWidgetBloc(Ui_WidgetBloc,Groupe):
- """
- """
- def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
- #print ("bloc : ",node.item.nom)
- Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
- #if self.editor.maConfiguration.afficheCommandesPliees ==True: self.node.plieToutEtReaffiche()
- self.parentQt.commandesLayout.insertWidget(-1,self,1)
+ """
+ """
+ def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
+ #print ("bloc : ",node.item.nom)
+ Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
+ #if self.editor.maConfiguration.afficheCommandesPliees ==True: self.node.plieToutEtReaffiche()
+ self.parentQt.commandesLayout.insertWidget(-1,self,1)
- def afficheOptionnel(self):
- return
+ def afficheOptionnel(self):
+ return
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from Extensions.i18n import tr
from InterfaceQT4.feuille import Feuille
-from desWidgetCB import Ui_WidgetCB
+from desWidgetCB import Ui_WidgetCB
from InterfaceQT4.politiquesValidation import PolitiqueUnique
from InterfaceQT4.qtSaisie import SaisieValeur
class MonWidgetCBCommun (Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
self.determineChoix()
self.AAfficher=self.CBChoix
- def setValeursApresBouton(self):
- if self.objSimp.getValeur()==None :
- self.CBChoix.setCurrentIndex(-1)
- self.CBChoix.lineEdit().setText(tr("Select"))
- return
- valeur=self.objSimp.getValeur()
- if not(type(valeur) == str) : valeur=str(valeur)
- self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur))
-
- def determineChoix(self):
- listeChoix=[]
- if self.maListeDeValeur == None : self.maListeDeValeur=[]
- for choix in self.maListeDeValeur:
- if not(type(choix) == str) : choix=str(choix)
- listeChoix.append(choix)
- self.CBChoix.addItem(choix)
- self.CBChoix.setEditable(True)
- monCompleteur=QCompleter(listeChoix,self)
- monCompleteur.setCompletionMode(QCompleter.PopupCompletion)
- self.CBChoix.setCompleter(monCompleteur)
-
- def choixSaisi(self):
- self.CBChoix.lineEdit().setStyleSheet(("\n"
+ def setValeursApresBouton(self):
+ if self.objSimp.getValeur()==None :
+ self.CBChoix.setCurrentIndex(-1)
+ self.CBChoix.lineEdit().setText(tr("Select"))
+ return
+ valeur=self.objSimp.getValeur()
+ if not(type(valeur) == str) : valeur=str(valeur)
+ self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur))
+
+ def determineChoix(self):
+ listeChoix=[]
+ if self.maListeDeValeur == None : self.maListeDeValeur=[]
+ for choix in self.maListeDeValeur:
+ if not(type(choix) == str) : choix=str(choix)
+ listeChoix.append(choix)
+ self.CBChoix.addItem(choix)
+ self.CBChoix.setEditable(True)
+ monCompleteur=QCompleter(listeChoix,self)
+ monCompleteur.setCompletionMode(QCompleter.PopupCompletion)
+ self.CBChoix.setCompleter(monCompleteur)
+
+ def choixSaisi(self):
+ self.CBChoix.lineEdit().setStyleSheet(("\n"
"QLineEdit {\n"
" font : italic ;\n"
" background: rgb(235,235,235);\n"
" }"))
- valeur=str(self.CBChoix.currentText())
- SaisieValeur.LEvaleurPressed(self,valeur)
- self.reaffiche()
+ valeur=str(self.CBChoix.currentText())
+ SaisieValeur.LEvaleurPressed(self,valeur)
+ self.reaffiche()
- def wheelEvent(self, event):
- # Sinon poum sur les fenetres trop longues
- # lorsque la widget attrape le wheelevent
- event.ignore()
+ def wheelEvent(self, event):
+ # Sinon poum sur les fenetres trop longues
+ # lorsque la widget attrape le wheelevent
+ event.ignore()
class MonWidgetCB (Ui_WidgetCB, MonWidgetCBCommun):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.maListeDeValeur = monSimpDef.into
- MonWidgetCBCommun. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ self.maListeDeValeur = monSimpDef.into
+ MonWidgetCBCommun. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
class MonWidgetCBSD (Ui_WidgetCB,MonWidgetCBCommun):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.maListeDeValeur = node.item.getSdAvantDuBonType()
- MonWidgetCBCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ self.maListeDeValeur = node.item.getSdAvantDuBonType()
+ MonWidgetCBCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from monWidgetCB import MonWidgetCBCommun
from monWidgetIntoSug import GereAjoutDsPossible
-
-class MonWidgetCBIntoSug (MonWidgetCBCommun, Ui_WidgetCBIntoSug,GereAjoutDsPossible):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.maListeDeValeur=monSimpDef.into
- if node.item.hasIntoSug() : self.maListeDeValeur = node.item.getListePossibleAvecSug([])
- if hasattr(node.item,'suggestion') : self.maListeDeValeur += node.item.suggestion
- MonWidgetCBCommun. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- self.lineEditVal.returnPressed.connect(self.LEValeurAjouteDsPossible)
-
- def ajouteValeurPossible(self,valeur):
- self.CBChoix.addItem(valeur)
- # on ne sait pas si on a deja ajouté une valeur
- try : self.node.item.suggestion.append(valeur)
- except : self.node.item.suggestion = (valeur,)
- self.lineEditVal.setText('')
- self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur));
-
+class MonWidgetCBIntoSug (MonWidgetCBCommun, Ui_WidgetCBIntoSug,GereAjoutDsPossible):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ self.maListeDeValeur=monSimpDef.into
+ if node.item.hasIntoSug() : self.maListeDeValeur = node.item.getListePossibleAvecSug([])
+ if hasattr(node.item,'suggestion') : self.maListeDeValeur += node.item.suggestion
+ MonWidgetCBCommun. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+ self.lineEditVal.returnPressed.connect(self.LEValeurAjouteDsPossible)
+
+ def ajouteValeurPossible(self,valeur):
+ self.CBChoix.addItem(valeur)
+ # on ne sait pas si on a deja ajouté une valeur
+ try : self.node.item.suggestion.append(valeur)
+ except : self.node.item.suggestion = (valeur,)
+ self.lineEditVal.setText('')
+ self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur));
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetCB import Ui_WidgetCB
+from desWidgetCB import Ui_WidgetCB
from .politiquesValidation import PolitiqueUnique
from .qtSaisie import SaisieValeur
class MonWidgetCB (Ui_WidgetCB,Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
self.determineChoix()
#print self.objSimp.isOblig()
- def setValeursApresBouton(self):
- if self.objSimp.getValeur()==None :
- self.CBChoix.setCurrentIndex(-1)
- return
- valeur=self.objSimp.getValeur()
- if not(type(valeur) == str) : valeur=str(valeur)
- self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur))
-
- def determineChoix(self):
- self.CBChoix.currentIndexChanged.connect(self.choixSaisi)
+ def setValeursApresBouton(self):
+ if self.objSimp.getValeur()==None :
+ self.CBChoix.setCurrentIndex(-1)
+ return
+ valeur=self.objSimp.getValeur()
+ if not(type(valeur) == str) : valeur=str(valeur)
+ self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur))
- for choix in self.monSimpDef.into:
- if not(type(choix) == str) : choix=str(choix)
- self.CBChoix.currentIndexChanged.connect(self.choixSaisi)
- self.CBChoix.addItem(choix)
- self.CBChoix.setEditable(True)
- monCompleteur=QCompleter(listeChoix,self)
- monCompleteur.setCompletionMode(QCompleter.PopupCompletion)
- self.CBChoix.setCompleter(monCompleteur)
+ def determineChoix(self):
+ self.CBChoix.currentIndexChanged.connect(self.choixSaisi)
+
+ for choix in self.monSimpDef.into:
+ if not(type(choix) == str) : choix=str(choix)
+ self.CBChoix.currentIndexChanged.connect(self.choixSaisi)
+ self.CBChoix.addItem(choix)
+ self.CBChoix.setEditable(True)
+ monCompleteur=QCompleter(listeChoix,self)
+ monCompleteur.setCompletionMode(QCompleter.PopupCompletion)
+ self.CBChoix.setCompleter(monCompleteur)
- def choixSaisi(self):
- valeur=str(self.CBChoix.currentText())
- SaisieValeur.LEvaleurPressed(self,valeur)
- self.reaffiche()
+ def choixSaisi(self):
+ valeur=str(self.CBChoix.currentText())
+ SaisieValeur.LEvaleurPressed(self,valeur)
+ self.reaffiche()
# Modules Eficas
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types
from Extensions.i18n import tr
-import Accas
+import Accas
import os
-
+
# Import des panels
class MonWidgetCommande(Ui_WidgetCommande,Groupe):
- """
- """
- def __init__(self,node,editor,etape):
-
- self.listeAffichageWidget=[]
- self.inhibe=0
- self.ensure=0
- editor.inhibeSplitter=1
- Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
- spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding)
- self.verticalLayoutCommande.addItem(spacerItem)
- editor.inhibeSplitter=0
-
- # Gestion du nom de L OPER si il est nomme
- if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
- elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close()
- elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None:
- self.LENom.setText(etape.sdnom)
- else :
- self.LENom.setText("")
- if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange)
- self.racine=self.node.tree.racine
- if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True)
-
- # Gestion de la doc de l objet
- if node.item.getFr() != "" :
- self.labelDoc.setText(node.item.getFr())
- nouvelleSize=self.frameAffichage.height()+60
- self.frameAffichage.setMinimumHeight(nouvelleSize)
- self.frameAffichage.resize(self.frameAffichage.width(),nouvelleSize)
- else : self.labelDoc.close()
-
-
- # Gestion du nom de l etape
- maPolice= QFont("Times", 10,)
- self.setFont(maPolice)
- self.labelNomCommande.setText(tr(self.obj.nom))
-
-
- # Gestion du Frame d affichage des autres commandes
- if self.editor.maConfiguration.closeAutreCommande == True : self.closeAutreCommande()
- else :
- self.bCatalogue.clicked.connect(self.afficheCatalogue)
- self.bAvant.clicked.connect(self.afficheAvant)
- self.bApres.clicked.connect(self.afficheApres)
-
- if self.editor.maConfiguration.closeFrameRechercheCommande==True :
- self.frameAffichage.close()
- self.closeAutreCommande()
-
-
- self.setAcceptDrops(True)
- self.etablitOrdre()
-
- if self.editor.maConfiguration.enleverPoubellePourCommande :
- self.RBPoubelle.close() # JDC Fige
-
- if self.editor.maConfiguration.pasDeMCOptionnels :
- return # Pas de MC Optionnels pour Carmel
-
- from .monWidgetOptionnel import MonWidgetOptionnel
- if self.editor.widgetOptionnel!= None :
- self.monOptionnel=self.editor.widgetOptionnel
- else :
- self.editor.inhibeSplitter=1
- self.monOptionnel=MonWidgetOptionnel(self.editor)
- self.editor.widgetOptionnel=self.monOptionnel
- self.editor.splitter.addWidget(self.monOptionnel)
- self.editor.ajoutOptionnel()
- self.editor.inhibeSplitter=0
- self.monOptionnel=self.editor.widgetOptionnel
- self.afficheOptionnel()
-
- #print "fin init de widget Commande"
-
-
- def closeAutreCommande(self):
- self.bCatalogue.close()
- self.bAvant.close()
- self.bApres.close()
-
- def donnePremier(self):
- #print "dans donnePremier"
- QApplication.processEvents()
- if self.listeAffichageWidget != [] :
- self.listeAffichageWidget[0].setFocus(7)
- QApplication.processEvents()
- #print self.focusWidget()
-
-
- def focusNextPrevChild(self, next):
- # on s assure que ce n est pas un chgt de fenetre
- #print "je passe dans focusNextPrevChild"
- if self.editor.fenetreCentraleAffichee != self : return True
- f = self.focusWidget()
- if f not in self.listeAffichageWidget :
- i=0
- while not hasattr (f,'AAfficher') :
- if f==None :i=-1; break
- f = f.parentWidget()
- if hasattr(f,'AAfficher') : f=f.AAfficher
- if i != -1 : i=self.listeAffichageWidget.index(f)
- else :i=self.listeAffichageWidget.index(f)
- if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
- try :
- self.listeAffichageWidget[1].setFocus(7)
- w=self.focusWidget()
- self.inhibe=1
- w.focusPreviousChild()
- self.inhibe=0
- return True
- except :
- pass
- #print self.listeAffichageWidget
- #print "souci ds focusNextPrevChild"
- if i==0 and next==False and not self.inhibe:
- if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
- self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
- self.listeAffichageWidget[-2].setFocus(7)
- self.inhibe=1
- w=self.focusWidget()
- w.focusNextChild()
- self.inhibe=0
- return True
- if i==0 and next==True and not self.inhibe:
- self.listeAffichageWidget[0].setFocus(7)
- self.inhibe=1
- w=self.focusWidget()
- w.focusNextChild()
- self.inhibe=0
- return True
- if i>0 and next==False and not self.inhibe:
- if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
- self.listeAffichageWidget[i-1].setFocus(7)
- return True
- return QWidget.focusNextPrevChild(self, next)
-
- def etablitOrdre(self):
- i=0
- while(i +1 < len(self.listeAffichageWidget)):
- self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
- i=i+1
- # si on boucle on perd l'ordre
-
- def afficheSuivant(self,f):
- #print ('ds afficheSuivant')
- try :
- i=self.listeAffichageWidget.index(f)
- next=i+1
- except :
- next=1
- if (next==len(self.listeAffichageWidget) ): next =0
- #self.f=next
- #QTimer.singleShot(1, self.rendVisible)
- try :
- self.listeAffichageWidget[next].setFocus(7)
- except :
- pass
-
- def nomChange(self):
- nom = str(self.LENom.text())
- nom = nom.strip()
- if nom == '' : return # si pas de nom, on ressort sans rien faire
- test,mess = self.node.item.nommeSd(nom)
- self.editor.afficheCommentaire(mess)
-
- #Notation scientifique
- if test :
- from .politiquesValidation import Validation
- validation=Validation(self.node,self.editor)
- validation.ajoutDsDictReelEtape()
-
- def afficheOptionnel(self):
- # N a pas de parentQt. doit donc etre redefini
- if self.editor.maConfiguration.closeOptionnel : self.editor.fermeOptionnel()
- liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
- #print "dans afficheOptionnel", self.monOptionnel
- # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
- #if self.monOptionnel == None : return
- self.monOptionnel.parentCommande=self
- self.monOptionnel.titre(self.obj.nom)
- self.monGroupe=self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
-
-
- def focusInEvent(self,event):
- #print "je mets a jour dans focusInEvent de monWidget Commande "
- self.afficheOptionnel()
-
-
- def reaffiche(self,nodeAVoir=None):
- # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
- self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
- self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
- self.inhibeExpand=True
- self.node.affichePanneau()
- #QTimer.singleShot(1, self.recentre)
- if nodeAVoir != None and nodeAVoir!=0:
- self.f=nodeAVoir.fenetre
- if self.f==None :
- newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
- self.f = newNode.fenetre
- if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
- if self.f != None : self.rendVisible()
+ """
+ """
+ def __init__(self,node,editor,etape):
+
+ self.listeAffichageWidget=[]
+ self.inhibe=0
+ self.ensure=0
+ editor.inhibeSplitter=1
+ Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
+ spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding)
+ self.verticalLayoutCommande.addItem(spacerItem)
+ editor.inhibeSplitter=0
+
+ # Gestion du nom de L OPER si il est nomme
+ if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
+ elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close()
+ elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None:
+ self.LENom.setText(etape.sdnom)
+ else :
+ self.LENom.setText("")
+ if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange)
+ self.racine=self.node.tree.racine
+ if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True)
+
+ # Gestion de la doc de l objet
+ if node.item.getFr() != "" :
+ self.labelDoc.setText(node.item.getFr())
+ nouvelleSize=self.frameAffichage.height()+60
+ self.frameAffichage.setMinimumHeight(nouvelleSize)
+ self.frameAffichage.resize(self.frameAffichage.width(),nouvelleSize)
+ else : self.labelDoc.close()
+
+
+ # Gestion du nom de l etape
+ maPolice= QFont("Times", 10,)
+ self.setFont(maPolice)
+ self.labelNomCommande.setText(tr(self.obj.nom))
+
+
+ # Gestion du Frame d affichage des autres commandes
+ if self.editor.maConfiguration.closeAutreCommande == True : self.closeAutreCommande()
+ else :
+ self.bCatalogue.clicked.connect(self.afficheCatalogue)
+ self.bAvant.clicked.connect(self.afficheAvant)
+ self.bApres.clicked.connect(self.afficheApres)
+
+ if self.editor.maConfiguration.closeFrameRechercheCommande==True :
+ self.frameAffichage.close()
+ self.closeAutreCommande()
+
+
+ self.setAcceptDrops(True)
+ self.etablitOrdre()
+
+ if self.editor.maConfiguration.enleverPoubellePourCommande :
+ self.RBPoubelle.close() # JDC Fige
+
+ if self.editor.maConfiguration.pasDeMCOptionnels :
+ return # Pas de MC Optionnels pour Carmel
+
+ from .monWidgetOptionnel import MonWidgetOptionnel
+ if self.editor.widgetOptionnel!= None :
+ self.monOptionnel=self.editor.widgetOptionnel
+ else :
+ self.editor.inhibeSplitter=1
+ self.monOptionnel=MonWidgetOptionnel(self.editor)
+ self.editor.widgetOptionnel=self.monOptionnel
+ self.editor.splitter.addWidget(self.monOptionnel)
+ self.editor.ajoutOptionnel()
+ self.editor.inhibeSplitter=0
+ self.monOptionnel=self.editor.widgetOptionnel
+ self.afficheOptionnel()
+
+ #print "fin init de widget Commande"
+
+
+ def closeAutreCommande(self):
+ self.bCatalogue.close()
+ self.bAvant.close()
+ self.bApres.close()
+
+ def donnePremier(self):
+ #print "dans donnePremier"
+ QApplication.processEvents()
+ if self.listeAffichageWidget != [] :
+ self.listeAffichageWidget[0].setFocus(7)
+ QApplication.processEvents()
+ #print self.focusWidget()
+
+
+ def focusNextPrevChild(self, next):
+ # on s assure que ce n est pas un chgt de fenetre
+ #print "je passe dans focusNextPrevChild"
+ if self.editor.fenetreCentraleAffichee != self : return True
+ f = self.focusWidget()
+ if f not in self.listeAffichageWidget :
+ i=0
+ while not hasattr (f,'AAfficher') :
+ if f==None :i=-1; break
+ f = f.parentWidget()
+ if hasattr(f,'AAfficher') : f=f.AAfficher
+ if i != -1 : i=self.listeAffichageWidget.index(f)
+ else :i=self.listeAffichageWidget.index(f)
+ if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
+ try :
+ self.listeAffichageWidget[1].setFocus(7)
+ w=self.focusWidget()
+ self.inhibe=1
+ w.focusPreviousChild()
+ self.inhibe=0
+ return True
+ except :
+ pass
+ #print self.listeAffichageWidget
+ #print "souci ds focusNextPrevChild"
+ if i==0 and next==False and not self.inhibe:
+ if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
+ self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
+ self.listeAffichageWidget[-2].setFocus(7)
+ self.inhibe=1
+ w=self.focusWidget()
+ w.focusNextChild()
+ self.inhibe=0
+ return True
+ if i==0 and next==True and not self.inhibe:
+ self.listeAffichageWidget[0].setFocus(7)
+ self.inhibe=1
+ w=self.focusWidget()
+ w.focusNextChild()
+ self.inhibe=0
+ return True
+ if i>0 and next==False and not self.inhibe:
+ if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
+ self.listeAffichageWidget[i-1].setFocus(7)
+ return True
+ return QWidget.focusNextPrevChild(self, next)
+
+ def etablitOrdre(self):
+ i=0
+ while(i +1 < len(self.listeAffichageWidget)):
+ self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
+ i=i+1
+ # si on boucle on perd l'ordre
+
+ def afficheSuivant(self,f):
+ #print ('ds afficheSuivant')
+ try :
+ i=self.listeAffichageWidget.index(f)
+ next=i+1
+ except :
+ next=1
+ if (next==len(self.listeAffichageWidget) ): next =0
+ #self.f=next
+ #QTimer.singleShot(1, self.rendVisible)
+ try :
+ self.listeAffichageWidget[next].setFocus(7)
+ except :
+ pass
+
+ def nomChange(self):
+ nom = str(self.LENom.text())
+ nom = nom.strip()
+ if nom == '' : return # si pas de nom, on ressort sans rien faire
+ test,mess = self.node.item.nommeSd(nom)
+ self.editor.afficheCommentaire(mess)
+
+ #Notation scientifique
+ if test :
+ from .politiquesValidation import Validation
+ validation=Validation(self.node,self.editor)
+ validation.ajoutDsDictReelEtape()
+
+ def afficheOptionnel(self):
+ # N a pas de parentQt. doit donc etre redefini
+ if self.editor.maConfiguration.closeOptionnel : self.editor.fermeOptionnel()
+ liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
+ #print "dans afficheOptionnel", self.monOptionnel
+ # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
+ #if self.monOptionnel == None : return
+ self.monOptionnel.parentCommande=self
+ self.monOptionnel.titre(self.obj.nom)
+ self.monGroupe=self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
+
+
+ def focusInEvent(self,event):
+ #print "je mets a jour dans focusInEvent de monWidget Commande "
+ self.afficheOptionnel()
+
+
+ def reaffiche(self,nodeAVoir=None):
+ # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
+ self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
+ self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
+ self.inhibeExpand=True
+ self.node.affichePanneau()
+ #QTimer.singleShot(1, self.recentre)
+ if nodeAVoir != None and nodeAVoir!=0:
+ self.f=nodeAVoir.fenetre
+ if self.f==None :
+ newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
+ self.f = newNode.fenetre
+ if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
+ if self.f != None : self.rendVisible()
+ else : self.recentre()
else : self.recentre()
- else : self.recentre()
- self.inhibeExpand=False
-
-
-
- def recentre(self):
- QApplication.processEvents()
- s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
- s.horizontalScrollBar().setSliderPosition(self.avantH)
- s.verticalScrollBar().setSliderPosition(self.avantV)
-
- def rendVisible(self):
- QApplication.processEvents()
- self.f.setFocus(7)
- self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
-
- def afficheCatalogue(self):
- if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
- self.racine.affichePanneau()
- if self.node : self.node.select()
- else : self.racine.select()
-
- def afficheApres(self):
- self.node.selectApres()
-
- def afficheAvant(self):
- self.node.selectAvant()
-
- def setValide(self):
- if not(hasattr (self,'RBValide')) : return
- icon = QIcon()
- if self.node.item.object.isValid() : icon=QIcon(self.repIcon+"/ast-green-ball.png")
- else : icon=QIcon(self.repIcon+"/ast-red-ball.png")
- nomIcone = self.node.item.getIconName()
- if nomIcone == "ast-yellow-square" : icon=QIcon(self.repIcon+"/ast-yel-ball.png")
- if nomIcone == "ast-red-square" : self.LENom.setDisabled(True)
-
- self.LENom.setDisabled(False)
- self.RBValide.setIcon(icon)
-
-
- def propageChange(self,typeChange):
- aReecrire=self.propageChangeEnfant(self.node.item.object,typeChange)
- if aReecrire : self.node.affichePanneau()
-
- def propageChangeEnfant(self,mc, typeChange):
- for enfant in mc.mcListe:
- if enfant.nature == 'MCSIMP' :
- if enfant.waitUserAssd():
- if enfant.definition.type[0] == typeChange: return True
- else :
- if enfant.nature == 'MCList' : enfant=enfant[0]
- if self.propageChangeEnfant(enfant, typeChange) : return True
- return False
-
-
+ self.inhibeExpand=False
+
+
+
+ def recentre(self):
+ QApplication.processEvents()
+ s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
+ s.horizontalScrollBar().setSliderPosition(self.avantH)
+ s.verticalScrollBar().setSliderPosition(self.avantV)
+
+ def rendVisible(self):
+ QApplication.processEvents()
+ self.f.setFocus(7)
+ self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
+
+ def afficheCatalogue(self):
+ if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
+ self.racine.affichePanneau()
+ if self.node : self.node.select()
+ else : self.racine.select()
+
+ def afficheApres(self):
+ self.node.selectApres()
+
+ def afficheAvant(self):
+ self.node.selectAvant()
+
+ def setValide(self):
+ if not(hasattr (self,'RBValide')) : return
+ icon = QIcon()
+ if self.node.item.object.isValid() : icon=QIcon(self.repIcon+"/ast-green-ball.png")
+ else : icon=QIcon(self.repIcon+"/ast-red-ball.png")
+ nomIcone = self.node.item.getIconName()
+ if nomIcone == "ast-yellow-square" : icon=QIcon(self.repIcon+"/ast-yel-ball.png")
+ if nomIcone == "ast-red-square" : self.LENom.setDisabled(True)
+
+ self.LENom.setDisabled(False)
+ self.RBValide.setIcon(icon)
+
+
+ def propageChange(self,typeChange,donneLeFocus):
+ aReecrire=self.propageChangeEnfant(self.node.item.object,typeChange)
+ if aReecrire : self.node.affichePanneau()
+ if hasattr(donneLeFocus.node.fenetre, 'selectionneDernier') :
+ QApplication.processEvents()
+ self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(donneLeFocus.node.fenetre)
+ donneLeFocus.node.fenetre.selectionneDernier()
+
+ def propageChangeEnfant(self,mc, typeChange):
+ for enfant in mc.mcListe:
+ if enfant.nature == 'MCSIMP' :
+ if enfant.waitUserAssd():
+ if enfant.definition.type[0] == typeChange: return True
+ else :
+ if enfant.nature == 'MCList' : enfant=enfant[0]
+ if self.propageChangeEnfant(enfant, typeChange) : return True
+ return False
# Modules Eficas
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types, os
import traceback
# il faut donc surcharger un certain nb de fonction ici pour eux
- def __init__(self,node,editor,etape):
- #print ("debut de ---------------------- init de MonWidgetCommandeDeplie1Niveau ",node.item.nom)
- MonWidgetCommande.__init__(self,node,editor,etape)
- self.node.plieToutEtReaffiche=self.plieToutEtReaffiche
- spacerItem = QSpacerItem(21, 600, QSizePolicy.Expanding, QSizePolicy.Expanding)
- self.verticalLayoutCommande.addItem(spacerItem)
-
- def afficheMots(self):
- # Attention
- # Attention --> cette methode surcharge les methodes des Nodes Fils
- # Attention
- #print ("debut de ---------------------- ds afficheMots de MonWidgetCommandeDeplie1Niveau ",self.node.item.nom)
- #traceback.print_stack()
- repIcon=self.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'deleteRondVide.png')
- icon = QIcon(fichier)
- for node in self.node.children:
-
- node.plie=True
- node.setPlieChildren()
- if node.appartientAUnNoeudPlie==True : continue
-
- node.plieToutEtReaffiche = self.plieToutEtReaffiche
- node.deplieToutEtReaffiche = self.deplieToutEtReaffiche
- node.affichePanneau = self.affichePanneau
- node.getPanel = self.getPanel
-
- widget=node.getPanelGroupe(self,self.maCommande)
- self.listeFocus.append(node.fenetre)
-
- try :
- node.fenetre.RBDeplie.setCheckable(False)
- node.fenetre.RBDeplie.setEnabled(False)
- node.fenetre.RBDeplie.setIcon(icon)
- except : pass
-
- if node.item.object.isMCList() :
- node.setDeplie = self.setDepliePourMCList
-
- for c in node.children :
- c.setDeplie = self.setDepliePourNode
- c.plieToutEtReaffiche = self.plieToutEtReaffiche
- c.deplieToutEtReaffiche = self.deplieToutEtReaffiche
- c.getPanel = self.getPanel
- c.affichePanneau = self.affichePanneau
- try :
- c.fenetre.RBDeplie.setCheckable(False)
- c.fenetre.RBDeplie.setEnabled(False)
- c.fenetre.RBDeplie.setIcon(icon)
- except :
- pass
- else :
- node.setDeplie=self.setDepliePourNode
-
- #print ("fin ------------------------ afficheMots de MonWidgetCommandeDeplie1Niveau ",self.node.item.nom)
-
- def afficheSuivant(self,aAfficher):
- fenetre=self.node.tree.itemCourant.fenetre
- fenetre.afficheSuivant(aAfficher)
-
- def setDepliePourNode(self):
- noeudCourant=self.node.tree.itemCourant
- noeudCourant.setDeplieChildren()
- if self.editor.fenetreCentraleAffichee == noeudCourant.fenetre : return
- noeudCourant.afficheCeNiveau()
- pass
+ def __init__(self,node,editor,etape):
+ #print ("debut de ---------------------- init de MonWidgetCommandeDeplie1Niveau ",node.item.nom)
+ MonWidgetCommande.__init__(self,node,editor,etape)
+ self.node.plieToutEtReaffiche=self.plieToutEtReaffiche
+ spacerItem = QSpacerItem(21, 600, QSizePolicy.Expanding, QSizePolicy.Expanding)
+ self.verticalLayoutCommande.addItem(spacerItem)
+
+ def afficheMots(self):
+ # Attention
+ # Attention --> cette methode surcharge les methodes des Nodes Fils
+ # Attention
+ #print ("debut de ---------------------- ds afficheMots de MonWidgetCommandeDeplie1Niveau ",self.node.item.nom)
+ #traceback.print_stack()
+ repIcon=self.editor.appliEficas.repIcon
+ fichier=os.path.join(repIcon, 'deleteRondVide.png')
+ icon = QIcon(fichier)
+ for node in self.node.children:
+
+ node.plie=True
+ node.setPlieChildren()
+ if node.appartientAUnNoeudPlie==True : continue
+
+ node.plieToutEtReaffiche = self.plieToutEtReaffiche
+ node.deplieToutEtReaffiche = self.deplieToutEtReaffiche
+ node.affichePanneau = self.affichePanneau
+ node.getPanel = self.getPanel
+
+ widget=node.getPanelGroupe(self,self.maCommande)
+ self.listeFocus.append(node.fenetre)
+
+ try :
+ node.fenetre.RBDeplie.setCheckable(False)
+ node.fenetre.RBDeplie.setEnabled(False)
+ node.fenetre.RBDeplie.setIcon(icon)
+ except : pass
+
+ if node.item.object.isMCList() :
+ node.setDeplie = self.setDepliePourMCList
+
+ for c in node.children :
+ c.setDeplie = self.setDepliePourNode
+ c.plieToutEtReaffiche = self.plieToutEtReaffiche
+ c.deplieToutEtReaffiche = self.deplieToutEtReaffiche
+ c.getPanel = self.getPanel
+ c.affichePanneau = self.affichePanneau
+ try :
+ c.fenetre.RBDeplie.setCheckable(False)
+ c.fenetre.RBDeplie.setEnabled(False)
+ c.fenetre.RBDeplie.setIcon(icon)
+ except :
+ pass
+ else :
+ node.setDeplie=self.setDepliePourNode
+
+ #print ("fin ------------------------ afficheMots de MonWidgetCommandeDeplie1Niveau ",self.node.item.nom)
+
+ def afficheSuivant(self,aAfficher):
+ fenetre=self.node.tree.itemCourant.fenetre
+ fenetre.afficheSuivant(aAfficher)
+
+ def setDepliePourNode(self):
+ noeudCourant=self.node.tree.itemCourant
+ noeudCourant.setDeplieChildren()
+ if self.editor.fenetreCentraleAffichee == noeudCourant.fenetre : return
+ noeudCourant.afficheCeNiveau()
+ pass
# -------------------------------------------- Methodes qui surchargent les noeuds fils
- def setDepliePourMCList(self):
- #print ('je surcharge setDeplie pour MCList')
- pass
+ def setDepliePourMCList(self):
+ #print ('je surcharge setDeplie pour MCList')
+ pass
- def setPlieChildren(self):
- #print ('je surcharge setPlieChildren')
- pass
+ def setPlieChildren(self):
+ #print ('je surcharge setPlieChildren')
+ pass
- def setDeplieChildren(self):
- #print ('je surcharge setDeplieChildren')
- pass
+ def setDeplieChildren(self):
+ #print ('je surcharge setDeplieChildren')
+ pass
- def plieToutEtReaffiche(self):
- #print ('je surcharge plieToutEtReaffiche', self.node.item.nom)
- pass
+ def plieToutEtReaffiche(self):
+ #print ('je surcharge plieToutEtReaffiche', self.node.item.nom)
+ pass
- def deplieToutEtReaffiche(self):
- #print ('je surcharge deplieToutEtReaffiche', self.node.tree.itemCourant.item.getLabelText())
- pass
+ def deplieToutEtReaffiche(self):
+ #print ('je surcharge deplieToutEtReaffiche', self.node.tree.itemCourant.item.getLabelText())
+ pass
- def plieToutEtReafficheSaufItem(self):
- #print ('je surcharge plieToutEtReaffiche', self.node.tree.itemCourant.item.getLabelText())
- pass
+ def plieToutEtReafficheSaufItem(self):
+ #print ('je surcharge plieToutEtReaffiche', self.node.tree.itemCourant.item.getLabelText())
+ pass
- def affichePanneau(self):
- #print ('je surcharge affichePanneau', self.node.tree.itemCourant.item.getLabelText())
- node=self.node.tree.itemCourant
- while ( not (hasattr(node,'fenetreIhm')) or node.treeParent.fenetreIhm != 'deplie1Niveau') :
+ def affichePanneau(self):
+ #print ('je surcharge affichePanneau', self.node.tree.itemCourant.item.getLabelText())
+ node=self.node.tree.itemCourant
+ while ( not (hasattr(node,'fenetreIhm')) or node.treeParent.fenetreIhm != 'deplie1Niveau') :
node=node.treeParent
- self.node.tree.setCurrentItem(node)
-
- item=node.item
- if item.getLabelText()[0] == self.editor.fenetreCentraleAffichee.labelNomCommande.text():
- return
- node.setDeplieChildren()
- node.afficheCeNiveau()
- self.editor.fenetreCentraleAffichee.labelNomCommande.setText(item.getLabelText()[0])
- self.editor.fenetreCentraleAffichee.labelDoc.setText(item.getFr())
+ self.node.tree.setCurrentItem(node)
+ item=node.item
+ if item.getLabelText()[0] == self.editor.fenetreCentraleAffichee.labelNomCommande.text():
+ return
+ node.setDeplieChildren()
+ node.afficheCeNiveau()
+ self.editor.fenetreCentraleAffichee.labelNomCommande.setText(item.getLabelText()[0])
+ self.editor.fenetreCentraleAffichee.labelDoc.setText(item.getFr())
- def getPanel (self):
- #print ('surcharge ds getPanel')
- pass
+
+ def getPanel (self):
+ #print ('surcharge ds getPanel')
+ pass
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from PyQt5.QtWidgets import QWidget
from desWidgetCommentaire import Ui_WidgetCommentaire
from .gereIcones import FacultatifOuOptionnel
from Extensions.i18n import tr
-import Accas
+import Accas
import os
-
+
# Import des panels
class MonWidgetCommentaire(QWidget,Ui_WidgetCommentaire,FacultatifOuOptionnel):
- """
- """
- def __init__(self,node,editor,commentaire):
- QWidget.__init__(self,None)
- self.node=node
- self.node.fenetre=self
- self.setupUi(self)
- self.editor=editor
- self.appliEficas=self.editor.appliEficas
- self.repIcon=self.appliEficas.repIcon
- self.setIconePoubelle()
- self.remplitTexte()
- self.monOptionnel=None
-
- self.commentaireTE.textChanged.connect(self.TexteCommentaireEntre)
- if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
- else : self.bCatalogue.clicked.connect(self.afficheCatalogue)
- if self.editor.code in ['Adao','MAP','ADAO'] :
- self.bAvant.close()
- self.bApres.close()
- else :
- self.bAvant.clicked.connect(self.afficheAvant)
- self.bApres.clicked.connect(self.afficheApres)
- self.editor.fermeOptionnel()
-
-
- def afficheApres(self):
- self.node.selectApres()
-
- def afficheAvant(self):
- self.node.selectAvant()
-
-
- def afficheCatalogue(self):
- self.node.tree.racine.affichePanneau()
- if self.node : self.node.select()
- else : self.node.tree.racine.select()
-
- def remplitTexte(self):
- texte=self.node.item.getValeur()
- self.commentaireTE.setText(texte)
- if self.editor.code == "CARMELCND" and texte[0:16]=="Cree - fichier :" :
- self.commentaireTE.setReadOnly(True)
- self.commentaireTE.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.commentaireTE.setToolTip(tr("Valeur non modifiable"))
- else :
- self.commentaireTE.setReadOnly(False)
-
- def donnePremier(self):
- self.commentaireTE.setFocus(7)
-
-
- def TexteCommentaireEntre(self):
- texte=str(self.commentaireTE.toPlainText())
- self.editor.initModif()
- self.node.item.setValeur(texte)
- self.node.updateNodeTexte()
+ """
+ """
+ def __init__(self,node,editor,commentaire):
+ QWidget.__init__(self,None)
+ self.node=node
+ self.node.fenetre=self
+ self.setupUi(self)
+ self.editor=editor
+ self.appliEficas=self.editor.appliEficas
+ self.repIcon=self.appliEficas.repIcon
+ self.setIconePoubelle()
+ self.remplitTexte()
+ self.monOptionnel=None
+
+ self.commentaireTE.textChanged.connect(self.TexteCommentaireEntre)
+ if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
+ else : self.bCatalogue.clicked.connect(self.afficheCatalogue)
+ if self.editor.code in ['Adao','MAP','ADAO'] :
+ self.bAvant.close()
+ self.bApres.close()
+ else :
+ self.bAvant.clicked.connect(self.afficheAvant)
+ self.bApres.clicked.connect(self.afficheApres)
+ self.editor.fermeOptionnel()
+
+
+ def afficheApres(self):
+ self.node.selectApres()
+
+ def afficheAvant(self):
+ self.node.selectAvant()
+
+
+ def afficheCatalogue(self):
+ self.node.tree.racine.affichePanneau()
+ if self.node : self.node.select()
+ else : self.node.tree.racine.select()
+
+ def remplitTexte(self):
+ texte=self.node.item.getValeur()
+ self.commentaireTE.setText(texte)
+ if self.editor.code == "CARMELCND" and texte[0:16]=="Cree - fichier :" :
+ self.commentaireTE.setReadOnly(True)
+ self.commentaireTE.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
+ self.commentaireTE.setToolTip(tr("Valeur non modifiable"))
+ else :
+ self.commentaireTE.setReadOnly(False)
+
+ def donnePremier(self):
+ self.commentaireTE.setFocus(7)
+
+ def TexteCommentaireEntre(self):
+ texte=str(self.commentaireTE.toPlainText())
+ self.editor.initModif()
+ self.node.item.setValeur(texte)
+ self.node.updateNodeTexte()
# Modules Python
from __future__ import absolute_import
try :
- from builtins import object
+ from builtins import object
except : pass
import types,os,re
class MonWidgetCreeParam(Ui_desWidgetCreeParam,QDialog):
- """
- """
- def __init__(self,editor, name = None,fl = 0):
- self.editor=editor
- self.editor.afficheInfos("")
- QDialog.__init__(self,editor)
- self.setupUi(self)
- self.connecterSignaux()
- self.dejaExistant=0
- self.listeTousParam=self.editor.jdc.params
- self.dictListe={}
- self.initToutesVal()
-
- def connecterSignauxQT4(self) :
+ """
+ """
+ def __init__(self,editor, name = None,fl = 0):
+ self.editor=editor
+ self.editor.afficheInfos("")
+ QDialog.__init__(self,editor)
+ self.setupUi(self)
+ self.connecterSignaux()
+ self.dejaExistant=0
+ self.listeTousParam=self.editor.jdc.params
+ self.dictListe={}
+ self.initToutesVal()
+
+ def connecterSignauxQT4(self) :
self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.lineEditValReturnPressed)
self.connect(self.lineEditNom,SIGNAL("returnPressed()"),self.lineEditNomReturnPressed)
- def connecterSignaux(self) :
+ def connecterSignaux(self) :
self.lineEditVal.returnPressed.connect(self.lineEditValReturnPressed)
self.lineEditNom.returnPressed.connect(self.lineEditNomReturnPressed)
self.LBParam.itemDoubleClicked.connect(self.paramClicked)
- def paramClicked(self,item):
- if self.editor.nodeEnCours == None :
+ def paramClicked(self,item):
+ if self.editor.nodeEnCours == None :
QMessageBox.warning( self, tr("Pas de Mot-Clef"),tr("Attention! selectionnez un mot-clef"))
return
param= self.dictListe[item.text()]
self.editor.nodeEnCours.lineEditVal.setText(param)
self.editor.nodeEnCours.LEvaleurPressed()
-
- def creeParametre(self):
+
+ def creeParametre(self):
nom=str(self.lineEditNom.text())
val=str(self.lineEditVal.text())
if val == "" or None : return
if nom == "" or None : return
- if len(self.editor.tree.selectedItems()) == 0 :
- itemAvant=self.editor.tree.racine
- else :
- itemAvant=self.editor.tree.selectedItems()[0]
+ if len(self.editor.tree.selectedItems()) == 0 :
+ itemAvant=self.editor.tree.racine
+ else :
+ itemAvant=self.editor.tree.selectedItems()[0]
param=itemAvant.addParameters(True)
param.item.setNom(nom)
#PN self.val permet d entrer du texte
- def lineEditValReturnPressed(self):
+ def lineEditValReturnPressed(self):
qtVal=self.lineEditVal.text()
valString=str(self.lineEditVal.text())
self.val=""
contexte={}
exec("from math import *", contexte)
jdc=self.editor.jdc
- if jdc == None :
- self.editor.afficheInfos(tr(u"La Creation de parametre n est possible que dans un jeu de donnees"),Qt.red)
- return
+ if jdc == None :
+ self.editor.afficheInfos(tr(u"La Creation de parametre n est possible que dans un jeu de donnees"),Qt.red)
+ return
for p in jdc.params :
- try:
- tp=p.nom+'='+str(repr(p.valeur))
- exec(tp, contexte)
- except :
- pass
+ try:
+ tp=p.nom+'='+str(repr(p.valeur))
+ exec(tp, contexte)
+ except :
+ pass
monTexte="monParam="+valString
try :
- exec(monTexte, contexte)
- self.val=valString
+ exec(monTexte, contexte)
+ self.val=valString
except :
- try :
- monTexte="monParam='"+valString+"'"
- self.val="'"+valString+"'"
- except :
- self.editor.afficheInfos(tr("Valeur incorrecte"),Qt.red)
+ try :
+ monTexte="monParam='"+valString+"'"
+ self.val="'"+valString+"'"
+ except :
+ self.editor.afficheInfos(tr("Valeur incorrecte"),Qt.red)
if self.lineEditNom.text()!="" and self.dejaExistant==False : self.creeParametre()
- def lineEditNomReturnPressed(self):
+ def lineEditNomReturnPressed(self):
qtNom=self.lineEditNom.text()
nom=str(qtNom)
if not pattern_name.match(nom) :
- self.lineEditNom.setText("")
- commentaire=nom + tr(" n est pas un identifiant correct\n ")
- self.editor.afficheInfos(commentaire,Qt.red)
+ self.lineEditNom.setText("")
+ commentaire=nom + tr(" n est pas un identifiant correct\n ")
+ self.editor.afficheInfos(commentaire,Qt.red)
for p in self.editor.jdc.params :
- if p.nom==nom :
- commentaire=nom + tr(" existe deja\n ")
- self.editor.afficheInfos(commentaire,Qt.red)
- return
+ if p.nom==nom :
+ commentaire=nom + tr(" existe deja\n ")
+ self.editor.afficheInfos(commentaire,Qt.red)
+ return
if self.lineEditVal.text()!="" : self.creeParametre()
self.lineEditVal.setFocus(Qt.OtherFocusReason)
- def initToutesVal(self):
+ def initToutesVal(self):
self.LBParam.clear()
for param in self.listeTousParam :
self.LBParam.addItem((repr(param)))
self.dictListe[repr(param)] = param.nom
-
-
-
- def valideParam(self):
+
+
+
+ def valideParam(self):
if self.LBParam.selectedItems()== None : return
lParam=[]
for indice in range(len(self.LBParam.selectedItems())):
lParam.append(param)
try :
- self.panel.ajoutNValeur(lParam)
+ self.panel.ajoutNValeur(lParam)
except :
- for p in lParam :
- self.panel.ajout1Valeur(p)
+ for p in lParam :
+ self.panel.ajout1Valeur(p)
self.close()
-
from PyQt5.QtCore import Qt
-
-class MonWidgetCreeUserAssd ( MonWidgetSimpTxt):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- MonWidgetSimpTxt. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- #self.lineEditVal.returnPressed.connect(self.LEValeurAjouteDsPossible)
-
- def LEvaleurPressed(self):
- try :
- if str(self.lineEditVal.text())=="" or str(self.lineEditVal.text())==None : return
- except : pass
- valeurEntree = str(self.lineEditVal.text())
- if valeurEntree == self.oldValeurTexte : return
- if self.oldValeurTexte == "" : enCreation = True
- else : enCreation = False
- if enCreation : validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeurEntree)
- else : validite,commentaire=self.objSimp.renommeSdCree(valeurEntree)
- if not enCreation : self.node.updateNodeTexte()
- #PNPNPN -- signal update sur les fils ou ?
- if commentaire != "" :
- if validite :
- self.editor.afficheCommentaire(commentaire)
- self.oldValeurTexte = self.lineEditVal.text()
- else :
- self.editor.afficheInfos(commentaire,Qt.red)
- self.lineEditVal.setText("")
- self.oldValeurTexte=""
- self.parentQt.propageChange(self.objSimp.definition.type[0])
-
-
-class MonWidgetCreeListeUserAssd ( MonWidgetPlusieursBase):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- MonWidgetPlusieursBase. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
- def ajout1Valeur(self,valeur=None):
- if not valeur in list(self.dictValeurs.keys()):
- validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeur)
- MonWidgetPlusieursBase.ajout1Valeur(self,valeur)
-
- def changeValeur(self,changeDePlace=False,oblige=False,numero=None):
- #print ('dans changeValeur du CreeUserAssd', changeDePlace,numero)
- self.changeUnLineEdit=False
- if numero==None :
- self.echangeDeuxValeurs()
- return
- valeur = self.lineEditEnEdition.text()
- #print (valeur)
- if numero in list(self.dictLE.keys()) :
- oldValeurUserAssd = self.dictLE[numero]
- if oldValeurUserAssd == None or oldValeurUserAssd == "" : enCreation = True
- else : enCreation = False
- else :
- enCreation = True
- oldValeurUserAssd = ""
- #print ('je traite')
- if enCreation : validite, objASSD, commentaire=self.objSimp.creeUserASSD(valeur)
- elif oldValeurUserAssd.nom == valeur : return
- else :
- validite, commentaire=self.node.item.renommeSdCreeDsListe(oldValeurUserAssd,valeur)
- nomDernierLineEdit="lineEditVal"+str(numero+1)
- dernier=getattr(self,nomDernierLineEdit)
- dernier.setFocus()
- return
-
- if commentaire != "" and not validite:
- self.editor.afficheInfos(commentaire,Qt.red)
- self.lineEditEnEdition.setText("")
- return
- # on relit tout pour tenir compte des lignes blanches
- liste=[]
- for i in range (1, self.indexDernierLabel+1):
- if i == numero : liste.append(objASSD)
- if i in list(self.dictLE.keys()) :
- if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
- self.node.item.object.state='changed'
- validite=self.node.item.setValeur(liste)
- self.setValide()
- validite=self.node.item.isValid()
- if validite :
- self.dictLE[numero] = objASSD
- self.node.item.rattacheUserASSD(objASSD)
- if self.indexDernierLabel < len(liste) : self.ajoutLineEdit()
- nomDernierLineEdit="lineEditVal"+str(numero+1)
- self.listeValeursCourantes=liste
- dernier=getattr(self,nomDernierLineEdit)
- dernier.setFocus()
- else :
- self.editor.afficheInfos('ajout impossible' ,Qt.red)
- if objASSD : objASSD.supprime()
- self.lineEditEnEdition.setText("")
- self.parentQt.propageChange(self.objSimp.definition.type[0])
-
-
- def leaveEventScrollArea(self,event):
- pass
-
- def echangeDeuxValeurs(self):
- self.changeUnLineEdit=False
- obj1=self.dictLE[self.num1]
- obj2=self.dictLE[self.num2]
- self.dictLE[self.num1]=obj2
- self.dictLE[self.num2]=obj1
- nomLineEdit=self.nomLine+str(self.num1)
- courant=getattr(self,nomLineEdit)
- if self.dictLE[self.num1] != None : courant.setText(self.dictLE[self.num1].nom)
- else : courant.setText("")
- nomLineEdit=self.nomLine+str(self.num2)
- courant=getattr(self,nomLineEdit)
- if self.dictLE[self.num2] != None : courant.setText(self.dictLE[self.num2].nom)
- else : courant.setText("")
- liste=[]
- for i in list(self.dictLE.keys()):
- if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
- validite=self.node.item.setValeur(liste)
- courant.setFocus(True)
-
- def descendLesLignes(self):
- self.changeUnLineEdit=False
- if self.numlineEditEnCours==self.indexDernierLabel : return
- nouvelleValeur=None
- for i in range (self.numlineEditEnCours+1, self.indexDernierLabel):
- valeurAGarder=self.dictLE[i]
- self.dictLE[i]=nouvelleValeur
- nomLineEdit=self.nomLine+str(i)
- courant=getattr(self,nomLineEdit)
- if nouvelleValeur != None : courant.setText(nouvelleValeur.nom)
- else : courant.setText("")
- nouvelleValeur=valeurAGarder
-
-
- def moinsPushed(self):
- if self.numlineEditEnCours == 0 : return
- if self.indexDernierLabel == 0 : return
- objASSD=self.dictLE[self.numlineEditEnCours]
- if objASSD : objASSD.supprime()
- self.lineEditEnEdition.setText("")
-
- #self.dictLE.pop(self.numlineEditEnCours)
- for i in range (self.numlineEditEnCours, self.indexDernierLabel-1):
- self.dictLE[i]= self.dictLE[i+1]
- nomLineEdit=self.nomLine+str(i)
- courant=getattr(self,nomLineEdit)
- if self.dictLE[i] != None : courant.setText(self.dictLE[i].nom)
- else : courant.setText("")
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
- courant=getattr(self,nomLineEdit)
- courant.setText("")
- self.dictLE[self.indexDernierLabel]=None
- liste=[]
- for i in list(self.dictLE.keys()):
- if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
- validite=self.node.item.setValeur(liste)
+class MonWidgetCreeUserAssd ( MonWidgetSimpTxt):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ MonWidgetSimpTxt. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+ #self.lineEditVal.returnPressed.connect(self.LEValeurAjouteDsPossible)
+
+ def LEvaleurPressed(self):
+ try :
+ if str(self.lineEditVal.text())=="" or str(self.lineEditVal.text())==None : return
+ except : pass
+ valeurEntree = str(self.lineEditVal.text())
+ if valeurEntree == self.oldValeurTexte : return
+ if self.oldValeurTexte == "" : enCreation = True
+ else : enCreation = False
+ if enCreation : validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeurEntree)
+ else : validite,commentaire=self.objSimp.renommeSdCree(valeurEntree)
+ if not enCreation : self.node.updateNodeTexte()
+ #PNPNPN -- signal update sur les fils ou ?
+ if commentaire != "" :
+ if validite :
+ self.editor.afficheCommentaire(commentaire)
+ self.oldValeurTexte = self.lineEditVal.text()
+ else :
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.lineEditVal.setText("")
+ self.oldValeurTexte=""
+ self.parentQt.propageChange(self.objSimp.definition.type[0],self)
from Extensions.i18n import tr
from .feuille import Feuille
-from .monWidgetSimpTuple import MonWidgetSimpTuple
-from desWidgetDate import Ui_WidgetDate
+from .monWidgetSimpTuple import MonWidgetSimpTuple
+from desWidgetDate import Ui_WidgetDate
class MonWidgetDate (Ui_WidgetDate,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=3
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
if self.objSimp.isImmuable() :
- self.lineEditVal1.setDisabled(True)
- self.lineEditVal2.setDisabled(True)
- self.lineEditVal3.setDisabled(True)
- self.lineEditVal1.setStyleSheet(QString.fromUtf8("background:rgb(244,244,244);\n" "border:0px;\n"))
- self.lineEditVal2.setStyleSheet(QString.fromUtf8("background:rgb(244,244,244);\n" "border:0px;\n"))
- self.lineEditVal3.setStyleSheet(QString.fromUtf8("background:rgb(244,244,244);\n" "border:0px;\n"))
- self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
- self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
- self.lineEditVal3.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal1.setDisabled(True)
+ self.lineEditVal2.setDisabled(True)
+ self.lineEditVal3.setDisabled(True)
+ self.lineEditVal1.setStyleSheet(QString.fromUtf8("background:rgb(244,244,244);\n" "border:0px;\n"))
+ self.lineEditVal2.setStyleSheet(QString.fromUtf8("background:rgb(244,244,244);\n" "border:0px;\n"))
+ self.lineEditVal3.setStyleSheet(QString.fromUtf8("background:rgb(244,244,244);\n" "border:0px;\n"))
+ self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal3.setToolTip(tr("Valeur non modifiable"))
else :
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
+ self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
#self.maCommande.listeAffichageWidget.append(self.lineEditVal2)
#self.maCommande.listeAffichageWidget.append(self.lineEditVal3)
-
# PN 18 mai 2020 : affiche systematique des optionnels
class MonWidgetFactCommun(Groupe):
- """
- """
- def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
- #print "fact : ",node.item.nom
- Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
- labeltext,fonte,couleur = self.node.item.getLabelText()
- self.GroupBox.setText(tr(labeltext))
- self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse)
- self.parentQt.commandesLayout.insertWidget(-1,self)
- self.doitAfficherOptionnel=True
- min,max=obj.getMinMax()
- if max < 2 and hasattr(self, 'RBPlus') : self.RBPlus.close()
- if max > 1 and hasattr(self, 'RBPlus') : self.RBPlus.clicked.connect(self.ajouteMCParPB)
+ """
+ """
+ def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
+ #print ("fact : ",node.item.nom)
+ Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
+ labeltext,fonte,couleur = self.node.item.getLabelText()
+ self.GroupBox.setText(tr(labeltext))
+ #self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse)
+ self.parentQt.commandesLayout.insertWidget(-1,self)
+ self.doitAfficherOptionnel=True
+ min,max=obj.getMinMax()
+ if max < 2 and hasattr(self, 'RBPlus') : self.RBPlus.close()
+ if max > 1 and hasattr(self, 'RBPlus') : self.RBPlus.clicked.connect(self.ajouteMCParPB)
- def enterEvent(self,event):
- #print "enterEvent ", self.node.item.getLabelText()[0]
- self.doitAfficherOptionnel=True
- QWidget.enterEvent(self,event)
- QTimer.singleShot(500, self.delayAffiche)
+ def enterEvent(self,event):
+ #print "enterEvent ", self.node.item.getLabelText()[0]
+ self.doitAfficherOptionnel=True
+ QWidget.enterEvent(self,event)
+ QTimer.singleShot(500, self.delayAffiche)
- def leaveEvent(self,event):
- #print "leaveEvent", self.node.item.getLabelText()[0]
- #self.doitAfficherOptionnel=False
- QWidget.leaveEvent(self,event)
+ def leaveEvent(self,event):
+ #print "leaveEvent", self.node.item.getLabelText()[0]
+ #self.doitAfficherOptionnel=False
+ QWidget.leaveEvent(self,event)
- def delayAffiche(self):
- #print "delayAffiche, self.doitAfficherOptionnel = ", self.doitAfficherOptionnel
- if self.doitAfficherOptionnel and self.editor.code != "CARMELCND" :self.afficheOptionnel()
+ def delayAffiche(self):
+ #print "delayAffiche, self.doitAfficherOptionnel = ", self.doitAfficherOptionnel
+ if self.doitAfficherOptionnel and self.editor.code != "CARMELCND" :self.afficheOptionnel()
- def ajouteMCParPB(self):
- texteListeNom="+"+self.obj.nom
- parentOuAjouter=self.parentQt
- from .monWidgetBloc import MonWidgetBloc
- while (parentOuAjouter and isinstance(parentOuAjouter, MonWidgetBloc)) :
- parentOuAjouter=parentOuAjouter.parentQt
- parentOuAjouter.ajoutMC(texteListeNom)
+ def ajouteMCParPB(self):
+ texteListeNom="+"+self.obj.nom
+ parentOuAjouter=self.parentQt
+ from .monWidgetBloc import MonWidgetBloc
+ while (parentOuAjouter and isinstance(parentOuAjouter, MonWidgetBloc)) :
+ parentOuAjouter=parentOuAjouter.parentQt
+ parentOuAjouter.ajoutMC(texteListeNom)
# def reaffiche(self, nodeAVoir=None):
-# print ('ds reaffiche : ', self.obj.nom, self.node.firstDeplie)
+# print ('ds reaffiche : ', self.obj.nom, self.node.firstDeplie)
# if self.node.editor.maConfiguration.afficheFirstPlies and self.node.firstDeplie:
# self.node.firstDeplie =False
# self.node.setPlie()
class MonWidgetFact(Ui_WidgetFact,MonWidgetFactCommun):
- #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1):
- # MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn)
- def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
- MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
+ #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1):
+ # MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn)
+ def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
+ MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
class MonWidgetFactTableau(Ui_WidgetFact,MonWidgetFactCommun):
- #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1):
- # MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn)
- def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
- MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
- MonWidgetFactTableau.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
+ #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1):
+ # MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn)
+ def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
+ MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
+ MonWidgetFactTableau.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
# Import des panels
class MonWidgetFactPlie(Ui_WidgetFactPlie,Groupe):
- """
- """
- #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=-1):
- def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
- #print "fact plie : ",node.item.nom
- node.fenetreAAfficher=self
- Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
- self.groupBox.setText(self.node.item.getLabelText()[0])
- self.parentQt.commandesLayout.insertWidget(-1,self)
-
- def traiteClicSurLabel(self,texte):
- return
+ """
+ """
+ #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=-1):
+ def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
+ #print "fact plie : ",node.item.nom
+ node.fenetreAAfficher=self
+ Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
+ self.groupBox.setText(self.node.item.getLabelText()[0])
+ self.parentQt.commandesLayout.insertWidget(-1,self)
+ def traiteClicSurLabel(self,texte):
+ return
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from desWidgetFormule import Ui_WidgetFormule
from Extensions.i18n import tr
-import Accas
+import Accas
import os
-
+
# Import des panels
class MonWidgetFormule(QWidget,Ui_WidgetFormule,FacultatifOuOptionnel):
- """
- """
- def __init__(self,node,editor,etape):
- #print "MonWidgetFormule ", self
- QWidget.__init__(self,None)
- self.node=node
- self.node.fenetre=self
- self.editor=editor
- self.appliEficas=self.editor.appliEficas
- self.repIcon=self.appliEficas.repIcon
- self.setupUi(self)
-
-
- self.setIconePoubelle()
- self.setIconesGenerales()
- self.setValeurs()
- self.setValide()
-
-
- if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
- else : self.bCatalogue.clicked.connect(self.afficheCatalogue)
- if self.editor.code in ['Adao','MAP','ADAO'] :
- self.bAvant.close()
- self.bApres.close()
- else :
- self.bAvant.clicked.connect(self.afficheAvant)
- self.bApres.clicked.connect(self.afficheApres)
- self.LENom.returnPressed.connect(self.nomChange)
- self.LENomFormule.returnPressed.connect(self.nomFormuleSaisi)
- self.LENomsArgs.returnPressed.connect(self.argsSaisis)
- self.LECorpsFormule.returnPressed.connect(self.FormuleSaisie)
-
-
-
- self.racine=self.node.tree.racine
- self.monOptionnel=None
- self.editor.fermeOptionnel()
- #print "fin init de widget Commande"
-
-
- def donnePremier(self):
- self.listeAffichageWidget[0].setFocus(7)
-
-
- def setValeurs(self):
+ """
+ """
+ def __init__(self,node,editor,etape):
+ #print "MonWidgetFormule ", self
+ QWidget.__init__(self,None)
+ self.node=node
+ self.node.fenetre=self
+ self.editor=editor
+ self.appliEficas=self.editor.appliEficas
+ self.repIcon=self.appliEficas.repIcon
+ self.setupUi(self)
+
+
+ self.setIconePoubelle()
+ self.setIconesGenerales()
+ self.setValeurs()
+ self.setValide()
+
+
+ if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
+ else : self.bCatalogue.clicked.connect(self.afficheCatalogue)
+ if self.editor.code in ['Adao','MAP','ADAO'] :
+ self.bAvant.close()
+ self.bApres.close()
+ else :
+ self.bAvant.clicked.connect(self.afficheAvant)
+ self.bApres.clicked.connect(self.afficheApres)
+ self.LENom.returnPressed.connect(self.nomChange)
+ self.LENomFormule.returnPressed.connect(self.nomFormuleSaisi)
+ self.LENomsArgs.returnPressed.connect(self.argsSaisis)
+ self.LECorpsFormule.returnPressed.connect(self.FormuleSaisie)
+
+
+
+ self.racine=self.node.tree.racine
+ self.monOptionnel=None
+ self.editor.fermeOptionnel()
+ #print "fin init de widget Commande"
+
+
+ def donnePremier(self):
+ self.listeAffichageWidget[0].setFocus(7)
+
+
+ def setValeurs(self):
self.LENomFormule.setText(self.node.item.getNom())
self.LECorpsFormule.setText(self.node.item.getCorps())
texte_args=""
self.LENomsArgs.setText(texte_args)
- def nomChange(self):
- nom = str(self.LENom.text())
- self.LENomFormule.setText(nom)
- self.nomFormuleSaisi()
-
-
- def afficheCatalogue(self):
- if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
- self.racine.affichePanneau()
- if self.node : self.node.select()
- else : self.racine.select()
-
- def afficheApres(self):
- self.node.selectApres()
-
- def afficheAvant(self):
- self.node.selectAvant()
-
- def setValide(self):
- if not(hasattr (self,'RBValide')) : return
- icon = QIcon()
- if self.node.item.object.isValid() :
- icon=QIcon(self.repIcon+"/ast-green-ball.png")
- else :
- icon=QIcon(self.repIcon+"/ast-red-ball.png")
- if self.node.item.getIconName() == "ast-yellow-square" :
- icon=QIcon(self.repIcon+"/ast-yel-ball.png")
- self.RBValide.setIcon(icon)
-
-
- def nomFormuleSaisi(self):
- nomFormule = str(self.LENomFormule.text())
- if nomFormule == '' : return
- self.LENom.setText(nomFormule)
- test,erreur = self.node.item.verifNom(nomFormule)
- if test :
- commentaire=nomFormule+tr(" est un nom valide pour une FORMULE")
- self.editor.afficheInfos(commentaire)
- else :
- commentaire=nomFormule+tr(" n'est pas un nom valide pour une FORMULE")
- self.editor.afficheInfos(commentaire,Qt.red)
- return
- if str(self.LENomsArgs.text()) != "" and str(self.LECorpsFormule.text())!= "" : self.BOkPressedFormule()
- self.LENomsArgs.setFocus(7)
-
- def argsSaisis(self):
- arguments = str(self.LENomsArgs.text())
- if arguments == '' : return
- test,erreur = self.node.item.verifArguments(arguments)
- if test:
- commentaire=tr("Argument(s) valide(s) pour une FORMULE")
- self.editor.afficheInfos(commentaire)
- else:
- commentaire=tr("Argument(s) invalide(s) pour une FORMULE")
- self.editor.afficheInfos(commentaire,Qt.red)
- if str(self.LECorpsFormule.text()) != "" and str(self.LENomFormule.text())!= "" : self.BOkPressedFormule()
- self.LECorpsFormule.setFocus(7)
-
- def FormuleSaisie(self):
- nomFormule = str(self.LENomFormule.text())
- arguments = str(self.LENomsArgs.text())
- expression = str(self.LECorpsFormule.text())
- if expression == '' : return
- test,erreur = self.node.item.verifFormule_python((nomFormule,"REEL",arguments,expression))
-
- if test:
- commentaire=tr("Corps de FORMULE valide")
- self.editor.afficheInfos(commentaire)
- else:
- commentaire=tr("Corps de FORMULE invalide")
- self.editor.afficheInfos(commentaire,Qt.red)
- if str(self.LENomsArgs.text()) != "" and str(self.LENomFormule.text())!= "" : self.BOkPressedFormule()
-
- def BOkPressedFormule(self):
- #print dir(self)
- #if self.parent.modified == 'n' : self.parent.initModif()
-
- nomFormule = str(self.LENomFormule.text())
- test,erreur = self.node.item.verifNom(nomFormule)
- if not test :
- self.editor.afficheInfos(erreur,Qt.red)
- return
-
- arguments = str(self.LENomsArgs.text())
- test,erreur = self.node.item.verifArguments(arguments)
- if not test :
- self.editor.afficheInfos(erreur,Qt.red)
- return
-
- expression = str(self.LECorpsFormule.text())
- test,erreur = self.node.item.verifFormule_python((nomFormule,"REEL",arguments,expression))
- if not test :
- self.editor.afficheInfos(erreur,Qt.red)
- return
-
- test=self.node.item.object.updateFormulePython(formule=(nomFormule,"REEL",arguments,expression))
- test,erreur = self.node.item.saveFormule(nomFormule,"REEL",arguments,expression)
- if test :
- self.node.onValid()
- self.node.update_valid()
- commentaire = "Formule saisie"
- self.editor.afficheInfos(commentaire)
- else:
- commentaire ="Formule incorrecte : " + erreur
- self.editor.afficheInfos(commentaire,Qt.red)
- self.editor.initModif()
-
+ def nomChange(self):
+ nom = str(self.LENom.text())
+ self.LENomFormule.setText(nom)
+ self.nomFormuleSaisi()
+
+
+ def afficheCatalogue(self):
+ if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
+ self.racine.affichePanneau()
+ if self.node : self.node.select()
+ else : self.racine.select()
+
+ def afficheApres(self):
+ self.node.selectApres()
+
+ def afficheAvant(self):
+ self.node.selectAvant()
+
+ def setValide(self):
+ if not(hasattr (self,'RBValide')) : return
+ icon = QIcon()
+ if self.node.item.object.isValid() :
+ icon=QIcon(self.repIcon+"/ast-green-ball.png")
+ else :
+ icon=QIcon(self.repIcon+"/ast-red-ball.png")
+ if self.node.item.getIconName() == "ast-yellow-square" :
+ icon=QIcon(self.repIcon+"/ast-yel-ball.png")
+ self.RBValide.setIcon(icon)
+
+
+ def nomFormuleSaisi(self):
+ nomFormule = str(self.LENomFormule.text())
+ if nomFormule == '' : return
+ self.LENom.setText(nomFormule)
+ test,erreur = self.node.item.verifNom(nomFormule)
+ if test :
+ commentaire=nomFormule+tr(" est un nom valide pour une FORMULE")
+ self.editor.afficheInfos(commentaire)
+ else :
+ commentaire=nomFormule+tr(" n'est pas un nom valide pour une FORMULE")
+ self.editor.afficheInfos(commentaire,Qt.red)
+ return
+ if str(self.LENomsArgs.text()) != "" and str(self.LECorpsFormule.text())!= "" : self.BOkPressedFormule()
+ self.LENomsArgs.setFocus(7)
+
+ def argsSaisis(self):
+ arguments = str(self.LENomsArgs.text())
+ if arguments == '' : return
+ test,erreur = self.node.item.verifArguments(arguments)
+ if test:
+ commentaire=tr("Argument(s) valide(s) pour une FORMULE")
+ self.editor.afficheInfos(commentaire)
+ else:
+ commentaire=tr("Argument(s) invalide(s) pour une FORMULE")
+ self.editor.afficheInfos(commentaire,Qt.red)
+ if str(self.LECorpsFormule.text()) != "" and str(self.LENomFormule.text())!= "" : self.BOkPressedFormule()
+ self.LECorpsFormule.setFocus(7)
+
+ def FormuleSaisie(self):
+ nomFormule = str(self.LENomFormule.text())
+ arguments = str(self.LENomsArgs.text())
+ expression = str(self.LECorpsFormule.text())
+ if expression == '' : return
+ test,erreur = self.node.item.verifFormule_python((nomFormule,"REEL",arguments,expression))
+
+ if test:
+ commentaire=tr("Corps de FORMULE valide")
+ self.editor.afficheInfos(commentaire)
+ else:
+ commentaire=tr("Corps de FORMULE invalide")
+ self.editor.afficheInfos(commentaire,Qt.red)
+ if str(self.LENomsArgs.text()) != "" and str(self.LENomFormule.text())!= "" : self.BOkPressedFormule()
+
+ def BOkPressedFormule(self):
+ #print dir(self)
+ #if self.parent.modified == 'n' : self.parent.initModif()
+
+ nomFormule = str(self.LENomFormule.text())
+ test,erreur = self.node.item.verifNom(nomFormule)
+ if not test :
+ self.editor.afficheInfos(erreur,Qt.red)
+ return
+
+ arguments = str(self.LENomsArgs.text())
+ test,erreur = self.node.item.verifArguments(arguments)
+ if not test :
+ self.editor.afficheInfos(erreur,Qt.red)
+ return
+
+ expression = str(self.LECorpsFormule.text())
+ test,erreur = self.node.item.verifFormule_python((nomFormule,"REEL",arguments,expression))
+ if not test :
+ self.editor.afficheInfos(erreur,Qt.red)
+ return
+
+ test=self.node.item.object.updateFormulePython(formule=(nomFormule,"REEL",arguments,expression))
+ test,erreur = self.node.item.saveFormule(nomFormule,"REEL",arguments,expression)
+ if test :
+ self.node.onValid()
+ self.node.update_valid()
+ commentaire = "Formule saisie"
+ self.editor.afficheInfos(commentaire)
+ else:
+ commentaire ="Formule incorrecte : " + erreur
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.editor.initModif()
from .feuille import Feuille
from .monWidgetSimpBase import MonWidgetSimpBase
-from desWidgetHeure import Ui_WidgetHeure
+from desWidgetHeure import Ui_WidgetHeure
class MonWidgetHeure (Ui_WidgetHeure,MonWidgetSimpBase):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
MonWidgetSimpBase.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
from Extensions.i18n import tr
from desWidgetInactif import Ui_WidgetInactif
-import Accas
+import Accas
import os
-
+
# Import des panels
class MonWidgetInactif(QWidget,Ui_WidgetInactif):
- """
- """
- def __init__(self,node,editor):
- QWidget.__init__(self,None)
- self.node=node
- self.editor=editor
- self.setupUi(self)
- from .monWidgetOptionnel import MonWidgetOptionnel
- if self.editor.widgetOptionnel!= None :
- self.monOptionnel=self.editor.widgetOptionnel
- else :
- self.monOptionnel=MonWidgetOptionnel(self)
- self.editor.widgetOptionnel=self.monOptionnel
- self.editor.splitter.addWidget(self.monOptionnel)
- self.editor.restoreSplitterSizes()
- self.afficheOptionnel()
- self.bAvant.clicked.connect(self.afficheAvant)
- self.bApres.clicked.connect(self.afficheApres)
- self.bCatalogue.clicked.connect(self.afficheCatalogue)
- self.labelNomCommande.setText(tr(self.node.item.nom))
- self.labelNomCommande.setEnabled(False)
-
- def traiteClicSurLabel(self):
- pass
-
- def donnePremier(self):
- pass
+ """
+ """
+ def __init__(self,node,editor):
+ QWidget.__init__(self,None)
+ self.node=node
+ self.editor=editor
+ self.setupUi(self)
+ from .monWidgetOptionnel import MonWidgetOptionnel
+ if self.editor.widgetOptionnel!= None :
+ self.monOptionnel=self.editor.widgetOptionnel
+ else :
+ self.monOptionnel=MonWidgetOptionnel(self)
+ self.editor.widgetOptionnel=self.monOptionnel
+ self.editor.splitter.addWidget(self.monOptionnel)
+ self.editor.restoreSplitterSizes()
+ self.afficheOptionnel()
+ self.bAvant.clicked.connect(self.afficheAvant)
+ self.bApres.clicked.connect(self.afficheApres)
+ self.bCatalogue.clicked.connect(self.afficheCatalogue)
+ self.labelNomCommande.setText(tr(self.node.item.nom))
+ self.labelNomCommande.setEnabled(False)
- def setValide(self):
- pass
+ def traiteClicSurLabel(self):
+ pass
- def afficheOptionnel(self):
- # N a pas de parentQt. doit donc etre redefini
- if self.editor.maConfiguration.closeOptionnel : return
- liste=[]
- #print "dans afficheOptionnel", self.monOptionnel
- # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
- #if self.monOptionnel == None : return
- self.monOptionnel.parentMC=self
- self.monOptionnel.afficheOptionnelVide()
+ def donnePremier(self):
+ pass
+ def setValide(self):
+ pass
- def afficheCatalogue(self):
- if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
- self.node.tree.racine.affichePanneau()
- self.node.tree.racine.select()
+ def afficheOptionnel(self):
+ # N a pas de parentQt. doit donc etre redefini
+ if self.editor.maConfiguration.closeOptionnel : return
+ liste=[]
+ #print "dans afficheOptionnel", self.monOptionnel
+ # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
+ #if self.monOptionnel == None : return
+ self.monOptionnel.parentMC=self
+ self.monOptionnel.afficheOptionnelVide()
- def afficheApres(self):
- self.node.selectApres()
- def afficheAvant(self):
- self.node.selectAvant()
+ def afficheCatalogue(self):
+ if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
+ self.node.tree.racine.affichePanneau()
+ self.node.tree.racine.select()
+ def afficheApres(self):
+ self.node.selectApres()
+ def afficheAvant(self):
+ self.node.selectAvant()
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from PyQt5.QtWidgets import QWidget
from Extensions.i18n import tr
-from desWidgetInformation import Ui_WidgetInformative
+from desWidgetInformation import Ui_WidgetInformative
class MonWidgetInfo (Ui_WidgetInformative,QWidget):
# c est juste la taille des differents widgets de base qui change
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
QWidget.__init__(self,None)
self.setupUi(self)
valeur=node.item.getValeur()
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,os
from Extensions.i18n import tr
-from desWidgetIntoSug import Ui_WidgetIntoSug
-from monWidgetPlusieursInto import MonWidgetPlusieursInto
+from desWidgetIntoSug import Ui_WidgetIntoSug
+from monWidgetPlusieursInto import MonWidgetPlusieursInto
class GereAjoutDsPossible:
- def LEValeurAjouteDsPossible(self):
- text=str(self.lineEditVal.text())
- if text == "" : return
- # il faudrait essauer d en obtenir un reel, un tuple ou ...
- # si cela est utilise pour autre chose que Telemac
- # tout devrait etre fait ici
- if not isinstance(text,str) :
- self.lineEditVal.setText("")
- return
- if self.node.item.hasIntoSug() :
- self.maListeDeValeur=list(self.node.item.getListePossibleAvecSug([]))
- self.maListeDeValeur.insert(0,text)
- else :
- try :
- self.monSimpDef.intoSug.insert(0,text)
- except :
- self.monSimpDef.intoSug=list(self.monSimpDef.intoSug)
- self.monSimpDef.intoSug.insert(0,text)
- # selon si on est une liste ou un combo
- try : self.ajouteValeurPossible(text)
- except : self.setValeurs()
+ def LEValeurAjouteDsPossible(self):
+ text=str(self.lineEditVal.text())
+ if text == "" : return
+ # il faudrait essauer d en obtenir un reel, un tuple ou ...
+ # si cela est utilise pour autre chose que Telemac
+ # tout devrait etre fait ici
+ if not isinstance(text,str) :
+ self.lineEditVal.setText("")
+ return
+ if self.node.item.hasIntoSug() :
+ self.maListeDeValeur=list(self.node.item.getListePossibleAvecSug([]))
+ self.maListeDeValeur.insert(0,text)
+ else :
+ try :
+ self.monSimpDef.intoSug.insert(0,text)
+ except :
+ self.monSimpDef.intoSug=list(self.monSimpDef.intoSug)
+ self.monSimpDef.intoSug.insert(0,text)
+ # selon si on est une liste ou un combo
+ try : self.ajouteValeurPossible(text)
+ except : self.setValeurs()
class MonWidgetIntoSug (Ui_WidgetIntoSug, MonWidgetPlusieursInto,GereAjoutDsPossible):
# Attention Attention
# cette wdget ne fonctionne actuellement que pour Telemac
-# on attend du texte . on n essaye pas de transformer
+# on attend du texte . on n essaye pas de transformer
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
MonWidgetPlusieursInto.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.lineEditVal.returnPressed.connect(self.LEValeurAjouteDsPossible)
-
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,os,sys
# Modules Eficas
from Extensions.i18n import tr
from .feuille import Feuille
+from Extensions.eficas_exception import EficasException
-from desWidgetMatrice import Ui_desWidgetMatrice
+from desWidgetMatrice import Ui_desWidgetMatrice
from PyQt5.QtCore import QSize, Qt
-from PyQt5.QtWidgets import QTableWidgetItem
-from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import QTableWidgetItem, QTableWidget
+from PyQt5.QtGui import QIcon, QColor
+from PyQt5.QtWidgets import QMessageBox
class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille):
# c est juste la taille des differents widgets de base qui change
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- self.monType= self.node.item.object.definition.type[0]
+ self.monType = self.node.item.object.definition.type[0]
parentQt.commandesLayout.insertWidget(-1,self)
self.nbLigs=0
self.nbCols=0
- self.nomVariables={}
self.creeColonnes()
self.connecterSignaux()
+ self.initialValeur()
+
+
+ def connecterSignaux(self) :
+ self.TBMatrice.itemChanged.connect(self.itemChanged)
+ self.PBrefresh.clicked.connect( self.acceptVal)
+ self.TBMatrice.focusOutEvent=self.monFocusOutEvent
+
+
+ def monFocusOutEvent(self,event):
+ self.acceptVal()
+ QTableWidget.focusOutEvent(self.TBMatrice,event)
+
+
+ def itemChanged(self):
+ monItem=self.TBMatrice.currentItem()
+ if monItem==None : return
+ texte=monItem.text()
+ if texte=="" : return
+ boolOk, commentaire = self.monType.verifItem(texte,self.node.item.object)
+ if not boolOk :
+ self.editor.afficheInfos(tr(commentaire),Qt.red)
+ monItem.setText("")
+ return
+ if self.monType.coloree : self.coloreItem(monItem,texte)
+
+
+ def coloreItem(self,monItem,texte):
+ if texte in self.monType.dictCouleurs.keys() :
+ monItem.setBackground(self.monType.dictCouleurs[texte])
+ else :
+ i=self.monType.indiceCouleur%20
+ newCouleur=QColor(*self.monType.listeCouleurs[i])
+ #monItem.setBackground(Qt.red)
+ monItem.setBackground(newCouleur)
+ self.monType.dictCouleurs[texte]=newCouleur
+ self.monType.indiceCouleur+=1
+
+
+
+ def creeColonnes(self):
+ if self.monType.methodeCalculTaille != None :
+ try:
+ MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,))
+ except :
+ QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + monType.methodeCalculTaille )
+ return
+ else :
+ self.nbLigs=self.monType.nbLigs
+ self.nbCols=self.monType.nbCols
+ self.TBMatrice.setColumnCount(self.nbCols)
+ self.TBMatrice.setRowCount(self.nbLigs)
+ if self.nbLigs <15 : taille = 50
+ else : taille = 30
+ for i in range(self.nbLigs) :
+ self.TBMatrice.setRowHeight(i,taille)
+ for i in range(self.nbCols) :
+ self.TBMatrice.setColumnWidth(i,taille)
+ if self.monType.listeHeaders != None :
+ self.TBMatrice.setHorizontalHeaderLabels(self.monType.listeHeaders[0])
+ self.TBMatrice.setVerticalHeaderLabels(self.monType.listeHeaders[1])
+ else :
+ self.TBMatrice.verticalHeader().hide()
+ self.TBMatrice.horizontalHeader().hide()
+ # self.TBMatrice.setFixedSize(self.nbCols*20+10,self.nbLigs*20+10)
+
+
+ def initialValeur(self):
+ liste=self.node.item.getValeur()
+ if liste == None : return
+ dejaAffiche=0
+ if (len(liste)) != self.nbLigs :
+ QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
+ for i in range(self.nbLigs):
+ inter=liste[i]
+ if (len(inter)) != self.nbCols :
+ QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
+ raise EficasException('dimension')
+ for j in range(self.nbCols):
+ self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i][j])))
+ if self.monType.coloree : self.coloreItem(self.TBMatrice.item(i,j),str(liste[i][j]))
+
+ def acceptVal(self):
+ liste=[]
+ for i in range(self.nbLigs):
+ listeCol=[]
+ for j in range(self.nbCols):
+ monItem=self.TBMatrice.item(i,j)
+ if monItem : texte=monItem.text()
+ else : texte = ''
+ if texte != '' : val=self.monType.convertItem(texte)
+ else : val = None
+ listeCol.append(val)
+ liste.append(listeCol)
+ self.node.item.setValeur(liste)
+
+
+class MonWidgetMatriceOT (MonWidgetMatrice):
+
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ monWidgetMatrice.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+
+ def connecterSignaux(self) :
+ self.TBMatrice.itemChanged.connect(self.itemChanged)
+ self.PBrefresh.clicked.connect( self.afficheEntete)
+
+
+ def afficheEntete(self):
+ self.objSimp.changeEnteteMatrice()
+ self.TBMatrice.clear()
if self.node.item.getValeur()== None: self.initialSsValeur()
else :
- try : self.initialValeur()
- except : self.initialSsValeur()
- if sys.platform[0:5]!="linux" :
- repIcon=self.node.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'update.png')
- icon = QIcon(fichier)
- self.PBrefresh.setIcon(icon)
- self.PBrefresh.setIconSize(QSize(32, 32))
-
-
-
- def connecterSignauxQT4(self) :
- self.connect(self.TBMatrice,SIGNAL("itemChanged(QTableWidgetItem *)"),self.itemChanged)
- self.connect(self.PBrefresh,SIGNAL("clicked()"), self.afficheEntete)
-
- def connecterSignaux(self) :
- self.TBMatrice.itemChanged.connect(self.itemChanged)
- self.PBrefresh.clicked.connect( self.afficheEntete)
-
- def afficheEntete(self):
- self.objSimp.changeEnteteMatrice()
- self.TBMatrice.clear()
- if self.node.item.getValeur()== None: self.initialSsValeur()
- else :
- try : self.initialValeur()
- except : self.initialSsValeur()
- self.node.item.object.state='changed'
- self.node.item.object.parent.state='changed'
- self.setValide()
- self.parentQt.setValide()
- self.node.item.jdc.isValid()
-
-
- def itemChanged(self):
- monItem=self.TBMatrice.currentItem()
- if monItem==None : return
- texte=monItem.text()
- if texte=="" : return
- #try :
- if 1 :
- val=float(str(texte))
- ok=True
- #except :
- else :
- ok=False
- if ok == False :
- self.editor.afficheInfos(tr("Entrer un float SVP"),Qt.red)
- monItem.setText("")
- return
- if self.monType.valSup != None :
- if val > self.monType.valSup :
- self.editor.afficheInfos(tr("Entrer un float inferieur a ") + repr(self.monType.valSup),Qt.red)
+ try : self.initialValeur()
+ except : self.initialSsValeur()
+ self.node.item.object.state='changed'
+ self.node.item.object.parent.state='changed'
+ self.setValide()
+ self.parentQt.setValide()
+ self.node.item.jdc.isValid()
+
+
+ def itemChanged(self):
+ monItem=self.TBMatrice.currentItem()
+ if monItem==None : return
+ texte=monItem.text()
+ if texte=="" : return
+ try :
+ val=float(str(texte))
+ ok=True
+ except :
+ ok=False
+ if ok == False :
+ self.editor.afficheInfos(tr("Entrer un float SVP"),Qt.red)
monItem.setText("")
return
- if self.monType.valMin != None :
- if val < self.monType.valMin :
- self.editor.afficheInfos(tr("Entrer un float superieur a ") + repr(self.monType.valMin),Qt.red)
- monItem.setText("")
+ if self.monType.valSup != None :
+ if val > self.monType.valSup :
+ self.editor.afficheInfos(tr("Entrer un float inferieur a ") + repr(self.monType.valSup),Qt.red)
+ monItem.setText("")
+ return
+ if self.monType.valMin != None :
+ if val < self.monType.valMin :
+ self.editor.afficheInfos(tr("Entrer un float superieur a ") + repr(self.monType.valMin),Qt.red)
+ monItem.setText("")
+ return
+ self.editor.afficheInfos("")
+ if self.monType.structure != None: MonWidgetMatrice.__dict__[self.monType.structure](*(self,))
+ self.acceptVal()
+
+
+
+ def creeColonnes(self):
+ if self.monType.methodeCalculTaille != None :
+ try:
+ MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,))
+ except :
+ QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + monType.methodeCalculTaille )
+ return
+ else :
+ self.nbLigs=self.monType.nbLigs
+ self.nbCols=self.monType.nbCols
+
+
+ def nbDeVariables(self):
+ # uniquement pour OT
+ jdc=self.node.item.object.jdc
+ etape=self.node.item.object.etape
+ self.listeVariables=jdc.getVariables(etape)
+ if self.listeVariables == [] :
+ QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue"))
return
- self.editor.afficheInfos("")
- if self.monType.structure != None: MonWidgetMatrice.__dict__[self.monType.structure](*(self,))
- self.acceptVal()
-
-
- def symetrique(self):
- monItem=self.TBMatrice.currentItem()
- texte=monItem.text()
- if monItem.row() != monItem.column():
- print(monItem.row(), monItem.column())
- monItemSym=self.TBMatrice.item(monItem.column(), monItem.row())
- monItemSym.setText(texte)
-
- def creeColonnes(self):
- if self.monType.methodeCalculTaille != None :
- #try:
- if 1 :
- MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,))
- else :
- #except :
- QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + monType.methodeCalculTaille )
- return
- else :
- self.nbLigs=self.monType.nbLigs
- self.nbCols=self.monType.nbCols
-
-
- def nbDeVariables(self):
- jdc=self.node.item.object.jdc
- etape=self.node.item.object.etape
- self.listeVariables=jdc.getVariables(etape)
- if self.listeVariables == [] :
- QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue"))
- return
- self.TBMatrice.setColumnCount(len(self.listeVariables))
- self.TBMatrice.setRowCount(len(self.listeVariables))
- self.nbLigs=len(self.listeVariables)
- self.nbCols=len(self.listeVariables)
-
- def nbDeDistributions(self):
- jdc=self.node.item.object.jdc
- etape=self.node.item.object.etape
- self.listeVariables=jdc.getDistributions(etape)
- if self.listeVariables == [] :
- QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue"))
- return
- self.TBMatrice.setColumnCount(len(self.listeVariables))
- self.TBMatrice.setRowCount(len(self.listeVariables))
- self.nbLigs=len(self.listeVariables)
- self.nbCols=len(self.listeVariables)
-
- def initialSsValeur(self):
- for row in range(self.nbLigs):
- for column in range(self.nbCols):
- if row == column :
- initialFloat=1
- else :
- initialFloat=0
- self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat)))
- #header=QStringList()
- header=[]
- for var in self.listeVariables :
-# header << var
- header.append(var)
- self.TBMatrice.setVerticalHeaderLabels(header)
- self.TBMatrice.setHorizontalHeaderLabels(header)
-
- def initialValeur(self):
- liste=self.node.item.getValeur()
- dejaAffiche=0
- if (len(liste)) != self.nbLigs +1 :
- QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
- dejaAffiche=1
- raise EficasException('dimension')
- for i in range(self.nbLigs):
- inter=liste[i+1]
- if (len(inter)) != self.nbCols and (dejaAffiche == 0 ) :
- QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
- dejaAffiche=1
- raise EficasException('dimension')
- for j in range(self.nbCols):
- self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i+1][j])))
- header=QStringList()
- for var in liste[0]:
- header << var
- self.TBMatrice.setVerticalHeaderLabels(header)
- self.TBMatrice.setHorizontalHeaderLabels(header)
-
- def acceptVal(self):
- liste=[]
- liste.append(self.listeVariables)
- if self.TBMatrice.rowCount() != self.nbLigs :
- QMessageBox.critical( self, tr("Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
- if self.TBMatrice.columnCount() != self.nbCols :
- QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
- for i in range(self.nbLigs):
- listeCol=[]
- for j in range(self.nbCols):
- monItem=self.TBMatrice.item(i,j)
- texte=monItem.text()
- try :
- val=float(str(texte))
- ok=True
- except :
- ok=False
- #val,ok=texte.toDouble()
- if ok == False :
- QMessageBox.critical( self, tr("Mauvaise Valeur"),tr( "l element ") + str(i) + "," +str(j) +tr("n est pas correct"))
- listeCol.append(val)
- liste.append(listeCol)
- # on ajoute l ordre des variables aux valeurs
- self.node.item.setValeur(liste)
+ self.TBMatrice.setColumnCount(len(self.listeVariables))
+ self.TBMatrice.setRowCount(len(self.listeVariables))
+ self.nbLigs=len(self.listeVariables)
+ self.nbCols=len(self.listeVariables)
+
+
+ def initialSsValeur(self):
+ # uniquement pour OT
+ self.listeVariables=[]
+ for row in range(self.nbLigs):
+ for column in range(self.nbCols):
+ if row == column :
+ initialFloat=1
+ else :
+ initialFloat=0
+ self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat)))
+ header =[]
+ for var in liste[0]: header .append(str(var))
+ self.TBMatrice.setVerticalHeaderLabels(header)
+ self.TBMatrice.setHorizontalHeaderLabels(header)
+
+ def initialValeur(self):
+ # uniquement pour OT
+ liste=self.node.item.getValeur()
+ dejaAffiche=0
+ if (len(liste)) != self.nbLigs +1 :
+ QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
+ raise EficasException('dimension')
+ for i in range(self.nbLigs):
+ inter=liste[i+1]
+ if (len(inter)) != self.nbCols :
+ QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
+ raise EficasException('dimension')
+ for j in range(self.nbCols):
+ self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i][j])))
+ header =[]
+ for var in liste[0]: header .append(str(var))
+ self.TBMatrice.setVerticalHeaderLabels(header)
+ self.TBMatrice.setHorizontalHeaderLabels(header)
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types
from Extensions.i18n import tr
-import Accas
+import Accas
import os
-
+
# Import des panels
class MonWidgetNiveauFact(Ui_WidgetNiveauFact,Groupe):
- """
- """
- def __init__(self,node,editor,definition,obj):
- self.listeAffichageWidget=[]
- self.listeBoutonAChanger=[]
- Groupe.__init__(self,node,editor,None,definition,obj,1,self)
- from InterfaceQT4 import composimp
- if isinstance(self.node ,composimp.Node):
- widget=self.node.getPanelGroupe(self,self.maCommande)
- self.listeBoutonAChanger.append(widget.RBValide)
- self.afficheOptionnel()
- self.inhibe=False
- self.labelDoc.setText(self.node.item.getFr())
- self.labelNomCommande.setText(self.node.item.getLabelText()[0])
-
- def reaffiche(self,nodeAVoir=None):
- self.node.setDeplieChildren()
- self.node.afficheCeNiveau()
- self.editor.fenetreCentraleAffichee.labelDoc.setText(self.node.item.getFr())
- self.editor.fenetreCentraleAffichee.labelNomCommande.setText(self.node.item.getLabelText()[0])
-
- def getPanel(self):
- # necessaire pour handleOnItem de browser.py
- # non appele
- pass
-
- def donnePremier(self):
- #print "dans donnePremier"
- QApplication.processEvents()
- if self.listeAffichageWidget != [] :
- self.listeAffichageWidget[0].setFocus(7)
- QApplication.processEvents()
- #print self.focusWidget()
-
-
- def focusNextPrevChild(self, next):
- # on s assure que ce n est pas un chgt de fenetre
- #print "je passe dans focusNextPrevChild"
- if self.editor.fenetreCentraleAffichee != self : return True
- f=self.focusWidget()
-
- if f not in self.listeAffichageWidget :
- i=0
- while not hasattr (f,'AAfficher') :
- if f==None :i=-1; break
- f=f.parentWidget()
- if hasattr(f,'AAfficher') : f=f.AAfficher
- if i != -1 : i=self.listeAffichageWidget.index(f)
- else :i=self.listeAffichageWidget.index(f)
- if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
- try :
- self.listeAffichageWidget[1].setFocus(7)
- w=self.focusWidget()
- self.inhibe=1
- w.focusPreviousChild()
- self.inhibe=0
- return True
- except : pass
-
- if i==0 and next==False and not self.inhibe:
- if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
- self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
- self.listeAffichageWidget[-2].setFocus(7)
- self.inhibe=1
- w=self.focusWidget()
- w.focusNextChild()
- self.inhibe=0
- return True
-
- if i==0 and next==True and not self.inhibe:
- self.listeAffichageWidget[0].setFocus(7)
- self.inhibe=1
- w=self.focusWidget()
- w.focusNextChild()
- self.inhibe=0
- return True
-
- if i>0 and next==False and not self.inhibe:
- if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
- self.listeAffichageWidget[i-1].setFocus(7)
- return True
- return QWidget.focusNextPrevChild(self, next)
-
- def etablitOrdre(self):
- # si on boucle on perd l'ordre
- i=0
- while(i +1 < len(self.listeAffichageWidget)):
- self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
- i=i+1
-
- def afficheSuivant(self,f):
- #print ('ds afficheSuivant')
- try :
- i=self.listeAffichageWidget.index(f)
- next=i+1
- except :
- next=1
- if (next==len(self.listeAffichageWidget) ): next =0
- try :
- self.listeAffichageWidget[next].setFocus(7)
- except :
+ """
+ """
+ def __init__(self,node,editor,definition,obj):
+ self.listeAffichageWidget=[]
+ self.listeBoutonAChanger=[]
+ Groupe.__init__(self,node,editor,None,definition,obj,1,self)
+ from InterfaceQT4 import composimp
+ if isinstance(self.node ,composimp.Node):
+ widget=self.node.getPanelGroupe(self,self.maCommande)
+ self.listeBoutonAChanger.append(widget.RBValide)
+ self.afficheOptionnel()
+ self.inhibe=False
+ self.labelDoc.setText(self.node.item.getFr())
+ self.labelNomCommande.setText(self.node.item.getLabelText()[0])
+
+ def reaffiche(self,nodeAVoir=None):
+ self.node.setDeplieChildren()
+ self.node.afficheCeNiveau()
+ self.editor.fenetreCentraleAffichee.labelDoc.setText(self.node.item.getFr())
+ self.editor.fenetreCentraleAffichee.labelNomCommande.setText(self.node.item.getLabelText()[0])
+
+ def getPanel(self):
+ # necessaire pour handleOnItem de browser.py
+ # non appele
pass
-
- def afficheOptionnel(self):
- # N a pas de parentQt. doit donc etre redefini
- #print ('ds afficheOptionnel')
- if self.editor.maConfiguration.closeOptionnel : return
- if self.editor.widgetOptionnel!= None :
- self.monOptionnel=self.editor.widgetOptionnel
- else :
- self.editor.inhibeSplitter=1
- self.monOptionnel=MonWidgetOptionnel(self.editor)
- self.editor.widgetOptionnel=self.monOptionnel
- self.editor.splitter.addWidget(self.monOptionnel)
- self.editor.ajoutOptionnel()
- self.editor.inhibeSplitter=0
- self.monOptionnel.vireTous()
-
-
- liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
- self.monOptionnel.parentCommande=self
- self.monOptionnel.titre(self.obj.nom)
- self.monGroupe=self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
-
- def setValide(self):
- Groupe.setValide(self)
- for bouton in self.listeBoutonAChanger:
- couleur=self.node.item.getIconName()
- monIcone = QIcon(self.repIcon+"/" + couleur + ".png")
- bouton.setIcon(monIcone)
+ def donnePremier(self):
+ #print "dans donnePremier"
+ QApplication.processEvents()
+ if self.listeAffichageWidget != [] :
+ self.listeAffichageWidget[0].setFocus(7)
+ QApplication.processEvents()
+ #print self.focusWidget()
+
+
+ def focusNextPrevChild(self, next):
+ # on s assure que ce n est pas un chgt de fenetre
+ #print "je passe dans focusNextPrevChild"
+ if self.editor.fenetreCentraleAffichee != self : return True
+ f=self.focusWidget()
+
+ if f not in self.listeAffichageWidget :
+ i=0
+ while not hasattr (f,'AAfficher') :
+ if f==None :i=-1; break
+ f=f.parentWidget()
+ if hasattr(f,'AAfficher') : f=f.AAfficher
+ if i != -1 : i=self.listeAffichageWidget.index(f)
+ else :i=self.listeAffichageWidget.index(f)
+ if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
+ try :
+ self.listeAffichageWidget[1].setFocus(7)
+ w=self.focusWidget()
+ self.inhibe=1
+ w.focusPreviousChild()
+ self.inhibe=0
+ return True
+ except : pass
+
+ if i==0 and next==False and not self.inhibe:
+ if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
+ self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
+ self.listeAffichageWidget[-2].setFocus(7)
+ self.inhibe=1
+ w=self.focusWidget()
+ w.focusNextChild()
+ self.inhibe=0
+ return True
+
+ if i==0 and next==True and not self.inhibe:
+ self.listeAffichageWidget[0].setFocus(7)
+ self.inhibe=1
+ w=self.focusWidget()
+ w.focusNextChild()
+ self.inhibe=0
+ return True
+
+ if i>0 and next==False and not self.inhibe:
+ if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
+ self.listeAffichageWidget[i-1].setFocus(7)
+ return True
+ return QWidget.focusNextPrevChild(self, next)
+
+ def etablitOrdre(self):
+ # si on boucle on perd l'ordre
+ i=0
+ while(i +1 < len(self.listeAffichageWidget)):
+ self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
+ i=i+1
+
+ def afficheSuivant(self,f):
+ #print ('ds afficheSuivant')
+ try :
+ i=self.listeAffichageWidget.index(f)
+ next=i+1
+ except :
+ next=1
+ if (next==len(self.listeAffichageWidget) ): next =0
+ try :
+ self.listeAffichageWidget[next].setFocus(7)
+ except :
+ pass
+
+
+ def afficheOptionnel(self):
+ # N a pas de parentQt. doit donc etre redefini
+ #print ('ds afficheOptionnel')
+ if self.editor.maConfiguration.closeOptionnel : return
+ if self.editor.widgetOptionnel!= None :
+ self.monOptionnel=self.editor.widgetOptionnel
+ else :
+ self.editor.inhibeSplitter=1
+ self.monOptionnel=MonWidgetOptionnel(self.editor)
+ self.editor.widgetOptionnel=self.monOptionnel
+ self.editor.splitter.addWidget(self.monOptionnel)
+ self.editor.ajoutOptionnel()
+ self.editor.inhibeSplitter=0
+ self.monOptionnel.vireTous()
+
+
+ liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
+ self.monOptionnel.parentCommande=self
+ self.monOptionnel.titre(self.obj.nom)
+ self.monGroupe=self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
+
+ def setValide(self):
+ Groupe.setValide(self)
+ for bouton in self.listeBoutonAChanger:
+ couleur=self.node.item.getIconName()
+ monIcone = QIcon(self.repIcon+"/" + couleur + ".png")
+ bouton.setIcon(monIcone)
class MonWidgetNiveauFactTableau(MonWidgetNiveauFact):
- def __init__(self,node,editor,definition,obj):
- MonWidgetNiveauFact.__init__(self,node,editor,definition,obj)
-
-
+ def __init__(self,node,editor,definition,obj):
+ MonWidgetNiveauFact.__init__(self,node,editor,definition,obj)
from desWidgetOptionnel import Ui_WidgetOptionnel
from .monGroupeOptionnel import MonGroupeOptionnel
-
+
# Import des panels
class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel):
- def __init__(self,parentQt):
- #print ("dans init de monWidgetOptionnel ", parentQt )
- QWidget.__init__(self,None)
- self.setupUi(self)
- self.dicoMCWidgetOptionnel={}
- self.parentQt=parentQt
+ def __init__(self,parentQt):
+ #print ("dans init de monWidgetOptionnel ", parentQt )
+ QWidget.__init__(self,None)
+ self.setupUi(self)
+ self.dicoMCWidgetOptionnel={}
+ self.parentQt=parentQt
+
+ def afficheOptionnel(self,liste,liste_rouge,MC):
+ #print ('afficheOptionnel MonWidgetOptionnel',self, liste,MC.node.item.nom)
+ self.vireLesAutres(MC)
+
+ if MC.node.item.nom in self.dicoMCWidgetOptionnel :
+ #print (MC.node.item.nom)
+ self.dicoMCWidgetOptionnel[MC.node.item.nom].close()
+ self.dicoMCWidgetOptionnel[MC.node.item.nom].setParent(None)
+ self.dicoMCWidgetOptionnel[MC.node.item.nom].deleteLater()
+ del self.dicoMCWidgetOptionnel[MC.node.item.nom]
+ if liste==[] : return
+ groupe = MonGroupeOptionnel(liste,liste_rouge,self,MC)
+ self.groupesOptionnelsLayout.insertWidget(0,groupe)
+ self.dicoMCWidgetOptionnel[MC.node.item.nom]=groupe
+ return groupe
- def afficheOptionnel(self,liste,liste_rouge,MC):
- #print ('afficheOptionnel MonWidgetOptionnel',self, liste,MC.node.item.nom)
- self.vireLesAutres(MC)
-
- if MC.node.item.nom in self.dicoMCWidgetOptionnel :
- #print (MC.node.item.nom)
- self.dicoMCWidgetOptionnel[MC.node.item.nom].close()
- self.dicoMCWidgetOptionnel[MC.node.item.nom].setParent(None)
- self.dicoMCWidgetOptionnel[MC.node.item.nom].deleteLater()
- del self.dicoMCWidgetOptionnel[MC.node.item.nom]
- if liste==[] : return
- groupe = MonGroupeOptionnel(liste,liste_rouge,self,MC)
- self.groupesOptionnelsLayout.insertWidget(0,groupe)
- self.dicoMCWidgetOptionnel[MC.node.item.nom]=groupe
- return groupe
+ def vireLesAutres(self,MC):
+ #print( "je passe dans vireLesAutres")
+ genea =MC.obj.getGenealogie()
+ #print (genea)
+ for k in list(self.dicoMCWidgetOptionnel.keys()):
+ #print (k)
+ #if k not in genea : print ( k)
+ if k not in genea :
+ self.dicoMCWidgetOptionnel[k].close()
+ del self.dicoMCWidgetOptionnel[k]
+ #print( "fin vireLesAutres")
- def vireLesAutres(self,MC):
- #print( "je passe dans vireLesAutres")
- genea =MC.obj.getGenealogie()
- #print (genea)
- for k in list(self.dicoMCWidgetOptionnel.keys()):
- #print (k)
- #if k not in genea : print ( k)
- if k not in genea :
- self.dicoMCWidgetOptionnel[k].close()
- del self.dicoMCWidgetOptionnel[k]
- #print( "fin vireLesAutres")
-
- def vireTous(self):
- for k in list(self.dicoMCWidgetOptionnel.keys()):
- self.dicoMCWidgetOptionnel[k].close()
- del self.dicoMCWidgetOptionnel[k]
+ def vireTous(self):
+ for k in list(self.dicoMCWidgetOptionnel.keys()):
+ self.dicoMCWidgetOptionnel[k].close()
+ del self.dicoMCWidgetOptionnel[k]
- def afficheOptionnelVide(self):
- self.GeneaLabel.setText("")
- for k in list(self.dicoMCWidgetOptionnel.keys()):
+ def afficheOptionnelVide(self):
+ self.GeneaLabel.setText("")
+ for k in list(self.dicoMCWidgetOptionnel.keys()):
self.dicoMCWidgetOptionnel[k].close()
del self.dicoMCWidgetOptionnel[k]
- def titre(self,MC):
- if self.parentCommande.node.editor.maConfiguration.closeFrameRechercheCommande==True :
- self.frameLabelCommande.close()
- return
- labeltext,fonte,couleur = self.parentCommande.node.item.getLabelText()
- l=tr(labeltext)
- li=[]
- while len(l) > 25:
- li.append(l[0:24])
- l=l[24:]
- li.append(l)
- texte=""
- for l in li : texte+=l+"\n"
- texte=texte[0:-2]
- self.GeneaLabel.setText(tr("Options pour \n") +texte)
+ def titre(self,MC):
+ if self.parentCommande.node.editor.maConfiguration.closeFrameRechercheCommande==True :
+ self.frameLabelCommande.close()
+ return
+ labeltext,fonte,couleur = self.parentCommande.node.item.getLabelText()
+ l=tr(labeltext)
+ li=[]
+ while len(l) > 25:
+ li.append(l[0:24])
+ l=l[24:]
+ li.append(l)
+ texte=""
+ for l in li : texte+=l+"\n"
+ texte=texte[0:-2]
+ self.GeneaLabel.setText(tr("Options pour \n") +texte)
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
from desWidgetParam import Ui_WidgetParam
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
-import Accas
+import Accas
import os, re
import types
pattern_name = re.compile(r'^[^\d\W]\w*\Z')
-
+
# Import des panels
class MonWidgetParam(QWidget,Ui_WidgetParam,FacultatifOuOptionnel):
- """
- """
- def __init__(self,node,editor,commentaire):
- QWidget.__init__(self,None)
- self.node=node
- self.node.fenetre=self
- self.setupUi(self)
- self.editor=editor
- self.appliEficas=self.editor.appliEficas
- self.repIcon=self.appliEficas.repIcon
-
- self.setIconePoubelle()
- if not(self.node.item.object.isValid()) :
- icon=QIcon(self.repIcon+"/ast-red-ball.png")
- self.RBValide.setIcon(icon)
-
- self.remplit()
- #if self.editor.code in ['MAP','CARMELCND','CF'] : self.bCatalogue.close()
- if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
- else : self.bCatalogue.clicked.connect(self.afficheCatalogue)
-
- self.lineEditVal.returnPressed.connect(self.LEvaleurPressed)
- self.lineEditNom.returnPressed.connect(self.LENomPressed)
- self.bAvant.clicked.connect(self.afficheAvant)
- self.bApres.clicked.connect(self.afficheApres)
- self.bVerifie.clicked.connect(self.verifiePressed)
-
- self.editor.fermeOptionnel()
-
-
- def afficheCatalogue(self):
- self.node.tree.racine.affichePanneau()
- if self.node : self.node.select()
- else : self.node.tree.racine.select()
-
- def remplit(self):
- nom=self.node.item.getNom()
- self.lineEditNom.setText(nom)
-
- valeur=self.node.item.getValeur()
- if valeur == None :
- self.lineEditVal.clear()
- elif type(valeur) == list :
- texte="["
- for l in valeur :
- texte=texte+str(l) +","
- texte=texte[0:-1]+"]"
- self.lineEditVal.setText(texte)
- else :
- self.lineEditVal.setText(str(valeur))
-
-
- def donnePremier(self):
- self.lineEditVal.setFocus(7)
-
- def LEvaleurPressed(self):
- if self.verifiePressed() == False :
- QMessageBox.warning( self,tr( "Modification Impossible"),tr( "le parametre n'est pas valide"))
- nom=str(self.lineEditNom.text())
- val=str(self.lineEditVal.text())
- self.node.item.setNom(nom)
- self.node.item.setValeur(val)
- self.node.updateTexte()
-
- def LENomPressed(self):
- self.LEvaleurPressed()
-
- def verifiePressed(self):
+ """
+ """
+ def __init__(self,node,editor,commentaire):
+ QWidget.__init__(self,None)
+ self.node=node
+ self.node.fenetre=self
+ self.setupUi(self)
+ self.editor=editor
+ self.appliEficas=self.editor.appliEficas
+ self.repIcon=self.appliEficas.repIcon
+
+ self.setIconePoubelle()
+ if not(self.node.item.object.isValid()) :
+ icon=QIcon(self.repIcon+"/ast-red-ball.png")
+ self.RBValide.setIcon(icon)
+
+ self.remplit()
+ #if self.editor.code in ['MAP','CARMELCND','CF'] : self.bCatalogue.close()
+ if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
+ else : self.bCatalogue.clicked.connect(self.afficheCatalogue)
+
+ self.lineEditVal.returnPressed.connect(self.LEvaleurPressed)
+ self.lineEditNom.returnPressed.connect(self.LENomPressed)
+ self.bAvant.clicked.connect(self.afficheAvant)
+ self.bApres.clicked.connect(self.afficheApres)
+ self.bVerifie.clicked.connect(self.verifiePressed)
+
+ self.editor.fermeOptionnel()
+
+
+ def afficheCatalogue(self):
+ self.node.tree.racine.affichePanneau()
+ if self.node : self.node.select()
+ else : self.node.tree.racine.select()
+
+ def remplit(self):
+ nom=self.node.item.getNom()
+ self.lineEditNom.setText(nom)
+
+ valeur=self.node.item.getValeur()
+ if valeur == None :
+ self.lineEditVal.clear()
+ elif type(valeur) == list :
+ texte="["
+ for l in valeur :
+ texte=texte+str(l) +","
+ texte=texte[0:-1]+"]"
+ self.lineEditVal.setText(texte)
+ else :
+ self.lineEditVal.setText(str(valeur))
+
+
+ def donnePremier(self):
+ self.lineEditVal.setFocus(7)
+
+ def LEvaleurPressed(self):
+ if self.verifiePressed() == False :
+ QMessageBox.warning( self,tr( "Modification Impossible"),tr( "le parametre n'est pas valide"))
+ nom=str(self.lineEditNom.text())
+ val=str(self.lineEditVal.text())
+ self.node.item.setNom(nom)
+ self.node.item.setValeur(val)
+ self.node.updateTexte()
+
+ def LENomPressed(self):
+ self.LEvaleurPressed()
+
+ def verifiePressed(self):
nomString=str(self.lineEditNom.text())
- if not pattern_name.match(nomString) :
- self.LECommentaire.setText(nomString + tr(" n est pas un identifiant correct"))
- return False
+ if not pattern_name.match(nomString) :
+ self.LECommentaire.setText(nomString + tr(" n est pas un identifiant correct"))
+ return False
valString=str(self.lineEditVal.text())
exec("from math import *", contexte)
jdc=self.node.item.getJdc()
for p in jdc.params :
- try:
- tp=p.nom+'='+str(repr(p.valeur))
- exec(tp, contexte)
- except exc :
- pass
+ try:
+ tp=p.nom+'='+str(repr(p.valeur))
+ exec(tp, contexte)
+ except exc :
+ pass
monTexte=nomString+"="+valString
try :
- exec(monTexte, contexte)
+ exec(monTexte, contexte)
except (ValueError,TypeError, NameError,RuntimeError,ZeroDivisionError) as exc:
- self.LECommentaire.setText(tr("Valeur incorrecte: ")+str(exc))
- return False
+ self.LECommentaire.setText(tr("Valeur incorrecte: ")+str(exc))
+ return False
except :
- self.LECommentaire.setText(tr("Valeur incorrecte "))
- return False
+ self.LECommentaire.setText(tr("Valeur incorrecte "))
+ return False
self.LECommentaire.setText(tr("Valeur correcte "))
return True
- def afficheApres(self):
- self.node.selectApres()
-
- def afficheAvant(self):
- self.node.selectAvant()
-
+ def afficheApres(self):
+ self.node.selectApres()
+ def afficheAvant(self):
+ self.node.selectAvant()
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os,sys
# Modules Eficas
from Extensions.i18n import tr
-from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
+from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
from .politiquesValidation import PolitiquePlusieurs
from six.moves import range
class MonWidgetPlusieursASSDIntoOrdonne (MonWidgetPlusieursIntoOrdonne):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.numLineEditEnCours=0
MonWidgetPlusieursIntoOrdonne.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
-
- def prepareListeResultat(self):
- for i in self.listeLE: i.close()
- self.listeLE=[]
- self.vScrollBar = self.scrollArea.verticalScrollBar()
- self.listeAAfficher = self.node.item.getSdAvantDuBonType()
- if len(self.listeAAfficher) == 0 :
- self.ajoutLE(0)
- return
-
-
- if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
- else : self.setMinimumHeight(len(self.listeAAfficher)*30)
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
- for i in range(len(self.listeAAfficher)):
- nomLE="lineEditVal"+str(i+1)
- courant=getattr(self,nomLE)
- courant.setText(str(self.listeAAfficher[i]))
- self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
-
-
+
+ def prepareListeResultat(self):
+ for i in self.listeLE: i.close()
+ self.listeLE=[]
+ self.vScrollBar = self.scrollArea.verticalScrollBar()
+ self.listeAAfficher = self.node.item.getSdAvantDuBonType()
+
+ if len(self.listeAAfficher) == 0 :
+ self.ajoutLE(0)
+ return
+
+
+ if len(self.listeAAfficher)*30 > 400 : self.resize(self.width(),200)
+ else : self.resize(self.width(),len(self.listeAAfficher)*30)
+ self.politique=PolitiquePlusieurs(self.node,self.editor)
+ for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
+ for i in range(len(self.listeAAfficher)):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ courant.setText(str(self.listeAAfficher[i]))
+ self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import types,os,sys
from six.moves import range
-from PyQt5.QtGui import QIcon
+from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMessageBox, QScrollArea
from PyQt5.QtCore import QTimer, QSize, Qt
from Extensions.i18n import tr
from InterfaceQT4.feuille import Feuille
-from desWidgetPlusieursBase import Ui_WidgetPlusieursBase
+from desWidgetPlusieursBase import Ui_WidgetPlusieursBase
from InterfaceQT4.politiquesValidation import PolitiquePlusieurs
from InterfaceQT4.qtSaisie import SaisieValeur
from InterfaceQT4.gereListe import GereListe
class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print "MonWidgetPlusieursBase", nom
self.inFocusOutEvent=False
self.nomLine="lineEditVal"
self.indexDernierLabel=0
self.numLineEditEnCours=0
self.listeAffichageWidget=[]
+ self.dictLE={}
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
GereListe.__init__(self)
self.gereIconePlier()
self.BSelectFichier.clicked.connect(self.selectInFile)
- if sys.platform[0:5]!="linux":
- repIcon=self.node.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'arrow_up.png')
- icon = QIcon(fichier)
- self.RBHaut.setIcon(icon)
- self.RBHaut.setIconSize(QSize(32, 32))
- fichier2=os.path.join(repIcon, 'arrow_down.png')
- icon2 = QIcon(fichier2)
- self.RBBas.setIcon(icon2)
- fichier3=os.path.join(repIcon, 'file-explorer.png')
- icon3 = QIcon(fichier2)
- self.BSelectFichier.setIcon(icon3)
- self.BSelectFichier.setIconSize(QSize(32, 32))
+ repIcon=self.node.editor.appliEficas.repIcon
+ fichier=os.path.join(repIcon, 'arrow_up.png')
+ icon = QIcon(fichier)
+ self.RBHaut.setIcon(icon)
+ self.RBHaut.setIconSize(QSize(32, 32))
+ fichier2=os.path.join(repIcon, 'arrow_down.png')
+ icon2 = QIcon(fichier2)
+ self.RBBas.setIcon(icon2)
+ fichier3=os.path.join(repIcon, 'file-explorer.png')
+ icon3 = QIcon(fichier2)
+ self.BSelectFichier.setIcon(icon3)
+ self.BSelectFichier.setIconSize(QSize(32, 32))
icon=QIcon(self.repIcon+"/MoinsBleu.png")
self.RBMoins.setIcon(icon)
icon=QIcon(self.repIcon+"/PlusBleu.png")
self.listeValeursCourantes=self.node.item.getListeValeurs()
- if self.monSimpDef.max != "**" and self.monSimpDef.max < 7:
- hauteurMax=dicoLongueur[self.monSimpDef.max]
+ if self.monSimpDef.max != "**" and self.monSimpDef.max < 7:
+ hauteurMax=dicoLongueur[self.monSimpDef.max]
else :
- hauteurMax=220
+ hauteurMax=220
# if self.monSimpDef.max == self.monSimpDef.min : self.setMaximumHeight(hauteur)
self.resize(self.width(),hauteurMax)
self.setMinimumHeight(hauteurMax)
self.AAfficher=self.lineEditVal1
self.inInit=False
# PNPN a completer __ si tuple le type des tuples sinon le tuple
- self.monCommentaireLabel.setText(self.finCommentaireListe())
+ # trop moche
+ #self.monCommentaireLabel.setText(self.finCommentaireListe())
+ self.monCommentaireLabel.setText("")
self.scrollArea.leaveEvent = self.leaveEventScrollArea
+ self.inhibeChangeValeur = False
+ self.dejaAverti = False
+
+
+ def setValeurs(self):
+ self.vScrollBar = self.scrollArea.verticalScrollBar()
+ self.politique=PolitiquePlusieurs(self.node,self.editor)
+ # construction du min de valeur a entrer
+ if self.monSimpDef.max == "**" : aConstruire=7
+ elif self.monSimpDef.max == float('inf'): aConstruire=7
+ else : aConstruire=self.monSimpDef.max
+
+ for i in range(1,aConstruire):
+ self.ajoutLineEdit()
+ QApplication.processEvents()
+ self.scrollArea.ensureWidgetVisible(self.lineEditVal1)
+ self.listeValeursCourantes=self.node.item.getListeValeurs()
+ index=1
+ for valeur in self.listeValeursCourantes :
+ val=self.politique.getValeurTexte(valeur)
+ nomLineEdit="lineEditVal"+str(index)
+ if hasattr(self,nomLineEdit) :
+ courant=getattr(self,nomLineEdit)
+ if 'R' in self.objSimp.definition.type and str(val) != repr(val) : courant.setText(repr(val))
+ else : courant.setText(str(val))
+ self.dictLE[index]=val
+ else :
+ self.ajoutLineEdit(val)
+ index=index+1
+ # ajout d'une ligne vide ou affichage commentaire
+ if self.indexDernierLabel < self.monSimpDef.max : self.ajoutLineEdit()
+ else : self.scrollArea.setToolTip('nb max de valeurs atteint')
+ #self.adjustSize()
+ #self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
+
+
+ def ajoutLineEdit(self,valeur=None,):
+ #print ('ajoutLineEdit plusieursBase')
+ #print ('self.indexDernierLabel', self.indexDernierLabel)
+ self.indexDernierLabel=self.indexDernierLabel+1
+ nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
+ if hasattr(self,nomLineEdit) :
+ self.indexDernierLabel=self.indexDernierLabel-1
+ return
+ nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
+ self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
+ nouveauLE.setText("")
+ if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
+ else : nouveauLE.setStyleSheet("background:rgb(235,235,235)")
+ nouveauLE.setFrame(False)
+ nouveauLE.returnPressed.connect(self.changeValeur)
+
+ setattr(self,nomLineEdit,nouveauLE)
+ self.listeAffichageWidget.append(nouveauLE)
+ self.etablitOrdre()
+ if valeur != None :
+ nouveauLE.setText(str(valeur))
+ self.dictLE[self.indexDernierLabel] = valeur
+ else :
+ self.dictLE[self.indexDernierLabel] = None
+ # deux lignes pour que le ensureVisible fonctionne
+ self.estVisible=nouveauLE
+ if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
+
+ def etablitOrdre(self):
+ i=0
+ while(i +1 < len(self.listeAffichageWidget)):
+ self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
+ self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
+ i=i+1
+ # si on boucle on perd l'ordre
+
+
+ def rendVisibleLigne(self):
+ QApplication.processEvents()
+ self.estVisible.setFocus()
+ self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
+
+ def finCommentaire(self):
+ return self.finCommentaireListe()
- def setValeurs(self):
- self.vScrollBar = self.scrollArea.verticalScrollBar()
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- # construction du min de valeur a entrer
- if self.monSimpDef.max == "**" : aConstruire=7
- elif self.monSimpDef.max == float('inf'): aConstruire=7
- else : aConstruire=self.monSimpDef.max
-
- for i in range(1,aConstruire):
- self.ajoutLineEdit()
- QApplication.processEvents()
- self.scrollArea.ensureWidgetVisible(self.lineEditVal1)
- self.listeValeursCourantes=self.node.item.getListeValeurs()
- index=1
- for valeur in self.listeValeursCourantes :
- val=self.politique.getValeurTexte(valeur)
- nomLineEdit="lineEditVal"+str(index)
- if hasattr(self,nomLineEdit) :
- courant=getattr(self,nomLineEdit)
- if 'R' in self.objSimp.definition.type and str(val) != repr(val) : courant.setText(repr(val))
- else : courant.setText(str(val))
- else :
- self.ajoutLineEdit(val)
- index=index+1
- # ajout d'une ligne vide ou affichage commentaire
- if self.indexDernierLabel < self.monSimpDef.max : self.ajoutLineEdit()
- else : self.scrollArea.setToolTip('nb max de valeurs atteint')
- #self.adjustSize()
- #self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
-
-
- def ajoutLineEdit(self,valeur=None,):
- self.indexDernierLabel=self.indexDernierLabel+1
- nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
- if hasattr(self,nomLineEdit) :
- self.indexDernierLabel=self.indexDernierLabel-1
- return
- nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
- self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
- nouveauLE.setText("")
- if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
- else : nouveauLE.setStyleSheet("background:rgb(235,235,235)")
- nouveauLE.setFrame(False)
- nouveauLE.returnPressed.connect(self.changeValeur)
-
- setattr(self,nomLineEdit,nouveauLE)
- self.listeAffichageWidget.append(nouveauLE)
- self.etablitOrdre()
- if valeur != None : nouveauLE.setText(str(valeur))
- # deux lignes pour que le ensureVisible fonctionne
- self.estVisible=nouveauLE
- if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
-
- def etablitOrdre(self):
- i=0
- while(i +1 < len(self.listeAffichageWidget)):
- self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
- self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
- i=i+1
- # si on boucle on perd l'ordre
-
-
- def rendVisibleLigne(self):
- QApplication.processEvents()
- self.estVisible.setFocus()
- self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
-
-
- def finCommentaire(self):
- return self.finCommentaireListe()
-
- def ajout1Valeur(self,valeur=None):
+ def ajout1Valeur(self,valeur=None):
+ print ('ajout1Valeur plusieursBase')
if valeur == None : return
liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
if validite == 0 : return
for valeur in self.listeValeursCourantes : listeVal.append(valeur)
validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
if (comm2 != "" and comm != None) : return comm2
- if validite :
- self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
- if len(self.listeValeursCourantes) > self.monSimpDef.min :
- self.node.item.setValeur(self.listeValeursCourantes)
- self.reaffiche()
- return None
+ if validite :
+ self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
+ if len(self.listeValeursCourantes) > self.monSimpDef.min :
+ self.node.item.setValeur(self.listeValeursCourantes)
+ self.reaffiche()
+ return None
else :
- return(comm2+" "+comm)
-
- def reaffiche(self):
- # A priori, on ne fait rien
- pass
-
-
- def ajoutNValeur(self,liste):
- #----------------------------
- # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
- # car alors le temps de verification devient prohibitif reconstructu=ion et verification a
- # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
-
-
+ return(comm2+" "+comm)
+
+ def reaffiche(self):
+ # A priori, on ne fait rien
+ pass
+
+
+ def ajoutNValeur(self,liste):
+ #print ('ajoutNValeur plusieursBase')
+ #----------------------------
+ # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
+ # car alors le temps de verification devient prohibitif reconstructu=ion et verification a
+ # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
+
+
listeFormatee=list(liste)
min,max=self.node.item.getMinMax()
if self.objSimp.valeur == None : listeComplete=listeFormatee
else : listeComplete =self.objSimp.valeur + listeFormatee
- if len(listeComplete) > max :
- texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
- self.editor.afficheInfos(texte,Qt.red)
- return
+ if len(listeComplete) > max :
+ texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
+ self.editor.afficheInfos(texte,Qt.red)
+ return
validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete)
- if not validite :
- self.editor.affiche_infos(texte,Qt.red)
- return
+ if not validite :
+ self.editor.affiche_infos(texte,Qt.red)
+ return
# on calcule le dernier lineedit rempli avant de changer la valeur
if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
indexDernierRempli=0
while ( indexDernierRempli < len(liste) ) :
- texte=liste[indexDernierRempli]
- if indexDernierRempli < self.indexDernierLabel:
- nomLineEdit="lineEditVal"+str(indexDernierRempli+1)
+ texte=liste[indexDernierRempli]
+ if indexDernierRempli < self.indexDernierLabel:
+ nomLineEdit="lineEditVal"+str(indexDernierRempli+1)
+ courant=getattr(self,nomLineEdit)
+ courant.setText(str(texte))
+ else :
+ self.ajoutLineEdit(texte)
+ indexDernierRempli = indexDernierRempli + 1
+
+
+ def changeValeur(self,changeDePlace=True,oblige=False):
+ #print ('achangeValeur plusieursBase', self)
+ #import traceback
+ #traceback.print_stack()
+ if self.inhibeChangeValeur : return
+ self.inhibeChangeValeur = True
+ donneFocus=None
+ derniereValeur=None
+ self.listeValeursCourantes = []
+ fin=self.indexDernierLabel
+ if (not('TXM' in self.objSimp.definition.type)) and not (self.dejaAverti):
+ for i in range (1, fin):
+ nomLineEdit="lineEditVal"+str(i)
+ courant=getattr(self,nomLineEdit)
+ valeur=courant.text()
+ lval=valeur.split(',')
+ if len (lval) > 1 :
+ self.dejaAverti = True
+ QMessageBox.warning(self,tr('"," used'), 'Perhaps, character "," is used in ' +str( valeur) + 'intead of "."')
+ break
+ # msgBox = QMessageBox()
+ # msgBox.setText("separator ',' ")
+ # msgBox.setInformativeText("Do you want to enter " + str (lval) + "?")
+ # msgBox.setInformativeText (" you want to enter " + str (lval) + "?")
+ # msgBox.setStandardButtons( QMessageBox.Ok | QMessageBox.Cancel)
+ # msgBox.setDefaultButton(QMessageBox.Ok)
+ #ret = msgBox.exec()
+ # tres dicutable 20210401 j enleve la boucle
+ # if faut remtrre self.inhibeChangeValeur si on la reactive
+ # if ret == 1024:
+ # courant.setText(lval[0])
+ # self.ajoutNValeur(lval[1:])
+ # self.listeValeursCourantes = []
+
+
+ for i in range (1, self.indexDernierLabel+1):
+ nomLineEdit="lineEditVal"+str(i)
courant=getattr(self,nomLineEdit)
- courant.setText(str(texte))
- else :
- self.ajoutLineEdit(texte)
- indexDernierRempli = indexDernierRempli + 1
-
-
- def changeValeur(self,changeDePlace=True,oblige=False):
- donneFocus=None
- derniereValeur=None
- self.listeValeursCourantes = []
- fin=self.indexDernierLabel
- for i in range (1, fin):
- nomLineEdit="lineEditVal"+str(i)
- courant=getattr(self,nomLineEdit)
- valeur=courant.text()
- lval=valeur.split(',')
- if len (lval) > 1 :
- msgBox=QMessageBox()
- msgBox.setText("separator ',' ")
- msgBox.setInformativeText("Do you want to enter " + str (lval) + "?")
- msgBox.setStandardButtons( QMessageBox.Ok | QMessageBox.Cancel)
- msgBox.setDefaultButton(QMessageBox.Ok)
- ret = msgBox.exec_()
- if ret != 1024 :
- courant.setText("")
- return
- courant.setText(lval[0])
- self.ajoutNValeur(lval[1:])
- self.listeValeursCourantes = []
-
- for i in range (1, self.indexDernierLabel+1):
- nomLineEdit="lineEditVal"+str(i)
- courant=getattr(self,nomLineEdit)
- valeur=courant.text()
- if valeur != None and valeur != "" :
- commentaire=self.ajout1Valeur(valeur)
- if (commentaire != None ):
- self.editor.afficheInfos(commentaire,Qt.red)
- courant.setText("")
- donneFocus=courant
- self.reaffiche()
- return
- else :
- self.editor.afficheInfos("")
- elif donneFocus==None : donneFocus=courant
-
- nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
- dernier=getattr(self,nomDernierLineEdit)
- derniereValeur=dernier.text()
- if changeDePlace:
- if donneFocus != None :
- donneFocus.setFocus()
- self.scrollArea.ensureWidgetVisible(donneFocus)
- elif self.indexDernierLabel < self.monSimpDef.max :
- self.ajoutLineEdit()
- if self.listeValeursCourantes == [] : return
- min,max = self.node.item.getMinMax()
- if len(self.listeValeursCourantes) < self.monSimpDef.min :
- self.editor.afficheInfos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
- if len(self.listeValeursCourantes) < min and oblige==True: return
- if len(self.listeValeursCourantes) > max : return
- retour=self.node.item.setValeur(self.listeValeursCourantes)
- if len(self.listeValeursCourantes) == self.monSimpDef.max :
- self.editor.afficheInfos(tr('nb max de valeurs atteint'))
- self.setValide()
- self.reaffiche()
-
- def leaveEventScrollArea(self,event):
- self.changeValeur(changeDePlace=False)
- QScrollArea.leaveEvent(self.scrollArea,event)
+ valeur=courant.text()
+ if valeur != None and valeur != "" :
+ commentaire=self.ajout1Valeur(valeur)
+ if (commentaire != None ):
+ self.editor.afficheInfos(commentaire,Qt.red)
+ courant.setText("")
+ donneFocus=courant
+ self.reaffiche()
+ return
+ else :
+ self.editor.afficheInfos("")
+ elif donneFocus==None : donneFocus=courant
+
+ nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
+ dernier=getattr(self,nomDernierLineEdit)
+ derniereValeur=dernier.text()
+ if changeDePlace:
+ if donneFocus != None :
+ donneFocus.setFocus()
+ self.scrollArea.ensureWidgetVisible(donneFocus)
+ elif self.indexDernierLabel < self.monSimpDef.max :
+ self.ajoutLineEdit()
+ if self.listeValeursCourantes == [] : return
+ min,max = self.node.item.getMinMax()
+ if len(self.listeValeursCourantes) < self.monSimpDef.min :
+ self.editor.afficheInfos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
+ if len(self.listeValeursCourantes) < min and oblige==True: return
+ if len(self.listeValeursCourantes) > max : return
+ retour=self.node.item.setValeur(self.listeValeursCourantes)
+ if len(self.listeValeursCourantes) == self.monSimpDef.max :
+ self.editor.afficheInfos(tr('nb max de valeurs atteint'))
+ self.setValide()
+ self.reaffiche()
+ self.inhibeChangeValeur = False
+
+ def leaveEventScrollArea(self,event):
+ #print ('achangeValeur plusieursBase')
+ self.changeValeur(changeDePlace=False)
+ QScrollArea.leaveEvent(self.scrollArea,event)
# Avertissement quand on quitte le widget
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2020 EDF R&D
+#
+# 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.
+#
+# 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
+#
+# Modules Python
+from __future__ import absolute_import
+import types,os
+
+
+# Modules Eficas
+from Extensions.i18n import tr
+from .monWidgetSimpTxt import MonWidgetSimpTxt
+from .monWidgetPlusieursBase import MonWidgetPlusieursBase
+from copy import copy,deepcopy
+from PyQt5.QtCore import Qt
+
+
+
+class MonWidgetPlusieursCreeUserAssd ( MonWidgetPlusieursBase):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ MonWidgetPlusieursBase. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+ self.etablitOrdre()
+ self.scrollArea.leaveEvent = self.leaveEventScrollArea
+ self.RBHaut.close()
+ self.RBBas.close()
+
+ def ajout1Valeur(self,valeur=None):
+ if not valeur in list(self.dictValeurs.keys()):
+ validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeur)
+ MonWidgetPlusieursBase.ajout1Valeur(self,valeur)
+
+ def changeValeur(self,changeDePlace=False,oblige=False ):
+ #print ('dans changeValeur du CreeUserAssd', changeDePlace, self.numLineEditEnCours)
+ #import traceback
+ #traceback.print_stack()
+ self.changeUnLineEdit=False
+ valeur = self.lineEditEnCours.text()
+ if self.numLineEditEnCours in list(self.dictLE.keys()) :
+ oldValeurUserAssd = self.dictLE[self.numLineEditEnCours]
+ if oldValeurUserAssd == None or oldValeurUserAssd == "" :
+ enCreation = True
+ oldValeurUserAssd == True
+ else : enCreation = False
+ else :
+ enCreation = True
+ oldValeurUserAssd = None
+
+ if oldValeurUserAssd and oldValeurUserAssd.nom == valeur :
+ self.selectionneNext()
+ return
+
+ if valeur != "" :
+ if not enCreation :
+ validite, commentaire=self.node.item.renommeSdCreeDsListe(oldValeurUserAssd,valeur)
+ if commentaire != "" and not validite:
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.lineEditEnCours.setText(oldValeurUserAssd.nom)
+ nomDernierLineEdit="lineEditVal"+str(self.numLineEditEnCours+1)
+ dernier=getattr(self,nomDernierLineEdit)
+ dernier.setFocus()
+ return
+
+ validite, objASSD, commentaire=self.objSimp.creeUserASSD(valeur)
+ if commentaire != "" and not validite:
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.lineEditEnCours.setText("")
+ if objASSD : objASSD.supprime(self.objSimp)
+ return
+ else:
+ validite = 1
+ objASSD=None
+ commentaire = ""
+
+ # on relit tout pour tenir compte des lignes blanches
+ oldValeur=self.objSimp.valeur
+ liste=[]
+ for i in range (1, self.indexDernierLabel+1):
+ if i == self.numLineEditEnCours and objASSD : liste.append(objASSD)
+ elif self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+ validite=self.node.item.setValeur(liste)
+ if not validite :
+ self.objSimp.valeur=oldValeur
+ self.objSimp.state='changed'
+ self.setValide()
+ if objASSD : objASSD.supprime(self.objSimp)
+ self.lineEditEnCours.setText(oldValeurUserASSD.nom)
+ return
+
+ validite=self.node.item.isValid()
+ if validite :
+ self.dictLE[self.numLineEditEnCours] = objASSD
+ self.node.item.rattacheUserASSD(objASSD)
+ if self.indexDernierLabel < len(liste) : self.ajoutLineEdit()
+ nomDernierLineEdit="lineEditVal"+str(self.numLineEditEnCours+1)
+ self.listeValeursCourantes=liste
+ dernier=getattr(self,nomDernierLineEdit)
+ dernier.setFocus()
+ else :
+ self.editor.afficheInfos('ajout impossible' ,Qt.red)
+ if objASSD : objASSD.supprime(self.objSimp)
+ self.lineEditEnCours.setText("")
+ self.parentQt.propageChange(self.objSimp.definition.type[0],self)
+
+ def selectionneDernier(self):
+ index=len(self.listeValeursCourantes)
+ self.listeAffichageWidget[index].setFocus()
+
+ def leaveEventScrollArea(self,event):
+ pass
+
+# def echangeDeuxValeurs(self):
+# self.changeUnLineEdit=False
+# obj1=self.dictLE[self.num1]
+# obj2=self.dictLE[self.num2]
+# self.dictLE[self.num1]=obj2
+# self.dictLE[self.num2]=obj1
+# nomLineEdit=self.nomLine+str(self.num1)
+# courant=getattr(self,nomLineEdit)
+# if self.dictLE[self.num1] != None : courant.setText(self.dictLE[self.num1].nom)
+# else : courant.setText("")
+# nomLineEdit=self.nomLine+str(self.num2)
+# courant=getattr(self,nomLineEdit)
+# if self.dictLE[self.num2] != None : courant.setText(self.dictLE[self.num2].nom)
+# else : courant.setText("")
+# liste=[]
+# for i in list(self.dictLE.keys()):
+# if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+# validite=self.node.item.setValeur(liste)
+# self.listeValeursCourantes=liste
+# courant.setFocus(True)
+
+ def descendLesLignes(self):
+ self.changeUnLineEdit=False
+ if self.numLineEditEnCours==self.indexDernierLabel : return
+ nouvelleValeur=None
+ for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
+ valeurAGarder=self.dictLE[i]
+ self.dictLE[i]=nouvelleValeur
+ nomLineEdit=self.nomLine+str(i)
+ courant=getattr(self,nomLineEdit)
+ if nouvelleValeur != None : courant.setText(nouvelleValeur.nom)
+ else : courant.setText("")
+ nouvelleValeur=valeurAGarder
+
+
+ def moinsPushed(self):
+ if self.numLineEditEnCours == 0 : return
+ if self.indexDernierLabel == 0 : return
+ objASSD=self.dictLE[self.numLineEditEnCours]
+ if objASSD : objASSD.supprime(self.objSimp)
+ self.lineEditEnCours.setText("")
+ self.dictLE[self.numLineEditEnCours]=None
+
+ for i in range (self.numLineEditEnCours, self.indexDernierLabel-1):
+ self.dictLE[i]= self.dictLE[i+1]
+ nomLineEdit=self.nomLine+str(i)
+ courant=getattr(self,nomLineEdit)
+ if self.dictLE[i] != None : courant.setText(self.dictLE[i].nom)
+ else : courant.setText("")
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+ courant=getattr(self,nomLineEdit)
+ courant.setText("")
+ self.dictLE[self.indexDernierLabel]=None
+ liste=[]
+ for i in list(self.dictLE.keys()):
+ if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+ print (liste)
+ validite=self.node.item.setValeur(liste)
+ self.listeValeursCourantes=liste
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,os
class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.index=1
self.alpha=0
if len(self.listeAAfficher) < 30 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
if len(self.listeAAfficher) == len(self.listeValeursCourantes) : self.CBCheck.setChecked(True)
+ if len(self.listeAAfficher) < 10 :
+ self.setMinimumHeight(len(self.listeAAfficher)*22+55)
+ else :
+ self.setMinimumHeight(300)
+
# try except si la liste des possibles est vide
# prevoir qqchose
try :
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
+ self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
except :
- pass
-
-
- def changeTout(self,int):
- #print ('changeTout')
- if self.inhibe : return
- self.inhibe=True
- if not(self.CBCheck.isChecked()) :
- min,max = self.node.item.getMinMax()
- if max < len(self.listeAAfficher) :
- commentaire=tr('impossible de tout selectionner : max =')+str(max)
- self.editor.afficheInfos(commentaire,Qt.red)
- self.inhibe=False
- return
- for i in range(len(self.listeAAfficher)):
- nomCB="lineEditVal"+str(i+1)
- courant=getattr(self,nomCB)
- courant.setChecked(True)
- self.CBCheck.setChecked(False)
- else :
- for i in range(len(self.listeAAfficher)):
- nomCB="lineEditVal"+str(i+1)
- courant=getattr(self,nomCB)
- courant.setChecked(False)
- self.CBCheck.setChecked(True)
- self.inhibe=False
- self.changeValeur()
-
- def setValeurs(self):
- #print ('setValeurs')
- self.listeValeursCourantes =self.node.item.getValeur()
- if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
- #print "ds set Valeur", self.listeValeursCourantes, self.node.item.getValeur()
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- self.vScrollBar = self.scrollArea.verticalScrollBar()
-
- if hasattr(self.node.item.definition.validators,'set_MCSimp'):
+ pass
+
+
+ def changeTout(self,int):
+ #print ('changeTout')
+ if self.inhibe : return
+ self.inhibe=True
+ if not(self.CBCheck.isChecked()) :
+ min,max = self.node.item.getMinMax()
+ if max < len(self.listeAAfficher) :
+ commentaire=tr('impossible de tout selectionner : max =')+str(max)
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.inhibe=False
+ return
+ for i in range(len(self.listeAAfficher)):
+ nomCB="lineEditVal"+str(i+1)
+ courant=getattr(self,nomCB)
+ courant.setChecked(True)
+ self.CBCheck.setChecked(False)
+ else :
+ for i in range(len(self.listeAAfficher)):
+ nomCB="lineEditVal"+str(i+1)
+ courant=getattr(self,nomCB)
+ courant.setChecked(False)
+ self.CBCheck.setChecked(True)
+ self.inhibe=False
+ self.changeValeur()
+
+ def setValeurs(self):
+ #print ('setValeurs')
+ self.listeValeursCourantes =self.node.item.getValeur()
+ if self.listeValeursCourantes == None : self.listeValeursCourantes=[]
+ #print ("ds set Valeur", self.listeValeursCourantes, self.node.item.getValeur())
+ self.politique=PolitiquePlusieurs(self.node,self.editor)
+ self.vScrollBar = self.scrollArea.verticalScrollBar()
+
+ if hasattr(self.node.item.definition.validators,'set_MCSimp'):
obj=self.node.item.getObject()
self.node.item.definition.validators.set_MCSimp(obj)
if self.node.item.isValid() == 0 :
- liste=[]
- for item in self.listeValeursCourantes:
- if self.node.item.definition.validators.verifItem(item)==1:
- liste.append(item)
- self.listeAAfficher=self.node.item.getListePossible(liste)
+ liste=[]
+ for item in self.listeValeursCourantes:
+ if self.node.item.definition.validators.verifItem(item)==1:
+ liste.append(item)
+ self.listeAAfficher=self.node.item.getListePossible(liste)
else:
- self.listeAAfficher=self.node.item.getListePossible([])
- else :
- self.listeAAfficher=self.node.item.getListePossible([])
-
- if self.node.item.hasIntoSug() : self.listeAAfficher=self.node.item.getListePossibleAvecSug([])
-
-
- if self.objSimp.waitAssd() :
- self.listeAAfficher=self.node.item.getSdAvantDuBonType()
- if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
+ self.listeAAfficher=self.node.item.getListePossible([])
+ else :
+ self.listeAAfficher=self.node.item.getListePossible([])
- #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
- #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
+ if self.node.item.hasIntoSug() : self.listeAAfficher=self.node.item.getListePossibleAvecSug([])
- self.PourEtreCoche=[]
- if self.objSimp.waitAssd() :
- for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
- else :
- for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
- maListe=[]
- for i in self.listeAAfficher: maListe.append(i)
- if self.alpha==1 : maListe.sort()
- for i in range(1,len(maListe)+1): self.ajoutCB(i)
+ if self.objSimp.waitAssd() :
+ self.listeAAfficher=self.node.item.getSdAvantDuBonType()
+ if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[]
- self.inhibe=True
- for i in range(len(maListe)):
- nomCB="lineEditVal"+str(i+1)
- courant=getattr(self,nomCB)
- courant.setText(str(maListe[i]))
- if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
- else : courant.setChecked(False)
+ #if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
+ #else : self.setMinimumHeight(len(self.listeAAfficher)*30)
- courant.toggled.connect(self.changeValeur)
- self.inhibe=False
+ self.PourEtreCoche=[]
+ if self.objSimp.waitUserAssd() :
+ for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept)
+ elif self.objSimp.waitAssd() :
+ for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom)
+ else :
+ for val in self.listeValeursCourantes: self.PourEtreCoche.append(val)
+
+ maListe=[]
+ for i in self.listeAAfficher: maListe.append(i)
+ if self.alpha==1 : maListe.sort()
+ for i in range(1,len(maListe)+1): self.ajoutCB(i)
+
+ self.inhibe=True
+ for i in range(len(maListe)):
+ nomCB="lineEditVal"+str(i+1)
+ courant=getattr(self,nomCB)
+ courant.setText(str(maListe[i]))
+ if maListe[i] in self.PourEtreCoche : courant.setChecked(True)
+ else : courant.setChecked(False)
+
+ courant.toggled.connect(self.changeValeur)
+ self.inhibe=False
- self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
+ self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
- def ajoutCB(self,index,valeur=None):
- #print ('ajoutCB')
- nomCB="lineEditVal"+str(index)
- if hasattr(self,nomCB) : return
- nouveauCB = QCheckBox(self.scrollArea)
- self.CBLayout.insertWidget(index-1,nouveauCB)
- self.listeCB.append(nouveauCB)
- nouveauCB.setText("")
- if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
- else : nouveauCB.setStyleSheet("background:rgb(240,240,240)")
- self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
- nouveauCB.setFocus()
- setattr(self,nomCB,nouveauCB)
+ def ajoutCB(self,index,valeur=None):
+ #print ('ajoutCB')
+ nomCB="lineEditVal"+str(index)
+ if hasattr(self,nomCB) : return
+ nouveauCB = QCheckBox(self.scrollArea)
+ self.CBLayout.insertWidget(index-1,nouveauCB)
+ self.listeCB.append(nouveauCB)
+ nouveauCB.setText("")
+ if index % 2 == 1 : nouveauCB.setStyleSheet("background:rgb(210,210,210)")
+ else : nouveauCB.setStyleSheet("background:rgb(240,240,240)")
+ self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
+ nouveauCB.setFocus()
+ setattr(self,nomCB,nouveauCB)
- def ajout1Valeur(self,valeur=None):
+ def ajout1Valeur(self,valeur=None):
#print ('ajout1Valeur')
if valeur == None : return
liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
if (comm2 != "" and comm != None) : return comm2
if validite :
- self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
- return None
+ self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
+ return None
else :
- return(comm2+" "+comm)
-
-
-
- def changeValeur(self):
- #def changeValeur(self,changeDePlace=False,oblige=True, numero=None):
- #print ('changeValeur')
- if self.inhibe == True: return
- if hasattr(self,'LEFiltre') :self.noircirResultatFiltre()
- self.listeValeursCourantesAvant=self.listeValeursCourantes
- self.listeValeursCourantes = []
-
- for i in range (1,len(self.listeAAfficher)+1):
- nomLineEdit="lineEditVal"+str(i)
- courant=getattr(self,nomLineEdit)
- if not (courant.isChecked()):continue
- valeur=courant.text()
- if valeur != None and valeur != "" :
- commentaire=self.ajout1Valeur(valeur)
- if (commentaire != None ):
- self.editor.afficheInfos(commentaire,Qt.red)
- self.listeValeursCourantesAvant=self.listeValeursCourantes
- self.setValeurs()
-
- min,max = self.node.item.getMinMax()
- if len(self.listeValeursCourantes) < min :
- self.editor.afficheInfos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
- elif len(self.listeValeursCourantes) > max :
- self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
-
- if self.listeValeursCourantes== [] : self.node.item.setValeur([])
- else : self.node.item.setValeur(self.listeValeursCourantes)
-
- # Exception pour PSEN
- if min==0 and self.listeValeursCourantes== []: self.node.item.setValeur([])
- self.setValide()
-
-
- def prepareListeResultatFiltre(self):
- #print ('prepareListeResultatFiltre')
- filtre=str(self.LEFiltre.text())
- for cb in self.listeCB:
- texte=cb.text()
- if texte.find(filtre) == 0 :
- palette = QPalette(Qt.red)
- palette.setColor(QPalette.WindowText,Qt.red)
- cb.setPalette(palette)
- t=cb.text()
- cb.setText(t)
- self.listeCbRouge.append(cb)
-
- def prepareListeResultat(self):
- #print ('prepareListeResultat')
- self.clearAll()
- self.setValeurs()
-
- def clearAll(self):
- #print ('clearAll')
- for cb in self.listeCB :
- cb.setText("")
-
-
+ return(comm2+" "+comm)
+
+
+
+ def changeValeur(self):
+ #def changeValeur(self,changeDePlace=False,oblige=True, numero=None):
+ #print ('changeValeur')
+ if self.inhibe == True: return
+ if hasattr(self,'LEFiltre') :self.noircirResultatFiltre()
+ self.listeValeursCourantesAvant=self.listeValeursCourantes
+ self.listeValeursCourantes = []
+
+ for i in range (1,len(self.listeAAfficher)+1):
+ nomLineEdit="lineEditVal"+str(i)
+ courant=getattr(self,nomLineEdit)
+ if not (courant.isChecked()):continue
+ valeur=courant.text()
+ if valeur != None and valeur != "" :
+ commentaire=self.ajout1Valeur(valeur)
+ if (commentaire != None ):
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.listeValeursCourantesAvant=self.listeValeursCourantes
+ self.setValeurs()
+
+ min,max = self.node.item.getMinMax()
+ if len(self.listeValeursCourantes) < min :
+ self.editor.afficheInfos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
+ elif len(self.listeValeursCourantes) > max :
+ self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
+
+ if self.listeValeursCourantes== [] : self.node.item.setValeur([])
+ else : self.node.item.setValeur(self.listeValeursCourantes)
+
+ # Exception pour PSEN
+ if min==0 and self.listeValeursCourantes== []: self.node.item.setValeur([])
+ self.setValide()
+
+
+ def prepareListeResultatFiltre(self):
+ #print ('prepareListeResultatFiltre')
+ filtre=str(self.LEFiltre.text())
+ for cb in self.listeCB:
+ texte=cb.text()
+ if texte.find(filtre) == 0 :
+ palette = QPalette(Qt.red)
+ palette.setColor(QPalette.WindowText,Qt.red)
+ cb.setPalette(palette)
+ t=cb.text()
+ cb.setText(t)
+ self.listeCbRouge.append(cb)
+
+ def prepareListeResultat(self):
+ #print ('prepareListeResultat')
+ self.clearAll()
+ self.setValeurs()
+
+ def clearAll(self):
+ #print ('clearAll')
+ for cb in self.listeCB :
+ cb.setText("")
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,os,sys
# Modules Eficas
from .feuille import Feuille
-from desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne
+from desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne
from .politiquesValidation import PolitiquePlusieurs
from .qtSaisie import SaisieValeur
from .gereListe import GereListe
class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe,GerePlie):
- def __init__(self,node,monSimpDef,nom,objSimp,parent,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parent,commande):
self.nomLine="LEResultat"
self.listeLE=[]
self.ouAjouter=0
self.gereIconePlier()
self.listeValeursCourantes=self.node.item.getListeValeurs()
try :
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
+ self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
except :
- # cas ou on ne peut rien ajouter
- pass
+ # cas ou on ne peut rien ajouter
+ pass
self.prepareListeResultat()
if len(self.listeAAfficher) < 20 : self.frameRecherche2.close()
if len(self.listeAAfficher) < 20 : self.frameRecherche.close()
self.adjustSize()
- if sys.platform[0:5]!="linux":
- repIcon=self.node.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'arrow_up.png')
- icon = QIcon(fichier)
- self.RBHaut.setIcon(icon)
- self.RBHaut.setIconSize(QSize(32, 32))
- fichier2=os.path.join(repIcon, 'arrow_down.png')
- icon2 = QIcon(fichier2)
- self.RBBas.setIcon(icon2)
+ #if sys.platform[0:5]!="linux":
+ repIcon=self.node.editor.appliEficas.repIcon
+ fichier=os.path.join(repIcon, 'arrow_up.png')
+ icon = QIcon(fichier)
+ self.RBHaut.setIcon(icon)
+ self.RBHaut.setIconSize(QSize(32, 32))
+ fichier2=os.path.join(repIcon, 'arrow_down.png')
+ icon2 = QIcon(fichier2)
+ self.RBBas.setIcon(icon2)
icon=QIcon(self.repIcon+"/MoinsBleu.png")
self.RBMoins.setIcon(icon)
icon=QIcon(self.repIcon+"/PlusBleu.png")
self.parentQt.commandesLayout.insertWidget(-1,self)
self.listeRouge=[]
-
- def prepareListeResultat(self):
- for i in self.listeLE: i.close()
- self.listeLE=[]
- self.vScrollBar = self.scrollArea.verticalScrollBar()
- self.listeValeursCourantes=self.node.item.getListeValeurs()
- if hasattr(self.node.item.definition.validators,'set_MCSimp'):
+
+ def prepareListeResultat(self):
+ for i in self.listeLE: i.close()
+ self.listeLE=[]
+ self.vScrollBar = self.scrollArea.verticalScrollBar()
+ self.listeValeursCourantes=self.node.item.getListeValeurs()
+ if hasattr(self.node.item.definition.validators,'set_MCSimp'):
obj=self.node.item.getObject()
self.node.item.definition.validators.set_MCSimp(obj)
if self.node.item.isValid() == 0 :
- liste=[]
- for item in self.listeValeursCourantes:
- if self.node.item.definition.validators.verifItem(item)==1: liste.append(item)
- self.listeAAfficher=self.node.item.getListePossible(liste)
- else:
- self.listeAAfficher=self.node.item.getListePossible([])
- else :
+ liste=[]
+ for item in self.listeValeursCourantes:
+ if self.node.item.definition.validators.verifItem(item)==1: liste.append(item)
+ self.listeAAfficher=self.node.item.getListePossible(liste)
+ else:
+ self.listeAAfficher=self.node.item.getListePossible([])
+ else :
self.listeAAfficher=self.node.item.getListePossible(self.listeValeursCourantes)
- if self.listeAAfficher==[] :
- self.ajoutLE(0)
- return
- self.filtreListe()
- if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
- else : self.setMinimumHeight(len(self.listeAAfficher)*30)
+ if self.listeAAfficher==[] :
+ self.ajoutLE(0)
+ return
+ self.filtreListe()
+ if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
+ else :
+ if self.monSimpDef.min > len(self.listeAAfficher) : self.setMinimumHeight(self.monSimpDef.min*30+300)
+ elif self.monSimpDef.max > len(self.listeAAfficher) : self.setMinimumHeight(400)
+ else : self.setMinimumHeight(len(self.listeAAfficher)*30+30)
+ self.setMinimumHeight(300)
+ self.adjustSize()
+
+ self.politique=PolitiquePlusieurs(self.node,self.editor)
+ for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
+ for i in range(len(self.listeAAfficher)):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ courant.setText(str(self.listeAAfficher[i]))
+ self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
+ if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
+ if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche2') : self.frameRecherche2.close()
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
- for i in range(len(self.listeAAfficher)):
- nomLE="lineEditVal"+str(i+1)
- courant=getattr(self,nomLE)
- courant.setText(str(self.listeAAfficher[i]))
- self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
- if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche') : self.frameRecherche.close()
- if len(self.listeAAfficher) < 15 and hasattr(self,'frameRecherche2') : self.frameRecherche2.close()
-
-
- def setValeurs(self,first=True):
- self.listeValeursCourantes=self.node.item.getListeValeurs()
- if first :
- if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
- else : aConstruire=self.monSimpDef.max
- if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
- self.indexDernierLabel = aConstruire
- for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
- index=1
- for val in self.listeValeursCourantes :
- nomLE="LEResultat"+str(index)
- courant=getattr(self,nomLE)
- courant.setText(str(val))
- courant.setReadOnly(True)
- index=index+1
- while (index < self.indexDernierLabel) :
- nomLE="LEResultat"+str(index)
- courant=getattr(self,nomLE)
- courant.setText("")
- courant.setReadOnly(True)
- index=index+1
- #self.prepareListeResultat()
- def moinsPushed(self):
- self.ouAjouter=self.ouAjouter-1
- GereListe.moinsPushed(self)
- self.setValeurs(first=False)
+ def setValeurs(self,first=True):
+ self.listeValeursCourantes=self.node.item.getListeValeurs()
+ if first :
+ if self.monSimpDef.max == "**" or self.monSimpDef.max == float('inf') : aConstruire=7
+ else : aConstruire=self.monSimpDef.max
+ if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes)
+ self.indexDernierLabel = aConstruire
+ for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
+ index=1
+ for val in self.listeValeursCourantes :
+ nomLE="LEResultat"+str(index)
+ courant=getattr(self,nomLE)
+ courant.setText(str(val))
+ courant.setReadOnly(True)
+ index=index+1
+ while (index < self.indexDernierLabel) :
+ nomLE="LEResultat"+str(index)
+ courant=getattr(self,nomLE)
+ courant.setText("")
+ courant.setReadOnly(True)
+ index=index+1
+ #self.prepareListeResultat()
+
+ def moinsPushed(self):
+ self.ouAjouter=self.ouAjouter-1
+ GereListe.moinsPushed(self)
+ self.setValeurs(first=False)
- def prepareListeResultatFiltre(self):
- for i in self.listeRouge :
- nomLE="lineEditVal"+str(i+1)
- courant=getattr(self,nomLE)
- texte=courant.text()
- palette = QPalette(Qt.black)
- palette.setColor(QPalette.WindowText,Qt.black)
- courant.setPalette(palette)
- courant.setText(texte)
-
- self.listeRouge = []
- filtre=str(self.LEFiltre.text())
- if filtre == '' : return
- for i in range(len(self.listeAAfficher)):
- nomLE="lineEditVal"+str(i+1)
- courant=getattr(self,nomLE)
- texte=courant.text()
- if texte.find(filtre) == 0 :
- palette = QPalette(Qt.red)
- palette.setColor(QPalette.WindowText,Qt.red)
- courant.setPalette(palette)
- courant.setText(texte)
- self.listeRouge.append(i)
+ def prepareListeResultatFiltre(self):
+ for i in self.listeRouge :
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ texte=courant.text()
+ palette = QPalette(Qt.black)
+ palette.setColor(QPalette.WindowText,Qt.black)
+ courant.setPalette(palette)
+ courant.setText(texte)
- def cleanListeResultatFiltre(self):
- self.LEFiltre.setText('')
- self.prepareListeResultatFiltre()
+ self.listeRouge = []
+ filtre=str(self.LEFiltre.text())
+ if filtre == '' : return
+ for i in range(len(self.listeAAfficher)):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ texte=courant.text()
+ if texte.find(filtre) == 0 :
+ palette = QPalette(Qt.red)
+ palette.setColor(QPalette.WindowText,Qt.red)
+ courant.setPalette(palette)
+ courant.setText(texte)
+ self.listeRouge.append(i)
- def ajoutLEResultat (self,index,valeur=None):
- #print ('ajoutLEResultat', index, valeur)
- nomLE="LEResultat"+str(index)
- if not (hasattr(self,nomLE)) :
- nouveauLE = LECustom(self.scrollAreaRE,self,index)
- nouveauLE.setFrame(False)
- self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
- self.ouAjouter=self.ouAjouter+1
- nouveauLE.setReadOnly(True)
+ def cleanListeResultatFiltre(self):
+ self.LEFiltre.setText('')
+ self.prepareListeResultatFiltre()
+
+ def ajoutLEResultat (self,index,valeur=None):
+ #print ('ajoutLEResultat', index, valeur)
+ nomLE="LEResultat"+str(index)
+ if not (hasattr(self,nomLE)) :
+ nouveauLE = LECustom(self.scrollAreaRE,self,index)
+ nouveauLE.setFrame(False)
+ self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
+ self.ouAjouter=self.ouAjouter+1
+ nouveauLE.setReadOnly(True)
+ if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
+ else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
+ self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
+ self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
+ setattr(self,nomLE,nouveauLE)
+ self.estVisibleRE=nouveauLE
+ else :
+ nouveauLE=getattr(self,nomLE)
+
+ if valeur == None : nouveauLE.setText("")
+ else : nouveauLE.setText(str(valeur))
+
+ def ajoutLE(self,index,valeur=None):
+ #print ('ajoutLE')
+ nomLE="lineEditVal"+str(index)
+ nouveauLE = MonLabelListeClic(self)
+ #self.CBLayout.addWidget(nouveauLE)
+ self.CBLayout.insertWidget(index -1,nouveauLE)
+ self.listeLE.append(nouveauLE)
+ nouveauLE.setFrameShape(QFrame.NoFrame)
+ QApplication.processEvents()
+ nouveauLE.setText("")
if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
- else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
- self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
- self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
+ else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
+ self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
+ nouveauLE.setFocus()
setattr(self,nomLE,nouveauLE)
- self.estVisibleRE=nouveauLE
- else :
- nouveauLE=getattr(self,nomLE)
- if valeur == None : nouveauLE.setText("")
- else : nouveauLE.setText(str(valeur))
-
- def ajoutLE(self,index,valeur=None):
- #print ('ajoutLE')
- nomLE="lineEditVal"+str(index)
- nouveauLE = MonLabelListeClic(self)
- #self.CBLayout.addWidget(nouveauLE)
- self.CBLayout.insertWidget(index -1,nouveauLE)
- self.listeLE.append(nouveauLE)
- nouveauLE.setFrameShape(QFrame.NoFrame)
- QApplication.processEvents()
- nouveauLE.setText("")
- if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
- else : nouveauLE.setStyleSheet("background:rgb(240,240,240)")
- self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
- nouveauLE.setFocus()
- setattr(self,nomLE,nouveauLE)
-
- def ajoutLineEdit(self):
- #print ('ajoutLineEdit')
- self.indexDernierLabel=self.indexDernierLabel+1
- self.ajoutLEResultat (self.indexDernierLabel)
+ def ajoutLineEdit(self):
+ #print ('ajoutLineEdit')
+ self.indexDernierLabel=self.indexDernierLabel+1
+ self.ajoutLEResultat (self.indexDernierLabel)
- def traiteClicSurLabelListe(self,valeur):
+ def traiteClicSurLabelListe(self,valeur):
if valeur == None : return
liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
if validite == 0 : return
self.listeValeursCourantes=self.node.item.getListeValeurs()
min,max = self.node.item.getMinMax()
- if len(self.listeValeursCourantes) +1 > max :
- self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
- return
+ if len(self.listeValeursCourantes) +1 > max :
+ self.editor.afficheInfos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
+ return
else :
- self.editor.afficheInfos("")
+ self.editor.afficheInfos("")
affiche=False
for i in range(1,self.indexDernierLabel+1):
- nomLE="LEResultat"+str(i)
- courant=getattr(self,nomLE)
- if str(courant.text())==str("") :
- courant.setText(valeur)
- courant.setReadOnly(True)
- affiche=True
- self.estVisibleRE=courant
- QTimer.singleShot(1, self.rendVisibleLigneRE)
- break
-
+ nomLE="LEResultat"+str(i)
+ courant=getattr(self,nomLE)
+ if str(courant.text())==str("") :
+ courant.setText(valeur)
+ courant.setReadOnly(True)
+ affiche=True
+ self.estVisibleRE=courant
+ QTimer.singleShot(1, self.rendVisibleLigneRE)
+ break
+
if affiche == False:
- self.indexDernierLabel = self.indexDernierLabel+1
- self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
- self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
- QTimer.singleShot(1, self.rendVisibleLigneRE)
+ self.indexDernierLabel = self.indexDernierLabel+1
+ self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
+ self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
+ QTimer.singleShot(1, self.rendVisibleLigneRE)
self.changeValeur()
self.setValeurs(first=False)
- def changeValeur(self,changeDePlace=False,oblige=False):
+ def changeValeur(self,changeDePlace=False,oblige=False):
#def changeValeur(self,changeDePlace=False,oblige=False, numero=None):
#PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
listeVal=[]
for i in range(1,self.indexDernierLabel+1):
- nomLE="LEResultat"+str(i)
- courant=getattr(self,nomLE)
- valeur=courant.text()
- if str(valeur)=="" : continue
- liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
- listeVal.append(str(valeur))
+ nomLE="LEResultat"+str(i)
+ courant=getattr(self,nomLE)
+ valeur=courant.text()
+ if str(valeur)=="" : continue
+ liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
+ listeVal.append(str(valeur))
validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(listeVal,-1,[])
-
+
self.listeValeursCourantes=self.node.item.getListeValeurs()
min,max = self.node.item.getMinMax()
- if len(self.listeValeursCourantes) < min :
- self.editor.afficheInfos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
+ if len(self.listeValeursCourantes) < min :
+ self.editor.afficheInfos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
else :
- self.editor.afficheInfos("")
-
+ self.editor.afficheInfos("")
+
if len(listeRetour) == 0 :
- self.node.item.setValeur(None)
+ self.node.item.setValeur(None)
elif validite :
- self.node.item.setValeur(listeRetour)
+ self.node.item.setValeur(listeRetour)
else :
- commentaire=comm+" "+comm2
- self.editor.afficheInfos(commentaire,Qt.red)
+ commentaire=comm+" "+comm2
+ self.editor.afficheInfos(commentaire,Qt.red)
self.setValide()
+ self.reaffiche()
+
#
- def rendVisibleLigneRE(self):
- QApplication.processEvents()
- self.estVisibleRE.setFocus()
- self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
+ def rendVisibleLigneRE(self):
+ QApplication.processEvents()
+ self.estVisibleRE.setFocus()
+ self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
#
- def rendVisibleLigne(self):
- self.estVisibleRE=self.estVisible
- #rendVisibleLigneRE()
-
-
+ def rendVisibleLigne(self):
+ self.estVisibleRE=self.estVisible
+ #rendVisibleLigneRE()
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os,sys,re
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetPlusieursPlie import Ui_WidgetPlusieursPlie
+from desWidgetPlusieursPlie import Ui_WidgetPlusieursPlie
from .politiquesValidation import PolitiquePlusieurs
from .qtSaisie import SaisieValeur
class MonWidgetPlusieursPlie (Ui_WidgetPlusieursPlie,Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print ("MonWidgetPlusieursBase", nom)
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.parentQt.commandesLayout.insertWidget(-1,self)
self.AAfficher=self.lineEditVal
self.maCommande.listeAffichageWidget.append(self.lineEditVal)
- if self.node.item.hasInto() :
- self.lineEditVal.setReadOnly(True)
- self.lineEditVal.setStyleSheet("background:rgb(235,235,235);\n")
- self.lineEditVal.setToolTip("Ensemble discret de valeurs possibles, pas de Saisie Manuelle")
- #self.lineEditVal.setPen(QtGui.QColor(0,0,200))
- #b=QBrush(Qt.DiagCrossPattern)
- #b.setColor(QColor(255,100,0))
- #self.lineEditVal.setBrush(b)
+ if self.node.item.hasInto() :
+ self.lineEditVal.setReadOnly(True)
+ self.lineEditVal.setStyleSheet("background:rgb(235,235,235);\n")
+ self.lineEditVal.setToolTip("Ensemble discret de valeurs possibles, pas de Saisie Manuelle")
+ #self.lineEditVal.setPen(QtGui.QColor(0,0,200))
+ #b=QBrush(Qt.DiagCrossPattern)
+ #b.setColor(QColor(255,100,0))
+ #self.lineEditVal.setBrush(b)
else :
- self.lineEditVal.returnPressed.connect(self.valeurEntree)
+ self.lineEditVal.returnPressed.connect(self.valeurEntree)
self.BVisuListe.clicked.connect(self.selectWidgetDeplie)
- def setValeurs(self):
- self.listeValeursCourantes=self.node.item.getListeValeurs()
- if self.listeValeursCourantes != [] : self.lineEditVal.setText(str(self.listeValeursCourantes))
- else : self.lineEditVal.setText("")
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- return
-
- def selectWidgetDeplie(self):
- self.editor.listeDesListesOuvertes.add(self.node.item)
- self.reaffichePourDeplier()
-
- def valeurEntree(self):
- valeurTexte=self.lineEditVal.text()
- #print (valeurTexte[0])
- #print (valeurTexte[-1])
- if valeurTexte[0] == '[' or valeurTexte[0] == '(' : valeurTexte = valeurTexte[1:]
- if valeurTexte[-1] == ']' or valeurTexte[-1] == ')' : valeurTexte = valeurTexte[:-1]
- #print (valeurTexte)
- listeValeursBrutes=valeurTexte.split(',')
- if listeValeursBrutes == [] or listeValeursBrutes == None :
- self.lineEditVal.setText(str(self.listeValeursCourantes))
- return
- listeValeur=[]
- for v in listeValeursBrutes:
- if v == None or pattern_blanc.match(v) :
- self.editor.afficheInfos(str(listeValeur)+' Valeurs saisies incorrectes',Qt.red)
- return
- liste,validite=SaisieValeur.TraiteLEValeur(self,str(v))
- if not validite :
- self.editor.afficheInfos(str(listeValeur) +' Valeurs saisies incorrectes',Qt.red)
- return
- listeValeur.append(liste[0])
- validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(listeValeur,-1,[])
- if validite :
- self.node.item.setValeur(listeValeur)
- self.node.item.isValid()
- self.setValeurs()
- else :
- self.editor.afficheInfos(str(listeValeur) + ' ' +comm,Qt.red)
- self.lineEditVal.setText('')
-
+ def setValeurs(self):
+ self.listeValeursCourantes=self.node.item.getListeValeurs()
+ if self.listeValeursCourantes != [] : self.lineEditVal.setText(str(self.listeValeursCourantes))
+ else : self.lineEditVal.setText("")
+ self.politique=PolitiquePlusieurs(self.node,self.editor)
+ return
+
+ def selectWidgetDeplie(self):
+ self.editor.listeDesListesOuvertes.add(self.node.item)
+ self.reaffichePourDeplier()
+
+ def valeurEntree(self):
+ valeurTexte=self.lineEditVal.text()
+ #print (valeurTexte[0])
+ #print (valeurTexte[-1])
+ if valeurTexte[0] == '[' or valeurTexte[0] == '(' : valeurTexte = valeurTexte[1:]
+ if valeurTexte[-1] == ']' or valeurTexte[-1] == ')' : valeurTexte = valeurTexte[:-1]
+ #print (valeurTexte)
+ listeValeursBrutes=valeurTexte.split(',')
+ if listeValeursBrutes == [] or listeValeursBrutes == None :
+ self.lineEditVal.setText(str(self.listeValeursCourantes))
+ return
+ listeValeur=[]
+ for v in listeValeursBrutes:
+ if v == None or pattern_blanc.match(v) :
+ self.editor.afficheInfos(str(listeValeur)+' Valeurs saisies incorrectes',Qt.red)
+ return
+ liste,validite=SaisieValeur.TraiteLEValeur(self,str(v))
+ if not validite :
+ self.editor.afficheInfos(str(listeValeur) +' Valeurs saisies incorrectes',Qt.red)
+ return
+ listeValeur.append(liste[0])
+ validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(listeValeur,-1,[])
+ if validite :
+ self.node.item.setValeur(listeValeur)
+ self.node.item.isValid()
+ self.setValeurs()
+ else :
+ self.editor.afficheInfos(str(listeValeur) + ' ' +comm,Qt.red)
+ self.lineEditVal.setText('')
+
class MonWidgetPlusieursPlieASSD (MonWidgetPlusieursPlie):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
MonWidgetPlusieursPlie.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.lineEditVal.setReadOnly(True)
- def setValeurs(self):
- self.listeValeursCourantes=self.node.item.getListeValeurs()
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- if self.listeValeursCourantes == [] : self.lineEditVal.setText(""); return
- txt="["
- for elt in self.listeValeursCourantes :
+ def setValeurs(self):
+ self.listeValeursCourantes=self.node.item.getListeValeurs()
+ self.politique=PolitiquePlusieurs(self.node,self.editor)
+ if self.listeValeursCourantes == [] : self.lineEditVal.setText(""); return
+ txt="["
+ for elt in self.listeValeursCourantes :
txt= txt+ (str(elt)) + ","
- txt= txt + "]"
- self.lineEditVal.setText(txt)
+ txt= txt + "]"
+ self.lineEditVal.setText(txt)
- def valeurEntree(self):
- pass
+ def valeurEntree(self):
+ pass
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
- from builtins import object
+ from builtins import str
+ from builtins import range
+ from builtins import object
except : pass
import types,os,sys
class TupleCustom(object) :
#--------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------------------------------------
- QWidget.__init__(self,parent)
- self.setupUi(self)
- self.tailleTuple=tailleTuple
- self.parent=parent
- self.parentQt=parentQt
- self.valeur=[]
- self.index=index
- self.inFocusOutEvent=False
-
-
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- courant.num=index
- courant.dansUnTuple=True
- courant.returnPressed.connect(self.valueChange)
- courant.numDsLaListe = i+1
- courant.tupleCustomParent=self
- courant.parentTuple = self
-
-
- def valueChange(self):
- #----------------------
-
- listeVal=[]
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- val=str(courant.text())
-
- if str(val)=="" or val==None :
- if not self.inFocusOutEvent : courant.setFocus()
- return
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------------------------------------
+ QWidget.__init__(self,parent)
+ self.setupUi(self)
+ self.tailleTuple=tailleTuple
+ self.parent=parent
+ self.parentQt=parentQt
+ self.valeur=[]
+ self.index=index
+ self.inFocusOutEvent=False
+
+
+ for i in range(self.tailleTuple):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ courant.num=index
+ courant.dansUnTuple=True
+ courant.returnPressed.connect(self.valueChange)
+ courant.numDsLaListe = i+1
+ courant.tupleCustomParent=self
+ courant.parentTuple = self
+
+
+ def valueChange(self):
+ #----------------------
+
+ listeVal=[]
+ for i in range(self.tailleTuple):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ val=str(courant.text())
+
+ if str(val)=="" or val==None :
+ if not self.inFocusOutEvent : courant.setFocus()
+ return
+
+ try :
+ valeur=eval(val,{})
+ except :
+ try :
+ d=self.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
+ valeur=eval(val,d)
+ except :
+ valeur=val
+ listeVal.append(valeur)
+ self.valeur=listeVal
+ self.parentQt.changeValeur()
+
+
+ def setValeur(self,value):
+ #----------------------
+
+ listeVal=[]
+ valeurNulle=True
+ for i in range(self.tailleTuple):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ try :
+ if str(value[i]) != "" : valeurNulle=False
+ except :
+ pass
- try :
- valeur=eval(val,{})
- except :
- try :
- d=self.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
- valeur=eval(val,d)
- except :
- valeur=val
- listeVal.append(valeur)
- self.valeur=listeVal
- self.parentQt.changeValeur()
-
-
- def setValeur(self,value):
- #----------------------
-
- listeVal=[]
- valeurNulle=True
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- try :
- if str(value[i]) != "" : valeurNulle=False
- except :
- pass
-
- try :
- courant.setText(str(value[i]))
- except :
- courant.setText("")
- val=str(courant.text())
- try :
- valeur=eval(val,{})
- except :
- try :
- d=self.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
- valeur=eval(val,d)
- except :
- valeur=val
- listeVal.append(valeur)
- if valeurNulle == True : self.valeur=None
- else : self.valeur=listeVal
-
- def getValeurbad(self):
- #----------------------
- self.valeur=[]
- vide=True
- print (self.tailleTuple)
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- self.valeur.append(courant.valeur)
- if courant.valeur!= None : vide = False
- if vide : self.valeur=[]
- return self.valeur
-
- def getValeur(self):
- #----------------------
- return self.valeur
-
-
- def text(self):
- #--------------
- return self.valeur
-
- def setText(self,value):
- #-----------------------
- self.setValeur(value)
-
- def clean(self):
- #-------------------
- self.valeur=None
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- courant.setText("")
-
- def finCommentaire(self):
- #-------------------
+ try :
+ courant.setText(str(value[i]))
+ except :
+ courant.setText("")
+ val=str(courant.text())
+ try :
+ valeur=eval(val,{})
+ except :
+ try :
+ d=self.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
+ valeur=eval(val,d)
+ except :
+ valeur=val
+ listeVal.append(valeur)
+ if valeurNulle == True : self.valeur=None
+ else : self.valeur=listeVal
+
+ def getValeurbad(self):
+ #----------------------
+ self.valeur=[]
+ vide=True
+ print (self.tailleTuple)
+ for i in range(self.tailleTuple):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ self.valeur.append(courant.valeur)
+ if courant.valeur!= None : vide = False
+ if vide : self.valeur=[]
+ return self.valeur
+
+ def getValeur(self):
+ #----------------------
+ return self.valeur
+
+
+ def text(self):
+ #--------------
+ return self.valeur
+
+ def setText(self,value):
+ #-----------------------
+ self.setValeur(value)
+
+ def clean(self):
+ #-------------------
+ self.valeur=None
+ for i in range(self.tailleTuple):
+ nomLE="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLE)
+ courant.setText("")
+
+ def finCommentaire(self):
+ #-------------------
return self.finCommentaireListe()
#-------------------------------------------------
class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
- if self.parentQt.editor.maConfiguration.closeParenthese :
- self.label_5.close()
- self.label_7.close()
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ if self.parentQt.editor.maConfiguration.closeParenthese :
+ self.label_5.close()
+ self.label_7.close()
#-------------------------------------------------
class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
#-------------------------------------------------
class TupleCustom4(QWidget,Ui_Tuple4,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
#-------------------------------------------------
class TupleCustom5(QWidget,Ui_Tuple5,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
#-------------------------------------------------
class TupleCustom6(QWidget,Ui_Tuple6,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
#-------------------------------------------------
class TupleCustom7(QWidget,Ui_Tuple7,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
#-------------------------------------------------
class TupleCustom8(QWidget,Ui_Tuple8,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
#-------------------------------------------------
class TupleCustom9(QWidget,Ui_Tuple9,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
#-------------------------------------------------
class TupleCustom10(QWidget,Ui_Tuple10,TupleCustom):
#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
- if self.parentQt.editor.maConfiguration.closeParenthese :
- self.label_5.close()
- self.label_7.close()
+ def __init__(self,tailleTuple,parent,parentQt,index):
+ #-------------------
+ TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+ if self.parentQt.editor.maConfiguration.closeParenthese :
+ self.label_5.close()
+ self.label_7.close()
class MonWidgetPlusieursTuple(Feuille,GereListe):
# -------------------------------------------- #
- def __init__(self, node, monSimpDef, nom, objSimp, parentQt, commande):
- #-----------------------------------------------------
+ def __init__(self, node, monSimpDef, nom, objSimp, parentQt, commande):
+ #-----------------------------------------------------
self.indexDernierLabel=0
self.numLineEditEnCours=0
self.parentQt.commandesLayout.insertWidget(-1,self)
#if sys.platform[0:5]!="linux":
- if 1 :
+ if 1 :
#Pour MT
- repIcon=self.node.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'arrow_up.png')
- icon = QIcon(fichier)
- self.RBHaut.setIcon(icon)
- self.RBHaut.setIconSize(QSize(32, 32))
- fichier2=os.path.join(repIcon, 'arrow_down.png')
- icon2 = QIcon(fichier2)
- self.RBBas.setIcon(icon2)
- fichier3=os.path.join(repIcon, 'file-explorer.png')
- icon3 = QIcon(fichier3)
- self.BSelectFichier.setIcon(icon3)
- self.BSelectFichier.setIconSize(QSize(32, 32))
+ repIcon=self.node.editor.appliEficas.repIcon
+ fichier=os.path.join(repIcon, 'arrow_up.png')
+ icon = QIcon(fichier)
+ self.RBHaut.setIcon(icon)
+ self.RBHaut.setIconSize(QSize(32, 32))
+ fichier2=os.path.join(repIcon, 'arrow_down.png')
+ icon2 = QIcon(fichier2)
+ self.RBBas.setIcon(icon2)
+ fichier3=os.path.join(repIcon, 'file-explorer.png')
+ icon3 = QIcon(fichier3)
+ self.BSelectFichier.setIcon(icon3)
+ self.BSelectFichier.setIconSize(QSize(32, 32))
self.BSelectFichier.clicked.connect(self.selectInFile)
-
-
-
-
- def ajoutLineEdit(self,valeur=None,inInit=False):
- #------------------------------------------------
- self.indexDernierLabel=self.indexDernierLabel+1
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
- if hasattr(self,nomLineEdit) :
- self.indexDernierLabel=self.indexDernierLabel-1
- return
-
- nomCustomTuple='TupleCustom'+str(self.nbValeurs)
- laClasseDuTuple=globals()[nomCustomTuple]
- nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-
- #if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
- #else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-
- self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
- setattr(self,nomLineEdit,nouveauLE)
- if valeur != None : nouveauLE.setValeur(valeur)
-
- for i in range(self.nbValeurs) :
- num=i+1
- nomLineEdit='lineEditVal_'+str(num)
- lineEditVal=getattr(nouveauLE,nomLineEdit)
- self.listeAffichageWidget.append(lineEditVal)
- #self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
- #self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
- #if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
-
- self.etablitOrdre()
-
- # deux lignes pour que le ensureVisible fonctionne
- self.estVisible=nouveauLE.lineEditVal_1
- if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
-
- def etablitOrdre(self):
- # ---------------------
- i=0
- while(i +1 < len(self.listeAffichageWidget)):
- self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
- self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
- i=i+1
-
-
- def setValeurs(self):
- # ---------------------
- if self.editor.code == 'PSEN' : self.RBListePush()
- valeurs=self.node.item.getValeur()
- min,max=self.node.item.getMinMax()
- if max == "**" or max > 8 : aCreer= 8
- else : aCreer=max
-
- if valeurs == () or valeurs == None :
- for i in range(aCreer): self.ajoutLineEdit(inInit=True)
- return
-
- for v in valeurs:
- self.ajoutLineEdit(v,inInit=True)
-
- for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
-
- def rendVisibleLigne(self):
- # -------------------------
- QApplication.processEvents()
- self.estVisible.setFocus(True)
- self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
-
-
- def changeValeur(self,changeDePlace=False,oblige=True):
- # -----------------------------------------------------
- #Pour compatibilite signature
- #print ('dschangeValeur', self.indexDernierLabel)
-
- aLeFocus=self.focusWidget()
- listeComplete=[]
- libre=False
- #print (self.indexDernierLabel)
- for i in range(self.indexDernierLabel) :
- nom=self.nomLine+str(i+1)
- courant=getattr(self,nom)
- valeurTuple=courant.valeur
- if valeurTuple == None or valeurTuple== "" or valeurTuple==[]:
- libre=True
- continue
- validite,comm,comm2,listeRetour= self.politique.ajoutTuple(valeurTuple,listeComplete)
- if not validite:
- if comm2 != '' : comm += " " + comm2
- self.editor.afficheInfos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
- return
- listeComplete.append(tuple(courant.valeur))
- #print ('listeComplete', listeComplete)
- if listeComplete == [] : listeComplete=None
- self.node.item.setValeur(listeComplete)
-
- if changeDePlace : return
- min,max=self.node.item.getMinMax()
- if self.indexDernierLabel == max : self.editor.afficheInfos(tr('Nb maximum de valeurs atteint'))
- if self.indexDernierLabel < max and libre==False :
- self.ajoutLineEdit()
- self.listeAffichageWidget[-2].setFocus(True)
- else :
- try :
- QApplication.processEvents()
- w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
- w.setFocus(True)
- self.scrollArea.ensureWidgetVisible(w,0,0)
- except :
- pass
-
- def echange(self,num1,num2):
- # on donne le focus au a celui ou on a bouge
- # par convention le 2
- nomLineEdit=self.nomLine+str(num1)
- courant=getattr(self,nomLineEdit)
- valeurAGarder=courant.getValeur()
- nomLineEdit2=self.nomLine+str(num2)
- courant2=getattr(self,nomLineEdit2)
- courant.setText(courant2.text())
- courant2.setText(valeurAGarder)
- self.changeValeur(changeDePlace=True)
- self.numLineEditEnCours=num2
- self.LineEditEnCours=courant2
- courant2.lineEditVal_1.setFocus(True)
-
- def ajoutNValeur(self,liste):
- #----------------------------
- # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
- # car alors le temps de verification devient prohibitif reconstructu=ion et verification a
- # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
+
+
+
+
+ def ajoutLineEdit(self,valeur=None,inInit=False):
+ #------------------------------------------------
+ self.indexDernierLabel=self.indexDernierLabel+1
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+ if hasattr(self,nomLineEdit) :
+ self.indexDernierLabel=self.indexDernierLabel-1
+ return
+
+ nomCustomTuple='TupleCustom'+str(self.nbValeurs)
+ laClasseDuTuple=globals()[nomCustomTuple]
+ nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+
+ #if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+ #else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+
+ self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
+ setattr(self,nomLineEdit,nouveauLE)
+ if valeur != None : nouveauLE.setValeur(valeur)
+
+ for i in range(self.nbValeurs) :
+ num=i+1
+ nomLineEdit='lineEditVal'+str(num)
+ lineEditVal=getattr(nouveauLE,nomLineEdit)
+ self.listeAffichageWidget.append(lineEditVal)
+ #self.listeAffichageWidget.append(nouveauLE.lineEditVal1)
+ #self.listeAffichageWidget.append(nouveauLE.lineEditVal2)
+ #if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal3)
+
+ self.etablitOrdre()
+
+ # deux lignes pour que le ensureVisible fonctionne
+ self.estVisible=nouveauLE.lineEditVal1
+ if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
+
+ def etablitOrdre(self):
+ # ---------------------
+ i=0
+ while(i +1 < len(self.listeAffichageWidget)):
+ self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
+ self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
+ i=i+1
+
+
+ def setValeurs(self):
+ # ---------------------
+ if self.editor.code == 'PSEN' : self.RBListePush()
+ valeurs=self.node.item.getValeur()
+ min,max=self.node.item.getMinMax()
+ if max == "**" or max > 8 : aCreer= 8
+ else : aCreer=max
+
+ if valeurs == () or valeurs == None :
+ for i in range(aCreer): self.ajoutLineEdit(inInit=True)
+ return
+
+ for v in valeurs:
+ self.ajoutLineEdit(v,inInit=True)
+
+ for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
+
+ def rendVisibleLigne(self):
+ # -------------------------
+ QApplication.processEvents()
+ self.estVisible.setFocus(True)
+ self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
+
+
+ def changeValeur(self,changeDePlace=False,oblige=True):
+ # -----------------------------------------------------
+ #Pour compatibilite signature
+ #print ('dschangeValeur', self.indexDernierLabel)
+
+ aLeFocus=self.focusWidget()
+ listeComplete=[]
+ libre=False
+ #print (self.indexDernierLabel)
+ for i in range(self.indexDernierLabel) :
+ nom=self.nomLine+str(i+1)
+ courant=getattr(self,nom)
+ valeurTuple=courant.valeur
+ if valeurTuple == None or valeurTuple== "" or valeurTuple==[]:
+ libre=True
+ continue
+ validite,comm,comm2,listeRetour= self.politique.ajoutTuple(valeurTuple,listeComplete)
+ if not validite:
+ if comm2 != '' : comm += " " + comm2
+ self.editor.afficheInfos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
+ return
+ listeComplete.append(tuple(courant.valeur))
+ #print ('listeComplete', listeComplete)
+ if listeComplete == [] : listeComplete=None
+ self.node.item.setValeur(listeComplete)
+
+ if changeDePlace : return
+ min,max=self.node.item.getMinMax()
+ if self.indexDernierLabel == max : self.editor.afficheInfos(tr('Nb maximum de valeurs atteint'))
+ if self.indexDernierLabel < max and libre==False :
+ self.ajoutLineEdit()
+ self.listeAffichageWidget[-2].setFocus(True)
+ else :
+ try :
+ QApplication.processEvents()
+ w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
+ w.setFocus(True)
+ self.scrollArea.ensureWidgetVisible(w,0,0)
+ except :
+ pass
+
+ def echange(self,num1,num2):
+ # on donne le focus au a celui ou on a bouge
+ # par convention le 2
+ nomLineEdit=self.nomLine+str(num1)
+ courant=getattr(self,nomLineEdit)
+ valeurAGarder=courant.getValeur()
+ nomLineEdit2=self.nomLine+str(num2)
+ courant2=getattr(self,nomLineEdit2)
+ courant.setText(courant2.text())
+ courant2.setText(valeurAGarder)
+ self.changeValeur(changeDePlace=True)
+ self.numLineEditEnCours=num2
+ self.lineEditEnCours=courant2
+ courant2.lineEditVal1.setFocus(True)
+
+ def ajoutNValeur(self,liste):
+ #----------------------------
+ # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
+ # car alors le temps de verification devient prohibitif reconstructu=ion et verification a
+ # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
if len(liste)%self.nbValeurs != 0 :
- texte="Nombre incorrect de valeurs"
- self.editor.afficheInfos(tr(texte),Qt.red)
- return
+ texte="Nombre incorrect de valeurs"
+ self.editor.afficheInfos(tr(texte),Qt.red)
+ return
i=0
longueur=len(liste)//self.nbValeurs
if self.objSimp.valeur == None : listeComplete=listeFormatee
else : listeComplete =self.objSimp.valeur + listeFormatee
- if len(listeComplete) > max :
- texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
- self.editor.afficheInfos(texte,Qt.red)
- return
+ if len(listeComplete) > max :
+ texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
+ self.editor.afficheInfos(texte,Qt.red)
+ return
validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete)
- if not validite :
- self.editor.afficheInfos(comm+comm2,Qt.red)
- return
+ if not validite :
+ self.editor.afficheInfos(comm+comm2,Qt.red)
+ return
# on calcule le dernier lineedit rempli avant de changer la valeur
if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
while ( i < len(liste) ) :
try :
- t=tuple(liste[i:i+self.nbValeurs])
+ t=tuple(liste[i:i+self.nbValeurs])
except:
- t=tuple(liste[i:len(liste)])
+ t=tuple(liste[i:len(liste)])
i=i+self.nbValeurs
if indexDernierRempli < self.indexDernierLabel:
- nomLEARemplir=self.nomLine+str(indexDernierRempli+1)
- LEARemplir=getattr(self,nomLEARemplir)
- for n in range(self.nbValeurs) :
- nomLineEdit='lineEditVal_'+str(n+1)
- lineEditVal=getattr(LEARemplir,nomLineEdit)
- lineEditVal.setText(str(t[n]))
- else :
- # ne pas appeler ajoutLineEdit(t,False ) pb de boucle pb du a etablitOrdre et a listeWidgetAffichage qui bouge
- self.indexDernierLabel=self.indexDernierLabel+1
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
-
- nomCustomTuple='TupleCustom'+str(self.nbValeurs)
- laClasseDuTuple=globals()[nomCustomTuple]
- nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-
- self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
- setattr(self,nomLineEdit,nouveauLE)
- nouveauLE.setValeur(t)
-
- for n in range(self.nbValeurs) :
- nomLineEdit='lineEditVal_'+str(n+1)
- lineEditVal=getattr(nouveauLE,nomLineEdit)
- self.listeAffichageWidget.append(lineEditVal)
+ nomLEARemplir=self.nomLine+str(indexDernierRempli+1)
+ LEARemplir=getattr(self,nomLEARemplir)
+ for n in range(self.nbValeurs) :
+ nomLineEdit='lineEditVal'+str(n+1)
+ lineEditVal=getattr(LEARemplir,nomLineEdit)
+ lineEditVal.setText(str(t[n]))
+ else :
+ # ne pas appeler ajoutLineEdit(t,False ) pb de boucle pb du a etablitOrdre et a listeWidgetAffichage qui bouge
+ self.indexDernierLabel=self.indexDernierLabel+1
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+
+ nomCustomTuple='TupleCustom'+str(self.nbValeurs)
+ laClasseDuTuple=globals()[nomCustomTuple]
+ nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+
+ self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
+ setattr(self,nomLineEdit,nouveauLE)
+ nouveauLE.setValeur(t)
+
+ for n in range(self.nbValeurs) :
+ nomLineEdit='lineEditVal'+str(n+1)
+ lineEditVal=getattr(nouveauLE,nomLineEdit)
+ self.listeAffichageWidget.append(lineEditVal)
indexDernierRempli = indexDernierRempli+1
self.etablitOrdre()
-
-
- def RBListePush(self):
- #----------------------
- # PN a rendre generique avec un truc tel prerempli
- # pour l instant specifique PSEN
-
- if self.editor.code == 'VP' : return
- if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
- if not hasattr(self.editor.readercata.cata,'sd_ligne') : self.editor.readercata.cata.sd_ligne=None
- if not hasattr(self.editor.readercata.cata,'sd_generateur') : self.editor.readercata.cata.sd_generateur=None
- if not hasattr(self.editor.readercata.cata,'sd_transfo') : self.editor.readercata.cata.sd_transfo=None
- if not hasattr(self.editor.readercata.cata,'sd_charge') : self.editor.readercata.cata.sd_charge=None
- if not hasattr(self.editor.readercata.cata,'sd_moteur') : self.editor.readercata.cata.sd_moteur=None
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_ligne :
- val=[]
- if hasattr(self.objSimp.jdc,'LineDico'):
- for k in self.objSimp.jdc.LineDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_generateur :
- val=[]
- if hasattr(self.objSimp.jdc,'MachineDico'):
- for k in self.objSimp.jdc.MachineDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_transfo :
- val=[]
- if hasattr(self.objSimp.jdc,'TransfoDico'):
- for k in self.objSimp.jdc.TransfoDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_charge :
- val=[]
- if hasattr(self.objSimp.jdc,'LoadDico'):
- for k in self.objSimp.jdc.LoadDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_moteur :
- val=[]
- if hasattr(self.objSimp.jdc,'MotorDico'):
- for k in self.objSimp.jdc.MotorDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
+
+ def RBListePush(self):
+ #----------------------
+ # PN a rendre generique avec un truc tel prerempli
+ # pour l instant specifique PSEN
+
+ if self.editor.code == 'VP' : return
+ if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
+ if not hasattr(self.editor.readercata.cata,'sd_ligne') : self.editor.readercata.cata.sd_ligne=None
+ if not hasattr(self.editor.readercata.cata,'sd_generateur') : self.editor.readercata.cata.sd_generateur=None
+ if not hasattr(self.editor.readercata.cata,'sd_transfo') : self.editor.readercata.cata.sd_transfo=None
+ if not hasattr(self.editor.readercata.cata,'sd_charge') : self.editor.readercata.cata.sd_charge=None
+ if not hasattr(self.editor.readercata.cata,'sd_moteur') : self.editor.readercata.cata.sd_moteur=None
+ if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_ligne :
+ val=[]
+ if hasattr(self.objSimp.jdc,'LineDico'):
+ for k in self.objSimp.jdc.LineDico :
+ try :
+ valeur=self.objSimp.jdc.getConcept(k)
+ val.append((valeur,0))
+ except :
+ pass
+ self.node.item.setValeur(val)
+ if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_generateur :
+ val=[]
+ if hasattr(self.objSimp.jdc,'MachineDico'):
+ for k in self.objSimp.jdc.MachineDico :
+ try :
+ valeur=self.objSimp.jdc.getConcept(k)
+ val.append((valeur,0))
+ except :
+ pass
+ self.node.item.setValeur(val)
+ if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_transfo :
+ val=[]
+ if hasattr(self.objSimp.jdc,'TransfoDico'):
+ for k in self.objSimp.jdc.TransfoDico :
+ try :
+ valeur=self.objSimp.jdc.getConcept(k)
+ val.append((valeur,0))
+ except :
+ pass
+ self.node.item.setValeur(val)
+ if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_charge :
+ val=[]
+ if hasattr(self.objSimp.jdc,'LoadDico'):
+ for k in self.objSimp.jdc.LoadDico :
+ try :
+ valeur=self.objSimp.jdc.getConcept(k)
+ val.append((valeur,0))
+ except :
+ pass
+ self.node.item.setValeur(val)
+ if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_moteur :
+ val=[]
+ if hasattr(self.objSimp.jdc,'MotorDico'):
+ for k in self.objSimp.jdc.MotorDico :
+ try :
+ valeur=self.objSimp.jdc.getConcept(k)
+ val.append((valeur,0))
+ except :
+ pass
+ self.node.item.setValeur(val)
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# 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.
-#
-# 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
-#
-# Modules Python
-from __future__ import absolute_import
-import types,os
-
-# Modules Eficas
-
-from .feuille import Feuille
-from .monWidgetPlusieursTuple import MonWidgetPlusieursTuple
-from desWidgetPlusieursTuple import Ui_WidgetPlusieursTuple
-
-
-class MonWidgetPlusieursTuple2 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
-
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.nbValeurs=2
- MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# 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.
-#
-# 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
-#
-# Modules Python
-from __future__ import absolute_import
-import types,os
-
-# Modules Eficas
-
-from .feuille import Feuille
-from .monWidgetPlusieursTuple import MonWidgetPlusieursTuple
-from desWidgetPlusieursTuple import Ui_WidgetPlusieursTuple
-
-
-class MonWidgetPlusieursTuple3 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
-
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.nbValeurs=3
- MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# 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.
-#
-# 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
-#
-# Modules Python
-from __future__ import absolute_import
-try :
- from builtins import str
- from builtins import range
- from builtins import object
-except : pass
-
-import types,os,sys
-
-from six.moves import range
-from PyQt5.QtWidgets import QFrame,QApplication, QFrame, QWidget
-from PyQt5.QtGui import QIcon
-from PyQt5.QtCore import QSize, Qt, QTimer
-
-from Extensions.i18n import tr
-
-
-from InterfaceQT4.feuille import Feuille
-from InterfaceQT4.politiquesValidation import PolitiquePlusieurs
-from InterfaceQT4.qtSaisie import SaisieValeur
-from InterfaceQT4.gereListe import GereListe
-from InterfaceQT4.gereListe import LECustom
-from Tuple2 import Ui_Tuple2
-from Tuple3 import Ui_Tuple3
-from Tuple4 import Ui_Tuple4
-from Tuple5 import Ui_Tuple5
-from Tuple6 import Ui_Tuple6
-from Tuple7 import Ui_Tuple7
-from Tuple8 import Ui_Tuple8
-from Tuple9 import Ui_Tuple9
-from Tuple10 import Ui_Tuple10
-
-
-#--------------------------
-class TupleCustom(object) :
-#--------------------------
-
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------------------------------------
- QWidget.__init__(self,parent)
- self.setupUi(self)
- self.tailleTuple=tailleTuple
- self.parent=parent
- self.parentQt=parentQt
- self.valeur=None
- self.index=index
- self.inFocusOutEvent=False
-
-
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- courant.num=index
- courant.dansUnTuple=True
- courant.numDsLaListe = i+1
- courant.tupleCustomParent=self
-
-
-
- def setValeur(self,value):
- #----------------------
-
- listeVal=[]
- valeurNulle=True
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- try :
- if str(value[i]) != "" : valeurNulle=False
- except :
- pass
-
- try :
- courant.setText(str(value[i]))
- except :
- courant.setText("")
- val=str(courant.text())
- try :
- valeur=eval(val,{})
- except :
- try :
- d=self.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
- valeur=eval(val,d)
- except :
- valeur=val
- listeVal.append(valeur)
- if valeurNulle == True : self.valeur=None
- else : self.valeur=listeVal
-
- def getValeur(self):
- #----------------------
- return self.valeur
-
- def text(self):
- #--------------
- return self.valeur
-
- def setText(self,value):
- #-----------------------
- self.setValeur(value)
-
- def clean(self):
- #-------------------
- self.valeur=None
- for i in range(self.tailleTuple):
- nomLE="lineEditVal_"+str(i+1)
- courant=getattr(self,nomLE)
- courant.setText("")
-
- def finCommentaire(self):
- #-------------------
- return self.finCommentaireListe()
-
-
-#-------------------------------------------------
-class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-----------------------------------------------------
- TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom4(QWidget,Ui_Tuple4,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom5(QWidget,Ui_Tuple5,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom6(QWidget,Ui_Tuple6,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom7(QWidget,Ui_Tuple7,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom8(QWidget,Ui_Tuple8,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom9(QWidget,Ui_Tuple9,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-#-------------------------------------------------
-class TupleCustom10(QWidget,Ui_Tuple10,TupleCustom):
-#-------------------------------------------------
- def __init__(self,tailleTuple,parent,parentQt,index):
- #-------------------
- TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-
-
-
-
-# -------------------------------------------- #
-class MonWidgetPlusieursTuple(Feuille,GereListe):
-# -------------------------------------------- #
-
- def __init__(self, node, monSimpDef, nom, objSimp, parentQt, commande):
- #-----------------------------------------------------
-
- self.indexDernierLabel=0
- self.numLineEditEnCours=0
- self.nomLine="TupleVal"
- self.listeAffichageWidget=[]
- Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- GereListe.__init__(self)
- self.finCommentaireListe()
- self.politique=PolitiquePlusieurs(self.node,self.editor)
- self.parentQt.commandesLayout.insertWidget(-1,self)
-
- if sys.platform[0:5]!="linux":
- repIcon=self.node.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'arrow_up.png')
- icon = QIcon(fichier)
- self.RBHaut.setIcon(icon)
- self.RBHaut.setIconSize(QSize(32, 32))
- fichier2=os.path.join(repIcon, 'arrow_down.png')
- icon2 = QIcon(fichier2)
- self.RBBas.setIcon(icon2)
- fichier3=os.path.join(repIcon, 'file-explorer.png')
- icon3 = QIcon(fichier3)
- self.BSelectFichier.setIcon(icon3)
- self.BSelectFichier.setIconSize(QSize(32, 32))
- self.BSelectFichier.clicked.connect(self.selectInFile)
-
-
-
-
- def ajoutLineEdit(self,valeur=None,inInit=False):
- #------------------------------------------------
- self.indexDernierLabel=self.indexDernierLabel+1
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
- if hasattr(self,nomLineEdit) :
- self.indexDernierLabel=self.indexDernierLabel-1
- return
-
- nomCustomTuple='TupleCustom'+str(self.nbValeurs)
- laClasseDuTuple=globals()[nomCustomTuple]
- nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-
- #if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
- #else : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-
- self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
- setattr(self,nomLineEdit,nouveauLE)
- if valeur != None : nouveauLE.setValeur(valeur)
-
- for i in range(self.nbValeurs) :
- num=i+1
- nomLineEdit='lineEditVal_'+str(num)
- lineEditVal=getattr(nouveauLE,nomLineEdit)
- self.listeAffichageWidget.append(lineEditVal)
- #self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
- #self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
- #if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
-
- self.etablitOrdre()
-
- # deux lignes pour que le ensureVisible fonctionne
- self.estVisible=nouveauLE.lineEditVal_1
- if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
-
- def etablitOrdre(self):
- # ---------------------
- i=0
- while(i +1 < len(self.listeAffichageWidget)):
- self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
- self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
- i=i+1
-
-
- def setValeurs(self):
- # ---------------------
- if self.editor.code == 'PSEN' : self.RBListePush()
- valeurs=self.node.item.getValeur()
- min,max=self.node.item.getMinMax()
- if max == "**" or max > 8 : aCreer= 8
- else : aCreer=max
-
- if valeurs == () or valeurs == None :
- for i in range(aCreer): self.ajoutLineEdit(inInit=True)
- return
-
- for v in valeurs:
- self.ajoutLineEdit(v,inInit=True)
-
- for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
-
- def rendVisibleLigne(self):
- # -------------------------
- QApplication.processEvents()
- self.estVisible.setFocus(True)
- self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
-
-
- def changeValeur(self,changeDePlace=False,oblige=True):
- # -----------------------------------------------------
- #Pour compatibilite signature
-
- self.aEuLeFocus=False # set pour le leaveEvent voir gereListe
- aLeFocus=self.focusWidget()
- listeComplete=[]
- libre=False
- #print ('ds changeValeur', self.indexDernierLabel)
- for i in range(self.indexDernierLabel) :
- #print (i)
- nom=self.nomLine+str(i+1)
- #print (nom)
- courant=getattr(self,nom)
- #print (courant)
- valeurTuple=courant.valeur
- #print (valeurTuple)
- if valeurTuple == None or valeurTuple== "":
- libre=True
- continue
- print (i, valeurTuple)
- validite,comm,comm2,listeRetour= self.politique.ajoutTuple(valeurTuple,listeComplete)
- if not validite:
- print (validite,comm,comm2)
- if comm2 != '' : comm += " " + comm2
- print (validite,comm,comm2)
- self.editor.afficheInfos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
- print (comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
- return
- listeComplete.append(tuple(courant.valeur))
- if listeComplete == [] : listeComplete=None
- self.node.item.setValeur(listeComplete)
-
- if changeDePlace : return
- min,max=self.node.item.getMinMax()
- if self.indexDernierLabel == max : self.editor.afficheInfos(tr('Nb maximum de valeurs atteint'))
- if self.indexDernierLabel < max and libre==False :
- self.ajoutLineEdit()
- self.listeAffichageWidget[-2].setFocus(True)
- else :
- try :
- QApplication.processEvents()
- w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
- w.setFocus(True)
- self.scrollArea.ensureWidgetVisible(w,0,0)
- except :
- pass
-
- def ajoutNValeur(self,liste):
- #----------------------------
- # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
- # car alors le temps de verification devient prohibitif reconstructu=ion et verification a
- # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
-
- if len(liste)%self.nbValeurs != 0 :
- texte="Nombre incorrect de valeurs"
- self.editor.afficheInfos(tr(texte),Qt.red)
- return
-
- i=0
- longueur=len(liste)//self.nbValeurs
- increment=self.nbValeurs
- listeFormatee=[liste[k*increment:(k+1)*increment] for k in range(longueur)]
- listeFormatee=tuple(listeFormatee)
-
- min,max=self.node.item.getMinMax()
- if self.objSimp.valeur == None : listeComplete=listeFormatee
- else : listeComplete =self.objSimp.valeur + listeFormatee
-
- if len(listeComplete) > max :
- texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
- self.editor.afficheInfos(texte,Qt.red)
- return
-
- validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete)
- if not validite :
- self.editor.afficheInfos(texte,Qt.red)
- return
-
- # on calcule le dernier lineedit rempli avant de changer la valeur
- if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
- else : indexDernierRempli=0
-
- self.politique.recordValeur(listeComplete)
-
- while ( i < len(liste) ) :
- try :
- t=tuple(liste[i:i+self.nbValeurs])
- except:
- t=tuple(liste[i:len(liste)])
- i=i+self.nbValeurs
- if indexDernierRempli < self.indexDernierLabel:
-
- nomLEARemplir=self.nomLine+str(indexDernierRempli+1)
- LEARemplir=getattr(self,nomLEARemplir)
- for n in range(self.nbValeurs) :
- nomLineEdit='lineEditVal_'+str(n+1)
- lineEditVal=getattr(LEARemplir,nomLineEdit)
- lineEditVal.setText(str(t[n]))
- else :
- # ne pas appeler ajoutLineEdit(t,False ) pb de boucle pb du a etablitOrdre et a listeWidgetAffichage qui bouge
- self.indexDernierLabel=self.indexDernierLabel+1
- nomLineEdit=self.nomLine+str(self.indexDernierLabel)
-
- nomCustomTuple='TupleCustom'+str(self.nbValeurs)
- laClasseDuTuple=globals()[nomCustomTuple]
- nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-
- self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
- setattr(self,nomLineEdit,nouveauLE)
- nouveauLE.setValeur(t)
-
- for n in range(self.nbValeurs) :
- nomLineEdit='lineEditVal_'+str(n+1)
- lineEditVal=getattr(nouveauLE,nomLineEdit)
- self.listeAffichageWidget.append(lineEditVal)
- indexDernierRempli = indexDernierRempli+1
-
- self.etablitOrdre()
-
-
-
- def RBListePush(self):
- #----------------------
- # PN a rendre generique avec un truc tel prerempli
- # pour l instant specifique PSEN
-
- if self.editor.code == 'VP' : return
- if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
- if not hasattr(self.editor.readercata.cata,'sd_ligne') : self.editor.readercata.cata.sd_ligne=None
- if not hasattr(self.editor.readercata.cata,'sd_generateur') : self.editor.readercata.cata.sd_generateur=None
- if not hasattr(self.editor.readercata.cata,'sd_transfo') : self.editor.readercata.cata.sd_transfo=None
- if not hasattr(self.editor.readercata.cata,'sd_charge') : self.editor.readercata.cata.sd_charge=None
- if not hasattr(self.editor.readercata.cata,'sd_moteur') : self.editor.readercata.cata.sd_moteur=None
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_ligne :
- val=[]
- if hasattr(self.objSimp.jdc,'LineDico'):
- for k in self.objSimp.jdc.LineDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_generateur :
- val=[]
- if hasattr(self.objSimp.jdc,'MachineDico'):
- for k in self.objSimp.jdc.MachineDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_transfo :
- val=[]
- if hasattr(self.objSimp.jdc,'TransfoDico'):
- for k in self.objSimp.jdc.TransfoDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_charge :
- val=[]
- if hasattr(self.objSimp.jdc,'LoadDico'):
- for k in self.objSimp.jdc.LoadDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
- if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_moteur :
- val=[]
- if hasattr(self.objSimp.jdc,'MotorDico'):
- for k in self.objSimp.jdc.MotorDico :
- try :
- valeur=self.objSimp.jdc.getConcept(k)
- val.append((valeur,0))
- except :
- pass
- self.node.item.setValeur(val)
-
# Modules Eficas
from .feuille import Feuille
-from .monWidgetPlusieursTuple import MonWidgetPlusieursTuple
-from desWidgetPlusieursTuple import Ui_WidgetPlusieursTuple
+from .monWidgetPlusieursTuple import MonWidgetPlusieursTuple
+from desWidgetPlusieursTuple import Ui_WidgetPlusieursTuple
class MonWidgetPlusieursTuple2 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=2
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetPlusieursTuple3 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=3
+ MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
class MonWidgetPlusieursTuple4 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=4
+ MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
class MonWidgetPlusieursTuple5 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=5
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetPlusieursTuple6 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=6
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetPlusieursTuple7 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=7
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetPlusieursTuple8 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=8
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetPlusieursTuple9 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=9
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetPlusieursTuple10 (Ui_WidgetPlusieursTuple,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=10
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetRadioButton import Ui_WidgetRadioButton
+from desWidgetRadioButton import Ui_WidgetRadioButton
from .politiquesValidation import PolitiqueUnique
from .qtSaisie import SaisieValeur
class MonWidgetRadioButtonCommun (Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.setMaxI()
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
self.maCommande.listeAffichageWidget.append(self.radioButton_1)
- def setValeursApresBouton(self):
- if self.objSimp.getValeur()==None : return
- valeur=self.objSimp.getValeur()
- if not(isinstance(valeur, str)) : valeur = str(valeur)
- try :
- self.dict_bouton[valeur].setChecked(True)
- self.dict_bouton[valeur].setFocus(True)
- except :
- pass
-
- def determineChoix(self):
- self.horizontalLayout.setAlignment(Qt.AlignLeft)
- i=1
- j=len(self.maListeDeValeur)
- if j > self.maxI :
- print ("poumbadaboum")
- return
- while i < j+1 :
- nomBouton="radioButton_"+str(i)
- bouton=getattr(self,nomBouton)
- valeur=self.maListeDeValeur[i-1]
- if not(isinstance(valeur, str)) : valeur = str(valeur)
- bouton.setText(tr(valeur))
- self.dict_bouton[valeur]=bouton
- bouton.clicked.connect(self.boutonclic)
- bouton.keyPressEvent=self.keyPressEvent
- setattr(self,nomBouton,bouton)
- i=i+1
- while i < self.maxI +1 :
- nomBouton="radioButton_"+str(i)
- bouton=getattr(self,nomBouton)
- bouton.close()
- i=i+1
-
- def boutonclic(self):
- for valeur in self.dict_bouton:
- if self.dict_bouton[valeur].isChecked():
- SaisieValeur.LEvaleurPressed(self,valeur)
- self.reaffiche()
-
-
- def keyPressEvent(self, event):
- if event.key() == Qt.Key_Right : self.selectSuivant(); return
- if event.key() == Qt.Key_Left : self.selectPrecedent(); return
- if event.key() == Qt.Key_Return or event.key() == Qt.Key_Space : self.checkFocused(); return
- QWidget.keyPressEvent(self,event)
-
- def selectSuivant(self):
- aLeFocus=self.focusWidget()
- nom=aLeFocus.objectName()[12:]
- i=int(nom)+1
- if i == len(self.maListeDeValeur) +1 : i=1
- nomBouton="radioButton_"+str(i)
- courant=getattr(self,nomBouton)
- courant.setFocus(True)
-
- def selectPrecedent(self):
- aLeFocus=self.focusWidget()
- nom=aLeFocus.objectName()[12:]
- i=int(nom)-1
- if i == 0 : i= len(self.maListeDeValeur)
- nomBouton="radioButton_"+str(i)
- courant=getattr(self,nomBouton)
- courant.setFocus(True)
-
- def checkFocused(self):
- aLeFocus=self.focusWidget()
- nom=aLeFocus.objectName()[12:]
- i=int(nom)
- if i > 0 and i <= len(self.maListeDeValeur):
+ def setValeursApresBouton(self):
+ if self.objSimp.getValeur()==None : return
+ valeur=self.objSimp.getValeur()
+ if not(isinstance(valeur, str)) : valeur = str(valeur)
+ try :
+ self.dict_bouton[valeur].setChecked(True)
+ self.dict_bouton[valeur].setFocus(True)
+ except :
+ pass
+
+ def determineChoix(self):
+ self.horizontalLayout.setAlignment(Qt.AlignLeft)
+ i=1
+ j=len(self.maListeDeValeur)
+ if j > self.maxI :
+ print ("poumbadaboum")
+ return
+ while i < j+1 :
+ nomBouton="radioButton_"+str(i)
+ bouton=getattr(self,nomBouton)
+ valeur=self.maListeDeValeur[i-1]
+ if not(isinstance(valeur, str)) : valeur = str(valeur)
+ bouton.setText(tr(valeur))
+ self.dict_bouton[valeur]=bouton
+ bouton.clicked.connect(self.boutonclic)
+ bouton.keyPressEvent=self.keyPressEvent
+ setattr(self,nomBouton,bouton)
+ i=i+1
+ while i < self.maxI +1 :
+ nomBouton="radioButton_"+str(i)
+ bouton=getattr(self,nomBouton)
+ bouton.close()
+ i=i+1
+
+ def boutonclic(self):
+ for valeur in self.dict_bouton:
+ if self.dict_bouton[valeur].isChecked():
+ SaisieValeur.LEvaleurPressed(self,valeur)
+ self.reaffiche()
+
+
+ def keyPressEvent(self, event):
+ if event.key() == Qt.Key_Right : self.selectSuivant(); return
+ if event.key() == Qt.Key_Left : self.selectPrecedent(); return
+ if event.key() == Qt.Key_Return or event.key() == Qt.Key_Space : self.checkFocused(); return
+ QWidget.keyPressEvent(self,event)
+
+ def selectSuivant(self):
+ aLeFocus=self.focusWidget()
+ nom=aLeFocus.objectName()[12:]
+ i=int(nom)+1
+ if i == len(self.maListeDeValeur) +1 : i=1
nomBouton="radioButton_"+str(i)
courant=getattr(self,nomBouton)
- if not courant.isChecked():
- courant.setChecked(True)
- self.boutonclic()
+ courant.setFocus(True)
+
+ def selectPrecedent(self):
+ aLeFocus=self.focusWidget()
+ nom=aLeFocus.objectName()[12:]
+ i=int(nom)-1
+ if i == 0 : i= len(self.maListeDeValeur)
+ nomBouton="radioButton_"+str(i)
+ courant=getattr(self,nomBouton)
+ courant.setFocus(True)
+
+ def checkFocused(self):
+ aLeFocus=self.focusWidget()
+ nom=aLeFocus.objectName()[12:]
+ i=int(nom)
+ if i > 0 and i <= len(self.maListeDeValeur):
+ nomBouton="radioButton_"+str(i)
+ courant=getattr(self,nomBouton)
+ if not courant.isChecked():
+ courant.setChecked(True)
+ self.boutonclic()
class MonWidgetRadioButton (Ui_WidgetRadioButton,MonWidgetRadioButtonCommun):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- #print "MonWidgetRadioButton ", self
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ #print "MonWidgetRadioButton ", self
if type(monSimpDef.into) ==types.FunctionType : self.maListeDeValeur=monSimpDef.into()
else : self.maListeDeValeur=monSimpDef.into
MonWidgetRadioButtonCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
- def setMaxI(self):
+
+ def setMaxI(self):
self.maxI=3
class MonWidgetRadioButtonSD (Ui_WidgetRadioButton,MonWidgetRadioButtonCommun):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print "dans le init de MonWidgetRadioButtonSD",self
self.maListeDeValeur=node.item.getSdAvantDuBonType()
MonWidgetRadioButtonCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- def setMaxI(self):
+ def setMaxI(self):
self.maxI=3
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetSDCOInto import Ui_WidgetSDCOInto
+from desWidgetSDCOInto import Ui_WidgetSDCOInto
from .qtSaisie import SaisieSDCO
from .politiquesValidation import PolitiqueUnique
class MonWidgetSDCOInto (Ui_WidgetSDCOInto,Feuille,SaisieSDCO):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print "MonWidgetSDCOInto init"
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
self.maCommande.listeAffichageWidget.append(self.LESDCO)
self.AAficher=self.LESDCO
self.initLBSDCO()
-
+
self.LESDCO.returnPressed.connect(self.LESDCOReturnPressed)
self.LBSDCO.itemDoubleClicked.connect(self.LBSDCODoubleClicked )
- def LESDCOReturnPressed(self) :
+ def LESDCOReturnPressed(self) :
self.LBSDCO.clearSelection()
SaisieSDCO.LESDCOReturnPressed(self)
- def initLBSDCO(self):
+ def initLBSDCO(self):
listeNomsSDCO = self.node.item.getSdAvantDuBonType()
for aSDCO in listeNomsSDCO:
self.LBSDCO.insertItem( 1,aSDCO)
valeur = self.node.item.getValeur()
if valeur != "" and valeur != None :
- self.LESDCO.setText(str(valeur.nom))
+ self.LESDCO.setText(str(valeur.nom))
- def LBSDCODoubleClicked(self):
+ def LBSDCODoubleClicked(self):
"""
Teste si la valeur fournie par l'utilisateur est une valeur permise :
- si oui, l'enregistre
valeur,validite=self.node.item.evalValeur(nomConcept)
test = self.node.item.setValeur(valeur)
if not test :
- commentaire = tr("impossible d'evaluer : ") + valeur
+ commentaire = tr("impossible d'evaluer : ") + valeur
elif validite:
- commentaire = tr("Valeur du mot-clef enregistree")
- if test_CO:
- # il faut egalement propager la destruction de l'ancien concept
- self.node.item.deleteValeurCo(valeur=anc_val)
- self.node.item.object.etape.getType_produit(force=1)
- self.node.item.object.etape.parent.resetContext()
- self.LESDCO.setText(nomConcept)
+ commentaire = tr("Valeur du mot-clef enregistree")
+ if test_CO:
+ # il faut egalement propager la destruction de l'ancien concept
+ self.node.item.deleteValeurCo(valeur=anc_val)
+ self.node.item.object.etape.getType_produit(force=1)
+ self.node.item.object.etape.parent.resetContext()
+ self.LESDCO.setText(nomConcept)
else :
- commentaire = self.node.item.getCr()
- self.reset_old_valeur(anc_val,mess=mess)
- self.editor.afficheInfos(commentaire,Qt.red)
+ commentaire = self.node.item.getCr()
+ self.reset_old_valeur(anc_val,mess=mess)
+ self.editor.afficheInfos(commentaire,Qt.red)
self.Commentaire.setText(tr(commentaire))
-
-
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetSimpBase import Ui_WidgetSimpBase
+from desWidgetSimpBase import Ui_WidgetSimpBase
from .politiquesValidation import PolitiqueUnique
from .qtSaisie import SaisieValeur
class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+ if 'R' or 'I' in self.monSimpDef.type : self.lineEditVal.setMinimumWidth(525)
self.parentQt.commandesLayout.insertWidget(-1,self,1)
self.setFocusPolicy(Qt.StrongFocus)
if monSimpDef.homo == 'constant' : self.lineEditVal.setReadOnly(True)
self.lineEditVal.focusOutEvent=self.monFocusOutEvent
- def monFocusInEvent(self,event):
- self.editor.nodeEnCours = self
- QLineEdit.focusInEvent(self.lineEditVal,event)
-
- def monFocusOutEvent(self,event):
- if self.oldValeurTexte != self.lineEditVal.text():
- self.oldValeurTexte= self.lineEditVal.text()
- self.LEvaleurPressed()
- QLineEdit.focusOutEvent(self.lineEditVal,event)
-
-
- def setValeurs(self):
- #print ("dans setValeurs")
- self.politique=PolitiqueUnique(self.node,self.editor)
- valeur=self.node.item.getValeur()
- valeurTexte=self.politique.getValeurTexte(valeur)
- chaine=""
-
- if valeurTexte != None :
- from decimal import Decimal
- if isinstance(valeurTexte,Decimal):
- chaine=str(valeurTexte)
- elif repr(valeurTexte.__class__).find("PARAMETRE") > 0:
- chaine = repr(valeur)
- else :
- #PN ????
- #try :
- # chaine=QString("").setNum(valeurTexte)
- #except :
- chaine=str(valeurTexte)
- self.oldValeurTexte=chaine
- self.lineEditVal.setText(chaine)
-
-
- def finCommentaire(self):
- mc = self.objSimp.definition
- d_aides = { 'TXM' : tr(u"Une chaine de caracteres est attendue. "),
- 'R' : tr(u"Un reel est attendu. "),
- 'I' : tr(u"Un entier est attendu. "),
- 'Matrice' : tr(u'Une Matrice est attendue. '),
- 'Fichier' : tr(u'Un fichier est attendu. '),
- 'FichierNoAbs' : tr(u'Un fichier est attendu. '),
- 'Repertoire' : tr(u'Un repertoire est attendu. '),
- 'FichierOuRepertoire' : tr(u'Un repertoire ou un fichier est attendu. '),
- 'Heure' : tr(u'Heure sous la forme HH:MM'),
- 'Date' : tr(u'Date sous la forme JJ/MM/AA')}
- if mc.type[0] != type:
- commentaire = d_aides.get(mc.type[0], tr("Type de base inconnu"))
- else : commentaire=""
- return commentaire
-
-
- def LEvaleurPressed(self):
- # pour les soucis d encoding
- try :
- if str(self.lineEditVal.text())=="" or str(self.lineEditVal.text())==None : return
- except : pass
- SaisieValeur.LEvaleurPressed(self)
- self.parentQt.donneFocus()
- self.setValeurs()
- self.reaffiche()
-
-
+ def monFocusInEvent(self,event):
+ self.editor.nodeEnCours = self
+ QLineEdit.focusInEvent(self.lineEditVal,event)
+
+ def monFocusOutEvent(self,event):
+ if self.oldValeurTexte != self.lineEditVal.text():
+ self.oldValeurTexte= self.lineEditVal.text()
+ self.LEvaleurPressed()
+ QLineEdit.focusOutEvent(self.lineEditVal,event)
+
+
+ def setValeurs(self):
+ #print ("dans setValeurs")
+ self.politique=PolitiqueUnique(self.node,self.editor)
+ valeur=self.node.item.getValeur()
+ valeurTexte=self.politique.getValeurTexte(valeur)
+ chaine=""
+
+ if valeurTexte != None :
+ from decimal import Decimal
+ if isinstance(valeurTexte,Decimal):
+ chaine=str(valeurTexte)
+ elif repr(valeurTexte.__class__).find("PARAMETRE") > 0:
+ chaine = repr(valeur)
+ else :
+ #PN ????
+ #try :
+ # chaine=QString("").setNum(valeurTexte)
+ #except :
+ chaine=str(valeurTexte)
+ self.oldValeurTexte=chaine
+ self.lineEditVal.setText(chaine)
+
+
+ def finCommentaire(self):
+ mc = self.objSimp.definition
+ d_aides = { 'TXM' : tr(u"Une chaine de caracteres est attendue. "),
+ 'R' : tr(u"Un reel est attendu. "),
+ 'I' : tr(u"Un entier est attendu. "),
+ 'Matrice' : tr(u'Une Matrice est attendue. '),
+ 'Fichier' : tr(u'Un fichier est attendu. '),
+ 'FichierNoAbs' : tr(u'Un fichier est attendu. '),
+ 'Repertoire' : tr(u'Un repertoire est attendu. '),
+ 'FichierOuRepertoire' : tr(u'Un repertoire ou un fichier est attendu. '),
+ 'Heure' : tr(u'Heure sous la forme HH:MM'),
+ 'Date' : tr(u'Date sous la forme JJ/MM/AA')}
+ if mc.type[0] != type:
+ commentaire = d_aides.get(mc.type[0], tr("Type de base inconnu"))
+ else : commentaire=""
+ return commentaire
+
+
+ def LEvaleurPressed(self):
+ # pour les soucis d encoding
+ try :
+ if str(self.lineEditVal.text())=="" or str(self.lineEditVal.text())==None : return
+ except : pass
+ SaisieValeur.LEvaleurPressed(self)
+ self.parentQt.donneFocus()
+ self.setValeurs()
+ self.reaffiche()
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetSimpBool import Ui_WidgetSimpBool
+from desWidgetSimpBool import Ui_WidgetSimpBool
from .politiquesValidation import PolitiqueUnique
from .qtSaisie import SaisieValeur
class MonWidgetSimpBool (Ui_WidgetSimpBool,Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
self.RBTrue.clicked.connect(self.boutonTrueClic)
self.maCommande.listeAffichageWidget.append(self.RBTrue)
self.AAfficher=self.RBTrue
- def setValeurs(self):
- valeur=self.node.item.getValeur()
- if valeur == None : return
- if valeur == True : self.RBTrue.setChecked(True)
- if valeur == False : self.RBFalse.setChecked(True)
- if self.monSimpDef.homo == 'constant' :
- if valeur == True : self.RBFalse.setDisabled(True)
- else : self.RBTrue.setDisabled(True)
-
- def boutonTrueClic(self):
- SaisieValeur.LEvaleurPressed(self,True)
- self.reaffiche()
-
- def boutonFalseClic(self):
- SaisieValeur.LEvaleurPressed(self,False)
- self.reaffiche()
-
+ def setValeurs(self):
+ valeur=self.node.item.getValeur()
+ if valeur == None : return
+ if valeur == True : self.RBTrue.setChecked(True)
+ if valeur == False : self.RBFalse.setChecked(True)
+ if self.monSimpDef.homo == 'constant' :
+ if valeur == True : self.RBFalse.setDisabled(True)
+ else : self.RBTrue.setDisabled(True)
+
+ def boutonTrueClic(self):
+ SaisieValeur.LEvaleurPressed(self,True)
+ self.reaffiche()
+
+ def boutonFalseClic(self):
+ SaisieValeur.LEvaleurPressed(self,False)
+ self.reaffiche()
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os, locale
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetSimpComplexe import Ui_WidgetSimpComplexe
+from desWidgetSimpComplexe import Ui_WidgetSimpComplexe
from .politiquesValidation import PolitiqueUnique
from .qtSaisie import SaisieValeur
class MonWidgetSimpComplexe (Ui_WidgetSimpComplexe,Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.parentQt.commandesLayout.insertWidget(-1,self)
self.setFocusPolicy(Qt.StrongFocus)
self.LEReel.returnPressed.connect(self.LEReelRPressed)
self.RBRI.clicked.connect(self.valeurPressed )
self.RBMP.clicked.connect(self.valeurPressed )
- self.LEComp.returnPressed.connect(self.LECompRPressed)
- self.maCommande.listeAffichageWidget.append(self.LEComp)
- #self.maCommande.listeAffichageWidget.append(self.RBRI)
- #self.maCommande.listeAffichageWidget.append(self.RBMP)
- #self.maCommande.listeAffichageWidget.append(self.LEReel)
- #self.maCommande.listeAffichageWidget.append(self.LEImag)
-
-
- def setValeurs(self):
- self.politique=PolitiqueUnique(self.node,self.editor)
- valeur=self.node.item.getValeur()
- if valeur == None or valeur == '' : return
- if type(valeur) not in (list,tuple) :
- self.LEComp.setText(str(valeur))
- else :
- typ_cplx,x1,x2=valeur
- self.LEReel.setText(str(x1))
- self.LEImag.setText(str(x2))
- if typ_cplx == "RI" :
- self.RBRI.setChecked(1)
- else :
- self.RBMP.setChecked(1)
-
- def LECompRPressed(self) :
- self.LEReel.clear()
- self.LEImag.clear()
- commentaire=tr("expression valide")
- valeur = str(self.LEComp.text())
- d={}
- try :
- v=eval(valeur,d)
- except :
- commentaire=tr("expression invalide")
- self.editor.afficheInfos(commentaire,Qt.red)
- return
- try :
- i=v.imag
- self.editor.afficheInfos(commentaire)
- self.valeurPressed()
- except :
- commentaire=tr("l expression n est pas de la forme a+bj")
- self.editor.afficheInfos(commentaire,Qt.red)
-
- def LEReelRPressed(self):
- self.LEComp.clear()
+ self.maCommande.listeAffichageWidget.append(self.RBRI)
+ self.maCommande.listeAffichageWidget.append(self.RBMP)
+ self.maCommande.listeAffichageWidget.append(self.LEReel)
+ self.maCommande.listeAffichageWidget.append(self.LEImag)
+
+
+ def setValeurs(self):
+ self.politique=PolitiqueUnique(self.node,self.editor)
+ valeur=self.node.item.getValeur()
+ if valeur == None or valeur == '' : return
+ if type(valeur) not in (list,tuple) :
+ self.LEComp.setText(str(valeur))
+ commentaire=tr('complexe form deprecated, od value : ', valeur)
+ self.editor.afficheInfos(commentaire,Qt.red)
+ else :
+ typ_cplx,x1,x2=valeur
+ self.LEReel.setText(str(x1))
+ self.LEImag.setText(str(x2))
+ if typ_cplx == "RI" :
+ self.RBRI.setChecked(1)
+ else :
+ self.RBMP.setChecked(1)
+
+ #def LECompRPressed(self) :
+ # self.LEReel.clear()
+ # self.LEImag.clear()
+ # commentaire=tr("expression valide")
+ # valeur = str(self.LEComp.text())
+ # d={}
+ # if 1 :
+ # try :
+ # v=eval(valeur,d)
+ # except :
+ # commentaire=tr("expression invalide")
+ # self.editor.afficheInfos(commentaire,Qt.red)
+ # return
+ # try :
+ # i=v.imag
+ # self.editor.afficheInfos(commentaire)
+ # self.valeurPressed()
+ # except :
+ # commentaire=tr("l expression n est pas de la forme a+bj")
+ # self.editor.afficheInfos(commentaire,Qt.red)
+
+ def LEReelRPressed(self):
+ #self.LEComp.clear()
commentaire=tr("expression valide")
valeur = str(self.LEReel.text())
try :
- a=locale.atof(valeur)
- self.editor.afficheInfos(commentaire)
+ a=locale.atof(valeur)
+ self.editor.afficheInfos(commentaire)
except :
- commentaire=tr("expression invalide")
- self.editor.afficheInfos(commentaire,Qt.red)
+ commentaire=tr("expression invalide")
+ self.editor.afficheInfos(commentaire,Qt.red)
if self.LEImag.text()!="" : self.valeurPressed()
+ else : self.LEImag.setFocus(True)
- def LEImagRPressed(self):
- self.LEComp.clear()
+ def LEImagRPressed(self):
commentaire=tr("expression valide")
valeur = str(self.LEImag.text())
try :
- a=locale.atof(valeur)
- self.editor.afficheInfos(commentaire)
+ a=locale.atof(valeur)
+ self.editor.afficheInfos(commentaire)
except :
- commentaire=tr("expression invalide")
- self.editor.afficheInfos(commentaire,Qt.red)
+ commentaire=tr("expression invalide")
+ self.editor.afficheInfos(commentaire,Qt.red)
if self.LEReel.text()!="" : self.valeurPressed()
-
- def finCommentaire(self):
- commentaire="valeur de type complexe"
- return commentaire
-
- def getValeurComp(self):
- commentaire=tr("expression valide")
- valeur = str(self.LEComp.text())
- d={}
- try :
- v=eval(valeur,d)
- except :
- commentaire=tr("expression invalide")
- self.editor.afficheInfos(commentaire,Qt.red)
- return None
+ else : self.LEReel.setFocus(True)
+
+ def finCommentaire(self):
+ commentaire="valeur de type complexe"
+ return commentaire
+
+ #def getValeurComp(self):
+ # commentaire=tr("expression valide")
+ # valeur = str(self.LEComp.text())
+ # d={}
+ # try :
+ # v=eval(valeur,d)
+ # except :
+ # commentaire=tr("expression invalide")
+ # self.editor.afficheInfos(commentaire,Qt.red)
+ # return None
+ # try :
+ # i=v.imag
+ # except :
+ # commentaire=tr("expression n est pas de la forme a+bj")
+ # self.editor.afficheInfos(commentaire,Qt.red)
+ # return None
+ # return v
+
+
+ def valeurPressed(self):
+ if (self.LEReel.text()=="" and self.LEImag.text()=="") : self.LEReel.setFocus(True)
+ if (self.LEReel.text()=="" and self.LEImag.text()!="") : self.LEReel.setFocus(True)
+ if (self.LEReel.text()!="" and self.LEImag.text()=="") : self.LEImag.setFocus(True)
+ valeur = self.getValeurRI()
+ self.politique.recordValeur(valeur)
+ self.reaffiche()
+ self.parentQt.donneFocus()
+
+ def getValeurRI(self):
+ """
+ Retourne le complexe saisi par l'utilisateur
+ """
+ l=[]
+ if (self.RBMP.isChecked() == 1 ) : l.append("MP")
+ elif (self.RBRI.isChecked() == 1) : l.append("RI")
+ else :
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.RBMP.setFocus(True)
+ return None
try :
- i=v.imag
+ l.append(locale.atof(str(self.LEReel.text())))
+ l.append(locale.atof(str(self.LEImag.text())))
except :
- commentaire=tr("expression n est pas de la forme a+bj")
- self.editor.afficheInfos(commentaire,Qt.red)
- return None
- return v
-
-
- def valeurPressed(self):
- if self.LEComp.text()== "" and (self.LEReel.text()=="" or self.LEImag.text()=="") :
- return
- if self.LEComp.text()== "" : valeur = self.getValeurRI()
- else :
- if self.LEReel.text() != "" or self.LEImag.text() != "" :
- commentaire=tr("entrer une seule valeur SVP")
- self.editor.afficheInfos(commentaire,Qt.red)
- return
- valeur= self.getValeurComp()
- self.politique.recordValeur(valeur)
- self.reaffiche()
- self.parentQt.donneFocus()
-
- def getValeurRI(self):
- """
- Retourne le complexe saisi par l'utilisateur
- """
- l=[]
- if (self.RBMP.isChecked() == 1 ) :
- l.append("MP")
- elif (self.RBRI.isChecked() == 1) :
- l.append("RI")
- else :
- commentaire=tr("saisir le type de complexe")
- self.editor.afficheInfos(commentaire,Qt.red)
- return None
- try :
- l.append(locale.atof(str(self.LEReel.text())))
- l.append(locale.atof(str(self.LEImag.text())))
- except :
- return None
- return repr(tuple(l))
-
-
+ return None
+ return repr(tuple(l))
from PyQt5.QtCore import QSize
from Extensions.i18n import tr
-from desWidgetSimpFichier import Ui_WidgetSimpFichier
+from desWidgetSimpFichier import Ui_WidgetSimpFichier
from .monWidgetSimpBase import MonWidgetSimpBase
class MonWidgetSimpFichier (Ui_WidgetSimpFichier,MonWidgetSimpBase):
# c est juste la taille des differents widgets de base qui change
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
MonWidgetSimpBase.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
if sys.platform[0:5]!="linux" :
- repIcon=self.node.editor.appliEficas.repIcon
- fichier=os.path.join(repIcon, 'file-explorer.png')
- icon = QIcon(fichier)
- self.BFichier.setIcon(icon)
- self.BFichier.setIconSize(QSize(32, 32))
-
+ repIcon=self.node.editor.appliEficas.repIcon
+ fichier=os.path.join(repIcon, 'file-explorer.png')
+ icon = QIcon(fichier)
+ self.BFichier.setIcon(icon)
+ self.BFichier.setIconSize(QSize(32, 32))
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import types,os
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetSimpSalome import Ui_WidgetSimpSalome
+from desWidgetSimpSalome import Ui_WidgetSimpSalome
from .politiquesValidation import PolitiqueUnique
from .qtSaisie import SaisieValeur
class MonWidgetSimpSalome (Ui_WidgetSimpSalome,Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.parentQt.commandesLayout.insertWidget(-1,self,1)
self.setFocusPolicy(Qt.StrongFocus)
self.maCommande.listeAffichageWidget.append(self.lineEditVal)
- def LEvaleurPressed(self):
- if str(self.lineEditVal.text())=="" or str(self.lineEditVal.text())==None : return
- SaisieValeur.LEvaleurPressed(self)
- self.parentQt.donneFocus()
- self.setValeurs()
- self.reaffiche()
+ def LEvaleurPressed(self):
+ if str(self.lineEditVal.text())=="" or str(self.lineEditVal.text())==None : return
+ SaisieValeur.LEvaleurPressed(self)
+ self.parentQt.donneFocus()
+ self.setValeurs()
+ self.reaffiche()
- def setValeurs(self):
- valeur=self.node.item.getValeur()
- if valeur != None : self.lineEditVal.setText(str(valeur))
+ def setValeurs(self):
+ valeur=self.node.item.getValeur()
+ if valeur != None : self.lineEditVal.setText(str(valeur))
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,os
class MonWidgetSimpTuple(Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
self.parentQt.commandesLayout.insertWidget(-1,self)
self.setFocusPolicy(Qt.StrongFocus)
- def setValeurs(self):
- valeur=self.node.item.getValeur()
- for i in range(self.nbValeurs) :
- nomLineEdit="lineEditVal"+str(i+1)
- courant=getattr(self,nomLineEdit)
- if valeur !=None: courant.setText(str(valeur[i]))
- setattr(self,nomLineEdit,courant)
- courant.returnPressed.connect(self.valeursPressed)
+ def setValeurs(self):
+ valeur=self.node.item.getValeur()
+ for i in range(self.nbValeurs) :
+ nomLineEdit="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLineEdit)
+ if valeur !=None: courant.setText(str(valeur[i]))
+ setattr(self,nomLineEdit,courant)
+ courant.returnPressed.connect(self.valeursPressed)
- def valeursPressed(self):
- aLeFocus=self.focusWidget()
- self.editor.afficheInfos("")
- texteValeur=""
- for i in range(self.nbValeurs) :
- nomLineEdit="lineEditVal"+str(i+1)
- courant=getattr(self,nomLineEdit)
- if courant.text()=="" or courant.text()==None :
- courant.setFocus(True)
- return
- s=str(courant.text())
- if hasattr(self.objSimp.definition.validators, 'typeDesTuples'):
- if self.objSimp.definition.validators.typeDesTuples[i] == "R" :
- if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) :
- s=s+'.0'
- courant.setText(s)
- if self.objSimp.definition.validators.typeDesTuples[i] == "TXM" :
- if s[0]!='"' and s[0] != "'":
- if s[-1]=="'": s="'"+s
- else : s='"'+s
- if s[-1]!='"' and s[-1] != "'":
- if s[0]=="'": s=s+"'"
- else : s=s+'"'
- courant.setText(s)
- texteValeur+=str(courant.text())
- #print (texteValeur)
- if i+1 != self.nbValeurs : texteValeur+=','
- validite,commentaire=self.politique.recordValeur(texteValeur)
- if not validite:self.editor.afficheInfos(commentaire+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
+ def valeursPressed(self):
+ aLeFocus=self.focusWidget()
+ self.editor.afficheInfos("")
+ texteValeur=""
+ for i in range(self.nbValeurs) :
+ nomLineEdit="lineEditVal"+str(i+1)
+ courant=getattr(self,nomLineEdit)
+ if courant.text()=="" or courant.text()==None :
+ courant.setFocus(True)
+ return
+ s=str(courant.text())
+ if hasattr(self.objSimp.definition.validators, 'typeDesTuples'):
+ if self.objSimp.definition.validators.typeDesTuples[i] == "R" :
+ if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) :
+ s=s+'.0'
+ courant.setText(s)
+ if self.objSimp.definition.validators.typeDesTuples[i] == "TXM" :
+ if s[0]!='"' and s[0] != "'":
+ if s[-1]=="'": s="'"+s
+ else : s='"'+s
+ if s[-1]!='"' and s[-1] != "'":
+ if s[0]=="'": s=s+"'"
+ else : s=s+'"'
+ courant.setText(s)
+ texteValeur+=str(courant.text())
+ #print (texteValeur)
+ if i+1 != self.nbValeurs : texteValeur+=','
+ validite,commentaire=self.politique.recordValeur(texteValeur)
+ if not validite:self.editor.afficheInfos(commentaire+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
- # Passage au champ suivant
- nom=aLeFocus.objectName()[11:]
- try :
- i=int(nom)+1
- except :
+ # Passage au champ suivant
+ nom=aLeFocus.objectName()[11:]
try :
- i=i+1
+ i=int(nom)+1
except :
- return
- if i == self.nbValeurs +1 : i=1
- nomLineEdit="lineEditVal"+str(i)
- courant=getattr(self,nomLineEdit)
- courant.setFocus(True)
-
-
+ try :
+ i=i+1
+ except :
+ return
+ if i == self.nbValeurs +1 : i=1
+ nomLineEdit="lineEditVal"+str(i)
+ courant=getattr(self,nomLineEdit)
+ courant.setFocus(True)
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# 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.
-#
-# 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
-#
-# Modules Python
-from __future__ import absolute_import
-import types,os
-
-# Modules Eficas
-#from PyQt4.QtGui import *
-#from PyQt4.QtCore import *
-from Extensions.i18n import tr
-
-from .feuille import Feuille
-from .monWidgetSimpTuple import MonWidgetSimpTuple
-from desWidgetTuple2 import Ui_WidgetTuple2
-
-
-class MonWidgetSimpTuple2 (Ui_WidgetTuple2,MonWidgetSimpTuple):
-
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.nbValeurs=2
- MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- #self.maCommande.listeAffichageWidget.append(self.lineEditVal2)
- if self.objSimp.isImmuable() :
- self.lineEditVal1.setDisabled(True)
- self.lineEditVal2.setDisabled(True)
- self.lineEditVal1.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal2.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
- self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
- else :
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
-
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# 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.
-#
-# 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
-#
-# Modules Python
-from __future__ import absolute_import
-import types,os
-
-# Modules Eficas
-#from PyQt4.QtGui import *
-#from PyQt4.QtCore import *
-from Extensions.i18n import tr
-
-from .feuille import Feuille
-from .monWidgetSimpTuple import MonWidgetSimpTuple
-from desWidgetTuple3 import Ui_WidgetTuple3
-
-
-class MonWidgetSimpTuple3 (Ui_WidgetTuple3,MonWidgetSimpTuple):
-
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.nbValeurs=3
- MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- if self.objSimp.isImmuable() :
- self.lineEditVal1.setDisabled(True)
- self.lineEditVal2.setDisabled(True)
- self.lineEditVal3.setDisabled(True)
- self.lineEditVal1.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal2.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal3.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
- self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
- self.lineEditVal3.setToolTip(tr("Valeur non modifiable"))
- else :
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
- #self.maCommande.listeAffichageWidget.append(self.lineEditVal2)
- #self.maCommande.listeAffichageWidget.append(self.lineEditVal3)
-
from Extensions.i18n import tr
from InterfaceQT4.feuille import Feuille
-from InterfaceQT4.monWidgetSimpTuple import MonWidgetSimpTuple
-from desWidgetTuple2 import Ui_WidgetTuple2
-from desWidgetTuple3 import Ui_WidgetTuple3
-from desWidgetTuple4 import Ui_WidgetTuple4
-from desWidgetTuple5 import Ui_WidgetTuple5
-from desWidgetTuple6 import Ui_WidgetTuple6
-from desWidgetTuple7 import Ui_WidgetTuple7
-from desWidgetTuple8 import Ui_WidgetTuple8
-from desWidgetTuple9 import Ui_WidgetTuple9
+from InterfaceQT4.monWidgetSimpTuple import MonWidgetSimpTuple
+from desWidgetTuple2 import Ui_WidgetTuple2
+from desWidgetTuple3 import Ui_WidgetTuple3
+from desWidgetTuple4 import Ui_WidgetTuple4
+from desWidgetTuple5 import Ui_WidgetTuple5
+from desWidgetTuple6 import Ui_WidgetTuple6
+from desWidgetTuple7 import Ui_WidgetTuple7
+from desWidgetTuple8 import Ui_WidgetTuple8
+from desWidgetTuple9 import Ui_WidgetTuple9
from desWidgetTuple10 import Ui_WidgetTuple10
class MonWidgetSimpTuple2 (Ui_WidgetTuple2,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=2
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
if self.objSimp.isImmuable() :
- self.lineEditVal1.setDisabled(True)
- self.lineEditVal2.setDisabled(True)
- self.lineEditVal1.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal2.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
- self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal1.setDisabled(True)
+ self.lineEditVal2.setDisabled(True)
+ self.lineEditVal1.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
+ self.lineEditVal2.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
+ self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
else :
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
-
+ self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
+
class MonWidgetSimpTuple3 (Ui_WidgetTuple3,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=3
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
if self.objSimp.isImmuable() :
- self.lineEditVal1.setDisabled(True)
- self.lineEditVal2.setDisabled(True)
- self.lineEditVal1.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal2.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
- self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
- self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal1.setDisabled(True)
+ self.lineEditVal2.setDisabled(True)
+ self.lineEditVal3.setDisabled(True)
+ self.lineEditVal1.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
+ self.lineEditVal2.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
+ self.lineEditVal3.setStyleSheet("background:rgb(244,244,244);\n" "border:0px;\n")
+ self.lineEditVal1.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal2.setToolTip(tr("Valeur non modifiable"))
+ self.lineEditVal3.setToolTip(tr("Valeur non modifiable"))
else :
- self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
-
+ self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
+
class MonWidgetSimpTuple4 (Ui_WidgetTuple4,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ #print (self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.nbValeurs=4
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetSimpTuple5 (Ui_WidgetTuple5,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=5
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetSimpTuple6 (Ui_WidgetTuple6,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=6
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetSimpTuple7 (Ui_WidgetTuple7,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=7
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetSimpTuple8 (Ui_WidgetTuple8,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=8
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetSimpTuple9 (Ui_WidgetTuple9,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=9
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
+
class MonWidgetSimpTuple10 (Ui_WidgetTuple10,MonWidgetSimpTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=10
MonWidgetSimpTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
# Modules Eficas
from Extensions.i18n import tr
-from desWidgetSimpTxt import Ui_WidgetSimpTxt
+from desWidgetSimpTxt import Ui_WidgetSimpTxt
from .monWidgetSimpBase import MonWidgetSimpBase
class MonWidgetSimpTxt (Ui_WidgetSimpTxt,MonWidgetSimpBase):
# c est juste la taille des differents widgets de base qui change
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
MonWidgetSimpBase.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-
-
from PyQt5.QtCore import QSize
from InterfaceQT4.feuille import Feuille
-from InterfaceQT4.monWidgetPlusieursTuple import MonWidgetPlusieursTuple
+from InterfaceQT4.monWidgetPlusieursTuple import MonWidgetPlusieursTuple
from desWidgetPlusieursTuple import Ui_WidgetPlusieursTuple
from desWidgetTableau import Ui_WidgetTableau
class MonWidgetTableau (Ui_WidgetTableau,MonWidgetPlusieursTuple):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
self.nbValeurs=len(monSimpDef.homo)
MonWidgetPlusieursTuple.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
-
+
for i in range(len(monSimpDef.homo)):
nomCol='LECol'+str(i+1)
objCol=QLabel(self)
# monObjTitreCol=getattr(self,nomCol)
# monObjTitreCol.setText(monSimpDef.homo[i])
-
+
# for i in range(maxLen-len(monSimpDef.homo)):
# index=i+len(monSimpDef.homo)+1
# nomCol='LECol'+str(index)
# monObjTitreCol=getattr(self,nomCol)
# monObjTitreCol.close()
-
- self.resize(self.width(),1800)
- def ajoutLineEdit(self,valeur=None,inInit=False):
- hauteurAvant=(self.frame.height())
- MonWidgetPlusieursTuple.ajoutLineEdit(self,valeur,inInit)
+ self.resize(self.width(),1800)
+ def ajoutLineEdit(self,valeur=None,inInit=False):
+ hauteurAvant=(self.frame.height())
+ MonWidgetPlusieursTuple.ajoutLineEdit(self,valeur,inInit)
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetUniqueSDCO import Ui_WidgetUniqueSDCO
+from desWidgetUniqueSDCO import Ui_WidgetUniqueSDCO
from .politiquesValidation import PolitiqueUnique
from .qtSaisie import SaisieSDCO
class MonWidgetUniqueSDCO (Ui_WidgetUniqueSDCO,Feuille,SaisieSDCO):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
#print "dans MonWidgetSDCO"
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
valeur = self.node.item.getValeur()
if valeur != "" and valeur != None : self.LESDCO.setText(valeur.nom)
self.connect(self.LESDCO,SIGNAL("returnPressed()"),self.LESDCOReturnPressed)
-
from Extensions.i18n import tr
from .feuille import Feuille
-from desWidgetVide import Ui_WidgetVide
+from desWidgetVide import Ui_WidgetVide
from InterfaceQT4.politiquesValidation import PolitiqueUnique
class MonWidgetVide (Ui_WidgetVide,Feuille):
- def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
-
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
t=self.node.item.object.definition.type[0].__name__
# Modules Python
from __future__ import absolute_import
try :
- from builtins import range
+ from builtins import range
except : pass
import types
#------------------
class Validation(object) :
#------------------
- def __init__(self,node,parent) :
- self.node=node
- self.parent=parent
-
+ def __init__(self,node,parent) :
+ self.node=node
+ self.parent=parent
- def testeUneValeur(self,valeurentree):
- commentaire = None
- #import traceback
- #traceback.print_stack()
- valeur,validite=self.node.item.evalValeur(valeurentree)
- if not validite :
- commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
- return valeur,validite,commentaire
- if self.node.item.waitTxm() and not( type(valeur) == str) : valeur=str(valeur)
- testtype,commentaire = self.node.item.object.verifType(valeur)
- if not testtype :
- return valeur,0,commentaire
+ def testeUneValeur(self,valeurentree):
+ commentaire = None
+ #import traceback
+ #traceback.print_stack()
+ valeur,validite=self.node.item.evalValeur(valeurentree)
+ if not validite :
+ commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
+ return valeur,validite,commentaire
+ if self.node.item.waitTxm() and not( type(valeur) == str) : valeur=str(valeur)
- valide=self.node.item.valideItem(valeur)
- if type(valide) == tuple:
- validite,commentaire=valide
- else :
- validite=valide
- commentaire=" "
+ testtype,commentaire = self.node.item.object.verifType(valeur)
+ if not testtype :
+ return valeur,0,commentaire
- if not validite and commentaire is None:
- commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
- #print ('ds testeUneValeur', valeur, validite, commentaire)
- return valeur, validite, commentaire
+ valide=self.node.item.valideItem(valeur)
+ if type(valide) == tuple:
+ validite,commentaire=valide
+ else :
+ validite=valide
+ commentaire=" "
+
+ if not validite and commentaire is None:
+ commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
+ #print ('ds testeUneValeur', valeur, validite, commentaire)
+ return valeur, validite, commentaire
# ----------------------------------------------------------------------------------------
# Methodes utilisees pour la manipulation des items en notation scientifique
# a mettre au point
# ----------------------------------------------------------------------------------------
- def setValeurTexte(self,texteValeur) :
- try :
- if "R" in self.node.item.object.definition.type:
- if texteValeur[0] != "'":
- clef=eval(texteValeur)
- if str(clef) != str(texteValeur) :
- self.node.item.object.initModif()
- clefobj=self.node.item.object.getNomConcept()
- if not clefobj in self.parent.appliEficas.dict_reels:
- self.parent.appliEficas.dict_reels[clefobj] = {}
- self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
- self.parent.appliEficas.dict_reels[clefobj]
- if clefobj=="" :
- if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
- self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
- self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
- self.node.item.object.finModif()
- except:
+ def setValeurTexte(self,texteValeur) :
+ try :
+ if "R" in self.node.item.object.definition.type:
+ if texteValeur[0] != "'":
+ clef=eval(texteValeur)
+ if str(clef) != str(texteValeur) :
+ self.node.item.object.initModif()
+ clefobj=self.node.item.object.getNomConcept()
+ if not clefobj in self.parent.appliEficas.dict_reels:
+ self.parent.appliEficas.dict_reels[clefobj] = {}
+ self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
+ self.parent.appliEficas.dict_reels[clefobj]
+ if clefobj=="" :
+ if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
+ self.node.item.object.finModif()
+ except:
pass
- def getValeurTexte(self,valeur) :
- valeurTexte=valeur
- if valeur == None : return valeur
- from decimal import Decimal
- if isinstance(valeur,Decimal) :
- if self.node.waitTxm() and not self.isParam(valeur) : return "'"+str(valeur)+"'"
- else : return(valeur)
- if "R" in self.node.item.object.definition.type:
- clefobj=self.node.item.object.getNomConcept()
- if clefobj in self.parent.appliEficas.dict_reels:
- if valeur in self.parent.appliEficas.dict_reels[clefobj] :
- valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
- else :
- if str(valeur).find('.') == -1 and str(valeur).find('e') == -1 and str(valeur).find('E'):
- # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
- if (self.isParam(valeur)):
- return valeur
- else:
- try :
+ def getValeurTexte(self,valeur) :
+ valeurTexte=valeur
+ if valeur == None : return valeur
+ from decimal import Decimal
+ if isinstance(valeur,Decimal) :
+ if self.node.waitTxm() and not self.isParam(valeur) : return "'"+str(valeur)+"'"
+ else : return(valeur)
+ if "R" in self.node.item.object.definition.type:
+ clefobj=self.node.item.object.getNomConcept()
+ if clefobj in self.parent.appliEficas.dict_reels:
+ if valeur in self.parent.appliEficas.dict_reels[clefobj] :
+ valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
+ else :
+ if str(valeur).find('.') == -1 and str(valeur).find('e') == -1 and str(valeur).find('E'):
+ # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
+ if (self.isParam(valeur)):
+ return valeur
+ else:
+ try :
val2=eval(str(valeur)+'.')
- except :
+ except :
pass
- return valeurTexte
+ return valeurTexte
- def isParam(self,valeur) :
- for param in self.node.item.jdc.params:
- if ((repr(param) == repr(valeur)) or (str(param)==str(valeur))):
- return 1
- return 0
+ def isParam(self,valeur) :
+ for param in self.node.item.jdc.params:
+ if ((repr(param) == repr(valeur)) or (str(param)==str(valeur))):
+ return 1
+ return 0
- def ajoutDsDictReel(self,texteValeur):
- # le try except est necessaire pour saisir les parametres
- # on enleve l erreur de saisie 00 pour 0
- if str(texteValeur)== '00' : return
- try :
+ def ajoutDsDictReel(self,texteValeur):
+ # le try except est necessaire pour saisir les parametres
+ # on enleve l erreur de saisie 00 pour 0
+ if str(texteValeur)== '00' : return
+ try :
if "R" in self.node.item.object.definition.type:
if str(texteValeur)[0] != "'":
- clef=eval(texteValeur)
- if str(clef) != str(texteValeur) :
- clefobj=self.node.item.object.getNomConcept()
- if not clefobj in self.parent.appliEficas :
- self.parent.appliEficas.dict_reels[clefobj] = {}
- self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
- if clefobj=="" :
- if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
- self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
- self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
-
- except:
- pass
+ clef=eval(texteValeur)
+ if str(clef) != str(texteValeur) :
+ clefobj=self.node.item.object.getNomConcept()
+ if not clefobj in self.parent.appliEficas :
+ self.parent.appliEficas.dict_reels[clefobj] = {}
+ self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
+ if clefobj=="" :
+ if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
- def ajoutDsDictReelEtape(self):
- try:
- if self.node.item.object in self.parent.appliEficas.dict_reels:
- self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
- del self.parent.appliEficas.dict_reels[self.node.item.object]
- except :
- pass
+ except:
+ pass
+
+ def ajoutDsDictReelEtape(self):
+ try:
+ if self.node.item.object in self.parent.appliEficas.dict_reels:
+ self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
+ del self.parent.appliEficas.dict_reels[self.node.item.object]
+ except :
+ pass
#------------------------------------
class PolitiqueUnique(Validation) :
#------------------------------------
- """
- classe servant pour les entrees ne demandant qu un mot clef
- """
- def __init__(self,node,parent):
+ """
+ classe servant pour les entrees ne demandant qu un mot clef
+ """
+ def __init__(self,node,parent):
Validation.__init__(self,node,parent)
- def recordValeur(self,valeurentree):
- if self.parent.modified == 'n' : self.parent.initModif()
- ancienneVal = self.node.item.getValeur()
- valeur,validite,commentaire =self.testeUneValeur(valeurentree)
- if validite and ('R' in self.node.item.object.definition.type) and not(isinstance(valeur,PARAMETRE)) :
+ def recordValeur(self,valeurentree):
+ if self.parent.modified == 'n' : self.parent.initModif()
+ ancienneVal = self.node.item.getValeur()
+ valeur,validite,commentaire =self.testeUneValeur(valeurentree)
+ if validite and ('R' in self.node.item.object.definition.type) and not(isinstance(valeur,PARAMETRE)) :
s=valeurentree
if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.'
valeur,validite,commentaire =self.testeUneValeur(s)
- if validite :
+ if validite :
validite=self.node.item.setValeur(valeur)
if self.node.item.isValid():
- commentaire = tr("Valeur du mot-cle enregistree")
- #commentaire = "Valeur du mot-cle enregistree"
- self.setValeurTexte(str(valeurentree))
+ commentaire = tr("Valeur du mot-cle enregistree")
+ #commentaire = "Valeur du mot-cle enregistree"
+ self.setValeurTexte(str(valeurentree))
else:
- cr = self.node.item.getCr()
- commentaire = tr("Valeur du mot-cle non autorisee ")+cr.getMessFatal()
- self.node.item.setValeur(ancienneVal)
- return validite, commentaire
+ cr = self.node.item.getCr()
+ commentaire = tr("Valeur du mot-cle non autorisee ")+cr.getMessFatal()
+ self.node.item.setValeur(ancienneVal)
+ return validite, commentaire
+
-
#--------------------------------------
class PolitiquePlusieurs(Validation):
#--------------------------------------
- """
- classe servant pour les entrees ne demandant qu un mot clef
- """
- def __init__(self,node,parent) :
- #print "ds PolitiquePlusieurs"
- self.node=node
- self.parent=parent
- #print self.node
- #print self.parent
+ """
+ classe servant pour les entrees ne demandant qu un mot clef
+ """
+ def __init__(self,node,parent) :
+ #print "ds PolitiquePlusieurs"
+ self.node=node
+ self.parent=parent
+ #print self.node
+ #print self.parent
- def ajoutValeurs(self,listevaleur,index,listecourante):
- listeRetour=[]
- commentaire="Nouvelle valeur acceptee"
- commentaire2=""
- valide=1
- if listevaleur==None: return
- if listevaleur=="": return
- if not( type(listevaleur) in (list,tuple)) :
+ def ajoutValeurs(self,listevaleur,index,listecourante):
+ listeRetour=[]
+ commentaire="Nouvelle valeur acceptee"
+ commentaire2=""
+ valide=1
+ if listevaleur==None: return
+ if listevaleur=="": return
+ if not( type(listevaleur) in (list,tuple)) :
listevaleur=tuple(listevaleur)
- # on verifie que la cardinalite max n a pas ete atteinte
- min,max = self.node.item.getMinMax()
- if len(listecourante) + len(listevaleur) > max :
+ # on verifie que la cardinalite max n a pas ete atteinte
+ min,max = self.node.item.getMinMax()
+ if len(listecourante) + len(listevaleur) > max :
commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
return False,commentaire,commentaire2,listeRetour
- for valeur in listevaleur :
- # On teste le type de la valeur
- valeurScientifique=valeur
- valide=self.node.item.valideItem(valeur)
- if not valide :
+ for valeur in listevaleur :
+ # On teste le type de la valeur
+ valeurScientifique=valeur
+ valide=self.node.item.valideItem(valeur)
+ if not valide :
try :
- valeur,valide=self.node.item.evalValeur(valeur)
- valide,commentaire2 = self.node.item.object.verifType(valeur)
+ valeur,valide=self.node.item.evalValeur(valeur)
+ valide,commentaire2 = self.node.item.object.verifType(valeur)
except :
- #return testtype,commentaire,"",listeRetour
- pass
- if not valide:
+ #return testtype,commentaire,"",listeRetour
+ pass
+ if not valide:
if commentaire.find("On attend un chaine") > 1 :
- commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse: On attend une chaine de caracteres < 8"
+ commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse: On attend une chaine de caracteres < 8"
else :
- commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse"
+ commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse"
if commentaire2== "" :commentaire2=self.node.item.infoErreurItem()
return valide,commentaire,commentaire2,listeRetour
- # On valide la liste obtenue
- encorevalide=self.node.item.valideListePartielle(valeur,listecourante)
- if not encorevalide :
+ # On valide la liste obtenue
+ encorevalide=self.node.item.valideListePartielle(valeur,listecourante)
+ if not encorevalide :
commentaire2=self.node.item.infoErreurListe()
# On traite le cas ou la liste n est pas valide pour un pb de cardinalite
min,max = self.node.item.getMinMax()
if len(listecourante) + 1 >= max :
- commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
- return valide,commentaire,commentaire2,listeRetour
+ commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
+ return valide,commentaire,commentaire2,listeRetour
if len(listecourante) + 1 > min :
- commentaire=""
- return valide,commentaire,commentaire2,listeRetour
- # On ajoute la valeur testee a la liste courante et a la liste acceptee
- self.ajoutDsDictReel(valeurScientifique)
- listecourante.insert(index,valeur)
- index=index+1
- listeRetour.append(valeur)
+ commentaire=""
+ return valide,commentaire,commentaire2,listeRetour
+ # On ajoute la valeur testee a la liste courante et a la liste acceptee
+ self.ajoutDsDictReel(valeurScientifique)
+ listecourante.insert(index,valeur)
+ index=index+1
+ listeRetour.append(valeur)
- return valide,commentaire,commentaire2,listeRetour
+ return valide,commentaire,commentaire2,listeRetour
- def ajoutTuple(self,valeurTuple,listecourante):
- listeRetour=[]
- commentaire="Nouvelle valeur acceptee"
- commentaire2=""
- valide=1
- if valeurTuple==None: return
- if valeurTuple==['']: return
- # On teste le type de la valeur
- valide=self.node.item.valideItem(valeurTuple)
- if not valide :
+ def ajoutTuple(self,valeurTuple,listecourante):
+ listeRetour=[]
+ commentaire="Nouvelle valeur acceptee"
+ commentaire2=""
+ valide=1
+ if valeurTuple==None: return
+ if valeurTuple==['']: return
+ # On teste le type de la valeur
+ valide=self.node.item.valideItem(valeurTuple)
+ if not valide :
try :
valeur,valide=self.node.item.evalValeur(valeurTuple)
valide = self.node.item.valideItem(valeur)
except :
pass
- if not valide:
+ if not valide:
commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout a la liste refuse"
commentaire2=self.node.item.infoErreurItem()
return valide,commentaire,commentaire2,listeRetour
- # On valide la liste obtenue
- encorevalide=self.node.item.valideListePartielle(valeurTuple,listecourante)
- if not encorevalide :
+ # On valide la liste obtenue
+ encorevalide=self.node.item.valideListePartielle(valeurTuple,listecourante)
+ if not encorevalide :
commentaire2=self.node.item.infoErreurListe()
return valide,commentaire,commentaire2,listeRetour
- listeRetour.append(valeurTuple)
- return valide,commentaire,commentaire2,listeRetour
+ listeRetour.append(valeurTuple)
+ return valide,commentaire,commentaire2,listeRetour
- def ajoutNTuple(self,liste):
- commentaire="Nouvelles valeurs acceptee"
- commentaire2=""
- valide=self.node.item.valideListePartielle(None,liste)
- print ('uuuuuuuuuuu',valide)
- if not valide :
+ def ajoutNTuple(self,liste):
+ commentaire="Nouvelles valeurs acceptee"
+ commentaire2=""
+ valide=self.node.item.valideListePartielle(None,liste)
+ print ('uuuuuuuuuuu',valide)
+ if not valide :
commentaire2=self.node.item.infoErreurListe()
- return valide,commentaire,commentaire2
+ return valide,commentaire,commentaire2
- def recordValeur(self,liste,dejaValide=True):
- ancienneVal = self.node.item.getValeur()
- validite=self.node.item.setValeur(liste)
- if validite : self.node.item.initModif()
- if self.node.item.isValid():
+ def recordValeur(self,liste,dejaValide=True):
+ ancienneVal = self.node.item.getValeur()
+ validite=self.node.item.setValeur(liste)
+ if validite : self.node.item.initModif()
+ if self.node.item.isValid():
commentaire = tr("Valeur du mot-cle enregistree")
- else:
+ else:
cr = self.node.item.getCr()
commentaire = tr("Valeur du mot-cle non autorisee ")+cr.getMessFatal()
self.node.item.setValeur(ancienneVal)
- return validite, commentaire
-
-
+ return validite, commentaire
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import os, sys
"""
Class implementing the main user interface.
"""
- def __init__(self,code=None,salome=1,parent=None, multi=False,langue='fr',ssIhm=False, labelCode=None):
+ def __init__(self,code=None,salome=1,parent=None, multi=False,langue='en',ssIhm=False, labelCode=None):
"""
Constructor
"""
- if ssIhm == True :
- print ('mauvaise utilisation de la classe Appli. Utiliser AppliSsIm SVP')
- exit()
+ if ssIhm == True :
+ print ('mauvaise utilisation de la classe Appli. Utiliser AppliSsIm SVP')
+ exit()
AppliSsIhm.__init__(self,code,salome,parent,multi=multi,langue=langue,ssIhm=True, labelCode=labelCode)
QMainWindow.__init__(self,parent)
if self.multi == False :
- self.definitCode(code,None)
- if code==None: return
+ self.definitCode(code,None)
+ if code==None: return
else :
- self.definitCode(code,None)
- if code==None: return
- print ('il faut trouver le chemin du code')
- return
+ self.definitCode(code,None)
+ if code==None: return
+ print ('il faut trouver le chemin du code')
+ return
self.suiteTelemac=False
if hasattr (self, 'maConfiguration') :
- if self.maConfiguration.demandeLangue :
- from InterfaceQT4.monChoixLangue import MonChoixLangue
- widgetLangue = MonChoixLangue(self)
- ret=widgetLangue.exec_()
- self.suiteTelemac=self.maConfiguration.suiteTelemac
+ if self.maConfiguration.demandeLangue :
+ from InterfaceQT4.monChoixLangue import MonChoixLangue
+ widgetLangue = MonChoixLangue(self)
+ ret=widgetLangue.exec_()
+ self.suiteTelemac=self.maConfiguration.suiteTelemac
if not self.salome and hasattr (self, 'maConfiguration') and hasattr(self.maConfiguration,'lang') : self.langue=self.maConfiguration.lang
#else : self.parentCentralWidget = None
if not self.salome :
- if hasattr (self, 'maConfiguration') and hasattr(self.maConfiguration,'taille') : self.taille=self.maConfiguration.taille
- else : self.taille=1700
+ if hasattr (self, 'maConfiguration') and hasattr(self.maConfiguration,'taille') : self.taille=self.maConfiguration.taille
+ else : self.taille=1700
- self.resize(self.taille,self.height())
+ self.resize(self.taille,self.height())
icon = QIcon(self.repIcon+"/parametres.png")
self.actionParametres.setIcon(icon)
- if hasattr (self, 'maConfiguration') and self.maConfiguration.boutonDsMenuBar :
- self.frameEntete.setMaximumSize(QSize(16777215,100))
- self.frameEntete.setMinimumSize(QSize(0,100))
- if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverActionStructures :
+ if hasattr (self, 'maConfiguration') and self.maConfiguration.boutonDsMenuBar :
+ self.frameEntete.setMaximumSize(QSize(16777215,100))
+ self.frameEntete.setMinimumSize(QSize(0,100))
+ if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverActionStructures :
self.enleverActionsStructures()
- if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverParametres :
+ if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverParametres :
self.enleverParametres()
- if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverSupprimer :
+ if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverSupprimer :
self.enleverSupprimer()
self.blEnteteGlob.insertLayout(0,self.blEntete)
-
- if hasattr (self, 'maConfiguration') and self.maConfiguration.boutonDsMenuBar :
+
+ if hasattr (self, 'maConfiguration') and self.maConfiguration.boutonDsMenuBar :
self.blEnteteCommmande = QBoxLayout(0)
self.blEnteteCommmande.insertWidget(0,self.toolBarCommande)
self.toolBarCommande.setIconSize(QSize(96,96))
self.blEnteteGlob.insertLayout(-1,self.blEnteteCommmande)
else :
self.toolBarCommande.close()
-
+
if hasattr (self, 'maConfiguration') and self.maConfiguration.closeEntete==True and self.salome: self.closeEntete()
try :
#if 1 :
#print ('attention try devient if 1')
- self.ouvreFichiers()
+ self.ouvreFichiers()
except EficasException as exc:
#except:
- print ("je suis dans le except")
- if self.salome == 0 : exit()
+ print ("je suis dans le except")
+ if self.salome == 0 : exit()
#self.adjustSize()
self.code=code
self.ssCode=ssCode
if self.code==None :
- self.cleanPath()
- from InterfaceQT4.monChoixCode import MonChoixCode
- widgetChoix = MonChoixCode(self)
- ret=widgetChoix.exec_()
- #widgetChoix.show()
+ self.cleanPath()
+ from InterfaceQT4.monChoixCode import MonChoixCode
+ widgetChoix = MonChoixCode(self)
+ ret=widgetChoix.exec_()
+ #widgetChoix.show()
if self.code == None:return # pour le cancel de la fenetre choix code
AppliSsIhm.definitCode(self,self.code,ssCode)
self.initRecents()
self.initAides()
for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
- if hasattr(self,intituleMenu):
- menu=getattr(self,intituleMenu)
- menu.setAttribute(Qt.WA_DeleteOnClose)
- menu.close()
- delattr(self,intituleMenu)
+ if hasattr(self,intituleMenu):
+ menu=getattr(self,intituleMenu)
+ menu.setAttribute(Qt.WA_DeleteOnClose)
+ menu.close()
+ delattr(self,intituleMenu)
for intituleAction in ("actionExecution","actionSaveRun"):
if hasattr(self,intituleAction):
- action=getattr(self,intituleAction)
- self.toolBar.removeAction(action)
+ action=getattr(self,intituleAction)
+ self.toolBar.removeAction(action)
if self.code.upper() in Appli.__dict__:
- Appli.__dict__[self.code.upper()](self,)
+ Appli.__dict__[self.code.upper()](self,)
if self.suiteTelemac : self.lookSuiteTelemac()
self.metMenuAJourUtilisateurs()
- if hasattr (self, 'maConfiguration') and self.maConfiguration.ajoutExecution :
+ if hasattr (self, 'maConfiguration') and self.maConfiguration.ajoutExecution :
self.ajoutExecution()
def initAides(self):
self.fileDoc=os.path.join(self.docPath,fileName)
self.actionCode.setText(tr("Aide specifique ")+str(self.code))
if not os.path.isfile(self.fileDoc) :
- self.fileDoc=""
- self.docPath=""
- self.actionCode.setEnabled(False)
- return
+ self.fileDoc=""
+ self.docPath=""
+ self.actionCode.setEnabled(False)
+ return
self.actionCode.setEnabled(True)
self.menuAide.addAction(self.actionCode)
self.menuExecution = self.menubar.addMenu(tr("&Run"))
self.actionExecution = QAction(self)
if sys.platform[0:5]=="linux":
- icon6 = QIcon(self.repIcon+"/roue.png")
- self.actionExecution.setIcon(icon6)
+ icon6 = QIcon(self.repIcon+"/roue.png")
+ self.actionExecution.setIcon(icon6)
else :
- self.actionExecution.setText(tr("Run"))
+ self.actionExecution.setText(tr("Run"))
self.actionExecution.setObjectName("actionExecution")
self.menuExecution.addAction(self.actionExecution)
if not(self.actionExecution in self.toolBar.actions()):
- self.toolBar.addAction(self.actionExecution)
+ self.toolBar.addAction(self.actionExecution)
self.actionExecution.setText(tr("Run"))
self.actionExecution.triggered.connect(self.run)
self.actionSaveRun.setObjectName("actionSaveRun")
self.menuExecution.addAction(self.actionSaveRun)
if not(self.actionSaveRun in self.toolBar.actions()):
- self.toolBar.addAction(self.actionSaveRun)
+ self.toolBar.addAction(self.actionSaveRun)
self.actionSaveRun.setText(tr("Save Run"))
self.actionSaveRun.triggered.connect(self.saveRun)
def ChercheGrpMesh(self):
Msg,listeGroup=self.ChercheGrpMeshInSalome()
if Msg == None :
- self.viewmanager.handleAjoutGroup(listeGroup)
+ self.viewmanager.handleAjoutGroup(listeGroup)
else :
- print ("il faut gerer les erreurs")
+ print ("il faut gerer les erreurs")
def ChercheGrpMaille(self):
# Normalement la variable self.salome permet de savoir si on est ou non dans Salome
except:
raise ValueError('Salome non ouvert')
if Msg == None :
- self.viewmanager.handleAjoutGroup(listeGroup)
+ self.viewmanager.handleAjoutGroup(listeGroup)
else :
- print ("il faut gerer les erreurs")
+ print ("il faut gerer les erreurs")
def ChercheGrp(self):
# Mise a jour du menu des fichiers recemment ouverts
from Editeur import listePatrons
if not(self.code in listePatrons.sous_menus) :
- if hasattr(self,"menuPatrons"):
- self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
- self.menuPatrons.close()
- delattr(self,"menuPatrons")
- return
+ if hasattr(self,"menuPatrons"):
+ self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
+ self.menuPatrons.close()
+ delattr(self,"menuPatrons")
+ return
if (not hasattr(self,"menuPatrons")):
- self.menuPatrons = QMenu(self.menubar)
- self.menuPatrons.setObjectName("menuPatrons")
- self.menubar.addAction(self.menuPatrons.menuAction())
- self.menuPatrons.setTitle(tr("Patrons"))
+ self.menuPatrons = QMenu(self.menubar)
+ self.menuPatrons.setObjectName("menuPatrons")
+ self.menubar.addAction(self.menuPatrons.menuAction())
+ self.menuPatrons.setTitle(tr("Patrons"))
else :
- self.menuPatrons.clear()
+ self.menuPatrons.clear()
self.listePatrons = listePatrons.listePatrons(self.code)
idx = 0
for nomSsMenu in self.listePatrons.liste:
ssmenu=self.menuPatrons.addMenu(nomSsMenu)
for fichier in self.listePatrons.liste[nomSsMenu]:
- id = ssmenu.addAction(fichier)
- self.ficPatrons[id]=fichier
- self.id.triggered.connect(self.handleOpenPatrons)
+ id = ssmenu.addAction(fichier)
+ self.ficPatrons[id]=fichier
+ self.id.triggered.connect(self.handleOpenPatrons)
# self.Patrons.setItemParameter(id,idx)
- idx=idx+1
+ idx=idx+1
def initRecents(self):
- self.recent = []
- try :
- #if sys.platform[0:5]=="linux" :
- #rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
- rep=os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
- #else :
- # rep=os.path.join('C:/','.config/Eficas',self.code)
- monFichier=rep+"/listefichiers_"+self.code
- index=0
- f=open(monFichier)
- while ( index < 9) :
- ligne=f.readline()
- if ligne != "" :
- l=(ligne.split("\n"))[0]
- self.recent.append(l)
- index=index+1
- except :
- pass
-
- try : f.close()
- except : pass
+ self.recent = []
+ try :
+ #if sys.platform[0:5]=="linux" :
+ #rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
+ rep=os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
+ #else :
+ # rep=os.path.join('C:/','.config/Eficas',self.code)
+ monFichier=rep+"/listefichiers_"+self.code
+ index=0
+ f=open(monFichier)
+ while ( index < 9) :
+ ligne=f.readline()
+ if ligne != "" :
+ l=(ligne.split("\n"))[0]
+ self.recent.append(l)
+ index=index+1
+ except :
+ pass
+
+ try : f.close()
+ except : pass
def addToRecentList(self, fn):
- while fn in self.recent: self.recent.remove(fn)
- self.recent.insert(0,fn)
- if len(self.recent) > 9:
- self.recent = self.recent[:9]
+ while fn in self.recent: self.recent.remove(fn)
+ self.recent.insert(0,fn)
+ if len(self.recent) > 9:
+ self.recent = self.recent[:9]
def addToRecentListQT4(self, fn):
self.sauveRecents()
def sauveRecents(self) :
- try :
- rep=self.maConfiguration.rep_user
- monFichier=rep+"/listefichiers_"+self.code
- except :
- return
- try :
+ try :
+ rep=self.maConfiguration.rep_user
+ monFichier=rep+"/listefichiers_"+self.code
+ except :
+ return
+ try :
f=open(monFichier,'w')
if len(self.recent) == 0 : return
index=0
while ( index < len(self.recent)):
- ligne=str(self.recent[index])+"\n"
- f.write(ligne)
- index=index+1
- except :
+ ligne=str(self.recent[index])+"\n"
+ f.write(ligne)
+ index=index+1
+ except :
pass
- try :
+ try :
f.close()
- except :
+ except :
pass
repAide=os.path.dirname(os.path.abspath(__file__))
maD=os.path.join( repAide,'..','Doc')
try :
- indexAide=os.path.join(maD,'index.html')
- if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
- else : cmd="start "+indexAide
- os.system(cmd)
+ indexAide=os.path.join(maD,'index.html')
+ if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
+ else : cmd="start "+indexAide
+ os.system(cmd)
except:
- QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
+ QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
def aidePSEN(self) :
repAide=os.path.dirname(os.path.abspath(__file__))
maD=os.path.join( repAide,'..','Doc')
try :
- indexAide=os.path.join(maD,'index.html')
- if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
- else : cmd="start "+indexAide
- os.system(cmd)
+ indexAide=os.path.join(maD,'index.html')
+ if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
+ else : cmd="start "+indexAide
+ os.system(cmd)
except:
- QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
+ QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
def aideCode(self) :
if self.code==None : return
try :
#if 1 :
- if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
- else : cmd="start "+self.fileDoc
- os.system(cmd)
+ if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
+ else : cmd="start "+self.fileDoc
+ os.system(cmd)
except:
#else:
- QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
+ QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
def optionEditeur(self) :
try :
- name='monOptions_'+self.code
+ name='monOptions_'+self.code
except :
- QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
- return
+ QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
+ return
try :
#if 1:
- optionCode=__import__(name)
+ optionCode=__import__(name)
except :
#else :
- QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
- return
+ QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
+ return
monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.maConfiguration)
monOption.show()
def cleanPath(self):
for pathCode in self.ListePathCode:
try:
- aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
- sys.path.remove(aEnlever)
+ aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
+ sys.path.remove(aEnlever)
except :
- pass
+ pass
for pathCode in self.listeAEnlever:
try:
- sys.path.remove(aEnlever)
+ sys.path.remove(aEnlever)
except :
- pass
+ pass
def closeEvent(self,event):
- res=self.fileExit()
- if res==2 : event.ignore()
+ res=self.fileExit()
+ if res==2 : event.ignore()
+
-
def remplitIconesCommandes(self):
if self.maConfiguration.boutonDsMenuBar == False : return
if not hasattr(self, 'readercata') : return
from monLayoutBouton import MonLayoutBouton
if hasattr(self,'monLayoutBoutonRempli') : return
self.monLayoutBoutonRempli=MonLayoutBouton(self)
-
+
def handleAjoutEtape(self,nomEtape):
self.viewmanager.handleAjoutEtape(nomEtape)
-
+
def metMenuAJourUtilisateurs(self):
self.lesFonctionsUtilisateurs={}
if self.code not in self.mesScripts : return
self.menuOptions = self.menubar.addMenu("menuOptions")
self.menuOptions.setTitle(tr(titre))
for elt in lesFonctions :
- laFonctionUtilisateur, label, lesArguments = elt
- action = QAction(self)
- action.setText(label)
+ laFonctionUtilisateur, label, lesArguments = elt
+ action = QAction(self)
+ action.setText(label)
#action.triggered.connect(self.appelleFonctionUtilisateur)
- self.menuOptions.addAction(action)
- self.lesFonctionsUtilisateurs[action]=(laFonctionUtilisateur, lesArguments)
+ self.menuOptions.addAction(action)
+ self.lesFonctionsUtilisateurs[action]=(laFonctionUtilisateur, lesArguments)
self.menuOptions.triggered.connect(self.handleFonctionUtilisateur)
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import os, sys
from Extensions.eficas_exception import EficasException
from Extensions import param2
-
from InterfaceQT4.getVersion import getEficasVersion
from InterfaceQT4.viewManagerSsIhm import MyViewManagerSsIhm
-
from Editeur import session
self.ssIhm=True
self.code=code
self.genereXSD=genereXSD
+ self.versionCode=versionCode
+ self.ssCode=ssCode
self.dict_reels={}
self.fichierIn=None
self.listeCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
- self.fichierCata=session.d_env.fichierCata
+ if fichierCata== None: self.fichierCata=session.d_env.fichierCata
+ else : self.fichierCata=fichierCata
if session.d_env.labelCode : self.labelCode=session.d_env.labelCode
self.withXSD=session.d_env.withXSD
if self.salome:
- import Accas
- try :
- import eficasSalome
- Accas.SalomeEntry = eficasSalome.SalomeEntry
- except :
- print ('eficas hors salome')
+ import Accas
+ try :
+ import eficasSalome
+ Accas.SalomeEntry = eficasSalome.SalomeEntry
+ except :
+ print ('eficas hors salome')
self.multi=multi
- if self.multi :
- print ('pas de multi sans ihm')
+ if self.multi :
+ print ('pas de multi sans ihm')
if langue=='fr': self.langue=langue
else : self.langue="ang"
if self.multi == False :
- self.definitCode(code,None)
- if code==None: return
+ self.definitCode(code,ssCode)
+ if code==None: return
self.suiteTelemac=False
self.viewmanager=MyViewManagerSsIhm(self)
self.ssCode=ssCode
if self.code == None:return # pour le cancel de la fenetre choix code
- try :
- name='prefs_'+self.code
- prefsCode=__import__(name)
- self.repIni=prefsCode.repIni
- except :
- self.repIni=os.path.dirname(os.path.abspath(__file__))
-
+ try :
+ name='prefs_'+self.code
+ prefsCode=__import__(name)
+ self.repIni=prefsCode.repIni
+ except :
+ self.repIni=os.path.dirname(os.path.abspath(__file__))
+
if ssCode != None :
- self.formatFichierOut = ssCode #par defaut
- prefsCode.NAME_SCHEME = ssCode
+ self.formatFichierOut = ssCode #par defaut
+ prefsCode.NAME_SCHEME = ssCode
else :
- self.formatFichierIn = "python" #par defaut
- self.formatFichierOut = "python" #par defaut
+ self.formatFichierIn = "python" #par defaut
+ self.formatFichierOut = "python" #par defaut
nameConf='configuration_'+self.code
try :
- configuration=__import__(nameConf)
- self.maConfiguration = configuration.make_config(self,self.repIni)
+ configuration=__import__(nameConf)
+ self.maConfiguration = configuration.make_config(self,self.repIni)
except :
- from InterfaceQT4.configuration import makeConfig
- #self.maConfiguration = configuration.makeConfig(self,prefsCode.repIni)
- self.maConfiguration = makeConfig(self,self.repIni)
+ from InterfaceQT4.configuration import makeConfig
+ #self.maConfiguration = configuration.makeConfig(self,prefsCode.repIni)
+ self.maConfiguration = makeConfig(self,self.repIni)
if hasattr (self,'maConfiguration') and self.maConfiguration.translatorFichier :
- from Extensions import localisation
- localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
+ from Extensions import localisation
+ localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
if self.withXSD : self.maConfiguration.withXSD=True
def initEditor(self,fichier = None,jdc = None, units = None,include=0):
- if (hasattr(self, 'editor')) and self.editor != None :
- print ('un seul editeur par application')
- sys.exit()
+ if (hasattr(self, 'editor')) and self.editor != None :
+ print ('un seul editeur par application')
+ sys.exit()
self.editor = self.viewmanager.getNewEditorNormal()
-
+
def initEditorNormal(self,fichier = None,jdc = None, units = None,include=0):
- if (hasattr(self, 'editor')) and self.editor != None :
- print ('un seul editeur par application')
- sys.Exit()
+ if (hasattr(self, 'editor')) and self.editor != None :
+ print ('un seul editeur par application')
+ sys.Exit()
#self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include)
self.editor = self.viewmanager.getNewEditorNormal()
-
+
def fileNew(self):
self.editor=self.initEditor()
print ('ok ',ok)
def dumpXsd(self, avecEltAbstrait = False):
- current_cata = CONTEXT.getCurrentCata()
- texteXSD = current_cata.dumpXsd( avecEltAbstrait)
+ currentCata = CONTEXT.getCurrentCata()
+ texteXSD = currentCata.dumpXsd( avecEltAbstrait)
return texteXSD
#if self.maConfiguration.afficheIhm==False : exit()
#else : return texteXSD
+
#,self.fileSaveAs
#,self.fileClose
#,self.fileExit
#,self.jdcRegles
#,self.jdcFichierSource
#,self.visuJdcPy
-
+
if __name__=='__main__':
from Extensions.eficas_exception import EficasException
from Editeur import session
-import Accas
+import Accas
class Appli(Ui_Eficas,QMainWindow):
if langue=='fr': self.langue=langue
else : self.langue="ang"
if self.multi == False :
- self.definitCode(code,ssCode)
- if code==None: return
+ self.definitCode(code,ssCode)
+ if code==None: return
eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
self.ajoutIcones()
self.code=code
self.ssCode=ssCode
if self.code==None :
- self.cleanPath()
- from monChoixCode import MonChoixCode
- widgetChoix = MonChoixCode(self)
- ret=widgetChoix.exec_()
+ self.cleanPath()
+ from monChoixCode import MonChoixCode
+ widgetChoix = MonChoixCode(self)
+ ret=widgetChoix.exec_()
import sys
if self.code == None:return # pour le cancel de la fenetre choix code
name='prefs_'+self.code
self.repIni=prefsCode.repIni
if ssCode != None :
- self.format_fichier= ssCode #par defaut
- prefsCode.NAME_SCHEME=ssCode
+ self.format_fichier= ssCode #par defaut
+ prefsCode.NAME_SCHEME=ssCode
else :
- self.format_fichier="python" #par defaut
+ self.format_fichier="python" #par defaut
nameConf='configuration_'+self.code
configuration=__import__(nameConf)
self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
self.CONFIGStyle = None
if hasattr(configuration,'make_config_style'):
- self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
+ self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
if hasattr(prefsCode,'encoding'):
- import sys
- reload(sys)
- sys.setdefaultencoding(prefsCode.encoding)
+ import sys
+ reload(sys)
+ sys.setdefaultencoding(prefsCode.encoding)
def construitMenu(self):
self.initPatrons()
self.initRecents()
self.initAides()
for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution"):
- if hasattr(self,intituleMenu):
- menu=getattr(self,intituleMenu)
- menu.setAttribute(Qt.WA_DeleteOnClose)
- menu.close()
- delattr(self,intituleMenu)
+ if hasattr(self,intituleMenu):
+ menu=getattr(self,intituleMenu)
+ menu.setAttribute(Qt.WA_DeleteOnClose)
+ menu.close()
+ delattr(self,intituleMenu)
for intituleAction in ("actionExecution","actionSaveRun",):
if hasattr(self,intituleAction):
- action=getattr(self,intituleAction)
- self.toolBar.removeAction(action)
+ action=getattr(self,intituleAction)
+ self.toolBar.removeAction(action)
if self.code in Appli.__dict__.keys():
- listeTexte=apply(Appli.__dict__[self.code],(self,))
+ listeTexte=apply(Appli.__dict__[self.code],(self,))
def initAides(self):
#print "je passe la"
self.fileDoc=os.path.join(self.docPath,fileName)
self.actionCode.setText(tr("Aide specifique ")+str(self.code))
if not os.path.isfile(self.fileDoc) :
- self.fileDoc=""
- self.docPath=""
- self.actionCode.setEnabled(False)
- return
+ self.fileDoc=""
+ self.docPath=""
+ self.actionCode.setEnabled(False)
+ return
self.actionCode.setEnabled(True)
self.menuAide.addAction(self.actionCode)
self.actionExecution.setObjectName("actionExecution")
self.menuExecution.addAction(self.actionExecution)
if not(self.actionExecution in self.toolBar.actions()):
- self.toolBar.addAction(self.actionExecution)
+ self.toolBar.addAction(self.actionExecution)
self.actionExecution.setText(QApplication.translate("Eficas", "Execution ", None, QApplication.UnicodeUTF8))
self.connect(self.actionExecution,SIGNAL("activated()"),self.run)
self.actionSaveRun.setObjectName("actionSaveRun")
self.menuExecution.addAction(self.actionSaveRun)
if not(self.actionSaveRun in self.toolBar.actions()):
- self.toolBar.addAction(self.actionSaveRun)
+ self.toolBar.addAction(self.actionSaveRun)
self.actionSaveRun.setText(QApplication.translate("Eficas", "Save Run", None, QApplication.UnicodeUTF8))
self.connect(self.actionSaveRun,SIGNAL("activated()"),self.saveRun)
def ChercheGrpMesh(self):
Msg,listeGroup=self.ChercheGrpMeshInSalome()
if Msg == None :
- self.viewmanager.handleAjoutGroup(listeGroup)
+ self.viewmanager.handleAjoutGroup(listeGroup)
else :
- print "il faut gerer les erreurs"
+ print "il faut gerer les erreurs"
def ChercheGrpMaille(self):
Msg,listeGroup=self.ChercheGrpMailleInSalome()
if Msg == None :
- self.viewmanager.handleAjoutGroup(listeGroup)
+ self.viewmanager.handleAjoutGroup(listeGroup)
else :
- print "il faut gerer les erreurs"
+ print "il faut gerer les erreurs"
def ajoutIcones(self) :
# Mise a jour du menu des fichiers recemment ouverts
from Editeur import listePatrons
if not(self.code in listePatrons.sous_menus.keys()) :
- if hasattr(self,"menuPatrons"):
- self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
- self.menuPatrons.close()
- delattr(self,"menuPatrons")
- return
+ if hasattr(self,"menuPatrons"):
+ self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
+ self.menuPatrons.close()
+ delattr(self,"menuPatrons")
+ return
if (not hasattr(self,"menuPatrons")):
- self.menuPatrons = QMenu(self.menubar)
- self.menuPatrons.setObjectName("menuPatrons")
- self.menubar.addAction(self.menuPatrons.menuAction())
- self.menuPatrons.setTitle(QApplication.translate("Eficas", "Patrons", None, QApplication.UnicodeUTF8))
+ self.menuPatrons = QMenu(self.menubar)
+ self.menuPatrons.setObjectName("menuPatrons")
+ self.menubar.addAction(self.menuPatrons.menuAction())
+ self.menuPatrons.setTitle(QApplication.translate("Eficas", "Patrons", None, QApplication.UnicodeUTF8))
else :
- self.menuPatrons.clear()
+ self.menuPatrons.clear()
self.listePatrons = listePatrons.listePatrons(self.code)
idx = 0
for nomSsMenu in self.listePatrons.liste.keys():
ssmenu=self.menuPatrons.addMenu(nomSsMenu)
for fichier in self.listePatrons.liste[nomSsMenu]:
- id = ssmenu.addAction(fichier)
- self.ficPatrons[id]=fichier
- self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
+ id = ssmenu.addAction(fichier)
+ self.ficPatrons[id]=fichier
+ self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
# self.Patrons.setItemParameter(id,idx)
- idx=idx+1
+ idx=idx+1
def initRecents(self):
- self.recent = QStringList()
- try :
- #if 1 :
- rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
- monFichier=rep+"/listefichiers_"+self.code
- index=0
- f=open(monFichier)
- while ( index < 9) :
- ligne=f.readline()
- if ligne != "" :
- l=(ligne.split("\n"))[0]
- self.recent.append(l)
- index=index+1
- except :
- #else :
- pass
-
- try : f.close()
- except : pass
+ self.recent = QStringList()
+ try :
+ #if 1 :
+ rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
+ monFichier=rep+"/listefichiers_"+self.code
+ index=0
+ f=open(monFichier)
+ while ( index < 9) :
+ ligne=f.readline()
+ if ligne != "" :
+ l=(ligne.split("\n"))[0]
+ self.recent.append(l)
+ index=index+1
+ except :
+ #else :
+ pass
+
+ try : f.close()
+ except : pass
def addToRecentList(self, fn):
"""
self.recent = self.recent[:9]
def sauveRecents(self) :
- try :
- rep=self.CONFIGURATION.rep_user
- monFichier=rep+"/listefichiers_"+self.code
- except :
- return
- try :
+ try :
+ rep=self.CONFIGURATION.rep_user
+ monFichier=rep+"/listefichiers_"+self.code
+ except :
+ return
+ try :
f=open(monFichier,'w')
if len(self.recent) == 0 : return
index=0
while ( index < len(self.recent)):
- ligne=str(self.recent[index])+"\n"
- f.write(ligne)
- index=index+1
- except :
+ ligne=str(self.recent[index])+"\n"
+ f.write(ligne)
+ index=index+1
+ except :
pass
- try :
+ try :
f.close()
- except :
+ except :
pass
repAide=os.path.dirname(os.path.abspath(__file__))
maD=repAide+"/../Aide"
try :
- indexAide=maD+"/fichiers_EFICAS/index.html"
- cmd="xdg-open "+indexAide
- os.system(cmd)
+ indexAide=maD+"/fichiers_EFICAS/index.html"
+ cmd="xdg-open "+indexAide
+ os.system(cmd)
except:
- QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
+ QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
def aideCode(self) :
if self.code==None : return
try :
#if 1 :
- cmd="xdg-open "+self.fileDoc
- os.system(cmd)
+ cmd="xdg-open "+self.fileDoc
+ os.system(cmd)
except:
#else:
- QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
+ QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
def optionEditeur(self) :
try :
- name='monOptions_'+self.code
+ name='monOptions_'+self.code
except :
- QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
- return
+ QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
+ return
try :
#if 1:
- optionCode=__import__(name)
+ optionCode=__import__(name)
except :
#else :
- QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
- return
+ QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
+ return
monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
monOption.show()
def cleanPath(self):
for pathCode in self.ListeCode:
try:
- aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
- sys.path.remove(aEnlever)
+ aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
+ sys.path.remove(aEnlever)
except :
- pass
+ pass
for pathCode in self.listeAEnlever:
try:
- sys.path.remove(aEnlever)
+ sys.path.remove(aEnlever)
except :
- pass
+ pass
def closeEvent(self,event):
- res=self.fileExit()
- if res==2 : event.ignore()
+ res=self.fileExit()
+ if res==2 : event.ignore()
if __name__=='__main__':
sys.path.append(rep)
from Aster import prefsCode
if hasattr(prefsCode,'encoding'):
- # Hack pour changer le codage par defaut des strings
- import sys
- reload(sys)
- sys.setdefaultencoding(prefsCode.encoding)
- del sys.setdefaultencoding
- # Fin hack
+ # Hack pour changer le codage par defaut des strings
+ import sys
+ reload(sys)
+ sys.setdefaultencoding(prefsCode.encoding)
+ del sys.setdefaultencoding
+ # Fin hack
from Editeur import import_code
from Editeur import session
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,os
# Import des panels
class SaisieValeur(object):
- """
- Classe contenant les methodes communes aux panels
- permettant de choisir des valeurs
- """
- def __init__(self):
- pass
+ """
+ Classe contenant les methodes communes aux panels
+ permettant de choisir des valeurs
+ """
+ def __init__(self):
+ pass
- def LEvaleurPressed(self,valeur=None):
- #print('LEvaleurPressed', valeur, type(valeur))
- if not hasattr(self, 'inSaisieValeur' ) : self.inSaisieValeur=False
- if self.inSaisieValeur : return
- self.inSaisieValeur=True
+ def LEvaleurPressed(self,valeur=None):
+ #print('LEvaleurPressed', valeur, type(valeur))
+ if not hasattr(self, 'inSaisieValeur' ) : self.inSaisieValeur=False
+ if self.inSaisieValeur : return
+ self.inSaisieValeur=True
- if valeur == None :
+ if valeur == None :
try :
- nouvelleValeur=str(self.lineEditVal.text())
+ nouvelleValeur=str(self.lineEditVal.text())
except UnicodeEncodeError as e :
- self.editor.afficheInfos("pb d encoding", Qt.red)
- validite,commentaire=self.politique.recordValeur(None)
- self.lineEditVal.setText('')
- self.setValide()
- self.inSaisieValeur=False
- return
- else :
- try :
- # la 1 ligne est tres bizarre. remplacee par le 3nd le 01 10 19
- #if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
- if hasattr(self,"lineEditVal") : self.lineEditVal.setText(tr(valeur))
- except :
- if hasattr(self,"lineEditVal"):self.lineEditVal.setText(valeur)
+ self.editor.afficheInfos("pb d encoding", Qt.red)
+ validite,commentaire=self.politique.recordValeur(None)
+ self.lineEditVal.setText('')
+ self.setValide()
+ self.inSaisieValeur=False
+ return
+ else :
+ try :
+ # la 1 ligne est tres bizarre. remplacee par le 3nd le 01 10 19
+ #if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
+ if hasattr(self,"lineEditVal") : self.lineEditVal.setText(tr(valeur))
+ except :
+ if hasattr(self,"lineEditVal"):self.lineEditVal.setText(valeur)
nouvelleValeur=valeur
- if self.node.item.definition.validators != None :
+ if self.node.item.definition.validators != None :
if self.node.item.definition.validators.verifItem(nouvelleValeur) !=1 :
commentaire=self.node.item.definition.validators.infoErreurItem()
self.editor.afficheInfos(commentaire,Qt.red)
self.inSaisieValeur=False
return
- nouvelleValeurFormat=self.politique.getValeurTexte(nouvelleValeur)
- validite,commentaire=self.politique.recordValeur(nouvelleValeurFormat)
- if commentaire != "" :
+ nouvelleValeurFormat=self.politique.getValeurTexte(nouvelleValeur)
+ validite,commentaire=self.politique.recordValeur(nouvelleValeurFormat)
+ if commentaire != "" :
if validite :
self.editor.afficheCommentaire(commentaire)
else :
self.editor.afficheInfos(commentaire,Qt.red)
- self.inSaisieValeur=False
- self.setValide()
+ self.inSaisieValeur=False
+ self.setValide()
- def TraiteLEValeur(self,valeurTraitee=None) :
+ def TraiteLEValeur(self,valeurTraitee=None) :
# lit la chaine entree dans le line edit
# et la tranforme en chaine de valeurs
# a traiter. renvoie eventuellement des complexes
listeValeurs=[]
if valeurTraitee == None :
- valeurBrute=str(self.LEValeur.text())
+ valeurBrute=str(self.LEValeur.text())
else :
- valeurBrute=valeurTraitee
+ valeurBrute=valeurTraitee
if valeurBrute == str("") : return listeValeurs,1
try :
- valeur=eval(valeurBrute,{})
+ valeur=eval(valeurBrute,{})
except :
valeur=valeurBrute
# pour traiter 11.0 - 30.0 pour le CIST
#if (valeurTraitee and (type(valeurTraitee) in types.StringTypes) and (self.node.item.waitTxm())) :
if (valeurTraitee and isinstance(valeurTraitee, str) and (self.node.item.waitTxm())) :
- valeur=str(valeurTraitee)
+ valeur=str(valeurTraitee)
if type(valeur) in (list,tuple) :
- if self.node.item.waitComplex() :
- indice = 0
- while (indice < len(valeur)):
- v=valeur[indice]
-
- if (v== 'RI' or v == 'MP'):
- try :
- t=tuple([v,valeur[indice+1],valeur[indice+2]])
- listeValeurs.append(t)
- indice=indice+3
- except :
- commentaire = tr("Veuillez entrer le complexe sous forme aster ou sous forme python")
- self.editor.afficheInfos(commentaire)
- return listeValeurs,0
-
-
- else : # ce n'est pas un tuple a la mode aster
- listeValeurs.append(v)
- indice = indice + 1
-
- else: # on n'attend pas un complexe
- listeValeurs=valeurBrute.split(',')
+ if self.node.item.waitComplex() :
+ indice = 0
+ while (indice < len(valeur)):
+ v=valeur[indice]
+
+ if (v== 'RI' or v == 'MP'):
+ try :
+ t=tuple([v,valeur[indice+1],valeur[indice+2]])
+ listeValeurs.append(t)
+ indice=indice+3
+ except :
+ commentaire = tr("Veuillez entrer le complexe sous forme aster ou sous forme python")
+ self.editor.afficheInfos(commentaire)
+ return listeValeurs,0
+
+
+ else : # ce n'est pas un tuple a la mode aster
+ listeValeurs.append(v)
+ indice = indice + 1
+
+ else: # on n'attend pas un complexe
+ listeValeurs=valeurBrute.split(',')
elif type(valeur) == bytes:
- listeValeurs=valeur.split(',')
+ listeValeurs=valeur.split(',')
else:
- #listeValeurs.append(valeurBrute)
- listeValeurs.append(valeur)
+ #listeValeurs.append(valeurBrute)
+ listeValeurs.append(valeur)
return listeValeurs,1
class SaisieSDCO(object) :
- def LESDCOReturnPressed(self):
+ def LESDCOReturnPressed(self):
"""
Lit le nom donne par l'utilisateur au concept de type CO qui doit être
la valeur du MCS courant et stocke cette valeur
self.editor.initModif()
anc_val = self.node.item.getValeur()
if anc_val != None:
- # il faut egalement propager la destruction de l'ancien concept
- self.node.item.deleteValeurCo(valeur=anc_val)
- # et on force le recalcul des concepts de sortie de l'etape
- self.node.item.object.etape.getType_produit(force=1)
- # et le recalcul du contexte
- self.node.item.object.etape.parent.resetContext()
+ # il faut egalement propager la destruction de l'ancien concept
+ self.node.item.deleteValeurCo(valeur=anc_val)
+ # et on force le recalcul des concepts de sortie de l'etape
+ self.node.item.object.etape.getType_produit(force=1)
+ # et le recalcul du contexte
+ self.node.item.object.etape.parent.resetContext()
nomConcept = str(self.LESDCO.text())
if nomConcept == "" : return
test,commentaire=self.node.item.setValeurCo(nomConcept)
if test:
- commentaire=tr("Valeur du mot-clef enregistree")
- self.node.updateNodeValid()
+ commentaire=tr("Valeur du mot-clef enregistree")
+ self.node.updateNodeValid()
else :
- cr = self.node.item.getCr()
- commentaire = tr("Valeur du mot-clef non autorisee :")+cr.getMessFatal()
-
+ cr = self.node.item.getCr()
+ commentaire = tr("Valeur du mot-clef non autorisee :")+cr.getMessFatal()
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
-
import os, sys
# Modules Eficas
class ReaderCataCommun(object):
#-------------------------------
- def askChoixCatalogue(self, cataListeChoix):
- # ____________________________________________
- """
- Ouvre une fenetre de selection du catalogue dans le cas où plusieurs
- ont ete definis dans Accas/editeur.ini
- """
- try :
- from PyQt5.QtWidgets import QDialog
- except :
- print ('Pas de choix interactif sans qt')
- return
-
- code = getattr(self.appliEficas.maConfiguration, "code", None)
- if code != None :
- title=tr("Choix d une version du code ")+str(code)
- else :
- title=tr("Choix d une version ")
-
- from InterfaceQT4.monChoixCata import MonChoixCata
- widgetChoix = MonChoixCata(self.appliEficas, [cata.labelCode for cata in cataListeChoix], title)
- ret=widgetChoix.exec_()
-
-
- lab=str(self.VERSION_EFICAS)+" "
- lab+=tr(" pour ")
- lab+=str(self.code)
- lab+=tr(" avec le catalogue ")
- if ret == QDialog.Accepted:
- cata = cataListeChoix[widgetChoix.CBChoixCata.currentIndex()]
- self.fichierCata = cata.fichierCata
- self.labelCode = cata.labelCode
- self.appliEficas.formatFichierOut = cata.formatFichierOut
- self.appliEficas.formatFichierIn = cata.formatFichierIn
- lab+=self.labelCode
- self.appliEficas.setWindowTitle(lab)
- widgetChoix.close()
- else:
- widgetChoix.close()
- raise EficasException()
-
- def choisitCata(self):
- # ____________________
-
-
- listeCataPossibles=[]
- self.Commandes_Ordre_Catalogue=[]
-
-
- listeTousLesCatas = []
- for catalogue in self.appliEficas.maConfiguration.catalogues:
- if isinstance(catalogue, CatalogDescription): listeTousLesCatas.append(catalogue)
- elif isinstance(catalogue, tuple) : listeTousLesCatas.append(CatalogDescription.createFromTuple(catalogue))
- else: print(("Catalog description cannot be interpreted: ", catalogue))
-
- # This filter is only useful for codes that have subcodes (like MAP).
- # Otherwise, the "code" attribute of the catalog description can (should) be None.
- if self.ssCode is None: listeCataPossibles = listeTousLesCatas
- else:
- for catalogue in listeTousLesCatas:
- if catalogue.code == self.code and catalogue.ssCode == self.ssCode: listeCataPossibles.append(catalogue)
-
- # le catalogue est fixe dans la ligne de commande
- if self.appliEficas.fichierCata != None :
- trouve=False
- for catalogue in listeTousLesCatas:
- if os.path.abspath(catalogue.fichierCata) == (os.path.abspath(self.appliEficas.fichierCata)) :
- listeCataPossibles=(catalogue,)
- trouve=True
- break
- if not trouve:
+ def askChoixCatalogue(self, cataListeChoix):
+ # ____________________________________________
+ """
+ Ouvre une fenetre de selection du catalogue dans le cas où plusieurs
+ ont ete definis dans Accas/editeur.ini
+ """
+ try :
+ from PyQt5.QtWidgets import QDialog
+ except :
+ print ('Pas de choix interactif sans qt')
+ return
+
+ code = getattr(self.appliEficas.maConfiguration, "code", None)
+ if code != None :
+ title=tr("Choix d une version du code ")+str(code)
+ else :
+ title=tr("Choix d une version ")
+
+ from InterfaceQT4.monChoixCata import MonChoixCata
+ widgetChoix = MonChoixCata(self.appliEficas, [cata.labelCode for cata in cataListeChoix], title)
+ ret=widgetChoix.exec_()
+
+
+ lab=str(self.VERSION_EFICAS)+" "
+ lab+=tr(" pour ")
+ lab+=str(self.code)
+ lab+=tr(" avec le catalogue ")
+ if ret == QDialog.Accepted:
+ cata = cataListeChoix[widgetChoix.CBChoixCata.currentIndex()]
+ self.fichierCata = cata.fichierCata
+ self.labelCode = cata.labelCode
+ self.appliEficas.formatFichierOut = cata.formatFichierOut
+ self.appliEficas.formatFichierIn = cata.formatFichierIn
+ lab+=self.labelCode
+ self.appliEficas.setWindowTitle(lab)
+ widgetChoix.close()
+ else:
+ widgetChoix.close()
+ raise EficasException()
+
+ def choisitCata(self):
+ # ____________________
+
+
+ listeCataPossibles=[]
+ self.Commandes_Ordre_Catalogue=[]
+
+
+ listeTousLesCatas = []
+ for catalogue in self.appliEficas.maConfiguration.catalogues:
+ if isinstance(catalogue, CatalogDescription): listeTousLesCatas.append(catalogue)
+ elif isinstance(catalogue, tuple) : listeTousLesCatas.append(CatalogDescription.createFromTuple(catalogue))
+ else: print(("Catalog description cannot be interpreted: ", catalogue))
+
+ if self.labelCode is None: listeCataPossibles = listeTousLesCatas
+ else :
+ for catalogue in listeTousLesCatas:
+ if catalogue.code == self.code and catalogue.ssCode == self.ssCode:
+ listeCataPossibles.append(catalogue)
+
+ if len(listeCataPossibles)==0:
+ try :
+ QMessageBox.critical(self.QWParent, tr("Import du catalogue"),
+ tr("Pas de catalogue defini pour le code ") + self.code)
+ except :
+ print("Pas de catalogue defini pour le code " + self.code)
+ if self.appliEficas.salome == 0 : sys.exit(1)
+ self.appliEficas.close()
+ return
+
+ if self.labelCode is not None:
+ # La version a ete fixee
+ for cata in listeCataPossibles:
+ if self.labelCode == cata.labelCode:
+ self.fichierCata = cata.fichierCata
+ self.labelCode = cata.labelCode
+ self.appliEficas.formatFichierOut = cata.formatFichierOut
+ self.appliEficas.formatFichierIn = cata.formatFichierIn
+ else:
+ cataChoiceList = []
+ for cata in listeCataPossibles:
+ if cata.selectable:
+ if cata.default : cataChoiceList.insert(0, cata)
+ else : cataChoiceList.append(cata)
+
+ # le catalogue est fixe dans la ligne de commande
+ if self.appliEficas.fichierCata != None :
+ trouve=False
+ for catalogue in listeTousLesCatas:
+ if os.path.abspath(catalogue.fichierCata) == (os.path.abspath(self.appliEficas.fichierCata)) :
+ listeCataPossibles=(catalogue,)
+ trouve=True
+ break
+ if not trouve:
catalogue=CatalogDescription.createFromTuple((self.code ,self.code,self.appliEficas.fichierCata,'python','python'))
listeCataPossibles=(catalogue,)
-
-
- if len(listeCataPossibles)==0:
- try :
- from PyQt5.QtWidgets import QMessageBox, QDialog
- QMessageBox.critical(self.QWParent, tr("Import du catalogue"),
- tr("Pas de catalogue defini pour le code ") + self.code)
- except :
- print ("Pas de catalogue defini pour le code " + self.code)
- self.appliEficas.close()
- if self.appliEficas.salome == 0 : sys.exit(1)
- return
-
-
- # le label est fixe dans la ligne de commande
- if self.labelCode is not None:
- # La version a ete fixee
- for cata in listeCataPossibles:
- if self.labelCode == cata.labelCode:
- self.fichierCata = cata.fichierCata
- self.appliEficas.formatFichierIn = cata.formatFichierIn
- self.appliEficas.formatFichierOut = cata.formatFichierOut
- else:
- cataListeChoix = []
- for cata in listeCataPossibles:
- if cata.default : cataListeChoix.insert(0, cata)
- else : cataListeChoix.append(cata)
-
- if len(cataListeChoix) == 0:
- try :
- from PyQt5.QtWidgets import QMessageBox
+
+
+ if len(listeCataPossibles)==0:
+ try :
+ from PyQt5.QtWidgets import QMessageBox, QDialog
QMessageBox.critical(self.QWParent, tr("Import du catalogue"),
- tr("Aucun catalogue trouve"))
- except :
+ tr("Pas de catalogue defini pour le code ") + self.code)
+ except :
print ("Pas de catalogue defini pour le code " + self.code)
- self.appliEficas.close()
- if self.appliEficas.salome == 0 : sys.exit(1)
-
- elif len(cataListeChoix) == 1:
- self.fichierCata = cataListeChoix[0].fichierCata
- self.labelCode = cataListeChoix[0].labelCode
- self.appliEficas.formatFichierOut = cataListeChoix[0].formatFichierOut
- self.appliEficas.formatFichierIn = cataListeChoix[0].formatFichierIn
-
- else:
- # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
- # lequel il veut utiliser ...
- if self.appliEficas.ssIhm :
- print ('Unable to know which catafile is choosen')
- exit()
- self.askChoixCatalogue(cataListeChoix)
- self.demandeCatalogue=True
-
- if self.fichierCata == None :
- if self.appliEficas.salome == 0 :
- print(("Pas de catalogue pour code %s, version %s" %(self.code,self.labelCode)))
- sys.exit(1)
- else :
- self.appliEficas.close()
- return
+ self.appliEficas.close()
+ if self.appliEficas.salome == 0 : sys.exit(1)
+ return
+
+
+ # le label est fixe dans la ligne de commande
+ if self.labelCode is not None:
+ # La version a ete fixee
+ for cata in listeCataPossibles:
+ if self.labelCode == cata.labelCode:
+ self.fichierCata = cata.fichierCata
+ self.appliEficas.formatFichierIn = cata.formatFichierIn
+ self.appliEficas.formatFichierOut = cata.formatFichierOut
+ else:
+ cataListeChoix = []
+ for cata in listeCataPossibles:
+ if cata.default : cataListeChoix.insert(0, cata)
+ else : cataListeChoix.append(cata)
+
+ if len(cataListeChoix) == 0:
+ try :
+ from PyQt5.QtWidgets import QMessageBox
+ QMessageBox.critical(self.QWParent, tr("Import du catalogue"),
+ tr("Aucun catalogue trouve"))
+ except :
+ print ("Pas de catalogue defini pour le code " + self.code)
+ self.appliEficas.close()
+ if self.appliEficas.salome == 0 : sys.exit(1)
+
+ elif len(cataListeChoix) == 1:
+ self.fichierCata = cataListeChoix[0].fichierCata
+ self.labelCode = cataListeChoix[0].labelCode
+ self.appliEficas.formatFichierOut = cataListeChoix[0].formatFichierOut
+ self.appliEficas.formatFichierIn = cataListeChoix[0].formatFichierIn
+
+ else:
+ # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
+ # lequel il veut utiliser ...
+ if self.appliEficas.ssIhm :
+ print ('Unable to know which catafile is choosen')
+ exit()
+ self.askChoixCatalogue(cataListeChoix)
+ self.demandeCatalogue=True
+
+ if self.fichierCata == None :
+ if self.appliEficas.salome == 0 :
+ print(("Pas de catalogue pour code %s, version %s" %(self.code,self.labelCode)))
+ sys.exit(1)
+ else :
+ self.appliEficas.close()
+ return
#------------------------------------
class ReaderCata (ReaderCataCommun):
#------------------------------------
- def __init__(self,QWParent, appliEficas):
- # _______________________________________
-
-
- self.QWParent=QWParent
- self.appliEficas=self.QWParent.appliEficas
- self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
- self.demandeCatalogue=False
- self.code=self.appliEficas.code
- self.ssCode=self.appliEficas.ssCode
- # on positionne par defaut mais est-ce vraiment necessaire
- self.appliEficas.formatFichierIn='python'
- self.appliEficas.formatFichierOut='python'
- self.labelCode=self.appliEficas.labelCode
- self.fichierCata=self.appliEficas.fichierCata
- self.openCata()
- self.traiteIcones()
- self.cataitem=None
- self.creeDicoInverse()
- if self.code=="TELEMAC": self.creeDicoCasToCata()
-
-
- def openCata(self):
- """
- Ouvre le catalogue standard du code courant, cad le catalogue present
- dans le repertoire Cata
- """
- # import du catalogue
- self.choisitCata()
-
- modeleMetier = None
- if not (self.appliEficas.genereXSD) :
- if (self.appliEficas.maConfiguration.withXSD or self.appliEficas.withXSD) :
- try :
- import pyxb
- except :
- self.QWParent.informe('environnement', 'please source pyxb environment')
- exit()
- try :
- nomCataXsd = os.path.splitext(os.path.basename(self.fichierCata))[0]
- fichierCataTrunc=os.path.splitext(os.path.basename(self.fichierCata))[0]
- nomCataXsd = fichierCataTrunc+'_driver'
- pathCata = os.path.dirname(self.fichierCata)+'/raw/'+nomCataXsd+'.py'
- import imp
- modeleMetier= imp.load_source(nomCataXsd,pathCata)
- except :
- if self.appliEficas.ssIhm == False :print ('______________ poum import cata_genere ')
- self.QWParent.informe('XSD driver', 'unable to load xsd driver',critique=False)
- modeleMetier = None
-
- self.cata = self.importCata(self.fichierCata)
- if hasattr(self.cata, 'implement'): self.cata.JdC.implement = self.cata.implement
- else : self.cata.JdC.implement = ""
- if hasattr(self.cata, 'importedBy'): self.cata.JdC.importedBy = self.cata.importedBy
- else : self.cata.JdC.importedBy = []
- self.cata.JdC.labelCode = self.labelCode
- if not(hasattr(self.cata, 'dict_condition')): self.cata.dict_condition = {}
-
- # pointeur pour le dumpXSD
- self.cata.JdC.cata=self.cata
-
- self.cata.modeleMetier = modeleMetier
- if not self.cata :
- #try:
- #from PyQt5.QtWidgets import QMessageBox, QDialog
- #QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fichierCata)
- #except :
- # print ("Impossible d'importer le catalogue "+ self.fichierCata)
- self.QWParent.informe("Catalogue","Impossible d'importer le catalogue "+ self.fichierCata)
- self.appliEficas.close()
- if self.appliEficas.salome == 0 :
- sys.exit(1)
- #
- # analyse du catalogue (ordre des mots-cles)
- #
- # retrouveOrdreCataStandard fait une analyse textuelle du catalogue
- # remplace par retrouveOrdreCataStandardAutre qui utilise une numerotation
- # des mots cles a la creation
- #print (dir(self.cata))
- self.retrouveOrdreCataStandardAutre()
- if self.appliEficas.maConfiguration.modeNouvCommande == "initial" : self.retrouveOrdreCataStandard()
- if hasattr(self.cata, 'Ordre_Des_Commandes') : self.Ordre_Des_Commandes=self.cata.Ordre_Des_Commandes
- else : self.Ordre_Des_Commandes=None
-
- if hasattr(self.cata, 'Classement_Commandes_Ds_Arbre') :
- self.Classement_Commandes_Ds_Arbre=self.cata.Classement_Commandes_Ds_Arbre
- else : self.Classement_Commandes_Ds_Arbre=()
- if hasattr(self.cata,'enum'):
- try :
- _temp= __import__(self.cata.enum,globals(), locals(), ['DicoEnumCasFrToEnumCasEn', 'TelemacdicoEn'], 0)
- self.DicoEnumCasFrToEnumCasEn = _temp.DicoEnumCasFrToEnumCasEn
- self.TelemacdicoEn = _temp.TelemacdicoEn
- except : pass
-
- #print self.cata.Ordre_Des_Commandes
-
- #
- # analyse des donnees liees l'IHM : UIinfo
- #
- uiinfo.traite_UIinfo(self.cata)
-
- #
- # traitement des clefs documentaires
- #
-
- self.titre=self.VERSION_EFICAS+" "+tr( " avec le catalogue ") + os.path.basename(self.fichierCata)
- if self.appliEficas.ssIhm == False : self.appliEficas.setWindowTitle(self.titre)
- self.appliEficas.titre=self.titre
- self.QWParent.titre=self.titre
-
-
- def importCata(self,cata):
- """
- Realise l'import du catalogue dont le chemin d'acces est donne par cata
- """
- nom_cata = os.path.splitext(os.path.basename(cata))[0]
- rep_cata = os.path.dirname(cata)
- sys.path[:0] = [rep_cata]
- self.appliEficas.listeAEnlever.append(rep_cata)
-
- # PNPNPN pas propre __ A reflechir
- if 'cata_Vimmp' in list(sys.modules.keys()) :
- del sys.modules['cata_Vimmp']
-
- if nom_cata in list(sys.modules.keys()) :
- del sys.modules[nom_cata]
-
- for k in sys.modules:
- if k[0:len(nom_cata)+1] == nom_cata+'.':
- del sys.modules[k]
-
- mesScriptsNomFichier='mesScripts_'+self.code.upper()
- try :
- self.appliEficas.mesScripts[self.code]=__import__(mesScriptsNomFichier)
- except:
- pass
-
- #if 1 :
- try :
- o=__import__(nom_cata)
- return o
- except Exception as e:
- self.QWParent.informe('catalog', 'unable to load catalog file')
- import traceback
- traceback.print_exc()
- return 0
-
-
-
- def retrouveOrdreCataStandardAutre(self):
- """
- Construit une structure de donnees dans le catalogue qui permet
- a EFICAS de retrouver l'ordre des mots-cles dans le texte du catalogue.
- Pour chaque entite du catlogue on cree une liste de nom ordre_mc qui
- contient le nom des mots cles dans le bon ordre
- """
- self.cata_ordonne_dico, self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata)
- #print ('_________________________________________', self)
- #print (self.cata_ordonne_dico)
- #self.appliEficas.liste_simp_reel = ()
- #self.cata_ordonne_dico = {}
-
- def retrouveOrdreCataStandard(self):
- """
- Retrouve l'ordre des mots-cles dans le catalogue, cad :
- Attention s appuie sur les commentaires
- """
- nom_cata = os.path.splitext(os.path.basename(self.fichierCata))[0]
- rep_cata = os.path.dirname(self.fichierCata)
- self.Commandes_Ordre_Catalogue = analyse_catalogue_initial.analyseCatalogue(self.fichierCata)
- #print self.Commandes_Ordre_Catalogue
-
- def traiteIcones(self):
- if self.appliEficas.maConfiguration.ficIcones==None : return
- try:
- ficIcones=self.appliEficas.maConfiguration.ficIcones
- fichierIcones = __import__(ficIcones, globals(), locals(), [], 0)
- self.appliEficas.maConfiguration.dicoIcones=fichierIcones.dicoDesIcones.dicoIcones
- self.appliEficas.maConfiguration.dicoImages=fichierIcones.dicoDesIcones.dicoImages
- except:
- print ("Pas de fichier associe contenant des liens sur les icones ")
- self.appliEficas.maConfiguration.dicoIcones={}
-
-
-
- def creeDicoInverse(self):
+ def __init__(self,QWParent, appliEficas):
+ # _______________________________________
+
+
+ self.QWParent=QWParent
+ self.appliEficas=self.QWParent.appliEficas
+ self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
+ self.demandeCatalogue=False
+ self.code=self.appliEficas.code
+ self.ssCode=self.appliEficas.ssCode
+ # on positionne par defaut mais est-ce vraiment necessaire
+ self.appliEficas.formatFichierIn='python'
+ self.appliEficas.formatFichierOut='python'
+ self.labelCode=self.appliEficas.labelCode
+ self.fichierCata=self.appliEficas.fichierCata
+ self.openCata()
+ self.traiteIcones()
+ self.cataitem=None
+ self.creeDicoInverse()
+ if self.code=="TELEMAC": self.creeDicoCasToCata()
+
+
+ def openCata(self):
+ """
+ Ouvre le catalogue standard du code courant, cad le catalogue present
+ dans le repertoire Cata
+ """
+ # import du catalogue
+ if self.fichierCata == None : self.choisitCata()
+
+ self.cata = self.importCata(self.fichierCata)
+ if self.code == 'NonConnu' : self.code = self.cata.JdC.code
+ modeleMetier = None
+ dicoEltDif = {}
+ if not (self.appliEficas.genereXSD) :
+ if (self.appliEficas.maConfiguration.withXSD or self.appliEficas.withXSD) :
+ try :
+ import pyxb
+ except :
+ self.QWParent.informe('environnement', 'please source pyxb environment')
+ exit()
+ try :
+ nomCataXsd = os.path.splitext(os.path.basename(self.fichierCata))[0]
+ fichierCataTrunc=os.path.splitext(os.path.basename(self.fichierCata))[0]
+ nomCataXsd = fichierCataTrunc+'_driver'
+ pathCata = os.path.dirname(self.fichierCata)+'/raw/'+nomCataXsd+'.py'
+ import imp
+ modeleMetier= imp.load_source(nomCataXsd,pathCata)
+ #print ('nomCataXsd , pathCata ',nomCataXsd,pathCata)
+ try :
+ #if 1 :
+ #monObjetAnnotation = getattr(modeleMetier,'PNEFdico_'+self.code)
+ monObjetAnnotation = getattr(modeleMetier,'PNEFdico')
+ texte=monObjetAnnotation.__doc__
+ except :
+ texte=None
+ if texte != None and texte != "":
+ l={}
+ texte='dicoEltDif = '+ texte
+ exec (texte, globals(),l)
+ dicoEltDif=l['dicoEltDif']
+ #print ('dans readerCata _________', dicoEltDif)
+
+ except :
+ if self.appliEficas.ssIhm == False :print ('______________ poum import cata_genere ')
+ self.QWParent.informe('XSD driver', 'unable to load xsd driver',critique=False)
+ modeleMetier = None
+
+ self.cata.DicoNomTypeDifferentNomElt=dicoEltDif
+
+ if hasattr(self.cata, 'implement'): self.cata.JdC.implement = self.cata.implement
+ else : self.cata.JdC.implement = ""
+ if hasattr(self.cata, 'importedBy'): self.cata.JdC.importedBy = self.cata.importedBy
+ else : self.cata.JdC.importedBy = []
+ self.cata.JdC.labelCode = self.labelCode
+ if not(hasattr(self.cata, 'dict_condition')): self.cata.dict_condition = {}
+
+ # pointeur pour le dumpXSD
+ self.cata.JdC.cata=self.cata
+
+ self.cata.modeleMetier = modeleMetier
+ if not self.cata :
+ #try:
+ #from PyQt5.QtWidgets import QMessageBox, QDialog
+ #QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fichierCata)
+ #except :
+ # print ("Impossible d'importer le catalogue "+ self.fichierCata)
+ self.QWParent.informe("Catalogue","Impossible d'importer le catalogue "+ self.fichierCata)
+ self.appliEficas.close()
+ if self.appliEficas.salome == 0 :
+ sys.exit(1)
+ #
+ # analyse du catalogue (ordre des mots-cles)
+ #
+ # retrouveOrdreCataStandard fait une analyse textuelle du catalogue
+ # remplace par retrouveOrdreCataStandardAutre qui utilise une numerotation
+ # des mots cles a la creation
+ #print (dir(self.cata))
+ self.retrouveOrdreCataStandardAutre()
+ if self.appliEficas.maConfiguration.modeNouvCommande == "initial" : self.retrouveOrdreCataStandard()
+ if hasattr(self.cata, 'Ordre_Des_Commandes') : self.Ordre_Des_Commandes=self.cata.Ordre_Des_Commandes
+ else : self.Ordre_Des_Commandes=None
+
+ if hasattr(self.cata, 'Classement_Commandes_Ds_Arbre') :
+ self.Classement_Commandes_Ds_Arbre=self.cata.Classement_Commandes_Ds_Arbre
+ else : self.Classement_Commandes_Ds_Arbre=()
+ if hasattr(self.cata,'enum'):
+ try :
+ _temp= __import__(self.cata.enum,globals(), locals(), ['DicoEnumCasFrToEnumCasEn', 'TelemacdicoEn'], 0)
+ self.DicoEnumCasFrToEnumCasEn = _temp.DicoEnumCasFrToEnumCasEn
+ self.TelemacdicoEn = _temp.TelemacdicoEn
+ except : pass
+
+ #print self.cata.Ordre_Des_Commandes
+
+ #
+ # analyse des donnees liees l'IHM : UIinfo
+ #
+ uiinfo.traite_UIinfo(self.cata)
+
+ #
+ # traitement des clefs documentaires
+ #
+
+ self.titre=self.VERSION_EFICAS+" "+tr( " avec le catalogue ") + os.path.basename(self.fichierCata)
+ if self.appliEficas.ssIhm == False : self.appliEficas.setWindowTitle(self.titre)
+ self.appliEficas.titre=self.titre
+ self.QWParent.titre=self.titre
+
+
+ def importCata(self,cata):
+ """
+ Realise l'import du catalogue dont le chemin d'acces est donne par cata
+ """
+ nom_cata = os.path.splitext(os.path.basename(cata))[0]
+ rep_cata = os.path.dirname(cata)
+ sys.path[:0] = [rep_cata]
+ self.appliEficas.listeAEnlever.append(rep_cata)
+
+ # PNPNPN pas propre __ A reflechir
+ if 'cata_Vimmp' in list(sys.modules.keys()) :
+ del sys.modules['cata_Vimmp']
+
+ if nom_cata in list(sys.modules.keys()) :
+ del sys.modules[nom_cata]
+
+ for k in sys.modules:
+ if k[0:len(nom_cata)+1] == nom_cata+'.':
+ del sys.modules[k]
+
+ mesScriptsNomFichier='mesScripts_'+self.code.upper()
+ try :
+ self.appliEficas.mesScripts[self.code]=__import__(mesScriptsNomFichier)
+ except:
+ pass
+
+ #if 1 :
+ try :
+ o=__import__(nom_cata)
+ return o
+ except Exception as e:
+ self.QWParent.informe('catalog', 'unable to load catalog file')
+ import traceback
+ traceback.print_exc()
+ return 0
+
+
+
+ def retrouveOrdreCataStandardAutre(self):
+ """
+ Construit une structure de donnees dans le catalogue qui permet
+ a EFICAS de retrouver l'ordre des mots-cles dans le texte du catalogue.
+ Pour chaque entite du catlogue on cree une liste de nom ordre_mc qui
+ contient le nom des mots cles dans le bon ordre
+ """
+ self.cata_ordonne_dico, self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata)
+ #print ('_________________________________________', self)
+ #print (self.cata_ordonne_dico)
+ #self.appliEficas.liste_simp_reel = ()
+ #self.cata_ordonne_dico = {}
+
+ def retrouveOrdreCataStandard(self):
+ """
+ Retrouve l'ordre des mots-cles dans le catalogue, cad :
+ Attention s appuie sur les commentaires
+ """
+ nom_cata = os.path.splitext(os.path.basename(self.fichierCata))[0]
+ rep_cata = os.path.dirname(self.fichierCata)
+ self.Commandes_Ordre_Catalogue = analyse_catalogue_initial.analyseCatalogue(self.fichierCata)
+ #print self.Commandes_Ordre_Catalogue
+
+ def traiteIcones(self):
+ if self.appliEficas.maConfiguration.ficIcones==None : return
+ try:
+ ficIcones=self.appliEficas.maConfiguration.ficIcones
+ fichierIcones = __import__(ficIcones, globals(), locals(), [], 0)
+ self.appliEficas.maConfiguration.dicoIcones=fichierIcones.dicoDesIcones.dicoIcones
+ self.appliEficas.maConfiguration.dicoImages=fichierIcones.dicoDesIcones.dicoImages
+ except:
+ print ("Pas de fichier associe contenant des liens sur les icones ")
+ self.appliEficas.maConfiguration.dicoIcones={}
+
+
+
+ def creeDicoInverse(self):
self.dicoInverse={}
self.dicoMC={}
listeEtapes=self.cata.JdC.commandes
self.traiteEntite(e)
- def creeDicoCasToCata(self):
- if hasattr(self.cata,'dicoCasEn'):
- _temp= __import__(self.cata.dicoCasEn,globals(), locals(), ['DicoCasEnToCata'], 0)
- if self.appliEficas.langue=="ang" :
- self.dicoCasToCata=_temp.dicoCasEnToCata
- else :
- self.dicoCasToCata=_temp.dicoCasFrToCata
+ def creeDicoCasToCata(self):
+ if hasattr(self.cata,'dicoCasEn'):
+ _temp= __import__(self.cata.dicoCasEn,globals(), locals(), ['DicoCasEnToCata'], 0)
+ if self.appliEficas.langue=="ang" :
+ self.dicoCasToCata=_temp.dicoCasEnToCata
+ else :
+ self.dicoCasToCata=_temp.dicoCasFrToCata
- def traiteEntite(self,e):
- boolIn=0
- for (nomFils, fils) in list(e.entites.items()) :
- self.dicoMC[nomFils]=fils
- self.traiteEntite(fils)
- boolIn=1
- if boolIn==0 :
- liste=[]
- moi=e
- while hasattr(moi,'pere') :
+ def traiteEntite(self,e):
+ boolIn=0
+ for (nomFils, fils) in list(e.entites.items()) :
+ self.dicoMC[nomFils]=fils
+ self.traiteEntite(fils)
+ boolIn=1
+ if boolIn==0 :
+ liste=[]
+ moi=e
+ while hasattr(moi,'pere') :
liste.append((moi.nom,moi))
moi=moi.pere
- liste.append((moi.nom,moi))
- self.dicoInverse[e.nom]=liste
- self.dicoInverse[tr(e.nom)]=liste
-
- def creeRubrique(self,e,dico, niveau):
- from Accas import A_BLOC
- decale=niveau*" "
- #if niveau != 0 :
- # if isinstance(e,A_BLOC.BLOC): print decale, e.condition
- # else : print decale, e. nom
- for (nom, fils) in list(e.entites.items()) :
- if list(fils.entites.items()) != [] : self.creeRubrique(fils,dico,niveau+1)
- #else : print (niveau+1)*" ", nom
-
-
- def dumpToXsdEficas(self):
- # Pas sur qu on ait jamais besoin de cela
- pass
- #from Efi2Xsd import readerEfficas
- #newSchema= xml = open('Cata_MED_FAM.xml').read()
- #SchemaMed = efficas.CreateFromDocument(xml)
- #SchemaMed.alimenteCata(self.cata)
-
+ liste.append((moi.nom,moi))
+ self.dicoInverse[e.nom]=liste
+ self.dicoInverse[tr(e.nom)]=liste
+
+ def creeRubrique(self,e,dico, niveau):
+ from Accas import A_BLOC
+ decale=niveau*" "
+ #if niveau != 0 :
+ # if isinstance(e,A_BLOC.BLOC): print decale, e.condition
+ # else : print decale, e. nom
+ for (nom, fils) in list(e.entites.items()) :
+ if list(fils.entites.items()) != [] : self.creeRubrique(fils,dico,niveau+1)
+ #else : print (niveau+1)*" ", nom
+
+
+ #def dumpToXsdEficas(self):
+ # Pas sur qu on ait jamais besoin de cela
+ # pass
+ #from Efi2Xsd import readerEfficas
+ #newSchema= xml = open('Cata_MED_FAM.xml').read()
+ #SchemaMed = efficas.CreateFromDocument(xml)
+ #SchemaMed.alimenteCata(self.cata)
class ReaderCata (ReaderCataCommun):
- def __init__(self,QWParent, appliEficas):
- self.QWParent=QWParent
- self.appliEficas=appliEficas
- self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
- self.code=self.appliEficas.code
- self.ssCode=self.appliEficas.ssCode
- # PN ?? bizarre le 22/04/20
- self.appliEficas.formatfichierOut='python'
- self.appliEficas.formatfichierIn ='xml'
- self.modeNouvCommande=self.appliEficas.maConfiguration.modeNouvCommande
- self.labelCode=self.appliEficas.labelCode
- self.version_cata=None
- self.ficCata=None
- self.OpenCata()
- self.cataitem=None
- self.titre='Eficas XML'
- self.Ordre_Des_Commandes=None
- self.Classement_Commandes_Ds_Arbre=()
- self.demandeCatalogue=False
+ def __init__(self,QWParent, appliEficas):
+ self.QWParent=QWParent
+ self.appliEficas=appliEficas
+ self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
+ self.code=self.appliEficas.code
+ self.ssCode=self.appliEficas.ssCode
+ # PN ?? bizarre le 22/04/20
+ self.appliEficas.formatfichierOut='python'
+ self.appliEficas.formatfichierIn ='xml'
+ self.modeNouvCommande=self.appliEficas.maConfiguration.modeNouvCommande
+ self.labelCode=self.appliEficas.labelCode
+ self.version_cata=None
+ self.ficCata=None
+ self.OpenCata()
+ self.cataitem=None
+ self.titre='Eficas XML'
+ self.Ordre_Des_Commandes=None
+ self.Classement_Commandes_Ds_Arbre=()
+ self.demandeCatalogue=False
- #self.traiteIcones()
- #self.creeDicoInverse()
+ #self.traiteIcones()
+ #self.creeDicoInverse()
- def OpenCata(self):
+ def OpenCata(self):
- #self.ficCata = 'Cata_MED_FAM.xml'
- #xml = open('/home/A96028/QT5GitEficasTravail/eficas/Med/Cata_MED_FAM.xml').read()
- #xml = open('/home/A96028/QT5GitEficasTravail/eficas/CataTestXSD/cata_test1.xml').read()
- self.choisitCata()
- xml=open(self.ficCata).read()
- SchemaMed = readerEfiXsd.efficas.CreateFromDocument(xml)
- SchemaMed.exploreCata()
- self.cata=SchemaMed
- uiinfo.traite_UIinfo(self.cata)
- self.Commandes_Ordre_Catalogue=[]
- self.cata_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata)
- self.liste_groupes=None
+ #self.ficCata = 'Cata_MED_FAM.xml'
+ #xml = open('/home/A96028/QT5GitEficasTravail/eficas/Med/Cata_MED_FAM.xml').read()
+ #xml = open('/home/A96028/QT5GitEficasTravail/eficas/CataTestXSD/cata_test1.xml').read()
+ self.choisitCata()
+ xml=open(self.ficCata).read()
+ SchemaMed = readerEfiXsd.efficas.CreateFromDocument(xml)
+ SchemaMed.exploreCata()
+ self.cata=SchemaMed
+ uiinfo.traite_UIinfo(self.cata)
+ self.Commandes_Ordre_Catalogue=[]
+ self.cata_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata)
+ self.liste_groupes=None
- def dumpToXml(self):
- # pour compatibilite
- pass
+ def dumpToXml(self):
+ # pour compatibilite
+ pass
#
# permet de lancer EFICAS en n affichant rien
try :
- from builtins import object
+ from builtins import object
except : pass
class appliEficasSSIhm(object):
- def __init__ (self,code):
- self.VERSION_EFICAS="Sans Ihm"
- self.code=code
- self.ssCode=None
- self.salome=None
- self.top=None
- self.indice=0
- self.dict_reels={}
- self.listeAEnlever=[]
+ def __init__ (self,code):
+ self.VERSION_EFICAS="Sans Ihm"
+ self.code=code
+ self.ssCode=None
+ self.salome=None
+ self.top=None
+ self.indice=0
+ self.dict_reels={}
+ self.listeAEnlever=[]
+
+ name='prefs_'+self.code
+ try :
+ prefsCode=__import__(name)
+ except :
+ name='prefs_'+self.code.upper()
+ self.code=self.code.upper()
+ prefsCode=__import__(name)
- name='prefs_'+self.code
- try :
- prefsCode=__import__(name)
- except :
- name='prefs_'+self.code.upper()
- self.code=self.code.upper()
- prefsCode=__import__(name)
-
- self.repIni=prefsCode.repIni
- self.format_fichier="python" #par defaut
+ self.repIni=prefsCode.repIni
+ self.format_fichier="python" #par defaut
+
+ nameConf='configuration_'+self.code
+ configuration=__import__(nameConf)
+ self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
- nameConf='configuration_'+self.code
- configuration=__import__(nameConf)
- self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
-
class QWParentSSIhm(object):
- def __init__(self,code,version_code):
+ def __init__(self,code,version_code):
self.ihm="QT"
self.code=code
self.version_code=version_code
self.format_fichier="python" #par defaut
-
#
from __future__ import absolute_import
try :
- from builtins import object
+ from builtins import object
except : pass
from PyQt5.QtWidgets import QAction, QMenu, QMessageBox
self.menu.addAction(self.Supprime)
if hasattr(self.appliEficas, 'mesScripts'):
if self.editor.code in self.editor.appliEficas.mesScripts :
- self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
- if self.tree.currentItem().item.getNom() in self.dict_commandes_mesScripts :
- self.ajoutScript()
-
+ self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
+ if self.tree.currentItem().item.getNom() in self.dict_commandes_mesScripts :
+ self.ajoutScript()
+
def ajoutScript(self):
# cochon mais je n arrive pas a faire mieux avec le mecanisme de plugin
# a revoir avec un menu et un connect sur le triggered sur le menu ?
if hasattr(self.appliEficas, 'mesScripts'):
if self.editor.code in self.editor.appliEficas.mesScripts :
- self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
+ self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
else : return
from Extensions import jdc_include
if type(listeCommandes) != tuple: listeCommandes=(listeCommandes,)
numero=0
for commande in listeCommandes :
- conditionSalome=commande[3]
- if (self.appliEficas.salome == 0 and conditionSalome == True): return
- label=commande[1]
- tip=commande[5]
- self.action=QAction(label,self.tree)
- self.action.setStatusTip(tip)
- if numero==4: self.action.triggered.connect(self.appelleFonction4)
- if numero==3: self.action.triggered.connect(self.appelleFonction3); numero=4
- if numero==2: self.action.triggered.connect(self.appelleFonction2); numero=3
- if numero==1: self.action.triggered.connect(self.appelleFonction1); numero=2
- if numero==0: self.action.triggered.connect(self.appelleFonction0); numero=1
- self.menu.addAction(self.action)
+ conditionSalome=commande[3]
+ if (self.appliEficas.salome == 0 and conditionSalome == True): return
+ label=commande[1]
+ tip=commande[5]
+ self.action=QAction(label,self.tree)
+ self.action.setStatusTip(tip)
+ if numero==4: self.action.triggered.connect(self.appelleFonction4)
+ if numero==3: self.action.triggered.connect(self.appelleFonction3); numero=4
+ if numero==2: self.action.triggered.connect(self.appelleFonction2); numero=3
+ if numero==1: self.action.triggered.connect(self.appelleFonction1); numero=2
+ if numero==0: self.action.triggered.connect(self.appelleFonction0); numero=1
+ self.menu.addAction(self.action)
def appelleFonction0(self):
nomCmd=nodeTraite.item.getNom()
if hasattr(self.appliEficas, 'mesScripts'):
if self.editor.code in self.editor.appliEficas.mesScripts :
- self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
+ self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
else : return
listeCommandes=self.dict_commandes_mesScripts[nomCmd]
commande=listeCommandes[numero]
if (nodeTraite.item.isValid() == 0 and conditionValid == True):
- QMessageBox.warning( None,
- tr("item invalide"),
- tr("l item doit etre valide"),)
- return
+ QMessageBox.warning( None,
+ tr("item invalide"),
+ tr("l item doit etre valide"),)
+ return
fonction=commande[0]
listenomparam=commande[2]
listeparam=[]
for p in listenomparam:
if hasattr(nodeTraite,p):
- listeparam.append(getattr(nodeTraite,p))
+ listeparam.append(getattr(nodeTraite,p))
if p=="self" : listeparam.append(self)
-
+
try :
- res, commentaire= fonction(listeparam)
- if not res :
- QMessageBox.warning( None,
- tr("echec de la fonction"),
- tr(commentaire),)
- return
+ res, commentaire= fonction(listeparam)
+ if not res :
+ QMessageBox.warning( None,
+ tr("echec de la fonction"),
+ tr(commentaire),)
+ return
except :
- pass
-
+ pass
+
try :
f=open(commande,"rb")
except :
- texte=tr("impossible de trouver la commande ") + commande
- QMessageBox.information( self.editor, tr("Lecteur PDF"), texte)
- return
+ texte=tr("impossible de trouver la commande ") + commande
+ QMessageBox.information( self.editor, tr("Lecteur PDF"), texte)
+ return
import os
if cle_doc.startswith('http:'):
- fichier = cle_doc
+ fichier = cle_doc
else :
fichier = os.path.abspath(os.path.join(self.editor.maConfiguration.path_doc,
cle_doc))
try :
- f=open(fichier,"rb")
+ f=open(fichier,"rb")
except :
- texte=tr("impossible d'ouvrir ") + fichier
- QMessageBox.information( self.editor, tr("Documentation Vide"), texte)
- return
+ texte=tr("impossible d'ouvrir ") + fichier
+ QMessageBox.information( self.editor, tr("Documentation Vide"), texte)
+ return
+
-
if os.name == 'nt':
- os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
+ os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
elif os.name == 'posix':
script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
pid = os.system(script)
self.commentMenu.addAction(self.CommApres)
self.commentMenu.addAction(self.CommAvant)
#ss-menu Parameters:
- self.paramMenu =self.menu.addMenu(tr('Parametre'))
+ self.paramMenu =self.menu.addMenu(tr('Parametre'))
self.paramMenu.addAction(self.ParamApres)
self.paramMenu.addAction(self.ParamAvant)
self.menu.addAction(self.Documentation)
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import os
DictExtensions= {"MAP" : ".map"}
class MyViewManager(object):
- def __init__(self,appliEficas):
- self.appliEficas=appliEficas
- self.tabWidgets = []
- self.mesIndexes = {}
- self.appliEficas=appliEficas
- self.editors = []
- self.dict_editors={}
- self.untitledCount = 0
- self.doubles = {}
-
- self.myQtab = self.appliEficas.myQtab
-
- self.myQtab.currentChanged.connect(self.indexChanged)
- self.myQtab.tabCloseRequested.connect(self.closeTab)
-
- def indexChanged(self):
- index=self.myQtab.currentIndex()
- if index in self.dict_editors:
- editor=self.dict_editors[index]
- self.appliEficas.maConfiguration=editor.maConfiguration
- self.appliEficas.code=editor.maConfiguration.code
- self.appliEficas.setWindowTitle(editor.titre)
- self.appliEficas.construitMenu()
-
- def handleOpen(self,fichier=None,patron=0,units=None):
- result = None
- if fichier is None:
- if self.appliEficas.demande==True :
- self.appliEficas.definitCode(None,None)
- if self.appliEficas.code == None:return
-
+ def __init__(self,appliEficas):
+ self.appliEficas=appliEficas
+ self.tabWidgets = []
+ self.mesIndexes = {}
+ self.appliEficas=appliEficas
+ self.editors = []
+ self.dictEditors={}
+ self.untitledCount = 0
+ self.doubles = {}
+
+ self.myQtab = self.appliEficas.myQtab
+
+ self.myQtab.currentChanged.connect(self.indexChanged)
+ self.myQtab.tabCloseRequested.connect(self.closeTab)
+
+ def indexChanged(self):
+ index=self.myQtab.currentIndex()
+ if index in self.dictEditors:
+ editor=self.dictEditors[index]
+ if editor.jdc !=None :
+ CONTEXT.unsetCurrentJdC()
+ CONTEXT.setCurrentJdC(editor.jdc)
+ self.appliEficas.maConfiguration=editor.maConfiguration
+ self.appliEficas.code=editor.maConfiguration.code
+ self.appliEficas.setWindowTitle(editor.titre)
+ self.appliEficas.construitMenu()
+
+ def handleOpen(self,fichier=None,patron=0,units=None):
+ result = None
+ if fichier is None:
+ if self.appliEficas.demande==True :
+ self.appliEficas.definitCode(None,None)
+ if self.appliEficas.code == None:return
+
if self.appliEficas.code in DictExtensions:
- chaine="JDC (*"+DictExtensions[self.appliEficas.code]+");;"
- extensions=tr(chaine+ "All Files (*)")
+ chaine="JDC (*"+DictExtensions[self.appliEficas.code]+");;"
+ extensions=tr(chaine+ "All Files (*)")
elif self.appliEficas.code== "TELEMAC" : extensions=tr('CAS (*.cas);;All Files (*)')
else :
- extensions=tr('Fichiers JDC (*.comm);;''Tous les Fichiers (*)')
+ extensions=tr('Fichiers JDC (*.comm);;''Tous les Fichiers (*)')
fichier = QFileDialog.getOpenFileName(self.appliEficas,
tr('Ouvrir Fichier'),
self.appliEficas.maConfiguration.savedir,
- extensions)
+ extensions)
fichier=fichier[0]
- if len(fichier) == 0: return None
- fichier = os.path.abspath(fichier)
- ulfile = os.path.abspath(fichier)
- self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
- self.appliEficas.addToRecentList(fichier)
- maPage=self.getEditor( fichier,units=units)
- if maPage: result = maPage
- if maPage : self.myQtab.setTabText(self.myQtab.indexOf(maPage),os.path.basename(fichier))
- return result
-
- def closeTab(self,indexAFermer):
- self.handleClose(indexAFermer = indexAFermer)
-
- def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter'),indexAFermer=None):
- if doitSauverRecent : self.appliEficas.sauveRecents()
- if indexAFermer == None :index=self.myQtab.currentIndex()
- else : index = indexAFermer
- if index < 0 : return
- res=self.checkDirty(self.dict_editors[index],texte)
- if res == 2 : return 2 # l utilisateur a annule
- idx=index
- while idx < len(self.dict_editors) -1 :
- self.dict_editors[idx]=self.dict_editors[idx+1]
- idx = idx + 1
- del self.dict_editors[len (self.dict_editors) -1]
- try :
- del self.doubles[self.dict_editors[index]]
- except :
- pass
- self.myQtab.removeTab(index)
- return res
-
-
- def run(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.run()
-
- def saveRun(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.saveRun()
-
- def handleCloseAll(self,texte=tr('Quitter')):
- res=0
- self.appliEficas.sauveRecents()
- while len(self.dict_editors) > 0 :
- self.myQtab.setCurrentIndex(0)
- res=self.handleClose(0,texte)
- if res==2 : return res # l utilsateur a annule
- return res
-
- def handleRechercher(self):
- #print "passage dans handleRechercher"
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleRechercher()
-
- def handleRechercherDsCatalogue(self):
- #print "passage dans handleRechercher"
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleRechercherDsCatalogue()
-
- def handleDeplier(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleDeplier()
-
- def handleEditCopy(self):
- #print "passage dans handleEditCopy"
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleEditCopy()
-
- def handleEditCut(self):
- #print "passage dans handleEditCut"
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleEditCut()
-
- def handleEditPaste(self):
- #print "passage dans handleEditPaste"
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleEditPaste()
-
- def handleSupprimer(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleSupprimer()
-
- def handleAjoutEtape(self,nomEtape):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleAjoutEtape(nomEtape)
-
-
- def newEditor(self,include=0):
- if self.appliEficas.demande==True :
- self.appliEficas.definitCode(None,None)
- if self.appliEficas.code == None:return
- maPage=self.getEditor(include=include)
-
- def newIncludeEditor(self):
- self.newEditor(include=1)
-
- def handleViewJdcFichierSource(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- self.dict_editors[index].viewJdcSource()
-
- def ouvreArbre(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- self.dict_editors[index].ouvreArbre()
-
- def fermeArbre(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- self.dict_editors[index].fermeArbre()
-
- def ajoutCommentaire(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.ajoutCommentaire()
-
- def handleViewJdcRegles(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- self.dict_editors[index].viewJdcRegles()
-
- def handleGestionParam(self):
- index=self.myQtab.currentIndex()
- if index < 0 :
- QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees"))
- return
- self.dict_editors[index].gestionParam()
-
- def handleViewJdcRapport(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- self.dict_editors[index].viewJdcRapport()
-
- def handleViewJdcPy(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- self.dict_editors[index].viewJdcPy()
-
- def saveCurrentEditor(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- if editor in self.doubles :
- QMessageBox.warning(
- None,
- tr("Fichier Duplique"),
- tr("Le fichier ne sera pas sauvegarde."),)
- return
- ok, newName = editor.saveFile()
- if ok :
- fileName=os.path.basename(newName)
- self.myQtab.setTabText(index,fileName)
- return ok
-
- def saveCompleteCurrentEditor(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- ok, newName = editor.saveCompleteFile()
- return ok
-
- def sauveLigneCurrentEditor(self):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- if editor in self.doubles :
- QMessageBox.warning(
- None,
- tr("Fichier Duplique"),
- tr("Le fichier ne sera pas sauvegarde."),)
- return
- ok, newName = editor.sauveLigneFile()
- if ok :
- fileName=os.path.basename(newName)
- self.myQtab.setTabText(index,fileName)
- return ok
-
-
- def saveAsCurrentEditor(self):
- index=self.myQtab.currentIndex()
- editor=self.dict_editors[index]
- oldName=editor.fichier
- ok,newName = editor.saveFileAs()
- if ok :
- fileName=os.path.basename(newName)
- self.myQtab.setTabText(index,fileName)
- if editor in self.doubles :
- if oldName != newName :
- del self.doubles[editor]
- return ok
-
- def displayJDC(self,jdc,fn=None):
+ if len(fichier) == 0: return None
+ fichier = os.path.abspath(fichier)
+ ulfile = os.path.abspath(fichier)
+ self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+ self.appliEficas.addToRecentList(fichier)
+ maPage = self.getEditor( fichier,units=units)
+ if maPage : result = maPage
+ if maPage : self.myQtab.setTabText(self.myQtab.indexOf(maPage),os.path.basename(fichier))
+ return result
+
+ def closeTab(self,indexAFermer):
+ self.handleClose(indexAFermer = indexAFermer)
+
+ def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter'),indexAFermer=None):
+ if doitSauverRecent : self.appliEficas.sauveRecents()
+ if indexAFermer == None : index=self.myQtab.currentIndex()
+ else : index = indexAFermer
+ if index < 0 : return
+ res=self.checkDirty(self.dictEditors[index],texte)
+ if res == 2 : return 2 # l utilisateur a annule
+ idx=index
+ while idx < len(self.dictEditors) -1 :
+ self.dictEditors[idx]=self.dictEditors[idx+1]
+ idx = idx + 1
+ del self.dictEditors[len (self.dictEditors) -1]
+ try :
+ del self.doubles[self.dictEditors[index]]
+ except :
+ pass
+ self.myQtab.removeTab(index)
+ return res
+
+
+ def run(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.run()
+
+ def saveRun(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.saveRun()
+
+ def handleCloseAll(self,texte=tr('Quitter')):
+ res=0
+ self.appliEficas.sauveRecents()
+ while len(self.dictEditors) > 0 :
+ self.myQtab.setCurrentIndex(0)
+ res=self.handleClose(0,texte)
+ if res==2 : return res # l utilsateur a annule
+ return res
+
+ def handleRechercher(self):
+ #print "passage dans handleRechercher"
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleRechercher()
+
+ def handleRechercherDsCatalogue(self):
+ #print "passage dans handleRechercher"
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleRechercherDsCatalogue()
+
+ def handleDeplier(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleDeplier()
+
+ def handleEditCopy(self):
+ #print "passage dans handleEditCopy"
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleEditCopy()
+
+ def handleEditCut(self):
+ #print "passage dans handleEditCut"
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleEditCut()
+
+ def handleEditPaste(self):
+ #print "passage dans handleEditPaste"
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleEditPaste()
+
+ def handleSupprimer(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleSupprimer()
+
+ def handleAjoutEtape(self,nomEtape):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleAjoutEtape(nomEtape)
+
+
+ def newEditor(self,include=0):
+ if self.appliEficas.demande==True :
+ self.appliEficas.definitCode(None,None)
+ if self.appliEficas.code == None:return
+ maPage=self.getEditor(include=include)
+
+ def newIncludeEditor(self):
+ self.newEditor(include=1)
+
+ def handleViewJdcFichierSource(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dictEditors[index].viewJdcSource()
+
+ def ouvreArbre(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dictEditors[index].ouvreArbre()
+
+ def fermeArbre(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dictEditors[index].fermeArbre()
+
+ def ajoutCommentaire(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.ajoutCommentaire()
+
+ def handleViewJdcRegles(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dictEditors[index].viewJdcRegles()
+
+ def handleGestionParam(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 :
+ QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees"))
+ return
+ self.dictEditors[index].gestionParam()
+
+ def handleViewJdcRapport(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dictEditors[index].viewJdcRapport()
+
+ def handleViewJdcPy(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dictEditors[index].viewJdcPy()
+
+ def saveCurrentEditor(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ if editor in self.doubles :
+ QMessageBox.warning(
+ None,
+ tr("Fichier Duplique"),
+ tr("Le fichier ne sera pas sauvegarde."),)
+ return
+ ok, newName = editor.saveFile()
+ if ok :
+ fileName=os.path.basename(newName)
+ self.myQtab.setTabText(index,fileName)
+ return ok
+
+ def saveCompleteCurrentEditor(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ ok, newName = editor.saveCompleteFile()
+ return ok
+
+ def sauveLigneCurrentEditor(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ if editor in self.doubles :
+ QMessageBox.warning(
+ None,
+ tr("Fichier Duplique"),
+ tr("Le fichier ne sera pas sauvegarde."),)
+ return
+ ok, newName = editor.sauveLigneFile()
+ if ok :
+ fileName=os.path.basename(newName)
+ self.myQtab.setTabText(index,fileName)
+ return ok
+
+ def saveAsCurrentEditor(self):
+ index=self.myQtab.currentIndex()
+ editor=self.dictEditors[index]
+ oldName=editor.fichier
+ ok,newName = editor.saveFileAs()
+ if ok :
+ fileName=os.path.basename(newName)
+ self.myQtab.setTabText(index,fileName)
+ if editor in self.doubles :
+ if oldName != newName :
+ del self.doubles[editor]
+ return ok
+
+ def displayJDC(self,jdc,fn=None):
"""
Public slot to display a file in an editor.
@param fn name of file to be opened
editor = self.getEditor(fichier= fn, jdc = jdc ,include=1)
self.appliEficas.addToRecentList(editor.getFileName())
- def getEditor(self,fichier = None,jdc = None, units = None,include=0):
- newWin = 0
- double = None
- indexEditor=0
- for indexEditor in self.dict_editors :
- editor=self.dict_editors[indexEditor]
- if self.samePath(fichier, editor.getFileName()):
- msgBox = QMessageBox()
- msgBox.setWindowTitle(tr("Fichier"))
- msgBox.setText(tr("Le fichier <b>%s</b> est deja ouvert", str(fichier)))
- msgBox.addButton(tr("&Duplication"),0)
- msgBox.addButton(tr("&Abandonner"),1)
- abort=msgBox.exec_()
- if abort: break
- double=editor
- else :
+ def getEditor(self,fichier = None,jdc = None, units = None,include=0):
+ newWin = 0
+ double = None
+ indexEditor=0
+ for indexEditor in self.dictEditors :
+ editor=self.dictEditors[indexEditor]
+ if self.samePath(fichier, editor.getFileName()):
+ msgBox = QMessageBox()
+ msgBox.setWindowTitle(tr("Fichier"))
+ msgBox.setText(tr("Le fichier <b>%s</b> est deja ouvert", str(fichier)))
+ msgBox.addButton(tr("&Duplication"),0)
+ msgBox.addButton(tr("&Abandonner"),1)
+ abort=msgBox.exec_()
+ if abort: break
+ double=editor
+ else :
from .editor import JDCEditor
editor = JDCEditor(self.appliEficas,fichier, jdc, self.myQtab,units=units,include=include)
- if double != None :
- self.doubles[editor]=double
+ if double != None :
+ self.doubles[editor]=double
if editor.jdc: # le fichier est bien un jdc
self.editors.append(editor)
newWin = 1
else:
editor.closeIt()
- if newWin:
+ if newWin:
self.addView(editor, fichier)
- elif editor.jdc:
+ elif editor.jdc:
self.myQtab.setCurrentIndex(indexEditor)
- index=self.myQtab.currentIndex()
- if index != -1 :
- self.dict_editors[index]=editor
- return editor
+ index=self.myQtab.currentIndex()
+ if index != -1 :
+ self.dictEditors[index]=editor
+ return editor
- def addView(self, win, fichier=None):
+ def addView(self, win, fichier=None):
#PNPNPNPN --> a affiner
if fichier is None:
self.untitledCount += 1
self.currentEditor=win
win.setFocus()
- def getOpenStartDir(self) :
- #PN --> Les Preferences
+ def getOpenStartDir(self) :
+ #PN --> Les Preferences
try :
userDir=os.path.expanduser("~/Eficas_install/")
return userDir
except :
return ""
- def samePath(self,f1, f2):
- """
- compare two paths.
- """
- if f1 is None or f2 is None: return 0
- if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
- return 0
+ def samePath(self,f1, f2):
+ """
+ compare two paths.
+ """
+ if f1 is None or f2 is None: return 0
+ if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
+ return 0
- def checkDirty(self, editor,texte):
+ def checkDirty(self, editor,texte):
"""
Private method to check dirty status and open a message window.
-
+
@param editor editor window to check
@return flag indicating successful reset of the dirty flag (boolean)
- """
- res=1
+ """
+ res=1
if (editor.modified) and (editor in self.doubles) :
msgBox = QMessageBox(None)
msgBox.setWindowTitle(tr("Fichier Duplique"))
return ok
return res
- def handleAjoutGroup(self,listeGroup):
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- editor.handleAjoutGroup(listeGroup)
-
- def handleFonctionUtilisateur(self,laFonctionUtilisateur, lesArguments):
- # Peut-etre a blinder un peu plus sur le nb d argument
- index=self.myQtab.currentIndex()
- if index < 0 : return
- editor=self.dict_editors[index]
- if editor.getEtapeCourante() == None :
- QMessageBox.information( self.appliEficas,
- tr("Selectionner une etape"),
- tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide ou une zone vide et inserer le catalogue apres"))
- return
-
- listeParam = []
- for p in lesArguments:
- if hasattr(editor,p): listeParam.append(getattr(editor,p))
- if p=="editor" : listeParam.append(editor)
- if p=="etapeCourante" : listeParam.append(editor.getEtapeCourante())
- laFonctionUtilisateur(*listeParam)
-
+ def handleAjoutGroup(self,listeGroup):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ editor.handleAjoutGroup(listeGroup)
+
+ def handleFonctionUtilisateur(self,laFonctionUtilisateur, lesArguments):
+ # Peut-etre a blinder un peu plus sur le nb d argument
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dictEditors[index]
+ if editor.getEtapeCourante() == None :
+ QMessageBox.information( self.appliEficas,
+ tr("Selectionner une etape"),
+ tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide ou une zone vide et inserer le catalogue apres"))
+ return
+
+ listeParam = []
+ for p in lesArguments:
+ if hasattr(editor,p): listeParam.append(getattr(editor,p))
+ if p=="editor" : listeParam.append(editor)
+ if p=="etapeCourante" : listeParam.append(editor.getEtapeCourante())
+ laFonctionUtilisateur(*listeParam)
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import os
from Extensions.i18n import tr
-import six
-from PyQt5.QtWidgets import QFileDialog, QMessageBox
-from PyQt5.QtCore import QFileInfo
# --------------------------------
class JdcSsIhmHandler(object):
# --------------------------------
# retourne a l utilisateur
- def __init__(self,viewManager):
+ def __init__(self,viewManager):
# --------------------------------------
- self.viewManagerSsIhm=viewManager
+ self.viewManagerSsIhm=viewManager
- def viewJdcPy(self) :
+ def viewJdcPy(self) :
# ---------------------
- self.viewManagerSsIhm.handleViewJdcPy(self)
+ self.viewManagerSsIhm.handleViewJdcPy(self)
- def viewJdcSource(self) :
+ def viewJdcSource(self) :
# ---------------------
- self.viewManagerSsIhm.handleViewJdcSource(self)
+ self.viewManagerSsIhm.handleViewJdcSource(self)
- def getFileName(self):
+ def getFileName(self):
# ---------------------
- self.viewManagerSsIhm.getFileName(self)
+ self.viewManagerSsIhm.getFileName(self)
- def viewJdcRapport(self) :
+ def viewJdcRapport(self) :
# ---------------------
- self.viewManagerSsIhm.handleViewJdcRapport(self)
+ self.viewManagerSsIhm.handleViewJdcRapport(self)
- def getJdcRapport(self) :
+ def getJdcRapport(self) :
# ---------------------
- return self.viewManagerSsIhm.handleGetJdcRapport(self)
+ return self.viewManagerSsIhm.handleGetJdcRapport(self)
- def getDicoPython(self) :
+ def getDicoPython(self) :
# -------------------------
- return self.viewManagerSsIhm.generDico(self)
+ return self.viewManagerSsIhm.generDico(self)
- def isJdcValid(self) :
+ def isJdcValid(self) :
# -------------------------
- return self.viewManagerSsIhm.isJdcValid(self)
+ return self.viewManagerSsIhm.isJdcValid(self)
- def fileSaveAs(self,fileName):
+ def fileSaveAs(self,fileName):
# -------------------------
- return self.viewManagerSsIhm.fileSaveAs(self,fileName)
+ return self.viewManagerSsIhm.fileSaveAs(self,fileName)
- def fileLegerSaveAs(self,fileName):
+ def fileLegerSaveAs(self,fileName):
# -----------------------------------
- return self.viewManagerSsIhm.fileLegerSaveAs(self,fileName)
+ return self.viewManagerSsIhm.fileLegerSaveAs(self,fileName)
#--------------------------------
# Symetrique de ViewManager mais pas d heritage entre les 2
# dans le viewManager pas de souci pour savoir qui est le jdc sur lequel on travaille
-# ici en revanche.... c est moins sur
+# ici en revanche.... c est moins sur . voir avec le fichier
# --------------------------------
- def __init__(self,appliEficas):
+ def __init__(self,appliEficas):
# --------------------------------
- self.appliEficas=appliEficas
- self.tabWidgets = []
- self.mesIndexes = {}
- self.dictEditors={}
- self.untitledCount = 0
- self.doubles = {}
+ self.appliEficas=appliEficas
+ self.tabWidgets = []
+ self.mesIndexes = {}
+ self.dictEditors={}
+ self.untitledCount = 0
+ self.doubles = {}
# ------------------------------------------------------
- def handleOpen(self,fichier=None, units=None):
+ def handleOpen(self,fichier=None, units=None):
# ------------------------------------------------------
- result = None
- if fichier is None:
- print ('nom de fichier obligatoire')
- return None
+ result = None
+ if fichier is None:
+ print ('nom de fichier obligatoire')
+ return None
- for handler in self.dictEditors :
- editor=self.dictEditors[handler]
- if self.samePath(fichier, editor.getFileName()):
- print ('fichier deja ouvert . pas de nouvel editor')
- return handler
+ for handler in self.dictEditors :
+ editor=self.dictEditors[handler]
+ if self.samePath(fichier, editor.getFileName()):
+ print ('fichier deja ouvert . pas de nouvel editor')
+ return handler
- monNewHandler = self.getNewEditor(fichier,units)
- return monNewHandler
+ monNewHandler = self.getNewEditor(fichier,units)
+ return monNewHandler
# ----------------------------------------------------------------------
- def getNewEditor(self,fichier = None,jdc = None, units = None,include=0):
+ def getNewEditor(self,fichier = None,jdc = None, units = None,include=0):
# ----------------------------------------------------------------------
-
- from InterfaceQT4.editorSsIhm import JDCEditorSsIhm
- editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include)
-
- if editor.jdc: # le fichier est bien un jdc
- monHandler = JdcSsIhmHandler(self)
- self.dictEditors[monHandler]=editor
- return monHandler
- else:
- print ('impossible de construire le jdc')
- return None
+# il faudrait decider entre e handler ou non
+# le cas d usage n est pas tout a fait identique :
+# avec handler pour les utilisateurs avance
+# sans pour les utilisateurs encore plus ancvances et les tests
+
+ from InterfaceQT4.editorSsIhm import JDCEditorSsIhm
+ editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include)
+
+ if editor.jdc: # le fichier est bien un jdc
+ monHandler = JdcSsIhmHandler(self)
+ self.dictEditors[monHandler]=editor
+ return monHandler
+ else:
+ print ('impossible de construire le jdc')
+ return None
+
+# --------------------------------------------------------------------------------
+ def getNewEditorNormal(self,fichier = None,jdc = None, units = None,include=0):
+# --------------------------------------------------------------------------------
+
+ from InterfaceQT4.editorSsIhm import JDCEditorSsIhm
+ editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include)
+ self.editor=editor
+ return editor
# -----------------------------
- def samePath(self,f1, f2):
+ def samePath(self,f1, f2):
# ------------------------------
- """
- compare two paths.
- """
- if f1 is None or f2 is None: return 0
- if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
- return 0
+ """
+ compare two paths.
+ """
+ if f1 is None or f2 is None: return 0
+ if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
+ return 0
# ---------------------------------
- def handleViewJdcPy(self,handler):
+ def handleViewJdcPy(self,handler):
# ---------------------------------
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcPy()
# ---------------------------------
- def getFileName(self,handler):
+ def getFileName(self,handler):
# ---------------------------------
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].getFileName()
# ---------------------------------------------
- def handleViewJdcSource(self,handler):
+ def handleViewJdcSource(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcSource()
# ---------------------------------------------
- def handleViewJdcRapport(self,handler):
+ def handleViewJdcRapport(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcRapport()
# ---------------------------------------------
- def handleGetJdcRapport(self,handler):
+ def handleGetJdcRapport(self,handler):
# ---------------------------------------------
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].getJdcRapport()
# ---------------------------------------------
- def handleViewJdcRapport(self,handler):
+ def handleViewJdcRapport(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcRapport()
# ---------------------------------------------
- def generDico(self,handler):
+ def generDico(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].generDico()
# ---------------------------------------------
- def isJdcValid(self,handler):
+ def isJdcValid(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].jdc.isValid()
# ---------------------------------------------
- def fileSaveAs(self,handler,fileName):
+ def fileSaveAs(self,handler,fileName):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].saveFile(fileName)
# ---------------------------------------------
- def fileLegerSaveAs(self, handler,fileName):
+ def fileLegerSaveAs(self, handler,fileName):
# ---------------------------------------------
# print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].saveFileLegerAs(fileName)
-
-
-# def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter')):
-# if doitSauverRecent : self.appliEficas.sauveRecents()
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# res=self.checkDirty(self.dict_editors[index],texte)
-# if res == 2 : return 2 # l utilisateur a annule
-# index=self.myQtab.currentIndex()
-# idx=index
-# while idx < len(self.dict_editors) -1 :
-# self.dict_editors[idx]=self.dict_editors[idx+1]
-# idx = idx + 1
-# del self.dict_editors[len (self.dict_editors) -1]
-# try :
-# del self.doubles[self.dict_editors[index]]
-# except :
-# pass
-# self.myQtab.removeTab(index)
-# return res
-#
-
-#
-# def handleCloseAll(self,texte=tr('Quitter')):
-# res=0
-# self.appliEficas.sauveRecents()
-# while len(self.dict_editors) > 0 :
-# self.myQtab.setCurrentIndex(0)
-# res=self.handleClose(0,texte)
-# if res==2 : return res # l utilsateur a annule
-# return res
-#
-#
-#
-# def newEditor(self,include=0):
-# if self.appliEficas.demande==True :
-# self.appliEficas.definitCode(None,None)
-# if self.appliEficas.code == None:return
-# maPage=self.getEditor(include=include)
-#
-
-#
-# def handleViewJdcRegles(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# self.dict_editors[index].viewJdcRegles()
-#
-# def handleGestionParam(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 :
-# QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees"))
-# return
-# self.dict_editors[index].gestionParam()
-#
-#
-#
-# def saveCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# if editor in self.doubles :
-# QMessageBox.warning(
-# None,
-# tr("Fichier Duplique"),
-# tr("Le fichier ne sera pas sauvegarde."),)
-# return
-# ok, newName = editor.saveFile()
-# if ok :
-# fileName=os.path.basename(six.text_type(newName))
-# self.myQtab.setTabText(index,fileName)
-# return ok
-#
-# def saveLegerCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# ok, newName = editor.saveFileLeger()
-# return ok
-#
-# def sauveLigneCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# if editor in self.doubles :
-# QMessageBox.warning(
-# None,
-# tr("Fichier Duplique"),
-# tr("Le fichier ne sera pas sauvegarde."),)
-# return
-# ok, newName = editor.sauveLigneFile()
-# if ok :
-# fileName=os.path.basename(six.text_type(newName))
-# self.myQtab.setTabText(index,fileName)
-# return ok
-#
-#
-# def saveAsCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# editor=self.dict_editors[index]
-# oldName=editor.fichier
-# ok,newName = editor.saveFileAs()
-# if ok :
-# fileName=os.path.basename(six.text_type(newName))
-# self.myQtab.setTabText(index,fileName)
-# if editor in self.doubles :
-# if oldName != newName :
-# del self.doubles[editor]
-# return ok
-#
-# def displayJDC(self,jdc,fn=None):
-# """
-# Public slot to display a file in an editor.
-# @param fn name of file to be opened
-# # insert filename into list of recently opened files
-# """
-# titre=None
-# if fn != None : titre=fn.split("/")[-1]
-# editor = self.getEditor(fichier= fn, jdc = jdc ,include=1)
-# self.appliEficas.addToRecentList(editor.getFileName())
-#
-
-##PNPNPNPN --> a affiner
-# if fichier is None:
-# self.untitledCount += 1
-# self.myQtab.addTab(win, tr("Fichier non encore nomme ", self.untitledCount))
-# #self.myQtab.addTab(win, str(self.appliEficas.code))
-# else:
-# liste=fichier.split('/')
-# txt = liste[-1]
-# if not QFileInfo(fichier).isWritable():
-# txt = '%s (ro)' % txt
-# self.myQtab.addTab(win,txt )
-# self.myQtab.setCurrentWidget(win)
-# self.currentEditor=win
-# win.setFocus()
-#
-# def getOpenStartDir(self) :
-# #PN --> Les Preferences
-# try :
-# userDir=os.path.expanduser("~/Eficas_install/")
-# return userDir
-# except :
-# return ""
-#
-#
-# def checkDirty(self, editor,texte):
-# """
-# Private method to check dirty status and open a message window.
-#
-# @param editor editor window to check
-# @return flag indicating successful reset of the dirty flag (boolean)
-# """
-# res=1
-# if (editor.modified) and (editor in self.doubles) :
-# msgBox = QMessageBox(None)
-# msgBox.setWindowTitle(tr("Fichier Duplique"))
-# msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
-# msgBox.addButton(texte,0)
-# msgBox.addButton(tr("&Annuler"),1)
-# res=msgBox.exec_()
-# if res == 0 : return 1
-# return 2
-# if editor.modified:
-# fn = editor.getFileName()
-# if fn is None: fn = tr('Noname')
-# msgBox = QMessageBox(None)
-# msgBox.setWindowTitle(tr("Fichier Modifie"))
-# msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
-# msgBox.addButton(tr("&Sauvegarder"),1)
-# msgBox.addButton(tr("&Quitter sans sauvegarder"),0)
-# msgBox.addButton(tr("&Annuler"),2)
-# res=msgBox.exec_()
-# if res == 2 : return res
-# if res == 0:
-# (ok, newName) = editor.saveFile()
-# if ok:
-# fileName=os.path.basename(six.text_type(newName))
-# index=self.myQtab.currentIndex()
-# self.myQtab.setTabText(index,fileName)
-# return ok
-# return res
-#
-# def handleAjoutGroup(self,listeGroup):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# editor.handleAjoutGroup(listeGroup)
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<cata xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/efficas file:///Z:/home_fayolle/MED_SVN/PASCALE/XSD/Model%20Efficas%20(1.1)%20%20v5.xsd">\r
-<commandes>\r
-<PROC xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" efficas:nom="FAS">\r
- <efficas:FACT efficas:nom="FAMILY_MESH_NAME_REF" efficas:statut="o" efficas:min_occurs="1" efficas:max_occurs="-1">\r
- <SIMP efficas:nom="NAME" efficas:statut="o"><typeAttendu>TXM</typeAttendu></SIMP>\r
- <efficas:FACT efficas:nom="ELEM" efficas:statut="f" efficas:min_occurs="1" efficas:max_occurs="-1">\r
-<!-- <efficas:regles>\r
- --><!-- Ajouter des contraintes de vérification de la présence ATT et GRO --><!--\r
- <efficas:PRESENT_PRESENT>ATT GRO</efficas:PRESENT_PRESENT>\r
- </efficas:regles>-->\r
- <efficas:SIMP efficas:nom="NUM" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
- <efficas:SIMP efficas:nom="NAME" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
- <efficas:FACT efficas:nom="ATT" efficas:statut="f" efficas:max_occurs="1">\r
- <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="DES" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
- <SIMP efficas:nom="IDE" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="VAL" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
- </efficas:FACT>\r
- <efficas:FACT efficas:nom="GRO" efficas:statut="f" efficas:max_occurs="1">\r
- <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="NOM" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
- </efficas:FACT>\r
- </efficas:FACT>\r
- </efficas:FACT>\r
-</PROC>\r
-</commandes>\r
-</cata>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<cata xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/efficas file:///Z:/home_fayolle/MED_SVN/PASCALE/XSD/Model%20Efficas%20(1.1)%20%20v5.xsd">\r
-<commandes>\r
-<PROC xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" efficas:nom="FAS">\r
- <efficas:FACT efficas:nom="FAMILY_MESH_NAME_REF" efficas:statut="o" efficas:min_occurs="1" efficas:max_occurs="-1">\r
- <SIMP efficas:nom="NAME" efficas:statut="o"><typeAttendu>TXM</typeAttendu></SIMP>\r
- <efficas:FACT efficas:nom="ELEM" efficas:statut="f" efficas:min_occurs="1" efficas:max_occurs="-1">\r
-<!-- <efficas:regles>\r
- --><!-- Ajouter des contraintes de vérification de la présence ATT et GRO --><!--\r
- <efficas:PRESENT_PRESENT>ATT GRO</efficas:PRESENT_PRESENT>\r
- </efficas:regles>-->\r
- <efficas:SIMP efficas:nom="NUM" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
- <efficas:SIMP efficas:nom="NAME" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
- <efficas:FACT efficas:nom="ATT" efficas:statut="f" efficas:max_occurs="1">\r
- <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="DES" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
- <SIMP efficas:nom="IDE" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="VAL" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
- </efficas:FACT>\r
- <efficas:FACT efficas:nom="GRO" efficas:statut="f" efficas:max_occurs="1">\r
- <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="NOM" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
- </efficas:FACT>\r
- </efficas:FACT>\r
- </efficas:FACT>\r
-</PROC>\r
-</commandes>\r
-</cata>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<cata xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/efficas file:///Z:/home_fayolle/MED_SVN/PASCALE/XSD/Model%20Efficas%20(1.1)%20%20v5.xsd">\r
-<commandes>\r
-<PROC xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" efficas:nom="FAS">\r
- <efficas:FACT efficas:nom="FAMILY_MESH_NAME_REF" efficas:statut="o" efficas:min_occurs="1" efficas:max_occurs="-1">\r
- <SIMP efficas:nom="NAME" efficas:statut="o"><typeAttendu>TXM</typeAttendu></SIMP>\r
- <efficas:FACT efficas:nom="ELEM" efficas:statut="f" efficas:min_occurs="1" efficas:max_occurs="-1">\r
-<!-- <efficas:regles>\r
- --><!-- Ajouter des contraintes de vérification de la présence ATT et GRO --><!--\r
- <efficas:PRESENT_PRESENT>ATT GRO</efficas:PRESENT_PRESENT>\r
- </efficas:regles>-->\r
- <efficas:SIMP efficas:nom="NUM" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
- <efficas:SIMP efficas:nom="NAME" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
- <efficas:FACT efficas:nom="ATT" efficas:statut="f" efficas:max_occurs="1">\r
- <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="DES" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
- <SIMP efficas:nom="IDE" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="VAL" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
- </efficas:FACT>\r
- <efficas:FACT efficas:nom="GRO" efficas:statut="f" efficas:max_occurs="1">\r
- <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
- <SIMP efficas:nom="NOM" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
- </efficas:FACT>\r
- </efficas:FACT>\r
- </efficas:FACT>\r
-</PROC>\r
-</commandes>\r
-</cata>\r
+++ /dev/null
-pyxbgen -u model.xsd -m efficas --write-for-customization
+++ /dev/null
-Factory
-
-OPER
-
-PROC
-
-_Abstract
-
-_AddElement
-
-_AlternativeConstructor
-
-_AttributeMap
-
-_AttributeWildcard
-
-_Automaton
-
-_CT_ELEMENT_ONLY
-
-_CT_EMPTY
-
-_CT_MIXED
-
-_CT_SIMPLE
-
-_CompatibleValue
-
-_ContentTypeTag
-
-_DynamicCreate
-
-_DynamicCreate_mixin__AlternativeConstructorAttribute
-
-_DynamicCreate_mixin__SupersedingClassAttribute
-
-_ElementBindingDeclForName
-
-_ElementMap
-
-_ExpandedName
-
-_GetValidationConfig
-
-_HasWildcardElement
-
-_IsMixed
-
-_IsSimpleTypeContent
-
-_IsUrType
-
-_Locatable_mixin__location
-
-_Name
-
-_PerformValidation
-
-_PreFactory_vx
-
-_PyXBFactoryKeywords
-
-_RequireXSIType
-
-_ReservedSymbols
-
-_SetAlternativeConstructor
-
-_SetSupersedingClass
-
-_SetValidationConfig
-
-_SupersedingClass
-
-_T_commandes__OPER
-
-_T_commandes__PROC
-
-_TypeBinding_mixin__AttributesFromDOM
-
-_TypeBinding_mixin__WarnedUnassociatedElement
-
-_TypeBinding_mixin__checkNilCtor
-
-_TypeBinding_mixin__constructedWithValue
-
-_TypeBinding_mixin__element
-
-_TypeBinding_mixin__getValidationConfig
-
-_TypeBinding_mixin__namespaceContext
-
-_TypeBinding_mixin__xsiNil
-
-_TypeDefinition
-
-_UseForTag
-
-_XSDLocation
-
-__class__
-
-__delattr__
-
-__dict__
-
-__doc__
-
-__format__
-
-__getattribute__
-
-__hash__
-
-__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasOPER
-
-__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasPROC
-
-__init__
-
-__module__
-
-__new__
-
-__reduce__
-
-__reduce_ex__
-
-__repr__
-
-__setattr__
-
-__sizeof__
-
-__str__
-
-__subclasshook__
-
-__weakref__
-
-_addContent
-
-_appendWildcardElement
-
-_automatonConfiguration
-
-_complexTypeDefinition__NeedWarnOnContent
-
-_complexTypeDefinition__WarnOnContent
-
-_complexTypeDefinition__automatonConfiguration
-
-_complexTypeDefinition__childrenForDOM
-
-_complexTypeDefinition__content
-
-_complexTypeDefinition__setContent
-
-_complexTypeDefinition__wildcardAttributeMap
-
-_complexTypeDefinition__wildcardElements
-
-_constructedWithValue
-
-_description
-
-_diagnosticName
-
-_element
-
-_finalizeContentModel
-
-_isNil
-
-_location
-
-_namespaceContext
-
-_performValidation
-
-_postDOMValidate
-
-_postFactory_vx
-
-_resetAutomaton
-
-_resetContent
-
-_setAttribute
-
-_setAttributesFromKeywordsAndDOM
-
-_setDOMFromAttributes
-
-_setElement
-
-_setIsNil
-
-_setLocation
-
-_setNamespaceContext
-
-_setValidationConfig
-
-_substitutesFor
-
-_symbolSet
-
-_toDOM_csc
-
-_validateAttributes
-
-_validateBinding_vx
-
-_validatedChildren
-
-_validationConfig
-
-_validationConfig_
-
-append
-
-content
-
-extend
-
-orderedContent
-
-reset
-
-toDOM
-
-toxml
-
-validateBinding
-
-value
-
-wildcardAttributeMap
-
-wildcardElements
-
-xsdConstraintsOK
-
-_______________________
-je passe ds CreerAccas
-PlageValeur
-ValeurDef
-doc
-portee
-statut
-o
-typeAttendu
-TXM
-validators
-_______________________
+++ /dev/null
-# -*- coding: utf-8 -*-
-from raw.efficas import *
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<!-- edited with XMLSpy v2014 rel. 2 (x64) (http://www.altova.com) by BC (ED) -->\r
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" xmlns:altova="http://www.altova.com/xml-schema-extensions" targetNamespace="http://chercheurs.edf.com/logiciels/efficas" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0" vc:minVersion="1.1">\r
- <xs:element name="doc" type="T_doc"/>\r
- <xs:element name="cata" type="T_cata"/>\r
- <xs:element name="regles" type="T_regles"/>\r
- <xs:element name="typeCree" type="T_classe_utilisateur"/>\r
- <xs:element name="ValeurDef" type="T_typeAttendu"/>\r
- <xs:element name="ValeurSugg" type="T_typeAttendu"/>\r
- <xs:element name="fonction_utilisateur" type="T_fonction_python"/>\r
- <xs:element name="commandes" type="T_commandes">\r
- <xs:unique name="Uniq_Command">\r
- <xs:selector xpath="*"/>\r
- <xs:field xpath="@efficas:nom"/>\r
- </xs:unique>\r
- <xs:key name="Uniq_Name_In_Oper">\r
- <xs:annotation>\r
- <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>\r
- </xs:annotation>\r
- <xs:selector xpath="./OPER/BLOC |./OPER/FACT|./OPER/SIMP"/>\r
- <xs:field xpath="@efficas:nom"/>\r
- </xs:key>\r
- <xs:keyref name="Ref_A_Name_In_Oper" refer="Uniq_Name_In_Oper">\r
- <xs:selector xpath="./OPER/regles"/>\r
- <xs:field xpath="EXCLUS"/>\r
- </xs:keyref>\r
- <xs:key name="Uniq_Name_In_Proc">\r
- <xs:annotation>\r
- <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>\r
- </xs:annotation>\r
- <xs:selector xpath="./PROC/BLOC | ./PROC/FACT| ./PROC/SIMP"/>\r
- <xs:field xpath="@efficas:nom"/>\r
- </xs:key>\r
- <xs:keyref name="Ref_A_Name_In_Proc" refer="Uniq_Name_In_Proc">\r
- <xs:selector xpath="./PROC/regles"/>\r
- <xs:field xpath="EXCLUS"/>\r
- </xs:keyref>\r
- </xs:element>\r
- <xs:element name="validators" type="T_validators"/>\r
- <xs:element name="PlageValeur" type="T_PlageValeur"/>\r
- <xs:element name="typeAttendu" type="T_name"/>\r
- <xs:element name="classeUtilisateurName" type="T_classe_utilisateur_username" abstract="true" substitutionGroup="typeAttendu"/>\r
- <xs:element name="SIMP" type="T_SIMP"/>\r
- <xs:element name="portee" type="T_portee" default="None"/>\r
- <xs:element name="condition" type="T_fonction_python"/>\r
- <xs:element name="borne_sup" type="T_typeAttendu"/>\r
- <xs:element name="borne_inf" type="T_typeAttendu"/>\r
- <!-- <xs:element name="into" type="T_into"/>-->\r
- <xs:element name="into" type="T_into"/>\r
- <!-- <xs:element name="into_plus_fonction" type="T_into" abstract="true" substitutionGroup="into"/>-->\r
- <xs:attribute name="nom" type="AT_nom"/>\r
- <xs:attribute name="ag" type="AT_ag"/>\r
- <xs:attribute name="fr" type="xs:string"/>\r
- <xs:attribute name="ang" type="xs:string"/>\r
- <xs:attribute name="docu" type="AT_docu"/>\r
- <xs:attribute name="valeur_sugg" type="AT_valeur_sugg"/>\r
- <xs:attribute name="statut" type="AT_statut" default="o"/>\r
- <xs:attribute name="max_occurs" type="AT_max_occurs"/>\r
- <xs:attribute name="min_occurs" type="AT_min_occurs"/>\r
- <xs:attribute name="subroutine" type="AT_subroutine" default="None"/>\r
- <xs:complexType name="T_doc">\r
- <xs:attribute ref="fr" use="optional"/>\r
- <xs:attribute ref="ang"/>\r
- <xs:attribute ref="docu"/>\r
- </xs:complexType>\r
- <xs:complexType name="T_cata">\r
- <xs:sequence>\r
- <xs:element ref="commandes" minOccurs="0" maxOccurs="unbounded"/>\r
- </xs:sequence>\r
- </xs:complexType>\r
- <xs:complexType name="T_commandes">\r
- <xs:choice minOccurs="0" maxOccurs="unbounded">\r
- <xs:element ref="OPER"/>\r
- <xs:element ref="PROC"/>\r
- </xs:choice>\r
- </xs:complexType>\r
- <xs:complexType name="T_Cardinalite"/>\r
- <xs:complexType name="T_PlageValeur">\r
- <xs:choice>\r
- <xs:sequence>\r
- <xs:element ref="borne_sup" minOccurs="0"/>\r
- <xs:element ref="borne_inf" minOccurs="0"/>\r
- </xs:sequence>\r
- <xs:element ref="into"/>\r
- </xs:choice>\r
- </xs:complexType>\r
- <xs:complexType name="T_Accas.Common">\r
- <xs:sequence>\r
- <xs:element ref="regles" minOccurs="0"/>\r
- <xs:element ref="doc" minOccurs="0"/>\r
- <xs:choice maxOccurs="unbounded">\r
- <xs:element ref="BLOC"/>\r
- <xs:element ref="FACT"/>\r
- <xs:element ref="SIMP"/>\r
- </xs:choice>\r
- </xs:sequence>\r
- <xs:attribute ref="nom" use="required"/>\r
- </xs:complexType>\r
- <xs:element name="OPER" type="T_OPER"/>\r
- <xs:complexType name="T_OPER">\r
- <xs:complexContent>\r
- <xs:extension base="T_Accas.Common">\r
- <xs:sequence>\r
- <xs:element ref="typeCree"/>\r
- </xs:sequence>\r
- <xs:attribute ref="subroutine"/>\r
- </xs:extension>\r
- </xs:complexContent>\r
- </xs:complexType>\r
- <xs:element name="PROC" type="T_PROC">\r
- <xs:unique name="Uniqb_NAme_In_PRoc">\r
- <xs:selector xpath="BLOC|FACT|SIMP"/>\r
- <xs:field xpath="@efficas:nom"/>\r
- </xs:unique>\r
- </xs:element>\r
- <xs:complexType name="T_PROC">\r
- <xs:complexContent>\r
- <xs:extension base="T_Accas.Common">\r
- <xs:attribute ref="subroutine"/>\r
- </xs:extension>\r
- </xs:complexContent>\r
- </xs:complexType>\r
- <xs:element name="FACT" type="T_FACT"/>\r
- <!-- <xs:complexType name="T_FACT">\r
- <xs:complexContent>\r
- <xs:restriction base="T_Accas.Common">\r
- <xs:sequence>\r
- <xs:element ref="regles" minOccurs="0"/>\r
- <xs:element ref="doc" minOccurs="0"/>\r
- <xs:choice maxOccurs="unbounded">\r
- <xs:element ref="BLOC"/>\r
- <xs:element ref="FACT"/>\r
- <xs:element ref="SIMP"/>\r
- </xs:choice>\r
- </xs:sequence>\r
- </xs:restriction>\r
- </xs:complexContent>\r
- </xs:complexType>-->\r
- <xs:complexType name="T_FACT">\r
- <xs:complexContent>\r
- <xs:extension base="T_Accas.Common">\r
- <xs:attribute ref="statut"/>\r
- <xs:attribute ref="min_occurs" default="1"/>\r
- <xs:attribute ref="max_occurs" default="1">\r
- <xs:annotation>\r
- <xs:documentation>La valuer -1 equivaut à oo</xs:documentation>\r
- </xs:annotation>\r
- </xs:attribute>\r
- <xs:assert test=".[exists(@efficas:max_occurs) and exists(@efficas:min_occurs) and @efficas:max_occurs gt @efficas:min_occurs]"/>\r
- <!--<xs:assert test="if (.[exists(@efficas:max_occurs)] and .[exists(@efficas:min_occurs)] ) then (@efficas:max_occurs gt @efficas:min_occurs) or @efficas:max_occurs = -1 else true" altova:message="Erreur max_occurs > min_occurs "/>-->\r
- </xs:extension>\r
- </xs:complexContent>\r
- </xs:complexType>\r
- <xs:simpleType name="T_fonction_python">\r
- <xs:restriction base="xs:string"/>\r
- </xs:simpleType>\r
- <xs:element name="BLOC" type="T_BLOC"/>\r
- <xs:complexType name="T_BLOC">\r
- <xs:complexContent>\r
- <xs:extension base="T_Accas.Common">\r
- <xs:sequence>\r
- <xs:element ref="condition"/>\r
- </xs:sequence>\r
- </xs:extension>\r
- </xs:complexContent>\r
- </xs:complexType>\r
- <xs:complexType name="T_SIMP">\r
- <xs:sequence>\r
- <xs:element ref="doc" minOccurs="0"/>\r
- <xs:element ref="portee" minOccurs="0">\r
- <xs:annotation>\r
- <xs:documentation>La portée pouurait devenir un attribut de SIMP. Une autre solution consisterait a créer un SIMPG pour distinguer les @nom uniques des SIMP a portée globale des autres.</xs:documentation>\r
- </xs:annotation>\r
- </xs:element>\r
- <xs:element ref="ValeurDef" minOccurs="0"/>\r
- <xs:element ref="ValeurSugg" minOccurs="0"/>\r
- <xs:element ref="PlageValeur" minOccurs="0"/>\r
- <xs:element ref="typeAttendu"/>\r
- <xs:element ref="validators" minOccurs="0"/>\r
- </xs:sequence>\r
- <xs:attribute ref="nom" use="required"/>\r
- <xs:attribute ref="statut"/>\r
- <xs:attribute ref="min_occurs" default="1"/>\r
- <xs:attribute ref="max_occurs" default="1">\r
- <xs:annotation>\r
- <xs:documentation>La valuer -1 equivaut à oo</xs:documentation>\r
- </xs:annotation>\r
- </xs:attribute>\r
- </xs:complexType>\r
- <xs:simpleType name="AT_statut">\r
- <xs:restriction base="xs:string">\r
- <xs:enumeration value="f"/>\r
- <xs:enumeration value="o"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <!--<xs:simpleType name="T_repetable">\r
- <xs:restriction base="xs:string">\r
- <xs:enumeration value="n"/>\r
- <xs:enumeration value="o"/>\r
- </xs:restriction>\r
- </xs:simpleType>-->\r
- <xs:simpleType name="T_portee">\r
- <xs:restriction base="xs:string">\r
- <xs:enumeration value="None"/>\r
- <xs:enumeration value="Global"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <xs:simpleType name="AT_max_occurs">\r
- <xs:restriction base="xs:long">\r
- <xs:minInclusive value="-1"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <xs:simpleType name="AT_min_occurs">\r
- <xs:restriction base="xs:long">\r
- <xs:minExclusive value="0"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <!-- Comparable -->\r
- <!-- <xs:simpleType name="AT_borne_sup">\r
- <xs:atomic base="xs:double"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="AT_borne_inf">\r
- <xs:restriction base="xs:double"/>\r
- </xs:simpleType>\r
--->\r
- <xs:simpleType name="AT_ag">\r
- <xs:restriction base="xs:string">\r
- <xs:enumeration value="No comment"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <xs:simpleType name="AT_docu">\r
- <xs:annotation>\r
- <xs:documentation>Référence une position dans un fichier maître contenant une liste de références à des pages de documentations</xs:documentation>\r
- </xs:annotation>\r
- <xs:restriction base="xs:string"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="AT_valeur_sugg">\r
- <xs:restriction base="xs:string"/>\r
- </xs:simpleType>\r
- <!-- TODO: Exclure mots clés python|efficas -->\r
- <xs:simpleType name="AT_nom">\r
- <xs:restriction base="xs:string">\r
- <xs:pattern value="([A-Z]|[a-z]|_)([A-Z]|[a-z]|_|[0-9])*"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_predicat1">\r
- <xs:list itemType="AT_nom"/>\r
- <!-- TODO: Supprimer la liste -->\r
- </xs:simpleType>\r
- <xs:complexType name="T_predicat2">\r
- <xs:sequence>\r
- <xs:element name="p1" type="T_predicat1" minOccurs="1"/>\r
- <xs:element name="p2" type="AT_nom" minOccurs="1"/>\r
- </xs:sequence>\r
- <!-- TODO: Supprimer la séquence -->\r
- </xs:complexType>\r
- <xs:element name="A_CLASSER" type="T_predicat2"/>\r
- <xs:element name="AU_MOINS_UN" type="T_predicat1"/>\r
- <xs:element name="AU_PLUS_UN" type="T_predicat1"/>\r
- <xs:element name="ENSEMBLE" type="T_predicat1"/>\r
- <xs:element name="EXCLUS" type="T_predicat1">\r
- <!-- A priori, ce n'est pas l'endroit pour le placer : ? scope de Uniq_Command-->\r
- <!-- <xs:keyref name="referToAnAlreadyDefinedName" refer="Uniq_Command">\r
- <xs:selector xpath="."/>\r
- <xs:field xpath="."/>\r
- </xs:keyref>\r
--->\r
- </xs:element>\r
- <xs:element name="PRESENT_ABSENT" type="T_predicat1"/>\r
- <xs:element name="PRESENT_PRESENT" type="T_predicat1"/>\r
- <xs:element name="UN_PARMI" type="T_predicat1"/>\r
- <xs:group name="predicat">\r
- <xs:choice>\r
- <xs:element ref="A_CLASSER"/>\r
- <xs:element ref="AU_MOINS_UN"/>\r
- <xs:element ref="AU_PLUS_UN"/>\r
- <xs:element ref="ENSEMBLE"/>\r
- <xs:element ref="EXCLUS">\r
- <!-- A priori, ce n'est pas l'endroit pour le placer -->\r
- <!-- <xs:keyref name="referToAnAlreadyDefinedName" refer="/Uniq_Command">\r
- <xs:selector xpath="."/>\r
- <xs:field xpath="."/>\r
- </xs:keyref>\r
--->\r
- </xs:element>\r
- <xs:element ref="PRESENT_ABSENT"/>\r
- <xs:element ref="PRESENT_PRESENT"/>\r
- <xs:element ref="UN_PARMI"/>\r
- </xs:choice>\r
- </xs:group>\r
- <xs:complexType name="T_regles">\r
- <xs:sequence maxOccurs="unbounded">\r
- <xs:group ref="predicat"/>\r
- </xs:sequence>\r
- </xs:complexType>\r
- <!-- <xs:simpleType name="T_typeCree">\r
- <xs:restriction base="T_classe_utilisateur"/>\r
- </xs:simpleType>\r
--->\r
- <xs:simpleType name="AT_subroutine">\r
- <xs:restriction base="AT_nom"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_validators">\r
- <xs:restriction base="xs:string">\r
- <xs:enumeration value="NoRepeat"/>\r
- <xs:enumeration value="OnlyStr"/>\r
- <xs:enumeration value="VerifExiste"/>\r
- <xs:enumeration value="VerifTypeTuple"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_Bool">\r
- <xs:restriction base="xs:boolean"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_list_Bool">\r
- <xs:list itemType="T_Bool"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_I">\r
- <xs:restriction base="xs:int"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_list_I">\r
- <xs:list itemType="T_I"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_R">\r
- <xs:restriction base="xs:double"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_list_R">\r
- <xs:list itemType="T_R"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_TXM">\r
- <xs:restriction base="AT_nom"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_list_TXM">\r
- <xs:list itemType="T_TXM"/>\r
- </xs:simpleType>\r
- <!--fonctionne mais ne permet pas de créer une liste de liste -->\r
- <xs:simpleType name="T_C">\r
- <xs:restriction>\r
- <xs:simpleType>\r
- <xs:list itemType="xs:double"/>\r
- </xs:simpleType>\r
- <xs:minLength value="2"/>\r
- <xs:maxLength value="2"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <!-- Ajouter une contrainte : taille pair -->\r
- <!-- Il n'est pas possible de définir des listes de listes -->\r
- <xs:simpleType name="T_list_C">\r
- <xs:list itemType="xs:double"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_name_base">\r
- <xs:restriction base="AT_nom"/>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_simple_name">\r
- <xs:restriction base="T_name_base">\r
- <xs:enumeration value="Fichier"/>\r
- <xs:enumeration value="Repertoire"/>\r
- <xs:enumeration value="TXM"/>\r
- <xs:enumeration value="I"/>\r
- <xs:enumeration value="R"/>\r
- <xs:enumeration value="C"/>\r
- <xs:enumeration value="Bool"/>\r
- <xs:enumeration value="grma"/>\r
- <xs:enumeration value="grno"/>\r
- <xs:enumeration value="SalomeEntry"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <!-- On ne peut pas rendre abstrait un simpleType && \r
- Il n'est pas possible de dérivé par restriction un simplecontent d'un type complex qui\r
- lui peut être abstrait\r
- -->\r
- <xs:simpleType name="T_classe_utilisateur_name">\r
- <xs:restriction base="T_name">\r
- <xs:enumeration value="T_classe_utilisateur"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- <xs:complexType name="T_classe_utilisateur_username">\r
- <xs:simpleContent>\r
- <xs:extension base="T_classe_utilisateur_name">\r
- <xs:attribute ref="nom" use="required"/>\r
- </xs:extension>\r
- </xs:simpleContent>\r
- </xs:complexType>\r
- <xs:simpleType name="T_name">\r
- <xs:union memberTypes="T_simple_name">\r
- <xs:simpleType>\r
- <xs:restriction base="AT_nom">\r
- <xs:enumeration value="T_Matrice_double"/>\r
- <xs:enumeration value="T_Matrice_Symetrique_double"/>\r
- <xs:enumeration value="T_tuple"/>\r
- <xs:enumeration value="T_classe_utilisateur"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- </xs:union>\r
- </xs:simpleType>\r
- <xs:complexType name="T_grma"/>\r
- <xs:complexType name="T_grno"/>\r
- <xs:complexType name="T_SalomeEntry"/>\r
- <xs:complexType name="T_Fichier"/>\r
- <!-- <xs:complexType name="T_Repertoire"/>-->\r
- <xs:simpleType name="T_Repertoire">\r
- <xs:list>\r
- <xs:simpleType>\r
- <xs:restriction base="xs:string">\r
- <xs:whiteSpace value="preserve"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
- </xs:list>\r
- </xs:simpleType>\r
- <xs:simpleType name="T_simple">\r
- <xs:union memberTypes="T_I T_list_I T_R T_list_R T_C T_list_C T_TXM T_list_TXM T_Bool T_list_Bool T_Repertoire"/>\r
- </xs:simpleType>\r
- <!-- <xs:complexType name="T_TXM"/>-->\r
- <!-- <xs:simpleType name="T_simple">\r
- <xs:restriction base="xs:string">\r
- <xs:enumeration value="Fichier"/>\r
- <xs:enumeration value="Repertoire"/>\r
- <xs:enumeration value="TXM"/>\r
- <xs:enumeration value="I"/>\r
- <xs:enumeration value="R"/>\r
- <xs:enumeration value="C"/>\r
- <xs:enumeration value="Bool"/>\r
- <xs:enumeration value="grma"/>\r
- <xs:enumeration value="grno"/>\r
- <xs:enumeration value="SalomeEntry"/>\r
- </xs:restriction>\r
- </xs:simpleType>\r
--->\r
- <xs:simpleType name="T_list_double">\r
- <xs:list itemType="xs:double"/>\r
- </xs:simpleType>\r
- <!-- Possibilité d'utiliser un type paramétré ? -->\r
- <xs:complexType name="T_Matrice_double">\r
- <xs:simpleContent>\r
- <xs:extension base="T_list_double">\r
- <xs:attribute name="n" type="xs:integer" use="required"/>\r
- <xs:attribute name="m" type="xs:integer" use="required"/>\r
- </xs:extension>\r
- </xs:simpleContent>\r
- </xs:complexType>\r
- <!-- Faire l'exercice de dériver de T_Matrice_double -->\r
- <xs:complexType name="T_Matrice_Symetrique_double">\r
- <xs:simpleContent>\r
- <xs:extension base="T_list_double">\r
- <xs:attribute name="n" type="xs:int" use="required"/>\r
- </xs:extension>\r
- </xs:simpleContent>\r
- </xs:complexType>\r
- <!-- Une liste est aussi un type simple !!!! -->\r
- <!-- <xs:simpleType name="T_list_anySimpleType">\r
- <xs:list itemType="xs:anySimpleType"/>\r
- </xs:simpleType>\r
--->\r
- <!-- Le fait de ne pas déclarer une liste risque d'être problématique pour le parsing : A voir-->\r
- <xs:complexType name="T_tuple">\r
- <xs:simpleContent>\r
- <xs:extension base="xs:anySimpleType">\r
- <xs:attribute name="n" type="xs:int" use="required"/>\r
- </xs:extension>\r
- </xs:simpleContent>\r
- </xs:complexType>\r
- <xs:simpleType name="T_classe_utilisateur">\r
- <xs:restriction base="AT_nom"/>\r
- </xs:simpleType>\r
- <xs:element name="typesimple" type="T_simple"/>\r
- <xs:element name="matrice_double" type="T_Matrice_double"/>\r
- <xs:element name="matrice_symetrique_double" type="T_Matrice_Symetrique_double"/>\r
- <xs:element name="tuple" type="T_tuple"/>\r
- <xs:element name="classe_utilisateur" type="T_classe_utilisateur"/>\r
- <!-- Essai -->\r
- <!-- <xs:group name="T_Attendu_group1">\r
- <xs:choice>\r
- <xs:element ref="typesimple"/>\r
- <xs:element ref="matrice_double"/>\r
- <xs:element ref="matrice_symetrique_double"/>\r
- <xs:element ref="tuple"/>\r
- <xs:element ref="classe_utilisateur"/>\r
- </xs:choice>\r
- </xs:group>\r
-\r
- <xs:group name="T_Attendu_group2">\r
- <xs:choice>\r
- <xs:element ref="typesimple"/>\r
- <xs:element ref="matrice_double"/>\r
- <xs:element ref="matrice_symetrique_double"/>\r
- <xs:element ref="tuple"/>\r
- <xs:element ref="classe_utilisateur"/>\r
- <xs:element ref="fonction_utilisateur" minOccurs="1" maxOccurs="unbounded"/>\r
- </xs:choice>\r
- </xs:group>\r
-\r
- <xs:complexType name="T_typeAttendu">\r
- <xs:group ref="T_Attendu_group1"/>\r
- </xs:complexType>\r
- -->\r
- <!-- Faire plutot un groupe de substitution pour ne pas croiser les choix -->\r
- <!--\r
- <xs:complexType name="T_into">\r
- <xs:group ref="T_Attendu_group2"/>\r
- </xs:complexType>\r
- -->\r
- <xs:complexType name="T_into">\r
- <xs:choice>\r
- <!-- <xs:element ref="typesimple" type="T_Base"/>-->\r
- <xs:element ref="typesimple" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="matrice_double" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="matrice_symetrique_double" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="tuple" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="classe_utilisateur" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="fonction_utilisateur" minOccurs="1" maxOccurs="unbounded"/>\r
- </xs:choice>\r
- </xs:complexType>\r
- <xs:complexType name="T_typeAttendu">\r
- <xs:complexContent>\r
- <xs:restriction base="T_into">\r
- <xs:choice>\r
- <xs:element ref="typesimple" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="matrice_double" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="matrice_symetrique_double" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="tuple" minOccurs="0" maxOccurs="unbounded"/>\r
- <xs:element ref="classe_utilisateur" minOccurs="0" maxOccurs="unbounded"/>\r
- </xs:choice>\r
- </xs:restriction>\r
- </xs:complexContent>\r
- </xs:complexType>\r
-</xs:schema>\r
-<!-- Catalogue EFFICAS équivalent\r
-\r
-# coding: utf-8\r
-from Accas import *\r
-\r
-class carte (ASSD) : pass\r
-class maille (ASSD) : pass\r
-class carte_flux_r (carte):pass\r
-\r
-class NOM_CHAM_INTO:\r
- def __call__(self, *l_typ_cham, **kwargs):\r
- return tuple(('A','B','C'))\r
-C_NOM_CHAM_INTO = NOM_CHAM_INTO()\r
-\r
-JdC = JDC_CATA(code='MAP',\r
- execmodul=None,\r
- regles=ENSEMBLE('E1','E2','E3')\r
- )\r
-\r
-CREECARTE = OPER(nom="CREECARTE",op=None, sd_prod=carte, UNITE=SIMP(statut='f',typ='I',defaut=21),);\r
-\r
-CREECARTEFLUX = OPER(nom="CREECARTEFLUX",op=None, sd_prod=carte_flux_r,\r
- NOMFLUX=SIMP(statut='o',typ='TXM',defaut='monFlux'),\r
- );\r
-\r
-CREEMAILLE = OPER(nom="CREEMAILLE",op=None, sd_prod=maille,\r
- NOEUDS=SIMP(statut='o',typ='I',defaut=(1,2),min=2,max=2)\r
- );\r
-\r
-E1=PROC(nom="E1",\r
- op=None,\r
- regles = (EXCLUS('ETAT_INIT','RESULTAT',),),\r
- ETAT_INIT = FACT(statut='f', max='**',\r
- GROUP_MA_1=SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),\r
- GROUP_NO_2=SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),\r
- ),\r
-\r
- RESULTAT = FACT(statut='f',\r
- DEPL=SIMP(statut='o', typ='R', validators=NoRepeat()),\r
- VITE=SIMP(statut='f', typ='R', validators=NoRepeat()),\r
- ACCE=SIMP(statut='f', typ='R', validators=NoRepeat()),\r
- ), \r
- );\r
-\r
-E2=PROC(nom="E2", op=None,\r
- regles = (UN_PARMI('CONCEPT','CHAINE','TOUT' ),),\r
- CONCEPT = FACT(statut='f',max='**',\r
- NOM = SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),\r
- ),\r
- CHAINE = SIMP(statut='f',typ='TXM'),\r
- POSITION = SIMP(statut='f',typ='I',defaut=1),\r
- TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),\r
- );\r
-\r
-E3=PROC(nom="E3",op=None,\r
- DEFORMATION = SIMP(statut='f',typ='TXM',defaut="PETIT",\r
- into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GDEF_LOG")),\r
- b_blocIn = BLOC(condition = "DEFORMATION in ('PETIT','PETIT_REAC','GROT_GDEP')",\r
- ITER_INTE_PAS = SIMP(statut='f',typ='I',defaut= 0 ),\r
- ALGO_INTE = SIMP(statut='f',typ='TXM',into=("ANALYTIQUE", "SECANTE", "DEKKER", "NEWTON_1D","BRENT",),),\r
- CARTE = SIMP(statut='f',typ=carte,),\r
- b_carte = BLOC(condition= "(AsType(CARTE) != carte_flux_r)",\r
- CONTRAINTE = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',\r
- fr="Options pour le calcul de contraintes et efforts generalises",\r
- into=C_NOM_CHAM_INTO(phenomene='CONTRAINTE',categorie='lin'),)\r
- ),\r
- ), \r
- );\r
-\r
--->\r
+++ /dev/null
-# ./raw/efficas.py
-# -*- coding: utf-8 -*-
-# PyXB bindings for NM:759f40938b7670cd6d5941e706557eb2115fb17f
-# Generated 2016-11-23 16:51:37.568270 by PyXB version 1.2.3
-# Namespace http://chercheurs.edf.com/logiciels/efficas
-
-import pyxb
-import pyxb.binding
-import pyxb.binding.saxer
-import io
-import pyxb.utils.utility
-import pyxb.utils.domutils
-import sys
-
-# Unique identifier for bindings created at the same time
-_GenerationUID = pyxb.utils.utility.UniqueIdentifier('urn:uuid:b79c3f70-b194-11e6-bb0f-b05adafd94d6')
-
-# Version of PyXB used to generate the bindings
-_PyXBVersion = '1.2.3'
-# Generated bindings are not compatible across PyXB versions
-if pyxb.__version__ != _PyXBVersion:
- raise pyxb.PyXBVersionError(_PyXBVersion)
-
-# Import bindings for namespaces imported into schema
-import pyxb.binding.datatypes
-
-# NOTE: All namespace declarations are reserved within the binding
-Namespace = pyxb.namespace.NamespaceForURI(u'http://chercheurs.edf.com/logiciels/efficas', create_if_missing=True)
-Namespace.configureCategories(['typeBinding', 'elementBinding'])
-
-def CreateFromDocument (xml_text, default_namespace=None, location_base=None):
- """Parse the given XML and use the document element to create a
- Python instance.
-
- @param xml_text An XML document. This should be data (Python 2
- str or Python 3 bytes), or a text (Python 2 unicode or Python 3
- str) in the L{pyxb._InputEncoding} encoding.
-
- @keyword default_namespace The L{pyxb.Namespace} instance to use as the
- default namespace where there is no default namespace in scope.
- If unspecified or C{None}, the namespace of the module containing
- this function will be used.
-
- @keyword location_base: An object to be recorded as the base of all
- L{pyxb.utils.utility.Location} instances associated with events and
- objects handled by the parser. You might pass the URI from which
- the document was obtained.
- """
-
- if pyxb.XMLStyle_saxer != pyxb._XMLStyle:
- dom = pyxb.utils.domutils.StringToDOM(xml_text)
- return CreateFromDOM(dom.documentElement)
- if default_namespace is None:
- default_namespace = Namespace.fallbackNamespace()
- saxer = pyxb.binding.saxer.make_parser(fallback_namespace=default_namespace, location_base=location_base)
- handler = saxer.getContentHandler()
- xmld = xml_text
- if isinstance(xmld, unicode):
- xmld = xmld.encode(pyxb._InputEncoding)
- saxer.parse(io.BytesIO(xmld))
- instance = handler.rootObject()
- return instance
-
-def CreateFromDOM (node, default_namespace=None):
- """Create a Python instance from the given DOM node.
- The node tag must correspond to an element declaration in this module.
-
- @deprecated: Forcing use of DOM interface is unnecessary; use L{CreateFromDocument}."""
- if default_namespace is None:
- default_namespace = Namespace.fallbackNamespace()
- return pyxb.binding.basis.element.AnyCreateFromDOM(node, default_namespace)
-
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_fonction_python
-class T_fonction_python (pyxb.binding.datatypes.string):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_fonction_python')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 154, 1)
- _Documentation = None
-T_fonction_python._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_fonction_python', T_fonction_python)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_statut
-class AT_statut (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_statut')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 190, 1)
- _Documentation = None
-AT_statut._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=AT_statut, enum_prefix=None)
-AT_statut.f = AT_statut._CF_enumeration.addEnumeration(unicode_value=u'f', tag=u'f')
-AT_statut.o = AT_statut._CF_enumeration.addEnumeration(unicode_value=u'o', tag=u'o')
-AT_statut._InitializeFacetMap(AT_statut._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'AT_statut', AT_statut)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_portee
-class T_portee (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_portee')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 202, 1)
- _Documentation = None
-T_portee._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_portee, enum_prefix=None)
-T_portee.None_ = T_portee._CF_enumeration.addEnumeration(unicode_value=u'None', tag=u'None_')
-T_portee.Global = T_portee._CF_enumeration.addEnumeration(unicode_value=u'Global', tag=u'Global')
-T_portee._InitializeFacetMap(T_portee._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'T_portee', T_portee)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_max_occurs
-class AT_max_occurs (pyxb.binding.datatypes.long):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_max_occurs')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 208, 1)
- _Documentation = None
-AT_max_occurs._CF_minInclusive = pyxb.binding.facets.CF_minInclusive(value_datatype=AT_max_occurs, value=pyxb.binding.datatypes.long(-1L))
-AT_max_occurs._InitializeFacetMap(AT_max_occurs._CF_minInclusive)
-Namespace.addCategoryObject('typeBinding', u'AT_max_occurs', AT_max_occurs)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_min_occurs
-class AT_min_occurs (pyxb.binding.datatypes.long):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_min_occurs')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 213, 1)
- _Documentation = None
-AT_min_occurs._CF_minExclusive = pyxb.binding.facets.CF_minExclusive(value_datatype=pyxb.binding.datatypes.long, value=pyxb.binding.datatypes.integer(0L))
-AT_min_occurs._InitializeFacetMap(AT_min_occurs._CF_minExclusive)
-Namespace.addCategoryObject('typeBinding', u'AT_min_occurs', AT_min_occurs)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_ag
-class AT_ag (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_ag')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 226, 1)
- _Documentation = None
-AT_ag._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=AT_ag, enum_prefix=None)
-AT_ag.No_comment = AT_ag._CF_enumeration.addEnumeration(unicode_value=u'No comment', tag=u'No_comment')
-AT_ag._InitializeFacetMap(AT_ag._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'AT_ag', AT_ag)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_docu
-class AT_docu (pyxb.binding.datatypes.string):
-
- """Référence une position dans un fichier maître contenant une liste de références à des pages de documentations"""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_docu')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 231, 1)
- _Documentation = u'R\xe9f\xe9rence une position dans un fichier ma\xeetre contenant une liste de r\xe9f\xe9rences \xe0 des pages de documentations'
-AT_docu._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'AT_docu', AT_docu)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_valeur_sugg
-class AT_valeur_sugg (pyxb.binding.datatypes.string):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_valeur_sugg')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 237, 1)
- _Documentation = None
-AT_valeur_sugg._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'AT_valeur_sugg', AT_valeur_sugg)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_nom
-class AT_nom (pyxb.binding.datatypes.string):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_nom')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 241, 1)
- _Documentation = None
-AT_nom._CF_pattern = pyxb.binding.facets.CF_pattern()
-AT_nom._CF_pattern.addPattern(pattern=u'([A-Z]|[a-z]|_)([A-Z]|[a-z]|_|[0-9])*')
-AT_nom._InitializeFacetMap(AT_nom._CF_pattern)
-Namespace.addCategoryObject('typeBinding', u'AT_nom', AT_nom)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_validators
-class T_validators (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_validators')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 303, 1)
- _Documentation = None
-T_validators._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_validators, enum_prefix=None)
-T_validators.NoRepeat = T_validators._CF_enumeration.addEnumeration(unicode_value=u'NoRepeat', tag=u'NoRepeat')
-T_validators.OnlyStr = T_validators._CF_enumeration.addEnumeration(unicode_value=u'OnlyStr', tag=u'OnlyStr')
-T_validators.VerifExiste = T_validators._CF_enumeration.addEnumeration(unicode_value=u'VerifExiste', tag=u'VerifExiste')
-T_validators.VerifTypeTuple = T_validators._CF_enumeration.addEnumeration(unicode_value=u'VerifTypeTuple', tag=u'VerifTypeTuple')
-T_validators._InitializeFacetMap(T_validators._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'T_validators', T_validators)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_Bool
-class T_Bool (pyxb.binding.datatypes.boolean):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Bool')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 311, 1)
- _Documentation = None
-T_Bool._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_Bool', T_Bool)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_I
-class T_I (pyxb.binding.datatypes.int):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_I')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 317, 1)
- _Documentation = None
-T_I._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_I', T_I)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_R
-class T_R (pyxb.binding.datatypes.double):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_R')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 323, 1)
- _Documentation = None
-T_R._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_R', T_R)
-
-# List simple type: [anonymous]
-# superclasses pyxb.binding.datatypes.anySimpleType
-class STD_ANON (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of pyxb.binding.datatypes.double."""
-
- _ExpandedName = None
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 338, 3)
- _Documentation = None
-
- _ItemType = pyxb.binding.datatypes.double
-STD_ANON._InitializeFacetMap()
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_C
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_list_C (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of pyxb.binding.datatypes.double."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_C')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 347, 1)
- _Documentation = None
-
- _ItemType = pyxb.binding.datatypes.double
-T_list_C._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_list_C', T_list_C)
-
-# Atomic simple type: [anonymous]
-class STD_ANON_ (pyxb.binding.datatypes.string):
-
- """An atomic simple type."""
-
- _ExpandedName = None
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 402, 3)
- _Documentation = None
-STD_ANON_._CF_whiteSpace = pyxb.binding.facets.CF_whiteSpace(value=pyxb.binding.facets._WhiteSpace_enum.preserve)
-STD_ANON_._InitializeFacetMap(STD_ANON_._CF_whiteSpace)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_double
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_list_double (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of pyxb.binding.datatypes.double."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_double')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 428, 1)
- _Documentation = None
-
- _ItemType = pyxb.binding.datatypes.double
-T_list_double._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_list_double', T_list_double)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_predicat1
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_predicat1 (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of AT_nom."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_predicat1')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 246, 1)
- _Documentation = None
-
- _ItemType = AT_nom
-T_predicat1._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_predicat1', T_predicat1)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_subroutine
-class AT_subroutine (AT_nom):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_subroutine')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 300, 1)
- _Documentation = None
-AT_subroutine._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'AT_subroutine', AT_subroutine)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_Bool
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_list_Bool (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of T_Bool."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_Bool')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 314, 1)
- _Documentation = None
-
- _ItemType = T_Bool
-T_list_Bool._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_list_Bool', T_list_Bool)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_I
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_list_I (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of T_I."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_I')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 320, 1)
- _Documentation = None
-
- _ItemType = T_I
-T_list_I._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_list_I', T_list_I)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_R
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_list_R (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of T_R."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_R')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 326, 1)
- _Documentation = None
-
- _ItemType = T_R
-T_list_R._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_list_R', T_list_R)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_TXM
-class T_TXM (AT_nom):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_TXM')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 329, 1)
- _Documentation = None
-T_TXM._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_TXM', T_TXM)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_C
-# superclasses STD_ANON
-class T_C (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of pyxb.binding.datatypes.double."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_C')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 336, 1)
- _Documentation = None
-
- _ItemType = pyxb.binding.datatypes.double
-T_C._CF_maxLength = pyxb.binding.facets.CF_maxLength(value=pyxb.binding.datatypes.nonNegativeInteger(2L))
-T_C._CF_minLength = pyxb.binding.facets.CF_minLength(value=pyxb.binding.datatypes.nonNegativeInteger(2L))
-T_C._InitializeFacetMap(T_C._CF_maxLength,
- T_C._CF_minLength)
-Namespace.addCategoryObject('typeBinding', u'T_C', T_C)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_name_base
-class T_name_base (AT_nom):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_name_base')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 350, 1)
- _Documentation = None
-T_name_base._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_name_base', T_name_base)
-
-# Atomic simple type: [anonymous]
-class STD_ANON_2 (AT_nom, pyxb.binding.basis.enumeration_mixin):
-
- """An atomic simple type."""
-
- _ExpandedName = None
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 385, 3)
- _Documentation = None
-STD_ANON_2._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=STD_ANON_2, enum_prefix=None)
-STD_ANON_2.T_Matrice_double = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_Matrice_double', tag=u'T_Matrice_double')
-STD_ANON_2.T_Matrice_Symetrique_double = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_Matrice_Symetrique_double', tag=u'T_Matrice_Symetrique_double')
-STD_ANON_2.T_tuple = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_tuple', tag=u'T_tuple')
-STD_ANON_2.T_classe_utilisateur = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_classe_utilisateur', tag=u'T_classe_utilisateur')
-STD_ANON_2._InitializeFacetMap(STD_ANON_2._CF_enumeration)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_Repertoire
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_Repertoire (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of STD_ANON_."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Repertoire')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 400, 1)
- _Documentation = None
-
- _ItemType = STD_ANON_
-T_Repertoire._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_Repertoire', T_Repertoire)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur
-class T_classe_utilisateur (AT_nom):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_classe_utilisateur')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 461, 1)
- _Documentation = None
-T_classe_utilisateur._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_classe_utilisateur', T_classe_utilisateur)
-
-# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_TXM
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_list_TXM (pyxb.binding.basis.STD_list):
-
- """Simple type that is a list of T_TXM."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_TXM')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 332, 1)
- _Documentation = None
-
- _ItemType = T_TXM
-T_list_TXM._InitializeFacetMap()
-Namespace.addCategoryObject('typeBinding', u'T_list_TXM', T_list_TXM)
-
-# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_simple_name
-class T_simple_name (T_name_base, pyxb.binding.basis.enumeration_mixin):
-
- """An atomic simple type."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_simple_name')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 353, 1)
- _Documentation = None
-T_simple_name._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_simple_name, enum_prefix=None)
-T_simple_name.Fichier = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'Fichier', tag=u'Fichier')
-T_simple_name.Repertoire = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'Repertoire', tag=u'Repertoire')
-T_simple_name.TXM = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'TXM', tag=u'TXM')
-T_simple_name.I = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'I', tag=u'I')
-T_simple_name.R = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'R', tag=u'R')
-T_simple_name.C = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'C', tag=u'C')
-T_simple_name.Bool = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'Bool', tag=u'Bool')
-T_simple_name.grma = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'grma', tag=u'grma')
-T_simple_name.grno = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'grno', tag=u'grno')
-T_simple_name.SalomeEntry = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'SalomeEntry', tag=u'SalomeEntry')
-T_simple_name._InitializeFacetMap(T_simple_name._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'T_simple_name', T_simple_name)
-
-# Union simple type: {http://chercheurs.edf.com/logiciels/efficas}T_name
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_name (pyxb.binding.basis.STD_union):
-
- """Simple type that is a union of T_simple_name, STD_ANON_2."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_name')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 383, 1)
- _Documentation = None
-
- _MemberTypes = ( T_simple_name, STD_ANON_2, )
-T_name._CF_pattern = pyxb.binding.facets.CF_pattern()
-T_name._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_name)
-T_name.Fichier = u'Fichier' # originally T_simple_name.Fichier
-T_name.Repertoire = u'Repertoire' # originally T_simple_name.Repertoire
-T_name.TXM = u'TXM' # originally T_simple_name.TXM
-T_name.I = u'I' # originally T_simple_name.I
-T_name.R = u'R' # originally T_simple_name.R
-T_name.C = u'C' # originally T_simple_name.C
-T_name.Bool = u'Bool' # originally T_simple_name.Bool
-T_name.grma = u'grma' # originally T_simple_name.grma
-T_name.grno = u'grno' # originally T_simple_name.grno
-T_name.SalomeEntry = u'SalomeEntry' # originally T_simple_name.SalomeEntry
-T_name.T_Matrice_double = u'T_Matrice_double' # originally STD_ANON_2.T_Matrice_double
-T_name.T_Matrice_Symetrique_double = u'T_Matrice_Symetrique_double'# originally STD_ANON_2.T_Matrice_Symetrique_double
-T_name.T_tuple = u'T_tuple' # originally STD_ANON_2.T_tuple
-T_name.T_classe_utilisateur = u'T_classe_utilisateur'# originally STD_ANON_2.T_classe_utilisateur
-T_name._InitializeFacetMap(T_name._CF_pattern,
- T_name._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'T_name', T_name)
-
-# Union simple type: {http://chercheurs.edf.com/logiciels/efficas}T_simple
-# superclasses pyxb.binding.datatypes.anySimpleType
-class T_simple (pyxb.binding.basis.STD_union):
-
- """Simple type that is a union of T_I, T_list_I, T_R, T_list_R, T_C, T_list_C, T_TXM, T_list_TXM, T_Bool, T_list_Bool, T_Repertoire."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_simple')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 409, 1)
- _Documentation = None
-
- _MemberTypes = ( T_I, T_list_I, T_R, T_list_R, T_C, T_list_C, T_TXM, T_list_TXM, T_Bool, T_list_Bool, T_Repertoire, )
-T_simple._CF_pattern = pyxb.binding.facets.CF_pattern()
-T_simple._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_simple)
-T_simple._InitializeFacetMap(T_simple._CF_pattern,
- T_simple._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'T_simple', T_simple)
-
-# Union simple type: {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur_name
-# superclasses T_name, pyxb.binding.basis.enumeration_mixin
-class T_classe_utilisateur_name (pyxb.binding.basis.STD_union):
-
- """Simple type that is a union of T_simple_name, STD_ANON_2."""
-
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_classe_utilisateur_name')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 371, 1)
- _Documentation = None
-
- _MemberTypes = ( T_simple_name, STD_ANON_2, )
-T_classe_utilisateur_name._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_classe_utilisateur_name, enum_prefix=None)
-T_classe_utilisateur_name.T_classe_utilisateur = T_classe_utilisateur_name._CF_enumeration.addEnumeration(unicode_value=u'T_classe_utilisateur', tag=u'T_classe_utilisateur')
-T_classe_utilisateur_name._InitializeFacetMap(T_classe_utilisateur_name._CF_enumeration)
-Namespace.addCategoryObject('typeBinding', u'T_classe_utilisateur_name', T_classe_utilisateur_name)
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_cata with content type ELEMENT_ONLY
-class T_cata (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_cata with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_cata')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 66, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}commandes uses Python identifier commandes
- __commandes = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'commandes'), 'commandes', '__httpchercheurs_edf_comlogicielsefficas_T_cata_httpchercheurs_edf_comlogicielsefficascommandes', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 11, 1), )
-
-
- commandes = property(__commandes.value, __commandes.set, None, None)
-
- _ElementMap.update({
- __commandes.name() : __commandes
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_cata', T_cata)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_commandes with content type ELEMENT_ONLY
-class T_commandes (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_commandes with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_commandes')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 71, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}OPER uses Python identifier OPER
- __OPER = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'OPER'), 'OPER', '__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasOPER', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 99, 1), )
-
-
- OPER = property(__OPER.value, __OPER.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}PROC uses Python identifier PROC
- __PROC = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PROC'), 'PROC', '__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasPROC', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 110, 1), )
-
-
- PROC = property(__PROC.value, __PROC.set, None, None)
-
- _ElementMap.update({
- __OPER.name() : __OPER,
- __PROC.name() : __PROC
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_commandes', T_commandes)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Cardinalite with content type EMPTY
-class T_Cardinalite (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Cardinalite with content type EMPTY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Cardinalite')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 77, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
- _ElementMap.update({
-
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_Cardinalite', T_Cardinalite)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PlageValeur with content type ELEMENT_ONLY
-class T_PlageValeur (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PlageValeur with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_PlageValeur')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 78, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}borne_sup uses Python identifier borne_sup
- __borne_sup = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'borne_sup'), 'borne_sup', '__httpchercheurs_edf_comlogicielsefficas_T_PlageValeur_httpchercheurs_edf_comlogicielsefficasborne_sup', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 46, 1), )
-
-
- borne_sup = property(__borne_sup.value, __borne_sup.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}borne_inf uses Python identifier borne_inf
- __borne_inf = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'borne_inf'), 'borne_inf', '__httpchercheurs_edf_comlogicielsefficas_T_PlageValeur_httpchercheurs_edf_comlogicielsefficasborne_inf', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 47, 1), )
-
-
- borne_inf = property(__borne_inf.value, __borne_inf.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}into uses Python identifier into
- __into = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'into'), 'into', '__httpchercheurs_edf_comlogicielsefficas_T_PlageValeur_httpchercheurs_edf_comlogicielsefficasinto', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 49, 1), )
-
-
- into = property(__into.value, __into.set, None, None)
-
- _ElementMap.update({
- __borne_sup.name() : __borne_sup,
- __borne_inf.name() : __borne_inf,
- __into.name() : __into
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_PlageValeur', T_PlageValeur)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_predicat2 with content type ELEMENT_ONLY
-class T_predicat2 (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_predicat2 with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_predicat2')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 250, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}p1 uses Python identifier p1
- __p1 = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'p1'), 'p1', '__httpchercheurs_edf_comlogicielsefficas_T_predicat2_httpchercheurs_edf_comlogicielsefficasp1', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 252, 3), )
-
-
- p1 = property(__p1.value, __p1.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}p2 uses Python identifier p2
- __p2 = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'p2'), 'p2', '__httpchercheurs_edf_comlogicielsefficas_T_predicat2_httpchercheurs_edf_comlogicielsefficasp2', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 253, 3), )
-
-
- p2 = property(__p2.value, __p2.set, None, None)
-
- _ElementMap.update({
- __p1.name() : __p1,
- __p2.name() : __p2
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_predicat2', T_predicat2)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_regles with content type ELEMENT_ONLY
-class T_regles (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_regles with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_regles')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 291, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}A_CLASSER uses Python identifier A_CLASSER
- __A_CLASSER = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER'), 'A_CLASSER', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasA_CLASSER', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 257, 1), )
-
-
- A_CLASSER = property(__A_CLASSER.value, __A_CLASSER.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}AU_MOINS_UN uses Python identifier AU_MOINS_UN
- __AU_MOINS_UN = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN'), 'AU_MOINS_UN', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasAU_MOINS_UN', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 258, 1), )
-
-
- AU_MOINS_UN = property(__AU_MOINS_UN.value, __AU_MOINS_UN.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}AU_PLUS_UN uses Python identifier AU_PLUS_UN
- __AU_PLUS_UN = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN'), 'AU_PLUS_UN', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasAU_PLUS_UN', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 259, 1), )
-
-
- AU_PLUS_UN = property(__AU_PLUS_UN.value, __AU_PLUS_UN.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}ENSEMBLE uses Python identifier ENSEMBLE
- __ENSEMBLE = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE'), 'ENSEMBLE', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasENSEMBLE', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 260, 1), )
-
-
- ENSEMBLE = property(__ENSEMBLE.value, __ENSEMBLE.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}EXCLUS uses Python identifier EXCLUS
- __EXCLUS = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS'), 'EXCLUS', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasEXCLUS', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 261, 1), )
-
-
- EXCLUS = property(__EXCLUS.value, __EXCLUS.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}PRESENT_ABSENT uses Python identifier PRESENT_ABSENT
- __PRESENT_ABSENT = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT'), 'PRESENT_ABSENT', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasPRESENT_ABSENT', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 269, 1), )
-
-
- PRESENT_ABSENT = property(__PRESENT_ABSENT.value, __PRESENT_ABSENT.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}PRESENT_PRESENT uses Python identifier PRESENT_PRESENT
- __PRESENT_PRESENT = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT'), 'PRESENT_PRESENT', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasPRESENT_PRESENT', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 270, 1), )
-
-
- PRESENT_PRESENT = property(__PRESENT_PRESENT.value, __PRESENT_PRESENT.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}UN_PARMI uses Python identifier UN_PARMI
- __UN_PARMI = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI'), 'UN_PARMI', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasUN_PARMI', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 271, 1), )
-
-
- UN_PARMI = property(__UN_PARMI.value, __UN_PARMI.set, None, None)
-
- _ElementMap.update({
- __A_CLASSER.name() : __A_CLASSER,
- __AU_MOINS_UN.name() : __AU_MOINS_UN,
- __AU_PLUS_UN.name() : __AU_PLUS_UN,
- __ENSEMBLE.name() : __ENSEMBLE,
- __EXCLUS.name() : __EXCLUS,
- __PRESENT_ABSENT.name() : __PRESENT_ABSENT,
- __PRESENT_PRESENT.name() : __PRESENT_PRESENT,
- __UN_PARMI.name() : __UN_PARMI
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_regles', T_regles)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grma with content type EMPTY
-class T_grma (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grma with content type EMPTY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_grma')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 395, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
- _ElementMap.update({
-
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_grma', T_grma)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grno with content type EMPTY
-class T_grno (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grno with content type EMPTY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_grno')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 396, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
- _ElementMap.update({
-
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_grno', T_grno)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SalomeEntry with content type EMPTY
-class T_SalomeEntry (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SalomeEntry with content type EMPTY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_SalomeEntry')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 397, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
- _ElementMap.update({
-
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_SalomeEntry', T_SalomeEntry)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Fichier with content type EMPTY
-class T_Fichier (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Fichier with content type EMPTY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Fichier')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 398, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
- _ElementMap.update({
-
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_Fichier', T_Fichier)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_tuple with content type SIMPLE
-class T_tuple (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_tuple with content type SIMPLE"""
- _TypeDefinition = pyxb.binding.datatypes.anySimpleType
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_tuple')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 454, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anySimpleType
-
- # Attribute n uses Python identifier n
- __n = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'n'), 'n', '__httpchercheurs_edf_comlogicielsefficas_T_tuple_n', pyxb.binding.datatypes.int, required=True)
- __n._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 457, 4)
- __n._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 457, 4)
-
- n = property(__n.value, __n.set, None, None)
-
- _ElementMap.update({
-
- })
- _AttributeMap.update({
- __n.name() : __n
- })
-Namespace.addCategoryObject('typeBinding', u'T_tuple', T_tuple)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_into with content type ELEMENT_ONLY
-class T_into (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_into with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_into')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 501, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}fonction_utilisateur uses Python identifier fonction_utilisateur
- __fonction_utilisateur = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur'), 'fonction_utilisateur', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasfonction_utilisateur', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 10, 1), )
-
-
- fonction_utilisateur = property(__fonction_utilisateur.value, __fonction_utilisateur.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}typesimple uses Python identifier typesimple
- __typesimple = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'typesimple'), 'typesimple', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficastypesimple', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 464, 1), )
-
-
- typesimple = property(__typesimple.value, __typesimple.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}matrice_double uses Python identifier matrice_double
- __matrice_double = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'matrice_double'), 'matrice_double', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasmatrice_double', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 465, 1), )
-
-
- matrice_double = property(__matrice_double.value, __matrice_double.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}matrice_symetrique_double uses Python identifier matrice_symetrique_double
- __matrice_symetrique_double = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double'), 'matrice_symetrique_double', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasmatrice_symetrique_double', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 466, 1), )
-
-
- matrice_symetrique_double = property(__matrice_symetrique_double.value, __matrice_symetrique_double.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}tuple uses Python identifier tuple
- __tuple = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'tuple'), 'tuple', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficastuple', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 467, 1), )
-
-
- tuple = property(__tuple.value, __tuple.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}classe_utilisateur uses Python identifier classe_utilisateur
- __classe_utilisateur = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur'), 'classe_utilisateur', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasclasse_utilisateur', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 468, 1), )
-
-
- classe_utilisateur = property(__classe_utilisateur.value, __classe_utilisateur.set, None, None)
-
- _ElementMap.update({
- __fonction_utilisateur.name() : __fonction_utilisateur,
- __typesimple.name() : __typesimple,
- __matrice_double.name() : __matrice_double,
- __matrice_symetrique_double.name() : __matrice_symetrique_double,
- __tuple.name() : __tuple,
- __classe_utilisateur.name() : __classe_utilisateur
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_into', T_into)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_doc with content type EMPTY
-class T_doc (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_doc with content type EMPTY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_doc')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 61, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}fr uses Python identifier fr
- __fr = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'fr'), 'fr', '__httpchercheurs_edf_comlogicielsefficas_T_doc_httpchercheurs_edf_comlogicielsefficasfr', pyxb.binding.datatypes.string)
- __fr._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 53, 1)
- __fr._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 62, 2)
-
- fr = property(__fr.value, __fr.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}ang uses Python identifier ang
- __ang = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'ang'), 'ang', '__httpchercheurs_edf_comlogicielsefficas_T_doc_httpchercheurs_edf_comlogicielsefficasang', pyxb.binding.datatypes.string)
- __ang._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 54, 1)
- __ang._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 63, 2)
-
- ang = property(__ang.value, __ang.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}docu uses Python identifier docu
- __docu = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'docu'), 'docu', '__httpchercheurs_edf_comlogicielsefficas_T_doc_httpchercheurs_edf_comlogicielsefficasdocu', AT_docu)
- __docu._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 55, 1)
- __docu._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 64, 2)
-
- docu = property(__docu.value, __docu.set, None, None)
-
- _ElementMap.update({
-
- })
- _AttributeMap.update({
- __fr.name() : __fr,
- __ang.name() : __ang,
- __docu.name() : __docu
- })
-Namespace.addCategoryObject('typeBinding', u'T_doc', T_doc)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common with content type ELEMENT_ONLY
-class T_Accas_Common (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Accas.Common')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 87, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}doc uses Python identifier doc
- __doc = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'doc'), 'doc', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasdoc', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1), )
-
-
- doc = property(__doc.value, __doc.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}regles uses Python identifier regles
- __regles = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'regles'), 'regles', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasregles', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 6, 1), )
-
-
- regles = property(__regles.value, __regles.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}SIMP uses Python identifier SIMP
- __SIMP = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'SIMP'), 'SIMP', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasSIMP', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 43, 1), )
-
-
- SIMP = property(__SIMP.value, __SIMP.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}FACT uses Python identifier FACT
- __FACT = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'FACT'), 'FACT', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasFACT', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 123, 1), )
-
-
- FACT = property(__FACT.value, __FACT.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}BLOC uses Python identifier BLOC
- __BLOC = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'BLOC'), 'BLOC', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasBLOC', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 157, 1), )
-
-
- BLOC = property(__BLOC.value, __BLOC.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}nom uses Python identifier nom
- __nom = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'nom'), 'nom', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasnom', AT_nom, required=True)
- __nom._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 51, 1)
- __nom._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 97, 2)
-
- nom = property(__nom.value, __nom.set, None, None)
-
- _ElementMap.update({
- __doc.name() : __doc,
- __regles.name() : __regles,
- __SIMP.name() : __SIMP,
- __FACT.name() : __FACT,
- __BLOC.name() : __BLOC
- })
- _AttributeMap.update({
- __nom.name() : __nom
- })
-Namespace.addCategoryObject('typeBinding', u'T_Accas.Common', T_Accas_Common)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SIMP with content type ELEMENT_ONLY
-class T_SIMP (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SIMP with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_SIMP')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 167, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is pyxb.binding.datatypes.anyType
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}doc uses Python identifier doc
- __doc = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'doc'), 'doc', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasdoc', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1), )
-
-
- doc = property(__doc.value, __doc.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}ValeurDef uses Python identifier ValeurDef
- __ValeurDef = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef'), 'ValeurDef', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasValeurDef', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 8, 1), )
-
-
- ValeurDef = property(__ValeurDef.value, __ValeurDef.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}ValeurSugg uses Python identifier ValeurSugg
- __ValeurSugg = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg'), 'ValeurSugg', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasValeurSugg', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 9, 1), )
-
-
- ValeurSugg = property(__ValeurSugg.value, __ValeurSugg.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}validators uses Python identifier validators
- __validators = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'validators'), 'validators', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasvalidators', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 39, 1), )
-
-
- validators = property(__validators.value, __validators.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}PlageValeur uses Python identifier PlageValeur
- __PlageValeur = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur'), 'PlageValeur', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasPlageValeur', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 40, 1), )
-
-
- PlageValeur = property(__PlageValeur.value, __PlageValeur.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}typeAttendu uses Python identifier typeAttendu
- __typeAttendu = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu'), 'typeAttendu', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficastypeAttendu', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 41, 1), )
-
-
- typeAttendu = property(__typeAttendu.value, __typeAttendu.set, None, None)
-
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}portee uses Python identifier portee
- __portee = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'portee'), 'portee', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasportee', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 44, 1), )
-
-
- portee = property(__portee.value, __portee.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}nom uses Python identifier nom
- __nom = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'nom'), 'nom', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasnom', AT_nom, required=True)
- __nom._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 51, 1)
- __nom._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 181, 2)
-
- nom = property(__nom.value, __nom.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}statut uses Python identifier statut
- __statut = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'statut'), 'statut', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasstatut', AT_statut, unicode_default=u'o')
- __statut._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 57, 1)
- __statut._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 182, 2)
-
- statut = property(__statut.value, __statut.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}max_occurs uses Python identifier max_occurs
- __max_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'max_occurs'), 'max_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasmax_occurs', AT_max_occurs, unicode_default=u'1')
- __max_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 58, 1)
- __max_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 184, 2)
-
- max_occurs = property(__max_occurs.value, __max_occurs.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}min_occurs uses Python identifier min_occurs
- __min_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'min_occurs'), 'min_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasmin_occurs', AT_min_occurs, unicode_default=u'1')
- __min_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 59, 1)
- __min_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 183, 2)
-
- min_occurs = property(__min_occurs.value, __min_occurs.set, None, None)
-
- _ElementMap.update({
- __doc.name() : __doc,
- __ValeurDef.name() : __ValeurDef,
- __ValeurSugg.name() : __ValeurSugg,
- __validators.name() : __validators,
- __PlageValeur.name() : __PlageValeur,
- __typeAttendu.name() : __typeAttendu,
- __portee.name() : __portee
- })
- _AttributeMap.update({
- __nom.name() : __nom,
- __statut.name() : __statut,
- __max_occurs.name() : __max_occurs,
- __min_occurs.name() : __min_occurs
- })
-Namespace.addCategoryObject('typeBinding', u'T_SIMP', T_SIMP)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_double with content type SIMPLE
-class T_Matrice_double (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_double with content type SIMPLE"""
- _TypeDefinition = T_list_double
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Matrice_double')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 432, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is T_list_double
-
- # Attribute n uses Python identifier n
- __n = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'n'), 'n', '__httpchercheurs_edf_comlogicielsefficas_T_Matrice_double_n', pyxb.binding.datatypes.integer, required=True)
- __n._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 435, 4)
- __n._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 435, 4)
-
- n = property(__n.value, __n.set, None, None)
-
-
- # Attribute m uses Python identifier m
- __m = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'm'), 'm', '__httpchercheurs_edf_comlogicielsefficas_T_Matrice_double_m', pyxb.binding.datatypes.integer, required=True)
- __m._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 436, 4)
- __m._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 436, 4)
-
- m = property(__m.value, __m.set, None, None)
-
- _ElementMap.update({
-
- })
- _AttributeMap.update({
- __n.name() : __n,
- __m.name() : __m
- })
-Namespace.addCategoryObject('typeBinding', u'T_Matrice_double', T_Matrice_double)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_Symetrique_double with content type SIMPLE
-class T_Matrice_Symetrique_double (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_Symetrique_double with content type SIMPLE"""
- _TypeDefinition = T_list_double
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Matrice_Symetrique_double')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 441, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is T_list_double
-
- # Attribute n uses Python identifier n
- __n = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'n'), 'n', '__httpchercheurs_edf_comlogicielsefficas_T_Matrice_Symetrique_double_n', pyxb.binding.datatypes.int, required=True)
- __n._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 444, 4)
- __n._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 444, 4)
-
- n = property(__n.value, __n.set, None, None)
-
- _ElementMap.update({
-
- })
- _AttributeMap.update({
- __n.name() : __n
- })
-Namespace.addCategoryObject('typeBinding', u'T_Matrice_Symetrique_double', T_Matrice_Symetrique_double)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_typeAttendu with content type ELEMENT_ONLY
-class T_typeAttendu (T_into):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_typeAttendu with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_typeAttendu')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 512, 1)
- _ElementMap = T_into._ElementMap.copy()
- _AttributeMap = T_into._AttributeMap.copy()
- # Base type is T_into
-
- # Element typesimple ({http://chercheurs.edf.com/logiciels/efficas}typesimple) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
-
- # Element matrice_double ({http://chercheurs.edf.com/logiciels/efficas}matrice_double) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
-
- # Element matrice_symetrique_double ({http://chercheurs.edf.com/logiciels/efficas}matrice_symetrique_double) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
-
- # Element tuple ({http://chercheurs.edf.com/logiciels/efficas}tuple) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
-
- # Element classe_utilisateur ({http://chercheurs.edf.com/logiciels/efficas}classe_utilisateur) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
- _ElementMap.update({
-
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_typeAttendu', T_typeAttendu)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_OPER with content type ELEMENT_ONLY
-class T_OPER (T_Accas_Common):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_OPER with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_OPER')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 100, 1)
- _ElementMap = T_Accas_Common._ElementMap.copy()
- _AttributeMap = T_Accas_Common._AttributeMap.copy()
- # Base type is T_Accas_Common
-
- # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}typeCree uses Python identifier typeCree
- __typeCree = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'typeCree'), 'typeCree', '__httpchercheurs_edf_comlogicielsefficas_T_OPER_httpchercheurs_edf_comlogicielsefficastypeCree', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 7, 1), )
-
-
- typeCree = property(__typeCree.value, __typeCree.set, None, None)
-
-
- # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}subroutine uses Python identifier subroutine
- __subroutine = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'subroutine'), 'subroutine', '__httpchercheurs_edf_comlogicielsefficas_T_OPER_httpchercheurs_edf_comlogicielsefficassubroutine', AT_subroutine, unicode_default=u'None')
- __subroutine._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 60, 1)
- __subroutine._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 106, 4)
-
- subroutine = property(__subroutine.value, __subroutine.set, None, None)
-
- _ElementMap.update({
- __typeCree.name() : __typeCree
- })
- _AttributeMap.update({
- __subroutine.name() : __subroutine
- })
-Namespace.addCategoryObject('typeBinding', u'T_OPER', T_OPER)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PROC with content type ELEMENT_ONLY
-class T_PROC (T_Accas_Common):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PROC with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_PROC')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 116, 1)
- _ElementMap = T_Accas_Common._ElementMap.copy()
- _AttributeMap = T_Accas_Common._AttributeMap.copy()
- # Base type is T_Accas_Common
-
- # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}subroutine uses Python identifier subroutine
- __subroutine = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'subroutine'), 'subroutine', '__httpchercheurs_edf_comlogicielsefficas_T_PROC_httpchercheurs_edf_comlogicielsefficassubroutine', AT_subroutine, unicode_default=u'None')
- __subroutine._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 60, 1)
- __subroutine._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 119, 4)
-
- subroutine = property(__subroutine.value, __subroutine.set, None, None)
-
- _ElementMap.update({
-
- })
- _AttributeMap.update({
- __subroutine.name() : __subroutine
- })
-Namespace.addCategoryObject('typeBinding', u'T_PROC', T_PROC)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_FACT with content type ELEMENT_ONLY
-class T_FACT (T_Accas_Common):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_FACT with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_FACT')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 139, 1)
- _ElementMap = T_Accas_Common._ElementMap.copy()
- _AttributeMap = T_Accas_Common._AttributeMap.copy()
- # Base type is T_Accas_Common
-
- # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}statut uses Python identifier statut
- __statut = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'statut'), 'statut', '__httpchercheurs_edf_comlogicielsefficas_T_FACT_httpchercheurs_edf_comlogicielsefficasstatut', AT_statut, unicode_default=u'o')
- __statut._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 57, 1)
- __statut._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 142, 4)
-
- statut = property(__statut.value, __statut.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}max_occurs uses Python identifier max_occurs
- __max_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'max_occurs'), 'max_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_FACT_httpchercheurs_edf_comlogicielsefficasmax_occurs', AT_max_occurs, unicode_default=u'1')
- __max_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 58, 1)
- __max_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 144, 4)
-
- max_occurs = property(__max_occurs.value, __max_occurs.set, None, None)
-
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}min_occurs uses Python identifier min_occurs
- __min_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'min_occurs'), 'min_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_FACT_httpchercheurs_edf_comlogicielsefficasmin_occurs', AT_min_occurs, unicode_default=u'1')
- __min_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 59, 1)
- __min_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 143, 4)
-
- min_occurs = property(__min_occurs.value, __min_occurs.set, None, None)
-
- _ElementMap.update({
-
- })
- _AttributeMap.update({
- __statut.name() : __statut,
- __max_occurs.name() : __max_occurs,
- __min_occurs.name() : __min_occurs
- })
-Namespace.addCategoryObject('typeBinding', u'T_FACT', T_FACT)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_BLOC with content type ELEMENT_ONLY
-class T_BLOC (T_Accas_Common):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_BLOC with content type ELEMENT_ONLY"""
- _TypeDefinition = None
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_BLOC')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 158, 1)
- _ElementMap = T_Accas_Common._ElementMap.copy()
- _AttributeMap = T_Accas_Common._AttributeMap.copy()
- # Base type is T_Accas_Common
-
- # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element {http://chercheurs.edf.com/logiciels/efficas}condition uses Python identifier condition
- __condition = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'condition'), 'condition', '__httpchercheurs_edf_comlogicielsefficas_T_BLOC_httpchercheurs_edf_comlogicielsefficascondition', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 45, 1), )
-
-
- condition = property(__condition.value, __condition.set, None, None)
-
-
- # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
-
- # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
- _ElementMap.update({
- __condition.name() : __condition
- })
- _AttributeMap.update({
-
- })
-Namespace.addCategoryObject('typeBinding', u'T_BLOC', T_BLOC)
-
-
-# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur_username with content type SIMPLE
-class T_classe_utilisateur_username (pyxb.binding.basis.complexTypeDefinition):
- """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur_username with content type SIMPLE"""
- _TypeDefinition = T_classe_utilisateur_name
- _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
- _Abstract = False
- _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_classe_utilisateur_username')
- _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 376, 1)
- _ElementMap = {}
- _AttributeMap = {}
- # Base type is T_classe_utilisateur_name
-
- # Attribute {http://chercheurs.edf.com/logiciels/efficas}nom uses Python identifier nom
- __nom = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'nom'), 'nom', '__httpchercheurs_edf_comlogicielsefficas_T_classe_utilisateur_username_httpchercheurs_edf_comlogicielsefficasnom', AT_nom, required=True)
- __nom._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 51, 1)
- __nom._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 379, 4)
-
- nom = property(__nom.value, __nom.set, None, None)
-
- _ElementMap.update({
-
- })
- _AttributeMap.update({
- __nom.name() : __nom
- })
-Namespace.addCategoryObject('typeBinding', u'T_classe_utilisateur_username', T_classe_utilisateur_username)
-
-
-cata = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'cata'), T_cata, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 5, 1))
-Namespace.addCategoryObject('elementBinding', cata.name().localName(), cata)
-
-regles = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'regles'), T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 6, 1))
-Namespace.addCategoryObject('elementBinding', regles.name().localName(), regles)
-
-fonction_utilisateur = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur'), T_fonction_python, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 10, 1))
-Namespace.addCategoryObject('elementBinding', fonction_utilisateur.name().localName(), fonction_utilisateur)
-
-commandes = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'commandes'), T_commandes, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 11, 1))
-Namespace.addCategoryObject('elementBinding', commandes.name().localName(), commandes)
-
-validators = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'validators'), T_validators, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 39, 1))
-Namespace.addCategoryObject('elementBinding', validators.name().localName(), validators)
-
-PlageValeur = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur'), T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 40, 1))
-Namespace.addCategoryObject('elementBinding', PlageValeur.name().localName(), PlageValeur)
-
-portee = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'portee'), T_portee, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 44, 1), unicode_default=u'None')
-Namespace.addCategoryObject('elementBinding', portee.name().localName(), portee)
-
-condition = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'condition'), T_fonction_python, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 45, 1))
-Namespace.addCategoryObject('elementBinding', condition.name().localName(), condition)
-
-into = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'into'), T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 49, 1))
-Namespace.addCategoryObject('elementBinding', into.name().localName(), into)
-
-A_CLASSER = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER'), T_predicat2, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 257, 1))
-Namespace.addCategoryObject('elementBinding', A_CLASSER.name().localName(), A_CLASSER)
-
-tuple = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'tuple'), T_tuple, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 467, 1))
-Namespace.addCategoryObject('elementBinding', tuple.name().localName(), tuple)
-
-doc = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'doc'), T_doc, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1))
-Namespace.addCategoryObject('elementBinding', doc.name().localName(), doc)
-
-typeCree = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeCree'), T_classe_utilisateur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 7, 1))
-Namespace.addCategoryObject('elementBinding', typeCree.name().localName(), typeCree)
-
-ValeurDef = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 8, 1))
-Namespace.addCategoryObject('elementBinding', ValeurDef.name().localName(), ValeurDef)
-
-ValeurSugg = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 9, 1))
-Namespace.addCategoryObject('elementBinding', ValeurSugg.name().localName(), ValeurSugg)
-
-SIMP = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'SIMP'), T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 43, 1))
-Namespace.addCategoryObject('elementBinding', SIMP.name().localName(), SIMP)
-
-borne_sup = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_sup'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 46, 1))
-Namespace.addCategoryObject('elementBinding', borne_sup.name().localName(), borne_sup)
-
-borne_inf = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_inf'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 47, 1))
-Namespace.addCategoryObject('elementBinding', borne_inf.name().localName(), borne_inf)
-
-AU_MOINS_UN = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 258, 1))
-Namespace.addCategoryObject('elementBinding', AU_MOINS_UN.name().localName(), AU_MOINS_UN)
-
-AU_PLUS_UN = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 259, 1))
-Namespace.addCategoryObject('elementBinding', AU_PLUS_UN.name().localName(), AU_PLUS_UN)
-
-ENSEMBLE = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 260, 1))
-Namespace.addCategoryObject('elementBinding', ENSEMBLE.name().localName(), ENSEMBLE)
-
-EXCLUS = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 261, 1))
-Namespace.addCategoryObject('elementBinding', EXCLUS.name().localName(), EXCLUS)
-
-PRESENT_ABSENT = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 269, 1))
-Namespace.addCategoryObject('elementBinding', PRESENT_ABSENT.name().localName(), PRESENT_ABSENT)
-
-PRESENT_PRESENT = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 270, 1))
-Namespace.addCategoryObject('elementBinding', PRESENT_PRESENT.name().localName(), PRESENT_PRESENT)
-
-UN_PARMI = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 271, 1))
-Namespace.addCategoryObject('elementBinding', UN_PARMI.name().localName(), UN_PARMI)
-
-matrice_double = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_double'), T_Matrice_double, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 465, 1))
-Namespace.addCategoryObject('elementBinding', matrice_double.name().localName(), matrice_double)
-
-matrice_symetrique_double = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double'), T_Matrice_Symetrique_double, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 466, 1))
-Namespace.addCategoryObject('elementBinding', matrice_symetrique_double.name().localName(), matrice_symetrique_double)
-
-classe_utilisateur = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur'), T_classe_utilisateur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 468, 1))
-Namespace.addCategoryObject('elementBinding', classe_utilisateur.name().localName(), classe_utilisateur)
-
-OPER = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'OPER'), T_OPER, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 99, 1))
-Namespace.addCategoryObject('elementBinding', OPER.name().localName(), OPER)
-
-PROC = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PROC'), T_PROC, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 110, 1))
-Namespace.addCategoryObject('elementBinding', PROC.name().localName(), PROC)
-
-FACT = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'FACT'), T_FACT, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 123, 1))
-Namespace.addCategoryObject('elementBinding', FACT.name().localName(), FACT)
-
-BLOC = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'BLOC'), T_BLOC, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 157, 1))
-Namespace.addCategoryObject('elementBinding', BLOC.name().localName(), BLOC)
-
-typeAttendu = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu'), T_name, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 41, 1))
-Namespace.addCategoryObject('elementBinding', typeAttendu.name().localName(), typeAttendu)
-
-typesimple = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typesimple'), T_simple, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 464, 1))
-Namespace.addCategoryObject('elementBinding', typesimple.name().localName(), typesimple)
-
-classeUtilisateurName = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'classeUtilisateurName'), T_classe_utilisateur_username, abstract=pyxb.binding.datatypes.boolean(1), location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 42, 1))
-Namespace.addCategoryObject('elementBinding', classeUtilisateurName.name().localName(), classeUtilisateurName)
-
-
-
-T_cata._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'commandes'), T_commandes, scope=T_cata, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 11, 1)))
-
-def _BuildAutomaton ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton
- del _BuildAutomaton
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 68, 3))
- counters.add(cc_0)
- states = []
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_0, False))
- symbol = pyxb.binding.content.ElementUse(T_cata._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'commandes')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 68, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- st_0._set_transitionSet(transitions)
- return fac.Automaton(states, counters, True, containing_state=None)
-T_cata._Automaton = _BuildAutomaton()
-
-
-
-
-T_commandes._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'OPER'), T_OPER, scope=T_commandes, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 99, 1)))
-
-T_commandes._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PROC'), T_PROC, scope=T_commandes, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 110, 1)))
-
-def _BuildAutomaton_ ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_
- del _BuildAutomaton_
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 72, 2))
- counters.add(cc_0)
- states = []
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_0, False))
- symbol = pyxb.binding.content.ElementUse(T_commandes._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'OPER')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 73, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_0, False))
- symbol = pyxb.binding.content.ElementUse(T_commandes._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PROC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 74, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, True) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, True) ]))
- st_1._set_transitionSet(transitions)
- return fac.Automaton(states, counters, True, containing_state=None)
-T_commandes._Automaton = _BuildAutomaton_()
-
-
-
-
-T_PlageValeur._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_sup'), T_typeAttendu, scope=T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 46, 1)))
-
-T_PlageValeur._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_inf'), T_typeAttendu, scope=T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 47, 1)))
-
-T_PlageValeur._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'into'), T_into, scope=T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 49, 1)))
-
-def _BuildAutomaton_2 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_2
- del _BuildAutomaton_2
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 81, 4))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 82, 4))
- counters.add(cc_1)
- states = []
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_0, False))
- symbol = pyxb.binding.content.ElementUse(T_PlageValeur._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'borne_sup')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 81, 4))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_1, False))
- symbol = pyxb.binding.content.ElementUse(T_PlageValeur._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'borne_inf')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 82, 4))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_PlageValeur._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'into')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 84, 3))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, False) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- st_2._set_transitionSet(transitions)
- return fac.Automaton(states, counters, True, containing_state=None)
-T_PlageValeur._Automaton = _BuildAutomaton_2()
-
-
-
-
-T_predicat2._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'p1'), T_predicat1, scope=T_predicat2, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 252, 3)))
-
-T_predicat2._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'p2'), AT_nom, scope=T_predicat2, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 253, 3)))
-
-def _BuildAutomaton_3 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_3
- del _BuildAutomaton_3
- import pyxb.utils.fac as fac
-
- counters = set()
- states = []
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_predicat2._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'p1')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 252, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_predicat2._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'p2')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 253, 3))
- st_1 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- st_1._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_predicat2._Automaton = _BuildAutomaton_3()
-
-
-
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER'), T_predicat2, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 257, 1)))
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 258, 1)))
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 259, 1)))
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 260, 1)))
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 261, 1)))
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 269, 1)))
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 270, 1)))
-
-T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 271, 1)))
-
-def _BuildAutomaton_4 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_4
- del _BuildAutomaton_4
- import pyxb.utils.fac as fac
-
- counters = set()
- states = []
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 274, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 275, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 276, 3))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 277, 3))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 278, 3))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 286, 3))
- st_5 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_5)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 287, 3))
- st_6 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_6)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 288, 3))
- st_7 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_7)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_4._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_5._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_6._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- ]))
- transitions.append(fac.Transition(st_1, [
- ]))
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- transitions.append(fac.Transition(st_6, [
- ]))
- transitions.append(fac.Transition(st_7, [
- ]))
- st_7._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_regles._Automaton = _BuildAutomaton_4()
-
-
-
-
-T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur'), T_fonction_python, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 10, 1)))
-
-T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typesimple'), T_simple, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 464, 1)))
-
-T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_double'), T_Matrice_double, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 465, 1)))
-
-T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double'), T_Matrice_Symetrique_double, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 466, 1)))
-
-T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'tuple'), T_tuple, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 467, 1)))
-
-T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur'), T_classe_utilisateur, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 468, 1)))
-
-def _BuildAutomaton_5 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_5
- del _BuildAutomaton_5
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 504, 3))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 505, 3))
- counters.add(cc_1)
- cc_2 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 506, 3))
- counters.add(cc_2)
- cc_3 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 507, 3))
- counters.add(cc_3)
- cc_4 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 508, 3))
- counters.add(cc_4)
- states = []
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_0, False))
- symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typesimple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 504, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_1, False))
- symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 505, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_2, False))
- symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 506, 3))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_3, False))
- symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'tuple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 507, 3))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_4, False))
- symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 508, 3))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 509, 3))
- st_5 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_5)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_2, True) ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_3, True) ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_4, True) ]))
- st_4._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_5, [
- ]))
- st_5._set_transitionSet(transitions)
- return fac.Automaton(states, counters, True, containing_state=None)
-T_into._Automaton = _BuildAutomaton_5()
-
-
-
-
-T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'doc'), T_doc, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1)))
-
-T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'regles'), T_regles, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 6, 1)))
-
-T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'SIMP'), T_SIMP, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 43, 1)))
-
-T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'FACT'), T_FACT, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 123, 1)))
-
-T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'BLOC'), T_BLOC, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 157, 1)))
-
-def _BuildAutomaton_6 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_6
- del _BuildAutomaton_6
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- counters.add(cc_1)
- states = []
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_0, False) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_1, False) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_4._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_Accas_Common._Automaton = _BuildAutomaton_6()
-
-
-
-
-T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'doc'), T_doc, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1)))
-
-T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef'), T_typeAttendu, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 8, 1)))
-
-T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg'), T_typeAttendu, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 9, 1)))
-
-T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'validators'), T_validators, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 39, 1)))
-
-T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur'), T_PlageValeur, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 40, 1)))
-
-T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu'), T_name, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 41, 1)))
-
-T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'portee'), T_portee, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 44, 1), unicode_default=u'None'))
-
-def _BuildAutomaton_7 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_7
- del _BuildAutomaton_7
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 169, 3))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 170, 3))
- counters.add(cc_1)
- cc_2 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 175, 3))
- counters.add(cc_2)
- cc_3 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 176, 3))
- counters.add(cc_3)
- cc_4 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 177, 3))
- counters.add(cc_4)
- cc_5 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 179, 3))
- counters.add(cc_5)
- states = []
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 169, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'portee')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 170, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 175, 3))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 176, 3))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 177, 3))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 178, 3))
- st_5 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_5)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_5, False))
- symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'validators')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 179, 3))
- st_6 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
- states.append(st_6)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_5, [
- fac.UpdateInstruction(cc_0, False) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_5, [
- fac.UpdateInstruction(cc_1, False) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_2, True) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_2, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_2, False) ]))
- transitions.append(fac.Transition(st_5, [
- fac.UpdateInstruction(cc_2, False) ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_3, True) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_3, False) ]))
- transitions.append(fac.Transition(st_5, [
- fac.UpdateInstruction(cc_3, False) ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_4, True) ]))
- transitions.append(fac.Transition(st_5, [
- fac.UpdateInstruction(cc_4, False) ]))
- st_4._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_6, [
- ]))
- st_5._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_6, [
- fac.UpdateInstruction(cc_5, True) ]))
- st_6._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_SIMP._Automaton = _BuildAutomaton_7()
-
-
-
-
-def _BuildAutomaton_8 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_8
- del _BuildAutomaton_8
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 516, 5))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 517, 5))
- counters.add(cc_1)
- cc_2 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 518, 5))
- counters.add(cc_2)
- cc_3 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 519, 5))
- counters.add(cc_3)
- cc_4 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 520, 5))
- counters.add(cc_4)
- states = []
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_0, False))
- symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typesimple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 516, 5))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_1, False))
- symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 517, 5))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_2, False))
- symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 518, 5))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_3, False))
- symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'tuple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 519, 5))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = set()
- final_update.add(fac.UpdateInstruction(cc_4, False))
- symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 520, 5))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_2, True) ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_3, True) ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_4, True) ]))
- st_4._set_transitionSet(transitions)
- return fac.Automaton(states, counters, True, containing_state=None)
-T_typeAttendu._Automaton = _BuildAutomaton_8()
-
-
-
-
-T_OPER._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeCree'), T_classe_utilisateur, scope=T_OPER, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 7, 1)))
-
-def _BuildAutomaton_9 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_9
- del _BuildAutomaton_9
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- counters.add(cc_1)
- states = []
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typeCree')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 104, 5))
- st_5 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
- states.append(st_5)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_0, False) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_1, False) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- st_4._set_transitionSet(transitions)
- transitions = []
- st_5._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_OPER._Automaton = _BuildAutomaton_9()
-
-
-
-
-def _BuildAutomaton_10 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_10
- del _BuildAutomaton_10
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- counters.add(cc_1)
- states = []
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_0, False) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_1, False) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_4._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_PROC._Automaton = _BuildAutomaton_10()
-
-
-
-
-def _BuildAutomaton_11 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_11
- del _BuildAutomaton_11
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- counters.add(cc_1)
- states = []
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_0, False) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_1, False) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- st_4._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_FACT._Automaton = _BuildAutomaton_11()
-
-
-
-
-T_BLOC._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'condition'), T_fonction_python, scope=T_BLOC, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 45, 1)))
-
-def _BuildAutomaton_12 ():
- # Remove this helper function from the namespace after it is invoked
- global _BuildAutomaton_12
- del _BuildAutomaton_12
- import pyxb.utils.fac as fac
-
- counters = set()
- cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- counters.add(cc_0)
- cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- counters.add(cc_1)
- states = []
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
- st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_0)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
- st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_1)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
- st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_2)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
- st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_3)
- final_update = None
- symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
- st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
- states.append(st_4)
- final_update = set()
- symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'condition')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 162, 5))
- st_5 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
- states.append(st_5)
- transitions = []
- transitions.append(fac.Transition(st_0, [
- fac.UpdateInstruction(cc_0, True) ]))
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_0, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_0, False) ]))
- st_0._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_1, [
- fac.UpdateInstruction(cc_1, True) ]))
- transitions.append(fac.Transition(st_2, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_3, [
- fac.UpdateInstruction(cc_1, False) ]))
- transitions.append(fac.Transition(st_4, [
- fac.UpdateInstruction(cc_1, False) ]))
- st_1._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- st_2._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- st_3._set_transitionSet(transitions)
- transitions = []
- transitions.append(fac.Transition(st_2, [
- ]))
- transitions.append(fac.Transition(st_3, [
- ]))
- transitions.append(fac.Transition(st_4, [
- ]))
- transitions.append(fac.Transition(st_5, [
- ]))
- st_4._set_transitionSet(transitions)
- transitions = []
- st_5._set_transitionSet(transitions)
- return fac.Automaton(states, counters, False, containing_state=None)
-T_BLOC._Automaton = _BuildAutomaton_12()
-
-
-classeUtilisateurName._setSubstitutionGroup(typeAttendu)
+++ /dev/null
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-import sys,os
-import raw.efficas as efficas
-import types
-
-sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
-sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..','UiQT5')))
-
-
-from Accas import *
-
-
-# Attention pas d heritage possible (cf doc pyxbe)
-
-dictSIMPEficasXML= { 'typ' : 'typeAttendu', 'statut' : 'statut',
- 'min_occurs': 'min' , 'max_occurs' : 'max',
- 'homo' : 'homo' , 'position' : 'portee',
- 'validators': 'validators' , 'sug' : 'valeur_sugg',
- 'defaut' : 'ValeurDef' , 'into' : ('PlageValeur','into'),
- 'val_min' : ('PlageValeur','borne_inf') , 'val_max' : ('PlageValeur','borne_sup'),
- 'ang' : ('doc','ang') , 'fr' : ('doc','fr',) ,
- 'docu' : ('doc','docu'),}
-
-dictSIMPXMLEficas = {'doc' : {'fr' : 'fr' , 'ang' : 'ang' , 'docu' : 'docu' },
- 'PlageValeur' : {'borne_sup' : 'val_max' , 'into' : 'into' , 'borne_inf' : 'val_min' ,},
- 'statut' : 'statut' , 'validators' : 'validators' , 'homo' : 'homo' ,
- 'ValeurDef' : 'defaut' , 'min' : 'min_occurs' ,
- 'valeur_sugg' : 'sug' , 'portee' : 'position' , 'max' : 'max_occurs' , }
-
-
-# ------------------------------
-class monSIMP (efficas.T_SIMP):
-# ------------------------------
-
- def explore(self):
- print "je passe dans explore pour SIMP ", self.nom
- self.dictArgsEficas={}
- self.dictArgsEficas['typ']=self.typeAttendu
- for nomXMLArg in dir(self) :
- if nomXMLArg in dictSIMPXMLEficas.keys() :
- nomEficasArg=dictSIMPXMLEficas[nomXMLArg]
- argu=getattr(self,nomXMLArg)
- if argu==None : continue
- if type(nomEficasArg) == types.DictionaryType:
- for nomXML in nomEficasArg.keys():
- arguDecoupe=getattr(argu,nomXML)
- nomEficasDecoupe=nomEficasArg[nomXML]
- self.dictArgsEficas[nomEficasDecoupe]=arguDecoupe
- else :
- self.dictArgsEficas[nomEficasArg] = argu
-
- #if argNew != None : print argNew
- self.objAccas=A_SIMP.SIMP(**self.dictArgsEficas)
- self.objAccas.nom=self.nom
-
- def getAccasEquivalent(self):
- return self.nom, self.objAccas
-
-# ------------------------------
-class monPROC(efficas.T_PROC):
-# ------------------------------
- def explore(self):
- print "je passe dans explore pour PROC ", self.nom
- self.dictConstruction={}
- self.dictConstruction['nom']=self.nom
-
- for obj in self.content():
- if hasattr(obj,'explore') : obj.explore ()
- if hasattr(obj,'getAccasEquivalent') :
- nom,objetAccas=obj.getAccasEquivalent()
- self.dictConstruction[nom]=objetAccas
- self.dictConstruction['op']=None
- self.objAccas=A_PROC.PROC(**self.dictConstruction)
- print dir(self.objAccas)
- print self.objAccas.entites
-
-
-# ------------------------------
-class monFACT(efficas.T_FACT):
-# ------------------------------
- def explore(self):
- #print "je passe dans explore pour FACT ", self.nom
- self.dictConstruction={}
- for obj in self.content():
- if hasattr(obj,'explore') : obj.explore
- if hasattr(obj,'creeAccasEquivalent') :
- nom,objetAccas=obj.creeAccasEquivalent()
- self.dictConstruction[nom]=objetAccas
- self.objAccas=A_FACT.FACT(**self.dictConstruction)
-
- def getAccasEquivalent(self):
- return self.nom, self.objAccas
-
-
-# ------------------------------
-class monCata(efficas.T_cata):
-# ------------------------------
- def exploreCata(self):
- # On positionne le contexte ACCAS
- self.JdC = JDC_CATA (code = 'MED', execmodul = None,)
- objAExplorer=self.commandes[0]
- for obj in objAExplorer.content():
- if hasattr(obj,'explore') : obj.explore()
-
-
-
-efficas.T_SIMP._SetSupersedingClass(monSIMP)
-efficas.T_FACT._SetSupersedingClass(monFACT)
-efficas.T_PROC._SetSupersedingClass(monPROC)
-efficas.T_cata._SetSupersedingClass(monCata)
-
-if __name__ == "__main__":
-# print dir(efficas)
-# print dir(efficas.T_SIMP)
-
-
- xml = open('Cata_MED_FAM.xml').read()
- SchemaMed = efficas.CreateFromDocument(xml)
- SchemaMed.exploreCata()
-
- #print dir(efficas.T_SIMP)
- #print dir(efficas.T_SIMP)
-
- #for maCommande in monCata.commandes :
- # for monProc in maCommande.PROC:
- # for monFact in monProc.FACT:
- # for simp in monFact.SIMP:
- # simp.creeAccasEquivalent()
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import object
+ from builtins import object
except : pass
class ASSD(object):
return self.etape[key]
def setName(self, nom):
- """Positionne le nom de self
+ """Positionne le nom de self
"""
self.nom = nom
return val == 'OUI'
- def getEficasAttribut(self, attribut):
+ def getEficasAttribut(self, attribut):
#print ('getEficasAttribut : ', self, attribut)
valeur=self.etape.getMocle(attribut)
try :
- valeur=self.etape.getMocle(attribut)
+ valeur=self.etape.getMocle(attribut)
except :
- valeur = None
+ valeur = None
#print (valeur)
return valeur
from .N_MCLIST import MCList
#print ('getEficasListOfAttributs pour', self,listeAttributs)
aTraiter=(self.etape,)
- while len(listeAttributs) > 0 :
- attribut=listeAttributs.pop(0)
- nvListe=[]
- for mc in aTraiter :
- try :
- resultat=mc.getMocle(attribut)
- if isinstance(resultat,MCList):
- for rmc in resultat : nvListe.append(rmc)
- else : nvListe.append(resultat)
- except : pass
- aTraiter=nvListe
+ while len(listeAttributs) > 0 :
+ attribut=listeAttributs.pop(0)
+ nvListe=[]
+ for mc in aTraiter :
+ try :
+ resultat=mc.getMocle(attribut)
+ if isinstance(resultat,MCList):
+ for rmc in resultat : nvListe.append(rmc)
+ else : nvListe.append(resultat)
+ except : pass
+ aTraiter=nvListe
#print ('fin getEficasListOfAttributs ', nvListe)
return nvListe
+ def ajouteUnPere(self,pere):
+ # ne fait rien mais est appeler pour tous les types de ASSD
+ pass
+
class assd(ASSD):
def __convert__(cls, valeur):
Cette méthode vérifie si le dictionnaire passé en argument (dict)
est susceptible de contenir un bloc de mots-clés conforme à la
définition qu'il porte.
-
Si la réponse est oui, la méthode retourne 1
-
Si la réponse est non, la méthode retourne 0
Le dictionnaire dict a pour clés les noms des mots-clés et pour valeurs
-
+
def longueurDsArbre(self):
- longueur=0
- for mc in self.mcListe :
- longueur = longueur + mc.longueurDsArbre()
- return longueur
+ longueur=0
+ for mc in self.mcListe :
+ longueur = longueur + mc.longueurDsArbre()
+ return longueur
def blocUtils():
"""Définit un ensemble de fonctions utilisables pour écrire les
from __future__ import absolute_import
try:
- from builtins import object
+ from builtins import object
except : pass
from .N_types import isInt, isFloat, isSequence
#import traceback
#traceback.print_stack()
if o == None : return None
+ #print ('je cree UserASSDConversion', o, ' ', self.typeACreer)
+ nouvelObj=self.typeACreer(o)
+ return nouvelObj
+
+class UserASSDMultipleConversion(TypeConversion):
+ def __init__(self, classUser):
+ TypeConversion.__init__(self, classUser)
+
+ def function(self, o):
+ if o == None : return None
+ #print ('je cree dans UserASSDMultipleConversion', o, ' ', self.typeACreer)
nouvelObj=self.typeACreer(o)
return nouvelObj
if 'I' in typ : return _convertI
elif 'R' in typ : return _convertR
if name == 'UserASSD':
- #print(typ)
- return (UserASSDConversion(typ))
+ #print(typ)
+ return (UserASSDConversion(typ))
+ if name == 'UserASSDMultiple':
+ return (UserASSDMultipleConversion(typ))
return None
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import six
# coding=utf-8
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import re
from . import N_CR
from . import N_OPS
#self.doitSenregistrerComme = None
self.txtNomComplet=''
self.redefinit=False
+ self.dejaPrepareDump=False
def affecter_parente(self):
"""
"""
Cette methode doit retourner un objet dérivé de la classe OBJECT
"""
-
+
raise NotImplementedError("La méthode __call__ de la classe %s doit être implémentée"
% self.__class__.__name__)
def checkPosition(self):
"""Vérifie l'attribut position."""
- if self.position not in ('local', 'global', 'global_jdc'):
- self.cr.fatal(_(u"L'attribut 'position' doit valoir 'local', 'global' "
+ if self.position not in ('local', 'global', 'global_jdc', 'inGetAttribut', 'reCalculeEtape'):
+ self.cr.fatal(_(u"L'attribut 'position' doit valoir 'local', 'global' ,'global_jdc', 'inGetAttribut', 'reCalculeEtape' "
u"ou 'global_jdc' : %r"), self.position)
def nomComplet(self):
if self.txtNomComplet != '' : return self.txtNomComplet
qui=self
while hasattr(qui, 'pere' ):
- self.txtNomComplet+='_'+qui.nom
- qui=qui.pere
+ self.txtNomComplet+='_'+qui.nom
+ qui=qui.pere
self.txtNomComplet+='_'+qui.nom
return self.txtNomComplet
+ def geneaCompleteSousFormeDeListe(self):
+ geneaCompleteSousFormeDeListe=[]
+ qui=self
+ while hasattr(qui, 'pere' ):
+ geneaCompleteSousFormeDeListe.append(qui)
+ qui=qui.pere
+ geneaCompleteSousFormeDeListe.append(qui)
+ return geneaCompleteSousFormeDeListe
+
def addDefinitionMC(self,listeMCAvant,**args):
ouChercher=self
for mot in listeMCAvant:
try :
- ouChercher=ouChercher.entites[mot]
+ ouChercher=ouChercher.entites[mot]
except :
- print ('impossible de trouver : ',mot,' ',listeMCAvant)
+ print ('impossible de trouver : ',mot,' ',listeMCAvant)
(nomMC,defMC)=args.items()[0]
defMC.pere = ouChercher
defMC.pere.propageRedefinit()
defMC.nom = nomMC
cata = CONTEXT.getCurrentCata()
- print (cata)
+ #print (cata)
ouChercher.entites[nomMC]=defMC
def changeDefinitionMC(self,listeMCAvant,**args):
ouChercher=self
for mot in listeMCAvant:
try :
- ouChercher=ouChercher.entites[mot]
+ ouChercher=ouChercher.entites[mot]
except :
- print ('impossible de trouver : ',mot,' ',listeMCAvant)
+ print ('impossible de trouver : ',mot,' ',listeMCAvant)
monSIMP=ouChercher
for (nomAttributDef,valeurAttributDef) in args.items():
- if hasattr(monSIMP, nomAttributDef) :
- setattr(monSIMP, nomAttributDef, valeurAttributDef)
- else :
- print ('pb avec ', nomAttributdef,valeurAttributMC)
+ if hasattr(monSIMP, nomAttributDef) :
+ setattr(monSIMP, nomAttributDef, valeurAttributDef)
+ else :
+ print ('pb avec ', nomAttributdef,valeurAttributMC)
monSIMP.propageRedefinit()
def propageRedefinit(self):
- # a reflechir
- self.redefinit=True
- # PNPN il faut remonter a l etape
-
+ # a reflechir
+ self.redefinit=True
+ # PNPN il faut remonter a l etape
+
- def makeObjetPourVerifSignature(self,**args):
- etape = self.class_instance(oper=self, args=args)
+ def makeObjetPourVerifSignature(self,*args,**kwargs):
+ etape = self.class_instance(oper=self, args=kwargs)
etape.MCBuild()
return etape
+
+ def dumpStructure(self,decal=0):
+ if self.label == 'SIMP':
+ texte = decal * ' ' + self.nom + ' \n'
+ return texte
+ texte = decal * ' ' + self.nom
+ if self.label == 'BLOC' : texte+= " " + self.condition
+ if self.label == 'OPER' : texte+ " " + str(self.sd_prod) + "\n"
+ texte+=' \n'
+ for c in self.entites.values():
+ texte+=c.dumpStructure(decal+1)
+ texte += decal * ' ' + 'fin pour ' + self.nom + ' \n'
+ return texte
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except :
- pass
+ pass
import types
import sys
import os
# faut il le faire ds MC_Build ?
# traitement de Pyxb si Pyxb
self.dicoPyxbDeConstruction = args.get('dicoPyxbDeConstruction', None)
- if self.dicoPyxbDeConstruction :
+ if self.dicoPyxbDeConstruction :
del args['dicoPyxbDeConstruction']
self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb']
- else :
+ else :
self.objPyxbDeConstruction=None
self.definition = oper
self.reuse = reuse
self.idracine = oper.label
self.appel = N_utils.calleeWhere(niveau)
self.mc_globaux = {}
+ self.doitEtreRecalculee = False
self.sd = None
self.actif = 1
self.makeRegister()
self.icmd = None
+ self.userASSDCrees=[]
def makeRegister(self):
"""
# pourrait etre appelee par une commande fortran faisant appel a des fonctions python
# on passe la main au parent
return self.parent.getConcept(nomsd)
-
# coding=utf-8
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
list_instance = N_MCLIST.MCList
label = 'FACT'
- def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None,
+ def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None,
min=0, max=1, validators=None, **args):
"""
Un mot-clé facteur est caractérisé par les attributs suivants :
for v in val:
if type(v) == dict or isinstance(v, _F):
if dicoPyxbDeConstruction :
- objet = self.class_instance(
- nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice])
- else :
- objet = self.class_instance(
- nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=None)
+ objet = self.class_instance(
+ nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice])
+ else :
+ objet = self.class_instance(
+ nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=None)
indice=indice+1
l.append(objet)
elif isinstance(v, self.class_instance):
-# if faut gerer ici --> on passe la avec une liste de concept ?
+# if faut gerer ici --> on passe la avec une liste de concept ?
# PNPN --> si pyxb
l.append(v)
else:
l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
elif type(val) == dict or isinstance(val, _F):
- if dicoPyxbDeConstruction :
+ if dicoPyxbDeConstruction :
objet = self.class_instance(
nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
- else :
+ else :
objet = self.class_instance(
nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=None)
- l.append(objet)
+ l.append(objet)
elif isinstance(val, self.class_instance):
-# idem --> quand passe t on la
+# idem --> quand passe t on la
l.append(val)
else:
l.append(N_OBJECT.ErrorObj(self, val, parent, nom))
- l.cata=l.jdc.cata
- l.buildObjPyxb(l)
+ # pour tenir compte du validateFonction
+ if l.jdc :
+ l.cata=l.jdc.cata
+ l.buildObjPyxb(l)
return l
def verifCata(self):
self.checkDocu()
self.checkValidators()
self.verifCataRegles()
-
-
from __future__ import division
from __future__ import absolute_import
try :
- from builtins import zip
- from builtins import str
+ from builtins import zip
+ from builtins import str
except :
- pass
+ pass
from math import sin, cos, tan, asin, acos, atan2, atan, sinh, cosh, tanh
from math import pi, exp, log, log10, sqrt
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import os
import traceback
Cette methode execute le jeu de commandes compile dans le contexte
self.g_context de l'objet JDC
"""
-
+
CONTEXT.setCurrentStep(self)
# Le module nommage utilise le module linecache pour acceder
# au source des commandes du jeu de commandes.
init2 = "from " + obj_cata.__name__ + " import *"
exec(init2, self.g_context)
else :
- # ici on a un catalogue en grammaire Eficas XML
- # il faut ajouter ce qu on a construit au contexte
- for (k,v) in obj_cata.contexteXML.items() :
- self.g_context[k]=v
+ # ici on a un catalogue en grammaire Eficas XML
+ # il faut ajouter ce qu on a construit au contexte
+ for (k,v) in obj_cata.contexteXML.items() :
+ self.g_context[k]=v
# Initialisation du contexte global pour l'evaluation des conditions de BLOC
# On utilise une copie de l'initialisation du contexte du jdc
self.condition_context = self.g_context.copy()
except NameError as e:
etype, value, tb = sys.exc_info()
l = traceback.extract_tb(tb)
- s = traceback.format_exception_only(NameError, e)
+ s = traceback.format_exception_only("Erreur de nom", e)[0][:-1]
msg = "erreur de syntaxe, %s ligne %d" % (s, l[-1][1])
if CONTEXT.debug:
traceback.print_exc()
def regUserSD(self,sd):
# utilisee pour creer les references
# se contente d appeler la methode equivalente sur le jdc
- id=self.regSD(sd)
- self.nommerSDProd(sd,sd.nom)
- return id
+ id=self.regSD(sd)
+ self.nommerSDProd(sd,sd.nom)
+ return id
def regSD(self, sd):
# if os.path.exists("fort." + str(unite)):
# fname = "fort." + str(unite)
if fname == None:
- raise AsException("Impossible de trouver le fichier correspondant")
+ raise AsException("Impossible de trouver le fichier correspondant")
if not os.path.exists(fname):
- raise AsException(fname + " n'est pas un fichier existant" )
+ raise AsException(fname + " n'est pas un fichier existant" )
fproc = open(fname, 'r')
text = fproc.read()
fproc.close()
print((' `- JDC sdAccessible : PAR_LOT =', self.parLot))
return self.parLot == 'NON'
+ def getEtapesByName(self,name):
+ listeDEtapes=[]
+ for e in self.etapes :
+ if e.nom == name : listeDEtapes.append(e)
+ return listeDEtapes
+
+ def getEtapeByConceptName(self,conceptName):
+ for e in self.etapes :
+ if e.sdnom == conceptName : return e
+
+
def _build_reserved_kw_list(self):
"""Construit la liste des mots-cles reserves (interdits pour le
nommage des concepts)."""
['OPER', 'MACRO', 'BLOC', 'SIMP', 'FACT', 'FORM',
'GEOM', 'MCSIMP', 'MCFACT'])
-
class_instance = N_JDC.JDC
label = 'JDC'
- def __init__(self, code='', execmodul=None, regles=(), niveaux=(),fichierSource=None, **args):
+ def __init__(self, code='', execmodul=None, regles=(), niveaux=(),fichierSource=None, fr='', ang ='', **args):
"""
on se laisse la possibilite d initier fichierSource avec autre chose que le nom du fichier
au cas ou ... pour pouvoir changer le nom du 'sous code' implementer (cf readercata)
"""
self.code = code
+ self.fr = fr
+ self.ang = ang
self.execmodul = execmodul
if type(regles) == tuple:
self.regles = regles
CONTEXT.unsetCurrentCata()
CONTEXT.setCurrentCata(self)
self.fenetreIhm=None
+ self.definitUserASSD = False
+ self.definitUserASSDMultiple = False
self.dictTypesXSD={}
- self.listeDesTypesXSDRedefini=[]
+ self.dictTypesXSDJumeaux={}
self.dictTypesASSDorUserASSDCrees={}
self.dictTypesASSDorUserASSDUtilises={}
+ self.listeUserASSDDumpes=set()
+ self.listeTypeTXMAvecBlancs=set()
+
-
def __call__(self, procedure=None, cata=None, cata_ord_dico=None,
nom='SansNom', parent=None, **args):
"""
ou None s'il n'existe pas
"""
return self.d_niveaux.get(nom_niveau, None)
+
+
+ def dumpStructure(self):
+ texte=""
+ for c in self.commandes:
+ if not(c.label != "OPER") and not(c.label != 'PROC') : continue
+ if c.label == "OPER" : texte+=c.nom + " "+ str(c.sd_prod) + "\n"
+ if c.label == "PROC" : texte+=c.nom + " \n"
+ texte+=c.dumpStructure()
+ return texte
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import types
import sys
self.valeur = val
self.objPyxbDeConstruction=None
self.dicoPyxbDeConstruction=dicoPyxbDeConstruction
+ self.estIdentifiePar=None
if parent:
self.jdc = self.parent.jdc
self.niveau = self.parent.niveau
Construit la liste des sous-entites du MCCOMPO
à partir du dictionnaire des arguments (valeur)
"""
-
+
#import traceback
#traceback.print_stack()
#print(("MCCOMPO.buildMc _____________________________________", self.nom))
#print ('MCCOMPO___________________', self.valeur)
if args == None: args = {}
mcListe = []
-
+
# On recopie le dictionnaire des arguments pour protéger l'original des
# delete (del args[k])
# si une valeur existe dans args ou est obligatoire (generique si toutes les
# entites ont l attribut statut )
#
- if self.dicoPyxbDeConstruction and k in self.dicoPyxbDeConstruction :
- objPyxbDeConstruction=self.dicoPyxbDeConstruction[k]
- del self.dicoPyxbDeConstruction[k]
+ if self.dicoPyxbDeConstruction and k in self.dicoPyxbDeConstruction :
+ objPyxbDeConstruction=self.dicoPyxbDeConstruction[k]
+ del self.dicoPyxbDeConstruction[k]
else :
- objPyxbDeConstruction=None
+ objPyxbDeConstruction=None
#print (args.get(k, None))
objet = v(val=args.get(k, None), nom=k, parent=self,objPyxbDeConstruction=objPyxbDeConstruction)
mcListe.append(objet)
if hasattr(objet.definition, 'position'):
if objet.definition.position == 'global':
self.append_mc_global(objet)
+ if objet.definition.position == 'reCalculeEtape':
+ #print ('-------------------------- rencontre reCalculeEtape: ', objet.nom)
+ self.append_mc_global_avecRecalcule(objet)
elif objet.definition.position == 'global_jdc':
self.append_mc_global_jdc(objet)
if k in args:
del args[k]
# Phase 1.2 : on traite les autres entites que SIMP
- # (FACT en fait car un BLOC ne peut avoir le meme nom qu'un mot-clef)
+ # FACT ou listeDeFAct en fait car un BLOC ne peut etre present dans les args
for k, v in list(self.definition.entites.items()):
- if v.label == 'SIMP':
- continue
+ if v.label == 'SIMP': continue
if k in args or v.statut == 'o':
+ #print ('construit', k)
#
# Creation par appel de la methode __call__ de la definition de la sous entite k de self
# si une valeur existe dans args ou est obligatoire (generique si toutes les
# entites ont l attribut statut )
#
- if self.dicoPyxbDeConstruction and k in self.dicoPyxbDeConstruction :
- dicoPyxbDeConstruction=self.dicoPyxbDeConstruction[k]
- del self.dicoPyxbDeConstruction[k]
+ if self.dicoPyxbDeConstruction and k in self.dicoPyxbDeConstruction :
+ dicoPyxbDeConstruction=self.dicoPyxbDeConstruction[k]
+ del self.dicoPyxbDeConstruction[k]
else :
- dicoPyxbDeConstruction=None
+ dicoPyxbDeConstruction=None
objet = v(val=args.get(k, None), nom=k, parent=self,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
mcListe.append(objet)
if k in args:
dico_valeurs = self.creeDictCondition(mcListe, condition=1)
globs = self.jdc and self.jdc.condition_context or {}
if v.verifPresence(dico_valeurs, globs):
+ #print ('appel construit bloc', k, 'avec', args, 'a partir de', self.nom )
# Si le bloc existe :
# 1- on le construit
# 2- on l'ajoute à mcListe
bloc = v(nom=k, val=args, parent=self,dicoPyxbDeConstruction=self.dicoPyxbDeConstruction)
mcListe.append(bloc)
args = bloc.reste_val
+ #print ('les args deviennent ', args)
# On ne recalcule pas le contexte car on ne tient pas compte des blocs
# pour évaluer les conditions de présence des blocs
# dico_valeurs = self.creeDictValeurs(mcListe)
# On conserve les arguments superflus dans l'attribut reste_val
+ # les reste_val des blocs vont contenir trop de MC
+ # car ils sont appeles avec tous les MC de leur niveau qui n ont pas ete consommes
+ # et le reste_val n est pas remis a jour
+ # est-ce un pb ? a priori non
self.reste_val = args
+ #print ('self.reste_val de ', self.nom, self.reste_val)
# On ordonne la liste ainsi créée suivant l'ordre du catalogue
# (utile seulement pour IHM graphique)
mcListe = self.ordonneListe(mcListe)
if self.jdc : self.cata=self.jdc.cata
else : self.cata = None
self.buildObjPyxb(mcListe)
- #else : print ('pas de construction pour ', self.nom, self.objPyxbDeConstruction)
- #print ('buildObjPyxb : ' , self.nom)
- #print(("MCCOMPO.buildMc fin_____________________________________", self.nom))
+ #print ('______________________________________ fin ', self.nom)
return mcListe
- def buildMcApresGlobal(self):
- print ('Noyau ---------------- buildMcApresGlobal pour', self.nom)
+ def buildMcApresGlobalEnSuppression(self):
+ blocsDejaLa=[]
+ for mc in self.mcListe :
+ if mc.nature == 'MCBLOC' : blocsDejaLa.append(mc)
+ for mc in blocsDejaLa :
+ dico_valeurs = self.creeDictCondition(self.mcListe, condition=1)
+ globs = self.jdc and self.jdc.condition_context or {}
+ defBloc = mc.definition
+ if not (defBloc.verifPresence(dico_valeurs, globs)):
+ self.suppEntite(mc)
+
+
+ def reConstruitResteVal(self):
+ # normal que apres buildMcApresGlobalEnCreation les reste_val ne soient pas corrects
+ for mc in self.mcListe :
+ if mc.nom in self.reste_val :
+ del self.reste_val[mc.nom]
+ if mc.nature == 'MCBLOC' :
+ ancetre=mc.parent
+ for mcFDuMc in mc.mcListe :
+ while ancetre.nature == 'MCBLOC' :
+ ancetre=ancetre.parent
+ if mcFDuMc.nom in ancetre.reste_val : del ancetre.reste_val[mcFDuMc.nom]
+ if mc.nature == 'MCSIMP' : continue
+ if mc.nature == 'MCList' :
+ for mcObj in mc.data :
+ mcObj.reConstruitResteVal()
+ else :
+ mc.reConstruitResteVal()
+
+
+ def buildMcApresGlobalEnCreation(self):
nouveau_args = self.reste_val
blocsDejaLa=[]
for mc in self.mcListe :
- if mc.nature == 'MCBLOC' : blocsDejaLa.append(mc.nom)
+ if mc.nature == 'MCBLOC' : blocsDejaLa.append(mc.nom)
for k, v in list(self.definition.entites.items()):
if v.label != 'BLOC': continue
if k in blocsDejaLa : continue
if v.verifPresence(dico_valeurs, globs):
bloc = v(nom=k, val=nouveau_args, parent=self,dicoPyxbDeConstruction=self.dicoPyxbDeConstruction)
if bloc :
- self.mcListe.append(bloc)
- self.reste_val = bloc.reste_val
-
+ self.mcListe.append(bloc)
+ bloc.addObjPyxb(self.chercheIndiceDsLeContenu(bloc))
+ nouveau_args = self.reste_val
+ self.reste_val = bloc.reste_val
+
def ordonneListe(self, mcListe):
"""
Cette méthode interroge la définition de self et retourne la liste des mots-clés fils
directs de self de type 'global'.
position='global' n'est donc possible (et n'a de sens) qu'au plus haut niveau.
+ du coup ici on ajoute les globaux de l etape qui sont dans mc_recalculeEtape
"""
+ #print ('je passe par ici', self.nom)
dico = {}
etape = self.getEtape()
if not etape:
return {}
for k, v in list(etape.definition.entites.items()):
- if v.label != 'SIMP':
- continue
- if v.position != 'global':
- continue
- if v.statut == 'o':
- continue
+ if v.label != 'SIMP': continue
+ if v.position == 'local': continue
+ if v.position == 'inGetAttribut': continue
+ if v.position == 'reCalculeEtape': continue
+ if v.statut == 'o': continue
obj = v(val=None, nom=k, parent=etape)
dico[k] = obj.getValeur()
return dico
return None
+ def getChildOrChildInBloc(self, name, restreint='non'):
+ # cherche dans les fils et les fils des blocs
+ # tout est base sur le fait que deux freres ne peuvent pas avoir le meme nom
+ # dans des blocs non exclusifs, sinon le .comm n est pas du python valide
+ for v in self.mcListe:
+ if v.nom == name: return v
+ if restreint == 'non':
+ try:
+ entite = self.definition.entites[name]
+ if entite.label == 'SIMP' or (entite.label == 'FACT' and entite.statut in ('c', 'd')):
+ return entite(None, name, None)
+ except:
+ pass
+ for v in self.mcListe:
+ if v.nature == 'MCBLOC' :
+ petitFils=v.getChildOrChildInBloc(name, restreint)
+ if petitFils !=None : return petitFils
+ return None
+
+ def append_mc_global_avecRecalcule(self, mc):
+ etape = self.getEtape()
+ if etape:
+ nom = mc.nom
+ if not(nom in etape.mc_globaux) :
+ etape.doitEtreRecalculee = True
+ etape.mc_globaux[nom] = mc
+ #print ('ajout de nom', mc.nom, 'ds les mc_globaux de', etape.nom)
+
+
def append_mc_global(self, mc):
"""
Ajoute le mot-clé mc à la liste des mots-clés globaux de l'étape
def copy(self):
""" Retourne une copie de self """
objet = self.makeobjet()
- # FR : attention !!! avec makeobjet, objet a le meme parent que self
+ # attention !!! avec makeobjet, objet a le meme parent que self
# ce qui n'est pas du tout bon dans le cas d'une copie !!!!!!!
- # FR : peut-on passer par là autrement que dans le cas d'une copie ???
- # FR --> je suppose que non
- # XXX CCAR : le pb c'est qu'on vérifie ensuite quel parent avait l'objet
+ # le pb c'est qu'on vérifie ensuite quel parent avait l'objet
# Il me semble preferable de changer le parent a la fin quand la copie
# est acceptee
objet.valeur = copy(self.valeur)
return l
+ #def getSdCreeParObjetAvecFiltre(self,objetAssdMultiple):
+ # est-ce que si on est bloc, il faut passer à parent ?
+ # ou prevoir une autre fonction qui tienne compte de cela
+ # ou prevoir un xpath
+ # classeAChercher = objetAssdMultiple.definition.type
+ # filtre = objetAssdMultiple.definition.filtre
+ # print ('getSdCreeParObjetAvecFiltre', classeAChercher, filtre)
+ # dicoValeurs = self.creeDictCondition(self.mcListe, condition=1)
+ # l=[]
+ # for k,v in self.jdc.sdsDict.items():
+ # if (isinstance(v, classeAChercher)) :
+ # if v.executeExpression(filtre,dicoValeurs) : l.append(k)
+ # return l
+
+
def intersection_vide(dict1, dict2):
"""Verification qu'il n'y a pas de clé commune entre 'dict1' et 'dict2'."""
#traceback.print_stack()
self.dicoPyxbDeConstruction=dicoPyxbDeConstruction
if self.dicoPyxbDeConstruction :
- self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb']
- del self.dicoPyxbDeConstruction['objEnPyxb']
+ self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb']
+ del self.dicoPyxbDeConstruction['objEnPyxb']
else :
- self.objPyxbDeConstruction=None
+ self.objPyxbDeConstruction=None
self.definition = definition
self.nom = nom
self.val = val
self.parent = parent
+ self.estIdentifiePar=None
self.valeur = self.getValeurEffective(self.val)
if parent:
self.jdc = self.parent.jdc
from __future__ import absolute_import
try :
- from future import standard_library
- standard_library.install_aliases()
-except :
- pass
+ from future import standard_library
+ standard_library.install_aliases()
+except :
+ pass
from copy import copy
import types
try:
- from UserList import UserList
+ from UserList import UserList
except ImportError:
- from collections import UserList
+ from collections import UserList
# print "Erreur : %s ne peut etre un descendant de %s" %(name,self.nom)
return None
+ def getAllChild(self, name):
+ # A utiliser uniquement dans un filtre
+ maListeRetour= MCList()
+ for obj in self.data:
+ for objFils in obj.getChild(name) :
+ maListeRetour.append(objFils)
+ return maListeRetour
+
+
def isBLOC(self):
"""
Indique si l'objet est de type BLOC
del dico[i]
dresu.append(dico)
return dresu
-
+
def longueurDsArbre(self):
# pour Pyxb : longueur dans le orderedcontent de pyxb
return len(self)
from copy import copy
from Noyau.N_ASSD import ASSD
+from Noyau.N_UserASSDMultiple import UserASSDMultiple
from Noyau.N_CO import CO
from . import N_OBJECT
from .N_CONVERT import ConversionFactory
# Le mot cle simple a été créé sans parent
# est-ce possible ?
print ('je suis dans le else sans parent du build')
- print (poum)
self.jdc = None
self.cata = None
self.niveau = None
self.etape = None
- if self.definition.creeDesObjets :
- self.convProto = ConversionFactory('UserASSD', self.definition.creeDesObjetsDeType)
- else :
- self.convProto = ConversionFactory('type', typ=self.definition.type)
+ if self.definition.creeDesObjets :
+ if issubclass(self.definition.creeDesObjetsDeType, UserASSDMultiple) :
+ self.convProto = ConversionFactory('UserASSDMultiple', self.definition.creeDesObjetsDeType)
+ else :
+ self.convProto = ConversionFactory('UserASSD', self.definition.creeDesObjetsDeType)
+ else :
+ self.convProto = ConversionFactory('type', typ=self.definition.type)
self.valeur = self.getValeurEffective(self.val)
if self.definition.utiliseUneReference :
- if self.valeur != None:
- if not type(self.valeur) in (list, tuple): self.valeur.ajoutUtilisePar(self)
- else :
- #PNPN --> chgt pour Vimmp
- for v in self.valeur :
- try : v.ajoutUtilisePar(self)
- except : print ('il y a un souci ici', self.nom, self.valeur)
+ if self.valeur != None:
+ if not type(self.valeur) in (list, tuple): self.valeur.ajoutUtilisePar(self)
+ else :
+ #PNPN --> chgt pour Vimmp
+ for v in self.valeur :
+ print (v, type(v))
+ v.ajoutUtilisePar(self)
+ #try : v.ajoutUtilisePar(self)
+ #except : print ('il y a un souci ici', self.nom, self.valeur)
self.buildObjPyxb()
self.listeNomsObjsCrees = []
"""
Retourne la valeur effective du mot-clé en fonction
de la valeur donnée. Defaut si val == None
+ Attention aux UserASSD et aux into (exple Wall gp de maille et 'Wall')
"""
+ #print ('getValeurEffective ________________', val)
if (val is None and hasattr(self.definition, 'defaut')): val = self.definition.defaut
- if self.jdc != None and val in list(self.jdc.sdsDict.keys()): return self.jdc.sdsDict[val]
- # dans le cas de lecture de .comm, il est possible que l objet est deja ete cree
- # peut-etre devrait on aussi verifier que val est de type string ?
- if self.definition.creeDesObjets :
- # isinstance(val, self.definition.creeDesObjetsDeType) ne fonctionne pas car il y a un avec cata devant et l autre non
- if val != None :
- if (not(val.__class__.__name__ == self.definition.creeDesObjetsDeType.__name__)) :
- val=self.convProto.convert(val)
- else :
- if val.nom=='sansNom' :
- for leNom,laVariable in self.jdc.g_context.items():
- if id(laVariable)== id(val) and (leNom != 'sansNom'):
- val.initialiseNom(leNom)
- if val.parent== None : val.initialiseParent(self)
- return val
+ if self.definition.type[0] == 'TXM' and isinstance(val,str) : return val
+ if self.definition.creeDesObjets :
+ # isinstance(val, self.definition.creeDesObjetsDeType) ne fonctionne pas car il y a un avec cata devant et l autre non
+ if val == None : return val
+ if not isinstance(val,(list,tuple)) : valATraiter=[val,]
+ else : valATraiter=val
+ listeRetour=[]
+ for v in valATraiter:
+ #print (v.__class__.__name__, self.definition.creeDesObjetsDeType.__name__)
+ if (not(v.__class__.__name__ == self.definition.creeDesObjetsDeType.__name__)) :
+ if self.jdc != None and v in list(self.jdc.sdsDict.keys()): v=self.jdc.sdsDict[v]
+ else : v=self.convProto.convert(v)
+ if v.parent== None : v.initialiseParent(self)
+ if issubclass(self.definition.creeDesObjetsDeType, UserASSDMultiple) :
+ v.ajouteUnPere(self)
+ else :
+ if v.nom=='sansNom' :
+ for leNom,laVariable in self.jdc.g_context.items():
+ #print (leNom,laVariable)
+ if id(laVariable) == id(v) and (leNom != 'sansNom'):
+ v.initialiseNom(leNom)
+ if v.parent== None : v.initialiseParent(self)
+ if issubclass(self.definition.creeDesObjetsDeType, UserASSDMultiple) :
+ v.ajouteUnPere(self)
+ listeRetour.append(v)
+ if isinstance(val,(list,tuple)) :newVal=listeRetour
+ else : newVal=listeRetour[0]
+ return newVal
if self.convProto:
- val = self.convProto.convert(val)
+ val = self.convProto.convert(val)
return val
def creeUserASSDetSetValeur(self, val):
self.state='changed'
nomVal=val
if nomVal in self.jdc.sdsDict.keys():
- if isinstance(self.jdc.sdsDict[nomVal],self.definition.creeDesObjetsDeType): return (0, 'concept deja reference')
- else : return (0, 'concept d un autre type existe deja')
+ if isinstance(self.jdc.sdsDict[nomVal],self.definition.creeDesObjetsDeType):
+ if issubclass(self.definition.creeDesObjetsDeType, UserASSDMultiple) :
+ p=self.parent
+ while p in self.parent :
+ if hasattr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(self.jdc.sdsDict[nomVal])
+ else : p.listeDesReferencesCrees=[self.jdc.sdsDict[nomVal],]
+ p=p.parent
+ self.jdc.sdsDict[nomVal].ajouteUnPere(self)
+ #return (1, 'reference ajoutee')
+ else :
+ return (0, 'concept non multiple deja reference')
+ else : return (0, 'concept d un autre type existe deja')
if self.convProto:
objVal = self.convProto.convert(nomVal)
objVal.initialiseNom(nomVal)
- if objVal.parent== None : objVal.initialiseParent(self)
+ if objVal.parent== None : objVal.initialiseParent(self)
+ objVal.ajouteUnPere(self)
p=self.parent
while p in self.parent :
- print ('mise a jour de ',p)
- if hasattr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(objVal)
- else : p.listeDesReferencesCrees=(objVal,)
- p=p.parent
+ print ('mise a jour de ',p)
+ if hasattr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(objVal)
+ else : p.listeDesReferencesCrees=[objVal,]
+ p=p.parent
return (self.setValeur(objVal), 'reference creee')
def creeUserASSD(self, val):
self.state='changed'
nomVal=val
if nomVal in self.jdc.sdsDict.keys():
- if isinstance(self.jdc.sdsDict[nomVal],self.definition.creeDesObjetsDeType): return (0,None, 'concept deja reference')
- else : return (0, None, 'concept d un autre type existe deja')
+ if isinstance(self.jdc.sdsDict[nomVal],self.definition.creeDesObjetsDeType):
+ if issubclass(self.definition.creeDesObjetsDeType, UserASSDMultiple) :
+ p=self.parent
+ while p in self.parent :
+ if hasattr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(self.jdc.sdsDict[nomVal])
+ else : p.listeDesReferencesCrees=[self.jdc.sdsDict[nomVal],]
+ p=p.parent
+ self.jdc.sdsDict[nomVal].ajouteUnPere(self)
+ return (1,self.jdc.sdsDict[nomVal], 'reference ajoutee')
+ else : return (0, None, 'concept d un autre type existe deja')
+ else : return (0, None, 'concept d un autre type existe deja')
if self.convProto:
objVal = self.convProto.convert(nomVal)
objVal.initialiseNom(nomVal)
+ objVal.ajouteUnPere(self)
return (1, objVal, 'reference creee')
def rattacheUserASSD(self, objASSD):
- if objASSD.parent== None : objASSD.initialiseParent(self)
+ if objASSD.parent== None : objASSD.initialiseParent(self)
p=self.parent
while p in self.parent :
- if hasattr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(objASSD)
- else : p.listeDesReferencesCrees=(objASSD,)
- p=p.parent
+ if hasattr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(objASSD)
+ else : p.listeDesReferencesCrees=[objASSD,]
+ p=p.parent
+
-
def getValeur(self):
"""
Retourne la "valeur" d'un mot-clé simple.
if isinstance(co, CO) and co.isTypCO()]
def supprime(self):
- if hasattr(self, 'val') and hasattr(self.val, 'supprime') :self.val.supprime()
+ if not type(self.valeur) in (list, tuple): lesValeurs=(self.valeur,)
+ else : lesValeurs=self.valeur
+ if self.valeur == None or self.valeur == [] : lesValeurs=[]
+ for val in lesValeurs:
+ if self.definition.creeDesObjets : val.deleteReference(self)
+ else :
+ if (hasattr (val, 'enleveUtilisePar')) : val.enleveUtilisePar(self)
N_OBJECT.OBJECT.supprime(self)
+
+ def getUserAssdPossible(self):
+ debug=False
+ if self.nom == 'ApplyOn' : debug = True
+ if debug : print ('____________', self, self.nom)
+ classeAChercher = self.definition.type
+ if debug : print ('____________', classeAChercher)
+ l=[]
+ dicoValeurs={}
+ d={}
+ if debug : print ('____________', self.definition.filtreVariables)
+ if self.definition.filtreVariables != None :
+ for (nomMC, Xpath) in self.definition.filtreVariables :
+ if debug : print (nomMC, Xpath)
+ if Xpath == None : dicoValeurs[nomMC] = getattr(self,nomMC)
+ else :
+ try: #if 1 :
+ pereMC=eval(Xpath)
+ if debug : print ('pereMC :',pereMC)
+ if pereMC :
+ exp=Xpath+'.getChild("'+nomMC+'")'
+ leMotCle=eval(exp)
+ else : leMotCle=None
+ if debug : print ('leMotCle', leMotCle)
+ if leMotCle :
+ if leMotCle.val : dicoValeurs[nomMC]=leMotCle.val
+ elif leMotCle.definition.max != 1 : dicoValeurs[nomMC] = []
+ else : dicoValeurs[nomMC] = None
+ if debug : print ('dicoValeurs', dicoValeurs)
+ else :
+ #PN PN est-ce sur ? sinon quoi None ou []
+ # je pense que les 2 valeurs doivent être renseignees si le filtre depend de 2 valeurs
+ return l
+ except:
+ return l
+
+
+ for k,v in self.parent.jdc.sdsDict.items():
+ if (isinstance(v, classeAChercher)) :
+ if debug : print ('je traite', v)
+ if self.definition.filtreExpression :
+ if debug : print ('expression', self.definition.filtreExpression)
+ if debug :
+ print (v.executeExpression(self.definition.filtreExpression ,dicoValeurs) )
+ try :
+ if v.executeExpression(self.definition.filtreExpression ,dicoValeurs) : l.append(v)
+ except :
+ print ('il faut comprendre except pour', self.nom)
+ #print (self.nom)
+ #print (self.parent.nom)
+ #print (k,v)
+ else : l.append(v)
+ return l
"""
from __future__ import absolute_import
try :
- from builtins import object
+ from builtins import object
except :
- pass
+ pass
from .N_CR import CR
return 0
def longueurDsArbre(self):
- return 1
+ if self.nom == "Consigne" : return 0
+ if self.nom == "blocConsigne" : return 0
+ return 1
return self.cr
+def newGetattr(self,name):
+ try :
+ fils=self.getChildOrChildInBloc(name,restreint='non')
+ if fils :
+ if fils.nature == 'MCSIMP' : return fils.valeur
+ if fils.nature == 'MCList' :
+ if fils[0].definition.max == 1 : return fils[0]
+ return fils
+ except :
+ raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
+ raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
+
+def newGetattrForEtape(self,name):
+ try :
+ lesFils=self.getEtapesByName(name)
+ if lesFils != [] : return lesFils
+ except :
+ raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
+ raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
+
+def activeSurcharge():
+ from .N_MCCOMPO import MCCOMPO
+ MCCOMPO.__getattr__ = newGetattr
+ from .N_JDC import JDC
+ JDC.__getattr__ = newGetattrForEtape
+
self.affecter_parente()
self.checkDefinition(self.nom)
self.txtNomComplet=""
+ self.dejaPrepareDump=False
- def __call__(self, reuse=None, **args):
+ def __call__(self, reuse=None, nomXML=None,**args):
"""
Construit l'objet ETAPE a partir de sa definition (self),
puis demande la construction de ses sous-objets et du concept produit.
"""
- nomsd = self.nommage.getNomConceptResultat(self.nom)
+ if nomXML == None : nomsd = self.nommage.getNomConceptResultat(self.nom)
+ else : nomsd = nomXML
etape = self.class_instance(oper=self, reuse=reuse, args=args)
etape.MCBuild()
+ while etape.doitEtreRecalculee == True :
+ etape.doitEtreRecalculee = False
+ etape.deepUpdateConditionBlocApresCreation()
+ etape.reConstruitResteVal()
+ etape.state='modified'
+ #print ('on recalcule la validite depuis N_OPER')
+ # etape.isValid(cr='oui')
etape.metAJourNomASSD(nomsd)
return etape.buildSd(nomsd)
from __future__ import absolute_import
try :
- from builtins import object
+ from builtins import object
except :
- pass
+ pass
from .N_utils import importObject
self.UIinfo = UIinfo
self.affecter_parente()
self.checkDefinition(self.nom)
+ self.dejaPrepareDump=False
+ self.txtNomComplet=''
def __call__(self, **args):
"""
"""
etape = self.class_instance(oper=self, args=args)
etape.MCBuild()
+ while etape.doitEtreRecalculee == True :
+ etape.doitEtreRecalculee = False
+ etape.deepUpdateConditionBlocApresCreation()
+ etape.reConstruitResteVal()
return etape.buildSd()
def make_objet(self, mc_list='oui'):
"""
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except :
- pass
+ pass
import types
# -----------------------------------------------------------------------------
class CONCEPT_SENSIBLE(REGLE):
- """Règle permettant de renseigner au niveau du catalogue comment sera
- rempli le concept (valeur nominale ou dérivée(s) ou les deux...).
- """
- def __init__(self, mode, mocle='SENSIBILITE'):
- """Constructeur.
-
- mode : manière dont la commande rempli le concept
- - 'ENSEMBLE' : concept nominal ET dérivées en une seule passe
- - 'SEPARE' : concept nominal OU dérivée (une ou plusieurs)
-
- mocle : mot-clé contenant les paramètres sensibles.
- """
- REGLE.__init__(self)
- self.mocle = mocle
- self._modes = { 'ENSEMBLE' : 0, 'SEPARE' : 1 }
- self.mode = self._modes.get(mode, self._modes['ENSEMBLE'])
-
- def getText(self):
- """Pour EFICAS
- """
- return ''
-
- def verif(self, args):
- """Retourne texte + 1 si ok, 0 si nook.
- On stocke dans sd.sensi l'étape courante, c'est-à-dire celle qui
- renseigne le concept si cela n'a pas déjà été fait (car verif est
- appelé à chaque validation).
- """
- obj = args["self"]
- etape = obj.etape
- id_etape = '%s_%s' % (etape.id, id(etape))
- if etape.sd == None:
- return '',1
- if not hasattr(etape.sd,"sensi"):
- etape.sd.sensi = {}
- # si ENSEMBLE, la sd nominale est forcément produite
- if self.mode == self._modes['ENSEMBLE'] and not 'nominal' in etape.sd.sensi :
- etape.sd.sensi['nominal'] = id_etape
- # liste des paramètres sensibles
- valeur = obj[self.mocle]
- if valeur == None:
- # pas de sensibilité, la sd nominale est produite
- if not 'nominal' in etape.sd.sensi:
+ """Règle permettant de renseigner au niveau du catalogue comment sera
+ rempli le concept (valeur nominale ou dérivée(s) ou les deux...).
+ """
+ def __init__(self, mode, mocle='SENSIBILITE'):
+ """Constructeur.
+
+ mode : manière dont la commande rempli le concept
+ - 'ENSEMBLE' : concept nominal ET dérivées en une seule passe
+ - 'SEPARE' : concept nominal OU dérivée (une ou plusieurs)
+
+ mocle : mot-clé contenant les paramètres sensibles.
+ """
+ REGLE.__init__(self)
+ self.mocle = mocle
+ self._modes = { 'ENSEMBLE' : 0, 'SEPARE' : 1 }
+ self.mode = self._modes.get(mode, self._modes['ENSEMBLE'])
+
+ def getText(self):
+ """Pour EFICAS
+ """
+ return ''
+
+ def verif(self, args):
+ """Retourne texte + 1 si ok, 0 si nook.
+ On stocke dans sd.sensi l'étape courante, c'est-à-dire celle qui
+ renseigne le concept si cela n'a pas déjà été fait (car verif est
+ appelé à chaque validation).
+ """
+ obj = args["self"]
+ etape = obj.etape
+ id_etape = '%s_%s' % (etape.id, id(etape))
+ if etape.sd == None:
+ return '',1
+ if not hasattr(etape.sd,"sensi"):
+ etape.sd.sensi = {}
+ # si ENSEMBLE, la sd nominale est forcément produite
+ if self.mode == self._modes['ENSEMBLE'] and not 'nominal' in etape.sd.sensi :
etape.sd.sensi['nominal'] = id_etape
- return '', 1
- if not type(valeur) in (list, tuple):
- valeur = [valeur,]
- for v in valeur:
- if not v.getName() in etape.sd.sensi:
- etape.sd.sensi[v.getName()] = id_etape
- return '', 1
+ # liste des paramètres sensibles
+ valeur = obj[self.mocle]
+ if valeur == None:
+ # pas de sensibilité, la sd nominale est produite
+ if not 'nominal' in etape.sd.sensi:
+ etape.sd.sensi['nominal'] = id_etape
+ return '', 1
+ if not type(valeur) in (list, tuple):
+ valeur = [valeur,]
+ for v in valeur:
+ if not v.getName() in etape.sd.sensi:
+ etape.sd.sensi[v.getName()] = id_etape
+ return '', 1
# -----------------------------------------------------------------------------
class REUSE_SENSIBLE(REGLE):
- """Limite le caractère réentrant de la commande.
- On autorisera reuse seulement si le concept (au sens fortran) n'a pas déjà
- été calculé (d'après sd.sensi). Ce sera interdit dans les cas suivants :
- - sd nominale calculée et SENSIBILITE absent
- - PS1 dans SENSIBILITE et sd dérivée par rapport à PS1 calculée
- """
- def __init__(self, mocle='SENSIBILITE'):
- """Constructeur.
- mocle : mot-clé SENSIBILITE.
- """
- REGLE.__init__(self)
- self.mocle = mocle
-
- def getText(self):
- """Pour EFICAS
- """
- return ''
-
- def verif(self,args):
- """Retourne texte + 1 si ok, 0 si nook = reuse interdit.
- Comme CONCEPT_SENSIBLE est appelé avant (et à chaque validation),
- on regarde si sd.sensi[ps] a été renseigné par une étape précédente.
- """
- obj = args["self"]
- etape = obj.etape
- id_etape = '%s_%s' % (etape.id, id(etape))
- sd = etape.sd
- # si la commande n'est pas réentrante, rien à faire
- if etape.reuse is not None:
- valeur = obj[self.mocle]
- if valeur is None:
- if not hasattr(sd, 'sensi') or sd.sensi.get('nominal', id_etape) != id_etape:
- # pas de sensibilite et concept nominal déjà calculé : reuse interdit
- text = "Commande non réentrante en l'absence de sensibilité."
- return text, 0
- else:
- if not type(valeur) in (list, tuple):
- valeur = [valeur,]
- for ps in valeur:
- if hasattr(sd, 'sensi') and sd.sensi.get(ps.nom, id_etape) != id_etape:
- # concept dérivé par rapport à ps déjà calculé : reuse interdit
- text = "Commande non réentrante : dérivée par rapport à %s déjà calculée" % ps.nom
- return text, 0
- return '', 1
+ """Limite le caractère réentrant de la commande.
+ On autorisera reuse seulement si le concept (au sens fortran) n'a pas déjà
+ été calculé (d'après sd.sensi). Ce sera interdit dans les cas suivants :
+ - sd nominale calculée et SENSIBILITE absent
+ - PS1 dans SENSIBILITE et sd dérivée par rapport à PS1 calculée
+ """
+ def __init__(self, mocle='SENSIBILITE'):
+ """Constructeur.
+ mocle : mot-clé SENSIBILITE.
+ """
+ REGLE.__init__(self)
+ self.mocle = mocle
+
+ def getText(self):
+ """Pour EFICAS
+ """
+ return ''
+
+ def verif(self,args):
+ """Retourne texte + 1 si ok, 0 si nook = reuse interdit.
+ Comme CONCEPT_SENSIBLE est appelé avant (et à chaque validation),
+ on regarde si sd.sensi[ps] a été renseigné par une étape précédente.
+ """
+ obj = args["self"]
+ etape = obj.etape
+ id_etape = '%s_%s' % (etape.id, id(etape))
+ sd = etape.sd
+ # si la commande n'est pas réentrante, rien à faire
+ if etape.reuse is not None:
+ valeur = obj[self.mocle]
+ if valeur is None:
+ if not hasattr(sd, 'sensi') or sd.sensi.get('nominal', id_etape) != id_etape:
+ # pas de sensibilite et concept nominal déjà calculé : reuse interdit
+ text = "Commande non réentrante en l'absence de sensibilité."
+ return text, 0
+ else:
+ if not type(valeur) in (list, tuple):
+ valeur = [valeur,]
+ for ps in valeur:
+ if hasattr(sd, 'sensi') and sd.sensi.get(ps.nom, id_etape) != id_etape:
+ # concept dérivé par rapport à ps déjà calculé : reuse interdit
+ text = "Commande non réentrante : dérivée par rapport à %s déjà calculée" % ps.nom
+ return text, 0
+ return '', 1
# -----------------------------------------------------------------------------
class DERIVABLE(REGLE):
- """Déclare que le concept fourni derrière un mot-clé est dérivable.
- Sa présence ne suffit pas à le valider, il faut encore que son attribut
- '.sensi' soit cohérent avec le contenu du mot-clé SENSIBILITE (ou l'absence
- de celui-ci).
- """
- def __init__(self, mocle):
- """Constructeur.
- mocle : mot-clé dérivable.
- """
- REGLE.__init__(self)
- self.mocle = mocle
-
- def getText(self):
- """Pour EFICAS
- """
- return ''
-
- def verif(self,args):
- """
- """
- obj = args["self"]
- try:
- concept = obj[self.mocle]
- except IndexError:
- return '', 1
- if not type(concept) in (list, tuple):
- concept = [concept,]
- l_ps = obj["SENSIBILITE"]
- for co in concept:
- if co is None:
- text = "Concept non défini (None) sous le mot-clé %s" % self.mocle
- return text, 0
- if not l_ps:
- # pas de sensibilité
- if hasattr(co,"sensi") and not co.sensi.get('nominal'):
- text = "%s ne contient que des valeurs dérivées, utilisez le mot cle SENSIBILITE" %\
- co.nom
- return text, 0
- else:
- # sensibilité spécifiée
- if not type(l_ps) in (list, tuple):
- l_ps = [l_ps,]
- for ps in l_ps:
- if not hasattr(co,"sensi") or not co.sensi.get(ps.nom):
- text = "La dérivée de %s par rapport à %s n'est pas disponible." %\
- (co.nom, ps.nom)
- return text, 0
- return '', 1
-
+ """Déclare que le concept fourni derrière un mot-clé est dérivable.
+ Sa présence ne suffit pas à le valider, il faut encore que son attribut
+ '.sensi' soit cohérent avec le contenu du mot-clé SENSIBILITE (ou l'absence
+ de celui-ci).
+ """
+ def __init__(self, mocle):
+ """Constructeur.
+ mocle : mot-clé dérivable.
+ """
+ REGLE.__init__(self)
+ self.mocle = mocle
+
+ def getText(self):
+ """Pour EFICAS
+ """
+ return ''
+
+ def verif(self,args):
+ """
+ """
+ obj = args["self"]
+ try:
+ concept = obj[self.mocle]
+ except IndexError:
+ return '', 1
+ if not type(concept) in (list, tuple):
+ concept = [concept,]
+ l_ps = obj["SENSIBILITE"]
+ for co in concept:
+ if co is None:
+ text = "Concept non défini (None) sous le mot-clé %s" % self.mocle
+ return text, 0
+ if not l_ps:
+ # pas de sensibilité
+ if hasattr(co,"sensi") and not co.sensi.get('nominal'):
+ text = "%s ne contient que des valeurs dérivées, utilisez le mot cle SENSIBILITE" %\
+ co.nom
+ return text, 0
+ else:
+ # sensibilité spécifiée
+ if not type(l_ps) in (list, tuple):
+ l_ps = [l_ps,]
+ for ps in l_ps:
+ if not hasattr(co,"sensi") or not co.sensi.get(ps.nom):
+ text = "La dérivée de %s par rapport à %s n'est pas disponible." %\
+ (co.nom, ps.nom)
+ return text, 0
+ return '', 1
label = 'SIMP'
def __init__(self, typ,ang="", fr="", statut='f', into=None, intoSug = None,siValide = None, defaut=None,
- min=1, max=1, homo=1, position='local',
+ min=1, max=1, homo=1, position='local',filtre=None,
val_min=float('-inf'), val_max=float('inf'), docu="", validators=None, nomXML=None,
- sug=None,fenetreIhm=None, attribut=False, sortie='n', intoXML=None):
+ sug=None,fenetreIhm=None, attribut=False, sortie='n', intoXML=None, metAJour=None,
+ avecBlancs=False, unite=None):
"""
Un mot-clé simple est caractérisé par les attributs suivants :
- type : cet attribut est obligatoire et indique le type de valeur attendue
else:
self.type = (typ,)
for t in (self.type) :
- try :
- if issubclass(t,Accas.UserASSD) :
- creeDesObjetsDeType = t
- self.utiliseUneReference = True
+ try :
+ if issubclass(t,Accas.UserASSDMultiple) :
+ creeDesObjetsDeType = t
+ self.utiliseUneReference = True
+ elif issubclass(t,Accas.UserASSD) :
+ creeDesObjetsDeType = t
+ self.utiliseUneReference = True
except : pass
if t == 'createObject' : self.creeDesObjets=True
- if self.utiliseUneReference :
- if self.creeDesObjets :
- self.utiliseUneReference = False
- self.creeDesObjetsDeType = creeDesObjetsDeType
- else : self.utiliseDesObjetsDeType = creeDesObjetsDeType
+ if self.utiliseUneReference :
+ if self.creeDesObjets :
+ self.utiliseUneReference = False
+ self.creeDesObjetsDeType = creeDesObjetsDeType
+ else : self.utiliseDesObjetsDeType = creeDesObjetsDeType
self.fr = fr
self.statut = statut
self.into = into
self.nomXML = nomXML
self.intoXML = intoXML
self.sortie = sortie
+ self.filtre = filtre
+ self.avecBlancs = avecBlancs
+ self.unite = unite
+ if not(self.avecBlancs) and self.max > 1 and 'TXM' in self.type and self.into != None :
+ for val in self.into :
+ if val.find(' ') > -1:
+ self.avecBlancs = True
+ break
+ if not(self.avecBlancs) and self.max > 1 and 'TXM' in self.type and self.intoXML != None :
+ for val in self.intoXML :
+ if val.find(' ') > -1:
+ self.avecBlancs = True
+ break
+ if self.avecBlancs and not ('TXM' in self.type) :
+ print ('definition incoherente avecBlanc et non texte pour ', self)
+ exit()
+ if self.filtre :
+ self.filtreExpression = self.filtre[0]
+ self.filtreVariables = self.filtre[1]
+ else :
+ self.filtreExpression = []
+ self.filtreVariables = []
+ self.metAJour=metAJour
def verifCata(self):
"""
self.checkInto()
self.checkPosition()
self.checkValidators()
-
+
def __call__(self, val, nom, parent=None, objPyxbDeConstruction = None):
"""
de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
"""
return self.class_instance(nom=nom, definition=self, val=val, parent=parent, objPyxbDeConstruction=objPyxbDeConstruction)
-
-
--- /dev/null
+import types
+import Accas
+import inspect
+class N_Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ try:
+ if isinstance(valeur, basestring) : return None
+ except NameError:
+ if isinstance(valeur, str): return None
+ if len(valeur) != self.ntuple: return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+class N_Matrice:
+ def __init__(self, nbLigs=None, nbCols=None,
+ methodeCalculTaille=None, formatSortie="ligne",
+ valSup=None, valMin=None, structure=None, typElt='R',
+ typEltInto=None, listeHeaders=None, coloree=False):
+ self.nbLigs = nbLigs
+ self.nbCols = nbCols
+ self.methodeCalculTaille = methodeCalculTaille
+ self.formatSortie = formatSortie
+ self.valSup = valSup
+ self.valMin = valMin
+ self.structure = structure
+ self.typElt = typElt
+ self.listeHeaders = listeHeaders
+ self.typEltInto = typEltInto
+ self.jdc=None
+ self.coloree=coloree
+ if self.coloree : self.activeCouleur()
+
+ def __convert__(self, valeur):
+ # Attention ne verifie pas grand chose
+ if not isinstance(valeur, types.ListType):
+ return None
+ return valeur
+
+ def verifItem(self,texte,mc):
+ val=''
+ if self.typElt == 'R' :
+ try : val=float(str(texte)); ok=True
+ except : return (False,"Entrer un float SVP")
+ if self.typElt == 'I' :
+ try : val=int(str(texte)); ok=True
+ except : return (False,"Entrer un float SVP")
+ if self.typElt in ('R', 'I') and self.valSup != None :
+ if val > self.valSup :
+ return (False, "Entrer un nombre inferieur a " + repr(self.valSup))
+ if self.typElt in ('R', 'I') and self.valMin != None :
+ if val < self.valMin :
+ return (False, "Entrer un nombre superieur a " + repr(self.valMin))
+ if val=='' : val = texte
+ if self.typEltInto != None and val not in self.typEltInto :
+ return ( "Entrer une valeur contenue dans " + str(self.typEltInto))
+ try :
+ if issubclass (self.typElt, Accas.ASSD):
+ if not self.jdc : self.jdc = CONTEXT.getCurrentJdC()
+ if not(val in self.jdc.sdsDict.keys()) : return (False, 'Concept inexistant')
+ if not (isinstance(self.jdc.sdsDict[val],self.typElt)) : return (False, 'Concept d un autre type')
+ a=self.jdc.getSdAvantDuBonType(mc.etape,(self.typElt,))
+ if texte not in self.jdc.getSdAvantDuBonType(mc.etape,(self.typElt,)) :
+ return (False, 'Le concept doit etre defini avant')
+ except :
+ pass
+ return ( True, "")
+
+ def convertItem(self,texte):
+ if self.typElt == 'R' : val=float(str(texte))
+ if self.typElt == 'I' : val=int(str(texte))
+ try :
+ if issubclass (self.typElt, Accas.ASSD): return self.jdc.sdsDict[texte]
+ except :
+ pass
+
+
+ def info(self):
+ return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+ __repr__ = info
+ __str__ = info
+
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import object
+ from builtins import object
except : pass
import traceback
import sys
from .N_ASSD import ASSD
+from Ihm import CONNECTOR
class UserASSD(ASSD):
"""
- Classe de base pour definir des types de structures de donnees definie par
+ Classe de base pour definir des types de structures de donnees definie par
l utilisateur
equivalent d un concept ASSD pour un SIMP ou un FACT
Attention : le parent est a None au debut et non le MC createur que l on ne connait pas
"""
def __init__(self,nom='sansNom'):
- self.nom = nom
- self.jdc = CONTEXT.getCurrentJdC()
- self.parent = None
- self.initialiseValeur()
- self.utilisePar = set()
- if self.nom != 'sansNom' : self.id = self.jdc.regSD(self)
- else : self.id = None
- self.ptr_sdj = None
+ #print ('dans init de UserASSD pour ', nom, type(nom))
+ self.nom = nom
+ self.jdc = CONTEXT.getCurrentJdC()
+ self.parent = None
+ self.initialiseValeur()
+ self.utilisePar = set()
+ if self.nom != 'sansNom' : self.id = self.jdc.regSD(self)
+ if self.nom != 'sansNom' : self.initialiseNom(nom)
+ else : self.id = None
+ self.ptr_sdj = None
def initialiseParent(self, parent):
- #print ('je passe initialiseParent pour : ', self, parent)
- self.parent= parent
+ # attention parent.parent peut être un bloc
+ #print ('je passe initialiseParent pour : ', self, parent.nom)
+ self.parent = parent
+ self.etape = self.parent.getEtape()
+ self.etape.userASSDCrees.append(self)
+ if self.parent.parent != self.etape :
+ if self.parent.parent.estIdentifiePar != None :
+ print ('il y a un souci dans l initialisation de l identifiant pour', self.parent.parent.nom)
+ print (self.parent.nom)
+ print (self.nom)
+ self.parent.parent.estIdentifiePar = self
def initialiseNom(self,nom):
- #print ('je passe initialiseNom pour : ', self, nom)
- for (i,j) in self.jdc.sdsDict.items() :
- if j == self :
- del(self.jdc.sdsDict[i])
- self.jdc.sdsDict[nom]=self
- self.nom=nom
- if self.nom != 'sansNom' and self.id ==None : self.id = self.jdc.regSD(self)
+ #print ('je passe initialiseNom pour : ', self, nom, type(nom))
+ for (i,j) in list(self.jdc.sdsDict.items()) :
+ if j == self :
+ del(self.jdc.sdsDict[i])
+ self.jdc.sdsDict[nom]=self
+ self.nom=nom
+ if self.nom != 'sansNom' and self.id ==None : self.id = self.jdc.regSD(self)
def initialiseValeur(self,valeur=None):
- self.valeur=valeur
+ self.valeur=valeur
def ajoutUtilisePar(self,mc):
- self.utilisePar.add(mc)
+ #print ('je passe ajoutUtilisePar pour : ', self.nom)
+ self.utilisePar.add(mc)
def enleveUtilisePar(self,mc):
- try : self.utilisePar.remove(mc)
- except : pass
+ try : self.utilisePar.remove(mc)
+ except : pass
def renomme(self,nouveauNom):
- self.jdc.delConcept(self.nom)
- self.jdc.sdsDict[nouveauNom] = self
- self.setName(nouveauNom)
- #print ('je suis dans renomme',nouveauNom, self.nom)
- #print (self.utilisePar)
- for mc in (self.utilisePar):
- mc.demandeRedessine()
-
-
- def deleteReference(self):
- print ('dans deleteReference')
- for MC in self.utilisePar :
- # le delete est appele en cascade par toute la hierachie
- # du mcsimp (au cas ou on detruise le fact ou le proc)
- # du coup pas beau
- try :
- if type(MC.valeur) in (list,tuple):
- MC.valeur=list(MC.valeur)
- while MC in MC.valeur: MC.valeur.remove(self)
- if MC.valeur == [] : MC.Valeur = None
- else : MC.valeur=None
- MC.state='changed'
- MC.isValid()
- #MC.demandeRedessine()
- self.jdc.delConcept(self.nom)
- except :
- pass
+ print ('je passe dans renomme')
+ self.jdc.delConcept(self.nom)
+ self.jdc.sdsDict[nouveauNom] = self
+ self.setName(nouveauNom)
+ #print ('je suis dans renomme',nouveauNom, self.nom)
+ #print (self.utilisePar)
+ for mc in (self.utilisePar):
+ mc.demandeRedessine()
+
+ def transfere (self,obj):
+ # uniquement utise pour les lectures XML
+ self.utilisePar=obj.utilisePar
+ self.id=obj.id
+ for mc in self.utilisePar: mc.valeur=self
+
+ def deleteReference(self, mcCreateur=None):
+ print ('je passe dans supprime de N_UserASSDMultiple')
+ # meme signature que UserASSDMultiple
+ for MC in self.utilisePar :
+ # le delete est appele en cascade par toute la hierachie
+ # du mcsimp (au cas ou on detruise le fact ou le proc)
+ # du coup pas beau
+ try :
+ if type(MC.valeur) in (list,tuple):
+ MC.valeur=list(MC.valeur)
+ while self in MC.valeur: MC.valeur.remove(self)
+ if MC.valeur == [] : MC.Valeur = None
+ else : MC.valeur=None
+ MC.state='changed'
+ MC.isValid()
+ CONNECTOR.Emit(MC,"valid")
+ except : pass
+ # on peut avoir des listes qui contiennent plusieurs fois la meme valeur
+ self.jdc.delConcept(self.nom)
+
+ def executeExpression(self, condition, dico) :
+ #if self.nom == 'shape1' : print ('je suis dans executeExpression ', self.nom, ' ', condition)
+ dict = locals()
+ dict.update(dico)
+ #if self.nom == 'shape1' or self.nom == 'G1' : print (dict)
+ #if self.nom == 'shape1' :
+ # print (self.getParentsWithId().getListeUserASSD("systemGeometryId"))
+ # print (self.getParentsWithId().getListeUserASSD("SystemGeometryId"))
+ # test = eval(condition, globals(), dict)
+ # print ('-------------------------------------------------------------------------')
+ try :
+ test = eval(condition, globals(), dict)
+ except :
+ print ('executeExpression ', self.nom, ' ', condition , 'exception')
+ test = 0
+ return test
def getEficasAttribut(self, attribut):
- #print ('je suis dans getEficasAttr', attribut)
- if self.parent == None : return None
- #print ('apres if')
- # parent est le SIMP donc c est bien parent.parent
- try :
- valeur = self.parent.parent.getMocle(attribut)
- except :
- valeur = None
- #print (valeur)
- return valeur
-
-
- def supprime(self):
- self.deleteReference()
- ASSD.supprime(self)
-
+ #print ('je suis dans getEficasAttr', attribut)
+ if self.parent == None : return None
+ #print ('apres if')
+ # parent est le SIMP donc c est bien parent.parent
+ try :
+ valeur = self.parent.parent.getMocle(attribut)
+ except :
+ valeur = None
+ #print (valeur)
+ return valeur
+
+
+ def supprime(self, mcCreateur=None):
+ # mcCreateur utile pour N_UserASSDMultiple
+ print ('je passe dans supprime de N_UserASSDMultiple')
+ self.deleteReference(mcCreateur)
+
+ def __repr__(self):
+ return "concept " + self.getName() + " type " + self.__class__.__name__
+
+ def __str__(self):
+ return self.getName() or "<None>"
+
--- /dev/null
+# coding=utf-8
+# Copyright (C) 2007-2021 EDF R&D
+#
+# 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.
+#
+# 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
+
+"""
+
+"""
+
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import object
+except : pass
+import traceback
+import sys
+
+from .N_UserASSD import UserASSD
+from .N_ASSD import ASSD
+
+from collections import UserList
+class UserASSDMultiple(UserASSD):
+ """
+ Classe de base pour definir des types de structures de donnees definie par
+ l utilisateur
+ equivalent d un concept ASSD pour un SIMP ou un FACT
+ mais pouvant referencer 2 objets par exemple les groupes de mailles qui peuvent porter
+ le meme nom dans 2 maillages differents
+ """
+ def __init__(self,nom='sansNom'):
+ #print ('dans init de UserASSDMultiple ',nom)
+ UserASSD.__init__(self,nom)
+ self.peres=[]
+
+ def ajouteUnPere(self,pere):
+ #print ('dans ajouteUnPere', self.peres, self.nom, pere)
+ if pere not in self.peres : self.peres.append(pere)
+ etape = pere.getEtape()
+ if self not in etape.userASSDCrees : etape.userASSDCrees.append(self)
+
+ def renomme(self,nouveauNom):
+ print ('je passe dans renomme')
+ #import traceback
+ #traceback.print_stack()
+ self.jdc.delConcept(self.nom)
+ self.jdc.sdsDict[nouveauNom] = self
+ self.setName(nouveauNom)
+ for mc in (self.utilisePar):
+ mc.demandeRedessine()
+
+
+ def initialiseParent(self, pere):
+ # surcharge N_UserASSD parent ici n a pas de sens
+ pass
+
+ def deleteReference(self,mcCreateur):
+ print ('je passe dans deleteReference', mcCreateur.nom)
+ if not(mcCreateur in self.peres) : return
+ self.peres.pop(self.peres.index(mcCreateur))
+ if len(self.peres)==0 :
+ UserASSD.deleteReference(self)
+
+
+ def getParentsWithId(self):
+ #print ('je suis dans getParentsWithId ')
+ listeRetour= listUserASSD()
+ for pere in self.peres :
+ pereWithId = pere.parent
+ monEtape = pere.getEtape()
+ while (pereWithId) :
+ if pereWithId==monEtape :
+ listeRetour.append(pereWithId)
+ break
+ if pereWithId.estIdentifiePar != None :
+ listeRetour.append(pereWithId)
+ break
+ pereWithId=pereWithId.parent
+ return listeRetour
+
+ def getEtapes(self):
+ listeRetour= listUserASSD()
+ for pere in self.peres :
+ if pere.etape not in listeRetour : listeRetour.append(pere.etape)
+ return listeRetour
+
+
+class listUserASSD(UserList):
+
+ def getListeMotsCles(self,nomMc):
+ if self.data == None : return []
+ listeRetour=[]
+ for concept in self.data:
+ listeRetour.append(concept.getChild(nomMc).val)
+ return listeRetour
+
+ def getListeNomsUserASSD(self,nomMc):
+ if self.data == None : return []
+ listeRetour=[]
+ for concept in self.data:
+ listeRetour.append(concept.getChild(nomMc).val.nom)
+ return listeRetour
+
+ def getListeUserASSD(self,nomMc):
+ if self.data == None : return []
+ listeRetour=[]
+ for concept in self.data:
+ if concept.getChild(nomMc) :
+ if concept.getChild(nomMc).val :
+ listeRetour.append(concept.getChild(nomMc).val)
+ return listeRetour
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
-
+
import types
import traceback
import re
if self.isComplexe(obj):
return obj
elif type_permis == 'TXM':
- if isStr(obj):
- return obj
+ if isStr(obj):
+ return obj
elif type_permis == 'shell':
if isStr(obj):
return obj
elif type_permis == 'Fichier':
import os
try :
- if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj):
- return obj
- else:
- raise ValError( "%s n'est pas un fichier valide" % repr(obj))
- except :
+ if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj):
+ return obj
+ else:
+ raise ValError( "%s n'est pas un fichier valide" % repr(obj))
+ except :
raise ValError( "%s n'est pas un fichier valide" % repr(obj))
elif type_permis == 'FichierNoAbs':
elif type_permis == 'Repertoire':
import os
- try :
- if os.path.isdir(obj): return obj
- else: raise ValError( "%s n'est pas un repertoire valide" % repr(obj))
+ try :
+ if os.path.isdir(obj): return obj
+ else: raise ValError( "%s n'est pas un repertoire valide" % repr(obj))
except :
- raise ValError( "%s n'est pas un repertoire valide" % repr(obj))
+ raise ValError( "%s n'est pas un repertoire valide" % repr(obj))
elif type_permis == 'FichierOuRepertoire':
import os
- try :
- if os.path.isdir(obj) or os.path.isfile(obj): return obj
- else: raise ValError( "%s n'est pas un fichier ou un repertoire valide" % repr(obj))
+ try :
+ if os.path.isdir(obj) or os.path.isfile(obj): return obj
+ else: raise ValError( "%s n'est pas un fichier ou un repertoire valide" % repr(obj))
except :
- raise ValError( "%s n'est pas un fichier ou un repertoire valide" % repr(obj))
+ raise ValError( "%s n'est pas un fichier ou un repertoire valide" % repr(obj))
elif type(type_permis) == type or isinstance(type_permis, type):
try:
if self.isObjectFrom(obj, type_permis):
registry = {}
def __init__(self, name, into=None, val_min=float('-inf'), val_max=float('inf')):
-
+
PProtocol.__init__(
self, name, into=into, val_min=val_min, val_max=val_max)
self.val_min = val_min
self.val_max = val_max
def default(self, obj, into, val_min, val_max):
- if type(into) ==types.FunctionType :
- maListeDeValeur=into()
- into=maListeDeValeur
+ if type(into) ==types.FunctionType :
+ maListeDeValeur=into()
+ into=maListeDeValeur
if into:
if obj not in into:
raise ValError(
if type(valeur) == bytes or type(valeur) == str:
return 1
elif isinstance(valeur, type_permis):
- return 1
+ return 1
return 0
def verif(self, valeur):
def __init__(self,MotClef ):
self.MotClef=MotClef
self.MCSimp=None
-
+
def convert(self, lval):
try : valeur=lval[0]
except : return lval
else : longueur=len(parent.getChild(self.MotClef))
pos=parent.getIndexChild(self.MCSimp.nom)+1
- while longueur < valeur :
- parent.inhibeValidator=1
- parent.addEntite(self.MotClef,pos)
- pos=pos+1
- parent.inhibeValidator=0
- longueur=len(parent.getChild(self.MotClef))
-
- if longueur > valeur :
- parent.inhibeValide=1
- parentObj=parent.getChild(self.MotClef)
- obj=parent.getChild(self.MotClef)[-1]
- parentObj.suppEntite(obj)
- longueur=len(parent.getChild(self.MotClef))
- parent.inhibeValide=0
+ while longueur < valeur :
+ parent.inhibeValidator=1
+ parent.addEntite(self.MotClef,pos)
+ pos=pos+1
+ parent.inhibeValidator=0
+ longueur=len(parent.getChild(self.MotClef))
+
+ if longueur > valeur :
+ parent.inhibeValide=1
+ parentObj=parent.getChild(self.MotClef)
+ obj=parent.getChild(self.MotClef)[-1]
+ parentObj.suppEntite(obj)
+ longueur=len(parent.getChild(self.MotClef))
+ parent.inhibeValide=0
return lval
def info(self):
from __future__ import absolute_import
try :
- from past.builtins import cmp
+ from past.builtins import cmp
except :
- pass
+ pass
try:
- from UserDict import UserDict
+ from UserDict import UserDict
except ImportError:
- from collections import UserDict
+ from collections import UserDict
class _F(UserDict):
from __future__ import print_function
from __future__ import division
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import sys
# Modules EFICAS
SEP = '_'
try :
- cur_frame = sys._getframe
+ cur_frame = sys._getframe
except :
- print ('pb avec la version de python pour cur_frame = sys._getframe')
+ print ('pb avec la version de python pour cur_frame = sys._getframe')
def calleeWhere(niveau=4):
"""
# coding=utf-8
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from . import context
try :
- import __builtin__
- __builtin__.CONTEXT = context
-except :
- import builtins
- builtins.CONTEXT = context
+ import __builtin__
+ __builtin__.CONTEXT = context
+except :
+ import builtins
+ builtins.CONTEXT = context
# Classes de base
# coding=utf-8
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except :
- pass
+ pass
import re
import linecache
import sys
# lineno = f_lineno(f) # Ne marche pas toujours
co = f.f_code
if sys.version_info >= (3,0) :
- filename = co.co_filename
- else :
- import six
- filename = six.text_type(co.co_filename, getEncoding())
+ filename = co.co_filename
+ else :
+ import six
+ filename = six.text_type(co.co_filename, getEncoding())
name = co.co_name
# pattern pour identifier le debut de la commande
pattern_oper = re.compile(regex1 % ope)
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import locale
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<cata xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/efficas file:///Z:/home_fayolle/MED_SVN/PASCALE/XSD/Model%20Efficas%20(1.1)%20%20v5.xsd">\r
+<commandes>\r
+<PROC xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" efficas:nom="FAS">\r
+ <efficas:FACT efficas:nom="FAMILY_MESH_NAME_REF" efficas:statut="o" efficas:min_occurs="1" efficas:max_occurs="-1">\r
+ <SIMP efficas:nom="NAME" efficas:statut="o"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ <efficas:FACT efficas:nom="ELEM" efficas:statut="f" efficas:min_occurs="1" efficas:max_occurs="-1">\r
+<!-- <efficas:regles>\r
+ --><!-- Ajouter des contraintes de vérification de la présence ATT et GRO --><!--\r
+ <efficas:PRESENT_PRESENT>ATT GRO</efficas:PRESENT_PRESENT>\r
+ </efficas:regles>-->\r
+ <efficas:SIMP efficas:nom="NUM" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
+ <efficas:SIMP efficas:nom="NAME" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
+ <efficas:FACT efficas:nom="ATT" efficas:statut="f" efficas:max_occurs="1">\r
+ <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="DES" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="IDE" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="VAL" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
+ </efficas:FACT>\r
+ <efficas:FACT efficas:nom="GRO" efficas:statut="f" efficas:max_occurs="1">\r
+ <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="NOM" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ </efficas:FACT>\r
+ </efficas:FACT>\r
+ </efficas:FACT>\r
+</PROC>\r
+</commandes>\r
+</cata>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<cata xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/efficas file:///Z:/home_fayolle/MED_SVN/PASCALE/XSD/Model%20Efficas%20(1.1)%20%20v5.xsd">\r
+<commandes>\r
+<PROC xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" efficas:nom="FAS">\r
+ <efficas:FACT efficas:nom="FAMILY_MESH_NAME_REF" efficas:statut="o" efficas:min_occurs="1" efficas:max_occurs="-1">\r
+ <SIMP efficas:nom="NAME" efficas:statut="o"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ <efficas:FACT efficas:nom="ELEM" efficas:statut="f" efficas:min_occurs="1" efficas:max_occurs="-1">\r
+<!-- <efficas:regles>\r
+ --><!-- Ajouter des contraintes de vérification de la présence ATT et GRO --><!--\r
+ <efficas:PRESENT_PRESENT>ATT GRO</efficas:PRESENT_PRESENT>\r
+ </efficas:regles>-->\r
+ <efficas:SIMP efficas:nom="NUM" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
+ <efficas:SIMP efficas:nom="NAME" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
+ <efficas:FACT efficas:nom="ATT" efficas:statut="f" efficas:max_occurs="1">\r
+ <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="DES" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="IDE" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="VAL" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
+ </efficas:FACT>\r
+ <efficas:FACT efficas:nom="GRO" efficas:statut="f" efficas:max_occurs="1">\r
+ <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="NOM" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ </efficas:FACT>\r
+ </efficas:FACT>\r
+ </efficas:FACT>\r
+</PROC>\r
+</commandes>\r
+</cata>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<cata xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/efficas file:///Z:/home_fayolle/MED_SVN/PASCALE/XSD/Model%20Efficas%20(1.1)%20%20v5.xsd">\r
+<commandes>\r
+<PROC xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" efficas:nom="FAS">\r
+ <efficas:FACT efficas:nom="FAMILY_MESH_NAME_REF" efficas:statut="o" efficas:min_occurs="1" efficas:max_occurs="-1">\r
+ <SIMP efficas:nom="NAME" efficas:statut="o"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ <efficas:FACT efficas:nom="ELEM" efficas:statut="f" efficas:min_occurs="1" efficas:max_occurs="-1">\r
+<!-- <efficas:regles>\r
+ --><!-- Ajouter des contraintes de vérification de la présence ATT et GRO --><!--\r
+ <efficas:PRESENT_PRESENT>ATT GRO</efficas:PRESENT_PRESENT>\r
+ </efficas:regles>-->\r
+ <efficas:SIMP efficas:nom="NUM" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
+ <efficas:SIMP efficas:nom="NAME" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>TXM</typeAttendu></efficas:SIMP>\r
+ <efficas:FACT efficas:nom="ATT" efficas:statut="f" efficas:max_occurs="1">\r
+ <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="DES" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="IDE" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="VAL" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>I</typeAttendu></SIMP>\r
+ </efficas:FACT>\r
+ <efficas:FACT efficas:nom="GRO" efficas:statut="f" efficas:max_occurs="1">\r
+ <SIMP efficas:nom="NBR" efficas:statut="o" efficas:max_occurs="1"><typeAttendu>I</typeAttendu></SIMP>\r
+ <SIMP efficas:nom="NOM" efficas:statut="o" efficas:max_occurs="-1"><typeAttendu>TXM</typeAttendu></SIMP>\r
+ </efficas:FACT>\r
+ </efficas:FACT>\r
+ </efficas:FACT>\r
+</PROC>\r
+</commandes>\r
+</cata>\r
--- /dev/null
+pyxbgen -u model.xsd -m efficas --write-for-customization
--- /dev/null
+Factory
+
+OPER
+
+PROC
+
+_Abstract
+
+_AddElement
+
+_AlternativeConstructor
+
+_AttributeMap
+
+_AttributeWildcard
+
+_Automaton
+
+_CT_ELEMENT_ONLY
+
+_CT_EMPTY
+
+_CT_MIXED
+
+_CT_SIMPLE
+
+_CompatibleValue
+
+_ContentTypeTag
+
+_DynamicCreate
+
+_DynamicCreate_mixin__AlternativeConstructorAttribute
+
+_DynamicCreate_mixin__SupersedingClassAttribute
+
+_ElementBindingDeclForName
+
+_ElementMap
+
+_ExpandedName
+
+_GetValidationConfig
+
+_HasWildcardElement
+
+_IsMixed
+
+_IsSimpleTypeContent
+
+_IsUrType
+
+_Locatable_mixin__location
+
+_Name
+
+_PerformValidation
+
+_PreFactory_vx
+
+_PyXBFactoryKeywords
+
+_RequireXSIType
+
+_ReservedSymbols
+
+_SetAlternativeConstructor
+
+_SetSupersedingClass
+
+_SetValidationConfig
+
+_SupersedingClass
+
+_T_commandes__OPER
+
+_T_commandes__PROC
+
+_TypeBinding_mixin__AttributesFromDOM
+
+_TypeBinding_mixin__WarnedUnassociatedElement
+
+_TypeBinding_mixin__checkNilCtor
+
+_TypeBinding_mixin__constructedWithValue
+
+_TypeBinding_mixin__element
+
+_TypeBinding_mixin__getValidationConfig
+
+_TypeBinding_mixin__namespaceContext
+
+_TypeBinding_mixin__xsiNil
+
+_TypeDefinition
+
+_UseForTag
+
+_XSDLocation
+
+__class__
+
+__delattr__
+
+__dict__
+
+__doc__
+
+__format__
+
+__getattribute__
+
+__hash__
+
+__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasOPER
+
+__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasPROC
+
+__init__
+
+__module__
+
+__new__
+
+__reduce__
+
+__reduce_ex__
+
+__repr__
+
+__setattr__
+
+__sizeof__
+
+__str__
+
+__subclasshook__
+
+__weakref__
+
+_addContent
+
+_appendWildcardElement
+
+_automatonConfiguration
+
+_complexTypeDefinition__NeedWarnOnContent
+
+_complexTypeDefinition__WarnOnContent
+
+_complexTypeDefinition__automatonConfiguration
+
+_complexTypeDefinition__childrenForDOM
+
+_complexTypeDefinition__content
+
+_complexTypeDefinition__setContent
+
+_complexTypeDefinition__wildcardAttributeMap
+
+_complexTypeDefinition__wildcardElements
+
+_constructedWithValue
+
+_description
+
+_diagnosticName
+
+_element
+
+_finalizeContentModel
+
+_isNil
+
+_location
+
+_namespaceContext
+
+_performValidation
+
+_postDOMValidate
+
+_postFactory_vx
+
+_resetAutomaton
+
+_resetContent
+
+_setAttribute
+
+_setAttributesFromKeywordsAndDOM
+
+_setDOMFromAttributes
+
+_setElement
+
+_setIsNil
+
+_setLocation
+
+_setNamespaceContext
+
+_setValidationConfig
+
+_substitutesFor
+
+_symbolSet
+
+_toDOM_csc
+
+_validateAttributes
+
+_validateBinding_vx
+
+_validatedChildren
+
+_validationConfig
+
+_validationConfig_
+
+append
+
+content
+
+extend
+
+orderedContent
+
+reset
+
+toDOM
+
+toxml
+
+validateBinding
+
+value
+
+wildcardAttributeMap
+
+wildcardElements
+
+xsdConstraintsOK
+
+_______________________
+je passe ds CreerAccas
+PlageValeur
+ValeurDef
+doc
+portee
+statut
+o
+typeAttendu
+TXM
+validators
+_______________________
--- /dev/null
+# -*- coding: utf-8 -*-
+from raw.efficas import *
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!-- edited with XMLSpy v2014 rel. 2 (x64) (http://www.altova.com) by BC (ED) -->\r
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" xmlns:altova="http://www.altova.com/xml-schema-extensions" targetNamespace="http://chercheurs.edf.com/logiciels/efficas" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0" vc:minVersion="1.1">\r
+ <xs:element name="doc" type="T_doc"/>\r
+ <xs:element name="cata" type="T_cata"/>\r
+ <xs:element name="regles" type="T_regles"/>\r
+ <xs:element name="typeCree" type="T_classe_utilisateur"/>\r
+ <xs:element name="ValeurDef" type="T_typeAttendu"/>\r
+ <xs:element name="ValeurSugg" type="T_typeAttendu"/>\r
+ <xs:element name="fonction_utilisateur" type="T_fonction_python"/>\r
+ <xs:element name="commandes" type="T_commandes">\r
+ <xs:unique name="Uniq_Command">\r
+ <xs:selector xpath="*"/>\r
+ <xs:field xpath="@efficas:nom"/>\r
+ </xs:unique>\r
+ <xs:key name="Uniq_Name_In_Oper">\r
+ <xs:annotation>\r
+ <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:selector xpath="./OPER/BLOC |./OPER/FACT|./OPER/SIMP"/>\r
+ <xs:field xpath="@efficas:nom"/>\r
+ </xs:key>\r
+ <xs:keyref name="Ref_A_Name_In_Oper" refer="Uniq_Name_In_Oper">\r
+ <xs:selector xpath="./OPER/regles"/>\r
+ <xs:field xpath="EXCLUS"/>\r
+ </xs:keyref>\r
+ <xs:key name="Uniq_Name_In_Proc">\r
+ <xs:annotation>\r
+ <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:selector xpath="./PROC/BLOC | ./PROC/FACT| ./PROC/SIMP"/>\r
+ <xs:field xpath="@efficas:nom"/>\r
+ </xs:key>\r
+ <xs:keyref name="Ref_A_Name_In_Proc" refer="Uniq_Name_In_Proc">\r
+ <xs:selector xpath="./PROC/regles"/>\r
+ <xs:field xpath="EXCLUS"/>\r
+ </xs:keyref>\r
+ </xs:element>\r
+ <xs:element name="validators" type="T_validators"/>\r
+ <xs:element name="PlageValeur" type="T_PlageValeur"/>\r
+ <xs:element name="typeAttendu" type="T_name"/>\r
+ <xs:element name="classeUtilisateurName" type="T_classe_utilisateur_username" abstract="true" substitutionGroup="typeAttendu"/>\r
+ <xs:element name="SIMP" type="T_SIMP"/>\r
+ <xs:element name="portee" type="T_portee" default="None"/>\r
+ <xs:element name="condition" type="T_fonction_python"/>\r
+ <xs:element name="borne_sup" type="T_typeAttendu"/>\r
+ <xs:element name="borne_inf" type="T_typeAttendu"/>\r
+ <!-- <xs:element name="into" type="T_into"/>-->\r
+ <xs:element name="into" type="T_into"/>\r
+ <!-- <xs:element name="into_plus_fonction" type="T_into" abstract="true" substitutionGroup="into"/>-->\r
+ <xs:attribute name="nom" type="AT_nom"/>\r
+ <xs:attribute name="ag" type="AT_ag"/>\r
+ <xs:attribute name="fr" type="xs:string"/>\r
+ <xs:attribute name="ang" type="xs:string"/>\r
+ <xs:attribute name="docu" type="AT_docu"/>\r
+ <xs:attribute name="valeur_sugg" type="AT_valeur_sugg"/>\r
+ <xs:attribute name="statut" type="AT_statut" default="o"/>\r
+ <xs:attribute name="max_occurs" type="AT_max_occurs"/>\r
+ <xs:attribute name="min_occurs" type="AT_min_occurs"/>\r
+ <xs:attribute name="subroutine" type="AT_subroutine" default="None"/>\r
+ <xs:complexType name="T_doc">\r
+ <xs:attribute ref="fr" use="optional"/>\r
+ <xs:attribute ref="ang"/>\r
+ <xs:attribute ref="docu"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="T_cata">\r
+ <xs:sequence>\r
+ <xs:element ref="commandes" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="T_commandes">\r
+ <xs:choice minOccurs="0" maxOccurs="unbounded">\r
+ <xs:element ref="OPER"/>\r
+ <xs:element ref="PROC"/>\r
+ </xs:choice>\r
+ </xs:complexType>\r
+ <xs:complexType name="T_Cardinalite"/>\r
+ <xs:complexType name="T_PlageValeur">\r
+ <xs:choice>\r
+ <xs:sequence>\r
+ <xs:element ref="borne_sup" minOccurs="0"/>\r
+ <xs:element ref="borne_inf" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:element ref="into"/>\r
+ </xs:choice>\r
+ </xs:complexType>\r
+ <xs:complexType name="T_Accas.Common">\r
+ <xs:sequence>\r
+ <xs:element ref="regles" minOccurs="0"/>\r
+ <xs:element ref="doc" minOccurs="0"/>\r
+ <xs:choice maxOccurs="unbounded">\r
+ <xs:element ref="BLOC"/>\r
+ <xs:element ref="FACT"/>\r
+ <xs:element ref="SIMP"/>\r
+ </xs:choice>\r
+ </xs:sequence>\r
+ <xs:attribute ref="nom" use="required"/>\r
+ </xs:complexType>\r
+ <xs:element name="OPER" type="T_OPER"/>\r
+ <xs:complexType name="T_OPER">\r
+ <xs:complexContent>\r
+ <xs:extension base="T_Accas.Common">\r
+ <xs:sequence>\r
+ <xs:element ref="typeCree"/>\r
+ </xs:sequence>\r
+ <xs:attribute ref="subroutine"/>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:element name="PROC" type="T_PROC">\r
+ <xs:unique name="Uniqb_NAme_In_PRoc">\r
+ <xs:selector xpath="BLOC|FACT|SIMP"/>\r
+ <xs:field xpath="@efficas:nom"/>\r
+ </xs:unique>\r
+ </xs:element>\r
+ <xs:complexType name="T_PROC">\r
+ <xs:complexContent>\r
+ <xs:extension base="T_Accas.Common">\r
+ <xs:attribute ref="subroutine"/>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:element name="FACT" type="T_FACT"/>\r
+ <!-- <xs:complexType name="T_FACT">\r
+ <xs:complexContent>\r
+ <xs:restriction base="T_Accas.Common">\r
+ <xs:sequence>\r
+ <xs:element ref="regles" minOccurs="0"/>\r
+ <xs:element ref="doc" minOccurs="0"/>\r
+ <xs:choice maxOccurs="unbounded">\r
+ <xs:element ref="BLOC"/>\r
+ <xs:element ref="FACT"/>\r
+ <xs:element ref="SIMP"/>\r
+ </xs:choice>\r
+ </xs:sequence>\r
+ </xs:restriction>\r
+ </xs:complexContent>\r
+ </xs:complexType>-->\r
+ <xs:complexType name="T_FACT">\r
+ <xs:complexContent>\r
+ <xs:extension base="T_Accas.Common">\r
+ <xs:attribute ref="statut"/>\r
+ <xs:attribute ref="min_occurs" default="1"/>\r
+ <xs:attribute ref="max_occurs" default="1">\r
+ <xs:annotation>\r
+ <xs:documentation>La valuer -1 equivaut à oo</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:assert test=".[exists(@efficas:max_occurs) and exists(@efficas:min_occurs) and @efficas:max_occurs gt @efficas:min_occurs]"/>\r
+ <!--<xs:assert test="if (.[exists(@efficas:max_occurs)] and .[exists(@efficas:min_occurs)] ) then (@efficas:max_occurs gt @efficas:min_occurs) or @efficas:max_occurs = -1 else true" altova:message="Erreur max_occurs > min_occurs "/>-->\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:simpleType name="T_fonction_python">\r
+ <xs:restriction base="xs:string"/>\r
+ </xs:simpleType>\r
+ <xs:element name="BLOC" type="T_BLOC"/>\r
+ <xs:complexType name="T_BLOC">\r
+ <xs:complexContent>\r
+ <xs:extension base="T_Accas.Common">\r
+ <xs:sequence>\r
+ <xs:element ref="condition"/>\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="T_SIMP">\r
+ <xs:sequence>\r
+ <xs:element ref="doc" minOccurs="0"/>\r
+ <xs:element ref="portee" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>La portée pouurait devenir un attribut de SIMP. Une autre solution consisterait a créer un SIMPG pour distinguer les @nom uniques des SIMP a portée globale des autres.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element ref="ValeurDef" minOccurs="0"/>\r
+ <xs:element ref="ValeurSugg" minOccurs="0"/>\r
+ <xs:element ref="PlageValeur" minOccurs="0"/>\r
+ <xs:element ref="typeAttendu"/>\r
+ <xs:element ref="validators" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:attribute ref="nom" use="required"/>\r
+ <xs:attribute ref="statut"/>\r
+ <xs:attribute ref="min_occurs" default="1"/>\r
+ <xs:attribute ref="max_occurs" default="1">\r
+ <xs:annotation>\r
+ <xs:documentation>La valuer -1 equivaut à oo</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="AT_statut">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="f"/>\r
+ <xs:enumeration value="o"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <!--<xs:simpleType name="T_repetable">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="n"/>\r
+ <xs:enumeration value="o"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>-->\r
+ <xs:simpleType name="T_portee">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="None"/>\r
+ <xs:enumeration value="Global"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="AT_max_occurs">\r
+ <xs:restriction base="xs:long">\r
+ <xs:minInclusive value="-1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="AT_min_occurs">\r
+ <xs:restriction base="xs:long">\r
+ <xs:minExclusive value="0"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <!-- Comparable -->\r
+ <!-- <xs:simpleType name="AT_borne_sup">\r
+ <xs:atomic base="xs:double"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="AT_borne_inf">\r
+ <xs:restriction base="xs:double"/>\r
+ </xs:simpleType>\r
+-->\r
+ <xs:simpleType name="AT_ag">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="No comment"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="AT_docu">\r
+ <xs:annotation>\r
+ <xs:documentation>Référence une position dans un fichier maître contenant une liste de références à des pages de documentations</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="AT_valeur_sugg">\r
+ <xs:restriction base="xs:string"/>\r
+ </xs:simpleType>\r
+ <!-- TODO: Exclure mots clés python|efficas -->\r
+ <xs:simpleType name="AT_nom">\r
+ <xs:restriction base="xs:string">\r
+ <xs:pattern value="([A-Z]|[a-z]|_)([A-Z]|[a-z]|_|[0-9])*"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_predicat1">\r
+ <xs:list itemType="AT_nom"/>\r
+ <!-- TODO: Supprimer la liste -->\r
+ </xs:simpleType>\r
+ <xs:complexType name="T_predicat2">\r
+ <xs:sequence>\r
+ <xs:element name="p1" type="T_predicat1" minOccurs="1"/>\r
+ <xs:element name="p2" type="AT_nom" minOccurs="1"/>\r
+ </xs:sequence>\r
+ <!-- TODO: Supprimer la séquence -->\r
+ </xs:complexType>\r
+ <xs:element name="A_CLASSER" type="T_predicat2"/>\r
+ <xs:element name="AU_MOINS_UN" type="T_predicat1"/>\r
+ <xs:element name="AU_PLUS_UN" type="T_predicat1"/>\r
+ <xs:element name="ENSEMBLE" type="T_predicat1"/>\r
+ <xs:element name="EXCLUS" type="T_predicat1">\r
+ <!-- A priori, ce n'est pas l'endroit pour le placer : ? scope de Uniq_Command-->\r
+ <!-- <xs:keyref name="referToAnAlreadyDefinedName" refer="Uniq_Command">\r
+ <xs:selector xpath="."/>\r
+ <xs:field xpath="."/>\r
+ </xs:keyref>\r
+-->\r
+ </xs:element>\r
+ <xs:element name="PRESENT_ABSENT" type="T_predicat1"/>\r
+ <xs:element name="PRESENT_PRESENT" type="T_predicat1"/>\r
+ <xs:element name="UN_PARMI" type="T_predicat1"/>\r
+ <xs:group name="predicat">\r
+ <xs:choice>\r
+ <xs:element ref="A_CLASSER"/>\r
+ <xs:element ref="AU_MOINS_UN"/>\r
+ <xs:element ref="AU_PLUS_UN"/>\r
+ <xs:element ref="ENSEMBLE"/>\r
+ <xs:element ref="EXCLUS">\r
+ <!-- A priori, ce n'est pas l'endroit pour le placer -->\r
+ <!-- <xs:keyref name="referToAnAlreadyDefinedName" refer="/Uniq_Command">\r
+ <xs:selector xpath="."/>\r
+ <xs:field xpath="."/>\r
+ </xs:keyref>\r
+-->\r
+ </xs:element>\r
+ <xs:element ref="PRESENT_ABSENT"/>\r
+ <xs:element ref="PRESENT_PRESENT"/>\r
+ <xs:element ref="UN_PARMI"/>\r
+ </xs:choice>\r
+ </xs:group>\r
+ <xs:complexType name="T_regles">\r
+ <xs:sequence maxOccurs="unbounded">\r
+ <xs:group ref="predicat"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <!-- <xs:simpleType name="T_typeCree">\r
+ <xs:restriction base="T_classe_utilisateur"/>\r
+ </xs:simpleType>\r
+-->\r
+ <xs:simpleType name="AT_subroutine">\r
+ <xs:restriction base="AT_nom"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_validators">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="NoRepeat"/>\r
+ <xs:enumeration value="OnlyStr"/>\r
+ <xs:enumeration value="VerifExiste"/>\r
+ <xs:enumeration value="VerifTypeTuple"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_Bool">\r
+ <xs:restriction base="xs:boolean"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_list_Bool">\r
+ <xs:list itemType="T_Bool"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_I">\r
+ <xs:restriction base="xs:int"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_list_I">\r
+ <xs:list itemType="T_I"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_R">\r
+ <xs:restriction base="xs:double"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_list_R">\r
+ <xs:list itemType="T_R"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_TXM">\r
+ <xs:restriction base="AT_nom"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_list_TXM">\r
+ <xs:list itemType="T_TXM"/>\r
+ </xs:simpleType>\r
+ <!--fonctionne mais ne permet pas de créer une liste de liste -->\r
+ <xs:simpleType name="T_C">\r
+ <xs:restriction>\r
+ <xs:simpleType>\r
+ <xs:list itemType="xs:double"/>\r
+ </xs:simpleType>\r
+ <xs:minLength value="2"/>\r
+ <xs:maxLength value="2"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <!-- Ajouter une contrainte : taille pair -->\r
+ <!-- Il n'est pas possible de définir des listes de listes -->\r
+ <xs:simpleType name="T_list_C">\r
+ <xs:list itemType="xs:double"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_name_base">\r
+ <xs:restriction base="AT_nom"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_simple_name">\r
+ <xs:restriction base="T_name_base">\r
+ <xs:enumeration value="Fichier"/>\r
+ <xs:enumeration value="Repertoire"/>\r
+ <xs:enumeration value="TXM"/>\r
+ <xs:enumeration value="I"/>\r
+ <xs:enumeration value="R"/>\r
+ <xs:enumeration value="C"/>\r
+ <xs:enumeration value="Bool"/>\r
+ <xs:enumeration value="grma"/>\r
+ <xs:enumeration value="grno"/>\r
+ <xs:enumeration value="SalomeEntry"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <!-- On ne peut pas rendre abstrait un simpleType && \r
+ Il n'est pas possible de dérivé par restriction un simplecontent d'un type complex qui\r
+ lui peut être abstrait\r
+ -->\r
+ <xs:simpleType name="T_classe_utilisateur_name">\r
+ <xs:restriction base="T_name">\r
+ <xs:enumeration value="T_classe_utilisateur"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="T_classe_utilisateur_username">\r
+ <xs:simpleContent>\r
+ <xs:extension base="T_classe_utilisateur_name">\r
+ <xs:attribute ref="nom" use="required"/>\r
+ </xs:extension>\r
+ </xs:simpleContent>\r
+ </xs:complexType>\r
+ <xs:simpleType name="T_name">\r
+ <xs:union memberTypes="T_simple_name">\r
+ <xs:simpleType>\r
+ <xs:restriction base="AT_nom">\r
+ <xs:enumeration value="T_Matrice_double"/>\r
+ <xs:enumeration value="T_Matrice_Symetrique_double"/>\r
+ <xs:enumeration value="T_tuple"/>\r
+ <xs:enumeration value="T_classe_utilisateur"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:union>\r
+ </xs:simpleType>\r
+ <xs:complexType name="T_grma"/>\r
+ <xs:complexType name="T_grno"/>\r
+ <xs:complexType name="T_SalomeEntry"/>\r
+ <xs:complexType name="T_Fichier"/>\r
+ <!-- <xs:complexType name="T_Repertoire"/>-->\r
+ <xs:simpleType name="T_Repertoire">\r
+ <xs:list>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:whiteSpace value="preserve"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:list>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="T_simple">\r
+ <xs:union memberTypes="T_I T_list_I T_R T_list_R T_C T_list_C T_TXM T_list_TXM T_Bool T_list_Bool T_Repertoire"/>\r
+ </xs:simpleType>\r
+ <!-- <xs:complexType name="T_TXM"/>-->\r
+ <!-- <xs:simpleType name="T_simple">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Fichier"/>\r
+ <xs:enumeration value="Repertoire"/>\r
+ <xs:enumeration value="TXM"/>\r
+ <xs:enumeration value="I"/>\r
+ <xs:enumeration value="R"/>\r
+ <xs:enumeration value="C"/>\r
+ <xs:enumeration value="Bool"/>\r
+ <xs:enumeration value="grma"/>\r
+ <xs:enumeration value="grno"/>\r
+ <xs:enumeration value="SalomeEntry"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+-->\r
+ <xs:simpleType name="T_list_double">\r
+ <xs:list itemType="xs:double"/>\r
+ </xs:simpleType>\r
+ <!-- Possibilité d'utiliser un type paramétré ? -->\r
+ <xs:complexType name="T_Matrice_double">\r
+ <xs:simpleContent>\r
+ <xs:extension base="T_list_double">\r
+ <xs:attribute name="n" type="xs:integer" use="required"/>\r
+ <xs:attribute name="m" type="xs:integer" use="required"/>\r
+ </xs:extension>\r
+ </xs:simpleContent>\r
+ </xs:complexType>\r
+ <!-- Faire l'exercice de dériver de T_Matrice_double -->\r
+ <xs:complexType name="T_Matrice_Symetrique_double">\r
+ <xs:simpleContent>\r
+ <xs:extension base="T_list_double">\r
+ <xs:attribute name="n" type="xs:int" use="required"/>\r
+ </xs:extension>\r
+ </xs:simpleContent>\r
+ </xs:complexType>\r
+ <!-- Une liste est aussi un type simple !!!! -->\r
+ <!-- <xs:simpleType name="T_list_anySimpleType">\r
+ <xs:list itemType="xs:anySimpleType"/>\r
+ </xs:simpleType>\r
+-->\r
+ <!-- Le fait de ne pas déclarer une liste risque d'être problématique pour le parsing : A voir-->\r
+ <xs:complexType name="T_tuple">\r
+ <xs:simpleContent>\r
+ <xs:extension base="xs:anySimpleType">\r
+ <xs:attribute name="n" type="xs:int" use="required"/>\r
+ </xs:extension>\r
+ </xs:simpleContent>\r
+ </xs:complexType>\r
+ <xs:simpleType name="T_classe_utilisateur">\r
+ <xs:restriction base="AT_nom"/>\r
+ </xs:simpleType>\r
+ <xs:element name="typesimple" type="T_simple"/>\r
+ <xs:element name="matrice_double" type="T_Matrice_double"/>\r
+ <xs:element name="matrice_symetrique_double" type="T_Matrice_Symetrique_double"/>\r
+ <xs:element name="tuple" type="T_tuple"/>\r
+ <xs:element name="classe_utilisateur" type="T_classe_utilisateur"/>\r
+ <!-- Essai -->\r
+ <!-- <xs:group name="T_Attendu_group1">\r
+ <xs:choice>\r
+ <xs:element ref="typesimple"/>\r
+ <xs:element ref="matrice_double"/>\r
+ <xs:element ref="matrice_symetrique_double"/>\r
+ <xs:element ref="tuple"/>\r
+ <xs:element ref="classe_utilisateur"/>\r
+ </xs:choice>\r
+ </xs:group>\r
+\r
+ <xs:group name="T_Attendu_group2">\r
+ <xs:choice>\r
+ <xs:element ref="typesimple"/>\r
+ <xs:element ref="matrice_double"/>\r
+ <xs:element ref="matrice_symetrique_double"/>\r
+ <xs:element ref="tuple"/>\r
+ <xs:element ref="classe_utilisateur"/>\r
+ <xs:element ref="fonction_utilisateur" minOccurs="1" maxOccurs="unbounded"/>\r
+ </xs:choice>\r
+ </xs:group>\r
+\r
+ <xs:complexType name="T_typeAttendu">\r
+ <xs:group ref="T_Attendu_group1"/>\r
+ </xs:complexType>\r
+ -->\r
+ <!-- Faire plutot un groupe de substitution pour ne pas croiser les choix -->\r
+ <!--\r
+ <xs:complexType name="T_into">\r
+ <xs:group ref="T_Attendu_group2"/>\r
+ </xs:complexType>\r
+ -->\r
+ <xs:complexType name="T_into">\r
+ <xs:choice>\r
+ <!-- <xs:element ref="typesimple" type="T_Base"/>-->\r
+ <xs:element ref="typesimple" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="matrice_double" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="matrice_symetrique_double" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="tuple" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="classe_utilisateur" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="fonction_utilisateur" minOccurs="1" maxOccurs="unbounded"/>\r
+ </xs:choice>\r
+ </xs:complexType>\r
+ <xs:complexType name="T_typeAttendu">\r
+ <xs:complexContent>\r
+ <xs:restriction base="T_into">\r
+ <xs:choice>\r
+ <xs:element ref="typesimple" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="matrice_double" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="matrice_symetrique_double" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="tuple" minOccurs="0" maxOccurs="unbounded"/>\r
+ <xs:element ref="classe_utilisateur" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:choice>\r
+ </xs:restriction>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+</xs:schema>\r
+<!-- Catalogue EFFICAS équivalent\r
+\r
+# coding: utf-8\r
+from Accas import *\r
+\r
+class carte (ASSD) : pass\r
+class maille (ASSD) : pass\r
+class carte_flux_r (carte):pass\r
+\r
+class NOM_CHAM_INTO:\r
+ def __call__(self, *l_typ_cham, **kwargs):\r
+ return tuple(('A','B','C'))\r
+C_NOM_CHAM_INTO = NOM_CHAM_INTO()\r
+\r
+JdC = JDC_CATA(code='MAP',\r
+ execmodul=None,\r
+ regles=ENSEMBLE('E1','E2','E3')\r
+ )\r
+\r
+CREECARTE = OPER(nom="CREECARTE",op=None, sd_prod=carte, UNITE=SIMP(statut='f',typ='I',defaut=21),);\r
+\r
+CREECARTEFLUX = OPER(nom="CREECARTEFLUX",op=None, sd_prod=carte_flux_r,\r
+ NOMFLUX=SIMP(statut='o',typ='TXM',defaut='monFlux'),\r
+ );\r
+\r
+CREEMAILLE = OPER(nom="CREEMAILLE",op=None, sd_prod=maille,\r
+ NOEUDS=SIMP(statut='o',typ='I',defaut=(1,2),min=2,max=2)\r
+ );\r
+\r
+E1=PROC(nom="E1",\r
+ op=None,\r
+ regles = (EXCLUS('ETAT_INIT','RESULTAT',),),\r
+ ETAT_INIT = FACT(statut='f', max='**',\r
+ GROUP_MA_1=SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),\r
+ GROUP_NO_2=SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),\r
+ ),\r
+\r
+ RESULTAT = FACT(statut='f',\r
+ DEPL=SIMP(statut='o', typ='R', validators=NoRepeat()),\r
+ VITE=SIMP(statut='f', typ='R', validators=NoRepeat()),\r
+ ACCE=SIMP(statut='f', typ='R', validators=NoRepeat()),\r
+ ), \r
+ );\r
+\r
+E2=PROC(nom="E2", op=None,\r
+ regles = (UN_PARMI('CONCEPT','CHAINE','TOUT' ),),\r
+ CONCEPT = FACT(statut='f',max='**',\r
+ NOM = SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),\r
+ ),\r
+ CHAINE = SIMP(statut='f',typ='TXM'),\r
+ POSITION = SIMP(statut='f',typ='I',defaut=1),\r
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),\r
+ );\r
+\r
+E3=PROC(nom="E3",op=None,\r
+ DEFORMATION = SIMP(statut='f',typ='TXM',defaut="PETIT",\r
+ into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GDEF_LOG")),\r
+ b_blocIn = BLOC(condition = "DEFORMATION in ('PETIT','PETIT_REAC','GROT_GDEP')",\r
+ ITER_INTE_PAS = SIMP(statut='f',typ='I',defaut= 0 ),\r
+ ALGO_INTE = SIMP(statut='f',typ='TXM',into=("ANALYTIQUE", "SECANTE", "DEKKER", "NEWTON_1D","BRENT",),),\r
+ CARTE = SIMP(statut='f',typ=carte,),\r
+ b_carte = BLOC(condition= "(AsType(CARTE) != carte_flux_r)",\r
+ CONTRAINTE = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',\r
+ fr="Options pour le calcul de contraintes et efforts generalises",\r
+ into=C_NOM_CHAM_INTO(phenomene='CONTRAINTE',categorie='lin'),)\r
+ ),\r
+ ), \r
+ );\r
+\r
+-->\r
--- /dev/null
+# ./raw/efficas.py
+# -*- coding: utf-8 -*-
+# PyXB bindings for NM:759f40938b7670cd6d5941e706557eb2115fb17f
+# Generated 2016-11-23 16:51:37.568270 by PyXB version 1.2.3
+# Namespace http://chercheurs.edf.com/logiciels/efficas
+
+import pyxb
+import pyxb.binding
+import pyxb.binding.saxer
+import io
+import pyxb.utils.utility
+import pyxb.utils.domutils
+import sys
+
+# Unique identifier for bindings created at the same time
+_GenerationUID = pyxb.utils.utility.UniqueIdentifier('urn:uuid:b79c3f70-b194-11e6-bb0f-b05adafd94d6')
+
+# Version of PyXB used to generate the bindings
+_PyXBVersion = '1.2.3'
+# Generated bindings are not compatible across PyXB versions
+if pyxb.__version__ != _PyXBVersion:
+ raise pyxb.PyXBVersionError(_PyXBVersion)
+
+# Import bindings for namespaces imported into schema
+import pyxb.binding.datatypes
+
+# NOTE: All namespace declarations are reserved within the binding
+Namespace = pyxb.namespace.NamespaceForURI(u'http://chercheurs.edf.com/logiciels/efficas', create_if_missing=True)
+Namespace.configureCategories(['typeBinding', 'elementBinding'])
+
+def CreateFromDocument (xml_text, default_namespace=None, location_base=None):
+ """Parse the given XML and use the document element to create a
+ Python instance.
+
+ @param xml_text An XML document. This should be data (Python 2
+ str or Python 3 bytes), or a text (Python 2 unicode or Python 3
+ str) in the L{pyxb._InputEncoding} encoding.
+
+ @keyword default_namespace The L{pyxb.Namespace} instance to use as the
+ default namespace where there is no default namespace in scope.
+ If unspecified or C{None}, the namespace of the module containing
+ this function will be used.
+
+ @keyword location_base: An object to be recorded as the base of all
+ L{pyxb.utils.utility.Location} instances associated with events and
+ objects handled by the parser. You might pass the URI from which
+ the document was obtained.
+ """
+
+ if pyxb.XMLStyle_saxer != pyxb._XMLStyle:
+ dom = pyxb.utils.domutils.StringToDOM(xml_text)
+ return CreateFromDOM(dom.documentElement)
+ if default_namespace is None:
+ default_namespace = Namespace.fallbackNamespace()
+ saxer = pyxb.binding.saxer.make_parser(fallback_namespace=default_namespace, location_base=location_base)
+ handler = saxer.getContentHandler()
+ xmld = xml_text
+ if isinstance(xmld, unicode):
+ xmld = xmld.encode(pyxb._InputEncoding)
+ saxer.parse(io.BytesIO(xmld))
+ instance = handler.rootObject()
+ return instance
+
+def CreateFromDOM (node, default_namespace=None):
+ """Create a Python instance from the given DOM node.
+ The node tag must correspond to an element declaration in this module.
+
+ @deprecated: Forcing use of DOM interface is unnecessary; use L{CreateFromDocument}."""
+ if default_namespace is None:
+ default_namespace = Namespace.fallbackNamespace()
+ return pyxb.binding.basis.element.AnyCreateFromDOM(node, default_namespace)
+
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_fonction_python
+class T_fonction_python (pyxb.binding.datatypes.string):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_fonction_python')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 154, 1)
+ _Documentation = None
+T_fonction_python._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_fonction_python', T_fonction_python)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_statut
+class AT_statut (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_statut')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 190, 1)
+ _Documentation = None
+AT_statut._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=AT_statut, enum_prefix=None)
+AT_statut.f = AT_statut._CF_enumeration.addEnumeration(unicode_value=u'f', tag=u'f')
+AT_statut.o = AT_statut._CF_enumeration.addEnumeration(unicode_value=u'o', tag=u'o')
+AT_statut._InitializeFacetMap(AT_statut._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'AT_statut', AT_statut)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_portee
+class T_portee (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_portee')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 202, 1)
+ _Documentation = None
+T_portee._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_portee, enum_prefix=None)
+T_portee.None_ = T_portee._CF_enumeration.addEnumeration(unicode_value=u'None', tag=u'None_')
+T_portee.Global = T_portee._CF_enumeration.addEnumeration(unicode_value=u'Global', tag=u'Global')
+T_portee._InitializeFacetMap(T_portee._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'T_portee', T_portee)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_max_occurs
+class AT_max_occurs (pyxb.binding.datatypes.long):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_max_occurs')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 208, 1)
+ _Documentation = None
+AT_max_occurs._CF_minInclusive = pyxb.binding.facets.CF_minInclusive(value_datatype=AT_max_occurs, value=pyxb.binding.datatypes.long(-1L))
+AT_max_occurs._InitializeFacetMap(AT_max_occurs._CF_minInclusive)
+Namespace.addCategoryObject('typeBinding', u'AT_max_occurs', AT_max_occurs)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_min_occurs
+class AT_min_occurs (pyxb.binding.datatypes.long):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_min_occurs')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 213, 1)
+ _Documentation = None
+AT_min_occurs._CF_minExclusive = pyxb.binding.facets.CF_minExclusive(value_datatype=pyxb.binding.datatypes.long, value=pyxb.binding.datatypes.integer(0L))
+AT_min_occurs._InitializeFacetMap(AT_min_occurs._CF_minExclusive)
+Namespace.addCategoryObject('typeBinding', u'AT_min_occurs', AT_min_occurs)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_ag
+class AT_ag (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_ag')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 226, 1)
+ _Documentation = None
+AT_ag._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=AT_ag, enum_prefix=None)
+AT_ag.No_comment = AT_ag._CF_enumeration.addEnumeration(unicode_value=u'No comment', tag=u'No_comment')
+AT_ag._InitializeFacetMap(AT_ag._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'AT_ag', AT_ag)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_docu
+class AT_docu (pyxb.binding.datatypes.string):
+
+ """Référence une position dans un fichier maître contenant une liste de références à des pages de documentations"""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_docu')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 231, 1)
+ _Documentation = u'R\xe9f\xe9rence une position dans un fichier ma\xeetre contenant une liste de r\xe9f\xe9rences \xe0 des pages de documentations'
+AT_docu._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'AT_docu', AT_docu)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_valeur_sugg
+class AT_valeur_sugg (pyxb.binding.datatypes.string):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_valeur_sugg')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 237, 1)
+ _Documentation = None
+AT_valeur_sugg._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'AT_valeur_sugg', AT_valeur_sugg)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_nom
+class AT_nom (pyxb.binding.datatypes.string):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_nom')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 241, 1)
+ _Documentation = None
+AT_nom._CF_pattern = pyxb.binding.facets.CF_pattern()
+AT_nom._CF_pattern.addPattern(pattern=u'([A-Z]|[a-z]|_)([A-Z]|[a-z]|_|[0-9])*')
+AT_nom._InitializeFacetMap(AT_nom._CF_pattern)
+Namespace.addCategoryObject('typeBinding', u'AT_nom', AT_nom)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_validators
+class T_validators (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_validators')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 303, 1)
+ _Documentation = None
+T_validators._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_validators, enum_prefix=None)
+T_validators.NoRepeat = T_validators._CF_enumeration.addEnumeration(unicode_value=u'NoRepeat', tag=u'NoRepeat')
+T_validators.OnlyStr = T_validators._CF_enumeration.addEnumeration(unicode_value=u'OnlyStr', tag=u'OnlyStr')
+T_validators.VerifExiste = T_validators._CF_enumeration.addEnumeration(unicode_value=u'VerifExiste', tag=u'VerifExiste')
+T_validators.VerifTypeTuple = T_validators._CF_enumeration.addEnumeration(unicode_value=u'VerifTypeTuple', tag=u'VerifTypeTuple')
+T_validators._InitializeFacetMap(T_validators._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'T_validators', T_validators)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_Bool
+class T_Bool (pyxb.binding.datatypes.boolean):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Bool')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 311, 1)
+ _Documentation = None
+T_Bool._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_Bool', T_Bool)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_I
+class T_I (pyxb.binding.datatypes.int):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_I')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 317, 1)
+ _Documentation = None
+T_I._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_I', T_I)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_R
+class T_R (pyxb.binding.datatypes.double):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_R')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 323, 1)
+ _Documentation = None
+T_R._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_R', T_R)
+
+# List simple type: [anonymous]
+# superclasses pyxb.binding.datatypes.anySimpleType
+class STD_ANON (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of pyxb.binding.datatypes.double."""
+
+ _ExpandedName = None
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 338, 3)
+ _Documentation = None
+
+ _ItemType = pyxb.binding.datatypes.double
+STD_ANON._InitializeFacetMap()
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_C
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_list_C (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of pyxb.binding.datatypes.double."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_C')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 347, 1)
+ _Documentation = None
+
+ _ItemType = pyxb.binding.datatypes.double
+T_list_C._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_list_C', T_list_C)
+
+# Atomic simple type: [anonymous]
+class STD_ANON_ (pyxb.binding.datatypes.string):
+
+ """An atomic simple type."""
+
+ _ExpandedName = None
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 402, 3)
+ _Documentation = None
+STD_ANON_._CF_whiteSpace = pyxb.binding.facets.CF_whiteSpace(value=pyxb.binding.facets._WhiteSpace_enum.preserve)
+STD_ANON_._InitializeFacetMap(STD_ANON_._CF_whiteSpace)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_double
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_list_double (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of pyxb.binding.datatypes.double."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_double')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 428, 1)
+ _Documentation = None
+
+ _ItemType = pyxb.binding.datatypes.double
+T_list_double._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_list_double', T_list_double)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_predicat1
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_predicat1 (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of AT_nom."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_predicat1')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 246, 1)
+ _Documentation = None
+
+ _ItemType = AT_nom
+T_predicat1._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_predicat1', T_predicat1)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}AT_subroutine
+class AT_subroutine (AT_nom):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'AT_subroutine')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 300, 1)
+ _Documentation = None
+AT_subroutine._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'AT_subroutine', AT_subroutine)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_Bool
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_list_Bool (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of T_Bool."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_Bool')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 314, 1)
+ _Documentation = None
+
+ _ItemType = T_Bool
+T_list_Bool._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_list_Bool', T_list_Bool)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_I
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_list_I (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of T_I."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_I')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 320, 1)
+ _Documentation = None
+
+ _ItemType = T_I
+T_list_I._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_list_I', T_list_I)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_R
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_list_R (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of T_R."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_R')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 326, 1)
+ _Documentation = None
+
+ _ItemType = T_R
+T_list_R._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_list_R', T_list_R)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_TXM
+class T_TXM (AT_nom):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_TXM')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 329, 1)
+ _Documentation = None
+T_TXM._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_TXM', T_TXM)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_C
+# superclasses STD_ANON
+class T_C (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of pyxb.binding.datatypes.double."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_C')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 336, 1)
+ _Documentation = None
+
+ _ItemType = pyxb.binding.datatypes.double
+T_C._CF_maxLength = pyxb.binding.facets.CF_maxLength(value=pyxb.binding.datatypes.nonNegativeInteger(2L))
+T_C._CF_minLength = pyxb.binding.facets.CF_minLength(value=pyxb.binding.datatypes.nonNegativeInteger(2L))
+T_C._InitializeFacetMap(T_C._CF_maxLength,
+ T_C._CF_minLength)
+Namespace.addCategoryObject('typeBinding', u'T_C', T_C)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_name_base
+class T_name_base (AT_nom):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_name_base')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 350, 1)
+ _Documentation = None
+T_name_base._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_name_base', T_name_base)
+
+# Atomic simple type: [anonymous]
+class STD_ANON_2 (AT_nom, pyxb.binding.basis.enumeration_mixin):
+
+ """An atomic simple type."""
+
+ _ExpandedName = None
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 385, 3)
+ _Documentation = None
+STD_ANON_2._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=STD_ANON_2, enum_prefix=None)
+STD_ANON_2.T_Matrice_double = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_Matrice_double', tag=u'T_Matrice_double')
+STD_ANON_2.T_Matrice_Symetrique_double = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_Matrice_Symetrique_double', tag=u'T_Matrice_Symetrique_double')
+STD_ANON_2.T_tuple = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_tuple', tag=u'T_tuple')
+STD_ANON_2.T_classe_utilisateur = STD_ANON_2._CF_enumeration.addEnumeration(unicode_value=u'T_classe_utilisateur', tag=u'T_classe_utilisateur')
+STD_ANON_2._InitializeFacetMap(STD_ANON_2._CF_enumeration)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_Repertoire
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_Repertoire (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of STD_ANON_."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Repertoire')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 400, 1)
+ _Documentation = None
+
+ _ItemType = STD_ANON_
+T_Repertoire._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_Repertoire', T_Repertoire)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur
+class T_classe_utilisateur (AT_nom):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_classe_utilisateur')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 461, 1)
+ _Documentation = None
+T_classe_utilisateur._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_classe_utilisateur', T_classe_utilisateur)
+
+# List simple type: {http://chercheurs.edf.com/logiciels/efficas}T_list_TXM
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_list_TXM (pyxb.binding.basis.STD_list):
+
+ """Simple type that is a list of T_TXM."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_list_TXM')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 332, 1)
+ _Documentation = None
+
+ _ItemType = T_TXM
+T_list_TXM._InitializeFacetMap()
+Namespace.addCategoryObject('typeBinding', u'T_list_TXM', T_list_TXM)
+
+# Atomic simple type: {http://chercheurs.edf.com/logiciels/efficas}T_simple_name
+class T_simple_name (T_name_base, pyxb.binding.basis.enumeration_mixin):
+
+ """An atomic simple type."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_simple_name')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 353, 1)
+ _Documentation = None
+T_simple_name._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_simple_name, enum_prefix=None)
+T_simple_name.Fichier = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'Fichier', tag=u'Fichier')
+T_simple_name.Repertoire = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'Repertoire', tag=u'Repertoire')
+T_simple_name.TXM = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'TXM', tag=u'TXM')
+T_simple_name.I = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'I', tag=u'I')
+T_simple_name.R = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'R', tag=u'R')
+T_simple_name.C = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'C', tag=u'C')
+T_simple_name.Bool = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'Bool', tag=u'Bool')
+T_simple_name.grma = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'grma', tag=u'grma')
+T_simple_name.grno = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'grno', tag=u'grno')
+T_simple_name.SalomeEntry = T_simple_name._CF_enumeration.addEnumeration(unicode_value=u'SalomeEntry', tag=u'SalomeEntry')
+T_simple_name._InitializeFacetMap(T_simple_name._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'T_simple_name', T_simple_name)
+
+# Union simple type: {http://chercheurs.edf.com/logiciels/efficas}T_name
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_name (pyxb.binding.basis.STD_union):
+
+ """Simple type that is a union of T_simple_name, STD_ANON_2."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_name')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 383, 1)
+ _Documentation = None
+
+ _MemberTypes = ( T_simple_name, STD_ANON_2, )
+T_name._CF_pattern = pyxb.binding.facets.CF_pattern()
+T_name._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_name)
+T_name.Fichier = u'Fichier' # originally T_simple_name.Fichier
+T_name.Repertoire = u'Repertoire' # originally T_simple_name.Repertoire
+T_name.TXM = u'TXM' # originally T_simple_name.TXM
+T_name.I = u'I' # originally T_simple_name.I
+T_name.R = u'R' # originally T_simple_name.R
+T_name.C = u'C' # originally T_simple_name.C
+T_name.Bool = u'Bool' # originally T_simple_name.Bool
+T_name.grma = u'grma' # originally T_simple_name.grma
+T_name.grno = u'grno' # originally T_simple_name.grno
+T_name.SalomeEntry = u'SalomeEntry' # originally T_simple_name.SalomeEntry
+T_name.T_Matrice_double = u'T_Matrice_double' # originally STD_ANON_2.T_Matrice_double
+T_name.T_Matrice_Symetrique_double = u'T_Matrice_Symetrique_double'# originally STD_ANON_2.T_Matrice_Symetrique_double
+T_name.T_tuple = u'T_tuple' # originally STD_ANON_2.T_tuple
+T_name.T_classe_utilisateur = u'T_classe_utilisateur'# originally STD_ANON_2.T_classe_utilisateur
+T_name._InitializeFacetMap(T_name._CF_pattern,
+ T_name._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'T_name', T_name)
+
+# Union simple type: {http://chercheurs.edf.com/logiciels/efficas}T_simple
+# superclasses pyxb.binding.datatypes.anySimpleType
+class T_simple (pyxb.binding.basis.STD_union):
+
+ """Simple type that is a union of T_I, T_list_I, T_R, T_list_R, T_C, T_list_C, T_TXM, T_list_TXM, T_Bool, T_list_Bool, T_Repertoire."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_simple')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 409, 1)
+ _Documentation = None
+
+ _MemberTypes = ( T_I, T_list_I, T_R, T_list_R, T_C, T_list_C, T_TXM, T_list_TXM, T_Bool, T_list_Bool, T_Repertoire, )
+T_simple._CF_pattern = pyxb.binding.facets.CF_pattern()
+T_simple._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_simple)
+T_simple._InitializeFacetMap(T_simple._CF_pattern,
+ T_simple._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'T_simple', T_simple)
+
+# Union simple type: {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur_name
+# superclasses T_name, pyxb.binding.basis.enumeration_mixin
+class T_classe_utilisateur_name (pyxb.binding.basis.STD_union):
+
+ """Simple type that is a union of T_simple_name, STD_ANON_2."""
+
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_classe_utilisateur_name')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 371, 1)
+ _Documentation = None
+
+ _MemberTypes = ( T_simple_name, STD_ANON_2, )
+T_classe_utilisateur_name._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=T_classe_utilisateur_name, enum_prefix=None)
+T_classe_utilisateur_name.T_classe_utilisateur = T_classe_utilisateur_name._CF_enumeration.addEnumeration(unicode_value=u'T_classe_utilisateur', tag=u'T_classe_utilisateur')
+T_classe_utilisateur_name._InitializeFacetMap(T_classe_utilisateur_name._CF_enumeration)
+Namespace.addCategoryObject('typeBinding', u'T_classe_utilisateur_name', T_classe_utilisateur_name)
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_cata with content type ELEMENT_ONLY
+class T_cata (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_cata with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_cata')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 66, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}commandes uses Python identifier commandes
+ __commandes = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'commandes'), 'commandes', '__httpchercheurs_edf_comlogicielsefficas_T_cata_httpchercheurs_edf_comlogicielsefficascommandes', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 11, 1), )
+
+
+ commandes = property(__commandes.value, __commandes.set, None, None)
+
+ _ElementMap.update({
+ __commandes.name() : __commandes
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_cata', T_cata)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_commandes with content type ELEMENT_ONLY
+class T_commandes (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_commandes with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_commandes')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 71, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}OPER uses Python identifier OPER
+ __OPER = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'OPER'), 'OPER', '__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasOPER', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 99, 1), )
+
+
+ OPER = property(__OPER.value, __OPER.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}PROC uses Python identifier PROC
+ __PROC = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PROC'), 'PROC', '__httpchercheurs_edf_comlogicielsefficas_T_commandes_httpchercheurs_edf_comlogicielsefficasPROC', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 110, 1), )
+
+
+ PROC = property(__PROC.value, __PROC.set, None, None)
+
+ _ElementMap.update({
+ __OPER.name() : __OPER,
+ __PROC.name() : __PROC
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_commandes', T_commandes)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Cardinalite with content type EMPTY
+class T_Cardinalite (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Cardinalite with content type EMPTY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Cardinalite')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 77, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_Cardinalite', T_Cardinalite)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PlageValeur with content type ELEMENT_ONLY
+class T_PlageValeur (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PlageValeur with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_PlageValeur')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 78, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}borne_sup uses Python identifier borne_sup
+ __borne_sup = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'borne_sup'), 'borne_sup', '__httpchercheurs_edf_comlogicielsefficas_T_PlageValeur_httpchercheurs_edf_comlogicielsefficasborne_sup', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 46, 1), )
+
+
+ borne_sup = property(__borne_sup.value, __borne_sup.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}borne_inf uses Python identifier borne_inf
+ __borne_inf = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'borne_inf'), 'borne_inf', '__httpchercheurs_edf_comlogicielsefficas_T_PlageValeur_httpchercheurs_edf_comlogicielsefficasborne_inf', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 47, 1), )
+
+
+ borne_inf = property(__borne_inf.value, __borne_inf.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}into uses Python identifier into
+ __into = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'into'), 'into', '__httpchercheurs_edf_comlogicielsefficas_T_PlageValeur_httpchercheurs_edf_comlogicielsefficasinto', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 49, 1), )
+
+
+ into = property(__into.value, __into.set, None, None)
+
+ _ElementMap.update({
+ __borne_sup.name() : __borne_sup,
+ __borne_inf.name() : __borne_inf,
+ __into.name() : __into
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_PlageValeur', T_PlageValeur)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_predicat2 with content type ELEMENT_ONLY
+class T_predicat2 (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_predicat2 with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_predicat2')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 250, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}p1 uses Python identifier p1
+ __p1 = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'p1'), 'p1', '__httpchercheurs_edf_comlogicielsefficas_T_predicat2_httpchercheurs_edf_comlogicielsefficasp1', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 252, 3), )
+
+
+ p1 = property(__p1.value, __p1.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}p2 uses Python identifier p2
+ __p2 = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'p2'), 'p2', '__httpchercheurs_edf_comlogicielsefficas_T_predicat2_httpchercheurs_edf_comlogicielsefficasp2', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 253, 3), )
+
+
+ p2 = property(__p2.value, __p2.set, None, None)
+
+ _ElementMap.update({
+ __p1.name() : __p1,
+ __p2.name() : __p2
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_predicat2', T_predicat2)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_regles with content type ELEMENT_ONLY
+class T_regles (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_regles with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_regles')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 291, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}A_CLASSER uses Python identifier A_CLASSER
+ __A_CLASSER = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER'), 'A_CLASSER', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasA_CLASSER', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 257, 1), )
+
+
+ A_CLASSER = property(__A_CLASSER.value, __A_CLASSER.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}AU_MOINS_UN uses Python identifier AU_MOINS_UN
+ __AU_MOINS_UN = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN'), 'AU_MOINS_UN', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasAU_MOINS_UN', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 258, 1), )
+
+
+ AU_MOINS_UN = property(__AU_MOINS_UN.value, __AU_MOINS_UN.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}AU_PLUS_UN uses Python identifier AU_PLUS_UN
+ __AU_PLUS_UN = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN'), 'AU_PLUS_UN', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasAU_PLUS_UN', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 259, 1), )
+
+
+ AU_PLUS_UN = property(__AU_PLUS_UN.value, __AU_PLUS_UN.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}ENSEMBLE uses Python identifier ENSEMBLE
+ __ENSEMBLE = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE'), 'ENSEMBLE', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasENSEMBLE', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 260, 1), )
+
+
+ ENSEMBLE = property(__ENSEMBLE.value, __ENSEMBLE.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}EXCLUS uses Python identifier EXCLUS
+ __EXCLUS = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS'), 'EXCLUS', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasEXCLUS', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 261, 1), )
+
+
+ EXCLUS = property(__EXCLUS.value, __EXCLUS.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}PRESENT_ABSENT uses Python identifier PRESENT_ABSENT
+ __PRESENT_ABSENT = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT'), 'PRESENT_ABSENT', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasPRESENT_ABSENT', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 269, 1), )
+
+
+ PRESENT_ABSENT = property(__PRESENT_ABSENT.value, __PRESENT_ABSENT.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}PRESENT_PRESENT uses Python identifier PRESENT_PRESENT
+ __PRESENT_PRESENT = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT'), 'PRESENT_PRESENT', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasPRESENT_PRESENT', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 270, 1), )
+
+
+ PRESENT_PRESENT = property(__PRESENT_PRESENT.value, __PRESENT_PRESENT.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}UN_PARMI uses Python identifier UN_PARMI
+ __UN_PARMI = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI'), 'UN_PARMI', '__httpchercheurs_edf_comlogicielsefficas_T_regles_httpchercheurs_edf_comlogicielsefficasUN_PARMI', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 271, 1), )
+
+
+ UN_PARMI = property(__UN_PARMI.value, __UN_PARMI.set, None, None)
+
+ _ElementMap.update({
+ __A_CLASSER.name() : __A_CLASSER,
+ __AU_MOINS_UN.name() : __AU_MOINS_UN,
+ __AU_PLUS_UN.name() : __AU_PLUS_UN,
+ __ENSEMBLE.name() : __ENSEMBLE,
+ __EXCLUS.name() : __EXCLUS,
+ __PRESENT_ABSENT.name() : __PRESENT_ABSENT,
+ __PRESENT_PRESENT.name() : __PRESENT_PRESENT,
+ __UN_PARMI.name() : __UN_PARMI
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_regles', T_regles)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grma with content type EMPTY
+class T_grma (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grma with content type EMPTY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_grma')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 395, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_grma', T_grma)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grno with content type EMPTY
+class T_grno (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_grno with content type EMPTY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_grno')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 396, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_grno', T_grno)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SalomeEntry with content type EMPTY
+class T_SalomeEntry (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SalomeEntry with content type EMPTY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_SalomeEntry')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 397, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_SalomeEntry', T_SalomeEntry)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Fichier with content type EMPTY
+class T_Fichier (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Fichier with content type EMPTY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Fichier')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 398, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_Fichier', T_Fichier)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_tuple with content type SIMPLE
+class T_tuple (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_tuple with content type SIMPLE"""
+ _TypeDefinition = pyxb.binding.datatypes.anySimpleType
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_tuple')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 454, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anySimpleType
+
+ # Attribute n uses Python identifier n
+ __n = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'n'), 'n', '__httpchercheurs_edf_comlogicielsefficas_T_tuple_n', pyxb.binding.datatypes.int, required=True)
+ __n._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 457, 4)
+ __n._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 457, 4)
+
+ n = property(__n.value, __n.set, None, None)
+
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+ __n.name() : __n
+ })
+Namespace.addCategoryObject('typeBinding', u'T_tuple', T_tuple)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_into with content type ELEMENT_ONLY
+class T_into (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_into with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_into')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 501, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}fonction_utilisateur uses Python identifier fonction_utilisateur
+ __fonction_utilisateur = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur'), 'fonction_utilisateur', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasfonction_utilisateur', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 10, 1), )
+
+
+ fonction_utilisateur = property(__fonction_utilisateur.value, __fonction_utilisateur.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}typesimple uses Python identifier typesimple
+ __typesimple = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'typesimple'), 'typesimple', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficastypesimple', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 464, 1), )
+
+
+ typesimple = property(__typesimple.value, __typesimple.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}matrice_double uses Python identifier matrice_double
+ __matrice_double = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'matrice_double'), 'matrice_double', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasmatrice_double', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 465, 1), )
+
+
+ matrice_double = property(__matrice_double.value, __matrice_double.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}matrice_symetrique_double uses Python identifier matrice_symetrique_double
+ __matrice_symetrique_double = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double'), 'matrice_symetrique_double', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasmatrice_symetrique_double', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 466, 1), )
+
+
+ matrice_symetrique_double = property(__matrice_symetrique_double.value, __matrice_symetrique_double.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}tuple uses Python identifier tuple
+ __tuple = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'tuple'), 'tuple', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficastuple', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 467, 1), )
+
+
+ tuple = property(__tuple.value, __tuple.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}classe_utilisateur uses Python identifier classe_utilisateur
+ __classe_utilisateur = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur'), 'classe_utilisateur', '__httpchercheurs_edf_comlogicielsefficas_T_into_httpchercheurs_edf_comlogicielsefficasclasse_utilisateur', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 468, 1), )
+
+
+ classe_utilisateur = property(__classe_utilisateur.value, __classe_utilisateur.set, None, None)
+
+ _ElementMap.update({
+ __fonction_utilisateur.name() : __fonction_utilisateur,
+ __typesimple.name() : __typesimple,
+ __matrice_double.name() : __matrice_double,
+ __matrice_symetrique_double.name() : __matrice_symetrique_double,
+ __tuple.name() : __tuple,
+ __classe_utilisateur.name() : __classe_utilisateur
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_into', T_into)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_doc with content type EMPTY
+class T_doc (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_doc with content type EMPTY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_EMPTY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_doc')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 61, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}fr uses Python identifier fr
+ __fr = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'fr'), 'fr', '__httpchercheurs_edf_comlogicielsefficas_T_doc_httpchercheurs_edf_comlogicielsefficasfr', pyxb.binding.datatypes.string)
+ __fr._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 53, 1)
+ __fr._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 62, 2)
+
+ fr = property(__fr.value, __fr.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}ang uses Python identifier ang
+ __ang = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'ang'), 'ang', '__httpchercheurs_edf_comlogicielsefficas_T_doc_httpchercheurs_edf_comlogicielsefficasang', pyxb.binding.datatypes.string)
+ __ang._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 54, 1)
+ __ang._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 63, 2)
+
+ ang = property(__ang.value, __ang.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}docu uses Python identifier docu
+ __docu = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'docu'), 'docu', '__httpchercheurs_edf_comlogicielsefficas_T_doc_httpchercheurs_edf_comlogicielsefficasdocu', AT_docu)
+ __docu._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 55, 1)
+ __docu._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 64, 2)
+
+ docu = property(__docu.value, __docu.set, None, None)
+
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+ __fr.name() : __fr,
+ __ang.name() : __ang,
+ __docu.name() : __docu
+ })
+Namespace.addCategoryObject('typeBinding', u'T_doc', T_doc)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common with content type ELEMENT_ONLY
+class T_Accas_Common (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Accas.Common')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 87, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}doc uses Python identifier doc
+ __doc = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'doc'), 'doc', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasdoc', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1), )
+
+
+ doc = property(__doc.value, __doc.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}regles uses Python identifier regles
+ __regles = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'regles'), 'regles', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasregles', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 6, 1), )
+
+
+ regles = property(__regles.value, __regles.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}SIMP uses Python identifier SIMP
+ __SIMP = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'SIMP'), 'SIMP', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasSIMP', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 43, 1), )
+
+
+ SIMP = property(__SIMP.value, __SIMP.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}FACT uses Python identifier FACT
+ __FACT = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'FACT'), 'FACT', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasFACT', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 123, 1), )
+
+
+ FACT = property(__FACT.value, __FACT.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}BLOC uses Python identifier BLOC
+ __BLOC = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'BLOC'), 'BLOC', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasBLOC', True, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 157, 1), )
+
+
+ BLOC = property(__BLOC.value, __BLOC.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}nom uses Python identifier nom
+ __nom = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'nom'), 'nom', '__httpchercheurs_edf_comlogicielsefficas_T_Accas_Common_httpchercheurs_edf_comlogicielsefficasnom', AT_nom, required=True)
+ __nom._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 51, 1)
+ __nom._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 97, 2)
+
+ nom = property(__nom.value, __nom.set, None, None)
+
+ _ElementMap.update({
+ __doc.name() : __doc,
+ __regles.name() : __regles,
+ __SIMP.name() : __SIMP,
+ __FACT.name() : __FACT,
+ __BLOC.name() : __BLOC
+ })
+ _AttributeMap.update({
+ __nom.name() : __nom
+ })
+Namespace.addCategoryObject('typeBinding', u'T_Accas.Common', T_Accas_Common)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SIMP with content type ELEMENT_ONLY
+class T_SIMP (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_SIMP with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_SIMP')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 167, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is pyxb.binding.datatypes.anyType
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}doc uses Python identifier doc
+ __doc = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'doc'), 'doc', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasdoc', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1), )
+
+
+ doc = property(__doc.value, __doc.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}ValeurDef uses Python identifier ValeurDef
+ __ValeurDef = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef'), 'ValeurDef', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasValeurDef', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 8, 1), )
+
+
+ ValeurDef = property(__ValeurDef.value, __ValeurDef.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}ValeurSugg uses Python identifier ValeurSugg
+ __ValeurSugg = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg'), 'ValeurSugg', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasValeurSugg', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 9, 1), )
+
+
+ ValeurSugg = property(__ValeurSugg.value, __ValeurSugg.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}validators uses Python identifier validators
+ __validators = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'validators'), 'validators', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasvalidators', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 39, 1), )
+
+
+ validators = property(__validators.value, __validators.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}PlageValeur uses Python identifier PlageValeur
+ __PlageValeur = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur'), 'PlageValeur', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasPlageValeur', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 40, 1), )
+
+
+ PlageValeur = property(__PlageValeur.value, __PlageValeur.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}typeAttendu uses Python identifier typeAttendu
+ __typeAttendu = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu'), 'typeAttendu', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficastypeAttendu', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 41, 1), )
+
+
+ typeAttendu = property(__typeAttendu.value, __typeAttendu.set, None, None)
+
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}portee uses Python identifier portee
+ __portee = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'portee'), 'portee', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasportee', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 44, 1), )
+
+
+ portee = property(__portee.value, __portee.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}nom uses Python identifier nom
+ __nom = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'nom'), 'nom', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasnom', AT_nom, required=True)
+ __nom._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 51, 1)
+ __nom._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 181, 2)
+
+ nom = property(__nom.value, __nom.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}statut uses Python identifier statut
+ __statut = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'statut'), 'statut', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasstatut', AT_statut, unicode_default=u'o')
+ __statut._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 57, 1)
+ __statut._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 182, 2)
+
+ statut = property(__statut.value, __statut.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}max_occurs uses Python identifier max_occurs
+ __max_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'max_occurs'), 'max_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasmax_occurs', AT_max_occurs, unicode_default=u'1')
+ __max_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 58, 1)
+ __max_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 184, 2)
+
+ max_occurs = property(__max_occurs.value, __max_occurs.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}min_occurs uses Python identifier min_occurs
+ __min_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'min_occurs'), 'min_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_SIMP_httpchercheurs_edf_comlogicielsefficasmin_occurs', AT_min_occurs, unicode_default=u'1')
+ __min_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 59, 1)
+ __min_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 183, 2)
+
+ min_occurs = property(__min_occurs.value, __min_occurs.set, None, None)
+
+ _ElementMap.update({
+ __doc.name() : __doc,
+ __ValeurDef.name() : __ValeurDef,
+ __ValeurSugg.name() : __ValeurSugg,
+ __validators.name() : __validators,
+ __PlageValeur.name() : __PlageValeur,
+ __typeAttendu.name() : __typeAttendu,
+ __portee.name() : __portee
+ })
+ _AttributeMap.update({
+ __nom.name() : __nom,
+ __statut.name() : __statut,
+ __max_occurs.name() : __max_occurs,
+ __min_occurs.name() : __min_occurs
+ })
+Namespace.addCategoryObject('typeBinding', u'T_SIMP', T_SIMP)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_double with content type SIMPLE
+class T_Matrice_double (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_double with content type SIMPLE"""
+ _TypeDefinition = T_list_double
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Matrice_double')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 432, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is T_list_double
+
+ # Attribute n uses Python identifier n
+ __n = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'n'), 'n', '__httpchercheurs_edf_comlogicielsefficas_T_Matrice_double_n', pyxb.binding.datatypes.integer, required=True)
+ __n._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 435, 4)
+ __n._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 435, 4)
+
+ n = property(__n.value, __n.set, None, None)
+
+
+ # Attribute m uses Python identifier m
+ __m = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'm'), 'm', '__httpchercheurs_edf_comlogicielsefficas_T_Matrice_double_m', pyxb.binding.datatypes.integer, required=True)
+ __m._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 436, 4)
+ __m._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 436, 4)
+
+ m = property(__m.value, __m.set, None, None)
+
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+ __n.name() : __n,
+ __m.name() : __m
+ })
+Namespace.addCategoryObject('typeBinding', u'T_Matrice_double', T_Matrice_double)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_Symetrique_double with content type SIMPLE
+class T_Matrice_Symetrique_double (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_Matrice_Symetrique_double with content type SIMPLE"""
+ _TypeDefinition = T_list_double
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_Matrice_Symetrique_double')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 441, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is T_list_double
+
+ # Attribute n uses Python identifier n
+ __n = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, u'n'), 'n', '__httpchercheurs_edf_comlogicielsefficas_T_Matrice_Symetrique_double_n', pyxb.binding.datatypes.int, required=True)
+ __n._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 444, 4)
+ __n._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 444, 4)
+
+ n = property(__n.value, __n.set, None, None)
+
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+ __n.name() : __n
+ })
+Namespace.addCategoryObject('typeBinding', u'T_Matrice_Symetrique_double', T_Matrice_Symetrique_double)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_typeAttendu with content type ELEMENT_ONLY
+class T_typeAttendu (T_into):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_typeAttendu with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_typeAttendu')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 512, 1)
+ _ElementMap = T_into._ElementMap.copy()
+ _AttributeMap = T_into._AttributeMap.copy()
+ # Base type is T_into
+
+ # Element typesimple ({http://chercheurs.edf.com/logiciels/efficas}typesimple) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
+
+ # Element matrice_double ({http://chercheurs.edf.com/logiciels/efficas}matrice_double) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
+
+ # Element matrice_symetrique_double ({http://chercheurs.edf.com/logiciels/efficas}matrice_symetrique_double) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
+
+ # Element tuple ({http://chercheurs.edf.com/logiciels/efficas}tuple) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
+
+ # Element classe_utilisateur ({http://chercheurs.edf.com/logiciels/efficas}classe_utilisateur) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_into
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_typeAttendu', T_typeAttendu)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_OPER with content type ELEMENT_ONLY
+class T_OPER (T_Accas_Common):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_OPER with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_OPER')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 100, 1)
+ _ElementMap = T_Accas_Common._ElementMap.copy()
+ _AttributeMap = T_Accas_Common._AttributeMap.copy()
+ # Base type is T_Accas_Common
+
+ # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}typeCree uses Python identifier typeCree
+ __typeCree = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'typeCree'), 'typeCree', '__httpchercheurs_edf_comlogicielsefficas_T_OPER_httpchercheurs_edf_comlogicielsefficastypeCree', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 7, 1), )
+
+
+ typeCree = property(__typeCree.value, __typeCree.set, None, None)
+
+
+ # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}subroutine uses Python identifier subroutine
+ __subroutine = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'subroutine'), 'subroutine', '__httpchercheurs_edf_comlogicielsefficas_T_OPER_httpchercheurs_edf_comlogicielsefficassubroutine', AT_subroutine, unicode_default=u'None')
+ __subroutine._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 60, 1)
+ __subroutine._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 106, 4)
+
+ subroutine = property(__subroutine.value, __subroutine.set, None, None)
+
+ _ElementMap.update({
+ __typeCree.name() : __typeCree
+ })
+ _AttributeMap.update({
+ __subroutine.name() : __subroutine
+ })
+Namespace.addCategoryObject('typeBinding', u'T_OPER', T_OPER)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PROC with content type ELEMENT_ONLY
+class T_PROC (T_Accas_Common):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_PROC with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_PROC')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 116, 1)
+ _ElementMap = T_Accas_Common._ElementMap.copy()
+ _AttributeMap = T_Accas_Common._AttributeMap.copy()
+ # Base type is T_Accas_Common
+
+ # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}subroutine uses Python identifier subroutine
+ __subroutine = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'subroutine'), 'subroutine', '__httpchercheurs_edf_comlogicielsefficas_T_PROC_httpchercheurs_edf_comlogicielsefficassubroutine', AT_subroutine, unicode_default=u'None')
+ __subroutine._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 60, 1)
+ __subroutine._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 119, 4)
+
+ subroutine = property(__subroutine.value, __subroutine.set, None, None)
+
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+ __subroutine.name() : __subroutine
+ })
+Namespace.addCategoryObject('typeBinding', u'T_PROC', T_PROC)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_FACT with content type ELEMENT_ONLY
+class T_FACT (T_Accas_Common):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_FACT with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_FACT')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 139, 1)
+ _ElementMap = T_Accas_Common._ElementMap.copy()
+ _AttributeMap = T_Accas_Common._AttributeMap.copy()
+ # Base type is T_Accas_Common
+
+ # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}statut uses Python identifier statut
+ __statut = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'statut'), 'statut', '__httpchercheurs_edf_comlogicielsefficas_T_FACT_httpchercheurs_edf_comlogicielsefficasstatut', AT_statut, unicode_default=u'o')
+ __statut._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 57, 1)
+ __statut._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 142, 4)
+
+ statut = property(__statut.value, __statut.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}max_occurs uses Python identifier max_occurs
+ __max_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'max_occurs'), 'max_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_FACT_httpchercheurs_edf_comlogicielsefficasmax_occurs', AT_max_occurs, unicode_default=u'1')
+ __max_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 58, 1)
+ __max_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 144, 4)
+
+ max_occurs = property(__max_occurs.value, __max_occurs.set, None, None)
+
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}min_occurs uses Python identifier min_occurs
+ __min_occurs = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'min_occurs'), 'min_occurs', '__httpchercheurs_edf_comlogicielsefficas_T_FACT_httpchercheurs_edf_comlogicielsefficasmin_occurs', AT_min_occurs, unicode_default=u'1')
+ __min_occurs._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 59, 1)
+ __min_occurs._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 143, 4)
+
+ min_occurs = property(__min_occurs.value, __min_occurs.set, None, None)
+
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+ __statut.name() : __statut,
+ __max_occurs.name() : __max_occurs,
+ __min_occurs.name() : __min_occurs
+ })
+Namespace.addCategoryObject('typeBinding', u'T_FACT', T_FACT)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_BLOC with content type ELEMENT_ONLY
+class T_BLOC (T_Accas_Common):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_BLOC with content type ELEMENT_ONLY"""
+ _TypeDefinition = None
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_ELEMENT_ONLY
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_BLOC')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 158, 1)
+ _ElementMap = T_Accas_Common._ElementMap.copy()
+ _AttributeMap = T_Accas_Common._AttributeMap.copy()
+ # Base type is T_Accas_Common
+
+ # Element doc ({http://chercheurs.edf.com/logiciels/efficas}doc) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element regles ({http://chercheurs.edf.com/logiciels/efficas}regles) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element SIMP ({http://chercheurs.edf.com/logiciels/efficas}SIMP) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element {http://chercheurs.edf.com/logiciels/efficas}condition uses Python identifier condition
+ __condition = pyxb.binding.content.ElementDeclaration(pyxb.namespace.ExpandedName(Namespace, u'condition'), 'condition', '__httpchercheurs_edf_comlogicielsefficas_T_BLOC_httpchercheurs_edf_comlogicielsefficascondition', False, pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 45, 1), )
+
+
+ condition = property(__condition.value, __condition.set, None, None)
+
+
+ # Element FACT ({http://chercheurs.edf.com/logiciels/efficas}FACT) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Element BLOC ({http://chercheurs.edf.com/logiciels/efficas}BLOC) inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+
+ # Attribute nom inherited from {http://chercheurs.edf.com/logiciels/efficas}T_Accas.Common
+ _ElementMap.update({
+ __condition.name() : __condition
+ })
+ _AttributeMap.update({
+
+ })
+Namespace.addCategoryObject('typeBinding', u'T_BLOC', T_BLOC)
+
+
+# Complex type {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur_username with content type SIMPLE
+class T_classe_utilisateur_username (pyxb.binding.basis.complexTypeDefinition):
+ """Complex type {http://chercheurs.edf.com/logiciels/efficas}T_classe_utilisateur_username with content type SIMPLE"""
+ _TypeDefinition = T_classe_utilisateur_name
+ _ContentTypeTag = pyxb.binding.basis.complexTypeDefinition._CT_SIMPLE
+ _Abstract = False
+ _ExpandedName = pyxb.namespace.ExpandedName(Namespace, u'T_classe_utilisateur_username')
+ _XSDLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 376, 1)
+ _ElementMap = {}
+ _AttributeMap = {}
+ # Base type is T_classe_utilisateur_name
+
+ # Attribute {http://chercheurs.edf.com/logiciels/efficas}nom uses Python identifier nom
+ __nom = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(Namespace, u'nom'), 'nom', '__httpchercheurs_edf_comlogicielsefficas_T_classe_utilisateur_username_httpchercheurs_edf_comlogicielsefficasnom', AT_nom, required=True)
+ __nom._DeclarationLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 51, 1)
+ __nom._UseLocation = pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 379, 4)
+
+ nom = property(__nom.value, __nom.set, None, None)
+
+ _ElementMap.update({
+
+ })
+ _AttributeMap.update({
+ __nom.name() : __nom
+ })
+Namespace.addCategoryObject('typeBinding', u'T_classe_utilisateur_username', T_classe_utilisateur_username)
+
+
+cata = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'cata'), T_cata, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 5, 1))
+Namespace.addCategoryObject('elementBinding', cata.name().localName(), cata)
+
+regles = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'regles'), T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 6, 1))
+Namespace.addCategoryObject('elementBinding', regles.name().localName(), regles)
+
+fonction_utilisateur = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur'), T_fonction_python, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 10, 1))
+Namespace.addCategoryObject('elementBinding', fonction_utilisateur.name().localName(), fonction_utilisateur)
+
+commandes = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'commandes'), T_commandes, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 11, 1))
+Namespace.addCategoryObject('elementBinding', commandes.name().localName(), commandes)
+
+validators = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'validators'), T_validators, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 39, 1))
+Namespace.addCategoryObject('elementBinding', validators.name().localName(), validators)
+
+PlageValeur = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur'), T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 40, 1))
+Namespace.addCategoryObject('elementBinding', PlageValeur.name().localName(), PlageValeur)
+
+portee = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'portee'), T_portee, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 44, 1), unicode_default=u'None')
+Namespace.addCategoryObject('elementBinding', portee.name().localName(), portee)
+
+condition = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'condition'), T_fonction_python, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 45, 1))
+Namespace.addCategoryObject('elementBinding', condition.name().localName(), condition)
+
+into = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'into'), T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 49, 1))
+Namespace.addCategoryObject('elementBinding', into.name().localName(), into)
+
+A_CLASSER = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER'), T_predicat2, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 257, 1))
+Namespace.addCategoryObject('elementBinding', A_CLASSER.name().localName(), A_CLASSER)
+
+tuple = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'tuple'), T_tuple, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 467, 1))
+Namespace.addCategoryObject('elementBinding', tuple.name().localName(), tuple)
+
+doc = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'doc'), T_doc, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1))
+Namespace.addCategoryObject('elementBinding', doc.name().localName(), doc)
+
+typeCree = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeCree'), T_classe_utilisateur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 7, 1))
+Namespace.addCategoryObject('elementBinding', typeCree.name().localName(), typeCree)
+
+ValeurDef = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 8, 1))
+Namespace.addCategoryObject('elementBinding', ValeurDef.name().localName(), ValeurDef)
+
+ValeurSugg = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 9, 1))
+Namespace.addCategoryObject('elementBinding', ValeurSugg.name().localName(), ValeurSugg)
+
+SIMP = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'SIMP'), T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 43, 1))
+Namespace.addCategoryObject('elementBinding', SIMP.name().localName(), SIMP)
+
+borne_sup = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_sup'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 46, 1))
+Namespace.addCategoryObject('elementBinding', borne_sup.name().localName(), borne_sup)
+
+borne_inf = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_inf'), T_typeAttendu, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 47, 1))
+Namespace.addCategoryObject('elementBinding', borne_inf.name().localName(), borne_inf)
+
+AU_MOINS_UN = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 258, 1))
+Namespace.addCategoryObject('elementBinding', AU_MOINS_UN.name().localName(), AU_MOINS_UN)
+
+AU_PLUS_UN = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 259, 1))
+Namespace.addCategoryObject('elementBinding', AU_PLUS_UN.name().localName(), AU_PLUS_UN)
+
+ENSEMBLE = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 260, 1))
+Namespace.addCategoryObject('elementBinding', ENSEMBLE.name().localName(), ENSEMBLE)
+
+EXCLUS = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 261, 1))
+Namespace.addCategoryObject('elementBinding', EXCLUS.name().localName(), EXCLUS)
+
+PRESENT_ABSENT = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 269, 1))
+Namespace.addCategoryObject('elementBinding', PRESENT_ABSENT.name().localName(), PRESENT_ABSENT)
+
+PRESENT_PRESENT = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 270, 1))
+Namespace.addCategoryObject('elementBinding', PRESENT_PRESENT.name().localName(), PRESENT_PRESENT)
+
+UN_PARMI = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI'), T_predicat1, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 271, 1))
+Namespace.addCategoryObject('elementBinding', UN_PARMI.name().localName(), UN_PARMI)
+
+matrice_double = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_double'), T_Matrice_double, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 465, 1))
+Namespace.addCategoryObject('elementBinding', matrice_double.name().localName(), matrice_double)
+
+matrice_symetrique_double = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double'), T_Matrice_Symetrique_double, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 466, 1))
+Namespace.addCategoryObject('elementBinding', matrice_symetrique_double.name().localName(), matrice_symetrique_double)
+
+classe_utilisateur = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur'), T_classe_utilisateur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 468, 1))
+Namespace.addCategoryObject('elementBinding', classe_utilisateur.name().localName(), classe_utilisateur)
+
+OPER = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'OPER'), T_OPER, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 99, 1))
+Namespace.addCategoryObject('elementBinding', OPER.name().localName(), OPER)
+
+PROC = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PROC'), T_PROC, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 110, 1))
+Namespace.addCategoryObject('elementBinding', PROC.name().localName(), PROC)
+
+FACT = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'FACT'), T_FACT, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 123, 1))
+Namespace.addCategoryObject('elementBinding', FACT.name().localName(), FACT)
+
+BLOC = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'BLOC'), T_BLOC, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 157, 1))
+Namespace.addCategoryObject('elementBinding', BLOC.name().localName(), BLOC)
+
+typeAttendu = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu'), T_name, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 41, 1))
+Namespace.addCategoryObject('elementBinding', typeAttendu.name().localName(), typeAttendu)
+
+typesimple = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typesimple'), T_simple, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 464, 1))
+Namespace.addCategoryObject('elementBinding', typesimple.name().localName(), typesimple)
+
+classeUtilisateurName = pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'classeUtilisateurName'), T_classe_utilisateur_username, abstract=pyxb.binding.datatypes.boolean(1), location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 42, 1))
+Namespace.addCategoryObject('elementBinding', classeUtilisateurName.name().localName(), classeUtilisateurName)
+
+
+
+T_cata._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'commandes'), T_commandes, scope=T_cata, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 11, 1)))
+
+def _BuildAutomaton ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton
+ del _BuildAutomaton
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 68, 3))
+ counters.add(cc_0)
+ states = []
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_0, False))
+ symbol = pyxb.binding.content.ElementUse(T_cata._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'commandes')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 68, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ st_0._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, True, containing_state=None)
+T_cata._Automaton = _BuildAutomaton()
+
+
+
+
+T_commandes._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'OPER'), T_OPER, scope=T_commandes, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 99, 1)))
+
+T_commandes._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PROC'), T_PROC, scope=T_commandes, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 110, 1)))
+
+def _BuildAutomaton_ ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_
+ del _BuildAutomaton_
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 72, 2))
+ counters.add(cc_0)
+ states = []
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_0, False))
+ symbol = pyxb.binding.content.ElementUse(T_commandes._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'OPER')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 73, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_0, False))
+ symbol = pyxb.binding.content.ElementUse(T_commandes._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PROC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 74, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ st_1._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, True, containing_state=None)
+T_commandes._Automaton = _BuildAutomaton_()
+
+
+
+
+T_PlageValeur._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_sup'), T_typeAttendu, scope=T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 46, 1)))
+
+T_PlageValeur._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'borne_inf'), T_typeAttendu, scope=T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 47, 1)))
+
+T_PlageValeur._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'into'), T_into, scope=T_PlageValeur, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 49, 1)))
+
+def _BuildAutomaton_2 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_2
+ del _BuildAutomaton_2
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 81, 4))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 82, 4))
+ counters.add(cc_1)
+ states = []
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_0, False))
+ symbol = pyxb.binding.content.ElementUse(T_PlageValeur._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'borne_sup')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 81, 4))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_1, False))
+ symbol = pyxb.binding.content.ElementUse(T_PlageValeur._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'borne_inf')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 82, 4))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_PlageValeur._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'into')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 84, 3))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ st_2._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, True, containing_state=None)
+T_PlageValeur._Automaton = _BuildAutomaton_2()
+
+
+
+
+T_predicat2._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'p1'), T_predicat1, scope=T_predicat2, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 252, 3)))
+
+T_predicat2._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'p2'), AT_nom, scope=T_predicat2, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 253, 3)))
+
+def _BuildAutomaton_3 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_3
+ del _BuildAutomaton_3
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ states = []
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_predicat2._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'p1')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 252, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_predicat2._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'p2')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 253, 3))
+ st_1 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ st_1._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_predicat2._Automaton = _BuildAutomaton_3()
+
+
+
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER'), T_predicat2, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 257, 1)))
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 258, 1)))
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 259, 1)))
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 260, 1)))
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 261, 1)))
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 269, 1)))
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 270, 1)))
+
+T_regles._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI'), T_predicat1, scope=T_regles, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 271, 1)))
+
+def _BuildAutomaton_4 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_4
+ del _BuildAutomaton_4
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ states = []
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'A_CLASSER')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 274, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'AU_MOINS_UN')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 275, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'AU_PLUS_UN')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 276, 3))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'ENSEMBLE')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 277, 3))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'EXCLUS')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 278, 3))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_ABSENT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 286, 3))
+ st_5 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_5)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PRESENT_PRESENT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 287, 3))
+ st_6 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_6)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_regles._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'UN_PARMI')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 288, 3))
+ st_7 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_7)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_4._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_5._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_6._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ ]))
+ transitions.append(fac.Transition(st_1, [
+ ]))
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ transitions.append(fac.Transition(st_7, [
+ ]))
+ st_7._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_regles._Automaton = _BuildAutomaton_4()
+
+
+
+
+T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur'), T_fonction_python, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 10, 1)))
+
+T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typesimple'), T_simple, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 464, 1)))
+
+T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_double'), T_Matrice_double, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 465, 1)))
+
+T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double'), T_Matrice_Symetrique_double, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 466, 1)))
+
+T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'tuple'), T_tuple, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 467, 1)))
+
+T_into._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur'), T_classe_utilisateur, scope=T_into, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 468, 1)))
+
+def _BuildAutomaton_5 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_5
+ del _BuildAutomaton_5
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 504, 3))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 505, 3))
+ counters.add(cc_1)
+ cc_2 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 506, 3))
+ counters.add(cc_2)
+ cc_3 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 507, 3))
+ counters.add(cc_3)
+ cc_4 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 508, 3))
+ counters.add(cc_4)
+ states = []
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_0, False))
+ symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typesimple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 504, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_1, False))
+ symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 505, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_2, False))
+ symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 506, 3))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_3, False))
+ symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'tuple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 507, 3))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_4, False))
+ symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 508, 3))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_into._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'fonction_utilisateur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 509, 3))
+ st_5 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_5)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_2, True) ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_3, True) ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_4, True) ]))
+ st_4._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ st_5._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, True, containing_state=None)
+T_into._Automaton = _BuildAutomaton_5()
+
+
+
+
+T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'doc'), T_doc, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1)))
+
+T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'regles'), T_regles, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 6, 1)))
+
+T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'SIMP'), T_SIMP, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 43, 1)))
+
+T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'FACT'), T_FACT, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 123, 1)))
+
+T_Accas_Common._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'BLOC'), T_BLOC, scope=T_Accas_Common, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 157, 1)))
+
+def _BuildAutomaton_6 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_6
+ del _BuildAutomaton_6
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ counters.add(cc_1)
+ states = []
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_Accas_Common._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_4._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_Accas_Common._Automaton = _BuildAutomaton_6()
+
+
+
+
+T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'doc'), T_doc, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 4, 1)))
+
+T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef'), T_typeAttendu, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 8, 1)))
+
+T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg'), T_typeAttendu, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 9, 1)))
+
+T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'validators'), T_validators, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 39, 1)))
+
+T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur'), T_PlageValeur, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 40, 1)))
+
+T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu'), T_name, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 41, 1)))
+
+T_SIMP._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'portee'), T_portee, scope=T_SIMP, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 44, 1), unicode_default=u'None'))
+
+def _BuildAutomaton_7 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_7
+ del _BuildAutomaton_7
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 169, 3))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 170, 3))
+ counters.add(cc_1)
+ cc_2 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 175, 3))
+ counters.add(cc_2)
+ cc_3 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 176, 3))
+ counters.add(cc_3)
+ cc_4 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 177, 3))
+ counters.add(cc_4)
+ cc_5 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 179, 3))
+ counters.add(cc_5)
+ states = []
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 169, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'portee')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 170, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'ValeurDef')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 175, 3))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'ValeurSugg')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 176, 3))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'PlageValeur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 177, 3))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typeAttendu')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 178, 3))
+ st_5 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_5)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_5, False))
+ symbol = pyxb.binding.content.ElementUse(T_SIMP._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'validators')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 179, 3))
+ st_6 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_6)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_5, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_5, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_2, True) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_2, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_2, False) ]))
+ transitions.append(fac.Transition(st_5, [
+ fac.UpdateInstruction(cc_2, False) ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_3, True) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_3, False) ]))
+ transitions.append(fac.Transition(st_5, [
+ fac.UpdateInstruction(cc_3, False) ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_4, True) ]))
+ transitions.append(fac.Transition(st_5, [
+ fac.UpdateInstruction(cc_4, False) ]))
+ st_4._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_6, [
+ ]))
+ st_5._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_6, [
+ fac.UpdateInstruction(cc_5, True) ]))
+ st_6._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_SIMP._Automaton = _BuildAutomaton_7()
+
+
+
+
+def _BuildAutomaton_8 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_8
+ del _BuildAutomaton_8
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 516, 5))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 517, 5))
+ counters.add(cc_1)
+ cc_2 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 518, 5))
+ counters.add(cc_2)
+ cc_3 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 519, 5))
+ counters.add(cc_3)
+ cc_4 = fac.CounterCondition(min=0L, max=None, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 520, 5))
+ counters.add(cc_4)
+ states = []
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_0, False))
+ symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typesimple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 516, 5))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_1, False))
+ symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 517, 5))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_2, False))
+ symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'matrice_symetrique_double')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 518, 5))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_3, False))
+ symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'tuple')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 519, 5))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = set()
+ final_update.add(fac.UpdateInstruction(cc_4, False))
+ symbol = pyxb.binding.content.ElementUse(T_typeAttendu._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'classe_utilisateur')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 520, 5))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_2, True) ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_3, True) ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_4, True) ]))
+ st_4._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, True, containing_state=None)
+T_typeAttendu._Automaton = _BuildAutomaton_8()
+
+
+
+
+T_OPER._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'typeCree'), T_classe_utilisateur, scope=T_OPER, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 7, 1)))
+
+def _BuildAutomaton_9 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_9
+ del _BuildAutomaton_9
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ counters.add(cc_1)
+ states = []
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_OPER._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'typeCree')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 104, 5))
+ st_5 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_5)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ st_4._set_transitionSet(transitions)
+ transitions = []
+ st_5._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_OPER._Automaton = _BuildAutomaton_9()
+
+
+
+
+def _BuildAutomaton_10 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_10
+ del _BuildAutomaton_10
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ counters.add(cc_1)
+ states = []
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_PROC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_4._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_PROC._Automaton = _BuildAutomaton_10()
+
+
+
+
+def _BuildAutomaton_11 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_11
+ del _BuildAutomaton_11
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ counters.add(cc_1)
+ states = []
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_FACT._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ st_4._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_FACT._Automaton = _BuildAutomaton_11()
+
+
+
+
+T_BLOC._AddElement(pyxb.binding.basis.element(pyxb.namespace.ExpandedName(Namespace, u'condition'), T_fonction_python, scope=T_BLOC, location=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 45, 1)))
+
+def _BuildAutomaton_12 ():
+ # Remove this helper function from the namespace after it is invoked
+ global _BuildAutomaton_12
+ del _BuildAutomaton_12
+ import pyxb.utils.fac as fac
+
+ counters = set()
+ cc_0 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ counters.add(cc_0)
+ cc_1 = fac.CounterCondition(min=0L, max=1, metadata=pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ counters.add(cc_1)
+ states = []
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'regles')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 89, 3))
+ st_0 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_0)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'doc')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 90, 3))
+ st_1 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_1)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'BLOC')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 92, 4))
+ st_2 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_2)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'FACT')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 93, 4))
+ st_3 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_3)
+ final_update = None
+ symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'SIMP')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 94, 4))
+ st_4 = fac.State(symbol, is_initial=True, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_4)
+ final_update = set()
+ symbol = pyxb.binding.content.ElementUse(T_BLOC._UseForTag(pyxb.namespace.ExpandedName(Namespace, u'condition')), pyxb.utils.utility.Location('/home/A96028/EchangesEric/EssaiExt/model.xsd', 162, 5))
+ st_5 = fac.State(symbol, is_initial=False, final_update=final_update, is_unordered_catenation=False)
+ states.append(st_5)
+ transitions = []
+ transitions.append(fac.Transition(st_0, [
+ fac.UpdateInstruction(cc_0, True) ]))
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_0, False) ]))
+ st_0._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_1, [
+ fac.UpdateInstruction(cc_1, True) ]))
+ transitions.append(fac.Transition(st_2, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_3, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ transitions.append(fac.Transition(st_4, [
+ fac.UpdateInstruction(cc_1, False) ]))
+ st_1._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ st_2._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ st_3._set_transitionSet(transitions)
+ transitions = []
+ transitions.append(fac.Transition(st_2, [
+ ]))
+ transitions.append(fac.Transition(st_3, [
+ ]))
+ transitions.append(fac.Transition(st_4, [
+ ]))
+ transitions.append(fac.Transition(st_5, [
+ ]))
+ st_4._set_transitionSet(transitions)
+ transitions = []
+ st_5._set_transitionSet(transitions)
+ return fac.Automaton(states, counters, False, containing_state=None)
+T_BLOC._Automaton = _BuildAutomaton_12()
+
+
+classeUtilisateurName._setSubstitutionGroup(typeAttendu)
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import sys,os
+import raw.efficas as efficas
+import types
+
+sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
+sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..','UiQT5')))
+
+
+from Accas import *
+
+
+# Attention pas d heritage possible (cf doc pyxbe)
+
+dictSIMPEficasXML= { 'typ' : 'typeAttendu', 'statut' : 'statut',
+ 'min_occurs': 'min' , 'max_occurs' : 'max',
+ 'homo' : 'homo' , 'position' : 'portee',
+ 'validators': 'validators' , 'sug' : 'valeur_sugg',
+ 'defaut' : 'ValeurDef' , 'into' : ('PlageValeur','into'),
+ 'val_min' : ('PlageValeur','borne_inf') , 'val_max' : ('PlageValeur','borne_sup'),
+ 'ang' : ('doc','ang') , 'fr' : ('doc','fr',) ,
+ 'docu' : ('doc','docu'),}
+
+dictSIMPXMLEficas = {'doc' : {'fr' : 'fr' , 'ang' : 'ang' , 'docu' : 'docu' },
+ 'PlageValeur' : {'borne_sup' : 'val_max' , 'into' : 'into' , 'borne_inf' : 'val_min' ,},
+ 'statut' : 'statut' , 'validators' : 'validators' , 'homo' : 'homo' ,
+ 'ValeurDef' : 'defaut' , 'min' : 'min_occurs' ,
+ 'valeur_sugg' : 'sug' , 'portee' : 'position' , 'max' : 'max_occurs' , }
+
+
+# ------------------------------
+class monSIMP (efficas.T_SIMP):
+# ------------------------------
+
+ def explore(self):
+ print "je passe dans explore pour SIMP ", self.nom
+ self.dictArgsEficas={}
+ self.dictArgsEficas['typ']=self.typeAttendu
+ for nomXMLArg in dir(self) :
+ if nomXMLArg in dictSIMPXMLEficas.keys() :
+ nomEficasArg=dictSIMPXMLEficas[nomXMLArg]
+ argu=getattr(self,nomXMLArg)
+ if argu==None : continue
+ if type(nomEficasArg) == types.DictionaryType:
+ for nomXML in nomEficasArg.keys():
+ arguDecoupe=getattr(argu,nomXML)
+ nomEficasDecoupe=nomEficasArg[nomXML]
+ self.dictArgsEficas[nomEficasDecoupe]=arguDecoupe
+ else :
+ self.dictArgsEficas[nomEficasArg] = argu
+
+ #if argNew != None : print argNew
+ self.objAccas=A_SIMP.SIMP(**self.dictArgsEficas)
+ self.objAccas.nom=self.nom
+
+ def getAccasEquivalent(self):
+ return self.nom, self.objAccas
+
+# ------------------------------
+class monPROC(efficas.T_PROC):
+# ------------------------------
+ def explore(self):
+ print "je passe dans explore pour PROC ", self.nom
+ self.dictConstruction={}
+ self.dictConstruction['nom']=self.nom
+
+ for obj in self.content():
+ if hasattr(obj,'explore') : obj.explore ()
+ if hasattr(obj,'getAccasEquivalent') :
+ nom,objetAccas=obj.getAccasEquivalent()
+ self.dictConstruction[nom]=objetAccas
+ self.dictConstruction['op']=None
+ self.objAccas=A_PROC.PROC(**self.dictConstruction)
+ print dir(self.objAccas)
+ print self.objAccas.entites
+
+
+# ------------------------------
+class monFACT(efficas.T_FACT):
+# ------------------------------
+ def explore(self):
+ #print "je passe dans explore pour FACT ", self.nom
+ self.dictConstruction={}
+ for obj in self.content():
+ if hasattr(obj,'explore') : obj.explore
+ if hasattr(obj,'creeAccasEquivalent') :
+ nom,objetAccas=obj.creeAccasEquivalent()
+ self.dictConstruction[nom]=objetAccas
+ self.objAccas=A_FACT.FACT(**self.dictConstruction)
+
+ def getAccasEquivalent(self):
+ return self.nom, self.objAccas
+
+
+# ------------------------------
+class monCata(efficas.T_cata):
+# ------------------------------
+ def exploreCata(self):
+ # On positionne le contexte ACCAS
+ self.JdC = JDC_CATA (code = 'MED', execmodul = None,)
+ objAExplorer=self.commandes[0]
+ for obj in objAExplorer.content():
+ if hasattr(obj,'explore') : obj.explore()
+
+
+
+efficas.T_SIMP._SetSupersedingClass(monSIMP)
+efficas.T_FACT._SetSupersedingClass(monFACT)
+efficas.T_PROC._SetSupersedingClass(monPROC)
+efficas.T_cata._SetSupersedingClass(monCata)
+
+if __name__ == "__main__":
+# print dir(efficas)
+# print dir(efficas.T_SIMP)
+
+
+ xml = open('Cata_MED_FAM.xml').read()
+ SchemaMed = efficas.CreateFromDocument(xml)
+ SchemaMed.exploreCata()
+
+ #print dir(efficas.T_SIMP)
+ #print dir(efficas.T_SIMP)
+
+ #for maCommande in monCata.commandes :
+ # for monProc in maCommande.PROC:
+ # for monFact in monProc.FACT:
+ # for simp in monFact.SIMP:
+ # simp.creeAccasEquivalent()
-# -*- coding: utf-8 -*-
+#### -*- coding: utf-8 -*-
# Copyright (C) 2007-2021 EDF R&D
#
# This library is free software; you can redistribute it and/or
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
from Traducteur.parseur import FactNode
-from Traducteur.load import jdcSet
+from Traducteur.load import jdcSet
import logging
dict_commande={}
#--------------------------------------------------------------------------
def traitementRayon(jdc):
#--------------------------------------------------------------------------
-
+
if "DEFI_FONCTION" not in jdcSet : return
for c in jdc.root.childNodes:
- if c.name != "DEFI_FONCTION" : continue
- monTexte=jdc.getLines()[c.lineno-1]
- monNomVariable=monTexte.split("=")[0]
- aExecuter=monNomVariable+'=0'
- dict_commande[monNomVariable]=c
- exec aExecuter in dict_contexte
+ if c.name != "DEFI_FONCTION" : continue
+ monTexte=jdc.getLines()[c.lineno-1]
+ monNomVariable=monTexte.split("=")[0]
+ aExecuter=monNomVariable+'=0'
+ dict_commande[monNomVariable]=c
+ exec aExecuter in dict_contexte
liste_MC=(("CALC_G","R_INF_FO"),("CALC_G","R_SUP_FO"),("CALC_G","MODULE_FO"))
liste_achanger = chercheValeurSelonGenea2 (jdc,liste_MC)
liste_MC=(("CALC_THETA","THETA_3D","R_INF_FO"),("CALC_THETA","THETA_3D","R_SUP_FO"),("CALC_THETA","THETA_3D","MODULE_FO"))
liste_achanger2 = chercheValeurSelonGenea3 (jdc,liste_MC)
liste_achanger=liste_achanger+liste_achanger2
for item in liste_achanger :
- commande=dict_commande[item]
- changeValeurABSCNiveau1(commande,jdc)
+ commande=dict_commande[item]
+ changeValeurABSCNiveau1(commande,jdc)
#----------------------------------
def changeValeurABSCNiveau1(c,jdc):
#----------------------------------
for child in c.childNodes:
- if child.name != "NOM_PARA":continue
- MonTexte=child.getText(jdc)
- if len(MonTexte.splitlines()) > 1 :
- print "Le Traducteur ne sait pas gerer"
- assert(0)
- MonTexte=jdc.getLines()[child.lineno-1]
- debut=MonTexte.find("NOM_PARA")
- debChaine=MonTexte[0:debut+8]
- ancien=MonTexte[debut+8:]
- egal,nomval,fin=ancien.split("'",2)
- nouvelleLigne=debChaine+egal+"'ABSC'"+fin
- jdc.getLines()[child.lineno-1]=nouvelleLigne
- logging.info("renommage parametre ABSC ligne %d",child.lineno-1)
+ if child.name != "NOM_PARA":continue
+ MonTexte=child.getText(jdc)
+ if len(MonTexte.splitlines()) > 1 :
+ print "Le Traducteur ne sait pas gerer"
+ assert(0)
+ MonTexte=jdc.getLines()[child.lineno-1]
+ debut=MonTexte.find("NOM_PARA")
+ debChaine=MonTexte[0:debut+8]
+ ancien=MonTexte[debut+8:]
+ egal,nomval,fin=ancien.split("'",2)
+ nouvelleLigne=debChaine+egal+"'ABSC'"+fin
+ jdc.getLines()[child.lineno-1]=nouvelleLigne
+ logging.info("renommage parametre ABSC ligne %d",child.lineno-1)
return
-
+
#--------------------------------------------------------------------------
def chercheValeurSelonGenea2(jdc,liste_cherche_valeur):
#
#--------------------------------------------------------------------------
liste_valeurs=[]
for genea in liste_cherche_valeur:
- profondeur=len(genea)
- if profondeur > 2 :
- print "la methode chercheValeurSelonGenea ne convient"
- print "pas pour cette généalogie"
- assert(0)
- command=genea[0]
- fact=genea[1]
-
- for c in jdc.root.childNodes:
- if c.name != command:continue
- for mc in c.childNodes:
- if mc.name != fact:continue
- MonTexte=mc.getText(jdc)
- try :
- #if ( 1) :
- exec MonTexte in dict_contexte
- monNomVar=MonTexte.split("=")[1]
- monNomVarOk=monNomVar
- i=-1
- while (monNomVar[i] == "," or monNomVar[i] == " ") :
- monNomVarOk=monNomVar[0:i]
- i=i-1
- monNomVar=monNomVarOk
- i=0
- while (monNomVar[i] == " ") :
- monNomVarOk=monNomVar[1:]
- i=i+1
- monNomVar=monNomVarOk
- if monNomVar not in liste_valeurs : liste_valeurs.append(monNomVar)
- except :
- #else :
- logging.error("Pb pour renommer le parametre ABSC dans defi_fonctions selon calcg")
- pass
+ profondeur=len(genea)
+ if profondeur > 2 :
+ print "la methode chercheValeurSelonGenea ne convient"
+ print "pas pour cette genealogie"
+ assert(0)
+ command=genea[0]
+ fact=genea[1]
+
+ for c in jdc.root.childNodes:
+ if c.name != command:continue
+ for mc in c.childNodes:
+ if mc.name != fact:continue
+ MonTexte=mc.getText(jdc)
+ try :
+ #if ( 1) :
+ exec MonTexte in dict_contexte
+ monNomVar=MonTexte.split("=")[1]
+ monNomVarOk=monNomVar
+ i=-1
+ while (monNomVar[i] == "," or monNomVar[i] == " ") :
+ monNomVarOk=monNomVar[0:i]
+ i=i-1
+ monNomVar=monNomVarOk
+ i=0
+ while (monNomVar[i] == " ") :
+ monNomVarOk=monNomVar[1:]
+ i=i+1
+ monNomVar=monNomVarOk
+ if monNomVar not in liste_valeurs : liste_valeurs.append(monNomVar)
+ except :
+ #else :
+ logging.error("Pb pour renommer le parametre ABSC dans defi_fonctions selon calcg")
+ pass
return liste_valeurs
-
+
#--------------------------------------------------------------------------
def chercheValeurSelonGenea3(jdc,liste_cherche_valeur):
#--------------------------------------------------------------------------
liste_valeurs=[]
for genea in liste_cherche_valeur:
- profondeur=len(genea)
- if profondeur > 3 :
- print "la methode chercheValeurSelonGenea ne convient"
- print "pas pour cette généalogie"
- assert(0)
- command=genea[0]
- fact=genea[1]
- mc=genea[2]
-
- for c in jdc.root.childNodes:
- if c.name != command : continue
- for mcf in c.childNodes:
- if mcf.name != fact : continue
- l=mcf.childNodes[:]
- for ll in l:
- for lc in ll.childNodes:
- if lc.name !=mc : continue
- MonTexte=lc.getText(jdc)
- try :
- #if ( 1) :
- exec MonTexte in dict_contexte
- #monNomVar=MonTexte.split("=")[1][0:-1]
- monNomVar=MonTexte.split("=")[1]
- monNomVarOk=monNomVar
- i=-1
- while (monNomVar[i] == "," or monNomVar[i] == " ") :
- monNomVarOk=monNomVar[0:i]
- i=i-1
- monNomVar=monNomVarOk
- i=0
- while (monNomVar[i] == " ") :
- monNomVarOk=monNomVar[1:]
- i=i+1
- monNomVar=monNomVarOk
- if monNomVar not in liste_valeurs : liste_valeurs.append(monNomVar)
- except :
- #else :
- logging.error("Pb pour renommer le parametre ABSC dans defi_fonctions selon calcg")
- pass
- return liste_valeurs
-
+ profondeur=len(genea)
+ if profondeur > 3 :
+ print "la methode chercheValeurSelonGenea ne convient"
+ print "pas pour cette genealogie"
+ assert(0)
+ command=genea[0]
+ fact=genea[1]
+ mc=genea[2]
+ for c in jdc.root.childNodes:
+ if c.name != command : continue
+ for mcf in c.childNodes:
+ if mcf.name != fact : continue
+ l=mcf.childNodes[:]
+ for ll in l:
+ for lc in ll.childNodes:
+ if lc.name !=mc : continue
+ MonTexte=lc.getText(jdc)
+ try :
+ #if ( 1) :
+ exec MonTexte in dict_contexte
+ #monNomVar=MonTexte.split("=")[1][0:-1]
+ monNomVar=MonTexte.split("=")[1]
+ monNomVarOk=monNomVar
+ i=-1
+ while (monNomVar[i] == "," or monNomVar[i] == " ") :
+ monNomVarOk=monNomVar[0:i]
+ i=i-1
+ monNomVar=monNomVarOk
+ i=0
+ while (monNomVar[i] == " ") :
+ monNomVarOk=monNomVar[1:]
+ i=i+1
+ monNomVar=monNomVarOk
+ if monNomVar not in liste_valeurs : liste_valeurs.append(monNomVar)
+ except :
+ #else :
+ logging.error("Pb pour renommer le parametre ABSC dans defi_fonctions selon calcg")
+ pass
+ return liste_valeurs
from Traducteur.utils import lineToDict
import logging
from Traducteur.dictErreurs import ecritErreur
-from Traducteur.load import jdcSet
+from Traducteur.load import jdcSet
from Traducteur.renamemocle import decaleLignesdeNBlancs
from Traducteur.removemocle import removeMotCleInFact
from Traducteur import regles
if command not in jdcSet : return
boolChange=0
for c in jdc.root.childNodes:
- if c.name != command : continue
- trouveUnMC=0
- for mc in c.childNodes:
- if mc.name != motcle : continue
- trouveUnMC=1
- TexteMC=mc.getText(jdc)
- liste_ligne_MC=TexteMC.splitlines()
- indexLigneGlob=mc.lineno-1
- indexTexteMC=0
- while indexLigneGlob < mc.endline :
- if indexTexteMC > len(liste_ligne_MC)-1 : break
- MaLigneGlob=jdc.getLines()[indexLigneGlob]
- MaLigneTexte=liste_ligne_MC[indexTexteMC]
- for Valeur in DictNouvVal :
- MaLigneTexteDict=lineToDict(MaLigneTexte)
- trouvecol=MaLigneTexte.find(Valeur)
- if trouvecol > -1:
- trouve=(Valeur==MaLigneTexteDict[trouvecol])
- else:
- trouve=False
- if trouve:
- debut=MaLigneGlob.find(motcle)
- if debut==-1 : debut=0
- Nouveau=MaLigneGlob[debut:].replace(Valeur,DictNouvVal[Valeur])
- Nouveau=MaLigneGlob[0:debut]+Nouveau
- jdc.getLines()[indexLigneGlob]=Nouveau
- MaLigneTexte=Nouveau # raccourci honteux mais ...
- MaLigneGlob=Nouveau
- if Valeur in liste :
- ecritErreur((command,motcle,Valeur),indexLigneGlob)
- else :
- logging.info("Changement de %s par %s dans %s ligne %d",Valeur,DictNouvVal[Valeur],command,indexLigneGlob)
- boolChange=1
- indexLigneGlob=indexLigneGlob+1
- indexTexteMC=indexTexteMC+1
- if (trouveUnMC == 0) and ( defaut == 1):
- ecritErreur((command,motcle,"DEFAUT"),c.lineno)
+ if c.name != command : continue
+ trouveUnMC=0
+ for mc in c.childNodes:
+ if mc.name != motcle : continue
+ trouveUnMC=1
+ TexteMC=mc.getText(jdc)
+ liste_ligne_MC=TexteMC.splitlines()
+ indexLigneGlob=mc.lineno-1
+ indexTexteMC=0
+ while indexLigneGlob < mc.endline :
+ if indexTexteMC > len(liste_ligne_MC)-1 : break
+ MaLigneGlob=jdc.getLines()[indexLigneGlob]
+ MaLigneTexte=liste_ligne_MC[indexTexteMC]
+ for Valeur in DictNouvVal :
+ MaLigneTexteDict=lineToDict(MaLigneTexte)
+ trouvecol=MaLigneTexte.find(Valeur)
+ if trouvecol > -1:
+ trouve=(Valeur==MaLigneTexteDict[trouvecol])
+ else:
+ trouve=False
+ if trouve:
+ debut=MaLigneGlob.find(motcle)
+ if debut==-1 : debut=0
+ Nouveau=MaLigneGlob[debut:].replace(Valeur,DictNouvVal[Valeur])
+ Nouveau=MaLigneGlob[0:debut]+Nouveau
+ jdc.getLines()[indexLigneGlob]=Nouveau
+ MaLigneTexte=Nouveau # raccourci honteux mais ...
+ MaLigneGlob=Nouveau
+ if Valeur in liste :
+ ecritErreur((command,motcle,Valeur),indexLigneGlob)
+ else :
+ logging.info("Changement de %s par %s dans %s ligne %d",Valeur,DictNouvVal[Valeur],command,indexLigneGlob)
+ boolChange=1
+ indexLigneGlob=indexLigneGlob+1
+ indexTexteMC=indexTexteMC+1
+ if (trouveUnMC == 0) and ( defaut == 1):
+ ecritErreur((command,motcle,"DEFAUT"),c.lineno)
if boolChange : jdc.reset(jdc.getSource())
-
+
#--------------------------------------------------------------------------------
def changementValeurDsMCF(jdc,command,fact,motcle,DictNouvVal,liste=(),ensemble=regles.SansRegle,defaut=0):
#--------------------------------------------------------------------------------
for ll in l:
trouveUnMC=0
for mc in ll.childNodes:
- if mc.name != motcle:continue
+ if mc.name != motcle:continue
if ensemble.verif(c) == 0 : continue
trouveUnMC=1
TexteMC=mc.getText(jdc)
MaLigneTexte=Nouveau # raccourci honteux mais ...
MaLigneGlob=Nouveau
if Valeur in liste :
- ecritErreur((command,fact,motcle,Valeur),indexLigneGlob)
+ ecritErreur((command,fact,motcle,Valeur),indexLigneGlob)
else :
- logging.info("Changement de %s par %s dans %s ligne %d",Valeur,DictNouvVal[Valeur],command,indexLigneGlob)
+ logging.info("Changement de %s par %s dans %s ligne %d",Valeur,DictNouvVal[Valeur],command,indexLigneGlob)
boolChange=1
indexLigneGlob=indexLigneGlob+1
indexTexteMC=indexTexteMC+1
if (trouveUnMC == 0) and ( defaut == 1):
- logging.warning("OPTION (defaut) de CALCG à verifier ligne %s" ,c.lineno )
- ecritErreur((command,fact,motcle,"DEFAUT"),c.lineno)
+ logging.warning("OPTION (defaut) de CALCG a verifier ligne %s" ,c.lineno )
+ ecritErreur((command,fact,motcle,"DEFAUT"),c.lineno)
if boolChange : jdc.reset(jdc.getSource())
-
+
#--------------------------------------------------------------------------------
def changementValeurDsMCFSiRegle(jdc,command,fact,motcle,DictNouvVal,liste_regles,defaut=0):
#--------------------------------------------------------------------------------
mesRegles=regles.ensembleRegles(liste_regles)
liste=()
changementValeurDsMCF(jdc,command,fact,motcle,DictNouvVal,liste,mesRegles,defaut)
-
+
#---------------------------------------------------------------------------------------
def changementValeurDsMCFAvecAvertissement(jdc, command, fact,motcle,DictNouvVal,liste):
#---------------------------------------------------------------------------------------
if command not in jdcSet : return
defaut=0
- if liste[-1] == "defaut" :
- defaut=1
+ if liste[-1] == "defaut" :
+ defaut=1
changementValeurDsMCF(jdc,command,fact,motcle,DictNouvVal,liste,defaut)
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
if command not in jdcSet : return
defaut=0
- if liste[-1] == "defaut" :
- defaut=1
+ if liste[-1] == "defaut" :
+ defaut=1
changementValeur(jdc,command,motcle,DictNouvVal,liste,defaut)
#--------------------------------------------------------------------------
if command not in jdcSet : return
boolChange=0
for c in jdc.root.childNodes:
- if c.name != command : continue
- for mc in c.childNodes:
- if mc.name != motcle : continue
- indexLigneGlob=mc.lineno-1
- while indexLigneGlob < mc.endline-1 :
- MaLigneTexte = jdc.getLines()[indexLigneGlob]
- MaLigne=MaLigneTexte
- for Valeur in liste :
- debutMC =MaLigne.find(motcle)
- if debutMC ==-1 : debutMC=0
- debut1=MaLigne[0:debutMC]
- chercheLigne=MaLigne[debutMC:]
- trouve=chercheLigne.find(Valeur)
- premier=0
- if trouve > 1 : #on a au moins une quote
- debut=debut1 + chercheLigne[0:trouve-1]
- index = -1
- while (-1 * index) < len(debut) :
- if (debut[index] == "(") :
- premier = 1
- if index == -1 :
- index=len(debut)
- else :
- index=index+1
- break
- if (debut[index] == "," ) :
- break
- if (debut[index] != " " ) :
- assert(0)
- index = index -1
- debLigne = debut[0:index]
- fin=trouve+len(Valeur)+1
- if premier == 1 and chercheLigne[fin] == ',': fin = fin + 1 # on supprime la ,
- finLigne = chercheLigne[fin:]
- MaLigne_tmp=debLigne+finLigne
- # traitement ligne commancant par ,
- if len(MaLigne_tmp.strip()) > 0 :
- if MaLigne_tmp.strip()[0]==',' :
- MaLigne=MaLigne_tmp.strip()[1:]
- else :
- MaLigne=MaLigne_tmp[0:]
- else :
- MaLigne=MaLigne_tmp[0:]
- boolChange=1
- jdc.getLines()[indexLigneGlob]=MaLigne
- indexLigneGlob=indexLigneGlob+1
+ if c.name != command : continue
+ for mc in c.childNodes:
+ if mc.name != motcle : continue
+ indexLigneGlob=mc.lineno-1
+ while indexLigneGlob < mc.endline-1 :
+ MaLigneTexte = jdc.getLines()[indexLigneGlob]
+ MaLigne=MaLigneTexte
+ for Valeur in liste :
+ debutMC =MaLigne.find(motcle)
+ if debutMC ==-1 : debutMC=0
+ debut1=MaLigne[0:debutMC]
+ chercheLigne=MaLigne[debutMC:]
+ trouve=chercheLigne.find(Valeur)
+ premier=0
+ if trouve > 1 : #on a au moins une quote
+ debut=debut1 + chercheLigne[0:trouve-1]
+ index = -1
+ while (-1 * index) < len(debut) :
+ if (debut[index] == "(") :
+ premier = 1
+ if index == -1 :
+ index=len(debut)
+ else :
+ index=index+1
+ break
+ if (debut[index] == "," ) :
+ break
+ if (debut[index] != " " ) :
+ assert(0)
+ index = index -1
+ debLigne = debut[0:index]
+ fin=trouve+len(Valeur)+1
+ if premier == 1 and chercheLigne[fin] == ',': fin = fin + 1 # on supprime la ,
+ finLigne = chercheLigne[fin:]
+ MaLigne_tmp=debLigne+finLigne
+ # traitement ligne commancant par ,
+ if len(MaLigne_tmp.strip()) > 0 :
+ if MaLigne_tmp.strip()[0]==',' :
+ MaLigne=MaLigne_tmp.strip()[1:]
+ else :
+ MaLigne=MaLigne_tmp[0:]
+ else :
+ MaLigne=MaLigne_tmp[0:]
+ boolChange=1
+ jdc.getLines()[indexLigneGlob]=MaLigne
+ indexLigneGlob=indexLigneGlob+1
if boolChange : jdc.reset(jdc.getSource())
#----------------------------------------------
motcle=genea[1]
chaine="CO"
for c in jdc.root.childNodes:
- if c.name != macro : continue
- for mcF in c.childNodes:
- if mcF.name != fact : continue
- l=mcF.childNodes[:]
- l.reverse()
- for ll in l:
- trouveValeur=0
- for mc in ll.childNodes:
- if mc.name != motcle:continue
- TexteMC=mc.getText(jdc)
- liste_ligne_MC=TexteMC.splitlines()
- indexLigneGlob=mc.lineno-2
- trouveTexteMC=0
- trouveegal=0
- trouvechaine=0
- trouveparent=0
- trouvequote=0
- while indexLigneGlob < mc.endline :
- indexLigneGlob=indexLigneGlob+1
- MaLigneTexte=jdc.getLines()[indexLigneGlob]
+ if c.name != macro : continue
+ for mcF in c.childNodes:
+ if mcF.name != fact : continue
+ l=mcF.childNodes[:]
+ l.reverse()
+ for ll in l:
+ trouveValeur=0
+ for mc in ll.childNodes:
+ if mc.name != motcle:continue
+ TexteMC=mc.getText(jdc)
+ liste_ligne_MC=TexteMC.splitlines()
+ indexLigneGlob=mc.lineno-2
+ trouveTexteMC=0
+ trouveegal=0
+ trouvechaine=0
+ trouveparent=0
+ trouvequote=0
+ while indexLigneGlob < mc.endline :
+ indexLigneGlob=indexLigneGlob+1
+ MaLigneTexte=jdc.getLines()[indexLigneGlob]
+
+ # on commence par chercher TABLE par exemple
+ # si on ne trouve pas on passe a la ligne suivante
+ if ( trouveTexteMC == 0 ) :
+ indice=MaLigneTexte.find(motcle)
+ if indice < 0 : continue
+ trouveTexteMC=1
+ else :
+ indice=0
+
+ # on cherche =
+ aChercher=MaLigneTexte[indice:]
+ if (trouveegal == 0 ):
+ indice=aChercher.find("=")
+ if indice < 0 : continue
+ trouveegal = 1
+ else :
+ indice = 0
+
+ # on cherche CO
+ aChercher2=aChercher[indice:]
+ if (trouvechaine == 0 ):
+ indice=aChercher2.find(chaine)
+ if indice < 0 : continue
+ trouvechaine = 1
+ else :
+ indice = 0
- # on commence par chercher TABLE par exemple
- # si on ne trouve pas on passe a la ligne suivante
- if ( trouveTexteMC == 0 ) :
- indice=MaLigneTexte.find(motcle)
- if indice < 0 : continue
- trouveTexteMC=1
- else :
- indice=0
+ #on cherche (
+ aChercher3=aChercher2[indice:]
+ if (trouveparent == 0 ):
+ indice=aChercher3.find('(')
+ if indice < 0 : continue
+ trouveparent = 1
+ else :
+ indice = 0
- # on cherche =
- aChercher=MaLigneTexte[indice:]
- if (trouveegal == 0 ):
- indice=aChercher.find("=")
- if indice < 0 : continue
- trouveegal = 1
- else :
- indice = 0
+ #on cherche la '
+ aChercher4=aChercher3[indice:]
+ if (trouvequote == 0 ):
+ indice=aChercher4.find("'")
+ indice2=aChercher4.find('"')
+ if (indice < 0) and (indice2 < 0): continue
+ if (indice < 0) : indice=indice2
+ trouvequote = 1
+ else :
+ indice = 0
- # on cherche CO
- aChercher2=aChercher[indice:]
- if (trouvechaine == 0 ):
- indice=aChercher2.find(chaine)
- if indice < 0 : continue
- trouvechaine = 1
- else :
- indice = 0
+ trouveValeur=1
+ aChercher5=aChercher4[indice+1:]
+ indice=aChercher5.find("'")
+ if indice < 0 : indice=aChercher5.find('"')
+ valeur=aChercher5[:indice]
+ break
- #on cherche (
- aChercher3=aChercher2[indice:]
- if (trouveparent == 0 ):
- indice=aChercher3.find('(')
- if indice < 0 : continue
- trouveparent = 1
- else :
- indice = 0
-
- #on cherche la '
- aChercher4=aChercher3[indice:]
- if (trouvequote == 0 ):
- indice=aChercher4.find("'")
- indice2=aChercher4.find('"')
- if (indice < 0) and (indice2 < 0): continue
- if (indice < 0) : indice=indice2
- trouvequote = 1
- else :
- indice = 0
+ if trouveValeur==0 :
+ logging.error("Pb de traduction pour MACR_LIGNE_COUPE : Pas de nom de Concept identifiable")
+ return
- trouveValeur=1
- aChercher5=aChercher4[indice+1:]
- indice=aChercher5.find("'")
- if indice < 0 : indice=aChercher5.find('"')
- valeur=aChercher5[:indice]
- break
-
- if trouveValeur==0 :
- logging.error("Pb de traduction pour MACR_LIGNE_COUPE : Pas de nom de Concept identifiable")
- return
-
- if boolChange :
- jdc.reset(jdc.getSource())
- logging.error("Pb du traduction pour MACR_LIGNE_COUPE : Deux noms de Concept possibles")
- return
+ if boolChange :
+ jdc.reset(jdc.getSource())
+ logging.error("Pb du traduction pour MACR_LIGNE_COUPE : Deux noms de Concept possibles")
+ return
- boolChange=1
- ligneaTraiter=jdc.getLines()[c.lineno-1]
- debut=ligneaTraiter[0:c.colno]
- suite=valeur+"="
- fin=ligneaTraiter[c.colno:]
- ligne=debut+suite+fin
- jdc.getLines()[c.lineno-1]=ligne
- nbBlanc=len(valeur)+1
- if c.lineno < c.endline:
- decaleLignesdeNBlancs(jdc,c.lineno,c.endline-1,nbBlanc)
+ boolChange=1
+ ligneaTraiter=jdc.getLines()[c.lineno-1]
+ debut=ligneaTraiter[0:c.colno]
+ suite=valeur+"="
+ fin=ligneaTraiter[c.colno:]
+ ligne=debut+suite+fin
+ jdc.getLines()[c.lineno-1]=ligne
+ nbBlanc=len(valeur)+1
+ if c.lineno < c.endline:
+ decaleLignesdeNBlancs(jdc,c.lineno,c.endline-1,nbBlanc)
if boolChange : jdc.reset(jdc.getSource())
#----------------------------------------------
#
import logging
-from Traducteur.load import jdcSet
+from Traducteur.load import jdcSet
def ecritErreur(listeGena,ligne=None) :
maCle=maCle+"_"+Mot
#try :
if ( 1 == 1) :
- maClef=maCle[1:]
+ maClef=maCle[1:]
if maClef in dict_erreurs :
- if ligne != None :
- logging.warning("ligne %d : %s ",ligne,dict_erreurs[maClef])
- else :
- logging.warning("%s",dict_erreurs[maClef])
+ if ligne != None :
+ logging.warning("ligne %d : %s ",ligne,dict_erreurs[maClef])
+ else :
+ logging.warning("%s",dict_erreurs[maClef])
else :
- maCle=""
- for Mot in listeGena[:-1] :
- maCle=maCle+"_"+Mot
- maClef=maCle[1:]
- maClef=maCle+"_"+"VALEUR"
- if maClef in dict_erreurs :
- if ligne != None :
- logging.warning("ligne %d : %s ",ligne,dict_erreurs[maClef])
- else :
- logging.warning("%s",dict_erreurs[maClef])
+ maCle=""
+ for Mot in listeGena[:-1] :
+ maCle=maCle+"_"+Mot
+ maClef=maCle[1:]
+ maClef=maCle+"_"+"VALEUR"
+ if maClef in dict_erreurs :
+ if ligne != None :
+ logging.warning("ligne %d : %s ",ligne,dict_erreurs[maClef])
+ else :
+ logging.warning("%s",dict_erreurs[maClef])
#except :
# pass
commands= jdc.root.childNodes[:]
commands.reverse()
for c in commands:
- if type(listeCommande)==list:
+ if type(listeCommande)==list:
for Mot in listeCommande :
- if c.name != Mot :continue
- ecritErreur((Mot,),c.lineno)
+ if c.name != Mot :continue
+ ecritErreur((Mot,),c.lineno)
else:
if c.name != listeCommande :continue
ecritErreur((listeCommande,),c.lineno)
for ll in l:
for n in ll.childNodes:
if n.name != mocle:
- continue
- else :
- ecritErreur((command,fact,mocle,),c.lineno)
+ continue
+ else :
+ ecritErreur((command,fact,mocle,),c.lineno)
def genereErreurMCF(jdc,command,fact):
for c in jdc.root.childNodes:
for mc in c.childNodes:
if mc.name != fact:
continue
- else :
+ else :
ecritErreur((command,fact,),c.lineno)
def genereErreurValeur(jdc,command,fact,list_valeur):
if mc.name != fact:continue
texte=mc.getText(jdc)
for valeur in list_valeur:
- trouve=texte.find(valeur)
- if trouve > -1 :
- logging.warning("%s doit etre supprimee ou modifiee dans %s : ligne %d",valeur,c.name,mc.lineno)
+ trouve=texte.find(valeur)
+ if trouve > -1 :
+ logging.warning("%s doit etre supprimee ou modifiee dans %s : ligne %d",valeur,c.name,mc.lineno)
def genereErreurValeurDsMCF(jdc,command,fact,mocle,list_valeur):
for c in jdc.root.childNodes:
texte=n.getText(jdc)
for valeur in list_valeur:
trouve=texte.find(valeur)
- if trouve > -1 :
+ if trouve > -1 :
logging.warning("%s doit etre supprimee ou modifiee dans %s : ligne %d",valeur,c.name,n.lineno)
#
import logging
from Traducteur.parseur import FactNode
-from Traducteur.load import jdcSet
+from Traducteur.load import jdcSet
from Traducteur.dictErreurs import ecritErreur
from Traducteur import regles
debug=0
#-----------------------------------
def insereMotCle(jdc,recepteur,texte):
#-----------------------------------
-# appelle la methode selon la classe
+# appelle la methode selon la classe
# du recepteur
if recepteur.name not in jdcSet : return
if recepteur.__class__.__name__ == "Command" :
- if debug : print " Ajout de ", texte, "dans la commande : " ,recepteur.name
- insereMotCleDansCommande(jdc,recepteur,texte)
- return
+ if debug : print (" Ajout de ", texte, "dans la commande : " ,recepteur.name )
+ insereMotCleDansCommande(jdc,recepteur,texte)
+ return
#--------------------------------------------
# insere le texte comme 1er mot cle
# de la commande
if command.name not in jdcSet : return
- if debug : print "insereMotCle ", texte , " dans ", command.name
+ if debug : print ("insereMotCle ", texte , " dans ", command.name)
numcol=chercheDebut1Mot(jdc,command)
if numcol > 0 :
- jdc.splitLine(command.lineno,numcol)
+ jdc.splitLine(command.lineno,numcol)
indice = -1
- while texte[indice] == " " or texte[indice] == "\n":
- indice = indice -1
+ while texte[indice] == " " or texte[indice] == "\n":
+ indice = indice -1
if texte[indice] != "," : texte=texte+","
texteinfo=texte
texte=texte+'\n'
- jdc.addLine(texte,command.lineno)
+ jdc.addLine(texte,command.lineno)
logging.info("Insertion de : %s ligne %d", texteinfo,command.lineno)
- if numcol > 0 : # Les mots clefs etaient sur la même ligne
+ if numcol > 0 : # Les mots clefs etaient sur la meme ligne
jdc.joinLineandNext(command.lineno)
#-------------------------------------------------------------
def insereMotCleDansFacteur(jdc,facteur,texte,plusieursFois=True):
#----------------------------------------------------------------
- if debug : print "insereMotCle ", texte , " dans ", facteur.name
+ if debug : print ("insereMotCle ", texte , " dans ", facteur.name)
- if texte[-1] == "\n" : texte=texte[0:-1]
+ if texte[-1] == "\n" : texte=texte[0:-1]
ancien=jdc.getLine(facteur.lineno)
# On va chercher la derniere ) pour ajouter avant
# on en met une
indice = -1
- while texte[indice] == " " :
- indice = indice -1
- if texte[indice] != "," :
- texte=texte+","
+ while texte[indice] == " " :
+ indice = indice -1
+ if texte[indice] != "," :
+ texte=texte+","
if (texte.find("#") > -1) and (texte.find("#") < texte.find(",")) :
- texte=texte+"\n,"
-
+ texte=texte+"\n,"
+
texteinfo=texte
texte=texte+"\n"
-
+
ligneaCouper=facteur.lineno
while ligneaCouper < facteur.endline + 1 :
trouve=0
longueur=len(ancien)
indice=ancien.find("_F")
indiceParcours=0
- # pour ne pas tenir compte des autres noms
+ # pour ne pas tenir compte des autres noms
# Attention si 2 MCF sur la meme ligne (la 1ere)
if trouveF == 0 :
if ((ligneaCouper!=facteur.lineno) or ((ancien.find(facteur.name) < indice ) or (ancien.find(facteur.name) < 0))) :
- trouveF=1
- indiceParcours=indice + 2
- # attention pour regler DEFI_FONCTION ..
+ trouveF=1
+ indiceParcours=indice + 2
+ # attention pour regler DEFI_FONCTION ..
else :
- indiceDeCoupe=indiceDeCoupe+indice+2
- ancien=ancien[indice +2:]
- continue
+ indiceDeCoupe=indiceDeCoupe+indice+2
+ ancien=ancien[indice +2:]
+ continue
if trouveF == 1 :
indiceDeCoupe=indiceDeCoupe+indice
# print "indice de Parcours" ,indiceParcours
- # print ancien[indiceParcours]
- # print ancien[indiceParcours+1]
- # print ancien[indiceParcours+2]
+ # print ancien[indiceParcours]
+ # print ancien[indiceParcours+1]
+ # print ancien[indiceParcours+2]
while indiceParcours < longueur :
if ancien[indiceParcours] == "(" :
trouveP=1
- # print "trouve"
+ # print ("trouve".
break
if ancien[indiceParcours] != " " :
trouveP=0
- # print "mouv"
+ # print ("mouv")
break
indiceParcours = indiceParcours+1
trouve = trouveP * trouveF
#-----------------------------------
def chercheDebut1Mot(jdc,command):
#-----------------------------------
-# Retourne le numero de colonne si le 1er mot clef est
+# Retourne le numero de colonne si le 1er mot clef est
# sur la meme ligne que le mot clef facteur
# -1 sinon
assert (command.childNodes != [])
debut=-1
node1=command.childNodes[0]
if hasattr(node1,"lineno"):
- if node1.lineno == command.lineno :
- debut=node1.colno
+ if node1.lineno == command.lineno :
+ debut=node1.colno
else:
- debut=chercheDebutFacteur(jdc,command)
- if debut == -1 and debug : print "attention!!! pb pour trouver le debut dans ", command
+ debut=chercheDebutFacteur(jdc,command)
+ if debut == -1 and debug : print ("attention!!! pb pour trouver le debut dans ", command)
return debut
#-----------------------------------
debut=ligne.find("_F")
if debut > -1 : debut=debut + 3
return debut
-
+
#-----------------------------------
def chercheAlignement(jdc,command):
#-----------------------------------
# Retourne le nb de blanc
# pour aligner sur le 1er mot clef fils
- assert (command.childNodes != [])
+ assert (command.childNodes != [])
node1=command.childNodes[0]
nbBlanc=node1.colno
return " "*nbBlanc
# appelle insereMotCle pour ajouter le texte
#
boolChange=0
- if estunFacteur :
- texte=nouveau+"=_F(),"
+ if estunFacteur :
+ texte=nouveau+"=_F(),"
else :
- texte=nouveau
+ texte=nouveau
if nomcommande not in jdcSet : return
commands= jdc.root.childNodes[:]
commands.reverse()
mesRegles=regles.ensembleRegles(liste_regles)
chercheOperInsereFacteur(jdc,nomcommande,nouveau,mesRegles,estunFacteur)
-
+
#---------------------------------------------------------------------------------------------------------
def chercheOperInsereFacteurSiRegleAvecAvertissement(jdc,nomcommande,nouveau,liste_regles, estunFacteur=1):
#---------------------------------------------------------------------------------------------------------
# appelle insereMotCle pour ajouter le texte
#
if commande not in jdcSet : return
- if estunFacteur :
- texte=nouveau+"=_F(),"
+ if estunFacteur :
+ texte=nouveau+"=_F(),"
else :
- texte=nouveau
+ texte=nouveau
commands= jdc.root.childNodes[:]
commands.reverse()
boolChange=0
for c in commands:
if c.name != commande : continue
for mcF in c.childNodes:
- if mcF.name != fact : continue
- l=mcF.childNodes[:]
- l.reverse()
- for ll in l:
- if ensemble.verif(ll) == 0 : continue
- boolChange=1
- n=ll.childNodes[0]
- ligneaCouper=n.lineno-1
- numcol=n.colno
- jdc.splitLine(ligneaCouper+1,numcol)
- texte=nouveau+",\n"
- jdc.addLine(texte,ligneaCouper+1)
- logging.info("Insertion de %s dans %s : ligne %d", nouveau,c.name,ligneaCouper+1)
- if numcol > 0 :
- jdc.joinLineandNext(ligneaCouper+1)
+ if mcF.name != fact : continue
+ l=mcF.childNodes[:]
+ l.reverse()
+ for ll in l:
+ if ensemble.verif(ll) == 0 : continue
+ boolChange=1
+ n=ll.childNodes[0]
+ ligneaCouper=n.lineno-1
+ numcol=n.colno
+ jdc.splitLine(ligneaCouper+1,numcol)
+ texte=nouveau+",\n"
+ jdc.addLine(texte,ligneaCouper+1)
+ logging.info("Insertion de %s dans %s : ligne %d", nouveau,c.name,ligneaCouper+1)
+ if numcol > 0 :
+ jdc.joinLineandNext(ligneaCouper+1)
if boolChange : jdc.reset(jdc.getSource())
class JDCTrad:
- """Cet objet conserve toutes les informations relatives à un fichier de commandes .comm"""
+ """Cet objet conserve toutes les informations relatives a un fichier de commandes .comm"""
def __init__(self,src,atraiter):
#----------------------------------------
def reset(self,src):
#-----------------------
- # reconstruction
+ # reconstruction
self.init(src,self.atraiter)
self.parseKeywords()
def getSource(self):
#-----------------------
# retourne la concatenation de
- # toutes les lignes
+ # toutes les lignes
return "".join(self.getLines())
def getLine(self,linenum):
def getLines(self):
#----------------------------
- # retourne toutes les lignes
+ # retourne toutes les lignes
return self.lines
def addLine(self,ligne,numero) :
#----------------------------------------------
# coupe la ligne numeroLigne en 2 a numeroColonne
# ajoute des blancs en debut de 2nde Ligne pour
- # aligner
+ # aligner
numeroLigne = numeroLigne -1
Ldebut=self.lines[0:numeroLigne]
if len(self.lines) > numeroLigne :
- Lfin=self.lines[numeroLigne+1:]
+ Lfin=self.lines[numeroLigne+1:]
else :
- Lfin=[]
+ Lfin=[]
Lsplit=self.lines[numeroLigne]
LigneSplitDebut=Lsplit[0:numeroColonne]+"\n"
LigneSplitFin=" "*numeroColonne+Lsplit[numeroColonne:]
# enleve les blancs de debut de la ligne (numeroLigne +1)
Ldebut=self.lines[0:numeroLigne-1]
if len(self.lines) > numeroLigne :
- Lfin=self.lines[numeroLigne+1:]
+ Lfin=self.lines[numeroLigne+1:]
else :
- Lfin=[]
+ Lfin=[]
ligneMilieuDeb=self.lines[numeroLigne - 1 ]
ligneMilieuDeb=ligneMilieuDeb[0:-1]
ligneMilieuFin=self.lines[numeroLigne]
for i in range(len(ligneMilieuFin)):
if ligneMilieuFin[i] != " " :
- ligneMilieuFin=ligneMilieuFin[i:]
- break
+ ligneMilieuFin=ligneMilieuFin[i:]
+ break
Lmilieu=[ligneMilieuDeb+ligneMilieuFin,]
self.lines=Ldebut+Lmilieu+Lfin
logger=logging.getLogger()
def initialise(flog=None):
- if flog == None :
- MonHome=os.environ['HOME']
- MaDir=MonHome+"/Eficas_install"
- try :
+ if flog == None :
+ MonHome=os.environ['HOME']
+ MaDir=MonHome+"/Eficas_install"
+ try :
os.mkdir(MaDir)
- except :
+ except :
pass
- try :
+ try :
os.listdir(MaDir)
flog=MaDir+"/convert.log"
- except :
+ except :
flog='/tmp/convert.log'
hdlr=logging.FileHandler(flog,'w')
formatter = logging.Formatter('%(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
- logger.addHandler(hdlr)
+ logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
return hdlr
submatch=match[2]
lastpar=match[0]+lastParen(c.src[match[0]:])
if type(submatch[0][0]) ==types.IntType:
- #mot cle facteur isolé
+ #mot cle facteur isole
no=FactNode()
kw.addChild(no)
for ii in range(len(submatch)-1):
#-----------------------
def parseKeywords(root):
#-----------------------
- """A partir d'un arbre contenant des commandes, ajoute les noeuds
+ """A partir d'un arbre contenant des commandes, ajoute les noeuds
fils correspondant aux mocles de la commande
"""
#print "parseKeywords"
visitor.walk(ast, matchFinder)
#print matchFinder.matches
if len(matchFinder.matches) > 1:
- # plusieurs mocles trouvés :
- # un mocle commence au début du keyword (matchFinder.matches[i][0])
- # et finit juste avant le keyword suivant
+ # plusieurs mocles trouves :
+ # un mocle commence au debut du keyword (matchFinder.matches[i][0])
+ # et finit juste avant le keyword suivant
# (matchFinder.matches[i+1][0]])
for i in range(len(matchFinder.matches)-1):
if debug:print "texte:",c.src[matchFinder.matches[i][0]:matchFinder.matches[i+1][0]]
if submatch:
parseFact(matchFinder.matches[i],c,kw)
- # dernier mocle :
- # il commence au debut du dernier keyword
+ # dernier mocle :
+ # il commence au debut du dernier keyword
# (matchFinder.matches[i+1][0]) et
# finit avant la parenthese fermante de la commande (c.lastParen)
parseFact(matchFinder.matches[i+1],c,kw)
elif len(matchFinder.matches) == 1:
- #un seul mocle trouve :
- # il commence au début du keyword (matchFinder.matches[0][0]) et
- # finit juste avant la parenthese fermante de la
+ #un seul mocle trouve :
+ # il commence au debut du keyword (matchFinder.matches[0][0]) et
+ # finit juste avant la parenthese fermante de la
# commande (c.lastParen)
if debug:print "texte:",c.src[matchFinder.matches[0][0]:c.lastParen]
x,y=indexToCoordinates(c.src,matchFinder.matches[0][0])
parseFact(matchFinder.matches[0],c,kw)
else:
pass
-
#----------------------------------------------------------------------------
# exemple type STAT_NON_LINE et RESI_INTER_RELA
for factcible in liste_factcible :
- moveMotCleFromFactToFact(jdc,oper,factsource,mocle,factcible)
+ moveMotCleFromFactToFact(jdc,oper,factsource,mocle,factcible)
removemocle.removeMotCleInFact(jdc,oper,factsource,mocle)
if c.name != oper : continue
cible=None
for mc in c.childNodes:
- if mc.name != factcible :
- continue
- else :
- cible=mc
- break
+ if mc.name != factcible :
+ continue
+ else :
+ cible=mc
+ break
if cible==None :
- if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "cible non trouvée"
- continue
+ if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "cible non trouvée"
+ continue
for mc in c.childNodes:
- source=None
- if mc.name != factsource:
- continue
- else :
- source=mc
- break
+ source=None
+ if mc.name != factsource:
+ continue
+ else :
+ source=mc
+ break
if source==None :
- if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "source non trouvée"
- continue
+ if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "source non trouvée"
+ continue
if debug : print "Changement pour ", oper, " ", factsource, " ",mocle, "cible et source trouvées"
l=source.childNodes[:]
for ll in l:
- for n in ll.childNodes:
- if n.name != mocle:continue
- MonTexte=n.getText(jdc);
- inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
- boolChange=1
- logging.info("Changement de place %s ligne %s vers %s",n.name, n.lineno, cible.name)
+ for n in ll.childNodes:
+ if n.name != mocle:continue
+ MonTexte=n.getText(jdc);
+ inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
+ boolChange=1
+ logging.info("Changement de place %s ligne %s vers %s",n.name, n.lineno, cible.name)
if boolChange : jdc.reset(jdc.getSource())
removemocle.removeMotCleInFact(jdc,oper,factsource,mocle)
if c.name != oper : continue
cible=None
for mc in c.childNodes:
- if mc.name != factcible :
- continue
- else :
- cible=mc
- break
+ if mc.name != factcible :
+ continue
+ else :
+ cible=mc
+ break
if cible==None :
- if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
- continue
+ if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
+ continue
source=None
for mc in c.childNodes:
- if mc.name != mocle:
- continue
- else :
- source=mc
- break
+ if mc.name != mocle:
+ continue
+ else :
+ source=mc
+ break
if source==None :
- if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
- continue
+ if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
+ continue
MonTexte=source.getText(jdc);
boolChange=1
inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte,plusieursFois)
if c.name != oper : continue
cible=None
for mc in c.childNodes:
- if mc.name != factcible :
- continue
- else :
- cible=mc
- break
+ if mc.name != factcible :
+ continue
+ else :
+ cible=mc
+ break
if cible==None :
- if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
- continue
+ if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
+ continue
source=None
for mc in c.childNodes:
- if mc.name != mocle:
- continue
- else :
- source=mc
- break
+ if mc.name != mocle:
+ continue
+ else :
+ source=mc
+ break
if source==None :
- if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
- continue
+ if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
+ continue
MonTexte=source.getText(jdc);
boolChange=1
inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
if boolChange : jdc.reset(jdc.getSource())
-
+
#----------------------------------------------------------------------
def moveMCFToCommand(jdc,command,factsource,commandcible,factcible):
#----------------------------------------------------------------------
# exemple CONTACT en 10
-# CONTACT devient commande DEFI_CONTACT/ZONE
-#
+# CONTACT devient commande DEFI_CONTACT/ZONE
+#
if command not in jdcSet : return
boolChange=0
commands= jdc.root.childNodes[:]
commands.reverse()
for c in commands:
- if c.name != command : continue
- for mcF in c.childNodes:
- if mcF.name != factsource : continue
- l=mcF.getText(jdc)
- texte=l.replace(factsource,factcible)
- texte='xxxx='+commandcible+'('+texte+')\n'
- jdc.splitLine(c.lineno,0)
- jdc.addLine(texte,c.lineno)
- logging.info("Deplacement de %s dans %s ligne %s",factsource,commandcible,c.lineno)
- boolChange=1
+ if c.name != command : continue
+ for mcF in c.childNodes:
+ if mcF.name != factsource : continue
+ l=mcF.getText(jdc)
+ texte=l.replace(factsource,factcible)
+ texte='xxxx='+commandcible+'('+texte+')\n'
+ jdc.splitLine(c.lineno,0)
+ jdc.addLine(texte,c.lineno)
+ logging.info("Deplacement de %s dans %s ligne %s",factsource,commandcible,c.lineno)
+ boolChange=1
if boolChange :
jdc.reset(jdc.getSource())
jdcSet.add(commandcible)
commands= jdc.root.childNodes[:]
commands.reverse()
for c in commands:
- if c.name != command : continue
- list_val=[]
- trouveUnMC=0
- for mc in c.childNodes:
- if mc.name not in listeMc : continue
- val=mc.getText(jdc).split("=")[1].split(",")[0]
- list_val.append(val)
- trouveUnMC=1
- if trouveUnMC :
- TexteMC=factcible+"=("
- for val in list_val : TexteMC=TexteMC+val+","
- TexteMC=TexteMC[:-1]+"),"
- inseremocle.insereMotCle(jdc,c,TexteMC)
- jdc.reset(jdc.getSource())
- boolChange=1
+ if c.name != command : continue
+ list_val=[]
+ trouveUnMC=0
+ for mc in c.childNodes:
+ if mc.name not in listeMc : continue
+ val=mc.getText(jdc).split("=")[1].split(",")[0]
+ list_val.append(val)
+ trouveUnMC=1
+ if trouveUnMC :
+ TexteMC=factcible+"=("
+ for val in list_val : TexteMC=TexteMC+val+","
+ TexteMC=TexteMC[:-1]+"),"
+ inseremocle.insereMotCle(jdc,c,TexteMC)
+ jdc.reset(jdc.getSource())
+ boolChange=1
if boolChange :
jdc.reset(jdc.getSource())
- for mc in listeMc :
- removemocle.removeMotCle(jdc,command,mc)
- jdc.reset(jdc.getSource())
+ for mc in listeMc :
+ removemocle.removeMotCle(jdc,command,mc)
+ jdc.reset(jdc.getSource())
#-----------------------------------------------------
def fusionMotCleInFact(jdc,command,fact,listeMc,new_name,defaut=0):
boolChange=1
if boolChange :
jdc.reset(jdc.getSource())
- for mc in listeMc :
- removemocle.removeMotCleInFact(jdc,command,fact,mc)
- jdc.reset(jdc.getSource())
+ for mc in listeMc :
+ removemocle.removeMotCleInFact(jdc,command,fact,mc)
+ jdc.reset(jdc.getSource())
#-----------------------------------------------------
def fusionMCFToMCF(jdc,command,listeMcF,factcible,defaut=0):
boolChange=1
if boolChange :
jdc.reset(jdc.getSource())
- for mcF in listeMcF :
+ for mcF in listeMcF :
removemocle.removeMotCle(jdc,command,mcF)
jdc.reset(jdc.getSource())
if command not in jdcSet : return
boolChange=0
for c in jdc.root.childNodes:
- if c.name != command : continue
- trouveUnMC=0
- for mc in c.childNodes:
- if mc.name != motcle : continue
- trouveUnMC=1
- TexteMC=mc.getText(jdc)
- indexLigneGlob=mc.lineno-1
- MaLigneGlob=jdc.getLines()[indexLigneGlob]
- Ligne=TexteMC.split('(')[1].split(')')[0].split(',')
- motcle1=mot1+"="+Ligne[0]
- motcle2=mot2+"=("+Ligne[1]+','+Ligne[2]+','+Ligne[3]+')'
- texte=motcle+'=_F('+motcle1+','+motcle2+')'
- num=lastParen(TexteMC)
- Nouveau=MaLigneGlob.replace(TexteMC[0:num],texte)
- jdc.getLines()[indexLigneGlob]=Nouveau
- logging.info("Transformation de %s dans %s ligne %s",motcle,command,c.lineno)
- boolChange=1
+ if c.name != command : continue
+ trouveUnMC=0
+ for mc in c.childNodes:
+ if mc.name != motcle : continue
+ trouveUnMC=1
+ TexteMC=mc.getText(jdc)
+ indexLigneGlob=mc.lineno-1
+ MaLigneGlob=jdc.getLines()[indexLigneGlob]
+ Ligne=TexteMC.split('(')[1].split(')')[0].split(',')
+ motcle1=mot1+"="+Ligne[0]
+ motcle2=mot2+"=("+Ligne[1]+','+Ligne[2]+','+Ligne[3]+')'
+ texte=motcle+'=_F('+motcle1+','+motcle2+')'
+ num=lastParen(TexteMC)
+ Nouveau=MaLigneGlob.replace(TexteMC[0:num],texte)
+ jdc.getLines()[indexLigneGlob]=Nouveau
+ logging.info("Transformation de %s dans %s ligne %s",motcle,command,c.lineno)
+ boolChange=1
if boolChange : jdc.reset(jdc.getSource())
debut=jdc.getLines()[self.lineno-1][self.colno:]
fin = jdc.getLines()[self.endline-1][:self.endcol]
texte=debut
- lignecourante=self.lineno
+ lignecourante=self.lineno
while lignecourante < self.endline -1 :
texte = texte + jdc.getLines()[lignecourante]
lignecourante = lignecourante + 1
- if chaineBlanche(fin) == 0 :
- texte=texte + fin
+ if chaineBlanche(fin) == 0 :
+ texte=texte + fin
if texte[-1] == "\n" :
- texte=texte[0:-1]
+ texte=texte[0:-1]
else:
texte = jdc.getLines()[self.lineno-1][self.colno:self.endcol]
return texte
#------------------------
"""Parse le texte src et retourne un arbre syntaxique (root).
- Cet arbre syntaxique a comme noeuds (childNodes) les commandes à traiter (liste atraiter)
+ Cet arbre syntaxique a comme noeuds (childNodes) les commandes a traiter (liste atraiter)
"""
lines=src.splitlines(1)
maskedSrc=maskStringsAndComments(src)
root=JDCNode(src)
- # (a) dans un premier temps on extrait les commandes et on les insère
- # dans un arbre (root) les noeuds fils sont stockés dans
+ # (a) dans un premier temps on extrait les commandes et on les insere
+ # dans un arbre (root) les noeuds fils sont stockes dans
# root.childNodes (liste)
lineno=0
for line in maskedLines:
if m and (m.group(2) in atraiter):
root.addChild(Command(m.group(2),lineno,m.start(2),m.end(4)))
- #(b) dans un deuxième temps , on récupère le texte complet de la commande
- # jusqu'à la dernière parenthèse fermante
+ #(b) dans un deuxieme temps , on recupere le texte complet de la commande
+ # jusqu'a la derniere parenthese fermante
- # iterateur sur les lignes physiques masquées
+ # iterateur sur les lignes physiques masquees
iterlines=iter(maskedLines)
linenum=0
for c in root.childNodes:
lineno=c.lineno
- colno=c.colno # début de la commande
+ colno=c.colno # debut de la commande
while linenum < lineno:
line=iterlines.next()
linenum=linenum+1
hangingComments ^= line.count('"""') % 2
hangingComments ^= line.count("'''") % 2
-
+
if hangingBraces[0] < 0 or hangingBraces[1] < 0 or hangingBraces[2] < 0:
raise UnbalancedBracesException()
if level == 0:
#derniere parenthese fermante
return i
-
Vérification
"""
return 1
-
+
#------------
class regle :
"""
f = self.fonction(self.list_args)
return f.verif(commande)
-
+
#---------------------
class existeMCFParmi :
#---------------------
"""
bool = 0
for c in commande.childNodes :
- if c.name in self.listeMCF :
+ if c.name in self.listeMCF :
bool = 1
break
return bool
bool = existeMCFParmi.verif(self, commande)
if bool : return 0
return 1
-
+
#----------------------
class existeMCsousMCF :
#----------------------
"""
bool = 0
for mcf in commande.childNodes :
- if mcf.name != self.MCF : continue
+ if mcf.name != self.MCF : continue
l = mcf.childNodes[:]
l.reverse()
for ll in l:
"""
def __init__(self, list_arg):
existeMCsousMCF.__init__(self, list_arg)
-
+
def verif(self, commande):
"""
"""
def __init__(self, list_arg):
existeMCsousMCFcourant.__init__(self, list_arg)
-
+
def verif(self, commande):
"""
if niveau == len(self.genea) : return 1
texte = self.genea[niveau]
for c in commande.childNodes :
- if c.name == texte :
+ if c.name == texte :
niveau = niveau+1
return self.chercheMot(niveau, c)
return None
if niveau == len(self.genea) : return 1
texte = self.genea[niveau]
for c in commande.childNodes :
- if c.name == texte :
+ if c.name == texte :
niveau = niveau+1
return self.chercheMot(niveau, c)
return None
"""
bool = 0
for mcf in commande.childNodes :
- if mcf.name != self.MCF : continue
+ if mcf.name != self.MCF : continue
l = mcf.childNodes[:]
l.reverse()
for ll in l:
class MCsousMCFaPourValeurDansListe :
#----------------------------
"""
- Égalité du mot-clé simple à une valeur dans une liste
+ Égalité du mot-clé simple à une valeur dans une liste
sous le mot-clé facteur
"""
def __init__(self, list_arg):
"""
bool = 0
for mcf in commande.childNodes :
- if mcf.name != self.MCF : continue
+ if mcf.name != self.MCF : continue
l = mcf.childNodes[:]
l.reverse()
for ll in l:
for Val in self.LVal:
if (TexteMC.find(Val) < 0 ): continue
bool = 1
- return bool
+ return bool
#-----------------------------
class MCsousMCFcourantaPourValeurDansListe :
#----------------------------
"""
- Égalité du mot-clé simple à une valeur dans une liste
+ Égalité du mot-clé simple à une valeur dans une liste
sous le mot-clé facteur
"""
def __init__(self, list_arg):
"""
Vérification
"""
- bool = 0
+ bool = 0
l = mcf.childNodes[:]
l.reverse()
for mc in l:
for Val in self.LVal:
if (TexteMC.find(Val) < 0 ): continue
bool = 1
- return bool
+ return bool
#-----------------------------------------
class MCsousMCFcourantnaPasPourValeurDansListe(MCsousMCFcourantaPourValeurDansListe) :
#-----------------------------------------
"""
- Non égalité du mot-clé simple à une valeur dans une liste
+ Non égalité du mot-clé simple à une valeur dans une liste
sous le mot-clé facteur
"""
def __init__(self, list_arg):
MCsousMCFcourantaPourValeurDansListe.__init__(self, list_arg)
-
+
def verif(self, commande):
bool = MCsousMCFcourantaPourValeurDansListe.verif(self, commande)
if bool : return 0
return 1
-
+
#-----------------------------------------
class MCsousMCFnaPasPourValeurDansListe(MCsousMCFaPourValeurDansListe) :
#-----------------------------------------
"""
- Non égalité du mot-clé simple à une valeur dans une liste
+ Non égalité du mot-clé simple à une valeur dans une liste
sous le mot-clé facteur
"""
def __init__(self, list_arg):
MCsousMCFaPourValeurDansListe.__init__(self, list_arg)
-
+
def verif(self, commande):
bool = MCsousMCFaPourValeurDansListe.verif(self, commande)
if bool : return 0
return 1
-
+
#------------------------------
class MCaPourValeur :
#------------------------------
"""
bool = 0
for mc in commande.childNodes :
- if mc.name != self.MC : continue
+ if mc.name != self.MC : continue
TexteMC = mc.getText(self.Jdc)
if (TexteMC.find(self.Val) < 0 ): continue
bool = 1
class MCnaPasPourValeur(MCaPourValeur) :
#-----------------------------------------
"""
- Non égalité du mot-clé à une valeur
+ Non égalité du mot-clé à une valeur
"""
def __init__(self, list_arg):
MCaPourValeur.__init__(self, list_arg)
"""
bool = 0
for mc in commande.childNodes :
- if mc.name != self.MC : continue
+ if mc.name != self.MC : continue
TexteMC = mc.getText(self.Jdc)
#print "TexteMC=",type(TexteMC),TexteMC
#print "LVal=",type(self.LVal),self.LVal
class MCnaPasPourValeurDansListe(MCaPourValeurDansListe) :
#-----------------------------------------
"""
- Non égalité du mot-clé à une valeur dans une liste
+ Non égalité du mot-clé à une valeur dans une liste
"""
def __init__(self, list_arg):
MCaPourValeurDansListe.__init__(self, list_arg)
debug=0
#debug=1
-#on n'a qu'un mocle par commande. On peut donc supprimer le mocle sans trop de précautions (a part iterer a l'envers sur les commandes)
-#avant de supprimer un autre mocle, on remet à jour l'arbre syntaxique (lineno,colno,etc.)
+#on n'a qu'un mocle par commande. On peut donc supprimer le mocle sans trop de precautions (a part iterer a l'envers sur les commandes)
+#avant de supprimer un autre mocle, on remet a jour l'arbre syntaxique (lineno,colno,etc.)
#-----------------------------------------------------------------------
#--------------------------------------------------------------
if command not in jdcSet : return
removeMotCle(jdc,command,mocle,erreur=1)
-
+
#--------------------------------------------------------------------
def removeCommande(jdc,command,ensemble=regles.SansRegle,erreur=0):
if command not in jdcSet : return
mesRegles=regles.ensembleRegles(liste_regles)
removeCommande(jdc,command,mesRegles,1)
-
+
#---------------------------------
def removeMC(jdc,c,mc):
#---------------------------------
jdc.getLines()[mc.lineno-1]=jdc.getLines()[mc.lineno-1][:mc.colno]
jdc.getLines()[mc.endline-1]=jdc.getLines()[mc.endline-1][mc.endcol:]
- #attention : supprimer les lignes à la fin
+ #attention : supprimer les lignes a la fin
jdc.getLines()[mc.lineno:mc.endline-1]=[]
else:
if debug:print "mocle sur une ligne--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:mc.endcol]
#---------------------------------------------------------------------------------
def removeMotCleInFact(jdc,command,fact,mocle,ensemble=regles.SansRegle,erreur=0):
#----------------------------------------------------------------------------------
- # on itere sur les commandes a l'envers pour ne pas polluer
+ # on itere sur les commandes a l'envers pour ne pas polluer
# les numeros de ligne avec les modifications
if command not in jdcSet : return
commands= jdc.root.childNodes[:]
removeMC(jdc,c,n)
if boolChange : jdc.reset(jdc.getSource())
-
+
#------------------------------------------
def fusionne(jdc,numLigne):
#------------------------------------------
texte=jdc.getLines()[numLigne]
fusion=1
while (index < len(texte)) :
- if texte[index] not in (" ",",",")",";","\n") :
- fusion=0
- break
- index=index+1
-
+ if texte[index] not in (" ",",",")",";","\n") :
+ fusion=0
+ break
+ index=index+1
+
if fusion == 0 : return;
texte=jdc.getLines()[numLigne -1]
if texte.find("#") < 0 :
- fusion=1
+ fusion=1
else :
- fusion=0
-
- if fusion :
- jdc.joinLineandNext(numLigne)
+ fusion=0
+
+ if fusion :
+ jdc.joinLineandNext(numLigne)
import logging
import sys
from Traducteur.parseur import FactNode
-from Traducteur.load import jdcSet
+from Traducteur.load import jdcSet
from Traducteur import regles
from Traducteur.dictErreurs import ecritErreur
#debug=1
debug=0
-#on n'a qu'un mocle par commande.
-#en fin de traitement, on remet à jour l'arbre syntaxique (lineno,colno,etc.)
+#on n'a qu'un mocle par commande.
+#en fin de traitement, on remet a jour l'arbre syntaxique (lineno,colno,etc.)
#--------------------------------------------------------------------------------
def renameMotCle(jdc,command,mocle,new_name, erreur=0,ensemble=regles.SansRegle):
boolChange=1
if debug:print "Renommage de:",c.name,mc.name,mc.lineno,mc.colno
if erreur :
- ecritErreur((command,mocle),c.lineno)
+ ecritErreur((command,mocle),c.lineno)
else :
- logging.info("Renommage de: %s %s ligne %d en %s",c.name,mc.name,mc.lineno,new_name)
+ logging.info("Renommage de: %s %s ligne %d en %s",c.name,mc.name,mc.lineno,new_name)
s=jdc.getLines()[mc.lineno-1]
jdc.getLines()[mc.lineno-1]=s[:mc.colno]+new_name+s[mc.colno+len(mocle):]
diff=len(new_name) - len(mocle)
decaleLignesdeNBlancs(jdc,mc.lineno,mc.endline-1,diff)
if boolChange : jdc.reset(jdc.getSource())
-
+
#------------------------------------------------------
def renameMotCleAvecErreur(jdc,command,mocle,new_name):
#------------------------------------------------------
#----------------------------------------------------------
ligne = premiere + 1
while ligne < derniere :
- s=jdc.getLines()[ligne]
- if nbBlanc > 0 :
- jdc.getLines()[ligne] = nbBlanc*" " + s
- else :
- toutblancs=-1*nbBlanc*" "
- if jdc.getLines()[ligne][0:-1*nbBlanc] == toutblancs:
- jdc.getLines()[ligne] = s[-1*nbBlanc:]
- ligne=ligne+1
+ s=jdc.getLines()[ligne]
+ if nbBlanc > 0 :
+ jdc.getLines()[ligne] = nbBlanc*" " + s
+ else :
+ toutblancs=-1*nbBlanc*" "
+ if jdc.getLines()[ligne][0:-1*nbBlanc] == toutblancs:
+ jdc.getLines()[ligne] = s[-1*nbBlanc:]
+ ligne=ligne+1
#---------------------------------------------------------------------------------------------
def renameMotCleInFact(jdc,command,fact,mocle,new_name, ensemble=regles.SansRegle, erreur=0):
jdc.getLines()[n.lineno-1]=s[:n.colno]+new_name+s[n.colno+len(mocle):]
boolChange=1
if erreur :
- ecritErreur((command,fact,mocle),c.lineno)
+ ecritErreur((command,fact,mocle),c.lineno)
else :
- logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
+ logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
if boolChange : jdc.reset(jdc.getSource())
jdc.getLines()[n.lineno-1]=s[:n.colno]+new_name+s[n.colno+len(mocle):]
boolChange=1
if erreur :
- ecritErreur((command,fact,mocle),c.lineno)
+ ecritErreur((command,fact,mocle),c.lineno)
else :
- logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
+ logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
if boolChange : jdc.reset(jdc.getSource())
-
-
+
+
#-----------------------------------------------------------------
def renameCommande(jdc,command,new_name,ensemble=regles.SansRegle):
#-----------------------------------------------------------------
boolChange=0
if debug :
if ensemble != regles.SansRegle :
- logging.info("traitement de %s renomme en %s sous conditions", command, new_name)
+ logging.info("traitement de %s renomme en %s sous conditions", command, new_name)
else :
- logging.info("traitement de %s renomme en %s ", command, new_name)
+ logging.info("traitement de %s renomme en %s ", command, new_name)
for c in jdc.root.childNodes:
if c.name != command:continue
if ensemble.verif(c) == 0 : continue
#-----------------------------------------------------------
def renameCommandeSiRegle(jdc,command,new_name,liste_regles):
#-----------------------------------------------------------
-
+
if command not in jdcSet : return
mesRegles=regles.ensembleRegles(liste_regles)
renameCommande(jdc,command,new_name,mesRegles)
-
+++ /dev/null
-DEBUT();
-
-CALC_NONO(reuse=MSLIN,
- RESULTAT=MSLIN,
- OPTION=('EPSI_NOEU','SIEQ_NOEU','EPEQ_NOEU','SIGM_NOEU',),);
-
-CALC_NONO(reuse=MSLIN,
- RESULTAT=MSLIN,
- OPTION=('AA','EPSI_NOEU','SIEQ_NOEU','EPEQ_NOEU','SIGM_NOEU',),);
-FIN();
"THER_LINEAIRE",
"THER_NON_LINE",
"THER_NON_LINE_MO",
-
+
"CALC_CHAMPNO",
"CALC_METANO",
"CALC_ERREURNO",
-
+
)
dict_erreurs={
suppressionValeurs(jdc,"CALC_CHAMP","ACOUSTIQUE",list(set(lTOUT)-set(lACOUSTIQUE)))
suppressionValeurs(jdc,"CALC_CHAMP","ERREUR",list(set(lTOUT)-set(lERREUR)))
suppressionValeurs(jdc,"CALC_CHAMP","META",list(set(lTOUT)-set(lMETA)))
- ## ajout CALC_META ou CALC_ERREUR
+ ## ajout CALC_META ou CALC_ERREUR
lMOTCLE=[]
lMOTCLE=["reuse","RESULTAT","TOUT_ORDRE","NUME_ORDRE","NUME_MODE","NOEUD_CMP","NOM_CAS",
"INST","FREQ","LIST_INST","LIST_FREQ","LIST_ORDRE","CRITERE","PRECISION","EXCIT"]
llistMETA=list(lMOTCLE)
llistMETA.extend(["META",])
for mc in llistMETA :
- copyMotClefInOperToFact(jdc,"CALC_CHAMP",mc,"TEMPORAIRE")
+ copyMotClefInOperToFact(jdc,"CALC_CHAMP",mc,"TEMPORAIRE")
moveMCFToCommand(jdc,"CALC_CHAMP","TEMPORAIRE","CALC_META","TEMPORAIRE")
for mc in llistMETA :
- moveMotCleFromFactToFather(jdc,"CALC_META","TEMPORAIRE",mc)
+ moveMotCleFromFactToFather(jdc,"CALC_META","TEMPORAIRE",mc)
removeCommandeSiRegle(jdc,"CALC_META",((("META","COMP_INCR","ETAT_INIT"),"nexistepasMCFParmi"),))
renameMotCle(jdc,"CALC_META","META","OPTION")
removeMotCle(jdc,"CALC_META","TEMPORAIRE",pasDeRegle(),0)
llistERREUR=list(lMOTCLE)
llistERREUR.extend(["ERREUR","SOLVEUR","RESU_DUAL","PREC_ESTI","TYPE_ESTI"])
for mc in llistERREUR :
- copyMotClefInOperToFact(jdc,"CALC_CHAMP",mc,"TEMPORAIRE")
+ copyMotClefInOperToFact(jdc,"CALC_CHAMP",mc,"TEMPORAIRE")
moveMCFToCommand(jdc,"CALC_CHAMP","TEMPORAIRE","CALC_ERREUR","TEMPORAIRE")
for mc in llistERREUR :
- moveMotCleFromFactToFather(jdc,"CALC_ERREUR","TEMPORAIRE",mc)
+ moveMotCleFromFactToFather(jdc,"CALC_ERREUR","TEMPORAIRE",mc)
removeCommandeSiRegle(jdc,"CALC_ERREUR",((("ERREUR"),"nexistepasMCFParmi"),))
renameMotCle(jdc,"CALC_ERREUR","ERREUR","OPTION")
removeMotCle(jdc,"CALC_ERREUR","TEMPORAIRE",pasDeRegle(),0)
suppressionValeurs(jdc,"CALC_CHAMPNO","FORCE",list(set(lTOUT)-set(lFORCE)))
suppressionValeurs(jdc,"CALC_CHAMPNO","ERREUR",list(set(lTOUT)-set(lERREUR)))
suppressionValeurs(jdc,"CALC_CHAMPNO","META",list(set(lTOUT)-set(lMETA)))
- ## ajout CALC_METANO ou CALC_ERREURNO
+ ## ajout CALC_METANO ou CALC_ERREURNO
lMOTCLE=[]
lMOTCLE=["reuse","RESULTAT","TOUT_ORDRE","NUME_ORDRE","NUME_MODE","NOEUD_CMP","NOM_CAS",
"INST","FREQ","LIST_INST","LIST_FREQ","LIST_ORDRE","CRITERE","PRECISION","EXCIT"]
llistMETA=list(lMOTCLE)
llistMETA.append("META")
for mc in llistMETA :
- copyMotClefInOperToFact(jdc,"CALC_CHAMPNO",mc,"TEMPORAIRE")
+ copyMotClefInOperToFact(jdc,"CALC_CHAMPNO",mc,"TEMPORAIRE")
moveMCFToCommand(jdc,"CALC_CHAMPNO","TEMPORAIRE","CALC_METANO","TEMPORAIRE")
for mc in llistMETA :
- moveMotCleFromFactToFather(jdc,"CALC_METANO","TEMPORAIRE",mc)
+ moveMotCleFromFactToFather(jdc,"CALC_METANO","TEMPORAIRE",mc)
removeCommandeSiRegle(jdc,"CALC_METANO",((("META"),"nexistepasMCFParmi"),))
renameMotCle(jdc,"CALC_METANO","META","OPTION")
removeMotCle(jdc,"CALC_METANO","TEMPORAIRE",pasDeRegle(),0)
llistERREUR=list(lMOTCLE)
llistERREUR.append("ERREUR")
for mc in llistERREUR :
- copyMotClefInOperToFact(jdc,"CALC_CHAMPNO",mc,"TEMPORAIRE")
+ copyMotClefInOperToFact(jdc,"CALC_CHAMPNO",mc,"TEMPORAIRE")
moveMCFToCommand(jdc,"CALC_CHAMPNO","TEMPORAIRE","CALC_ERREURNO","TEMPORAIRE")
for mc in llistERREUR :
- moveMotCleFromFactToFather(jdc,"CALC_ERREURNO","TEMPORAIRE",mc)
+ moveMotCleFromFactToFather(jdc,"CALC_ERREURNO","TEMPORAIRE",mc)
removeCommandeSiRegle(jdc,"CALC_ERREURNO",((("ERREUR"),"nexistepasMCFParmi"),))
renameMotCle(jdc,"CALC_ERREURNO","ERREUR","OPTION")
removeMotCle(jdc,"CALC_ERREURNO","TEMPORAIRE",pasDeRegle(),0)
#### traitement de FORMULE ##############################
# Rien à faire
-
+
#### traitement de GENE_ACCE_SEISME ##############################
# Rien à faire, n'existe pas en 10
renameMotCleInFact(jdc,"MACRO_MODE_MECA","CALC_FREQ","STOP_FREQ_VIDE","STOP_BANDE_VIDE",pasDeRegle(),0)
# Renommage critere de Sturm
changementValeurDsMCF(jdc,"MACRO_MODE_MECA","VERI_MODE","STURM",{"OUI":"GLOBAL",})
-
+
#### traitement de MACRO_PROJ_BASE ##############################
renameMotCle(jdc,"MACRO_PROJ_BASE","PROFIL","STOCKAGE")
# Renommage de la commande
#### traitement de POST_BORDET ##############################
# Rien à faire
-
+
#### traitement de POST_CHAMP ##############################
# Rien à faire, n'existe pas en 10
"SIMU_POINT_MAT",
"TEST_COMPOR",
"THER_NON_LINE",
- "DEFI_PART_FETI"
+ "DEFI_PART_FETI"
)
dict_erreurs={
#Parse les mocles des commandes
parseKeywords(root)
-
+
#### traitement de DEFI_PART_PA_OPS ##############################
genereErreurPourCommande(jdc,"DEFI_PART_PA_OPS")
#### traitement de AFFE_CHAR_MECA ##############################
# Suppression du mot-clé METHODE
- removeMotCle(jdc,"AFFE_CHAR_MECA","METHODE",pasDeRegle(),0)
+ removeMotCle(jdc,"AFFE_CHAR_MECA","METHODE",pasDeRegle(),0)
# Suppression des mot-clés LIAISON_XFEM
removeMotCle(jdc,"AFFE_CHAR_MECA","LIAISON_XFEM",pasDeRegle(),0)
removeMotCle(jdc,"AFFE_CHAR_MECA","CONTACT_XFEM",pasDeRegle(),0)
#### traitement de CREA_MAILLAGE ##############################
renameMotCle(jdc,"CREA_MAILLAGE","CREA_GROUP_MA","CREA_MAILLE")
genereErreurMCF(jdc,"CREA_MAILLAGE","ECLA_PG")
-
+
lMCLEF=['COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1',
- 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE','QUAD_LINE',
+ 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE','QUAD_LINE',
'REPERE','RESTREINT','PENTA15_18']
genereErreurMCF(jdc,"CREA_MAILLAGE","DETR_GROUP_MA")
removeMotCleInFactSiRegle(jdc,"CREA_MAILLAGE","DETR_GROUP_MA","NB_MAILLE",((lMCLEF,"nexistepasMCFParmi"),))
removeMotCleInFact(jdc,"DEBUT","CODE","NOM",pasDeRegle(),0)
#### traitement de DEFI_COMPOR ##############################
- genereErreurValeur(jdc,"DEFI_COMPOR","LOCALISATION",["'RL'",])
+ genereErreurValeur(jdc,"DEFI_COMPOR","LOCALISATION",["'RL'",])
genereErreurValeur(jdc,"DEFI_COMPOR","RELATION_KIT",["'RVMIS_ISOT_CINE'",])
genereErreurValeurDsMCF(jdc,"DEFI_COMPOR","MULTIFIBRE","RELATION",["'LABORD_1D'"])
genereErreurMCF(jdc,"DEFI_COMPOR","POLYCRISTAL")
genereErreurMCF(jdc,"DEFI_MATER_GC","MAZARS")
#### traitement de DEFI_MATERIAU ##############################
- lMLA=["F_MRR_RR", "C_MRR_RR", "F_MTT_TT", "C_MTT_TT", "F_MZZ_ZZ",
- "C_MZZ_ZZ", "F_MRT_RT", "C_MRT_RT", "F_MRZ_RZ", "C_MRZ_RZ",
+ lMLA=["F_MRR_RR", "C_MRR_RR", "F_MTT_TT", "C_MTT_TT", "F_MZZ_ZZ",
+ "C_MZZ_ZZ", "F_MRT_RT", "C_MRT_RT", "F_MRZ_RZ", "C_MRZ_RZ",
"F_MTZ_TZ", "C_MTZ_TZ",]
for param in lMLA:
removeMotCleInFact(jdc,"DEFI_MATERIAU","META_LEMA_ANI",param,pasDeRegle(),0)
for mcle in lMDC:
removeMotCleInFact(jdc,"DEFI_MATERIAU","MONO_DD_CC",mcle,pasDeRegle(),0)
removeMotCleInFact(jdc,"DEFI_MATERIAU","MONO_DD_CC_IRRA",mcle,pasDeRegle(),0)
-
+
removeMotCleInFact(jdc,"DEFI_MATERIAU","UMAT","NB_VALE",pasDeRegle(),0)
removeMotCleInFact(jdc,"DEFI_MATERIAU","UMAT_FO","NB_VALE",pasDeRegle(),0)
listeMc=["C"+str(i) for i in range(1,198)]
fusionMotCleInFact(jdc,"DEFI_MATERIAU","UMAT",listeMc,"LISTE_COEF")
fusionMotCleInFact(jdc,"DEFI_MATERIAU","UMAT_FO",listeMc,"LISTE_COEF")
-
- removeMotCle(jdc,"DEFI_MATERIAU","LABORD_1D",pasDeRegle(),0)
-
+
+ removeMotCle(jdc,"DEFI_MATERIAU","LABORD_1D",pasDeRegle(),0)
+
genereErreurMCF(jdc,"DEFI_MATERIAU","DIS_VISC")
lDISC=["PUIS_DX", "PUIS_DY", "PUIS_DZ", "PUIS_RX", "PUIS_RY", "PUIS_RZ",
"COEF_DX", "COEF_DY", "COEF_DZ", "COEF_RX", "COEF_RY", "COEF_RZ"]
#### traitement de EXTR_TABLE ##############################
changementValeurDsMCF(jdc,"EXTR_TABLE","FILTRE","VALE_K",{"MATR_ELEM":"MATR_TANG_ELEM"})
changementValeurDsMCF(jdc,"EXTR_TABLE","FILTRE","VALE_K",{"CODE_RETOUR":"CODE_RETOUR_INTE"})
-
+
#### traitement de FACTORISER ##############################
renameMotCle(jdc,"FACTORISER","ELIM_LAGR2","ELIM_LAGR")
changementValeur(jdc,"FACTORISER","ELIM_LAGR",{"OUI":"LAGR2",})
#### traitement de MACR_ECREVISSE ##############################
genereErreurMCF(jdc,"MACR_ECREVISSE","COMP_INCR")
- #### traitement de MACR_INFO_MAIL ##############################
+ #### traitement de MACR_INFO_MAIL ##############################
changementValeur(jdc,"MACR_INFO_MAIL","VERSION_HOMARD",{"V10_6":"V11_2"})
changementValeur(jdc,"MACR_INFO_MAIL","VERSION_HOMARD",{"V10_N":"V11_N"})
changementValeur(jdc,"MACR_INFO_MAIL","VERSION_HOMARD",{"V10_N_PERSO":"V11_N_PERSO"})
moveMotCleFromFactToFact(jdc,"MODE_ITER_INV","CALC_FREQ",mcle,"SOLVEUR_MODAL")
moveMotClefInOperToFact(jdc,"MODE_ITER_SIMULT","PREC_JACOBI","SOLVEUR_MODAL")
moveMotClefInOperToFact(jdc,"MODE_ITER_SIMULT","PREC_BATHE","SOLVEUR_MODAL")
-
+
removeMotCle(jdc,"MODE_ITER_INV","CALC_MODE",pasDeRegle(),0)
chercheOperInsereMotCleSiRegle(jdc,"MODE_ITER_INV","OPTION='AJUSTE'",((("OPTION",),"nexistepas"),),0)
moveMotCleFromFactToFact(jdc,"MODE_ITER_SIMULT","CALC_FREQ","DIM_SOUS_ESPACE","SOLVEUR_MODAL")
moveMotCleFromFactToFact(jdc,"MODE_ITER_SIMULT","CALC_CHAR_CRIT","COEF_DIM_ESPACE","SOLVEUR_MODAL")
moveMotCleFromFactToFact(jdc,"MODE_ITER_SIMULT","CALC_CHAR_CRIT","DIM_SOUS_ESPACE","SOLVEUR_MODAL")
-
+
removeMotCleInFactSiRegle(jdc,"MODE_ITER_SIMULT","CALC_FREQ","APPROCHE",
((("SOLVEUR_MODAL","METHODE",["QZ"],jdc),"MCsousMCFnaPasPourValeurDansListe")or
(("SOLVEUR_MODAL","METHODE",),"nexistepasMCsousMCF"),
changementValeur(jdc,com,"OPTION",{"FORC_INT_ELEM":"FORC_INTE_ELEM"})
removeMotCleInFactSiRegle(jdc,com,"COMPORTEMENT","NB_VARI",((("COMPORTEMENT","RELATION","'MFRONT'",jdc),"MCsousMCFaPourValeur"),))
-
+
#### traitement de TEST_COMPOR ##############################
genereErreurPourCommande(jdc,"TEST_COMPOR")
#### traitement de C_SOLVEUR ##############################
lCOM=['CALC_ERREUR', 'CALC_FORC_AJOU', 'CALC_IFS_DNL', 'CALC_MATR_AJOU', 'CALC_PRECONT',
- 'CREA_ELEM_SSD', 'DEFI_BASE_MODALE', 'DYNA_LINE_HARM', 'DYNA_LINE_TRAN', 'DYNA_NON_LINE',
- 'DYNA_TRAN_MODAL', 'INFO_MODE', 'MACR_ASCOUF_CALC', 'MACR_ASPIC_CALC', 'MACRO_BASCULE_SCHEMA',
- 'MACRO_MATR_AJOU', 'MECA_STATIQUE', 'MODE_ITER_SIMULT', 'MODE_ITER_INV', 'MODE_STATIQUE',
+ 'CREA_ELEM_SSD', 'DEFI_BASE_MODALE', 'DYNA_LINE_HARM', 'DYNA_LINE_TRAN', 'DYNA_NON_LINE',
+ 'DYNA_TRAN_MODAL', 'INFO_MODE', 'MACR_ASCOUF_CALC', 'MACR_ASPIC_CALC', 'MACRO_BASCULE_SCHEMA',
+ 'MACRO_MATR_AJOU', 'MECA_STATIQUE', 'MODE_ITER_SIMULT', 'MODE_ITER_INV', 'MODE_STATIQUE',
'STAT_NON_LINE', 'THER_LINEAIRE', 'THER_NON_LINE', 'THER_NON_LINE_MO', 'CALC_ERC_DYN','CALC_MODES',]
for com in lCOM:
# Suppression de ELIM_LAGR2
lMCLE=["NB_REORTHO_DD","NMAX_ITER","INFO_FETI","RESI_RELA","PARTITION"]
for mocle in lMCLE:
genereErreurMotCleInFact(jdc,com,"SOLVEUR",mocle)
-
+
#### traitement de DEFI_PART_FETI ##############################
genereErreurMCF(jdc,"DEFI_PART_FETI","EXCIT")
removeMotCle(jdc,"DEFI_PART_FETI","EXCIT",pasDeRegle(),0)
- removeMotCle(jdc,"DEFI_PART_FETI","CORRECTION_CONNEX",pasDeRegle(),0)
+ removeMotCle(jdc,"DEFI_PART_FETI","CORRECTION_CONNEX",pasDeRegle(),0)
genereErreurPourCommande(jdc,"DEFI_PART_FETI")
renameCommande(jdc,"DEFI_PART_FETI","DEFI_PARTITION", )
"CALC_CHAM_ELEM":"reecrire la partie SOUR_ELGA_ELEC",
"CALC_G_THETA_T_OPTION_VALEUR":"verifier la valeur d OPTION",
"CALC_G_THETA_T_OPTION_DEFAUT":"verifier la valeur d OPTION donnee a la place du defaut",
- "CALC_G_MODELE":"Mot Clef MODELE supprimé sous CALC_G",
- "CALC_G_DEPL":"Mot Clef DEPL supprimé sous CALC_G",
- "CALC_G_CHAM_MATER":"Mot Clef CHAM_MATER supprimé sous CALC_G",
- "CALC_G_CARA_ELEM":"Mot Clef CARA_ELEM supprimé sous CALC_G",
- "CALC_G_RESULTAT=XXX,":"Mot Clef RESULTAT à completer sous CALC_G",
+ "CALC_G_MODELE":"Mot Clef MODELE supprime sous CALC_G",
+ "CALC_G_DEPL":"Mot Clef DEPL supprime sous CALC_G",
+ "CALC_G_CHAM_MATER":"Mot Clef CHAM_MATER supprime sous CALC_G",
+ "CALC_G_CARA_ELEM":"Mot Clef CARA_ELEM supprime sous CALC_G",
+ "CALC_G_RESULTAT=XXX,":"Mot Clef RESULTAT a completer sous CALC_G",
"AFFE_MODELE_AFFE_MODELISATION_VALEUR":"verifier la valeur de MODELISATION",
"STAT_NON_LINE_COMP_INCR_RELATION_VALEUR":"verifier la valeur de RELATION",
"STAT_NON_LINE_COMP_INCR_RELATION_KIT_VALEUR":"verifier la valeur de RELATION_KIT",
#Parse les mocles des commandes
parseKeywords(root)
-
+
####################### traitement erreurs ########################
genereErreurPourCommande(jdc,("DEBUT","POST_RCCM","DIST_LIGN_3D","IMPR_OAR","COMB_CHAM_NO","COMB_CHAM_ELEM"))
moveMotClefInOperToFact(jdc,"CALC_G_LOCAL_T","LISSAGE_THETA","LISSAGE")
moveMotClefInOperToFact(jdc,"CALC_G_LOCAL_T","LISSAGE_G","LISSAGE")
moveMotClefInOperToFact(jdc,"CALC_G_LOCAL_T","DEGRE","LISSAGE")
-
+
dlocal={"CALC_G_LGLO":"G_LAGR", "G_BILINEAIRE":"G_BILI", "CALC_G_MAX":"G_MAX"}
changementValeur(jdc,"CALC_G_LOCAL_T","OPTION",dlocal)
#
renameOper(jdc,"CALC_G_THETA_T","CALC_G")
# Attention cela necessite un traitement particulier et ne peut pas etre generalise tel quel
- # Attention egalement doit etre fait avant le regroupement dans THETA
+ # Attention egalement doit etre fait avant le regroupement dans THETA
calcG.traitementRayon(jdc)
renameMotCle(jdc,"CALC_G","THETA","THETA_OLD")
chercheOperInsereFacteur(jdc,"CALC_G","THETA")
moveMotClefInOperToFact(jdc,"CALC_G","THETA_OLD","THETA")
renameMotCleInFact(jdc,"CALC_G","THETA","THETA_OLD","THETA")
-
+
moveMotClefInOperToFact(jdc,"CALC_G","FOND_FISS","THETA")
moveMotClefInOperToFact(jdc,"CALC_G","R_INF_FO","THETA")
moveMotClefInOperToFact(jdc,"CALC_G","R_SUP_FO","THETA")
removeMotCleSiRegleAvecErreur(jdc,"AFFE_MODELE","AFFE",((("AFFE","MODELISATION","ASSE_GRIL",jdc),"MCsousMCFaPourValeur"),))
removeMotCleSiRegleAvecErreur(jdc,"AFFE_MODELE","AFFE",((("AFFE","MODELISATION","3D_JOINT_CT",jdc),"MCsousMCFaPourValeur"),))
renameMotCleInFact(jdc,"AFFE_MODELE","AFFE_SOUS_STRUC","MAILLE","SUPER_MAILLE")
-
+
####################### traitement PROJ_MESU_MODAL #######################
removeMotCleInFact(jdc,"PROJ_MESU_MODAL","MODELE_MESURE","NOM_PARA")
removeMotCleInFactSiRegleAvecErreur(jdc,"AFFE_CHAR_MECA","CONTACT","FROTTEMENT",((("CONTACT","METHODE","CONTRAINTE",jdc),"MCsousMCFaPourValeur"),))
moveMotClefInOperToFact(jdc,"CALC_ELEM","ANGLE","REPE_COQUE")
moveMotClefInOperToFact(jdc,"CALC_ELEM","PLAN","REPE_COQUE")
-
+
####################### traitement EXTR_MODE #######################
ajouteMotClefDansFacteurSiRegle(jdc,"EXTR_MODE","FILTRE_MODE","SEUIL=1.E-3", ((("FILTRE_MODE","CRIT_EXTR",),"existeMCsousMCF"),(("FILTRE_MODE","SEUIL",),"nexistepasMCsousMCF")))
parser = optparse.Optionparser(usage=usage)
parser.add_option('-i','--infile', dest="infile", default='toto.comm',
- help="Le fichier à traduire")
+ help="Le fichier a traduire")
parser.add_option('-o','--outfile', dest="outfile", default='tutu.comm',
help="Le fichier traduit")
if __name__ == '__main__':
main()
-
#Parse les mocles des commandes
parseKeywords(root)
-
+
####################### traitement erreurs ########################
genereErreurPourCommande(jdc,("POST_RCCM","DEFI_MATERIAU","TEST_FICHIER","DYNA_NON_LINE","DEFI_FISS_XFEM","POST_MAIL_XFEM"))
renameMotCleInFact(jdc,"DEFI_MATERIAU","VENDOCHAB_FO","K_VP","UN_SUR_K")
renameMotCleInFact(jdc,"DEFI_MATERIAU","VENDOCHAB_FO","SEDVP1","ALPHA_D")
renameMotCleInFact(jdc,"DEFI_MATERIAU","VENDOCHAB_FO","SEDVP2","BETA_D")
- # GLRC
+ # GLRC
renameCommandeSiRegle(jdc,"DEFI_MATERIAU","DEFI_GLRC", ((("GLRC_DAMAGE","GLRC_ACIER",),"existeMCFParmi"),))
#########################################################################
parser = optparse.Optionparser(usage=usage)
parser.add_option('-i','--infile', dest="infile", default='toto.comm',
- help="Le fichier à traduire")
+ help="Le fichier a traduire")
parser.add_option('-o','--outfile', dest="outfile", default='tutu.comm',
help="Le fichier traduit")
if __name__ == '__main__':
main()
-
from Traducteur.inseremocle import *
from Traducteur.changeValeur import *
from Traducteur.movemocle import *
-from Traducteur.dictErreurs import *
+from Traducteur.dictErreurs import *
from Traducteur.regles import pasDeRegle
atraiter=("AFFE_CARA_ELEM","AFFE_CHAR_CINE","AFFE_CHAR_MECA","AFFE_CHAR_MECA_F","AFFE_MATERIAU","AFFE_MODELE",
dict_erreurs={
# STA10
#
- "AFFE_CHAR_MECA_CONTACT":"Attention, modification de la définition du CONTACT : nommer DEFI_CONTACT,verifier les paramètres globaux et le mettre dans le calcul",
- "AFFE_CHAR_MECA_LIAISON_UNILATER":"Attention, modification de la définition du CONTACT : nommer DEFI_CONTACT,verifier les paramètres globaux et le mettre dans le calcul",
- "AFFE_CHAR_MECA_F_LIAISON_UNILATER":"Attention, modification de la définition du CONTACT : nommer DEFI_CONTACT,verifier les paramètres globaux et le mettre dans le calcul",
+ "AFFE_CHAR_MECA_CONTACT":"Attention, modification de la definition du CONTACT : nommer DEFI_CONTACT,verifier les parametres globaux et le mettre dans le calcul",
+ "AFFE_CHAR_MECA_LIAISON_UNILATER":"Attention, modification de la definition du CONTACT : nommer DEFI_CONTACT,verifier les parametres globaux et le mettre dans le calcul",
+ "AFFE_CHAR_MECA_F_LIAISON_UNILATER":"Attention, modification de la definition du CONTACT : nommer DEFI_CONTACT,verifier les parametres globaux et le mettre dans le calcul",
"AFFE_CHAR_MECA_GRAPPE_FLUIDE":"Resorption de GRAPPE_FLUIDE en version 10",
"DEFI_MATERIAU_LMARC":"Resorption loi LMARC en version 10",
"DEFI_MATERIAU_LMARC_FO":"Resorption loi LMARC en version 10",
"POST_ZAC":"Resorption POST_ZAC en version 10",
"AFFE_CHAR_MECA_ARLEQUIN":"Resorption ARLEQUIN en version 10",
-
- "PROJ_CHAMP_CHAM_NO":"Attention, verifier pour PROJ_CHAMP la présence de MODELE1/MAILLAGE1 et MODELE2/MAILLAGE2",
+
+ "PROJ_CHAMP_CHAM_NO":"Attention, verifier pour PROJ_CHAMP la presence de MODELE1/MAILLAGE1 et MODELE2/MAILLAGE2",
"COMB_SISM_MODAL_COMB_MULT_APPUI":"Attention, verifier GROUP_APPUI pour COMB_SISM_MODAL car on est dans le cas MULTI_APPUI=DECORRELE",
"MACR_ASPIQ_CALC_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans MACR_ASPIQ_CALC",
"SIMU_POINT_MAT_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans SIMU_POINT_MAT",
- "CALC_ELEM_SENSIBILITE":"Le post-traitement SENSIBILITE est à supprimer de CALC_ELEM et à faire via CALC_SENSI",
+ "CALC_ELEM_SENSIBILITE":"Le post-traitement SENSIBILITE est a supprimer de CALC_ELEM et a faire via CALC_SENSI",
"CALC_MISS_OPTION":"Attention, transfert MACRO_MISS_3D en CALC_MISS : utiliser un DEFI_SOL_MISS pour obtenir TABLE_SOL",
}
#####SOLVEUR
-
+
####################### traitement MUMPS/PARALELLISME-PARTITION ##################
#commandes concernes en plus : CALC_FORC_AJOU?,CALC_MATR_AJOU?
# */SOLVEUR/CHARGE_PROCO_MA(SD)--> AFFE_MODELE (ou MODI_MODELE)/PARTITION/.
removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
renameMotCle(jdc,"CALC_PRECONT","INCREMENT_NEW","INCREMENT")
-
+
renameMotCleSiRegle(jdc,"DYNA_NON_LINE","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
moveMCFToCommand(jdc,"DYNA_NON_LINE","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
renameMotCle(jdc,"DYNA_NON_LINE","INCREMENT_NEW","INCREMENT")
-
+
renameMotCleSiRegle(jdc,"MACR_ASCOUF_CALC","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
moveMCFToCommand(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
renameMotCle(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","INCREMENT")
-
+
renameMotCleSiRegle(jdc,"MACR_ASPIQ_CALC","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
moveMCFToCommand(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
renameMotCle(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","INCREMENT")
-
+
renameMotCleSiRegle(jdc,"SIMU_POINT_MAT","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
moveMCFToCommand(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_NIVEAU",pasDeRegle(),0)
removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_OPTION",pasDeRegle(),0)
removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
- removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
+ removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
renameMotCle(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","INCREMENT")
removeMotCleInFact(jdc,"DEFI_LIST_INST","ECHEC","INST_INIT")
removeMotCleInFact(jdc,"CALC_MODAL","CALC_FREQ","NPREC_SOLVEUR",pasDeRegle(),0)
removeMotCle(jdc,"IMPR_STURM","NPREC_SOLVEUR")
removeMotCleInFact(jdc,"MACRO_MATR_AJOU","CALC_FREQ","NPREC_SOLVEUR",pasDeRegle(),0)
-
+
###################### traitement CALC_MODAL SOLVEUR ############
removeMotCle(jdc,"CALC_MODAL","SOLVEUR",pasDeRegle())
################### traitement AFFE_MODELE/SHB8 ##########################
changementValeurDsMCF(jdc,"AFFE_MODELE","AFFE","MODELISATION",{"SHB8":"SHB"})
-
+
################### traitement COMP_ELAS et COMP_INCR DEFORMATION = GREEN ##############"
dGREEN={"GREEN_GR":"GROT_GDEP","GREEN":"GROT_GDEP","REAC_GEOM":"GROT_GDEP","EULER_ALMANSI":"GROT_GDEP","COROTATIONNEL":"GDEF_HYPO_ELAS"}
changementValeurDsMCF(jdc,"SIMU_POINT_MAT","COMP_ELAS","DEFORMATION",dGREEN)
################ traitement DEFI_MATERIAU/THER_HYDR #######
removeMotCleInFact(jdc,"DEFI_MATERIAU","THER_HYDR","QSR_K")
-
+
##################### traitement AFFE_CARA_ELEM/DISCRET ###############"
dDISCRET={"K_T_N_NS":"K_T_N", "K_T_L_NS":"K_T_L", "K_TR_N_NS":"K_TR_N", "K_TR_L_NS":"K_TR_L",
"M_T_N_NS":"M_T_N", "M_T_L_NS":"M_T_L", "M_TR_N_NS":"M_TR_N", "M_TR_L_NS":"M_TR_L",
changementValeurDsMCF(jdc,"AFFE_CARA_ELEM","DISCRET","CARA",dDISCRET)
#####CHARGEMENT
-
+
####################### traitement CONTACT ###############################################
moveMCFToCommand(jdc,"AFFE_CHAR_MECA","CONTACT","DEFI_CONTACT","ZONE")
removeMotCle(jdc,"AFFE_CHAR_MECA","CONTACT",pasDeRegle(),1)
-
+
removeMotCleInFact(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER","METHODE")
ajouteMotClefDansFacteur(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER","METHODE='LIAISON_UNIL'",pasDeRegle())
copyMotClefInOperToFact(jdc,"AFFE_CHAR_MECA","MODELE","LIAISON_UNILATER")
moveMCFToCommand(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER","DEFI_CONTACT","ZONE")
removeMotCle(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER",pasDeRegle(),1)
-
+
removeMotCleInFact(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER","METHODE")
ajouteMotClefDansFacteur(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER","METHODE='LIAISON_UNIL'",pasDeRegle())
ajouteMotClefDansFacteur(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER","FORMULATION='LIAISON_UNIL'",pasDeRegle())
ajouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_FROT='PENALISATION'",((("METHODE","PENALISATION",jdc),"MCsousMCFcourantaPourValeur"),(("COULOMB",),"existeMCsousMCFcourant"),))
ajouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_CONT='CONTRAINTE'",((("METHODE","CONTRAINTE",jdc),"MCsousMCFcourantaPourValeur"),))
removeMotCleInFact(jdc,"DEFI_CONTACT","ZONE","METHODE")
-
-
+
+
moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","COEF_RESI")
moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","FROTTEMENT")
moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","ITER_CONT_MAXI")
moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","NB_ITER_GEOM")
moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","MODELE")
-
+
# FORMULATION = DEPL/VITE
# Si EXCL_FROT_1
# Si EXCL_FROT_2
renameMotCleInFact(jdc,"AFFE_CHAR_CINE","MECA_IMPO","DCZ","DZ")
# QUESTION Non pris en compte : AFFE_CHAR_MECA/LIAISON_DDL","DDL",Liste de valeurs avec DC*)
# peut_etre avec changeTouteValeur ?
-
+
######################### traitement COMB_SISM_MODAL APPUI #######################""
- # attention il faut traiter d'abord DECORRELE avant CORRELE sinon CORRELE apparaît dans DECORELLE
+ # attention il faut traiter d'abord DECORRELE avant CORRELE sinon CORRELE apparait dans DECORELLE
moveMotCleFromFactToFather(jdc,"COMB_SISM_MODAL","EXCIT","MONO_APPUI")
moveMotCleFromFactToFather(jdc,"COMB_SISM_MODAL","EXCIT","MULTI_APPUI")
removeMotCleInFactSiRegle(jdc,"COMB_SISM_MODAL","COMB_MULT_APPUI","TYPE_COMBI",((("MULTI_APPUI","DECORRELE",jdc),"MCaPourValeur"),))
#####IMPRESSION
-
+
#################### traitement IMPR_RESU #######################
removeMotCleInFact(jdc,"IMPR_RESU","RESU","INFO_RESU")
changementValeurDsMCF(jdc,"POST_ELEM","INTEGRALE","NOM_CHAM",dOPTION)
changementValeurDsMCF(jdc,"POST_ELEM","MINMAX","NOM_CHAM",dOPTION)
changementValeurDsMCF(jdc,"POST_RCCM","RESU_MECA","NOM_CHAM",dOPTION)
- changementValeurDsMCF(jdc,"POST_RELEVE_T","ACTION","NOM_CHAM",dOPTION)
+ changementValeurDsMCF(jdc,"POST_RELEVE_T","ACTION","NOM_CHAM",dOPTION)
changementValeur(jdc,"PROJ_CHAMP","NOM_CHAM",dOPTION)
changementValeurDsMCF(jdc,"PROJ_MESU_MODAL","MODELE_MESURE","NOM_CHAM",dOPTION)
changementValeur(jdc,"RECU_FONCTION","NOM_CHAM",dOPTION)
changementValeur(jdc,"REST_SPEC_PHYS","NOM_CHAM",dOPTION)
changementValeurDsMCF(jdc,"TEST_RESU","RESU","NOM_CHAM",dOPTION)
changementValeurDsMCF(jdc,"TEST_RESU","GENE","NOM_CHAM",dOPTION)
-
+
changementValeur(jdc,"CALC_CHAM_ELEM","OPTION",dOPTION)
changementValeur(jdc,"CALC_ELEM","OPTION",dOPTION)
changementValeur(jdc,"CALC_META","OPTION",dOPTION)
"'PRES_ELNO_DBEL'", "'VARI_NOEU'")
# Options ambigue : PRES_ELNO_DBEL --> prac_elno/prme_elno, ERRE* --> ERME_ELNO ou ERTH_ELNO selon PHENOMENE
# En commentaires les commandes non concernees par rOPTION
-
+
genereErreurValeurDsMCF(jdc,"AFFE_MATERIAU","AFFE_VARC","NOM_CHAM",rOPTION)
#genereErreurValeur(jdc,"COMB_FOURIER","NOM_CHAM",rOPTION)
genereErreurValeur(jdc,"CREA_CHAMP","NOM_CHAM",rOPTION)
#genereErreurValeurDsMCF(jdc,"POST_RCCM","RESU_MECA","NOM_CHAM",rOPTION)
genereErreurValeurDsMCF(jdc,"POST_ELEM","INTEGRALE","NOM_CHAM",rOPTION)
genereErreurValeurDsMCF(jdc,"POST_ELEM","MINMAX","NOM_CHAM",rOPTION)
- genereErreurValeurDsMCF(jdc,"POST_RELEVE_T","ACTION","NOM_CHAM",rOPTION)
+ genereErreurValeurDsMCF(jdc,"POST_RELEVE_T","ACTION","NOM_CHAM",rOPTION)
genereErreurValeur(jdc,"PROJ_CHAMP","NOM_CHAM",rOPTION)
#genereErreurValeurDsMCF(jdc,"PROJ_MESU_MODAL","MODELE_MESURE","NOM_CHAM",rOPTION)
genereErreurValeur(jdc,"RECU_FONCTION","NOM_CHAM",rOPTION)
#genereErreurValeur(jdc,"REST_SPEC_PHYS","NOM_CHAM",rOPTION)
genereErreurValeurDsMCF(jdc,"TEST_RESU","RESU","NOM_CHAM",rOPTION)
genereErreurValeurDsMCF(jdc,"TEST_RESU","GENE","NOM_CHAM",rOPTION)
-
+
genereErreurValeur(jdc,"CALC_CHAM_ELEM","OPTION",rOPTION)
genereErreurValeur(jdc,"CALC_ELEM","OPTION",rOPTION)
#genereErreurValeur(jdc,"CALC_META","OPTION",rOPTION)
#genereErreurValeur(jdc,"COMB_SISM_MODAL","OPTION",rOPTION)
#genereErreurValeur(jdc,"MECA_STATIQUE","OPTION",rOPTION)
genereErreurValeurDsMCF(jdc,"MACRO_ELAS_MULT","CAS_CHARGE","OPTION",rOPTION)
- #genereErreurValeur(jdc,"THER_NON_LINE","OPTION",rOPTION)
-
+ #genereErreurValeur(jdc,"THER_NON_LINE","OPTION",rOPTION)
+
########### Message si CALC_ELEM/SENSIBILITE
genereErreurMCF(jdc,"CALC_ELEM","SENSIBILITE")
for c in jdc.root.childNodes:
if c.name != "IMPR_MACR_ELEM" : continue
for mc in c.childNodes:
- if mc.name == "MACR_ELEM_DYNA" : macr=mc.getText(jdc)
- if mc.name == "GROUP_MA_INTERF": interf=mc.getText(jdc)
- if mc.name == "AMOR_REDUIT": amor=mc.getText(jdc)
+ if mc.name == "MACR_ELEM_DYNA" : macr=mc.getText(jdc)
+ if mc.name == "GROUP_MA_INTERF": interf=mc.getText(jdc)
+ if mc.name == "AMOR_REDUIT": amor=mc.getText(jdc)
if amor != "" : chercheOperInsereFacteur(jdc,"CALC_MISS",amor,pasDeRegle(),0)
if interf != "" : chercheOperInsereFacteur(jdc,"CALC_MISS",interf,pasDeRegle(),0)
if macr != "" : chercheOperInsereFacteur(jdc,"CALC_MISS",macr,pasDeRegle(),0)
chercheOperInsereFacteur(jdc,"CALC_MISS","TABLE_SOL=''",pasDeRegle(),0)
chercheOperInsereFacteur(jdc,"CALC_MISS","TYPE_RESU='FICHIER'",pasDeRegle(),0)
-
+
#################################################################
f=open(outfile,'w')
f.write(jdc.getSource())
parser = optparse.Optionparser(usage=usage)
parser.add_option('-i','--infile', dest="infile", default='toto.comm',
- help="Le fichier à traduire")
+ help="Le fichier a traduire")
parser.add_option('-o','--outfile', dest="outfile", default='tutu.comm',
help="Le fichier traduit")
if __name__ == '__main__':
main()
-
return x, y
def lineToDict(line):
- """Transforme une ligne (string) en un dictionnaire de mots
- repérés par le numéro de la colonne"""
+ """Transforme une ligne (string) en un dictionnaire de mots
+ reperes par le numero de la colonne"""
words = re.split("(\w+)", line)
h = {};i = 0
return h
def dictToLine(d):
- """Transformation inverse: à partir d'un dictionnaire retourne une ligne"""
+ """Transformation inverse: a partir d'un dictionnaire retourne une ligne"""
cols = d
cols.sort()
return "".join([d[colno]for colno in cols])
self._matches = []
self.visit(child)
if self._matches:
- # Pour eviter les tuples et listes ordinaires,
+ # Pour eviter les tuples et listes ordinaires,
# on ne garde que les visites fructueuses
matchlist.append(self._matches)
self._matches=matchlist
--- /dev/null
+PYUIC = pyuic5
+QTRELEASE = lrelease
+.PHONY : all
+.SUFFIXES : .ui .py .ts .qm
+
+SHELL=bash
+
+ifdef EFICAS4VIMMP_ROOT
+srcdir?=${EFICAS4VIMMP_ROOT}
+else
+srcdir?=..
+endif
+
+confdir?=$(srcdir)/config
+tooldir=$(srcdir)/Tools
+
+# Règle en tête de Makefile
+all : $(PY_FILES) $(QM_FILES)
+
+############# ENVIRONEMENT DE CONSTRUCTION VIMMP Traning ################
+
+ifeq ($(findstring vimmp,$dir($(realpath GNUmakefile))),vimmp)
+include $(confdir)/GNUmakefile.mdm
+include $(confdir)/GNUmakefile.env
+else
+include $(confdir)/GNUmakefile.env
+endif
+
+PYXB ?=pyxbgen
+
+################# REGLES DE CONSTRUCTION ########################
+
+
+PY_FILES = myMain.py desBaseWidget.py desChoixCata.py desChoixCode.py desChoixCommandes.py \
+ desChoixLangue.py desRecherche.py desRechercheCatalogue.py\
+ desSelectVal.py desViewTexte.py desViewRegles.py desVisu.py desWidgetCreeParam.py desWidgetCommande.py \
+ desWidgetOptionnel.py Tuple2.py Tuple3.py Tuple4.py Tuple5.py Tuple6.py Tuple7.py Tuple8.py Tuple9.py\
+ Tuple10.py desWidgetBloc.py desWidgetCB.py desWidgetCBIntoSug.py desWidgetCommentaire.py desWidgetDate.py \
+ desWidgetFact.py desWidgetFactPlie.py desWidgetFactTableau.py desWidgetFormule.py desGroupeOptionnel.py \
+ desWidgetHeure.py desWidgetInformation.py desWidgetIntoSug.py desWidgetInactif.py \
+ desWidgetMatrice.py desWidgetParam.py desWidgetPlusieursBase.py desWidgetPlusieursInto.py \
+ desWidgetPlusieursIntoOrdonne.py desWidgetPlusieursTuple.py desWidgetRadioButton.py \
+ desWidget4a6RadioButton.py desWidgetSimpBase.py desWidgetSDCOInto.py desWidgetSimpBool.py \
+ desWidgetSimpSalome.py desPBOptionnelMT.py desWidgetTableau.py\
+ desWidgetSimpComplexe.py desWidgetSimpFichier.py desWidgetSimpTxt.py desWidgetTuple2.py \
+ desWidgetTuple3.py desWidgetTuple4.py desWidgetTuple5.py desWidgetTuple6.py desWidgetTuple7.py \
+ desWidgetTuple8.py desWidgetTuple9.py desWidgetTuple10.py desWidgetVide.py desWidgetUniqueSDCO.py \
+ desWidgetPlusieursPlie.py desWidgetNiveauFact.py dateEtHeure.py
+
+
+
+QM_FILES=eficas_en.qm eficas_fr.qm
+
+%.py:%.ui
+ ${PYUIC} -x -o $@ $<
+
+%.qm:%.ts
+ ${QTRELEASE} -qm $@ $<
+
+all : $(PY_FILES) $(QM_FILES)
+clean :
+ -rm -rf $(PY_FILES) *.pyc
+
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="LECustomTuple" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="LECustomTuple" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="LECustomTuple" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="LECustomTuple" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_8">
+ <widget class="LECustomTuple" name="lineEditVal8">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_9">
+ <widget class="LECustomTuple" name="lineEditVal9">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_10">
+ <widget class="LECustomTuple" name="lineEditVal10">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="LECustomTuple" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="LECustomTuple" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="LECustomTuple" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="LECustomTuple" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="LECustomTuple" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="LECustomTuple" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="LECustomTuple" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="LECustomTuple" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="LECustomTuple" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="LECustomTuple" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="LECustomTuple" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="LECustomTuple" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="LECustomTuple" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="LECustomTuple" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_8">
+ <widget class="LECustomTuple" name="lineEditVal8">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_1">
+ <widget class="LECustomTuple" name="lineEditVal1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_2">
+ <widget class="LECustomTuple" name="lineEditVal2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_3">
+ <widget class="LECustomTuple" name="lineEditVal3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="LECustomTuple" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="LECustomTuple" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="LECustomTuple" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="LECustomTuple" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_8">
+ <widget class="LECustomTuple" name="lineEditVal8">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_9">
+ <widget class="LECustomTuple" name="lineEditVal9">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<string notr="true"/>
</property>
<layout class="QGridLayout" name="gridLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
<widget class="QWidget" name="widgetCentrale" native="true">
<layout class="QVBoxLayout" name="widgetCentraleLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
</widget>
<property name="maximumSize">
<size>
<width>16777215</width>
- <height>16777215</height>
+ <height>160</height>
</size>
</property>
<property name="windowTitle">
<string>...</string>
</property>
<property name="icon">
- <iconset theme="remove"/>
+ <iconset theme="remove">
+ <normaloff>.</normaloff>.</iconset>
</property>
<property name="iconSize">
<size>
<string>...</string>
</property>
<property name="icon">
- <iconset theme="add"/>
+ <iconset theme="add">
+ <normaloff>.</normaloff>.</iconset>
</property>
<property name="iconSize">
<size>
<string>...</string>
</property>
<property name="icon">
- <iconset theme="find"/>
+ <iconset theme="find">
+ <normaloff>.</normaloff>.</iconset>
</property>
<property name="iconSize">
<size>
</item>
</layout>
</item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="verticalSpacer_6">
<property name="orientation">
<property name="minimumSize">
<size>
<width>0</width>
- <height>200</height>
+ <height>100</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
</property>
<property name="icon">
<iconset theme="find">
- <normaloff/>
- </iconset>
+ <normaloff>.</normaloff>.</iconset>
</property>
<property name="iconSize">
<size>
<x>0</x>
<y>0</y>
<width>300</width>
- <height>129</height>
+ <height>143</height>
</rect>
</property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<layout class="QGridLayout" name="gridLayout_2">
- <property name="horizontalSpacing">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
<number>0</number>
</property>
- <property name="margin">
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <property name="horizontalSpacing">
<number>0</number>
</property>
<item row="0" column="0">
<rect>
<x>0</x>
<y>0</y>
- <width>465</width>
+ <width>474</width>
<height>308</height>
</rect>
</property>
<property name="spacing">
<number>0</number>
</property>
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
+ <property name="spacing">
+ <number>0</number>
+ </property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<rect>
<x>0</x>
<y>0</y>
- <width>270</width>
+ <width>279</width>
<height>307</height>
</rect>
</property>
<string>...</string>
</property>
<property name="icon">
- <iconset theme="find"/>
+ <iconset theme="find">
+ <normaloff>.</normaloff>.</iconset>
</property>
<property name="iconSize">
<size>
</layout>
</item>
<item>
- <widget class="QPushButton" name="PBValideFeuille">
+ <widget class="QLabel" name="lineEditUnite">
<property name="text">
- <string>Valide</string>
+ <string>TextLabel</string>
</property>
</widget>
</item>
</property>
</spacer>
</item>
+ <item>
+ <widget class="QPushButton" name="PBValideFeuille">
+ <property name="text">
+ <string>Valide</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
</layout>
<rect>
<x>0</x>
<y>0</y>
- <width>743</width>
- <height>60</height>
+ <width>613</width>
+ <height>56</height>
</rect>
</property>
<property name="sizePolicy">
<item>
<widget class="QLineEdit" name="lineEditVal">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</widget>
</item>
<item>
- <spacer name="horizontalSpacer_4">
+ <spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>3</width>
+ <width>5</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>58</width>
+ <width>5</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBoxUQ">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Active le parametre comme variable UQ</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>3</width>
<height>20</height>
</size>
</property>
<rect>
<x>0</x>
<y>0</y>
- <width>1242</width>
- <height>87</height>
+ <width>940</width>
+ <height>97</height>
</rect>
</property>
<property name="sizePolicy">
<number>0</number>
</property>
<property name="topMargin">
- <number>1</number>
+ <number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QLabel" name="label_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>29</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>29</height>
- </size>
- </property>
- <property name="text">
- <string>Complexe : a+bj</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>19</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
- <widget class="QLineEdit" name="LEComp">
- <property name="frame">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>50</width>
- <height>24</height>
- </size>
- </property>
- <property name="text">
- <string><html><head/><body><p align="center">OU </p></body></html></string>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>4</number>
</item>
</layout>
</item>
- <item row="1" column="2">
+ <item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLineEdit" name="LEReel">
</item>
</layout>
</item>
- <item row="1" column="1">
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>17</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="MonLabelClic" name="lineEditUnite">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>178</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="text">
+ <string><html><head/><body><p>aaa</p></body></html></string>
+ </property>
+ <property name="scaledContents">
+ <bool>false</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ </widget>
+ </item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
</customwidget>
</customwidgets>
<tabstops>
- <tabstop>LEComp</tabstop>
- <tabstop>RBRI</tabstop>
<tabstop>RBMP</tabstop>
<tabstop>RBPoubelle</tabstop>
</tabstops>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
+ <number>2</number>
+ </property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="QLineEdit" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="QLineEdit" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="QLineEdit" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_8">
+ <widget class="QLineEdit" name="lineEditVal8">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="QLineEdit" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_9">
+ <widget class="QLineEdit" name="lineEditVal9">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<extends>QLabel</extends>
<header>monLabelClic.h</header>
</customwidget>
- <customwidget>
- <class>LECustomTuple</class>
- <extends>QLineEdit</extends>
- <header>gereListe.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
<number>0</number>
</property>
<property name="topMargin">
- <number>1</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>58</width>
+ <width>5</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>80</width>
<height>20</height>
</size>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>5</height>
+ <height>13</height>
</size>
</property>
</spacer>
<number>1</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<number>1</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="QLineEdit" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<extends>QLabel</extends>
<header>monLabelClic.h</header>
</customwidget>
- <customwidget>
- <class>LECustomTuple</class>
- <extends>QLineEdit</extends>
- <header>gereListe.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
<number>1</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="QLineEdit" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="QLineEdit" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<extends>QLabel</extends>
<header>monLabelClic.h</header>
</customwidget>
- <customwidget>
- <class>LECustomTuple</class>
- <extends>QLineEdit</extends>
- <header>gereListe.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
<number>1</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="QLineEdit" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="QLineEdit" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="QLineEdit" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<extends>QLabel</extends>
<header>monLabelClic.h</header>
</customwidget>
- <customwidget>
- <class>LECustomTuple</class>
- <extends>QLineEdit</extends>
- <header>gereListe.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
<number>1</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="QLineEdit" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="QLineEdit" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="QLineEdit" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="QLineEdit" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</spacer>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item>
<widget class="QToolButton" name="RBPoubelle">
<property name="minimumSize">
<extends>QLabel</extends>
<header>monLabelClic.h</header>
</customwidget>
- <customwidget>
- <class>LECustomTuple</class>
- <extends>QLineEdit</extends>
- <header>gereListe.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
<number>1</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="QLineEdit" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="QLineEdit" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="QLineEdit" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_8">
+ <widget class="QLineEdit" name="lineEditVal8">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="QLineEdit" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
</property>
</spacer>
</item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item>
<widget class="QToolButton" name="RBPoubelle">
<property name="minimumSize">
<extends>QLabel</extends>
<header>monLabelClic.h</header>
</customwidget>
- <customwidget>
- <class>LECustomTuple</class>
- <extends>QLineEdit</extends>
- <header>gereListe.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
<number>0</number>
</property>
<property name="leftMargin">
- <number>1</number>
+ <number>0</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
- <number>1</number>
+ <number>2</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_4">
+ <widget class="QLineEdit" name="lineEditVal4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_5">
+ <widget class="QLineEdit" name="lineEditVal5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_6">
+ <widget class="QLineEdit" name="lineEditVal6">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_8">
+ <widget class="QLineEdit" name="lineEditVal8">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_7">
+ <widget class="QLineEdit" name="lineEditVal7">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</widget>
</item>
<item>
- <widget class="LECustomTuple" name="lineEditVal_9">
+ <widget class="QLineEdit" name="lineEditVal9">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lineEditUnite">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<extends>QLabel</extends>
<header>monLabelClic.h</header>
</customwidget>
- <customwidget>
- <class>LECustomTuple</class>
- <extends>QLineEdit</extends>
- <header>gereListe.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="1195"/>
- <source>Ce fichier ne sera pas pris en compte
- %s</source>
- <translation>the file is ignored
-%s</translation>
+ <source>Ce fichier ne sera pas pris en compte</source>
+ <translation>the file is ignored</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="735"/>
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class AU_MOINS_UN(object):
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class AU_PLUS_UN(object):
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import print_function
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
-except :
- pass
+ from builtins import str
+ from builtins import object
+except :
+ pass
class A_CLASSER(object):
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class ENSEMBLE(object):
# coding=utf-8
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
- produire un compte-rendu : self.cr
"""
- if CONTEXT.debug:
- print(("ETAPE.isValid ", self.nom))
+ #if CONTEXT.debug:
+ #if 1 :
+ # print(("ETAPE.isValid ", self.nom, self.state))
+ # import traceback
+ # traceback.print_stack()
if self.state == 'unchanged':
return self.valid
else:
valid = self.validChild()
valid = valid * self.validRegles(cr)
-
+ if cr == 'oui' :
+ if not hasattr(self,'cr') :
+ from Noyau.N_CR import CR
+ self.cr=CR()
+ else :
+ self.cr.purge()
if self.reste_val != {}:
if cr == 'oui':
self.cr.fatal(
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class EXCLUS(object):
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import os
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# Modules Python
from __future__ import print_function
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
import traceback
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import traceback
- Est il indispensable de faire l'evaluation de la valeur dans le contexte
du jdc dans cette classe.
+ oui surtout pour les filtres et les validateurs
- Ne pourrait on pas doter les objets en presence des methodes suffisantes
pour eviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
# Ajout PN
# Pour tenir compte des Tuples
if hasattr(self.definition.type[0],'ntuple') :
- try :
- if (not (type(lval[0]) is tuple)) and (not (type(lval[0]) is list)) : lval=(lval,)
- except :
- pass
+ try :
+ if (not (type(lval[0]) is tuple)) and (not (type(lval[0]) is list)) : lval=(lval,)
+ except :
+ pass
if lval is None:
valid = 0
if cr == 'oui':
# coding=utf-8
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class MEME_NOMBRE(object):
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
try :
- from builtins import object
+ from builtins import object
except : pass
class PRESENT_ABSENT(object):
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class PRESENT_PRESENT(object):
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
valid = self.validChild()
valid = valid * self.validRegles(cr)
if self.reste_val != {}:
- if cr == 'oui':
+ if not hasattr(self,'cr') :
+ from Noyau.N_CR import CR
+ self.cr=CR()
+ if cr == 'oui':
self.cr.fatal(
tr("unknown keywords : %s") % ','.join(list(self.reste_val.keys())))
valid = 0
# coding=utf-8
# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2017 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 2007-2021 EDF R&D
# 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
from __future__ import absolute_import
-try :
- from builtins import object
+try :
+ from builtins import object
except : pass
class UN_PARMI(object):
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce package contient la fonctionnalité de validation des objets de type OBJECT.
+ Ce package contient la fonctionnalité de validation des objets de type OBJECT.
Cette fonctionnalité est implémentée sous la forme de classes de type MIXIN qui
- doivent etre combinées aux classes de bases de Noyau par héritage multiple dans
+ doivent etre combinées aux classes de bases de Noyau par héritage multiple dans
un troisième package, en général, Accas.
"""
}\r
\r
class Tuple:\r
- def __init__(self,ntuple):\r
- self.ntuple=ntuple\r
+ def __init__(self,ntuple):\r
+ self.ntuple=ntuple\r
\r
- def __convert__(self,valeur):\r
- if type(valeur) == types.StringType: return None\r
- if len(valeur) != self.ntuple: return None\r
- return valeur\r
+ def __convert__(self,valeur):\r
+ if type(valeur) == types.StringType: return None\r
+ if len(valeur) != self.ntuple: return None\r
+ return valeur\r
\r
- def info(self):\r
- return "Tuple de %s elements" % self.ntuple\r
+ def info(self):\r
+ return "Tuple de %s elements" % self.ntuple\r
\r
- __repr__=info\r
- __str__=info\r
+ __repr__=info\r
+ __str__=info\r
\r
#class ObjetUtilisateur(ASSD): pass\r
\r
class classeVisuEquation :\r
- def __init__(self,dicoListeAffiche, listEquation, listModele,listPostTraitement):\r
- self.dicoListeAffiche=dicoListeAffiche\r
- self.listEquation=listEquation\r
- self.listModele=listModele\r
- self.listPostTraitement=listPostTraitement\r
- \r
+ def __init__(self,dicoListeAffiche, listEquation, listModele,listPostTraitement):\r
+ self.dicoListeAffiche=dicoListeAffiche\r
+ self.listEquation=listEquation\r
+ self.listModele=listModele\r
+ self.listPostTraitement=listPostTraitement\r
+\r
\r
def maFunc():\r
return ('a1','a2','a3')\r
- \r
+\r
def maFuncWithArg(monMC):\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
monMC.dsMaFunct = True\r
\r
change=editor.changeIntoDefMC('AGING', ('Equation', 'b_approved','b_type_creation','Equation_Modification','Type2'), monInto )\r
if change :\r
- print ('j ai change le into')\r
- editor.reCalculeValiditeMCApresChgtInto('AGING', 'Type2', ('Equation', 'b_approved','b_type_creation','Equation_Modification')) \r
- if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
+ print ('j ai change le into')\r
+ editor.reCalculeValiditeMCApresChgtInto('AGING', 'Type2', ('Equation', 'b_approved','b_type_creation','Equation_Modification'))\r
+ if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
\r
monMC.dsMaFunct = False\r
\r
if valeurDB == None : valeurDB=editor.getValeur('Modele','Modele_DB',())\r
correspond=pckdb.DBRENAME\r
if valeurDB != None :\r
- listEquation, listModele,listPostTraitement=pckdb.read_pckdb(correspond[valeurDB])\r
+ listEquation, listModele,listPostTraitement=pckdb.read_pckdb(correspond[valeurDB])\r
monMC.dsMaFunct = False\r
return listEquation, listModele,listPostTraitement\r
\r
valeurEquationListe=editor.getValeur('Equation','Equation_Liste',('b_type_show',))\r
valeurAgingType=editor.getValeur('Equation','Equation_reaction',('b_type_show','b_reaction_type',))\r
if valeurAgingType == None :\r
- valeurAgingType=editor.getValeur('Equation','Equation_reaction',('b_type_show','b_aging_type',))\r
+ valeurAgingType=editor.getValeur('Equation','Equation_reaction',('b_type_show','b_aging_type',))\r
if valeurAgingType == None : monMC.dsMaFunct = False; return\r
\r
listeEquationPourIhm = []\r
dicoListeAffiche={}\r
for equation in listEquation :\r
if valeurEquationListe == 'aging_type' :\r
- if equation.type_vieil == valeurAgingType : \r
- listeEquationPourIhm.append(equation)\r
- listeReprEquationPourIhm.append(equation.representation)\r
- dicoListeAffiche[equation.representation]=equation\r
+ if equation.type_vieil == valeurAgingType :\r
+ listeEquationPourIhm.append(equation)\r
+ listeReprEquationPourIhm.append(equation.representation)\r
+ dicoListeAffiche[equation.representation]=equation\r
else:\r
- if equation.type_react == valeurAgingType : \r
- listeEquationPourIhm.append(equation)\r
- listeReprEquationPourIhm.append(equation.representation)\r
- dicoListeAffiche[equation.representation]=equation\r
+ if equation.type_react == valeurAgingType :\r
+ listeEquationPourIhm.append(equation)\r
+ listeReprEquationPourIhm.append(equation.representation)\r
+ dicoListeAffiche[equation.representation]=equation\r
change=editor.changeIntoDefMC('Equation', ('b_type_show','ListeEquation'), listeReprEquationPourIhm )\r
if change :\r
- editor.reCalculeValiditeMCApresChgtInto('Equation', 'listeEquation', ('b_type_show',)) \r
- if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
+ editor.reCalculeValiditeMCApresChgtInto('Equation', 'listeEquation', ('b_type_show',))\r
+ if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
editor.maClasseVisuEquation = classeVisuEquation(dicoListeAffiche,listEquation, listModele,listPostTraitement)\r
monMC.dsMaFunct = False\r
\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
editor=monMC.jdc.editor\r
valeur=monMC.valeur\r
- if valeur == None : \r
- monMC.dsMaFunct = False\r
- return\r
+ if valeur == None :\r
+ monMC.dsMaFunct = False\r
+ return\r
editor.maClasseVisuEquation.valeurEquationChoisie=valeur\r
monMC.dsMaFunct = False\r
- \r
+\r
\r
def instancieChemicalFormulation(monMC):\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
change=editor.changeDefautDefMC('Equation', ('b_type_show','b_modification','b_modif','Aging_Type'), type_vieil )\r
\r
for index,valeurConstituant in enumerate(monEquation.constituants):\r
- valeurEquation=monEquation.equation[index] \r
+ valeurEquation=monEquation.equation[index]\r
editor.ajoutMC(monMC.etape,'OptionnelConstituant',None,('b_type_show','b_modification','b_modif',))\r
print (index,valeurConstituant,valeurEquation)\r
\r
# Constituant = SIMP (statut = 'o', typ = 'TXM'),\r
# Differential_Equation = SIMP(statut= 'o',typ= 'TXM'),\r
for index,valeurConstituant in enumerate(monEquation.const_cine_nom):\r
- valeurArrhe=monEquation.arrhenius[index] \r
- if valeurArrhe : valeurConstanteType='Arrhenius type'\r
- else : valeurConstanteType='non Arrhenius type'\r
+ valeurArrhe=monEquation.arrhenius[index]\r
+ if valeurArrhe : valeurConstanteType='Arrhenius type'\r
+ else : valeurConstanteType='non Arrhenius type'\r
\r
- print (index,valeurConstituant,valeurConstanteType)\r
+ print (index,valeurConstituant,valeurConstanteType)\r
#OptionnelleConstante = FACT (statut = 'f', max = '**',\r
# ConstanteName= SIMP (statut = 'o', typ = 'TXM',),\r
# ConstanteType = SIMP(statut= 'o',typ= 'TXM', min=1,into=('Arrhenius type','non Arrhenius type'),defaut='Arrhenius type'),\r
if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
monMC.dsMaFunct = False\r
editor.dsMaFunct = False\r
- \r
-# TEMPORAIRE \r
+\r
+# TEMPORAIRE\r
# TODO TODO TODO\r
# PNPNPNPNPN\r
\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
\r
editor=monMC.jdc.editor\r
-# TEMPORAIRE \r
+# TEMPORAIRE\r
# TODO TODO TODO\r
listeEquationsAAfficher=[]\r
listeConstantesAAfficher=[]\r
\r
monMC.dsMaFunct = False\r
\r
- # listeEquation_stabilization=SIMP(statut='o', homo='SansOrdreNiDoublon', max='**', min=0 ),\r
+ # listeEquation_stabilization=SIMP(statut='o', homo='SansOrdreNiDoublon', max='**', min=0 ),\r
\r
def recupereModeleEquation(monMC):\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
dicoListeEquationAAfficher={}\r
\r
for valeurReactionType in monDico['Equation_Liste']:\r
- dicoListeEquationAAfficher[valeurReactionType] = [] \r
- for index,equation in enumerate( editor.maClasseVisuEquation.listEquation):\r
- if equation.type_react==valeurReactionType : \r
- dicoListeEquationAAfficher[valeurReactionType].append(equation.representation)\r
+ dicoListeEquationAAfficher[valeurReactionType] = []\r
+ for index,equation in enumerate( editor.maClasseVisuEquation.listEquation):\r
+ if equation.type_react==valeurReactionType :\r
+ dicoListeEquationAAfficher[valeurReactionType].append(equation.representation)\r
print (dicoListeEquationAAfficher)\r
- \r
+\r
change=editor.changeIntoDefMC('Modele', ('b_type_creation','b_ajout_equation','listeEquation_initiation'),dicoListeEquationAAfficher['initiation'] )\r
change=editor.changeIntoDefMC('Modele', ('b_type_creation','b_ajout_equation','listeEquation_propagation'),dicoListeEquationAAfficher['propagation'] )\r
change=editor.changeIntoDefMC('Modele', ('b_type_creation','b_ajout_equation','listeEquation_termination'),dicoListeEquationAAfficher['termination'] )\r
editor.dicoCoefD={}\r
for c in maClasseDeModele.coef[0].keys() :\r
if c[0]=='S':\r
- clef=c[1:]\r
- valeur= maClasseDeModele.coef[0][c]\r
- editor.dicoCoefS[clef]=valeur\r
+ clef=c[1:]\r
+ valeur= maClasseDeModele.coef[0][c]\r
+ editor.dicoCoefS[clef]=valeur\r
if c[0]=='D':\r
- clef=c[1:]\r
- valeur= maClasseDeModele.coef[0][c]\r
- editor.dicoCoefD[clef]=valeur\r
+ clef=c[1:]\r
+ valeur= maClasseDeModele.coef[0][c]\r
+ editor.dicoCoefD[clef]=valeur\r
print (editor.dicoCoefS,editor.dicoCoefD)\r
monMC.dsMaFunct=False\r
editor.dsMaFunct = False\r
print (v)\r
mesValeurs=editor.dicoCoefS[v]\r
print (editor.dicoCoefS)\r
- print (mesValeurs) \r
+ print (mesValeurs)\r
MCFils='S'+v\r
for e in monMC.jdc.etapes:\r
if e.nom == Modele :break\r
)\r
\r
\r
- \r
+\r
#---------------------------------\r
Equation = PROC (nom="Equation",\r
op=None,\r
Equation_DB=SIMP(statut= 'o',typ= 'TXM', into=("Approved data base", "My data base") ),\r
Equation_Type = SIMP(statut= 'o',typ= 'TXM', into=("Show equation database", "Equation creation"),),\r
\r
- \r
+\r
# ---------------------------------------------------------------------------\r
b_type_show = BLOC(condition = " Equation_Type == 'Show equation database'",\r
# ---------------------------------------------------------------------------\r
ListeEquation = SIMP(statut='o', typ='TXM', homo='SansOrdreNiDoublon',siValide=afficheValeurEquation),\r
b_modification = BLOC(condition = " ListeEquation != None ",\r
modification = SIMP(typ = bool, statut = 'o',defaut = False, fr='toto', ang='toto en anglais', siValide=instancieChemicalFormulation),\r
- \r
+\r
b_modif = BLOC(condition = "modification == True",\r
Reaction_Type=SIMP(statut= 'o',typ= 'TXM', min=1,into=monDico['Equation_Liste'],),\r
Aging_Type=SIMP(statut= 'o',typ= 'TXM', min=1,max='**', homo='SansOrdreNiDoublon', into=('All', 'thermo', 'radio'),),\r
Commentaire = SIMP (statut = 'f', typ = 'TXM', defaut = ' '),\r
\r
),# fin b_modif\r
- \r
+\r
), # fin b_modification\r
), # Fin b_type_show\r
\r
b_type_creation = BLOC(condition = " Equation_Type == 'Equation creation'",\r
# ---------------------------------------------------------------------------\r
Equation_Modification = FACT ( statut = 'o',\r
- \r
+\r
ChemicalFormulation = SIMP(statut='o', typ='TXM', defaut = 'POOH -> 2P'),\r
\r
Reaction_Type=SIMP(statut= 'o',typ= 'TXM', min=1,into=monDico['Equation_Liste'],),\r
),# fin ConstanteOptionnelle\r
), # fin constante\r
Commentaire = SIMP (statut = 'f', typ = 'TXM', defaut = ' '),\r
- \r
+\r
), # Fin Equation_Modification\r
\r
#Chemical_Formulation = SIMP(statut= 'o',typ= 'TXM', defaut = 'POOH->P',siValide=maFuncWithArg),\r
#Type2 = SIMP(statut='o', typ = 'TXM'),\r
\r
), # fin b_type_creation\r
- \r
- \r
+\r
+\r
) # Fin Equation\r
\r
#---------------------------------\r
stabilizer = SIMP(typ = bool, statut = 'o',defaut = maClasseDeModele.stabilise),\r
model_developed_by_for_EDF = SIMP(typ = bool, statut = 'o',defaut = maClasseDeModele.dvt_EDF[0]),\r
documentation=SIMP(statut='o',typ='TXM',defaut=maClasseDeModele.reference,),\r
- \r
+\r
# ajouter la liste des equations et le remove (il faut garder ceux qu on a enlever)\r
- \r
+\r
\r
AjoutEquation=SIMP(statut= 'o',typ= bool, defaut=False, siValide=recupereModeleEquation),\r
b_ajout_equation = BLOC(condition = " AjoutEquation == True",\r
listeEquation_termination=SIMP(statut='o', typ='TXM',homo='SansOrdreNiDoublon', max='**', min=0, defaut=[] ),\r
listeEquation_stabilization=SIMP(statut='o',typ='TXM', homo='SansOrdreNiDoublon', max='**', min=0, defaut=[] ),\r
),# fin b_ajout_equation\r
- \r
+\r
# coefficients maClasseDeModele.coef = liste de dictionnaire mais il faut prendre que le 0\r
# on enleve ceux qui commence par D, S et B(casse imprtante)\r
# la clef est le coef, puis les valeurs\r
b_diffusion = BLOC(condition = " Diffusion == True",\r
#coefficients maClasseDeModele.coef = liste de dictionnaire mais il faut prendre que le 0\r
# on met ceux qui commence par D, S et pas les B ni les aitres( casse imprtante)\r
- listeProduitPourLaDiffusion=SIMP(statut='o', typ='TXM', max='**', min=1,homo='SansOrdreNiDoublon', into = maClasseDeModele.param_ini.keys(),siValide=ajouteDiffusion), \r
+ listeProduitPourLaDiffusion=SIMP(statut='o', typ='TXM', max='**', min=1,homo='SansOrdreNiDoublon', into = maClasseDeModele.param_ini.keys(),siValide=ajouteDiffusion),\r
), # fin b_diffusion\r
- \r
+\r
), # fin b_type_creation\r
\r
\r
\r
import types\r
class Tuple:\r
- def __init__(self,ntuple):\r
- self.ntuple=ntuple\r
+ def __init__(self,ntuple):\r
+ self.ntuple=ntuple\r
\r
- def __convert__(self,valeur):\r
- if type(valeur) == types.StringType:\r
- return None\r
- if len(valeur) != self.ntuple:\r
- return None\r
- return valeur\r
+ def __convert__(self,valeur):\r
+ if type(valeur) == types.StringType:\r
+ return None\r
+ if len(valeur) != self.ntuple:\r
+ return None\r
+ return valeur\r
\r
- def info(self):\r
- return "Tuple de %s elements" % self.ntuple\r
+ def info(self):\r
+ return "Tuple de %s elements" % self.ntuple\r
\r
\r
JdC = JDC_CATA(code='VP',\r
execmodul=None,\r
)\r
\r
- \r
+\r
#---------------------------------\r
Equation = PROC (nom="Equation",\r
op=None,\r
#b_suite_2 = BLOC(condition = "Equation_DB == 'Approved data base' ",\r
#Equation_Type = SIMP(statut= 'o',typ= 'TXM', into=("Show equation database", ),),\r
#),\r
- \r
+\r
# ---------------------------------------------------------------------------\r
b_type_show = BLOC(condition = " Equation_Type == 'Show equation database'",\r
# ---------------------------------------------------------------------------\r
#ListeEquation = SIMP(statut='o', typ='TXM', homo='SansOrdreNiDoublon'),\r
b_modification = BLOC(condition = " ListeEquation != None ",\r
modification = SIMP(typ = bool, statut = 'o',defaut = False, fr='toto', ang='toto en anglais', siValide=lienDB.instancieChemicalFormulation),\r
- \r
+\r
b_modif = BLOC(condition = "modification == True",\r
Reaction_Type=SIMP(statut= 'o',typ= 'TXM', min=1,into=monDico['Equation_Liste'],),\r
Aging_Type=SIMP(statut= 'o',typ= 'TXM', min=1,max='**', homo='SansOrdreNiDoublon', into=('All', 'thermo', 'radio'),),\r
\r
\r
),# fin b_modif\r
- \r
+\r
), # fin b_modification\r
), # Fin b_type_show\r
\r
b_type_creation = BLOC(condition = " Equation_Type == 'Equation creation'",\r
# ---------------------------------------------------------------------------\r
Equation_Modification = FACT ( statut = 'o',\r
- \r
+\r
ChemicalFormulation = SIMP(statut='o', typ='TXM', defaut = 'POOH -> 2P'),\r
\r
Reaction_Type=SIMP(statut= 'o',typ= 'TXM', min=1,into=monDico['Equation_Liste'],),\r
),# fin ConstanteOptionnelle\r
), # fin constante\r
Commentaire = SIMP (statut = 'f', typ = 'TXM', defaut = ' '),\r
- \r
+\r
), # Fin Equation_Modification\r
), # fin b_type_creation\r
- \r
- \r
+\r
+\r
) # Fin Equation\r
\r
#---------------------------------\r
# il faudrait que position=global_jdc fonctionne\r
model_developed_by_for_EDF = SIMP(typ = bool, statut = 'o',defaut = monModele.dvt_EDF[0]),\r
documentation=SIMP(statut='o',typ='TXM',defaut=monModele.reference,),\r
- \r
+\r
), # fin ID\r
# ajouter la liste des equations et le remove (il faut garder ceux qu on a enlever)\r
- \r
+\r
Chemical_Equation = FACT( statut='o',\r
Initial_Equation_List=SIMP(statut='o',typ='TXM',max="**",homo='SansOrdreNiDoublon',into=[],defaut=[], siValide=lienDB.recupereModeleEquation),\r
\r
listeEquation_termination=SIMP(statut='o', typ='TXM',homo='SansOrdreNiDoublon', max='**', min=0, defaut=[],siValide=lienDB.ajoutDUneEquation ),\r
listeEquation_stabilization=SIMP(statut='o',typ='TXM', homo='SansOrdreNiDoublon', max='**', min=0, defaut=[],siValide=lienDB.ajoutDUneEquation ),\r
),# fin b_ajout_equation\r
- \r
+\r
), # fin Equation\r
# coefficients monModele.coef = liste de dictionnaire mais il faut prendre que le 0\r
# on enleve ceux qui commence par D, S et B(casse imprtante)\r
# la clef est le coef, puis les valeurs\r
\r
- \r
+\r
#b_material_thickness = BLOC(condition = "material_thickness == 'thick'",\r
# si position=global fonctionne\r
Transport = FACT( statut = 'o',\r
Diffusion = SIMP(typ = bool, statut = 'o',defaut = False ,siValide = lienDB.prepareDiffusion),\r
\r
b_diffusion = BLOC(condition = " Diffusion == True",\r
- listeProduitPourLaDiffusion=SIMP(statut='o', typ='TXM', max='**', min=1,homo='SansOrdreNiDoublon', into = [],siValide=lienDB.ajouteDiffusion), \r
+ listeProduitPourLaDiffusion=SIMP(statut='o', typ='TXM', max='**', min=1,homo='SansOrdreNiDoublon', into = [],siValide=lienDB.ajouteDiffusion),\r
), # fin b_diffusion\r
\r
Evaporation = SIMP(typ = bool, statut = 'o',defaut = False ,siValide = lienDB.prepareDiffusion),\r
b_evaporation = BLOC(condition = " Evaporation == True",\r
- listeProduitPourLEvaporation=SIMP(statut='o', typ='TXM', max='**', min=1,homo='SansOrdreNiDoublon', into = [],siValide=lienDB.ajouteEvaporation), \r
+ listeProduitPourLEvaporation=SIMP(statut='o', typ='TXM', max='**', min=1,homo='SansOrdreNiDoublon', into = [],siValide=lienDB.ajouteEvaporation),\r
), # fin b_evaporation\r
- \r
- \r
+\r
+\r
), # fin TRANSPORT\r
#), # fin b_material_thickness\r
\r
\r
# il faut recopier toute la suite en changeant eventuellement le nom du modele\r
# il faut cocher toutes les equations par defaut\r
- \r
+\r
), # fin ID\r
), # fin b_type_modify\r
# ---------------------------------------------------------------------------\r
results_units=SIMP(statut= 'o',typ= 'TXM', min=0,max='**', intoSug=monPost.results_units,defaut=monPost.results_units),\r
#integrate=SIMP(statut= 'o',typ= 'TXM', min=0,max='**', intoSug=monPost.results_units,defaut=monPost.results_units),\r
prerequisite=SIMP(statut= 'o',typ= 'TXM', min=0,max='**', intoSug=monPost.prerequisite,defaut=monPost.prerequisite),\r
- \r
+\r
),\r
- constituant=SIMP(statut= 'o',typ= 'TXM', min=0,max='**', intoSug=monPost.constituants,defaut=monPost.constituants) \r
- \r
+ constituant=SIMP(statut= 'o',typ= 'TXM', min=0,max='**', intoSug=monPost.constituants,defaut=monPost.constituants)\r
+\r
)# fin b_post_creation\r
# ---------------------------------------------------------------------------\r
#---------------------------------\r
\r
class CONFIG(configuration.CONFIG_BASE):\r
\r
- #-----------------------------------\r
- def __init__(self,appli,repIni):\r
- #-----------------------------------\r
+ #-----------------------------------\r
+ def __init__(self,appli,repIni):\r
+ #-----------------------------------\r
\r
- self.labels_user=['catalogues','lang']\r
- self.labels_eficas=['lang','rep_cata','catalogues']\r
+ self.labels_user=['catalogues','lang']\r
+ self.labels_eficas=['lang','rep_cata','catalogues']\r
\r
- configuration.CONFIG_BASE.__init__(self,appli,repIni)\r
+ configuration.CONFIG_BASE.__init__(self,appli,repIni)\r
\r
\r
def make_config(appli,rep):\r
return CONFIG(appli,rep)\r
-\r
\r
import types\r
class Tuple:\r
- def __init__(self,ntuple):\r
- self.ntuple=ntuple\r
+ def __init__(self,ntuple):\r
+ self.ntuple=ntuple\r
\r
- def __convert__(self,valeur):\r
- if type(valeur) == types.StringType:\r
- return None\r
- if len(valeur) != self.ntuple:\r
- return None\r
- return valeur\r
+ def __convert__(self,valeur):\r
+ if type(valeur) == types.StringType:\r
+ return None\r
+ if len(valeur) != self.ntuple:\r
+ return None\r
+ return valeur\r
\r
- def info(self):\r
- return "Tuple de %s elements" % self.ntuple\r
+ def info(self):\r
+ return "Tuple de %s elements" % self.ntuple\r
\r
- __repr__=info\r
- __str__=info\r
+ __repr__=info\r
+ __str__=info\r
\r
\r
dicoAgingFactor={ '40years BR top' : {'temperature' : 50, 'simulationTime' : 350640}}\r
# --------------------------------------\r
# Fonctions appellees depuis le catalogue\r
# --------------------------------------\r
- \r
+\r
# --------------------------------------\r
# Dans Equation\r
# --------------------------------------\r
\r
def recupereDicoEquation(monMC):\r
- # Equation_reaction (ds 2 blocs)\r
- # ou dans Equation b_type_show b_reaction_type\r
- # ou dans Equation b_type_show b_aging_type\r
+ # Equation_reaction (ds 2 blocs)\r
+ # ou dans Equation b_type_show b_reaction_type\r
+ # ou dans Equation b_type_show b_aging_type\r
\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
editor=monMC.jdc.editor\r
valeurEquationListe=editor.getValeur('Equation','Equation_Liste',('b_type_show',))\r
valeurAgingType=editor.getValeur('Equation','Equation_reaction',('b_type_show','b_reaction_type',))\r
if valeurAgingType == None :\r
- valeurAgingType=editor.getValeur('Equation','Equation_reaction',('b_type_show','b_aging_type',))\r
+ valeurAgingType=editor.getValeur('Equation','Equation_reaction',('b_type_show','b_aging_type',))\r
if valeurAgingType == None : monMC.dsMaFunct = False; return\r
\r
listeEquationPourIhm = []\r
listeReprEquationPourIhm = []\r
dicoListAffiche = {}\r
- \r
+\r
for equation in listEquation :\r
if valeurEquationListe == 'aging_type' :\r
- if equation.type_vieil == valeurAgingType : \r
- listeEquationPourIhm.append(equation)\r
- listeReprEquationPourIhm.append(equation.representation)\r
- dicoListAffiche[equation.representation]=equation\r
+ if equation.type_vieil == valeurAgingType :\r
+ listeEquationPourIhm.append(equation)\r
+ listeReprEquationPourIhm.append(equation.representation)\r
+ dicoListAffiche[equation.representation]=equation\r
else:\r
- if equation.type_react == valeurAgingType : \r
- listeEquationPourIhm.append(equation)\r
- listeReprEquationPourIhm.append(equation.representation)\r
- dicoListAffiche[equation.representation]=equation\r
+ if equation.type_react == valeurAgingType :\r
+ listeEquationPourIhm.append(equation)\r
+ listeReprEquationPourIhm.append(equation.representation)\r
+ dicoListAffiche[equation.representation]=equation\r
maClasseDelistesDB.dicoListAffiche = dicoListAffiche\r
\r
change=editor.changeIntoDefMC('Equation', ('b_type_show','ListeEquation'), listeReprEquationPourIhm )\r
if change :\r
- editor.reCalculeValiditeMCApresChgtInto('Equation', 'listeEquation', ('b_type_show',)) \r
- if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
+ editor.reCalculeValiditeMCApresChgtInto('Equation', 'listeEquation', ('b_type_show',))\r
+ if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
monMC.dsMaFunct = False\r
\r
def afficheValeurEquation(monMC):\r
aAfficher=str(monEquation)\r
editor=monMC.jdc.editor\r
editor._viewText(aAfficher, "Id",largeur=80,hauteur=300)\r
- \r
+\r
monMC.dsMaFunct = False\r
- \r
+\r
\r
def instancieChemicalFormulation(monMC):\r
print ('instancieChemicalFormulation pour ', monMC.nom)\r
change=editor.changeDefautDefMC('Equation', ('b_type_show','b_modification','b_modif','Aging_Type'), type_vieil )\r
\r
for index,valeurConstituant in enumerate(monEquation.constituants):\r
- valeurEquation=monEquation.equation[index] \r
- \r
+ valeurEquation=monEquation.equation[index]\r
+\r
#PNPNPN --> decider des noms SVP ave un nom python\r
monMcl1=('Constituant','TXM',{'statut':'o','defaut':valeurConstituant})\r
monMcl2=('Differential_Equation','TXM',{'statut':'o','defaut':valeurEquation})\r
# Differential_Equation = SIMP(statut= 'o',typ= 'TXM'),\r
\r
for index,valeurConstituant in enumerate(monEquation.const_cine_nom):\r
- valeurArrhe=monEquation.arrhenius[index] \r
- if valeurArrhe : valeurConstanteType='Arrhenius type'\r
- else : valeurConstanteType='non Arrhenius type'\r
- monMcl1=('ConstanteName','TXM',{'statut':'o','defaut':valeurConstituant})\r
- monMcl2=('ConstanteType','TXM',{'statut':'o','defaut':valeurConstanteType,'into': ('Arrhenius type','non Arrhenius type') })\r
- listeMC=(monMcl1,monMcl2)\r
- editor.ajoutDefinitionMCFact ('Equation',('b_type_show','b_modification','b_modif',),valeurConstituant,listeMC,statut='f')\r
- #editor.ajoutMC(e,MCFils,mesValeurs,('b_type_creation','b_diffusion',))\r
+ valeurArrhe=monEquation.arrhenius[index]\r
+ if valeurArrhe : valeurConstanteType='Arrhenius type'\r
+ else : valeurConstanteType='non Arrhenius type'\r
+ monMcl1=('ConstanteName','TXM',{'statut':'o','defaut':valeurConstituant})\r
+ monMcl2=('ConstanteType','TXM',{'statut':'o','defaut':valeurConstanteType,'into': ('Arrhenius type','non Arrhenius type') })\r
+ listeMC=(monMcl1,monMcl2)\r
+ editor.ajoutDefinitionMCFact ('Equation',('b_type_show','b_modification','b_modif',),valeurConstituant,listeMC,statut='f')\r
+ #editor.ajoutMC(e,MCFils,mesValeurs,('b_type_creation','b_diffusion',))\r
\r
\r
change=editor.changeDefautDefMC('Equation', ('b_type_show','b_modification','b_modif','Commentaire'),monEquation.comment )\r
\r
monMC.dsMaFunct = False\r
editor.dsMaFunct = False\r
- \r
+\r
\r
\r
\r
\r
editor.dsMaFunct = False\r
\r
- # listeEquation_stabilization=SIMP(statut='o', homo='SansOrdreNiDoublon', max='**', min=0 ),\r
+ # listeEquation_stabilization=SIMP(statut='o', homo='SansOrdreNiDoublon', max='**', min=0 ),\r
\r
def recupereModeleEquation(monMC):\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
from VP_Cata_V2 import monDico\r
listEquation=maClasseDelistesDB.getListEquation()\r
for valeurReactionType in monDico['Equation_Liste']:\r
- dicoListeEquationAAfficher[valeurReactionType] = [] \r
- for index,equation in enumerate( listEquation):\r
- if equation.type_react==valeurReactionType : \r
- dicoListeEquationAAfficher[valeurReactionType].append(equation.representation)\r
- maClasseDelistesDB.dictParametresInitiaux[equation.representation]=equation\r
+ dicoListeEquationAAfficher[valeurReactionType] = []\r
+ for index,equation in enumerate( listEquation):\r
+ if equation.type_react==valeurReactionType :\r
+ dicoListeEquationAAfficher[valeurReactionType].append(equation.representation)\r
+ maClasseDelistesDB.dictParametresInitiaux[equation.representation]=equation\r
#print (dicoListeEquationAAfficher)\r
#print('maClasseDelistesDB.dictParametresInitiaux', maClasseDelistesDB.dictParametresInitiaux)\r
prepareDiffusionSansMC(editor,monMC.nom)\r
- \r
+\r
change=editor.changeIntoDefMC('Modele', ('b_type_creation','Chemical_Equation','b_ajout_equation','listeEquation_initiation'),dicoListeEquationAAfficher['initiation'])\r
change=editor.changeIntoDefMC('Modele', ('b_type_creation','Chemical_Equation','b_ajout_equation','listeEquation_propagation'),dicoListeEquationAAfficher['propagation'] )\r
change=editor.changeIntoDefMC('Modele', ('b_type_creation','Chemical_Equation','b_ajout_equation','listeEquation_termination'),dicoListeEquationAAfficher['termination'] )\r
\r
print (lInitialCoche,lInititiationCoche,lPropagationCoche,lTerminationCoche,lStabilizationCoche)\r
for liste in (lInitialCoche,lInititiationCoche,lPropagationCoche,lTerminationCoche,lStabilizationCoche):\r
- # Il est possible qu'une liste soit vide lors de l initialisation\r
- if liste == None : continue \r
+ # Il est possible qu'une liste soit vide lors de l initialisation\r
+ if liste == None : continue\r
for equation in liste :\r
print (equation)\r
for const in maClasseDelistesDB.dictParametresInitiaux[equation].constituants :\r
- if const not in maClasseDelistesDB.listeParametresInitiaux : maClasseDelistesDB.listeParametresInitiaux.append(const)\r
+ if const not in maClasseDelistesDB.listeParametresInitiaux : maClasseDelistesDB.listeParametresInitiaux.append(const)\r
#for coef in maClasseDelistesDB.dictParametresInitiaux[equation].const_cine_nom :\r
# if coef not in maClasseDelistesDB.listeCoefInitiaux : maClasseDelistesDB.listeCoefInitiaux.append(coef)\r
for num,coef in enumerate(maClasseDelistesDB.dictParametresInitiaux[equation].const_cine_nom ):\r
- maClasseDelistesDB.dicoCoefAffichageArr[coef]=maClasseDelistesDB.dictParametresInitiaux[equation].arrhenius[num]\r
- if coef not in maClasseDelistesDB.listeCoefInitiaux : maClasseDelistesDB.listeCoefInitiaux.append(coef)\r
+ maClasseDelistesDB.dicoCoefAffichageArr[coef]=maClasseDelistesDB.dictParametresInitiaux[equation].arrhenius[num]\r
+ if coef not in maClasseDelistesDB.listeCoefInitiaux : maClasseDelistesDB.listeCoefInitiaux.append(coef)\r
\r
#print('maClasseDelistesDB.dictParametresInitiaux', maClasseDelistesDB.dictParametresInitiaux)\r
if monMCNom == 'Diffusion' :\r
- change=editor.changeIntoDefMC('Modele', ('b_type_creation','Transport','b_diffusion','listeProduitPourLaDiffusion'), maClasseDelistesDB.listeParametresInitiaux )\r
+ change=editor.changeIntoDefMC('Modele', ('b_type_creation','Transport','b_diffusion','listeProduitPourLaDiffusion'), maClasseDelistesDB.listeParametresInitiaux )\r
if monMCNom == 'Evaporation' :\r
- change=editor.changeIntoDefMC('Modele', ('b_type_creation','Transport','b_evaporation','listeProduitPourLEvaporation'), maClasseDelistesDB.listeParametresInitiaux )\r
+ change=editor.changeIntoDefMC('Modele', ('b_type_creation','Transport','b_evaporation','listeProduitPourLEvaporation'), maClasseDelistesDB.listeParametresInitiaux )\r
\r
if monMCNom in ('Evaporation','Diffusion') :\r
- for c in list(monModele.coef[0].keys()) :\r
- if c[0]=='D':\r
- clef=c[1:]\r
- if clef in maClasseDelistesDB.listeParametresInitiaux :\r
- maClasseDelistesDB.listeCoefD.append(clef)\r
- maClasseDelistesDB.listeCoefInitiaux.append('D'+clef)\r
- maClasseDelistesDB.listeCoefInitiaux.append('S'+clef)\r
- else :\r
- maClasseDelistesDB.listeCoefASupprimer.append('S'+clef)\r
- maClasseDelistesDB.listeCoefASupprimer.append('D'+clef)\r
- if c[0]=='B':\r
- clef=c[1:]\r
- if clef in maClasseDelistesDB.listeParametresInitiaux :\r
- maClasseDelistesDB.listeCoefB.append(clef)\r
- maClasseDelistesDB.listeCoefInitiaux.append(c)\r
- else :\r
- maClasseDelistesDB.listeCoefASupprimer.append(c)\r
+ for c in list(monModele.coef[0].keys()) :\r
+ if c[0]=='D':\r
+ clef=c[1:]\r
+ if clef in maClasseDelistesDB.listeParametresInitiaux :\r
+ maClasseDelistesDB.listeCoefD.append(clef)\r
+ maClasseDelistesDB.listeCoefInitiaux.append('D'+clef)\r
+ maClasseDelistesDB.listeCoefInitiaux.append('S'+clef)\r
+ else :\r
+ maClasseDelistesDB.listeCoefASupprimer.append('S'+clef)\r
+ maClasseDelistesDB.listeCoefASupprimer.append('D'+clef)\r
+ if c[0]=='B':\r
+ clef=c[1:]\r
+ if clef in maClasseDelistesDB.listeParametresInitiaux :\r
+ maClasseDelistesDB.listeCoefB.append(clef)\r
+ maClasseDelistesDB.listeCoefInitiaux.append(c)\r
+ else :\r
+ maClasseDelistesDB.listeCoefASupprimer.append(c)\r
print ('aClasseDelistesDB.listeCoefB',maClasseDelistesDB.listeCoefB)\r
print ('aClasseDelistesDB.listeCoefB',maClasseDelistesDB.listeCoefD)\r
print ('maClasseDelistesDB.listeCoefInitiaux',maClasseDelistesDB.listeCoefInitiaux)\r
# Paraetres_initiaux avec maClasseDelistesDB.listeParametresInitiaux\r
# TO DO TO DO PNPN\r
# si on arrive avex\r
- # if monMC.nom = Diffusion \r
+ # if monMC.nom = Diffusion\r
if monMCNom == 'Diffusion' :\r
- editor.setValeur('Modele','listeProduitPourLaDiffusion' ,maClasseDelistesDB.listeCoefD, ('b_type_creation','Transport','b_diffusion',))\r
+ editor.setValeur('Modele','listeProduitPourLaDiffusion' ,maClasseDelistesDB.listeCoefD, ('b_type_creation','Transport','b_diffusion',))\r
#editor.changeValeur(....,'listeProduitPourLaDiffusion',maClasseDelistesDB.listeCoefD')\r
# if monMCNom == 'Evaporation' :\r
#editor.changeValeur(....,'listeProduitPourLaDiffusion',maClasseDelistesDB.listeCoefB')\r
for v in monMC.valeur :\r
clef='B'+v\r
if clef not in maClasseDelistesDB.listeCoefInitiaux :\r
- maClasseDelistesDB.listeCoefInitiaux.append(clef)\r
+ maClasseDelistesDB.listeCoefInitiaux.append(clef)\r
\r
print ('sortie de ajouteDiffusion' , maClasseDelistesDB.listeCoefInitiaux)\r
monMC.dsMaFunct=False\r
for v in monMC.valeur :\r
clef='D'+v\r
if clef not in maClasseDelistesDB.listeCoefInitiaux :\r
- maClasseDelistesDB.listeCoefInitiaux.append(clef)\r
- maClasseDelistesDB.listeCoefInitiaux.append('S'+v)\r
- maClasseDelistesDB.dicoCoefAffichageArr[clef] = True\r
- maClasseDelistesDB.dicoCoefAffichageArr['S'+v] = False\r
- #maClasseDelistesDB.dicoCoefAffichageArr['B'+v] = True\r
- \r
- # on affiche dans l interface un mot clef avec clef comme nom et \r
+ maClasseDelistesDB.listeCoefInitiaux.append(clef)\r
+ maClasseDelistesDB.listeCoefInitiaux.append('S'+v)\r
+ maClasseDelistesDB.dicoCoefAffichageArr[clef] = True\r
+ maClasseDelistesDB.dicoCoefAffichageArr['S'+v] = False\r
+ #maClasseDelistesDB.dicoCoefAffichageArr['B'+v] = True\r
+\r
+ # on affiche dans l interface un mot clef avec clef comme nom et\r
# 2 reels si ce commence par D soit iniitialise a 0 si pas de valeur\r
# soit avec comme deifaut nomCoef in monModele.coef[0].keys()\r
print ('sortie de ajouteDiffusion' , maClasseDelistesDB.listeCoefInitiaux)\r
\r
for nomCoef in maClasseDelistesDB.listeCoefInitiaux:\r
- #A jout Ds Coef d'un MC \r
- nomMC='Coef_'+nomCoef \r
+ #A jout Ds Coef d'un MC\r
+ nomMC='Coef_'+nomCoef\r
if maClasseDelistesDB.dicoCoefAffichageArr[nomCoef] == True:\r
- print ('2 r'), \r
- if nomCoef in monModele.coef[0].keys() :\r
- print (monModele.coef[0][nomCoef])\r
- else :\r
- print ((0,0))\r
+ print ('2 r'),\r
+ if nomCoef in monModele.coef[0].keys() :\r
+ print (monModele.coef[0][nomCoef])\r
+ else :\r
+ print ((0,0))\r
else :\r
- print ('1 r') \r
- if nomCoef in monModele.coef[0].keys() :\r
- print (monModele.coef[0][nomCoef])\r
- else :\r
- print (0)\r
+ print ('1 r')\r
+ if nomCoef in monModele.coef[0].keys() :\r
+ print (monModele.coef[0][nomCoef])\r
+ else :\r
+ print (0)\r
\r
print ('______________________')\r
#for v in monMC.valeur :\r
listMateriauxFiltre=[]\r
for modele in listModele :\r
if modele.technical_use == monMC.valeur :\r
- maClasseDelistesDB.dicoModeleFiltre[modele.nom]=modele\r
- listModeleFiltre.append(modele.nom)\r
- if type(modele.materiaux) not in (list, tuple): modeleATraiter= modele.materiaux\r
- else : modeleATraiter= modele.materiaux[0]\r
- if modeleATraiter not in listMateriauxFiltre :\r
- listMateriauxFiltre.append(modeleATraiter)\r
- maClasseDelistesDB.dicoMateriauxFiltre[modeleATraiter]=[modele.nom,]\r
- else :\r
- maClasseDelistesDB.dicoMateriauxFiltre[modeleATraiter].append(modele.nom)\r
- \r
- \r
+ maClasseDelistesDB.dicoModeleFiltre[modele.nom]=modele\r
+ listModeleFiltre.append(modele.nom)\r
+ if type(modele.materiaux) not in (list, tuple): modeleATraiter= modele.materiaux\r
+ else : modeleATraiter= modele.materiaux[0]\r
+ if modeleATraiter not in listMateriauxFiltre :\r
+ listMateriauxFiltre.append(modeleATraiter)\r
+ maClasseDelistesDB.dicoMateriauxFiltre[modeleATraiter]=[modele.nom,]\r
+ else :\r
+ maClasseDelistesDB.dicoMateriauxFiltre[modeleATraiter].append(modele.nom)\r
+\r
+\r
\r
change=editor.changeIntoDefMC('Modele', ('b_type_modification','b_technicalUse','material'),listMateriauxFiltre )\r
\r
aAfficher=str(maClasseDelistesDB.monModele)\r
editor=monMC.jdc.editor\r
editor._viewText(aAfficher, "Id",largeur=700,hauteur=500)\r
- \r
+\r
monMC.dsMaFunct = False\r
- \r
+\r
def changeValeurDefautModele(monMC):\r
if hasattr(monMC,'dsMaFunct') and monMC.dsMaFunct== True : return\r
monMC.dsMaFunct = True\r
dicoNonArr={}\r
for coef in maClasseDelistesDB.monModele.coef[0] :\r
if len (maClasseDelistesDB.monModele.coef[0][coef]) == 1 :\r
- dicoNonArr[coef]=maClasseDelistesDB.monModele.coef[0][coef][0]\r
+ dicoNonArr[coef]=maClasseDelistesDB.monModele.coef[0][coef][0]\r
else :\r
- dicoArr[coef]=maClasseDelistesDB.monModele.coef[0][coef]\r
- if coef[0] == 'D' : maClasseDelistesDB.listeDiffusion.append(coef[1:])\r
+ dicoArr[coef]=maClasseDelistesDB.monModele.coef[0][coef]\r
+ if coef[0] == 'D' : maClasseDelistesDB.listeDiffusion.append(coef[1:])\r
print (dicoNonArr)\r
print (dicoArr)\r
if 'ri' in dicoNonArr :\r
- print ('ajoutDefinitionMC debitOfDose')\r
- editor.ajoutDefinitionMC('Modele', ('b_type_modification','b_technicalUse','b_modele','b_type_use2','Aging_Factor'), 'debitOfDose',typ='R',statut='o' )\r
+ print ('ajoutDefinitionMC debitOfDose')\r
+ editor.ajoutDefinitionMC('Modele', ('b_type_modification','b_technicalUse','b_modele','b_type_use2','Aging_Factor'), 'debitOfDose',typ='R',statut='o' )\r
\r
for coef in dicoNonArr :\r
print (coef)\r
editor.ajoutDefinitionMC('Modele',('b_type_modification','b_technicalUse','b_modele','b_type_use',),coef, 'R', statut='o',defaut=dicoNonArr[coef])\r
# a faire marcher\r
# pour les Arr il faut un tuple(2)\r
- \r
+\r
# il fait creer un fact Boundary_Conditions_Param pour chacque espece de listeDiffusion\r
- \r
+\r
if editor.fenetreCentraleAffichee : editor.fenetreCentraleAffichee.node.affichePanneau()\r
\r
monMC.dsMaFunct = False\r
monMC.dsMaFunct = True\r
editor=monMC.jdc.editor\r
if monMC.valeur in dicoAgingFactor:\r
- print (monMC.valeur, 'trouve')\r
- for MC in dicoAgingFactor[monMC.valeur]:\r
- print (MC)\r
- print (dicoAgingFactor[monMC.valeur][MC]),\r
- editor.setValeur('Modele',MC,dicoAgingFactor[monMC.valeur][MC],('b_type_modification','b_technicalUse','b_modele','b_type_use2','Aging_Factor'))\r
+ print (monMC.valeur, 'trouve')\r
+ for MC in dicoAgingFactor[monMC.valeur]:\r
+ print (MC)\r
+ print (dicoAgingFactor[monMC.valeur][MC]),\r
+ editor.setValeur('Modele',MC,dicoAgingFactor[monMC.valeur][MC],('b_type_modification','b_technicalUse','b_modele','b_type_use2','Aging_Factor'))\r
monMC.dsMaFunct = False\r
\r
\r
class sModele :\r
# --------------------------------------\r
\r
- _instance = None\r
+ _instance = None\r
\r
- def __new__(cls, *args, **kwargs):\r
+ def __new__(cls, *args, **kwargs):\r
if not cls._instance:\r
cls._instance = super(sModele, cls).__new__(\r
cls, *args, **kwargs)\r
\r
return cls._instance\r
\r
- def __init__ (self):\r
- self.monModele=class_data.Modele()\r
- self.monPost=class_data.Post_traitement()\r
+ def __init__ (self):\r
+ self.monModele=class_data.Modele()\r
+ self.monPost=class_data.Post_traitement()\r
\r
\r
# --------------------------------------\r
class classeListesDB :\r
# --------------------------------------\r
\r
- _instance = None\r
+ _instance = None\r
\r
- def __new__(cls, *args, **kwargs):\r
+ def __new__(cls, *args, **kwargs):\r
if not cls._instance:\r
cls._instance = super(listesDB, cls).__new__(\r
cls, *args, **kwargs)\r
\r
return cls._instance\r
\r
- def __init__ (self):\r
- self.listEquation = None\r
- self.listModele = None\r
- self.listPostTraitement = None\r
- self.dicoListAffiche = {}\r
- self.valeurEquationChoisie = None\r
- self.listeConstantesAAfficher = []\r
- self.listeEquationsAAfficher = []\r
- self.listeCoefD = []\r
- self.listeCoefB = []\r
- self.dictParametresInitiaux = {}\r
- self.listeParametresInitiaux= []\r
- self.listeCoefInitiaux= []\r
- self.listeCoefASupprimer= []\r
- self.dicoCoefAffichageArr = {}\r
- self.dicoModeleFiltre = {}\r
- self.dicoMateriauxFiltre = {}\r
- self.monModele = None\r
- self.listeDiffusion = []\r
- \r
- def metAJour(self,valeur):\r
- print ('metAJour')\r
- if valeur == None : return\r
- correspond=pckdb.DBRENAME\r
- self.listEquation, self.listModele,self.listPostTraitement=pckdb.read_pckdb(correspond[valeur])\r
- self.dicoListeEquation = {}\r
- for equation in self.listEquation :\r
- self.dicoListeEquation[equation.representation]=equation\r
-\r
- def getListEquation(self):\r
- return self.listEquation\r
- \r
- def getListModele(self):\r
- return self.listModele\r
-\r
- def getListPostTraitement(self):\r
- return self.listPostTraitement\r
- \r
- def getdicoListAffiche(self):\r
- return self.dicoListAffiche\r
+ def __init__ (self):\r
+ self.listEquation = None\r
+ self.listModele = None\r
+ self.listPostTraitement = None\r
+ self.dicoListAffiche = {}\r
+ self.valeurEquationChoisie = None\r
+ self.listeConstantesAAfficher = []\r
+ self.listeEquationsAAfficher = []\r
+ self.listeCoefD = []\r
+ self.listeCoefB = []\r
+ self.dictParametresInitiaux = {}\r
+ self.listeParametresInitiaux= []\r
+ self.listeCoefInitiaux= []\r
+ self.listeCoefASupprimer= []\r
+ self.dicoCoefAffichageArr = {}\r
+ self.dicoModeleFiltre = {}\r
+ self.dicoMateriauxFiltre = {}\r
+ self.monModele = None\r
+ self.listeDiffusion = []\r
\r
+ def metAJour(self,valeur):\r
+ print ('metAJour')\r
+ if valeur == None : return\r
+ correspond=pckdb.DBRENAME\r
+ self.listEquation, self.listModele,self.listPostTraitement=pckdb.read_pckdb(correspond[valeur])\r
+ self.dicoListeEquation = {}\r
+ for equation in self.listEquation :\r
+ self.dicoListeEquation[equation.representation]=equation\r
+\r
+ def getListEquation(self):\r
+ return self.listEquation\r
+\r
+ def getListModele(self):\r
+ return self.listModele\r
+\r
+ def getListPostTraitement(self):\r
+ return self.listPostTraitement\r
+\r
+ def getdicoListAffiche(self):\r
+ return self.dicoListAffiche\r
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-code="VP"
+code="VP"
import sys, os
if os.path.dirname(os.path.abspath(__file__)) not in sys.path :
- sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
+ sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
)
nombreDeBoutonParLigne=2
closeFrameRechercheCommande = True
-closeEntete = True
+closeEntete = True
#closeArbre = True
afficheOptionnelVide=False
-
# COPYRIGHT (C) 1991 - 2001 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.
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
#
-# 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 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.
#
-# 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.
+# 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.
# ======================================================================
# IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
# DE LA VERSION DU CODE_ASTER ASSOCIE
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module sert a lancer EFICAS configure pour MAP
+ Ce module sert a lancer EFICAS configure pour MAP
"""
# Modules Python
# Modules Eficas
import convert
plugins=pluginloader.PluginLoader(convert)
-
#
from __future__ import absolute_import
from __future__ import print_function
-try :
- from future import standard_library
- standard_library.install_aliases()
+try :
+ from future import standard_library
+ standard_library.install_aliases()
except :
- pass
-try :
- from builtins import str
+ pass
+try :
+ from builtins import str
except :
- pass
+ pass
from builtins import object
import sys,re,tokenize
import io
# le diese n'est pas sur le premier caractere
amont,aval = texte.split('#',1) # on decoupe suivant la premiere occurrence de #
self.texte = self.texte +amont + aval
-
+
class AFFECTATION(ENTITE_JDC):
def appendText(self,texte):
Ajoute texte a self.texte en enlevant tout retour chariot et tout point virgule
"""
self.texte = self.texte+texte
-
+
def __str__(self):
"""
Retourne une expression de l'affectation comprehensible par ACCAS
"""
return "COMMANDE_COMM(texte="+repr(self.texte)+")\n"
-
+
next = {}
next['if'] = next['elif'] = 'elif', 'else', 'end'
next['while'] = next['for'] = 'else', 'end'
class PARSEUR_PYTHON(object):
"""
- Cette classe sert a creer un objet PARSEUR_PYTHON qui realise l'analyse d'un texte
+ Cette classe sert a creer un objet PARSEUR_PYTHON qui realise l'analyse d'un texte
representant un JDC Python en distinguant :
- les commentaires inter commandes
- les affectations
def getOptions(self):
m= self.optionprog.match(self.line)
if m:
- option=m.group(1)
- name=option[1:]
- flag=(option[0] == '+')
- if name == "affectation": self.affectation_flag=flag
- if name == "comment": self.comment_flag=flag
- if name == "all":
- self.comment_flag=flag
- self.affectation_flag=flag
+ option=m.group(1)
+ name=option[1:]
+ flag=(option[0] == '+')
+ if name == "affectation": self.affectation_flag=flag
+ if name == "comment": self.comment_flag=flag
+ if name == "all":
+ self.comment_flag=flag
+ self.affectation_flag=flag
def readline(self):
self.line= self.texte.readline()
def updateIndent(self):
#print "updateIndent",len(self.indent_list[-1]),len(self.buffer_indent)
if len(self.indent_list[-1]) > len(self.buffer_indent):
- self.out=self.out+(len(self.indent_list[-1]) - len(self.buffer_indent))*" "
- self.buffer_indent=self.indent_list[-1]
+ self.out=self.out+(len(self.indent_list[-1]) - len(self.buffer_indent))*" "
+ self.buffer_indent=self.indent_list[-1]
def doIndent(self):
#print "indentation dans doIndent",len(self.indent_list)
self.out=self.out+self.indent_list[-1]
self.buffer_indent=self.indent_list[-1]
if self.lastcol+len(self.indent_list[-1]) > self.thiscol:
- self.lastcol=self.thiscol
+ self.lastcol=self.thiscol
else:
- self.lastcol=self.lastcol+len(self.indent_list[-1])
+ self.lastcol=self.lastcol+len(self.indent_list[-1])
self.please_indent = None
def flush_buffer(self):
#if self.buffer:
# print len(self.indent_list),self.please_indent
for ob in self.buffer:
- self.out= self.out+ str(ob)
- self.doIndent()
+ self.out= self.out+ str(ob)
+ self.doIndent()
self.buffer=[]
self.objet_courant=None
def NL(self, tstring):
if self.affectation:
- if self.paren_level == 0:
- # affectation en cours mais complete
- self.out= self.out+ str(self.affectation_courante)
- self.affectation_courante=None
- self.please_indent=1
- self.affectation=0
- else:
- # affectation en cours, on ajoute
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- return
-
+ if self.paren_level == 0:
+ # affectation en cours mais complete
+ self.out= self.out+ str(self.affectation_courante)
+ self.affectation_courante=None
+ self.please_indent=1
+ self.affectation=0
+ else:
+ # affectation en cours, on ajoute
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ return
+
if self.objet_courant:
- self.objet_courant=None
- self.buffer.append(tstring)
+ self.objet_courant=None
+ self.buffer.append(tstring)
# self.please_indent = None
- return
+ return
self.output(tstring)
self.please_indent = 1
def COMMENT(self, tstring):
liste= string.split(self.line,"##",1)
if len(liste) > 1:
- # On a trouve un double commentaire
- before,after=liste
- if self.affectation:
- # affectation en cours, on ignore
- pass
- elif self.paren_level > 0:
- self.output(tstring)
- elif self.comment_flag and not self.pattern_ligne_non_blanche.search(before):
- # il s'agit d'une commande commentarisee
- if self.objet_courant == None:
- if not self.buffer:self.buffer_indent=self.indent_list[-1]
- self.objet_courant=COMMANDE_COMMENTARISEE()
- self.buffer.append(self.objet_courant)
- self.objet_courant.appendText(tstring)
- self.please_indent = None
- elif isinstance(self.objet_courant,COMMENTAIRE):
- self.objet_courant=COMMANDE_COMMENTARISEE()
- self.buffer.append(self.objet_courant)
- self.objet_courant.appendText(tstring)
- self.please_indent = None
- else:
- self.objet_courant.appendText(tstring)
- self.please_indent = None
- else:
- # commentaire inline
- self.output(tstring)
- self.please_indent = 1
- return
+ # On a trouve un double commentaire
+ before,after=liste
+ if self.affectation:
+ # affectation en cours, on ignore
+ pass
+ elif self.paren_level > 0:
+ self.output(tstring)
+ elif self.comment_flag and not self.pattern_ligne_non_blanche.search(before):
+ # il s'agit d'une commande commentarisee
+ if self.objet_courant == None:
+ if not self.buffer:self.buffer_indent=self.indent_list[-1]
+ self.objet_courant=COMMANDE_COMMENTARISEE()
+ self.buffer.append(self.objet_courant)
+ self.objet_courant.appendText(tstring)
+ self.please_indent = None
+ elif isinstance(self.objet_courant,COMMENTAIRE):
+ self.objet_courant=COMMANDE_COMMENTARISEE()
+ self.buffer.append(self.objet_courant)
+ self.objet_courant.appendText(tstring)
+ self.please_indent = None
+ else:
+ self.objet_courant.appendText(tstring)
+ self.please_indent = None
+ else:
+ # commentaire inline
+ self.output(tstring)
+ self.please_indent = 1
+ return
else:
- # On a un commentaire simple
- new_line = self.line.split('#')[0]
- if self.affectation:
- # affectation en cours, on ignore
- pass
- elif self.paren_level > 0:
- self.output(tstring)
- elif self.comment_flag and not self.pattern_ligne_non_blanche.search(new_line):
- # commentaire precede de blancs
- if self.objet_courant == None:
- if not self.buffer:self.buffer_indent=self.indent_list[-1]
- self.objet_courant=COMMENTAIRE()
- self.buffer.append(self.objet_courant)
- self.objet_courant.appendText(tstring)
- self.please_indent = None
- elif isinstance(self.objet_courant,COMMANDE_COMMENTARISEE):
- self.objet_courant=COMMENTAIRE()
- self.buffer.append(self.objet_courant)
- self.objet_courant.appendText(tstring)
- self.please_indent = None
- else:
- self.objet_courant.appendText(tstring)
- self.please_indent = None
- else:
- # commentaire inline
- self.output(tstring)
- self.please_indent = 1
- return
+ # On a un commentaire simple
+ new_line = self.line.split('#')[0]
+ if self.affectation:
+ # affectation en cours, on ignore
+ pass
+ elif self.paren_level > 0:
+ self.output(tstring)
+ elif self.comment_flag and not self.pattern_ligne_non_blanche.search(new_line):
+ # commentaire precede de blancs
+ if self.objet_courant == None:
+ if not self.buffer:self.buffer_indent=self.indent_list[-1]
+ self.objet_courant=COMMENTAIRE()
+ self.buffer.append(self.objet_courant)
+ self.objet_courant.appendText(tstring)
+ self.please_indent = None
+ elif isinstance(self.objet_courant,COMMANDE_COMMENTARISEE):
+ self.objet_courant=COMMENTAIRE()
+ self.buffer.append(self.objet_courant)
+ self.objet_courant.appendText(tstring)
+ self.please_indent = None
+ else:
+ self.objet_courant.appendText(tstring)
+ self.please_indent = None
+ else:
+ # commentaire inline
+ self.output(tstring)
+ self.please_indent = 1
+ return
def ERRORTOKEN(self, tstring):
print("ERRORTOKEN", tstring)
def NAME(self, tstring):
if self.buffer:
- self.updateIndent()
+ self.updateIndent()
self.flush_buffer()
if self.affectation ==1:
- # on a une expression du type NAME=NAME
- # on ne veut pas des expressions qui commencent par NAME=NAME(NAME=
- # on en prend le chemin : on met affectation a 3 pour le signaler
- # on attend d'en savoir plus
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- self.affectation=3
- return
+ # on a une expression du type NAME=NAME
+ # on ne veut pas des expressions qui commencent par NAME=NAME(NAME=
+ # on en prend le chemin : on met affectation a 3 pour le signaler
+ # on attend d'en savoir plus
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ self.affectation=3
+ return
elif self.affectation ==4:
- # on a une expression qui commence par NAME=NAME(NAME
- # il s'agit tres probablement d'une commande
- # on annule l'affectation en cours
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- self.affectation=5
- return
+ # on a une expression qui commence par NAME=NAME(NAME
+ # il s'agit tres probablement d'une commande
+ # on annule l'affectation en cours
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ self.affectation=5
+ return
elif self.affectation == 2:
- # affectation en cours, on ajoute
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- self.affectation=2
- return
+ # affectation en cours, on ajoute
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ self.affectation=2
+ return
self.affectation=0
self.name=None
- if self.paren_level == 0 and self.affectation_flag:
- # si on est en dehors de parentheses et en mode transformation d'affectation
- # on initialise l'attribut name qui indique une affectation en cours
- self.name=tstring
+ if self.paren_level == 0 and self.affectation_flag:
+ # si on est en dehors de parentheses et en mode transformation d'affectation
+ # on initialise l'attribut name qui indique une affectation en cours
+ self.name=tstring
self.output(tstring)
def ident(self, tstring):
def NUMBER(self, tstring):
self.flush_buffer()
if self.affectation>=1:
- # affectation en cours, on ajoute
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- self.affectation=2
- return
+ # affectation en cours, on ajoute
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ self.affectation=2
+ return
self.output(tstring)
def OP(self,tstring):
if tstring in (')',']','}'): self.paren_level=self.paren_level-1
if tstring == '=' and self.affectation ==5:
- # on a une expression qui commence par NAME=NAME(NAME=)
- # il peut s'agir d'une commande
- # on annule l'affectation en cours
- self.out= self.out+ self.affectation_courante.texte
- self.affectation_courante=None
- self.name=None
- self.affectation=0
+ # on a une expression qui commence par NAME=NAME(NAME=)
+ # il peut s'agir d'une commande
+ # on annule l'affectation en cours
+ self.out= self.out+ self.affectation_courante.texte
+ self.affectation_courante=None
+ self.name=None
+ self.affectation=0
elif tstring == ')' and self.affectation ==4:
- # on a une expression qui commence par NAME=NAME()
- # il peut s'agir d'une commande
- # on annule l'affectation en cours
- self.out= self.out+ self.affectation_courante.texte
- self.affectation_courante=None
- self.affectation=0
+ # on a une expression qui commence par NAME=NAME()
+ # il peut s'agir d'une commande
+ # on annule l'affectation en cours
+ self.out= self.out+ self.affectation_courante.texte
+ self.affectation_courante=None
+ self.affectation=0
elif tstring == '(' and self.affectation == 3:
- # on a deja trouve NAME=NAME
- # on passe affectation a 4
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- self.affectation=4
- return
+ # on a deja trouve NAME=NAME
+ # on passe affectation a 4
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ self.affectation=4
+ return
elif tstring == ';' and self.affectation>=1:
- # l'affectation est terminee
- self.out= self.out+ str(self.affectation_courante)
- self.affectation_courante=None
- self.please_indent=1
- self.affectation=0
+ # l'affectation est terminee
+ self.out= self.out+ str(self.affectation_courante)
+ self.affectation_courante=None
+ self.please_indent=1
+ self.affectation=0
elif self.affectation>=1:
- # on complete l'affectation
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- self.affectation=2
- return
+ # on complete l'affectation
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ self.affectation=2
+ return
self.affectation=0
- if self.name and tstring=='=':
- self.affectation=1
- self.affectation_courante=AFFECTATION()
- self.affectation_courante.name=self.name
+ if self.name and tstring=='=':
+ self.affectation=1
+ self.affectation_courante=AFFECTATION()
+ self.affectation_courante.name=self.name
self.output(tstring)
ENDMARKER = ident
def INDENT(self, tstring):
#tstring=str(len(self.indent_list))*len(tstring)
- self.indent_list.append(tstring)
+ self.indent_list.append(tstring)
#print "indentation dans INDENT",len(self.indent_list),len(tstring)
self.affectation=0
if self.buffer:
- self.updateIndent()
+ self.updateIndent()
self.flush_buffer()
def DEDENT(self, tstring):
#print "DEDENT",tstring,len(tstring)
if self.buffer:
- self.out= self.out+ str(self.buffer[0])
- if len(self.buffer) > 1:
- for ob in self.buffer[1:]:
- self.doIndent()
- self.out= self.out+ str(ob)
- self.buffer=[]
- self.objet_courant=None
- self.please_indent=1
+ self.out= self.out+ str(self.buffer[0])
+ if len(self.buffer) > 1:
+ for ob in self.buffer[1:]:
+ self.doIndent()
+ self.out= self.out+ str(ob)
+ self.buffer=[]
+ self.objet_courant=None
+ self.please_indent=1
self.affectation=0
- self.indent_list = self.indent_list[:-1]
+ self.indent_list = self.indent_list[:-1]
#print "indentation dans DEDENT",len(self.indent_list)
def STRING(self, tstring):
self.flush_buffer()
if self.affectation>=1:
- # affectation en cours, on ajoute
- if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
- self.affectation_courante.appendText(tstring)
- self.affectation=2
- return
+ # affectation en cours, on ajoute
+ if self.thiscol > self.lastcol :self.affectation_courante.appendText((self.thiscol - self.lastcol)*" ")
+ self.affectation_courante.appendText(tstring)
+ self.affectation=2
+ return
self.output(tstring)
if __name__ == "__main__" :
FILTRE=(
_F( NOM_PARA = 'QUANTITE',
VALE_K = 'MAXIMUM'),),
- # commentaire
+ # commentaire
NOM_PARA='VMIS', # comm
VALE=1.9669824189084E9,
REFERENCE='NON_REGRESSION',
#comm
if t:
- a=5
+ a=5
#comm
if 1:
a=2
f=open("coque.geo","w")
#comm
- if 1:
+ if 1:
if 2:
if 3:
a=1
"""
if len(sys.argv)== 2:
- progname, input = sys.argv
- f=open(input)
- t=f.read()
- f.close()
+ progname, input = sys.argv
+ f=open(input)
+ t=f.read()
+ f.close()
else:
- t=text
+ t=text
txt = PARSEUR_PYTHON(t).getTexte()
print (txt)
compile(txt,"<string>",'exec')
from convert.convert_python import Pythonparser
try:
- basestring
+ basestring
except NameError:
- basestring = str
+ basestring = str
pattern_comment_slash = re.compile(r"^\s*/")
pattern_comment_slash_vide = re.compile(r"^\s*/\s*$")
def entryPoint():
- """
- Return a dictionary containing the description needed to load the plugin
- """
- return {
- 'name' : 'TELEMAC',
- 'factory' : TELEMACparser
- }
+ """
+ Return a dictionary containing the description needed to load the plugin
+ """
+ return {
+ 'name' : 'TELEMAC',
+ 'factory' : TELEMACparser
+ }
class TELEMACparser(Pythonparser):
- """
- This converter works like Pythonparser, except that it also initializes all
- model variables to None in order to avoid Python syntax errors when loading
- a file with a different or inexistent definition of variables.
- """
-
-
-
- def convert(self, outformat, appliEficas=None):
-
-
- from Accas import A_BLOC, A_FACT, A_SIMP
- try :
- self.dicoCasToCata = appliEficas.readercata.dicoCasToCata
- except :
- self.dicoCasToCata = {}
- print ('pas de dicoCasToCata')
- self.dicoInverse = appliEficas.readercata.dicoInverse
- self.dicoMC = appliEficas.readercata.dicoMC
- self.Ordre_Des_Commandes = appliEficas.readercata.Ordre_Des_Commandes
- try :
- self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn
- except :
- self.TelemacdicoEn = {}
- print ('pas de TelemacdicoEn')
- try :
- self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn
- except :
- self.DicoEnumCasFrToEnumCasEn = {}
- print ('pas de DicoEnumCasFrToEnumCasEn')
-
-
- if appliEficas.langue=='fr' :
- #from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn
- for k in self.DicoEnumCasFrToEnumCasEn :
- self.TelemacdicoEn[k]=self.DicoEnumCasFrToEnumCasEn[k]
-
- text=""
- self.dictSimp={}
-
- l_lignes_texte_all = self.text.split('\n')
- l_lignes_texte = []
- listeComment = []
- dicoComment={}
- dicoCommentSimp={}
- dicoCommentMC={}
- texteComment=""
- debut=True
- trouveComment = 0
- for l in l_lignes_texte_all :
- if pattern_eta.match(l) : continue
- if pattern_fin.match(l) : continue
- if pattern_blanc.match(l) : continue
-
- if not(pattern_comment_slash.match(l)):
- l_lignes_texte.append(l)
- if trouveComment :
- if debut: dicoComment['debut']=texteComment
- else : dicoComment[l]=texteComment
- trouveComment = 0
- texteComment=""
- if debut : debut = False
-
- if pattern_comment_slash.match(l):
- #if pattern_comment_slash_vide.match(l) : continue
- if pattern_comment_tiret.match(l) : continue
- texteComment+=l.replace ('/','',1)
- texteComment+='\n'
- trouveComment=1
-
- if texteComment != "" : dicoComment['fin']= texteComment
-
-
- l_lignes=[]
- i=0
- while (i < len(l_lignes_texte)) :
- ligne=l_lignes_texte[i]
- i=i+1
- if not(pattern_finit_par_virgule_ou_affect.match(ligne)):
- l_lignes.append(ligne)
- continue
- nouvelle_ligne=ligne
- while (i < len(l_lignes_texte)):
- ligne_traitee=l_lignes_texte[i]
- i=i+1
- nouvelle_ligne += ligne_traitee
- if not(pattern_finit_par_virgule_ou_affect.match(ligne_traitee)):
- l_lignes.append(nouvelle_ligne)
- break
-
-
- for ligne in l_lignes :
- if pattern_comment_slash.match(ligne) : continue
- #PN : deja teste
- #if pattern_eta.match(ligne) : continue
- #if pattern_fin.match(ligne) : continue
- #if pattern_blanc.match(ligne) : continue
-
-
- finLigne=ligne
- while finLigne != "" :
- if pattern_comment_slash.match(finLigne) : finLigne=""; continue
- valeur=""
- if pattern_variables.match(finLigne) :
- m=pattern_variables.match(finLigne)
- simpCas=self.traiteIdent(m.group('ident'))
- valeur=m.group('valeur')
- finLigne=m.group('reste')
- self.dictSimp[simpCas]=valeur
- continue
-
-
- m=pattern_ligne.match(finLigne)
- if m == None :
- #print( "________________________________________________")
- print ('pb avec ****', finLigne , '**** dans ', ligne)
- #print( "________________________________________________")
- break
-
- simpCas=self.traiteIdent(m.group('ident'))
- if not simpCas :
- finLigne=m.group('reste')
- continue
-
- finLigne=m.group('reste')
- # attention, l ordre des if est important
- if pattern_liste.match(finLigne) :
- m=pattern_liste.match(finLigne)
- elif pattern_liste_texte.match(finLigne) :
- m=pattern_liste_texte.match(finLigne)
- elif pattern_texteQuote.match(finLigne) :
- m=pattern_texteQuote.match(finLigne)
- elif pattern_flottant.match(finLigne) :
- m=pattern_flottant.match(finLigne)
- elif pattern_texteVide.match(finLigne):
- m=pattern_texteVide.match(finLigne)
- elif pattern_texteSimple.match(finLigne):
- m=pattern_texteSimple.match(finLigne)
- else :
- #print ("________________________________________________")
- print ('pb avec ****', finLigne , '**** dans ', ligne)
- print ("non match")
- #print ("________________________________________________")
- break
-
-
- valeur=m.group('valeur')
- if pattern_blanc.match(valeur) : valeur=None
-
- if pattern_flottant.match(finLigne) :
- valeur=re.sub("d","e",valeur)
- valeur=re.sub("D","E",valeur)
-
- if pattern_liste.match(finLigne) or pattern_liste_texte.match(finLigne):
- valeur=valeur.split(";")
-
-
- finLigne=m.group('reste')
- self.dictSimp[simpCas]=valeur
-
- if ligne in dicoComment.keys():
- dicoCommentSimp[simpCas]=dicoComment[ligne]
-
- if 'TITLE' not in self.dictSimp :
- import os
- #self.dictSimp['TITLE']=os.path.basename(self.filename)
-
-
- dicoParMC={}
- for simp in self.dictSimp:
- if simp in TELEMACparser.__dict__ : TELEMACparser.__dict__[simp](self,)
-
- for simp in self.dictSimp:
- if simp not in self.dicoInverse :
- #print ( "************")
- print ("pb avec dans dicoInverse", simp,'------')
- print("dicoInverse",sorted(self.dicoInverse.keys()))
- #print ("************")
- continue
- listeGenea=self.dicoInverse[simp]
- listeGeneaReverse=[]
- for (u,v) in listeGenea :
- if isinstance(v,A_BLOC.BLOC): continue
- listeGeneaReverse.append(u)
- listeGeneaReverse.reverse()
- dicoTravail=dicoParMC
- i=0
- if simp in dicoCommentSimp :
- MC=listeGeneaReverse[0]
- if MC in dicoCommentMC : dicoCommentMC[MC]+dicoCommentSimp[simp]
- else : dicoCommentMC[MC]=dicoCommentSimp[simp]
- while i < len(listeGeneaReverse[0:-1]) :
- mot=listeGeneaReverse[i]
+ """
+ This converter works like Pythonparser, except that it also initializes all
+ model variables to None in order to avoid Python syntax errors when loading
+ a file with a different or inexistent definition of variables.
+ """
+
+
+
+ def convert(self, outformat, appliEficas=None):
+
+
+ from Accas import A_BLOC, A_FACT, A_SIMP
+ try :
+ self.dicoCasToCata = appliEficas.readercata.dicoCasToCata
+ except :
+ self.dicoCasToCata = {}
+ print ('pas de dicoCasToCata')
+ self.dicoInverse = appliEficas.readercata.dicoInverse
+ self.dicoMC = appliEficas.readercata.dicoMC
+ self.Ordre_Des_Commandes = appliEficas.readercata.Ordre_Des_Commandes
+ try :
+ self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn
+ except :
+ self.TelemacdicoEn = {}
+ print ('pas de TelemacdicoEn')
+ try :
+ self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn
+ except :
+ self.DicoEnumCasFrToEnumCasEn = {}
+ print ('pas de DicoEnumCasFrToEnumCasEn')
+
+
+ if appliEficas.langue=='fr' :
+ #from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn
+ for k in self.DicoEnumCasFrToEnumCasEn :
+ self.TelemacdicoEn[k]=self.DicoEnumCasFrToEnumCasEn[k]
+
+ text=""
+ self.dictSimp={}
+
+ l_lignes_texte_all = self.text.split('\n')
+ l_lignes_texte = []
+ listeComment = []
+ dicoComment={}
+ dicoCommentSimp={}
+ dicoCommentMC={}
+ texteComment=""
+ debut=True
+ trouveComment = 0
+ for l in l_lignes_texte_all :
+ if pattern_eta.match(l) : continue
+ if pattern_fin.match(l) : continue
+ if pattern_blanc.match(l) : continue
+
+ if not(pattern_comment_slash.match(l)):
+ l_lignes_texte.append(l)
+ if trouveComment :
+ if debut: dicoComment['debut']=texteComment
+ else : dicoComment[l]=texteComment
+ trouveComment = 0
+ texteComment=""
+ if debut : debut = False
+
+ if pattern_comment_slash.match(l):
+ #if pattern_comment_slash_vide.match(l) : continue
+ if pattern_comment_tiret.match(l) : continue
+ texteComment+=l.replace ('/','',1)
+ texteComment+='\n'
+ trouveComment=1
+
+ if texteComment != "" : dicoComment['fin']= texteComment
+
+
+ l_lignes=[]
+ i=0
+ while (i < len(l_lignes_texte)) :
+ ligne=l_lignes_texte[i]
i=i+1
- if mot not in dicoTravail: dicoTravail[mot]={}
- dicoTravail=dicoTravail[mot]
- dicoTravail[simp]=self.dictSimp[simp]
-
- self.textePy=""
- listeMC=self.tri(list(dicoParMC.keys()))
- for k in listeMC :
- if k in dicoCommentMC :
+ if not(pattern_finit_par_virgule_ou_affect.match(ligne)):
+ l_lignes.append(ligne)
+ continue
+ nouvelle_ligne=ligne
+ while (i < len(l_lignes_texte)):
+ ligne_traitee=l_lignes_texte[i]
+ i=i+1
+ nouvelle_ligne += ligne_traitee
+ if not(pattern_finit_par_virgule_ou_affect.match(ligne_traitee)):
+ l_lignes.append(nouvelle_ligne)
+ break
+
+
+ for ligne in l_lignes :
+ if pattern_comment_slash.match(ligne) : continue
+ #PN : deja teste
+ #if pattern_eta.match(ligne) : continue
+ #if pattern_fin.match(ligne) : continue
+ #if pattern_blanc.match(ligne) : continue
+
+
+ finLigne=ligne
+ while finLigne != "" :
+ if pattern_comment_slash.match(finLigne) : finLigne=""; continue
+ valeur=""
+ if pattern_variables.match(finLigne) :
+ m=pattern_variables.match(finLigne)
+ simpCas=self.traiteIdent(m.group('ident'))
+ if simpCas in ["COUPLING WITH", "COUPLAGE AVEC"]:
+ if "," in m.group('valeur'):
+ valeur=m.group('valeur').split(",")
+ else:
+ valeur=m.group('valeur').split(";")
+ else:
+ valeur=m.group('valeur')
+ finLigne=m.group('reste')
+ self.dictSimp[simpCas]=valeur
+ continue
+
+
+ m=pattern_ligne.match(finLigne)
+ if m == None :
+ #print( "________________________________________________")
+ print ('pb avec ****', finLigne , '**** dans ', ligne)
+ #print( "________________________________________________")
+ break
+
+ simpCas=self.traiteIdent(m.group('ident'))
+ if not simpCas :
+ finLigne=m.group('reste')
+ continue
+
+ finLigne=m.group('reste')
+ # attention, l ordre des if est important
+ if pattern_liste.match(finLigne) :
+ m=pattern_liste.match(finLigne)
+ elif pattern_liste_texte.match(finLigne) :
+ m=pattern_liste_texte.match(finLigne)
+ elif pattern_texteQuote.match(finLigne) :
+ m=pattern_texteQuote.match(finLigne)
+ elif pattern_flottant.match(finLigne) :
+ m=pattern_flottant.match(finLigne)
+ elif pattern_texteVide.match(finLigne):
+ m=pattern_texteVide.match(finLigne)
+ elif pattern_texteSimple.match(finLigne):
+ m=pattern_texteSimple.match(finLigne)
+ else :
+ #print ("________________________________________________")
+ print ('pb avec ****', finLigne , '**** dans ', ligne)
+ print ("non match")
+ #print ("________________________________________________")
+ break
+
+
+ valeur=m.group('valeur')
+ if pattern_blanc.match(valeur) : valeur=None
+
+ if pattern_flottant.match(finLigne) :
+ valeur=re.sub("d","e",valeur)
+ valeur=re.sub("D","E",valeur)
+
+ if pattern_liste.match(finLigne) or \
+ pattern_liste_texte.match(finLigne):
+ valeur=valeur.split(";")
+
+
+ finLigne=m.group('reste')
+ self.dictSimp[simpCas]=valeur
+
+ if ligne in dicoComment.keys():
+ dicoCommentSimp[simpCas]=dicoComment[ligne]
+
+ if 'TITLE' not in self.dictSimp :
+ import os
+ #self.dictSimp['TITLE']=os.path.basename(self.filename)
+
+
+ dicoParMC={}
+ for simp in self.dictSimp:
+ if simp in TELEMACparser.__dict__ : TELEMACparser.__dict__[simp](self,)
+
+ for simp in self.dictSimp:
+ if simp not in self.dicoInverse :
+ #print ( "************")
+ print ("pb avec dans dicoInverse", simp,'------')
+ print("dicoInverse",sorted(self.dicoInverse.keys()))
+ #print ("************")
+ continue
+ listeGenea=self.dicoInverse[simp]
+ listeGeneaReverse=[]
+ for (u,v) in listeGenea :
+ if isinstance(v,A_BLOC.BLOC): continue
+ listeGeneaReverse.append(u)
+ listeGeneaReverse.reverse()
+ dicoTravail=dicoParMC
+ i=0
+ if simp in dicoCommentSimp :
+ MC=listeGeneaReverse[0]
+ if MC in dicoCommentMC : dicoCommentMC[MC]+dicoCommentSimp[simp]
+ else : dicoCommentMC[MC]=dicoCommentSimp[simp]
+ while i < len(listeGeneaReverse[0:-1]) :
+ mot=listeGeneaReverse[i]
+ i=i+1
+ if mot not in dicoTravail: dicoTravail[mot]={}
+ dicoTravail=dicoTravail[mot]
+ dicoTravail[simp]=self.dictSimp[simp]
+
+ self.textePy=""
+ listeMC=self.tri(list(dicoParMC.keys()))
+ for k in listeMC :
+ if k in dicoCommentMC :
commentaire="COMMENTAIRE("+repr(dicoCommentMC[k])+")\n"
self.textePy+=commentaire
- self.textePy += str(k )+ "("
- self.traiteMC(dicoParMC[k])
- self.textePy += ");\n"
-
-
- # ne sert plus
- #appliEficas.listeTelemac=self.dictSimp
- appliEficas.listeTelemac={}
- if 'debut' in dicoComment :
- commentaire="COMMENTAIRE("+repr(dicoComment['debut'])+")\n"
- self.textePy=commentaire+self.textePy
- if 'fin' in dicoComment :
- commentaire="COMMENTAIRE("+repr(dicoComment['fin'])+")\n"
- self.textePy=self.textePy+commentaire
-
- #print (self.textePy)
- return self.textePy
-
-
- #----------------------------------------
- def traiteIdent(self,ident):
- # enleve les espaces de part et autre
- # traduit du langage Telemac vers le langage Catalogue
- #----------------------------------------
- while ident[-1] == " " or ident[-1] == '\t' : ident=ident[0:-1]
- while ident[0] == " " or ident[0] == '\t' : ident=ident[1:]
- try : identCata=self.dicoCasToCata[ident]
- except :
+ self.textePy += str(k )+ "("
+ self.traiteMC(dicoParMC[k])
+ self.textePy += ");\n"
+
+
+ # ne sert plus
+ #appliEficas.listeTelemac=self.dictSimp
+ appliEficas.listeTelemac={}
+ if 'debut' in dicoComment :
+ commentaire="COMMENTAIRE("+repr(dicoComment['debut'])+")\n"
+ self.textePy=commentaire+self.textePy
+ if 'fin' in dicoComment :
+ commentaire="COMMENTAIRE("+repr(dicoComment['fin'])+")\n"
+ self.textePy=self.textePy+commentaire
+
+ #print (self.textePy)
+ return self.textePy
+
+
+ #----------------------------------------
+ def traiteIdent(self,ident):
+ # enleve les espaces de part et autre
+ # traduit du langage Telemac vers le langage Catalogue
+ #----------------------------------------
+ while ident[-1] == " " or ident[-1] == '\t' : ident=ident[0:-1]
+ while ident[0] == " " or ident[0] == '\t' : ident=ident[1:]
+ try : identCata=self.dicoCasToCata[ident]
+ except :
print ( "---> ", "pb mot clef pour", ident)
identCata=None
- return identCata
-
-
- def traiteMC(self,dico) :
- from Accas import A_BLOC, A_FACT, A_SIMP
- for k in dico :
- valeur= dico[k]
- if k not in self.dicoMC : kA=self.dicoFrancaisAnglais[k]
- else : kA=k
- obj=self.dicoMC[kA]
- if isinstance(obj,A_FACT.FACT): self.convertFACT(obj,kA,valeur)
- elif isinstance(obj,A_BLOC.BLOC): self.convertBLOC(obj,kA,valeur)
- elif isinstance(obj,A_SIMP.SIMP): self.convertSIMP(obj,kA,valeur)
- else : print ("%%%%%%%%%%%\n", "pb conversion type pour", k, obj, "\n%%%%%%%%%%%")
-
-
- def convertFACT(self,obj,nom,valeur):
- # traitement LIQUID_BOUNDARIES
- if nom in TELEMACparser.__dict__ :
- TELEMACparser.__dict__[nom](self,)
- return
- self.textePy += nom + "=_F( "
- self.traiteMC(valeur)
- self.textePy += '),\n'
-
-
- def convertBLOC(self,obj,nom,valeur):
- print ("ANOMALIE _________ BLOC ")
- print (nom)
-
- def convertSIMP(self,obj,nom,valeur):
- #print ('in convertSIMP', nom,valeur)
- #if nom in ("PRESCRIBED_FLOWRATES", "PRESCRIBED_VELOCITIES", "PRESCRIBED_ELEVATIONS" ): return
- if obj.max==1 :
- if hasattr(obj.type[0],'ntuple') :
- lval=[]
- for v in valeur :
- try : v=eval(v,{})
- except : pass
- lval.append(v)
- self.textePy += nom + "=" + str(lval) +","
- return
- if 'TXM' in obj.type :
-
- if pattern_ContientDouble.match(str(valeur)):
- valeur=re.sub("''","\'\'",str(valeur))
- self.textePy += nom + "=" + str(valeur) +","
- return
- valeur=str(valeur)
-
- # ceinture et bretelle si les re sont correctes -)
- while valeur[-1] == " " or valeur[-1] == '\t' : valeur=valeur[0:-1]
- while valeur[0] == " " or valeur[0] == '\t' : valeur=valeur[1:]
-
-
-
- # Pour les enum
- try : valeur=eval(valeur,{})
- except : pass
-
- if nom in self.TelemacdicoEn:
- try :
- valeur=self.TelemacdicoEn[nom][valeur]
- self.textePy += nom + "= '" + str(valeur) +"',"
- return
- except : pass
-
-
- if obj.into != [] and obj.into != None and not('R' in obj.type) and not('I' in obj.type):
- for possible in obj.into :
- try :
- if possible.upper() == valeur.upper():
- valeur=possible
- break
- v=valeur[0].upper()+valeur[1:].lower()
- v2=tr(v)
- if possible.upper() == v2.upper():
- valeur=possible
- break
- except:
- if valeur != None :
- print ("pb avec le type de ", obj.nom, obj.type, 'et la valeur ', valeur)
-
- if 'Fichier' in obj.type or 'TXM' in obj.type or 'Repertoire' in obj.type or 'FichierOuRepertoire' in obj.type :
- valeur=str(valeur)
- if valeur == "" or valeur == " " :
- self.textePy += nom + "= '" + str(valeur) +"' ,"
- return
- while valeur[-1] == " " : valeur=valeur[0:-1]
- while valeur[0] == " " : valeur=valeur[1:]
- self.textePy += nom + "= '" + str(valeur) +"' ,"
- return
-
- if bool in obj.type :
- if valeur == True : self.textePy += nom + "= True,"
- elif valeur == False : self.textePy += nom + "= False,"
- elif pattern_oui.match(valeur) : self.textePy += nom + "= True,"
- elif pattern_non.match(valeur) : self.textePy += nom + "= False,"
- else : self.textePy += nom + "= None,"
+ return identCata
+
+
+ def traiteMC(self,dico) :
+ from Accas import A_BLOC, A_FACT, A_SIMP
+ for k in dico :
+ valeur= dico[k]
+ if k not in self.dicoMC : kA=self.dicoFrancaisAnglais[k]
+ else : kA=k
+ obj=self.dicoMC[kA]
+ if isinstance(obj,A_FACT.FACT): self.convertFACT(obj,kA,valeur)
+ elif isinstance(obj,A_BLOC.BLOC): self.convertBLOC(obj,kA,valeur)
+ elif isinstance(obj,A_SIMP.SIMP): self.convertSIMP(obj,kA,valeur)
+ else : print ("%%%%%%%%%%%\n", "pb conversion type pour", k, obj, "\n%%%%%%%%%%%")
+
+
+ def convertFACT(self,obj,nom,valeur):
+ # traitement LIQUID_BOUNDARIES
+ if nom in TELEMACparser.__dict__ :
+ TELEMACparser.__dict__[nom](self,)
return
- self.textePy += nom + "=" + str(valeur) +","
-
- else :
- if valeur == () or valeur ==[] or pattern_listeVide.match(str(valeur)) :
- self.textePy += nom + "= None,"
- return
-
- # les 4 lignes suivantes sont probablement inutiles
- while valeur[-1] == " " or valeur[-1]=="'" : valeur=valeur[0:-1]
- while valeur[0] == " " or valeur[-0]=="'" : valeur=valeur[1:]
- oldValeur=valeur
- if isinstance(valeur, basestring) :
- if ";" in valeur : valeur=valeur.split(';')
- else : valeur=valeur.split(',')
-
- if len(valeur)< 2 and pattern_flottant.match(oldValeur):
- # Attention : on attend une liste mais on a une seule valeur!
- try : oldValeur=eval(oldValeur,{})
- except : pass
- if nom in self.TelemacdicoEn :
- v=self.TelemacdicoEn[nom][oldValeur]
- self.textePy += nom + "= ('" + str(v) +"',),"
- else :
- self.textePy += nom + "= (" + str(oldValeur) +",),"
- return
-
-
- if valeur == None : return
- newVal=[]
- for v in valeur :
- try : v=eval(v,{})
+ self.textePy += nom + "=_F( "
+ self.traiteMC(valeur)
+ self.textePy += '),\n'
+
+
+ def convertBLOC(self,obj,nom,valeur):
+ print ("ANOMALIE _________ BLOC ")
+ print (nom)
+
+ def convertSIMP(self,obj,nom,valeur):
+ #print ('in convertSIMP', nom,valeur)
+ #if nom in ("PRESCRIBED_FLOWRATES", "PRESCRIBED_VELOCITIES", "PRESCRIBED_ELEVATIONS" ): return
+ if obj.max==1 :
+ if hasattr(obj.type[0],'ntuple') :
+ lval=[]
+ for v in valeur :
+ try : v=eval(v,{})
+ except : pass
+ lval.append(v)
+ self.textePy += nom + "=" + str(lval) +","
+ return
+ if 'TXM' in obj.type :
+
+ if pattern_ContientDouble.match(str(valeur)):
+ valeur=re.sub("''","\'\'",str(valeur))
+ self.textePy += nom + "=" + str(valeur) +","
+ return
+ valeur=str(valeur)
+
+ # ceinture et bretelle si les re sont correctes -)
+ while valeur[-1] == " " or valeur[-1] == '\t' : valeur=valeur[0:-1]
+ while valeur[0] == " " or valeur[0] == '\t' : valeur=valeur[1:]
+
+
+
+ # Pour les enum
+ try : valeur=eval(valeur,{})
except : pass
+
if nom in self.TelemacdicoEn:
- try : v=self.TelemacdicoEn[nom][v]
- except : pass
- newVal.append(v)
- self.textePy += nom + "=" + str(newVal) +","
-
-
-
- def tri(self, listeIn):
- if len(listeIn) == 1 : return listeIn
- if self.Ordre_Des_Commandes == None : return listeIn
- listeOut=[listeIn[0],]
- for k in listeIn[1:]:
- #k=str(self.dicoFrancaisAnglais[kF])
- ordreK=self.Ordre_Des_Commandes.index(k)
- i=0
- while i < len(listeOut):
- #ordreI=self.Ordre_Des_Commandes.index(self.dicoFrancaisAnglais[listeOut[i]])
- ordreI=self.Ordre_Des_Commandes.index(listeOut[i])
- if ordreK < ordreI : break
- i=i+1
- #listeOut.insert(i,kF)
- listeOut.insert(i,k)
- return listeOut
+ try :
+ valeur=self.TelemacdicoEn[nom][valeur]
+ self.textePy += nom + "= '" + str(valeur) +"',"
+ return
+ except : pass
+
+
+ if obj.into != [] and obj.into != None and not('R' in obj.type) and not('I' in obj.type):
+ for possible in obj.into :
+ try :
+ if possible.upper() == valeur.upper():
+ valeur=possible
+ break
+ v=valeur[0].upper()+valeur[1:].lower()
+ v2=tr(v)
+ if possible.upper() == v2.upper():
+ valeur=possible
+ break
+ except:
+ if valeur != None :
+ print ("pb avec le type de ", obj.nom, obj.type, 'et la valeur ', valeur)
+
+ if 'Fichier' in obj.type or 'TXM' in obj.type or 'Repertoire' in obj.type or 'FichierOuRepertoire' in obj.type :
+ valeur=str(valeur)
+ if valeur == "" or valeur == " " :
+ self.textePy += nom + "= '" + str(valeur) +"' ,"
+ return
+ while valeur[-1] == " " : valeur=valeur[0:-1]
+ while valeur[0] == " " : valeur=valeur[1:]
+ self.textePy += nom + "= '" + str(valeur) +"' ,"
+ return
+
+ if bool in obj.type :
+ if valeur == True : self.textePy += nom + "= True,"
+ elif valeur == False : self.textePy += nom + "= False,"
+ elif pattern_oui.match(valeur) : self.textePy += nom + "= True,"
+ elif pattern_non.match(valeur) : self.textePy += nom + "= False,"
+ else : self.textePy += nom + "= None,"
+ return
+ self.textePy += nom + "=" + str(valeur) +","
+
+ else :
+ if valeur == () or valeur ==[] or pattern_listeVide.match(str(valeur)) :
+ self.textePy += nom + "= None,"
+ return
+
+ # les 4 lignes suivantes sont probablement inutiles
+ while valeur[-1] == " " or valeur[-1]=="'" : valeur=valeur[0:-1]
+ while valeur[0] == " " or valeur[-0]=="'" : valeur=valeur[1:]
+ oldValeur=valeur
+ if isinstance(valeur, basestring) :
+ if ";" in valeur : valeur=valeur.split(';')
+ else : valeur=valeur.split(',')
+
+ if len(valeur)< 2 and pattern_flottant.match(oldValeur):
+ # Attention : on attend une liste mais on a une seule valeur!
+ try : oldValeur=eval(oldValeur,{})
+ except : pass
+ if nom in self.TelemacdicoEn :
+ v=self.TelemacdicoEn[nom][oldValeur]
+ self.textePy += nom + "= ('" + str(v) +"',),"
+ else :
+ self.textePy += nom + "= (" + str(oldValeur) +",),"
+ return
+
+ # Cas des liste de booléen
+ if bool in obj.type:
+ values = []
+ for val in valeur:
+ if val == True or pattern_oui.match(val) or val == 'True':
+ values.append('True')
+ elif val == False or pattern_non.match(val) or val == 'False':
+ values.append('False')
+ else:
+ values.append('None')
+ self.textePy += nom + "= [" + ','.join(values) + '],'
+ return
+
+
+ if valeur == None : return
+ newVal=[]
+ for v in valeur :
+ try : v=eval(v,{})
+ except : pass
+ if nom in self.TelemacdicoEn:
+ try : v=self.TelemacdicoEn[nom][v]
+ except : pass
+ newVal.append(v)
+ self.textePy += nom + "=" + str(newVal) +","
+
+
+
+ def tri(self, listeIn):
+ if len(listeIn) == 1 : return listeIn
+ if self.Ordre_Des_Commandes == None : return listeIn
+ listeOut=[listeIn[0],]
+ for k in listeIn[1:]:
+ #k=str(self.dicoFrancaisAnglais[kF])
+ ordreK=self.Ordre_Des_Commandes.index(k)
+ i=0
+ while i < len(listeOut):
+ #ordreI=self.Ordre_Des_Commandes.index(self.dicoFrancaisAnglais[listeOut[i]])
+ ordreI=self.Ordre_Des_Commandes.index(listeOut[i])
+ if ordreK < ordreI : break
+ i=i+1
+ #listeOut.insert(i,kF)
+ listeOut.insert(i,k)
+ return listeOut
# def BOUNDARY_CONDITIONS(self):
# texte_Boundaries="BOUNDARY_CONDITIONS=_F(LIQUID_BOUNDARIES=( "
def entryPoint():
- """
- Return a dictionary containing the description needed to load the plugin
- """
- return {
- 'name' : 'xml',
- 'factory' : XMLparser
- }
+ """
+ Return a dictionary containing the description needed to load the plugin
+ """
+ return {
+ 'name' : 'xml',
+ 'factory' : XMLparser
+ }
class XMLparser:
- """
- This converter works like Pythonparser, except that it is supposed to read XML
- """
+ """
+ This converter works like Pythonparser, except that it is supposed to read XML
+ """
- def __init__(self,cr=None):
- print ('dans XML convert')
- self.text=''
- if cr : self.cr=cr
- else: self.cr=N_CR.CR(debut='CR convertisseur format XML',
- fin='fin CR format XML')
+ def __init__(self,cr=None):
+ print ('dans XML convert')
+ self.text=''
+ if cr : self.cr=cr
+ else: self.cr=N_CR.CR(debut='CR convertisseur format XML',
+ fin='fin CR format XML')
- def readfile(self,filename):
- self.filename=filename
- try:
- self.text=open(filename).read()
- except:
- self.cr.exception(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
- self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
- return
+ def readfile(self,filename):
+ self.filename=filename
+ try:
+ with open(filename) as fd :
+ self.text=fd.read()
+ except:
+ self.cr.exception(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
+ self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
+ return
- def convert(self, outformat, appliEficas=None):
- # ici on ne fait rien
- # on le fera a la creation du JDC
- try:
+ def convert(self, outformat, appliEficas=None):
+ # ici on ne fait rien
+ # on le fera a la creation du JDC
+ try:
return self.text
- except EficasException:
+ except EficasException:
# Erreur lors de la conversion
l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
sys.exc_info()[2])
self.cr.exception(tr("Impossible de convertir le fichier XML\n %s", ''.join(l)))
return ""
-
-
-
-
-
from Noyau import N_CR
try:
- basestring
+ basestring
except NameError:
- basestring = str
+ basestring = str
def entryPoint():
- """
- Return a dictionary containing the description needed to load the plugin
- """
- return {
- 'name' : 'dico',
- 'factory' : Dicoparser
- }
+ """
+ Return a dictionary containing the description needed to load the plugin
+ """
+ return {
+ 'name' : 'dico',
+ 'factory' : Dicoparser
+ }
class Dicoparser(Pythonparser):
- """
- This converter initializes model variable from a python dictionnary
- """
+ """
+ This converter initializes model variable from a python dictionnary
+ """
- def __init__(self,cr=None):
- # Si l'objet compte-rendu n'est pas fourni, on utilise le
- # compte-rendu standard
- self.text=''
- self.textePy=''
- if cr :
- self.cr=cr
- else:
- self.cr=N_CR.CR(debut='CR convertisseur format dico',
- fin='fin CR format dico')
+ def __init__(self,cr=None):
+ # Si l'objet compte-rendu n'est pas fourni, on utilise le
+ # compte-rendu standard
+ self.text=''
+ self.textePy=''
+ if cr :
+ self.cr=cr
+ else:
+ self.cr=N_CR.CR(debut='CR convertisseur format dico',
+ fin='fin CR format dico')
- def readfile(self,filename):
- self.filename=filename
- try:
- self.text=open(filename).read()
- except:
- self.cr.exception(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
- self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
- return
+ def readfile(self,filename):
+ self.filename=filename
+ try:
+ with open(filename) as fd :
+ self.text=fd.read()
+ except:
+ self.cr.exception(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
+ self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
+ return
- def convert(self,outformat,appli=None):
- monTexteDico={}
- exec (self.text,globals(),monTexteDico)
- if len(monTexteDico.keys()) != 1 :
- self.cr.exception(tr("Impossible de traiter le fichier %s" ,str(filename)))
- self.cr.fatal(tr("Impossible de traiter le fichier %s" ,str(filename)))
- return
- self.textePy=""
- monDico=monTexteDico[monTexteDico.keys()[0]]
- for commande in monDico :
- valeurs=monDico[commande]
- if valeurs.has_key('NomDeLaSdCommande') :
- # cas d un oper
- self.textePy+=valeurs['NomDeLaSdCommande']+' = '+commande+'('
- del valeurs['NomDeLaSdCommande']
- else :
- self.textePy+=commande+'('
- for mot in valeurs :
- if isinstance(valeurs[mot],dict) : self.traiteMCFact(mot,valeurs[mot])
- else : self.textePy += mot+' = ' +str(valeurs[mot])+','
- self.textePy+=');\n' # fin de la commande
- #print (self.textePy)
- return self.textePy
-
- def traiteMCFact(self,mot,valeurs):
- self.textePy += mot + '=_F('
- for mot in valeurs :
- if isinstance(valeurs[mot],dict) : self.traiteMCFact(mot,valeurs[mot])
- else : self.textePy +=mot+' = ' +str(valeurs[mot])+','
- self.textePy +='),'
+ def convert(self,outformat,appli=None):
+ monTexteDico={}
+ exec (self.text,globals(),monTexteDico)
+ if len(monTexteDico.keys()) != 1 :
+ self.cr.exception(tr("Impossible de traiter le fichier %s" ,str(filename)))
+ self.cr.fatal(tr("Impossible de traiter le fichier %s" ,str(filename)))
+ return
+ self.textePy=""
+ monDico=monTexteDico[monTexteDico.keys()[0]]
+ for commande in monDico :
+ valeurs=monDico[commande]
+ if valeurs.has_key('NomDeLaSdCommande') :
+ # cas d un oper
+ self.textePy+=valeurs['NomDeLaSdCommande']+' = '+commande+'('
+ del valeurs['NomDeLaSdCommande']
+ else :
+ self.textePy+=commande+'('
+ for mot in valeurs :
+ if isinstance(valeurs[mot],dict) : self.traiteMCFact(mot,valeurs[mot])
+ else : self.textePy += mot+' = ' +str(valeurs[mot])+','
+ self.textePy+=');\n' # fin de la commande
+ #print (self.textePy)
+ return self.textePy
+ def traiteMCFact(self,mot,valeurs):
+ self.textePy += mot + '=_F('
+ for mot in valeurs :
+ if isinstance(valeurs[mot],dict) : self.traiteMCFact(mot,valeurs[mot])
+ else : self.textePy +=mot+' = ' +str(valeurs[mot])+','
+ self.textePy +='),'
from .convert_python import Pythonparser
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'MAP',
- # La factory pour creer une instance du plugin
- 'factory' : Pythonparser,
- }
-
-
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'MAP',
+ # La factory pour creer une instance du plugin
+ 'factory' : Pythonparser,
+ }
Le format eval est un texte source Python qui peut etre evalue. Le
resultat de l'evaluation est un objet Python quelconque.
Le format dict est un dictionnaire Python.
- Le format exec est un texte source Python qui peut etre execute.
+ Le format exec est un texte source Python qui peut etre execute.
La methode readfile a pour fonction de lire un fichier dont le
nom est passe en argument de la fonction.
"""
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import sys,traceback
from Extensions.eficas_exception import EficasException
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'pyth',
- # La factory pour creer une instance du plugin
- 'factory' : Pythparser,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'pyth',
+ # La factory pour creer une instance du plugin
+ 'factory' : Pythparser,
+ }
class Pythparser(object):
- """
- Ce convertisseur lit un fichier au format pyth avec la
- methode readfile : convertisseur.readfile(nom_fichier)
- et retourne le texte au format outformat avec la
- methode convertisseur.convert(outformat)
-
- Ses caracteristiques principales sont exposees dans 2 attributs
- de classe :
- - extensions : qui donne une liste d'extensions de fichier preconisees
- - formats : qui donne une liste de formats de sortie supportes
- """
- # Les extensions de fichier preconisees
- extensions=('.pyth',)
- # Les formats de sortie supportes (eval dict ou exec)
- formats=('dict',)
-
- def __init__(self,cr=None):
- # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
- if cr :
- self.cr=cr
- else:
- self.cr=N_CR.CR(debut='CR convertisseur format pyth',
- fin='fin CR format pyth')
- self.g={}
-
- def readfile(self,filename):
- self.filename=filename
- try:
- self.text=open(filename).read()
- except:
- self.cr.fatal(tr("Impossible d'ouvrir le fichier : %s",str( filename)))
- return
- self.g={}
- try:
- exec(self.text, self.g)
- except EficasException as e:
- l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
- s= ''.join(l[2:])
- s= s.replace('"<string>"','"<%s>"'%self.filename)
- self.cr.fatal(tr("Erreur a l'evaluation :\n %s", s))
-
- def convert(self,outformat,appliEficas=None):
- if outformat == 'dict':
- return self.getdict()
- else:
- raise EficasException(tr("Format de sortie : %s, non supporte", outformat))
-
- def getdict(self):
- d={}
- for k,v in list(self.g.items()):
- if k[0] != '_':d[k]=v
- return d
+ """
+ Ce convertisseur lit un fichier au format pyth avec la
+ methode readfile : convertisseur.readfile(nom_fichier)
+ et retourne le texte au format outformat avec la
+ methode convertisseur.convert(outformat)
+
+ Ses caracteristiques principales sont exposees dans 2 attributs
+ de classe :
+ - extensions : qui donne une liste d'extensions de fichier preconisees
+ - formats : qui donne une liste de formats de sortie supportes
+ """
+ # Les extensions de fichier preconisees
+ extensions=('.pyth',)
+ # Les formats de sortie supportes (eval dict ou exec)
+ formats=('dict',)
+
+ def __init__(self,cr=None):
+ # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+ if cr :
+ self.cr=cr
+ else:
+ self.cr=N_CR.CR(debut='CR convertisseur format pyth',
+ fin='fin CR format pyth')
+ self.g={}
+
+ def readfile(self,filename):
+ self.filename=filename
+ try:
+ with open(filename) as fd :
+ self.text=fd.read()
+ except:
+ self.cr.fatal(tr("Impossible d'ouvrir le fichier : %s",str( filename)))
+ return
+ self.g={}
+ try:
+ exec(self.text, self.g)
+ except EficasException as e:
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ s= ''.join(l[2:])
+ s= s.replace('"<string>"','"<%s>"'%self.filename)
+ self.cr.fatal(tr("Erreur a l'evaluation :\n %s", s))
+
+ def convert(self,outformat,appliEficas=None):
+ if outformat == 'dict':
+ return self.getdict()
+ else:
+ raise EficasException(tr("Format de sortie : %s, non supporte", outformat))
+
+ def getdict(self):
+ d={}
+ for k,v in list(self.g.items()):
+ if k[0] != '_':d[k]=v
+ return d
Le format eval est un texte source Python qui peut etre evalue. Le
resultat de l'evaluation est un objet Python quelconque.
Le format dict est un dictionnaire Python.
- Le format exec est un texte source Python qui peut etre execute.
+ Le format exec est un texte source Python qui peut etre execute.
La methode readfile a pour fonction de lire un fichier dont le
nom est passe en argument de la fonction.
"""
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import sys,traceback
from .parseur_python import PARSEUR_PYTHON
from Extensions.eficas_exception import EficasException
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'python',
- # La factory pour creer une instance du plugin
- 'factory' : Pythonparser,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'python',
+ # La factory pour creer une instance du plugin
+ 'factory' : Pythonparser,
+ }
class Pythonparser(object):
- """
- Ce convertisseur lit un fichier au format python avec la
- methode readfile : convertisseur.readfile(nom_fichier)
- et retourne le texte au format outformat avec la
- methode convertisseur.convert(outformat)
-
- Ses caracteristiques principales sont exposees dans 2 attributs
- de classe :
- - extensions : qui donne une liste d'extensions de fichier preconisees
- - formats : qui donne une liste de formats de sortie supportes
- """
- # Les extensions de fichier preconisees
- extensions=('.py',)
- # Les formats de sortie supportes (eval dict ou exec)
- # Le format exec est du python executable (commande exec) converti avec PARSEUR_PYTHON
- # Le format execnoparseur est du python executable (commande exec) non converti
- formats=('exec','execnoparseur')
-
- def __init__(self,cr=None):
- # Si l'objet compte-rendu n'est pas fourni, on utilise le
- # compte-rendu standard
- self.text=''
- if cr :
- self.cr=cr
- else:
- self.cr=N_CR.CR(debut='CR convertisseur format python',
- fin='fin CR format python')
-
- def readfile(self,filename):
- self.filename=filename
- try:
- self.text=open(filename).read()
- except:
- self.cr.exception(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
- self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
- return
-
- def convert(self,outformat,appliEficas=None):
- if outformat == 'exec':
- try:
- #import cProfile, pstats, StringIO
- #pr = cProfile.Profile()
- #pr.enable()
- l= PARSEUR_PYTHON(self.text).getTexte(appliEficas)
-
- #pr.disable()
- #s = StringIO.StringIO()
- #sortby = 'cumulative'
- #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
- #ps.print_stats()
- #print (s.getValue())
-
- return l
- except EficasException:
- # Erreur lors de la conversion
- l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
- sys.exc_info()[2])
- self.cr.exception(tr("Impossible de convertir le fichier Python qui doit contenir des erreurs.\n\
- On retourne le fichier non converti. Prevenir la maintenance.\n\n %s", ''.join(l)))
- # On retourne neanmoins le source initial non converti (au cas ou)
+ """
+ Ce convertisseur lit un fichier au format python avec la
+ methode readfile : convertisseur.readfile(nom_fichier)
+ et retourne le texte au format outformat avec la
+ methode convertisseur.convert(outformat)
+
+ Ses caracteristiques principales sont exposees dans 2 attributs
+ de classe :
+ - extensions : qui donne une liste d'extensions de fichier preconisees
+ - formats : qui donne une liste de formats de sortie supportes
+ """
+ # Les extensions de fichier preconisees
+ extensions=('.py',)
+ # Les formats de sortie supportes (eval dict ou exec)
+ # Le format exec est du python executable (commande exec) converti avec PARSEUR_PYTHON
+ # Le format execnoparseur est du python executable (commande exec) non converti
+ formats=('exec','execnoparseur')
+
+ def __init__(self,cr=None):
+ # Si l'objet compte-rendu n'est pas fourni, on utilise le
+ # compte-rendu standard
+ self.text=''
+ if cr :
+ self.cr=cr
+ else:
+ self.cr=N_CR.CR(debut='CR convertisseur format python',
+ fin='fin CR format python')
+
+ def readfile(self,filename):
+ self.filename=filename
+ try:
+ with open(filename) as fd :
+ self.text=fd.read()
+ except:
+ self.cr.exception(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
+ self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
+ return
+
+ def convert(self,outformat,appliEficas=None):
+ if outformat == 'exec':
+ try:
+ #import cProfile, pstats, StringIO
+ #pr = cProfile.Profile()
+ #pr.enable()
+ l= PARSEUR_PYTHON(self.text).getTexte(appliEficas)
+
+ #pr.disable()
+ #s = StringIO.StringIO()
+ #sortby = 'cumulative'
+ #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
+ #ps.print_stats()
+ #print (s.getValue())
+
+ return l
+ except EficasException:
+ # Erreur lors de la conversion
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
+ sys.exc_info()[2])
+ self.cr.exception(tr("Impossible de convertir le fichier Python qui doit contenir des erreurs.\n\
+ On retourne le fichier non converti. Prevenir la maintenance.\n\n %s", ''.join(l)))
+ # On retourne neanmoins le source initial non converti (au cas ou)
+ return self.text
+ elif outformat == 'execnoparseur':
return self.text
- elif outformat == 'execnoparseur':
- return self.text
- else:
- raise EficasException(tr("Format de sortie : %s, non supporte", outformat))
- return None
+ else:
+ raise EficasException(tr("Format de sortie : %s, non supporte", outformat))
+ return None
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except :
- pass
+ pass
import sys,string,re
import traceback
from Extensions.i18n import tr
#stringsAndCommentsRE = \
# re.compile(u"(\"\"\".*\"\"\"|'''.*'''|\"[^\"]*\"|\'[^\']*\'|#.*\n)", re.DOTALL)
import six
-if six.PY2 :
+if six.PY2 :
allchars = string.maketrans(u"", "")
allcharsExceptNewline = allchars[: allchars.index('\n')]+allchars[allchars.index('\n')+1:]
allcharsExceptNewlineTranstable = string.maketrans(allcharsExceptNewline, '*'*len(allcharsExceptNewline))
-else :
+else :
allchars=bytes.maketrans(b"",b"")
allcharsExceptNewline = allchars[: allchars.index(b'\n')]+allchars[allchars.index(b'\n')+1:]
allcharsExceptNewlineTranstable = bytes.maketrans(allcharsExceptNewline, b'*'*len(allcharsExceptNewline))
def maskStringsAndComments(src):
"""Masque tous les caracteres de src contenus dans des commentaires ou des strings multilignes (triples
quotes et guillemets.
- Le masquage est realise en remplacant les caracteres par des *
+ Le masquage est realise en remplacant les caracteres par des *
Attention : cette fonction doit etre utilisee sur un texte complet et pas ligne par ligne
"""
# remplace les \\, les \" les \' par **
# supprime toutes les chaines ou commentaires ,y compris multiligne i
-# entre 3 ou 1 simples ou doubles quotes (ouvrantes fermantes) ou #
+# entre 3 ou 1 simples ou doubles quotes (ouvrantes fermantes) ou #
# laisse les non fermantes ou non ouvrantes
# on prend 1 sur 2 en raison du split qui donne python, commentaire, python, commentaire...
# le diese n'est pas sur le premier caractere
amont,aval = texte.split('#',1) # on decoupe suivant la premiere occurrence de #
self.texte = self.texte +amont + aval
-
+
class COMMANDE(ENTITE_JDC):
def __str__(self):
Retourne self.texte
"""
return self.texte+'\n'
-
+
def getNbPar(self):
"""
Retourne la difference entre le nombre de parentheses ouvrantes
if texte[-1] == '\n' : texte = texte[0:-1].rstrip()
if texte[-1] == ';' : texte = texte[0:-1].rstrip()
self.texte = self.texte+texte+'\n'
-
+
def __str__(self):
"""
Retourne une expression de l'affectation comprehensible par ACCAS
"""
if texte[-1] == '\n' : texte = texte[1:-1]
self.texte = self.texte+texte
-
+
def __str__(self):
"""
Retourne une expression du parametre EVAL comprehensible par ACCAS
if valeur[-1] == '\n': valeur = valeur[:-1]
valeur = valeur.strip()
return nom+' = PARAMETRE_EVAL(nom=\''+nom+'\',valeur=\''+valeur+'\')\n\n'
-
+
class PARSEUR_PYTHON(object):
"""
- Cette classe sert a generer un objet PARSEUR_PYTHON qui realise l'analyse d'un texte
+ Cette classe sert a generer un objet PARSEUR_PYTHON qui realise l'analyse d'un texte
representant un JDC Python en distinguant :
- les commentaires inter commandes
- les affectations
pattern_eval = re.compile(r'^(EVAL)([ \t\r\f\v]*)\(([\w\W]*)')
pattern_ligne_vide = re.compile(r'^[\t\r\f\v\n]+')
pattern_name = re.compile(r'[a-zA-Z_]\w*')
-
+
def __init__(self,texte):
self.texte = texte
self.l_objets=None
return 1
else:
return 0
-
+
def isCommande(self,texte):
"""
Methode booleenne qui retourne 1 si le texte est celui d'une commande dans un jeu de commandes
def isModificationCatalogue(self,texte) :
if self.pattern_commande.match(texte):
- return 1
+ return 1
def analyse(self):
"""
hangingComments ^= line.count('"""') % 2
hangingComments ^= line.count(u"'''") % 2
#print (hangingComments,hangingBraces)
- if hangingBraces[0] < 0 or hangingBraces[1] < 0 or hangingBraces[2] < 0:
+ if hangingBraces[0] < 0 or hangingBraces[1] < 0 or hangingBraces[2] < 0:
raise parserException()
if ligne.strip() == '':
commande_commentarisee_courante.appendText(ligne)
# on a 2 commandes commentarisees de suite
if pattern_finComments.match(ligne) :
- commande_commentarisee_courante = None
+ commande_commentarisee_courante = None
else:
# debut de commande commentarisee : on cree un objet commande_commentarisee_courante
commande_commentarisee_courante = COMMANDE_COMMENTARISEE(self)
if commande_courante :
# il s'agit d'un commentaire a l'interieur d'une commande --> on ne fait rien de special
- #on l'ajoute au texte de la commande
+ #on l'ajoute au texte de la commande
commande_courante.appendText(ligne)
elif commentaire_courant :
# il s'agit de la nieme ligne d'un commentaire entre deux commandes
if not linecontinueRE.search(line) \
and (hangingBraces == emptyHangingBraces) \
and not hangingComments:
- #la commande est terminee
+ #la commande est terminee
self.analyseReel(commande_courante.texte)
commande_courante = None
if not linecontinueRE.search(line) \
and (hangingBraces == emptyHangingBraces) \
and not hangingComments:
- #la commande est terminee
+ #la commande est terminee
self.analyseReel(commande_courante.texte)
commande_courante = None
#on passe a la ligne suivante
continue
-
+
def enleve (self,texte) :
"""Supprime de texte tous les caracteres blancs, fins de ligne, tabulations
Le nouveau texte est retourne
i=0
chaine=""
while (i<len(texte)):
- if (texte[i] == " " or texte[i] == "\n" or texte[i] == "\t") :
- i=i+1
- else :
- chaine=chaine+texte[i]
- i=i+1
- return chaine
-
+ if (texte[i] == " " or texte[i] == "\n" or texte[i] == "\t") :
+ i=i+1
+ else :
+ chaine=chaine+texte[i]
+ i=i+1
+ return chaine
+
def construitGenea(self,texte):
indiceC=0
mot=""
dict_reel_concept={}
# traitement pour chaque caractere
- while (indiceC < len(texte)):
- c=texte[indiceC]
- if ( c == "," or c == "(u" or c == ")"):
- mot=""
- elif ( c== "="):
- #on doit trouver derriere soit une valeur soit une parenthese
- valeur=""
- nouvelindice=indiceC+1
- if texte[nouvelindice] != "(u":
- #pas de parenthese ouvrante derriere un signe =, on a une valeur.
- while ( texte[nouvelindice] != "," and texte[nouvelindice] != ")"):
- valeur=valeur+texte[nouvelindice]
- nouvelindice=nouvelindice+1
- if nouvelindice == len(texte) :
- nouvelindice=nouvelindice -1
- break
- if mot in self.appliEficas.liste_simp_reel:
- if valeur[0] != "'":
- try :
- clef=eval(valeur)
- if str(clef) != str(valeur) :
- dict_reel_concept[clef]=valeur
- except :
- pass
- mot=""
- indiceC=nouvelindice
- else:
- #parenthese ouvrante derriere un signe =, on a un tuple de valeur ou de mots cles facteurs.
- # s agit -il d un tuple
- if texte[nouvelindice+1] != "(u":
- #le suivant n'est pas une parenthese ouvrante : on a un tuple de valeurs ou un mot cle facteur
- tuple=False
- #on avance jusqu'a la fin du tuple de valeurs ou jusqu'a la fin du premier mot cle simple
- #contenu dans le mot cle facteur
- while ( texte[nouvelindice] != "="):
- if texte[nouvelindice] == ")" :
- tuple=True
- break
- else :
- nouvelindice=nouvelindice+1
- if nouvelindice == len(texte) :
- nouvelindice=nouvelindice -1
- break
- if tuple :
- #cas du tuple de valeurs
- valeur=texte[indiceC+1:nouvelindice+1]
- indiceC=nouvelindice+1
- if mot in self.appliEficas.liste_simp_reel:
- valeur=valeur[1:-1]
- for val in valeur.split(',') :
- # Attention la derniere valeur est""
- try :
- if val[0] != "'":
- clef=eval(val)
- if str(clef) != str(val) :
- dict_reel_concept[clef]=val
- except :
- pass
- mot=""
- # ou de ( imbriquees
- else :
- #cas du mocle facteur simple ou
+ while (indiceC < len(texte)):
+ c=texte[indiceC]
+ if ( c == "," or c == "(u" or c == ")"):
+ mot=""
+ elif ( c== "="):
+ #on doit trouver derriere soit une valeur soit une parenthese
+ valeur=""
+ nouvelindice=indiceC+1
+ if texte[nouvelindice] != "(u":
+ #pas de parenthese ouvrante derriere un signe =, on a une valeur.
+ while ( texte[nouvelindice] != "," and texte[nouvelindice] != ")"):
+ valeur=valeur+texte[nouvelindice]
+ nouvelindice=nouvelindice+1
+ if nouvelindice == len(texte) :
+ nouvelindice=nouvelindice -1
+ break
+ if mot in self.appliEficas.liste_simp_reel:
+ if valeur[0] != "'":
+ try :
+ clef=eval(valeur)
+ if str(clef) != str(valeur) :
+ dict_reel_concept[clef]=valeur
+ except :
+ pass
mot=""
- else :
- mot=mot+texte[indiceC]
- indiceC=indiceC+1
+ indiceC=nouvelindice
+ else:
+ #parenthese ouvrante derriere un signe =, on a un tuple de valeur ou de mots cles facteurs.
+ # s agit -il d un tuple
+ if texte[nouvelindice+1] != "(u":
+ #le suivant n'est pas une parenthese ouvrante : on a un tuple de valeurs ou un mot cle facteur
+ tuple=False
+ #on avance jusqu'a la fin du tuple de valeurs ou jusqu'a la fin du premier mot cle simple
+ #contenu dans le mot cle facteur
+ while ( texte[nouvelindice] != "="):
+ if texte[nouvelindice] == ")" :
+ tuple=True
+ break
+ else :
+ nouvelindice=nouvelindice+1
+ if nouvelindice == len(texte) :
+ nouvelindice=nouvelindice -1
+ break
+ if tuple :
+ #cas du tuple de valeurs
+ valeur=texte[indiceC+1:nouvelindice+1]
+ indiceC=nouvelindice+1
+ if mot in self.appliEficas.liste_simp_reel:
+ valeur=valeur[1:-1]
+ for val in valeur.split(',') :
+ # Attention la derniere valeur est""
+ try :
+ if val[0] != "'":
+ clef=eval(val)
+ if str(clef) != str(val) :
+ dict_reel_concept[clef]=val
+ except :
+ pass
+ mot=""
+ # ou de ( imbriquees
+ else :
+ #cas du mocle facteur simple ou
+ mot=""
+ else :
+ mot=mot+texte[indiceC]
+ indiceC=indiceC+1
# traitement du dernier inutile
- # c est un ;
+ # c est un ;
return dict_reel_concept
def analyseReel(self,commande) :
# On verifie qu on a bien un OPER
# et pas une MACRO
if commande.find(u"=") > commande.find(u"(u") :
- return
+ return
if commande.find(u"=") > 0:
- #epure1=self.enleve(commande)
- epure1=pattern_blancs.sub(u"",commande)
- nomConcept,corps=epure1.split(u"=",1)
- epure2=corps.replace(u"_F(u","(u")
- #nomConcept=epure1.split(u"=")[0]
- #index=epure1.find(u"=")
- #epure2=epure1[index+1:len(epure1)].replace(u"_F(u","(u")
- #dict_reel_concept=self.construitGenea(epure2)
- if self.appliEficas:
- dict_reel_concept=construitGenea(epure2,self.appliEficas.liste_simp_reel)
- else:
- dict_reel_concept={}
+ #epure1=self.enleve(commande)
+ epure1=pattern_blancs.sub(u"",commande)
+ nomConcept,corps=epure1.split(u"=",1)
+ epure2=corps.replace(u"_F(u","(u")
+ #nomConcept=epure1.split(u"=")[0]
+ #index=epure1.find(u"=")
+ #epure2=epure1[index+1:len(epure1)].replace(u"_F(u","(u")
+ #dict_reel_concept=self.construitGenea(epure2)
+ if self.appliEficas:
+ dict_reel_concept=construitGenea(epure2,self.appliEficas.liste_simp_reel)
+ else:
+ dict_reel_concept={}
if nomConcept == "sansnom" :
- nomConcept = ""
+ nomConcept = ""
if nomConcept !=None :
- if len(dict_reel_concept) != 0:
- self.appliEficas.dict_reels[nomConcept]=dict_reel_concept
+ if len(dict_reel_concept) != 0:
+ self.appliEficas.dict_reels[nomConcept]=dict_reel_concept
def getTexte(self,appliEficas=None):
"""
return txt
def test():
- #import parseur_python
- import doctest
- doctest.testmod(parseur_python)
+ #import parseur_python
+ import doctest
+ doctest.testmod(parseur_python)
if __name__ == "__main__" :
import time
#fichier = 'D:/Eficas_dev/Tests/zzzz100a.comm'
#fichier = 'U:/Eficas_dev/Tests/test_eval.comm'
- texte = open(fichier,'r').read()
+ with open(fichier) as fd:
+ texte = fd.read()
class appliEficas(object):
- dict_reels={}
- liste_simp_reel=["VALE","VALE_C","GROUP_MA","RAYON"]
+ dict_reels={}
+ liste_simp_reel=["VALE","VALE_C","GROUP_MA","RAYON"]
a=appliEficas()
compile(txt, '<string>', 'exec')
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import object
+ from builtins import object
except : pass
import types,re
from Extensions.i18n import tr
filePattern2='"[^\(\)]([^\(\)]*\([^\(\)]*\))*[^\(\)]*"'
class Formatage (object):
- """
- Cette classe contient toutes les méthodes nécessaires au formatage
- de la chaine de caracteres issue d'un generator en un fichier
- 'lisible' ie avec indentations
-
- L'objet attend en parametre du constructeur (argument l_jdc) une representation
- du jeu de commandes sous la forme d'une liste.
-
- Chaque element de la liste est la representation d'une etape.
-
- La representation d'une etape est une liste dont le premier element est une chaine de
- caracteres donnant le debut de la commande ("xxx=lire_maillage(", par exemple).
- Les elements suivants sont les representations des mots cles simples et facteurs.
- Elle se termine avec un element de fin : ");"
-
- La representation d'un mot cle simple est une chaine de caracteres (info=2, par exemple).
-
- La representation d'un mot cle facteur est semblable à celle de l'étape : premier element
- caracteristique du mot cle facteur suivi d'elements representatifs des mots cles simples.
- Elle se termine avec un element de fin : ")" ou "),".
- """
- def __init__(self,l_jdc,code=None,mode=None,sep='=',l_max=72):
- # l_jdc représente le jeu de commandes brut sous forme de liste
- self.l_jdc = l_jdc
- self.jdc_fini =''
- self.count = 0
- self.sep=sep
- self.l_max=l_max
- if mode == '.py':
- self.sep = '='
- self.l_max = 132
- elif code == 'ASTER':
- self.sep = ':'
- self.l_max = 72
-
- def formateJdc(self):
- comment=re.compile("\n#")
- commentaireavant=0
- for etape in self.l_jdc:
- self.count = self.count+1
- self.texte_etape = ''
- if type(etape)==list:
- # L'etape est sous la forme d'une liste dont le premier element est une chaine
- self.indent=[]
- self.indent.append(len(etape[0]))
- self.indent_courant = self.indent[0]
- self.texte_etape = '\n' + etape[0]
- if len(etape)>1 :
- self.formateEtape(etape[1:])
- else :
- # L'etape est deja sous forme de chaine de caracteres
- self.indent=[]
- self.texte_etape = etape
+ """
+ Cette classe contient toutes les méthodes nécessaires au formatage
+ de la chaine de caracteres issue d'un generator en un fichier
+ 'lisible' ie avec indentations
- m=comment.match(self.texte_etape)
- # si ce n est pas la premiere ligne
- if self.jdc_fini != "" :
- # si il n y avait pas de commentaire avant on met un saut de ligne
- if commentaireavant == 0 :
- self.jdc_fini = self.jdc_fini + '\n' + self.texte_etape
- else :
- self.jdc_fini = self.jdc_fini + self.texte_etape
- # si c est la premiere ligne
- else :
- # on ne met pas de saut de ligne avant la premiere ligne
- # si c est un commentaire on enleve le saut de ligne precedent
- if m : self.texte_etape=self.texte_etape[1:]
- self.jdc_fini = self.texte_etape
- if m :
- commentaireavant=1
- else :
- commentaireavant=0
+ L'objet attend en parametre du constructeur (argument l_jdc) une representation
+ du jeu de commandes sous la forme d'une liste.
- return self.jdc_fini
+ Chaque element de la liste est la representation d'une etape.
+ La representation d'une etape est une liste dont le premier element est une chaine de
+ caracteres donnant le debut de la commande ("xxx=lire_maillage(", par exemple).
+ Les elements suivants sont les representations des mots cles simples et facteurs.
+ Elle se termine avec un element de fin : ");"
+ La representation d'un mot cle simple est une chaine de caracteres (info=2, par exemple).
- def formateEtape(self,liste):
+ La representation d'un mot cle facteur est semblable à celle de l'étape : premier element
+ caracteristique du mot cle facteur suivi d'elements representatifs des mots cles simples.
+ Elle se termine avec un element de fin : ")" ou "),".
"""
- Enrichissement de la chaine de caracteres representant l'etape (attribut
- texte_etape de l'objet Formatage).
- Les elements a ajouter sont dans l'argument liste de la methode.
- L'objet "liste" à traiter a été produit par le module generator. En particulier
- les parenthèses et les virgules ont été produites par ce module
- """
- l_patterns_fin_etape = ( ');' , ');\n' )
- l_patterns_fin_mcf = ( ')' , '),' )
-
- ind = 0
- for element in liste :
- if type(element)==list:
+ def __init__(self,l_jdc,code=None,mode=None,sep='=',l_max=72):
+ # l_jdc représente le jeu de commandes brut sous forme de liste
+ self.l_jdc = l_jdc
+ self.jdc_fini =''
+ self.count = 0
+ self.sep=sep
+ self.l_max=l_max
+ if mode == '.py':
+ self.sep = '='
+ self.l_max = 132
+ elif code == 'ASTER':
+ self.sep = ':'
+ self.l_max = 72
+
+ def formateJdc(self):
+ comment=re.compile("\n#")
+ commentaireavant=0
+ for etape in self.l_jdc:
+ self.count = self.count+1
+ self.texte_etape = ''
+ if type(etape)==list:
+ # L'etape est sous la forme d'une liste dont le premier element est une chaine
+ self.indent=[]
+ self.indent.append(len(etape[0]))
+ self.indent_courant = self.indent[0]
+ self.texte_etape = '\n' + etape[0]
+ if len(etape)>1 :
+ self.formateEtape(etape[1:])
+ else :
+ # L'etape est deja sous forme de chaine de caracteres
+ self.indent=[]
+ self.texte_etape = etape
+
+ m=comment.match(self.texte_etape)
+ # si ce n est pas la premiere ligne
+ if self.jdc_fini != "" :
+ # si il n y avait pas de commentaire avant on met un saut de ligne
+ if commentaireavant == 0 :
+ self.jdc_fini = self.jdc_fini + '\n' + self.texte_etape
+ else :
+ self.jdc_fini = self.jdc_fini + self.texte_etape
+ # si c est la premiere ligne
+ else :
+ # on ne met pas de saut de ligne avant la premiere ligne
+ # si c est un commentaire on enleve le saut de ligne precedent
+ if m : self.texte_etape=self.texte_etape[1:]
+ self.jdc_fini = self.texte_etape
+ if m :
+ commentaireavant=1
+ else :
+ commentaireavant=0
+
+ return self.jdc_fini
+
+
+
+ def formateEtape(self,liste):
+ """
+ Enrichissement de la chaine de caracteres representant l'etape (attribut
+ texte_etape de l'objet Formatage).
+ Les elements a ajouter sont dans l'argument liste de la methode.
+ L'objet "liste" à traiter a été produit par le module generator. En particulier
+ les parenthèses et les virgules ont été produites par ce module
+ """
+ l_patterns_fin_etape = ( ');' , ');\n' )
+ l_patterns_fin_mcf = ( ')' , '),' )
+
+ ind = 0
+ for element in liste :
+ if type(element)==list:
+
+ # il s'agit d'un mot-clé facteur
+ # on écrit son nom (element[0])
+ longueur = self.longueur(self.texte_etape)
+ try:
+ increment = len(('\n'+self.indent_courant*' ')*ind + element[0])
+ except:
+ print (tr('ERREUR'))
+ print (liste)
+ print (element)
+ self.texte_etape = self.texte_etape + (u'\n'+self.indent_courant*' ')*ind + element[0]
+ length = len(self.indent)
+ self.indent.insert(length,self.indent[length-1]+len(element[0]))
+ self.indent_courant = self.indent[length]
+ # on écrit ses fils
+ self.formateEtape(element[1:])
+ #elif type(element) == types.StringType:
+ #elif type(element) == bytes:
+ # PNPNPN -> marre du python 2 et 3
+ # on remplace par else dans if
+ else :
- # il s'agit d'un mot-clé facteur
- # on écrit son nom (element[0])
- longueur = self.longueur(self.texte_etape)
- try:
- increment = len(('\n'+self.indent_courant*' ')*ind + element[0])
- except:
- print (tr('ERREUR'))
- print (liste)
- print (element)
- self.texte_etape = self.texte_etape + (u'\n'+self.indent_courant*' ')*ind + element[0]
+ # il s'agit d'un mot-clé simple ou de ')' ou ');' ou '),' ou ');\n'
+
+ if element in l_patterns_fin_mcf :
+ self.traiteMcfact(s_mcfact=element,ind=ind)
+ elif element in l_patterns_fin_etape :
+ self.traiteEtape(s_etape=element,ind=ind)
+ else :
+ self.traiteMcsimp(s_mcsimp=element,ind=ind)
+
+ ind = 1
+
+ def traiteEtape(self,s_etape,ind) :
+ """
+ Traite une partie du jdc formaté : s_etape, une chaîne de caractères
+ contenant une étape
+ L'attribut self.texte_etape est modifié (complété) par le traitement
+ L'attribut self.indent est modifié par le traitement
+ L'attribut self.indent_courant est modifié par le traitement
+ """
length = len(self.indent)
- self.indent.insert(length,self.indent[length-1]+len(element[0]))
- self.indent_courant = self.indent[length]
- # on écrit ses fils
- self.formateEtape(element[1:])
- #elif type(element) == types.StringType:
- #elif type(element) == bytes:
- # PNPNPN -> marre du python 2 et 3
- # on remplace par else dans if
- else :
-
- # il s'agit d'un mot-clé simple ou de ')' ou ');' ou '),' ou ');\n'
-
- if element in l_patterns_fin_mcf :
- self.traiteMcfact(s_mcfact=element,ind=ind)
- elif element in l_patterns_fin_etape :
- self.traiteEtape(s_etape=element,ind=ind)
+ if length > 1:
+ last = self.indent[length-1]
+ self.indent.remove(last)
+ self.indent_courant=self.indent[length-2]
else :
- self.traiteMcsimp(s_mcsimp=element,ind=ind)
-
- ind = 1
-
- def traiteEtape(self,s_etape,ind) :
- """
- Traite une partie du jdc formaté : s_etape, une chaîne de caractères
- contenant une étape
- L'attribut self.texte_etape est modifié (complété) par le traitement
- L'attribut self.indent est modifié par le traitement
- L'attribut self.indent_courant est modifié par le traitement
- """
- length = len(self.indent)
- if length > 1:
- last = self.indent[length-1]
- self.indent.remove(last)
- self.indent_courant=self.indent[length-2]
- else :
- self.indent_courant=self.indent[0]
- self.texte_etape = self.texte_etape + s_etape.strip()
-
- def traiteMcfact(self,s_mcfact,ind) :
- """
- Traite une partie du jdc formaté : s_mcfact, une chaîne de caractères
- contenant un mot-clef facteur.
- L'attribut self.texte_etape est modifié (complété) par le traitement
- L'attribut self.indent est modifié par le traitement
- L'attribut self.indent_courant est modifié par le traitement
- """
- self.texte_etape = self.texte_etape + s_mcfact.strip()
- length = len(self.indent)
- if length > 1:
- last = self.indent[length-1]
- self.indent.remove(last)
- self.indent_courant=self.indent[length-2]
- else :
- self.indent_courant=self.indent[0]
- return
-
-
- def traiteMcsimp(self,s_mcsimp,ind) :
- """
- Traite une partie du jdc formaté : s_mcsimp, une chaîne de caractères
- contenant un mot-clef simple.
- L'attribut self.texte_etape est modifié (complété) par le traitement
- """
- #
- # Ajout PN pour defi_fonction
- if self.texte_etape.find("DEFI_FONCTION") > 1 :
- bool_fonction=1
- if s_mcsimp.find("\n") > 1:
- txt=""; bool = 0; numident=1
- for l in s_mcsimp.splitlines() :
- if bool == 0 :
- bool = 1
- numident=s_mcsimp.find("=")+2
- txt=l
- else :
- txt=txt+('\n'+self.indent_courant*' '+numident*' ')*ind+l
- s_mcsimp = txt
- else :
- bool_fonction=0
- longueur = self.longueur(self.texte_etape)
- increment = len((u'\n'+self.indent_courant*' ')*ind + s_mcsimp.strip())
- if (bool_fonction == 1 ) :
- self.texte_etape = self.texte_etape+'\n'+self.indent_courant*' ' +s_mcsimp
- elif ( ((1-ind)*longueur+increment) <= self.l_max ) :
- self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind +s_mcsimp.strip()
- else :
- # il faut couper ...
- nom,valeur = str.split(s_mcsimp,self.sep,1)
- chaine = self.creerChaine(nom,valeur,'\n'+self.indent_courant*' ',ind)
- self.texte_etape = self.texte_etape + chaine
- return
-
-
- def longueur(self,texte):
- """
- texte est une string qui peut contenir des retours chariots
- Cette méthode retourne la longueur de la dernière ligne de texte
- """
- #liste = texte.split('\n')
- #return len(liste[-1])
- if texte [-1] == '\n' : return 0
- return len(texte[texte.rfind('\n'):-1])
-
-
- def creerChaine(self,nom,valeur,increment,ind):
- """
- La methode creerChaine reconstitue un objet Eficas à partir de
- - son nom,
- - sa valeur.
- """
- s=''
- if len(increment + nom + self.sep) <= self.l_max:
- texte = increment*ind
- label = nom + self.sep
- s=texte + label
- longueur = len(increment + label)
+ self.indent_courant=self.indent[0]
+ self.texte_etape = self.texte_etape + s_etape.strip()
+
+ def traiteMcfact(self,s_mcfact,ind) :
+ """
+ Traite une partie du jdc formaté : s_mcfact, une chaîne de caractères
+ contenant un mot-clef facteur.
+ L'attribut self.texte_etape est modifié (complété) par le traitement
+ L'attribut self.indent est modifié par le traitement
+ L'attribut self.indent_courant est modifié par le traitement
+ """
+ self.texte_etape = self.texte_etape + s_mcfact.strip()
+ length = len(self.indent)
+ if length > 1:
+ last = self.indent[length-1]
+ self.indent.remove(last)
+ self.indent_courant=self.indent[length-2]
+ else :
+ self.indent_courant=self.indent[0]
+ return
+
+
+ def traiteMcsimp(self,s_mcsimp,ind) :
+ """
+ Traite une partie du jdc formaté : s_mcsimp, une chaîne de caractères
+ contenant un mot-clef simple.
+ L'attribut self.texte_etape est modifié (complété) par le traitement
+ """
+ #
+ # Ajout PN pour defi_fonction
+ if self.texte_etape.find("DEFI_FONCTION") > 1 :
+ bool_fonction=1
+ if s_mcsimp.find("\n") > 1:
+ txt=""; bool = 0; numident=1
+ for l in s_mcsimp.splitlines() :
+ if bool == 0 :
+ bool = 1
+ numident=s_mcsimp.find("=")+2
+ txt=l
+ else :
+ txt=txt+('\n'+self.indent_courant*' '+numident*' ')*ind+l
+ s_mcsimp = txt
+ else :
+ bool_fonction=0
+ longueur = self.longueur(self.texte_etape)
+ increment = len((u'\n'+self.indent_courant*' ')*ind + s_mcsimp.strip())
+ if (bool_fonction == 1 ) :
+ self.texte_etape = self.texte_etape+'\n'+self.indent_courant*' ' +s_mcsimp
+ elif ( ((1-ind)*longueur+increment) <= self.l_max ) :
+ self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind +s_mcsimp.strip()
+ else :
+ # il faut couper ...
+ nom,valeur = str.split(s_mcsimp,self.sep,1)
+ chaine = self.creerChaine(nom,valeur,'\n'+self.indent_courant*' ',ind)
+ self.texte_etape = self.texte_etape + chaine
+ return
+
+
+ def longueur(self,texte):
+ """
+ texte est une string qui peut contenir des retours chariots
+ Cette méthode retourne la longueur de la dernière ligne de texte
+ """
+ #liste = texte.split('\n')
+ #return len(liste[-1])
+ if texte [-1] == '\n' : return 0
+ return len(texte[texte.rfind('\n'):-1])
+
+
+ def creerChaine(self,nom,valeur,increment,ind):
+ """
+ La methode creerChaine reconstitue un objet Eficas à partir de
+ - son nom,
+ - sa valeur.
+ """
+ s=''
+ if len(increment + nom + self.sep) <= self.l_max:
+ texte = increment*ind
+ label = nom + self.sep
+ s=texte + label
+ longueur = len(increment + label)
+
+ if ('(' not in valeur) or (valeur[0:3]=='"""') :
+ # il s'agit d'une vraie chaîne de caractères
+ val = len(valeur)
+ texte = (self.l_max-2-val)*' '+valeur
+ s=s+'\\\n'+texte
+ elif re.match(filePattern,valeur) or re.match(filePattern2,valeur):
+ val = len(valeur)
+ texte = (self.l_max-2-val)*' '+valeur
+ s=s+'\\\n'+texte
+ elif ',' in valeur:
+ # il s'agit d'une liste de tuple
+ # c est trop complique on ne splitte pas
+ if valeur[0:2]=='((' or valeur[0:2]=='[(':
+ s=s+valeur
+ return s
+ # il s'agit d'une liste
+ liste = valeur.split(',')
+ i=0
+ for arg in liste :
+ ajout = arg.strip()
+ if len(ajout) == 0 : continue
+ longueur = self.longueur(texte = (texte + label)) + len(ajout +',') + (1-i)*len(increment)
+ if longueur <= self.l_max:
+ if ajout[-1] != ')':
+ texte = texte + ajout +','
+ else :
+ texte = texte + ajout
+ else :
+ i=1
+ if ajout[-1] != ')':
+ texte = texte + increment + (len(label)+2)*' ' + ajout + ','
+ else :
+ texte = texte + increment + (len(label)+2)*' ' + ajout
+
+ s=s+texte
+ s = s + ','
- if ('(' not in valeur) or (valeur[0:3]=='"""') :
- # il s'agit d'une vraie chaîne de caractères
- val = len(valeur)
- texte = (self.l_max-2-val)*' '+valeur
- s=s+'\\\n'+texte
- elif re.match(filePattern,valeur) or re.match(filePattern2,valeur):
- val = len(valeur)
- texte = (self.l_max-2-val)*' '+valeur
- s=s+'\\\n'+texte
- elif ',' in valeur:
- # il s'agit d'une liste de tuple
- # c est trop complique on ne splitte pas
- if valeur[0:2]=='((' or valeur[0:2]=='[(':
- s=s+valeur
- return s
- # il s'agit d'une liste
- liste = valeur.split(',')
- i=0
- for arg in liste :
- ajout = arg.strip()
- if len(ajout) == 0 : continue
- longueur = self.longueur(texte = (texte + label)) + len(ajout +',') + (1-i)*len(increment)
- if longueur <= self.l_max:
- if ajout[-1] != ')':
- texte = texte + ajout +','
- else :
- texte = texte + ajout
- else :
- i=1
- if ajout[-1] != ')':
- texte = texte + increment + (len(label)+2)*' ' + ajout + ','
else :
- texte = texte + increment + (len(label)+2)*' ' + ajout
-
- s=s+texte
- s = s + ','
-
- else :
- # On a une ( mais pas de , . On passe la chaine sans modification
- val = len(valeur) +len(label)
- texte = (self.l_max-2-val)*' '+valeur
- s='\n'+s+texte
- else :
- label = nom + self.sep
- val = len(valeur) +len(label)
- s = '\n'+(self.l_max-2-val)*' '+label+valeur
- return s
+ # On a une ( mais pas de , . On passe la chaine sans modification
+ val = len(valeur) +len(label)
+ texte = (self.l_max-2-val)*' '+valeur
+ s='\n'+s+texte
+ else :
+ label = nom + self.sep
+ val = len(valeur) +len(label)
+ s = '\n'+(self.l_max-2-val)*' '+label+valeur
+ return s
class FormatageLigne(Formatage) :
- def __init__(self,l_jdc,code=None,mode=None,sep='=',l_max="**"):
- Formatage.__init__(self,l_jdc,code=None,mode=None,sep='=',l_max="**")
-
- def formateJdc(self):
- texte1=Formatage.formateJdc(self)
- newText=""
- lignes=texte1.split("\n")
- texte=""
- pattern_debut_blanc = re.compile(r"^ \s*.*")
- pattern_commentaire = re.compile(r"^\s*#.*")
- pattern_vide=re.compile(r"\s*^$")
- for l in lignes :
- if pattern_commentaire.match(l) or pattern_vide.match(l):
- newText+=l+"\n"
- continue
- if not pattern_debut_blanc.match(l) : texte=l
- else : texte+=re.sub(r'^ \s*',' ',l)
- if texte[-1]==";" :
- newText+=texte+"\n"
- texte=""
- return newText
-
-
+ def __init__(self,l_jdc,code=None,mode=None,sep='=',l_max="**"):
+ Formatage.__init__(self,l_jdc,code=None,mode=None,sep='=',l_max="**")
+
+ def formateJdc(self):
+ texte1=Formatage.formateJdc(self)
+ newText=""
+ lignes=texte1.split("\n")
+ texte=""
+ pattern_debut_blanc = re.compile(r"^ \s*.*")
+ pattern_commentaire = re.compile(r"^\s*#.*")
+ pattern_vide=re.compile(r"\s*^$")
+ for l in lignes :
+ if pattern_commentaire.match(l) or pattern_vide.match(l):
+ newText+=l+"\n"
+ continue
+ if not pattern_debut_blanc.match(l) : texte=l
+ else : texte+=re.sub(r'^ \s*',' ',l)
+ if texte[-1]==";" :
+ newText+=texte+"\n"
+ texte=""
+ return newText
import generator
plugins=pluginloader.PluginLoader(generator)
-
from .generator_python import PythonGenerator
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'GroupMA',
- # La factory pour creer une instance du plugin
- 'factory' : GroupMAGenerator,
- }
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'GroupMA',
+ # La factory pour creer une instance du plugin
+ 'factory' : GroupMAGenerator,
+ }
class GroupMAGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format homard
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format homard
- """
- # Les extensions de fichier preconisees
- extensions=('.comm',)
+ """
+ # Les extensions de fichier preconisees
+ extensions=('.comm',)
- def __init__(self):
- PythonGenerator.__init__(self)
- self.listeMA=[]
- self.listeNO=[]
+ def __init__(self):
+ PythonGenerator.__init__(self)
+ self.listeMA=[]
+ self.listeNO=[]
- def gener(self,obj,format='brut',config=None):
- self.liste=[]
- self.text=PythonGenerator.gener(self,obj,'brut',config=None)
- return self.listeMA,self.listeNO
+ def gener(self,obj,format='brut',config=None):
+ self.liste=[]
+ self.text=PythonGenerator.gener(self,obj,'brut',config=None)
+ return self.listeMA,self.listeNO
- def generMCSIMP(self,obj) :
- if 'grma' in repr(obj.definition.type) :
- if not type(obj.valeur) in (list, tuple):
- aTraiter=(obj.valeur,)
- else :
- aTraiter=obj.valeur
- for group in aTraiter :
- if group not in self.listeMA :
- self.listeMA.append(group)
- if 'grno' in repr(obj.definition.type) :
- if not type(obj.valeur) in (list, tuple):
- aTraiter=(obj.valeur,)
- else :
- aTraiter=obj.valeur
- for group in aTraiter :
- if group not in self.listeNO :
- self.listeNO.append(group)
- s=PythonGenerator.generMCSIMP(self,obj)
- return s
+ def generMCSIMP(self,obj) :
+ if 'grma' in repr(obj.definition.type) :
+ if not type(obj.valeur) in (list, tuple):
+ aTraiter=(obj.valeur,)
+ else :
+ aTraiter=obj.valeur
+ for group in aTraiter :
+ if group not in self.listeMA :
+ self.listeMA.append(group)
+ if 'grno' in repr(obj.definition.type) :
+ if not type(obj.valeur) in (list, tuple):
+ aTraiter=(obj.valeur,)
+ else :
+ aTraiter=obj.valeur
+ for group in aTraiter :
+ if group not in self.listeNO :
+ self.listeNO.append(group)
+ s=PythonGenerator.generMCSIMP(self,obj)
+ return s
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
texte_debut="int main() \n{ \n init_var();\n"
from .generator_dicoImbrique import DicoImbriqueGenerator
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'PSEN',
- # La factory pour creer une instance du plugin
- 'factory' : PSENGenerator,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'PSEN',
+ # La factory pour creer une instance du plugin
+ 'factory' : PSENGenerator,
+ }
class PSENGenerator(DicoImbriqueGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format dictionnaire
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format dictionnaire
- """
- # Les extensions de fichier permis?
- extensions=('.comm',)
+ """
+ # Les extensions de fichier permis?
+ extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None, appliEficas=None):
-
- try :
- self.MachineDico = obj.MachineDico
- self.LoadDico = obj.LoadDico
- self.LineDico = obj.LineDico
- self.TransfoDico = obj.TransfoDico
- self.MotorDico = obj.MotorDico
- except :
- self.MachineDico = None
- self.LoadDico = None
- self.LineDico = None
- self.TransfoDico = None
- self.MotorDico = None
-
- self.initDico()
- # Cette instruction genere le contenu du fichier de commandes (persistance)
- self.text=DicoImbriqueGenerator.gener(self,obj,format)
- return self.text
+ def gener(self,obj,format='brut',config=None, appliEficas=None):
+
+ try :
+ self.MachineDico = obj.MachineDico
+ self.LoadDico = obj.LoadDico
+ self.LineDico = obj.LineDico
+ self.TransfoDico = obj.TransfoDico
+ self.MotorDico = obj.MotorDico
+ except :
+ self.MachineDico = None
+ self.LoadDico = None
+ self.LineDico = None
+ self.TransfoDico = None
+ self.MotorDico = None
+
+ self.initDico()
+ # Cette instruction genere le contenu du fichier de commandes (persistance)
+ self.text=DicoImbriqueGenerator.gener(self,obj,format)
+ return self.text
#----------------------------------------------------------------------------------------
# initialisations
#----------------------------------------------------------------------------------------
-
- def initDico(self) :
- DicoImbriqueGenerator.initDico(self)
- self.Entete = 'MachineDico = ' + str(self.MachineDico) +'\n'
- self.Entete += 'LoadDico = ' + str(self.LoadDico) +'\n'
- self.Entete += 'LineDico = ' + str(self.LineDico) +'\n'
- self.Entete += 'TransfoDico = ' + str(self.TransfoDico) +'\n'
- self.Entete += 'MotorDico = ' + str(self.MotorDico) + '\n'
- self.Entete +='\n'
+
+ def initDico(self) :
+ DicoImbriqueGenerator.initDico(self)
+ self.Entete = 'MachineDico = ' + str(self.MachineDico) +'\n'
+ self.Entete += 'LoadDico = ' + str(self.LoadDico) +'\n'
+ self.Entete += 'LineDico = ' + str(self.LineDico) +'\n'
+ self.Entete += 'TransfoDico = ' + str(self.TransfoDico) +'\n'
+ self.Entete += 'MotorDico = ' + str(self.MotorDico) + '\n'
+ self.Entete +='\n'
#----------------------------------------------------------------------------------------
# ecriture
#----------------------------------------------------------------------------------------
- def writeDefault(self,fn) :
- fileDico=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','PSEN_Eficas','PSEN','PSENconfig.py'))
- f = open( str(fileDico), 'wb')
- f.write( self.Entete + "Dico =" + str(self.Dico) )
- f.close()
+ def writeDefault(self,fn) :
+ fileDico=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','PSEN_Eficas','PSEN','PSENconfig.py'))
+ f = open( str(fileDico), 'wb')
+ f.write( self.Entete + "Dico =" + str(self.Dico) )
+ f.close()
+
-
#----------------------------------------------------------------------------------------
-# analyse de chaque noeud de l'arbre
+# analyse de chaque noeud de l'arbre
#----------------------------------------------------------------------------------------
## def generMCSIMP(self,obj) :
## self.dicoTemp={}
## return s
-
+
# si repertoire on change tous les noms de fichier
from .generator_modification import ModificationGenerator
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'ProcessOutputs',
- # La factory pour creer une instance du plugin
- 'factory' : ProcessOutputsGenerator,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'ProcessOutputs',
+ # La factory pour creer une instance du plugin
+ 'factory' : ProcessOutputsGenerator,
+ }
class ProcessOutputsGenerator(PythonGenerator,ModificationGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format dictionnaire
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format dictionnaire
- """
- # Les extensions de fichier permis?
- extensions=('.comm',)
+ """
+ # Les extensions de fichier permis?
+ extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None, appliEficas=None):
+ def gener(self,obj,format='brut',config=None, appliEficas=None):
- # Cette instruction genere le contenu du fichier de commandes (persistance)
- texteModification=self.generTexteModif(obj)
- text=PythonGenerator.gener(self,obj,format)
- self.text=texteModification+text
+ # Cette instruction genere le contenu du fichier de commandes (persistance)
+ texteModification=self.generTexteModif(obj)
+ text=PythonGenerator.gener(self,obj,format)
+ self.text=texteModification+text
+
+ return self.text
- return self.text
-
# si repertoire on change tous les noms de fichier
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import traceback
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'TELEMAC',
- # La factory pour creer une instance du plugin
- 'factory' : TELEMACGenerator,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'TELEMAC',
+ # La factory pour creer une instance du plugin
+ 'factory' : TELEMACGenerator,
+ }
class TELEMACGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format dictionnaire
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format dictionnaire
- """
+ """
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None,appliEficas=None,statut="Leger"):
-
- self.statut = statut
- self.langue = appliEficas.langue
- try : self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn
- except :
- print ('Attention : pas de TelemacdicoEn declare')
- self.TelemacdicoEn = {}
- self.DicoEnumCasEnInverse = {}
- #from enum_Telemac2d_auto import self.TelemacdicoEn
- for motClef in self.TelemacdicoEn:
- d={}
- for valTelemac in self.TelemacdicoEn[motClef]:
- valEficas = self.TelemacdicoEn[motClef][valTelemac]
- d[valEficas] =valTelemac
- self.DicoEnumCasEnInverse[motClef]=d
- if self.langue == 'fr' :
- #from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn
- self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn
- for motClef in self.DicoEnumCasFrToEnumCasEn:
- d={}
- for valTelemac in self.DicoEnumCasFrToEnumCasEn[motClef]:
- valEficas = self.DicoEnumCasFrToEnumCasEn[motClef][valTelemac]
- d[valEficas] = valTelemac
- self.DicoEnumCasEnInverse[motClef]=d
- self.initDico()
- # Pour Simplifier les verifs d ecriture
- if hasattr(appliEficas,'listeTelemac') : self.listeTelemac=appliEficas.listeTelemac
- else : self.listeTelemac = ()
-
- self.dicoCataToCas={}
- try :
- self.dicoCasToCata=appliEficas.readercata.dicoCasToCata
- except :
- print ('Attention pas de dicoCasToCata declare')
- self.dicoCasToCata={}
- self.dicoCataToCas={}
- for motClef in self.dicoCasToCata:
- self.dicoCataToCas[self.dicoCasToCata[motClef]]=motClef
-
-
-
- # Cette instruction genere le contenu du fichier de commandes (persistance)
- self.text=PythonGenerator.gener(self,obj,format)
- return self.text
+ def gener(self,obj,format='brut',config=None,appliEficas=None,statut="Leger"):
+
+ self.statut = statut
+ self.langue = appliEficas.langue
+ try : self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn
+ except :
+ print ('Attention : pas de TelemacdicoEn declare')
+ self.TelemacdicoEn = {}
+ self.DicoEnumCasEnInverse = {}
+ #from enum_Telemac2d_auto import self.TelemacdicoEn
+ for motClef in self.TelemacdicoEn:
+ d={}
+ for valTelemac in self.TelemacdicoEn[motClef]:
+ valEficas = self.TelemacdicoEn[motClef][valTelemac]
+ d[valEficas] =valTelemac
+ self.DicoEnumCasEnInverse[motClef]=d
+ if self.langue == 'fr' :
+ #from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn
+ self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn
+ for motClef in self.DicoEnumCasFrToEnumCasEn:
+ d={}
+ for valTelemac in self.DicoEnumCasFrToEnumCasEn[motClef]:
+ valEficas = self.DicoEnumCasFrToEnumCasEn[motClef][valTelemac]
+ d[valEficas] = valTelemac
+ self.DicoEnumCasEnInverse[motClef]=d
+ self.initDico()
+ # Pour Simplifier les verifs d ecriture
+ if hasattr(appliEficas,'listeTelemac') : self.listeTelemac=appliEficas.listeTelemac
+ else : self.listeTelemac = ()
+
+ self.dicoCataToCas={}
+ try :
+ self.dicoCasToCata=appliEficas.readercata.dicoCasToCata
+ except :
+ print ('Attention pas de dicoCasToCata declare')
+ self.dicoCasToCata={}
+ self.dicoCataToCas={}
+ for motClef in self.dicoCasToCata:
+ self.dicoCataToCas[self.dicoCasToCata[motClef]]=motClef
+
+
+
+ # Cette instruction genere le contenu du fichier de commandes (persistance)
+ self.text=PythonGenerator.gener(self,obj,format)
+ return self.text
#----------------------------------------------------------------------------------------
# initialisations
#----------------------------------------------------------------------------------------
- def initDico(self) :
+ def initDico(self) :
- self.PE=False
- self.FE=False
- self.VE=False
- self.commentaireAvant = False
- self.texteCom=''
- if self.langue == "fr" :
- self.textPE = 'COTES IMPOSEES :'
- self.textFE = 'DEBITS IMPOSES :'
- self.textVE = 'VITESSES IMPOSEES :'
- else :
- self.textPE = 'PRESCRIBED ELEVATIONS :'
- self.textFE = 'PRESCRIBED FLOWRATES :'
- self.textVE = 'PRESCRIBED VELOCITIES :'
- self.nbTracers = 0
- self.texteDico = ""
+ self.PE=False
+ self.FE=False
+ self.VE=False
+ self.commentaireAvant = False
+ self.texteCom=''
+ if self.langue == "fr" :
+ self.textPE = 'COTES IMPOSEES :'
+ self.textFE = 'DEBITS IMPOSES :'
+ self.textVE = 'VITESSES IMPOSEES :'
+ else :
+ self.textPE = 'PRESCRIBED ELEVATIONS :'
+ self.textFE = 'PRESCRIBED FLOWRATES :'
+ self.textVE = 'PRESCRIBED VELOCITIES :'
+ self.nbTracers = 0
+ self.texteDico = ""
# ecriture de tout
#----------------------------------------------------------------------------------------
- def writeDefault(self,fn) :
- self.texteDico+='&ETA\n'
- #if self.statut == 'Leger' : extension = ".Lcas"
- #else : extension = ".cas"
- extension=".cas"
- fileDico = fn[:fn.rfind(".")] + extension
- f = open( str(fileDico), 'w')
- f.write( self.texteDico )
- f.close()
+ def writeDefault(self,fn) :
+ self.texteDico+='&ETA\n'
+ #if self.statut == 'Leger' : extension = ".Lcas"
+ #else : extension = ".cas"
+ extension=".cas"
+ fileDico = fn[:fn.rfind(".")] + extension
+ f = open( str(fileDico), 'w')
+ f.write( self.texteDico )
+ f.close()
#----------------------------------------------------------------------------------------
# ecriture de Leger
#----------------------------------------------------------------------------------------
- def writeComplet(self,fn,jdc,config,appliEficas) :
- jdc_formate=self.gener(jdc,config=config,appliEficas=appliEficas,statut="Entier")
- self.writeDefault(fn)
+ def writeComplet(self,fn,jdc,config,appliEficas) :
+ jdc_formate=self.gener(jdc,config=config,appliEficas=appliEficas,statut="Entier")
+ self.writeDefault(fn)
#----------------------------------------------------------------------------------------
# analyse de chaque noeud de l'arbre
#----------------------------------------------------------------------------------------
- def generPROC_ETAPE(self,obj):
+ def generPROC_ETAPE(self,obj):
if not self.commentaireAvant or self.texteCom.find(obj.nom) < 0:
self.texteDico += '/------------------------------------------------------------------/\n'
self.texteDico += '/\t\t\t'+obj.nom +'\n'
return s
- def generMCSIMP(self,obj) :
+ def generMCSIMP(self,obj) :
"""recuperation de l objet MCSIMP"""
s=PythonGenerator.generMCSIMP(self,obj)
# a reflechir avec Yoann
# ajouter le statut ?
if self.statut == 'Leger' :
- if hasattr(obj.definition,'defaut') and (obj.definition.defaut == obj.valeur) and (obj.nom not in self.listeTelemac) : return s
- if hasattr(obj.definition,'defaut') and obj.definition.defaut != None and (type(obj.valeur) == tuple or type(obj.valeur) == list) and (tuple(obj.definition.defaut) == tuple(obj.valeur)) and (obj.nom not in self.listeTelemac) : return s
+ if hasattr(obj.definition,'defaut') and (obj.definition.defaut == obj.valeur) and (obj.nom not in self.listeTelemac) : return s
+ if hasattr(obj.definition,'defaut') and obj.definition.defaut != None and (type(obj.valeur) == tuple or type(obj.valeur) == list) and (tuple(obj.definition.defaut) == tuple(obj.valeur)) and (obj.nom not in self.listeTelemac) : return s
#nomMajuscule=obj.nom.upper()
#nom=nomMajuscule.replace('_',' ')
#if nom in listeSupprime or s == "" : return s
- if s == "None," : s=None
+ if s == "None," : s=None
if s == "" or s==None : return s
sTelemac=s[0:-1]
if not( type(obj.valeur) in (tuple,list) ):
- if obj.nom in self.DicoEnumCasEnInverse:
- try : sTelemac=str(self.DicoEnumCasEnInverse[obj.nom][obj.valeur])
- except :
- if obj.valeur==None : sTelemac=obj.valeur
- else : print(("generMCSIMP Pb valeur avec ", obj.nom, obj.valeur))
- # Si le resultat est du texte on ajoute des guillemets
- if sTelemac[0] not in '0123456789':
- sTelemac = "'" + sTelemac +"'"
+ if obj.nom in self.DicoEnumCasEnInverse:
+ try : sTelemac=str(self.DicoEnumCasEnInverse[obj.nom][obj.valeur])
+ except :
+ if obj.valeur==None : sTelemac=obj.valeur
+ else : print(("generMCSIMP Pb valeur avec ", obj.nom, obj.valeur))
+ # Si le resultat est du texte on ajoute des guillemets
+ if sTelemac[0] not in '0123456789':
+ sTelemac = "'" + sTelemac +"'"
if type(obj.valeur) in (tuple,list) :
- if obj.nom in self.DicoEnumCasEnInverse:
- #sT = "'"
- sT=''
- for v in obj.valeur:
- try : sT +=str(self.DicoEnumCasEnInverse[obj.nom][v]) +";"
- except :
- if obj.definition.intoSug != [] : sT +=str(v) + ";"
- else : print(("generMCSIMP Pb Tuple avec ", obj.nom, v, obj.valeur))
- #sTelemac=sT[0:-1]+"'"
- sTelemac=sT[0:-1]
- else :
- sTelemac=sTelemac[0:-1]
- if sTelemac.find("'") > 0 :
- sTelemac= sTelemac.replace (',',';\n ')
- # on enleve le dernier ';'
- index=(sTelemac.rfind(";"))
- sTelemac=sTelemac[:index]+' '+sTelemac[index+1:]
+ if obj.nom in self.DicoEnumCasEnInverse:
+ #sT = "'"
+ sT=''
+ for v in obj.valeur:
+ try : sT +=str(self.DicoEnumCasEnInverse[obj.nom][v]) +";"
+ except :
+ if obj.definition.intoSug != [] : sT +=str(v) + ";"
+ else : print(("generMCSIMP Pb Tuple avec ", obj.nom, v, obj.valeur))
+ #sTelemac=sT[0:-1]+"'"
+ sTelemac=sT[0:-1]
+ else :
+ sTelemac=sTelemac[0:-1]
+ if sTelemac.find("'") > 0 :
+ sTelemac= sTelemac.replace (',',';\n ')
+ # on enleve le dernier ';'
+ index=(sTelemac.rfind(";"))
+ sTelemac=sTelemac[:index]+' '+sTelemac[index+1:]
if self.langue=='fr' :
- s1=str(sTelemac).replace('True','OUI')
- s2=s1.replace('False','NON')
+ s1=str(sTelemac).replace('True','OUI')
+ s2=s1.replace('False','NON')
else :
- s1=str(sTelemac).replace('True','YES')
- s2=s1.replace('False','NO')
+ s1=str(sTelemac).replace('True','YES')
+ s2=s1.replace('False','NO')
if hasattr(obj.definition,'max'):
- if obj.definition.max != 1:
- s3=s2.replace(',',';')
- else:
- s3=s2
+ if obj.definition.max != 1:
+ s3=s2.replace(',',';')
+ else:
+ s3=s2
if s3 != "" and s3[0]=='(' :
- try : s3=s3[1:-1] # cas de liste vide
- except : s3 = ' '
+ try : s3=s3[1:-1] # cas de liste vide
+ except : s3 = ' '
# LIQUID_BOUNDARIES
# cas des Tuples
if obj.waitTuple() and s3 != '' and s3 != 'None':
- s3=s
- if s3[-1] == ',': s3=s3[:-1]
+ s3=s
+ if s3[-1] == ',': s3=s3[:-1]
if obj.nom not in self.dicoCataToCas :
- if obj.nom == 'Consigne' : return ""
- return s
+ if obj.nom == 'Consigne' : return ""
+ return s
nom=self.dicoCataToCas[obj.nom]
- if nom in ["VARIABLES FOR GRAPHIC PRINTOUTS", "VARIABLES POUR LES SORTIES GRAPHIQUES", "VARIABLES TO BE PRINTED","VARIABLES A IMPRIMER"] :
- if s3 != '' and s3 != 'None':
+ if nom in ["VARIABLES FOR GRAPHIC PRINTOUTS", "VARIABLES POUR LES SORTIES GRAPHIQUES",
+ "VARIABLES TO BE PRINTED","VARIABLES A IMPRIMER",
+ "VARIABLES FOR 3D GRAPHIC PRINTOUTS", "VARIABLES POUR LES SORTIES GRAPHIQUES 3D",
+ "VARIABLES POUR LES SORTIES GRAPHIQUES 2D", "VARIABLES FOR 2D GRAPHIC PRINTOUTS",
+ "C_VSM_PRINTOUT_SELECTION"]:
+ if s3 != '' and s3 != 'None':
s3=s3.replace(';',',')
s3="'"+ s3 +"'"
- else:
+ else:
s3 = "''"
+ if nom in ["COUPLING WITH", "COUPLAGE AVEC"]:
+ s3 = s3.strip().replace("\n","")\
+ .replace(" ", "")\
+ .replace("\t", "")\
+ .replace("';'", ",")
if s3 == "" or s3 == " " : s3 = " "
ligne=nom+ " : " + s3 + "\n"
if len(ligne) > 72 : ligne=self.redecoupeLigne(nom,s3)
self.texteDico+=ligne
- def generMCFACT(self,obj):
- """
- """
- s=PythonGenerator.generMCFACT(self,obj)
- if obj.nom in TELEMACGenerator.__dict__ : TELEMACGenerator.__dict__[obj.nom](self,obj)
-
- return s
-
-
- def TRACERS(self,obj):
- if self.nbTracers != 0 : self.texteDico += 'NUMBER_OF_TRACERS : '+str(self.nbTracers) + '\n'
-
-
- def NAME_OF_TRACER(self,obj):
- print((dir(obj) ))
- print((obj.getGenealogiePrecise()))
-
- def Validation(self,obj):
- self.texteDico += "VALIDATION : True \n"
-
- def Date_De_L_Origine_Des_Temps (self,obj):
- an=obj.getChild('Year').valeur
- mois=obj.getChild('Month').valeur
- jour=obj.getChild('Day').valeur
- self.texteDico += "ORIGINAL DATE OF TIME :"+ str(an)+ " ,"+str(mois)+ "," +str(jour)+ "\n"
-
- def Original_Hour_Of_Time (self,obj):
- hh=obj.getChild('Hour').valeur
- mm=obj.getChild('Minute').valeur
- ss=obj.getChild('Second').valeur
- self.texteDico += "ORIGINAL HOUR OF TIME :"+str(hh)+" ,"+str(mm)+ ","+str(ss)+"\n"
-
- def Type_Of_Advection(self,obj):
- listeAdvection=[1,5,1,1]
- listeSupg=[2,2,2,2]
- listeUpwind=[1.,1.,1.,1.]
- self.listeMCAdvection=[]
- self.chercheChildren(obj)
- dicoSuf={ 'U_And_V' : 0, 'H' : 1, 'K_And_Epsilon' : 2, 'Tracers' : 3}
- for c in self.listeMCAdvection:
- if c.nom[0:18] == 'Type_Of_Advection_' and c.valeur!=None:
- suf=c.nom[18:]
- index=dicoSuf[suf]
- listeAdvection[index]=self.DicoEnumCasEnInverse['Type_Of_Advection'][c.valeur]
- if c.nom[0:13] == 'Supg_Option_' and c.valeur!=None:
- suf=c.nom[13:]
- index=dicoSuf[suf]
- listeAdvection[index]=self.DicoEnumCasEnInverse['Supg_Option'][c.valeur]
- if c.nom[0:23] == 'Upwind_Coefficients_Of_' and c.valeur!=None:
- suf=c.nom[23:]
- index=dicoSuf[suf]
- listeUpwind[index]=c.valeur
- self.texteDico += "TYPE OF ADVECTION = "+ str(listeAdvection) + "\n"
- self.texteDico += "SUPG OPTION = "+ str(listeSupg) + "\n"
- self.texteDico += "UPWIND COEFFICIENTS = "+ str(listeUpwind) + "\n"
-
- def chercheChildren(self,obj):
- for c in obj.listeMcPresents():
- objc=obj.getChild(c)
- if hasattr(objc,'listeMcPresents') and objc.listeMcPresents() != [] : self.chercheChildren(objc)
- else : self.listeMCAdvection.append(objc)
-
-
-
- def redecoupeLigne(self,nom,valeur) :
- text=nom+ " : \n"
- valeur=valeur
- if valeur.find("'") > -1:
- lval=valeur.split(";")
- for v in lval : text+=' '+v+';'
- text=text[0:-1]+'\n'
- else :
- lval=valeur.split(";")
- ligne=" "
- for v in lval :
- if len(ligne+ str(v)+'; ') < 70 : ligne += str(v)+'; '
- else :
- text+= ligne+"\n"
- ligne=" "+str(v)+'; '
- text+= ligne[0:-2]+'\n'
- return text
-
- def generCOMMENTAIRE(self,obj):
- sans_saut = re.sub("\n$","",obj.valeur)
- l_lignes = sans_saut.split('\n')
- txt='/'+66*'-'+'/'+'\n'
- i=1
- for ligne in l_lignes:
- self.texteCom+=ligne+'\n'
- txt = txt + '/'+ligne+'\n'
- txt= txt + '/'+66*'-'+'/'+'\n'
- self.texteDico += txt
- self.commentaireAvant= True
- return PythonGenerator.generCOMMENTAIRE(self,obj)
+ def generMCFACT(self,obj):
+ """
+ """
+ s=PythonGenerator.generMCFACT(self,obj)
+ if obj.nom in TELEMACGenerator.__dict__ : TELEMACGenerator.__dict__[obj.nom](self,obj)
+
+ return s
+ def TRACERS(self,obj):
+ if self.nbTracers != 0 : self.texteDico += 'NUMBER_OF_TRACERS : '+str(self.nbTracers) + '\n'
+
+
+ def NAME_OF_TRACER(self,obj):
+ print((dir(obj) ))
+ print((obj.getGenealogiePrecise()))
+
+ def Validation(self,obj):
+ self.texteDico += "VALIDATION : True \n"
+
+ def Date_De_L_Origine_Des_Temps (self,obj):
+ an=obj.getChild('Year').valeur
+ mois=obj.getChild('Month').valeur
+ jour=obj.getChild('Day').valeur
+ self.texteDico += "ORIGINAL DATE OF TIME :"+ str(an)+ " ,"+str(mois)+ "," +str(jour)+ "\n"
+
+ def Original_Hour_Of_Time (self,obj):
+ hh=obj.getChild('Hour').valeur
+ mm=obj.getChild('Minute').valeur
+ ss=obj.getChild('Second').valeur
+ self.texteDico += "ORIGINAL HOUR OF TIME :"+str(hh)+" ,"+str(mm)+ ","+str(ss)+"\n"
+
+ def Type_Of_Advection(self,obj):
+ listeAdvection=[1,5,1,1]
+ listeSupg=[2,2,2,2]
+ listeUpwind=[1.,1.,1.,1.]
+ self.listeMCAdvection=[]
+ self.chercheChildren(obj)
+ dicoSuf={ 'U_And_V' : 0, 'H' : 1, 'K_And_Epsilon' : 2, 'Tracers' : 3}
+ for c in self.listeMCAdvection:
+ if c.nom[0:18] == 'Type_Of_Advection_' and c.valeur!=None:
+ suf=c.nom[18:]
+ index=dicoSuf[suf]
+ listeAdvection[index]=self.DicoEnumCasEnInverse['Type_Of_Advection'][c.valeur]
+ if c.nom[0:13] == 'Supg_Option_' and c.valeur!=None:
+ suf=c.nom[13:]
+ index=dicoSuf[suf]
+ listeAdvection[index]=self.DicoEnumCasEnInverse['Supg_Option'][c.valeur]
+ if c.nom[0:23] == 'Upwind_Coefficients_Of_' and c.valeur!=None:
+ suf=c.nom[23:]
+ index=dicoSuf[suf]
+ listeUpwind[index]=c.valeur
+ self.texteDico += "TYPE OF ADVECTION = "+ str(listeAdvection) + "\n"
+ self.texteDico += "SUPG OPTION = "+ str(listeSupg) + "\n"
+ self.texteDico += "UPWIND COEFFICIENTS = "+ str(listeUpwind) + "\n"
+
+ def chercheChildren(self,obj):
+ for c in obj.listeMcPresents():
+ objc=obj.getChild(c)
+ if hasattr(objc,'listeMcPresents') and objc.listeMcPresents() != [] : self.chercheChildren(objc)
+ else : self.listeMCAdvection.append(objc)
+
+
+
+ def redecoupeLigne(self,nom,valeur) :
+ text=nom+ " : \n"
+ valeur=valeur
+ if valeur.find("'") > -1:
+ lval=valeur.split(";")
+ for v in lval : text+=' '+v+';'
+ text=text[0:-1]+'\n'
+ else :
+ lval=valeur.split(";")
+ ligne=" "
+ for v in lval :
+ if len(ligne+ str(v)+'; ') < 70 : ligne += str(v)+'; '
+ else :
+ text+= ligne+"\n"
+ ligne=" "+str(v)+'; '
+ text+= ligne[0:-2]+'\n'
+ return text
+
+ def generCOMMENTAIRE(self,obj):
+ sans_saut = re.sub("\n$","",obj.valeur)
+ l_lignes = sans_saut.split('\n')
+ txt='/'+66*'-'+'/'+'\n'
+ i=1
+ for ligne in l_lignes:
+ self.texteCom+=ligne+'\n'
+ txt = txt + '/'+ligne+'\n'
+ txt= txt + '/'+66*'-'+'/'+'\n'
+ self.texteDico += txt
+ self.commentaireAvant= True
+ return PythonGenerator.generCOMMENTAIRE(self,obj)
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import traceback
from .generator_python import PythonGenerator
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'xml',
- # La factory pour creer une instance du plugin
- 'factory' : XMLGenerator,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'xml',
+ # La factory pour creer une instance du plugin
+ 'factory' : XMLGenerator,
+ }
class XMLGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
- """
- # Les extensions de fichier permis?
- extensions=('.comm',)
+ """
+ # Les extensions de fichier permis?
+ extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None,appliEficas=None):
-
- print ('dans gener XMLGenerator Attention if 1 a la place de try ')
- #try :
- if 1 :
- self.texteXML=obj.toXml()
- #except :
- # self.texteXML='erreur generation'
- # pass
-
- print (self.texteXML)
- self.textePourAide =""
- self.dictNbNomObj={}
- # Cette instruction genere le contenu du fichier de commandes (persistance)
- self.text=PythonGenerator.gener(self,obj,format)
- return self.text
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
+
+ try :
+ #if 1 :
+ self.texteXML=obj.toXml()
+ except :
+ self.texteXML='erreur generation'
+ #print (self.texteXML)
+ # pass
+
+ self.textePourAide =""
+ self.dictNbNomObj={}
+ # Cette instruction genere le contenu du fichier de commandes (persistance)
+ self.text=PythonGenerator.gener(self,obj,format)
+ return self.text
#----------------------------------------------------------------------------------------
# initialisations
#----------------------------------------------------------------------------------------
-
+
# ecriture
#----------------------------------------------------------------------------------------
- def writeDefault(self,fn) :
- fileXML = fn[:fn.rfind(".")] + '.xml'
- #filePyxb = fn[:fn.rfind(".")] + '.py'
- fileBase = os.path.basename(fileXML)
- fileBase = fileBase[:fileBase.rfind(".")] + '.py'
- filePyxb = '/tmp/' + fileBase
- print (filePyxb)
- #fileDico='/tmp/toto.xml'
- #print (self.texteXML)
- f = open( str(fileXML), 'w')
- f.write(str(self.texteXML))
- f.close()
-
- f = open( str(filePyxb), 'w')
- f.write(str(self.textePourAide))
- f.close()
-
-
- def generMCSIMP(self,obj) :
- if obj.nom in self.dictNbNomObj.keys():
- nomUtil = obj.nom + "_" + str(self.dictNbNomObj[obj.nom])
- self.dictNbNomObj[obj.nom] += 1
- else :
- nomUtil = obj.nom
- self.dictNbNomObj[obj.nom] = 1
- self.textePourAide += nomUtil + " = vimmpCase." + obj.getNomDsXML() + "\n"
- #self.textePourAide += "print '"+ nomUtil+ " =' , " + str(nomUtil) + "\n"
- #self.textePourAide +='txt += "' + nomUtil + '" + " = " +str( ' + nomUtil + ') ' + "\n"
-
-
-
- s=PythonGenerator.generMCSIMP(self,obj)
- return s
+ def writeDefault(self,fn) :
+ fileXML = fn[:fn.rfind(".")] + '.xml'
+ #filePyxb = fn[:fn.rfind(".")] + '.py'
+ fileBase = os.path.basename(fileXML)
+ fileBase = fileBase[:fileBase.rfind(".")] + '.py'
+ filePyxb = '/tmp/example_' + fileBase
+ #print (filePyxb)
+ #fileDico='/tmp/toto.xml'
+ #print (self.texteXML)
+ f = open( str(fileXML), 'w')
+ f.write(str(self.texteXML))
+ f.close()
+
+ f = open( str(filePyxb), 'w')
+ self.textePourAide='txt=""'+'\n'+self.textePourAide
+ self.textePourAide=self.textePourAide+'print (txt)'+'\n'
+ f.write(str(self.textePourAide))
+ f.close()
+
+
+ def generMCSIMP(self,obj) :
+ if obj.nom != 'Consigne' :
+ if obj.nom in self.dictNbNomObj.keys():
+ nomUtil = obj.nom + "_" + str(self.dictNbNomObj[obj.nom])
+ self.dictNbNomObj[obj.nom] += 1
+ else :
+ nomUtil = obj.nom
+ self.dictNbNomObj[obj.nom] = 1
+ if obj.definition.avecBlancs : self.textePourAide += nomUtil + " = vimmpCase." + obj.getNomDsXML() + ".s\n"
+ else : self.textePourAide += nomUtil + " = vimmpCase." + obj.getNomDsXML() + "\n"
+ self.textePourAide +='txt += "' + nomUtil + '" + " = " +str( ' + nomUtil + ')+"\\n"'+ "\n"
+
+
+
+ s=PythonGenerator.generMCSIMP(self,obj)
+ return s
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient le plugin generateur de fichier au format
+ Ce module contient le plugin generateur de fichier au format
aplat pour EFICAS.
"""
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import traceback
from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'aplat',
- # La factory pour creer une instance du plugin
- 'factory' : AplatGenerator,
- }
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'aplat',
+ # La factory pour creer une instance du plugin
+ 'factory' : AplatGenerator,
+ }
class AplatGenerator(object):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un fichier au format aplat
-
- L'acquisition et le parcours sont realises par la methode
- generator.gener(objet_jdc,format)
-
- L'ecriture du fichier au format ini par appel de la methode
- generator.writefile(nom_fichier)
-
- Ses caracteristiques principales sont exposees dans des attributs
- de classe :
- - extensions : qui donne une liste d'extensions de fichier preconisees
-
- """
- # Les extensions de fichier preconisees
- extensions=('.*',)
-
- def __init__(self,cr=None):
- # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
- if cr :
- self.cr=cr
- else:
- self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas',
- fin='fin CR format aplat pour eficas')
- self.init=''
- # Le separateur utiise
- self.sep='//'
- # Le texte au format aplat est stocke dans l'attribut text
- self.text=''
-
- def writefile(self,filename):
- fp=open(filename,'w')
- fp.write(self.text)
- fp.close()
-
- def gener(self,obj,format='brut',config=None,appliEficas=None):
- """
- Retourne une representation du JDC obj sous une forme qui est parametree par format.
- Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator
- """
- liste= self.generator(obj)
- if format == 'brut':
- self.text=liste
- elif format == 'standard':
- self.text=liste
- elif format == 'beautifie':
- self.text=liste
- else:
- raise EficasException(tr("Format pas implemente : %s", format))
- return self.text
-
- def generator(self,obj):
- """
- Cette methode joue un role d'aiguillage en fonction du type de obj
- On pourrait utiliser les methodes accept et visitxxx a la
- place (depend des gouts !!!)
- """
- # ATTENTION a l'ordre des tests : il peut avoir de l'importance (heritage)
- if isinstance(obj,PROC_ETAPE):
- return self.generPROC_ETAPE(obj)
- elif isinstance(obj,MACRO_ETAPE):
- return self.generMACRO_ETAPE(obj)
- elif isinstance(obj,FORM_ETAPE):
- return self.generFORM_ETAPE(obj)
- elif isinstance(obj,ETAPE):
- return self.generETAPE(obj)
- elif isinstance(obj,MCFACT):
- return self.generMCFACT(obj)
- elif isinstance(obj,MCList):
- return self.generMCList(obj)
- elif isinstance(obj,MCBLOC):
- return self.generMCBLOC(obj)
- elif isinstance(obj,MCSIMP):
- return self.generMCSIMP(obj)
- elif isinstance(obj,ASSD):
- return self.generASSD(obj)
- elif isinstance(obj,ETAPE_NIVEAU):
- return self.generETAPE_NIVEAU(obj)
- elif isinstance(obj,COMMENTAIRE):
- return self.generCOMMENTAIRE(obj)
- # Attention doit etre place avant PARAMETRE (raison : heritage)
- elif isinstance(obj,PARAMETRE_EVAL):
- return self.generPARAMETRE_EVAL(obj)
- elif isinstance(obj,PARAMETRE):
- return self.generPARAMETRE(obj)
- elif isinstance(obj,EVAL):
- return self.generEVAL(obj)
- elif isinstance(obj,COMMANDE_COMM):
- return self.generCOMMANDE_COMM(obj)
- elif isinstance(obj,JDC):
- return self.generJDC(obj)
- elif isinstance(obj,MCNUPLET):
- return self.generMCNUPLET(obj)
- else:
- raise EficasException(tr("Format non implemente : %s", format))
-
-
- def generJDC(self,obj):
- """
- Cette methode convertit un objet JDC en une chaine de
- caracteres a la syntaxe aplat
- """
- text=''
- if obj.definition.l_niveaux == ():
- # Il n'y a pas de niveaux
- for etape in obj.etapes:
- text=text+self.generator(etape)+'\n'
- else:
- # Il y a des niveaux
- for etape_niveau in obj.etapes_niveaux:
- text=text+self.generator(etape_niveau)+'\n'
- return text
-
- def generCOMMANDE_COMM(self,obj):
- """
- Cette methode convertit un COMMANDE_COMM
- en une chaine de caracteres a la syntaxe aplat
- """
- l_lignes = obj.valeur.split('\n')
- txt=''
- for ligne in l_lignes:
- txt = txt + '##'+ligne+'\n'
- return txt
-
- def generEVAL(self,obj):
- """
- Cette methode convertit un EVAL
- en une chaine de caracteres a la syntaxe aplat
- """
- return 'EVAL("""'+ obj.valeur +'""")'
-
- def generCOMMENTAIRE(self,obj):
- """
- Cette methode convertit un COMMENTAIRE
- en une chaine de caracteres a la syntaxe aplat
- """
- l_lignes = obj.valeur.split('\n')
- txt=''
- for ligne in l_lignes:
- txt = txt + '#'+ligne+'\n'
- return txt
-
- def generPARAMETRE_EVAL(self,obj):
- """
- Cette methode convertit un PARAMETRE_EVAL
- en une chaine de caracteres a la syntaxe aplat
- """
- if obj.valeur == None:
- return obj.nom + ' = None ;\n'
- else:
- return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
-
- def generPARAMETRE(self,obj):
- """
- Cette methode convertit un PARAMETRE
- en une chaine de caracteres a la syntaxe aplat
- """
- if type(obj.valeur) == bytes or type(obj.valeur) == str:
- # PN pour corriger le bug a='3+4' au lieu de a= 3+4
- #return obj.nom + " = '" + obj.valeur + "';\n"
- return obj.nom + " = " + obj.valeur + ";\n"
- else:
- return obj.nom + ' = ' + str(obj.valeur) + ';\n'
-
- def generETAPE_NIVEAU(self,obj):
- """
- Cette methode convertit une etape niveau
- en une chaine de caracteres a la syntaxe aplat
- """
- text=''
- if obj.etapes_niveaux == []:
- for etape in obj.etapes:
- text=text+self.generator(etape)+'\n'
- else:
- for etape_niveau in obj.etapes_niveaux:
- text=text+self.generator(etape_niveau)+'\n'
- return text
-
- def gener_etape(self,obj):
- """
- Cette methode est utilise pour convertir les objets etape
- en une chaine de caracteres a la syntaxe aplat
- """
- text=''
- for v in obj.mcListe:
- text=text + self.generator(v)
- if text=='':
- return self.init+'\n'
- else:
- return text
-
- def generETAPE(self,obj):
- """
- Cette methode convertit une etape
- en une chaine de caracteres a la syntaxe aplat
- """
- try:
- sdname= self.generator(obj.sd)
- except:
- sdname='sansnom'
- self.init = sdname + self.sep + obj.nom
- return self.gener_etape(obj)
-
- def generMACRO_ETAPE(self,obj):
- """
- Cette methode convertit une macro-etape
- en une chaine de caracteres a la syntaxe aplat
- """
- try:
- if obj.sd == None:
- self.init = obj.nom
- else:
- sdname= self.generator(obj.sd)
- self.init = sdname + self.sep + obj.nom
- except:
- self.init = 'sansnom' + self.sep + obj.nom
-
- return self.gener_etape(obj)
-
- generPROC_ETAPE = generMACRO_ETAPE
-
- generFORM_ETAPE = generMACRO_ETAPE
-
- def generASSD(self,obj):
- """
- Convertit un objet derive d'ASSD en une chaine de caracteres a la
- syntaxe aplat
- """
- return obj.getName()
-
- def generMCList(self,obj):
- """
- Convertit un objet MCList en une chaine de caracteres a la
- syntaxe aplat
- """
- i=0
- text = ''
- init = self.init + self.sep + obj.nom
- old_init=self.init
- for data in obj.data :
- i=i+1
- self.init = init + self.sep + "occurrence n"+repr(i)
- text = text + self.generator(data)
- self.init=old_init
- return text
-
- def generMCSIMP(self,obj) :
- """
- Convertit un objet MCSIMP en une chaine de caracteres a la
- syntaxe aplat
- """
- if type(obj.valeur) in (tuple,list) :
- # On est en presence d'une liste de valeur
- rep = '('
- for val in obj.valeur:
- #if type(val) == types.InstanceType :
- if isinstance(val,object):
- rep = rep + self.generator(val) +','
- else:
- rep = rep + repr(val)+','
- rep = rep + ')'
- #elif type(obj.valeur) == types.InstanceType :
- elif type(obj.valeur) == object :
- # On est en presence d'une valeur unique de type instance
- rep = self.generator(obj.valeur)
- else :
- # On est en presence d'une valeur unique
- rep = repr(obj.valeur)
- return self.init + self.sep + obj.nom + ' :' + rep + '\n'
-
- def generMCCOMPO(self,obj):
- """
- Convertit un objet MCCOMPO en une chaine de caracteres a la
- syntaxe aplat
- """
- text = ''
- old_init=self.init
- self.init = self.init + self.sep + obj.nom
- for mocle in obj.mcListe :
- text = text + self.generator(mocle)
- self.init=old_init
- return text
-
- generMCFACT=generMCCOMPO
-
- generMCBLOC=generMCCOMPO
-
- generMCNUPLET=generMCCOMPO
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un fichier au format aplat
+
+ L'acquisition et le parcours sont realises par la methode
+ generator.gener(objet_jdc,format)
+
+ L'ecriture du fichier au format ini par appel de la methode
+ generator.writeFile(nom_fichier)
+ Ses caracteristiques principales sont exposees dans des attributs
+ de classe :
+ - extensions : qui donne une liste d'extensions de fichier preconisees
+ """
+ # Les extensions de fichier preconisees
+ extensions=('.*',)
+
+ def __init__(self,cr=None):
+ # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+ if cr :
+ self.cr=cr
+ else:
+ self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas',
+ fin='fin CR format aplat pour eficas')
+ self.init=''
+ # Le separateur utiise
+ self.sep='//'
+ # Le texte au format aplat est stocke dans l'attribut text
+ self.text=''
+
+ def writefile(self,filename):
+ fp=open(filename,'w')
+ fp.write(self.text)
+ fp.close()
+
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
+ """
+ Retourne une representation du JDC obj sous une forme qui est parametree par format.
+ Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator
+ """
+ liste= self.generator(obj)
+ if format == 'brut':
+ self.text=liste
+ elif format == 'standard':
+ self.text=liste
+ elif format == 'beautifie':
+ self.text=liste
+ else:
+ raise EficasException(tr("Format pas implemente : %s", format))
+ return self.text
+
+ def generator(self,obj):
+ """
+ Cette methode joue un role d'aiguillage en fonction du type de obj
+ On pourrait utiliser les methodes accept et visitxxx a la
+ place (depend des gouts !!!)
+ """
+ # ATTENTION a l'ordre des tests : il peut avoir de l'importance (heritage)
+ if isinstance(obj,PROC_ETAPE):
+ return self.generPROC_ETAPE(obj)
+ elif isinstance(obj,MACRO_ETAPE):
+ return self.generMACRO_ETAPE(obj)
+ elif isinstance(obj,FORM_ETAPE):
+ return self.generFORM_ETAPE(obj)
+ elif isinstance(obj,ETAPE):
+ return self.generETAPE(obj)
+ elif isinstance(obj,MCFACT):
+ return self.generMCFACT(obj)
+ elif isinstance(obj,MCList):
+ return self.generMCList(obj)
+ elif isinstance(obj,MCBLOC):
+ return self.generMCBLOC(obj)
+ elif isinstance(obj,MCSIMP):
+ return self.generMCSIMP(obj)
+ elif isinstance(obj,ASSD):
+ return self.generASSD(obj)
+ elif isinstance(obj,ETAPE_NIVEAU):
+ return self.generETAPE_NIVEAU(obj)
+ elif isinstance(obj,COMMENTAIRE):
+ return self.generCOMMENTAIRE(obj)
+ # Attention doit etre place avant PARAMETRE (raison : heritage)
+ elif isinstance(obj,PARAMETRE_EVAL):
+ return self.generPARAMETRE_EVAL(obj)
+ elif isinstance(obj,PARAMETRE):
+ return self.generPARAMETRE(obj)
+ elif isinstance(obj,EVAL):
+ return self.generEVAL(obj)
+ elif isinstance(obj,COMMANDE_COMM):
+ return self.generCOMMANDE_COMM(obj)
+ elif isinstance(obj,JDC):
+ return self.generJDC(obj)
+ elif isinstance(obj,MCNUPLET):
+ return self.generMCNUPLET(obj)
+ else:
+ raise EficasException(tr("Format non implemente : %s", format))
+
+
+ def generJDC(self,obj):
+ """
+ Cette methode convertit un objet JDC en une chaine de
+ caracteres a la syntaxe aplat
+ """
+ text=''
+ if obj.definition.l_niveaux == ():
+ # Il n'y a pas de niveaux
+ for etape in obj.etapes:
+ text=text+self.generator(etape)+'\n'
+ else:
+ # Il y a des niveaux
+ for etape_niveau in obj.etapes_niveaux:
+ text=text+self.generator(etape_niveau)+'\n'
+ return text
+
+ def generCOMMANDE_COMM(self,obj):
+ """
+ Cette methode convertit un COMMANDE_COMM
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ l_lignes = obj.valeur.split('\n')
+ txt=''
+ for ligne in l_lignes:
+ txt = txt + '##'+ligne+'\n'
+ return txt
+
+ def generEVAL(self,obj):
+ """
+ Cette methode convertit un EVAL
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ return 'EVAL("""'+ obj.valeur +'""")'
+
+ def generCOMMENTAIRE(self,obj):
+ """
+ Cette methode convertit un COMMENTAIRE
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ l_lignes = obj.valeur.split('\n')
+ txt=''
+ for ligne in l_lignes:
+ txt = txt + '#'+ligne+'\n'
+ return txt
+
+ def generPARAMETRE_EVAL(self,obj):
+ """
+ Cette methode convertit un PARAMETRE_EVAL
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ if obj.valeur == None:
+ return obj.nom + ' = None ;\n'
+ else:
+ return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
+
+ def generPARAMETRE(self,obj):
+ """
+ Cette methode convertit un PARAMETRE
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ if type(obj.valeur) == bytes or type(obj.valeur) == str:
+ # PN pour corriger le bug a='3+4' au lieu de a= 3+4
+ #return obj.nom + " = '" + obj.valeur + "';\n"
+ return obj.nom + " = " + obj.valeur + ";\n"
+ else:
+ return obj.nom + ' = ' + str(obj.valeur) + ';\n'
+
+ def generETAPE_NIVEAU(self,obj):
+ """
+ Cette methode convertit une etape niveau
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ text=''
+ if obj.etapes_niveaux == []:
+ for etape in obj.etapes:
+ text=text+self.generator(etape)+'\n'
+ else:
+ for etape_niveau in obj.etapes_niveaux:
+ text=text+self.generator(etape_niveau)+'\n'
+ return text
+
+ def gener_etape(self,obj):
+ """
+ Cette methode est utilise pour convertir les objets etape
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ text=''
+ for v in obj.mcListe:
+ text=text + self.generator(v)
+ if text=='':
+ return self.init+'\n'
+ else:
+ return text
+
+ def generETAPE(self,obj):
+ """
+ Cette methode convertit une etape
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ try:
+ sdname= self.generator(obj.sd)
+ except:
+ sdname='sansnom'
+ self.init = sdname + self.sep + obj.nom
+ return self.gener_etape(obj)
+
+ def generMACRO_ETAPE(self,obj):
+ """
+ Cette methode convertit une macro-etape
+ en une chaine de caracteres a la syntaxe aplat
+ """
+ try:
+ if obj.sd == None:
+ self.init = obj.nom
+ else:
+ sdname= self.generator(obj.sd)
+ self.init = sdname + self.sep + obj.nom
+ except:
+ self.init = 'sansnom' + self.sep + obj.nom
+
+ return self.gener_etape(obj)
+
+ generPROC_ETAPE = generMACRO_ETAPE
+
+ generFORM_ETAPE = generMACRO_ETAPE
+
+ def generASSD(self,obj):
+ """
+ Convertit un objet derive d'ASSD en une chaine de caracteres a la
+ syntaxe aplat
+ """
+ return obj.getName()
+
+ def generMCList(self,obj):
+ """
+ Convertit un objet MCList en une chaine de caracteres a la
+ syntaxe aplat
+ """
+ i=0
+ text = ''
+ init = self.init + self.sep + obj.nom
+ old_init=self.init
+ for data in obj.data :
+ i=i+1
+ self.init = init + self.sep + "occurrence n"+repr(i)
+ text = text + self.generator(data)
+ self.init=old_init
+ return text
+
+ def generMCSIMP(self,obj) :
+ """
+ Convertit un objet MCSIMP en une chaine de caracteres a la
+ syntaxe aplat
+ """
+ if type(obj.valeur) in (tuple,list) :
+ # On est en presence d'une liste de valeur
+ rep = '('
+ for val in obj.valeur:
+ #if type(val) == types.InstanceType :
+ if isinstance(val,object):
+ rep = rep + self.generator(val) +','
+ else:
+ rep = rep + repr(val)+','
+ rep = rep + ')'
+ #elif type(obj.valeur) == types.InstanceType :
+ elif type(obj.valeur) == object :
+ # On est en presence d'une valeur unique de type instance
+ rep = self.generator(obj.valeur)
+ else :
+ # On est en presence d'une valeur unique
+ rep = repr(obj.valeur)
+ return self.init + self.sep + obj.nom + ' :' + rep + '\n'
+
+ def generMCCOMPO(self,obj):
+ """
+ Convertit un objet MCCOMPO en une chaine de caracteres a la
+ syntaxe aplat
+ """
+ text = ''
+ old_init=self.init
+ self.init = self.init + self.sep + obj.nom
+ for mocle in obj.mcListe :
+ text = text + self.generator(mocle)
+ self.init=old_init
+ return text
+
+ generMCFACT=generMCCOMPO
+
+ generMCBLOC=generMCCOMPO
+
+ generMCNUPLET=generMCCOMPO
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import traceback
from .generator_python import PythonGenerator
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'dico',
- # La factory pour creer une instance du plugin
- 'factory' : DicoGenerator,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'dico',
+ # La factory pour creer une instance du plugin
+ 'factory' : DicoGenerator,
+ }
class DicoGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format dictionnaire
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format dictionnaire
- """
- # Les extensions de fichier permis?
- extensions=('.comm',)
+ """
+ # Les extensions de fichier permis?
+ extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None,appliEficas=None):
-
- self.initDico()
-
- # Cette instruction genere le contenu du fichier de commandes (persistance)
- self.text=PythonGenerator.gener(self,obj,format)
- return self.text
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
+
+ self.initDico()
+
+ # Cette instruction genere le contenu du fichier de commandes (persistance)
+ self.text=PythonGenerator.gener(self,obj,format)
+ return self.text
#----------------------------------------------------------------------------------------
# initialisations
#----------------------------------------------------------------------------------------
-
- def initDico(self) :
-
- self.Dico={}
- self.texteDico = ""
+
+ def initDico(self) :
+
+ self.Dico={}
+ self.texteDico = ""
#----------------------------------------------------------------------------------------
# ecriture
#----------------------------------------------------------------------------------------
- def writeDefault(self,fn) :
- fileDico = fn[:fn.rfind(".")] + '.py'
- f = open( str(fileDico), 'w')
- f.write('Dico = '+str(self.Dico))
- f.close()
+ def writeDefault(self,fn) :
+ fileDico = fn[:fn.rfind(".")] + '.py'
+ f = open( str(fileDico), 'w')
+ f.write('Dico = '+str(self.Dico))
+ f.close()
#----------------------------------------------------------------------------------------
-# analyse de chaque noeud de l'arbre
+# analyse de chaque noeud de l'arbre
#----------------------------------------------------------------------------------------
- def generMCSIMP(self,obj) :
+ def generMCSIMP(self,obj) :
"""recuperation de l objet MCSIMP"""
s=PythonGenerator.generMCSIMP(self,obj)
courant=self.Dico
courant[obj.nom]=obj.val
self.texteDico+=obj.nom+ "=" + s[0:-1]+ "\n"
return s
-
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import traceback
from .generator_python import PythonGenerator
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'dicoImbrique',
- # La factory pour creer une instance du plugin
- 'factory' : DicoImbriqueGenerator,
- }
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'dicoImbrique',
+ # La factory pour creer une instance du plugin
+ 'factory' : DicoImbriqueGenerator,
+ }
class DicoImbriqueGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format dictionnaire
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format dictionnaire
- """
- # Les extensions de fichier permis?
- extensions=('.comm',)
+ """
+ # Les extensions de fichier permis?
+ extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None, appliEficas=None):
-
- self.initDico()
-
- # Cette instruction genere le contenu du fichier de commandes (persistance)
- self.text=PythonGenerator.gener(self,obj,format)
- #print (self.text)
- print (self.Dico)
- return self.text
+ def gener(self,obj,format='brut',config=None, appliEficas=None):
+
+ self.initDico()
+
+ # Cette instruction genere le contenu du fichier de commandes (persistance)
+ self.text=PythonGenerator.gener(self,obj,format)
+ #print (self.text)
+ print (self.Dico)
+ return self.text
#----------------------------------------------------------------------------------------
# initialisations
#----------------------------------------------------------------------------------------
-
- def initDico(self) :
-
- self.Dico={}
- self.DicoDejaLa={}
- self.Entete = ''
+
+ def initDico(self) :
+
+ self.Dico={}
+ self.DicoDejaLa={}
+ self.Entete = ''
#----------------------------------------------------------------------------------------
# ecriture
#----------------------------------------------------------------------------------------
- def writeDefault(self,fn) :
- fileDico = fn[:fn.rfind(".")] + '.py'
- f = open( str(fileDico), 'wb')
+ def writeDefault(self,fn) :
+ fileDico = fn[:fn.rfind(".")] + '.py'
+ f = open( str(fileDico), 'w')
- f.write( self.Entete + "Dico =" + str(self.Dico) )
- f.close()
+ f.write( "Dico =" + str(self.Dico) )
+ #f.write( self.Entete + "Dico =" + str(self.Dico) )
+ f.close()
#----------------------------------------------------------------------------------------
-# analyse de chaque noeud de l'arbre
+# analyse de chaque noeud de l'arbre
#----------------------------------------------------------------------------------------
- def generMCSIMP(self,obj) :
+ def generMCSIMP(self,obj) :
"""recuperation de l objet MCSIMP"""
s=PythonGenerator.generMCSIMP(self,obj)
if obj.isInformation() : return s
- if not obj.isValid() : return s
+ if not obj.isValid() : return s
- liste=obj.getGenealogiePrecise()
+ liste=obj.getGenealogiePrecise()
if obj.etape.nom=='MODIFICATION_CATALOGUE' : return s
nom = obj.etape.nom
-
- if hasattr(obj.etape,'sdnom') and obj.etape.sdnom != None and obj.etape.sdnom != "" :
- nom = nom+ obj.etape.sdnom
+
+ if hasattr(obj.etape,'sdnom') and obj.etape.sdnom != None and obj.etape.sdnom != "" :
+ nom = nom+ obj.etape.sdnom
if not(nom in self.Dico) : dicoCourant={}
else : dicoCourant=self.Dico [nom]
nomFeuille=liste[-1]
if nomFeuille in dicoCourant or nomFeuille in self.DicoDejaLa:
- if nomFeuille in self.DicoDejaLa:
- nomTravail= nomFeuille +'_'+str(self.DicoDejaLa[nomFeuille])
- self.DicoDejaLa[nomFeuille]=self.DicoDejaLa[nomFeuille]+1
- nomFeuille=nomTravail
- else :
- self.DicoDejaLa[nomFeuille]=3
- nom1=nomFeuille +'_1'
- dicoCourant[nom1]= dicoCourant[nomFeuille]
- del dicoCourant[nomFeuille]
- nomFeuille=nomFeuille +'_2'
+ if nomFeuille in self.DicoDejaLa:
+ nomTravail= nomFeuille +'_'+str(self.DicoDejaLa[nomFeuille])
+ self.DicoDejaLa[nomFeuille]=self.DicoDejaLa[nomFeuille]+1
+ nomFeuille=nomTravail
+ else :
+ self.DicoDejaLa[nomFeuille]=3
+ nom1=nomFeuille +'_1'
+ dicoCourant[nom1]= dicoCourant[nomFeuille]
+ del dicoCourant[nomFeuille]
+ nomFeuille=nomFeuille +'_2'
if hasattr(obj.valeur,'nom'): dicoCourant[nomFeuille]=obj.valeur.nom
- else :
- if type(obj.valeur) in (list,tuple):
- try :
+ else :
+ if type(obj.valeur) in (list,tuple):
+ try :
#PNPNPN a remplacer par plus propre
- if obj.definition.validators.typeDesTuples[0] !='R' :
- val=[]
- elt=[]
- for tupleElt in obj.valeur :
- elt=(str(tupleElt[0]),tupleElt[1])
- val.append(elt)
- dicoCourant[nomFeuille]=val
- else :
- dicoCourant[nomFeuille]=obj.valeur
- except :
- dicoCourant[nomFeuille]=obj.valeurFormatee
- #else :dicoCourant[nomFeuille]=obj.valeurFormatee
- else :
- dicoCourant[nomFeuille]=obj.valeurFormatee
- #print nomFeuille, obj.valeurFormatee
+ if obj.definition.validators.typeDesTuples[0] !='R' :
+ val=[]
+ elt=[]
+ for tupleElt in obj.valeur :
+ elt=(str(tupleElt[0]),tupleElt[1])
+ val.append(elt)
+ dicoCourant[nomFeuille]=val
+ else :
+ dicoCourant[nomFeuille]=obj.valeur
+ except :
+ dicoCourant[nomFeuille]=obj.valeurFormatee
+ #else :dicoCourant[nomFeuille]=obj.valeurFormatee
+ else :
+ dicoCourant[nomFeuille]=obj.valeurFormatee
+ #print nomFeuille, obj.valeurFormatee
self.Dico[nom]=dicoCourant
return s
-
-
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient le plugin generateur de fichier au format
+ Ce module contient le plugin generateur de fichier au format
CARMEL3D pour EFICAS.
"""
from __future__ import print_function
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import traceback
from .generator_python import PythonGenerator
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'MAP',
- # La factory pour creer une instance du plugin
- 'factory' : MapGenerator,
- }
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'MAP',
+ # La factory pour creer une instance du plugin
+ 'factory' : MapGenerator,
+ }
class MapGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format py
-
- """
-
- def gener(self,obj,format='brut',config=None,appliEficas=None):
- self.initDico()
- self.text=PythonGenerator.gener(self,obj,format)
- if obj.isValid() :self.genereExeMap()
- return self.text
-
-
- def genereExeMap(self) :
- '''
- Prepare le contenu du fichier de parametres python
- peut ensuite etre obtenu au moyen de la fonction getTubePy().
- '''
- nomSpec="spec_"+self.schema
- self.texteEXE="from map.spec import %s;\n"%nomSpec
- self.texteEXE+="node=%s.new();\n"%nomSpec
- self.texteEXE+="node.getInputData();\n"
- self.texteEXE+="node.setInputData(%s);\n"%self.dictValeur
- self.texteEXE+="node.execute();\n"
- self.texteEXE+="res=node.getOutputData();\n"
-
-
- def initDico(self) :
- if not hasattr(self,'schema') : self.schema=""
- self.dictParam={}
- self.dictValeur={}
-
- def writeDefault(self, fn):
- fileEXE = fn[:fn.rfind(".")] + '.py'
- f = open( str(fileEXE), 'wb')
- f.write( self.texteEXE )
- f.close()
-
- def generMCSIMP(self,obj) :
- """
- Convertit un objet MCSIMP en texte python
- Remplit le dictionnaire des MCSIMP
- """
-
- if obj.getGenealogie()[0][-6:-1]=="_PARA":
- self.dictParam[obj.nom]=obj.valeur
- else :
- self.dictValeur[obj.nom]=obj.valeur
- s=PythonGenerator.generMCSIMP(self,obj)
- return s
-
-
- def generRUN(self,obj,schema):
- if not(obj.isValid()) :
- print ("TODO TODO TODO")
- self.texteEXE=""
- self.schema=schema
- textComm=self.gener(obj)
- return self.texteEXE
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format py
+
+ """
+
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
+ self.initDico()
+ self.text=PythonGenerator.gener(self,obj,format)
+ if obj.isValid() :self.genereExeMap()
+ return self.text
+
+
+ def genereExeMap(self) :
+ '''
+ Prepare le contenu du fichier de parametres python
+ peut ensuite etre obtenu au moyen de la fonction getTubePy().
+ '''
+ nomSpec="spec_"+self.schema
+ self.texteEXE="from map.spec import %s;\n"%nomSpec
+ self.texteEXE+="node=%s.new();\n"%nomSpec
+ self.texteEXE+="node.getInputData();\n"
+ self.texteEXE+="node.setInputData(%s);\n"%self.dictValeur
+ self.texteEXE+="node.execute();\n"
+ self.texteEXE+="res=node.getOutputData();\n"
+
+
+ def initDico(self) :
+ if not hasattr(self,'schema') : self.schema=""
+ self.dictParam={}
+ self.dictValeur={}
+
+ def writeDefault(self, fn):
+ fileEXE = fn[:fn.rfind(".")] + '.py'
+ f = open( str(fileEXE), 'wb')
+ f.write( self.texteEXE )
+ f.close()
+
+ def generMCSIMP(self,obj) :
+ """
+ Convertit un objet MCSIMP en texte python
+ Remplit le dictionnaire des MCSIMP
+ """
+
+ if obj.getGenealogie()[0][-6:-1]=="_PARA":
+ self.dictParam[obj.nom]=obj.valeur
+ else :
+ self.dictValeur[obj.nom]=obj.valeur
+ s=PythonGenerator.generMCSIMP(self,obj)
+ return s
+
+
+ def generRUN(self,obj,schema):
+ if not(obj.isValid()) :
+ print ("TODO TODO TODO")
+ self.texteEXE=""
+ self.schema=schema
+ textComm=self.gener(obj)
+ return self.texteEXE
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient le plugin generateur de fichier au format
+ Ce module contient le plugin generateur de fichier au format
CARMEL3D pour EFICAS.
"""
from __future__ import print_function
from __future__ import absolute_import
try :
- from builtins import str
+ from builtins import str
except : pass
import traceback
from .generator_python import PythonGenerator
listeCalParName = ('Time' , 'Temperature', 'DoseRate', 'Thickness') #'calculation_parameter_names'
-
-
+
+
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'MAPVp',
- # La factory pour creer une instance du plugin
- 'factory' : MapGenerator,
- }
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'MAPVp',
+ # La factory pour creer une instance du plugin
+ 'factory' : MapGenerator,
+ }
class MapGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
- un texte au format py
-
- """
-
- def gener(self,obj,format='brut',config=None,appliEficas=None):
- self.appliEficas=appliEficas
- self.cata=self.appliEficas.readercata.cata
- self.initDico()
- self.text=PythonGenerator.gener(self,obj,format)
- if obj.isValid() :self.genereTexte(obj)
- return self.text
-
- def initDico(self) :
- self.texteInput = ""
- self.dictParam={}
- self.dictValeur={}
- self.listeEquations=[]
- self.typeEtude = ""
-
-
- def genereTexte(self,obj) :
- print ('genereTexte', self.typeEtude)
- if self.typeEtude == "Calculation" : self.genereCalculation()
-
-
- def generPROC_ETAPE(self,obj):
- s=PythonGenerator.generPROC_ETAPE(self,obj)
- if obj.nom == "Calculation_for_Mechanistic" : print ('hjkhjkh');self.typeEtude="Calculation"
- return s
-
- def genereCalculation(self) :
- '''
- Prepare le contenu du fichier de parametres python
- '''
- self.texteInput = ""
- self.texteInput += self.genereCsv()
- self.texteInput += self.genereCalculationParams()
- self.texteInput += self.txtNomCst
- self.texteInput += self.txtVal
- self.texteInput += self.txtValAct
- self.texteInput += self.txtNomCstNA
- self.texteInput += self.txtValNA
- self.texteInput += self.txtInitName
- self.texteInput += self.txtInitVal
- self.texteInput += self.genereEquations()
- print (self.texteInput)
-
- def writeDefault(self, fn):
- # normalement c_solver_polymer_kinetics_myStudy.input ou myStudy est le nom de l etude
- fileInput = fn[:fn.rfind(".")] + '.input'
- f = open( str(fileInput), 'wb')
- f.write( self.texteInput )
- f.close()
-
-
- def genereCalculationParams(self) :
- txtNom = "calculation_parameter_names = [ "
- txtVal = "calculation_parameters = [ "
- for param in ('Time' , 'Temperature', 'DoseRate', 'Thickness') :
- if param in self.dictValeur.keys() :
- txtNom += "'"+param + "', "
- txtVal += str(self.dictValeur[param]) + ", "
- # on enleve les dernieres , et on ferme
- txtNom = txtNom[0:-2]
- txtNom += "]\n"
- txtVal = txtVal[0:-2]
- txtVal += "]\n"
- txt = txtNom + txtVal
- return txt
-
- def genereEquations(self) :
- txt="equation =["
- index=0
- TechnicalUse = self.dictValeur['TechnicalUse']
- ModelName = self.dictValeur['ModelName']
- for param in self.listInitialParameters:
- print ('*******************************************')
- print (' je traite ', param , 'index : ', index)
- trouveParam=False
-
- if index != 0 : txtParam = 'Dy[j*5 + '+str(index)+ '] = '
- else : txtParam = 'Dy[j*5] = '
-
- for equation in self.listeEquations :
- if param in (self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation].keys()):
- print ('____________ trouve : ', param , 'in ', equation, ' ', self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param])
- trouveParam = True
- if self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param][0] == '-' :
- txtParam += ' ' + self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param]
- else :
- if index != 0 :
- txtParam += ' + ' + self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param]
- else :
- txtParam += self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param]
- print (' txtParam intermediaire ', txtParam)
-
- if trouveParam :
- txtParam = txtParam + ", "
- txt += txtParam
- index = index+1
- print (txtParam)
- print ('fin param', param, 'trouve ', trouveParam, '___________________________')
- print ('*************************************************')
- print (' ')
- print ('_________________fin for')
- txt=txt[0:-3]
- txt+="]\n"
- return txt
-
- def genereCsv(self) :
- txt = 'study_name = ' +self.dictValeur['SimulationName'] + "\n"
- txt += 'csv_output_file_name = ' + self.dictValeur['OutPutFolder'] + '/c_solver_stiff_ode_1d_' + self.dictValeur['SimulationName']+ '.csv\n'
- return txt
-
-
- def generMCList(self,obj):
- s=PythonGenerator.generMCList(self,obj)
- if obj.nom == 'ConstantesArrhenius' :
- self.txtNomCst = "Arrhenius_Name = [ "
- self.txtVal = "Arrhenius_A = [ "
- self.txtValAct = "Arrhenius_Ea = [ "
- for objFils in obj.data:
- for mc in objFils.mcListe :
- self.txtNomCst += "'" + mc.nom + "', "
- self.txtVal += str(mc.valeur[0]) + ", "
- self.txtValAct += str(mc.valeur[1]) + ", "
- self.txtNomCst = self.txtNomCst[0:-2]
- self.txtVal = self.txtVal[0:-2]
- self.txtValAct = self.txtValAct [0:-2]
- self.txtNomCst += ']\n'
- self.txtVal += ']\n'
- self.txtValAct += ']\n'
-
- if obj.nom == 'ConstantesNonArrhenius' :
- self.txtNomCstNA = "non_Arrhenius_coefs_names = [ "
- self.txtValNA = "non_Arrhenius_coefs = [ "
- for objFils in obj.data:
- for mc in objFils.mcListe :
- self.txtNomCstNA += "'" + mc.nom + "', "
- self.txtValNA += str(mc.valeur) + ", "
- self.txtNomCstNA = self.txtNomCstNA[0:-2]
- self.txtValNA = self.txtValNA[0:-2]
- self.txtNomCstNA += ']\n'
- self.txtValNA += ']\n'
-
- if obj.nom == 'InitialParameters' :
- self.listInitialParameters =[]
- self.txtInitName = "initial_Value_names = [ "
- self.txtInitVal = "initial_Values = [ "
- for objFils in obj.data:
- for mc in objFils.mcListe :
- self.txtInitName += "'" + mc.nom + "', "
- self.txtInitVal += str(mc.valeur) + ", "
- self.listInitialParameters.append(mc.nom)
- self.txtInitName = self.txtInitName[0:-2]
- self.txtInitVal = self.txtInitVal[0:-2]
- self.txtInitName += ']\n'
- self.txtInitVal += ']\n'
-
- if obj.nom in( 'initiation','propagation','termination','stabilization') :
- for o in obj :
- for mc in o.mcListe :
- nom=mc.nom.replace (' ','').replace ('+','_').replace ('-','_').replace ('>','_').replace('(','').replace(')','').replace('*','').replace('[','').replace(']','')
- nom=obj.nom+'_'+nom
- self.listeEquations.append(nom )
- return s
-
- def generMCSIMP(self,obj) :
- """
- Convertit un objet MCSIMP en texte python
- Remplit le dictionnaire des MCSIMP
- """
- s=PythonGenerator.generMCSIMP(self,obj)
- if obj.nom=='Consigne' : return s
-
- if obj.getGenealogie()[0][-6:-1]=="_PARA":
- self.dictParam[obj.nom]=obj.valeur
- else :
- self.dictValeur[obj.nom]=obj.valeur
- return s
-
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format py
+
+ """
+
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
+ self.appliEficas=appliEficas
+ self.cata=self.appliEficas.readercata.cata
+ self.initDico()
+ self.text=PythonGenerator.gener(self,obj,format)
+ if obj.isValid() :self.genereTexte(obj)
+ return self.text
+
+ def initDico(self) :
+ self.texteInput = ""
+ self.dictParam={}
+ self.dictValeur={}
+ self.listeEquations=[]
+ self.typeEtude = ""
+
+
+ def genereTexte(self,obj) :
+ print ('genereTexte', self.typeEtude)
+ if self.typeEtude == "Calculation" : self.genereCalculation()
+
+
+ def generPROC_ETAPE(self,obj):
+ s=PythonGenerator.generPROC_ETAPE(self,obj)
+ if obj.nom == "Calculation_for_Mechanistic" : print ('hjkhjkh');self.typeEtude="Calculation"
+ return s
+
+ def genereCalculation(self) :
+ '''
+ Prepare le contenu du fichier de parametres python
+ '''
+ self.texteInput = ""
+ self.texteInput += self.genereCsv()
+ self.texteInput += self.genereCalculationParams()
+ self.texteInput += self.txtNomCst
+ self.texteInput += self.txtVal
+ self.texteInput += self.txtValAct
+ self.texteInput += self.txtNomCstNA
+ self.texteInput += self.txtValNA
+ self.texteInput += self.txtInitName
+ self.texteInput += self.txtInitVal
+ self.texteInput += self.genereEquations()
+ print (self.texteInput)
+
+ def writeDefault(self, fn):
+ # normalement c_solver_polymer_kinetics_myStudy.input ou myStudy est le nom de l etude
+ fileInput = fn[:fn.rfind(".")] + '.input'
+ f = open( str(fileInput), 'wb')
+ f.write( self.texteInput )
+ f.close()
+
+
+ def genereCalculationParams(self) :
+ txtNom = "calculation_parameter_names = [ "
+ txtVal = "calculation_parameters = [ "
+ for param in ('Time' , 'Temperature', 'DoseRate', 'Thickness') :
+ if param in self.dictValeur.keys() :
+ txtNom += "'"+param + "', "
+ txtVal += str(self.dictValeur[param]) + ", "
+ # on enleve les dernieres , et on ferme
+ txtNom = txtNom[0:-2]
+ txtNom += "]\n"
+ txtVal = txtVal[0:-2]
+ txtVal += "]\n"
+ txt = txtNom + txtVal
+ return txt
+
+ def genereEquations(self) :
+ txt="equation =["
+ index=0
+ TechnicalUse = self.dictValeur['TechnicalUse']
+ ModelName = self.dictValeur['ModelName']
+ for param in self.listInitialParameters:
+ print ('*******************************************')
+ print (' je traite ', param , 'index : ', index)
+ trouveParam=False
+
+ if index != 0 : txtParam = 'Dy[j*5 + '+str(index)+ '] = '
+ else : txtParam = 'Dy[j*5] = '
+
+ for equation in self.listeEquations :
+ if param in (self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation].keys()):
+ print ('____________ trouve : ', param , 'in ', equation, ' ', self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param])
+ trouveParam = True
+ if self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param][0] == '-' :
+ txtParam += ' ' + self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param]
+ else :
+ if index != 0 :
+ txtParam += ' + ' + self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param]
+ else :
+ txtParam += self.cata.dicoEquations[TechnicalUse][ModelName]['equa_diff'][equation][param]
+ print (' txtParam intermediaire ', txtParam)
+
+ if trouveParam :
+ txtParam = txtParam + ", "
+ txt += txtParam
+ index = index+1
+ print (txtParam)
+ print ('fin param', param, 'trouve ', trouveParam, '___________________________')
+ print ('*************************************************')
+ print (' ')
+ print ('_________________fin for')
+ txt=txt[0:-3]
+ txt+="]\n"
+ return txt
+
+ def genereCsv(self) :
+ txt = 'study_name = ' +self.dictValeur['SimulationName'] + "\n"
+ txt += 'csv_output_file_name = ' + self.dictValeur['OutPutFolder'] + '/c_solver_stiff_ode_1d_' + self.dictValeur['SimulationName']+ '.csv\n'
+ return txt
+
+
+ def generMCList(self,obj):
+ s=PythonGenerator.generMCList(self,obj)
+ if obj.nom == 'ConstantesArrhenius' :
+ self.txtNomCst = "Arrhenius_Name = [ "
+ self.txtVal = "Arrhenius_A = [ "
+ self.txtValAct = "Arrhenius_Ea = [ "
+ for objFils in obj.data:
+ for mc in objFils.mcListe :
+ self.txtNomCst += "'" + mc.nom + "', "
+ self.txtVal += str(mc.valeur[0]) + ", "
+ self.txtValAct += str(mc.valeur[1]) + ", "
+ self.txtNomCst = self.txtNomCst[0:-2]
+ self.txtVal = self.txtVal[0:-2]
+ self.txtValAct = self.txtValAct [0:-2]
+ self.txtNomCst += ']\n'
+ self.txtVal += ']\n'
+ self.txtValAct += ']\n'
+
+ if obj.nom == 'ConstantesNonArrhenius' :
+ self.txtNomCstNA = "non_Arrhenius_coefs_names = [ "
+ self.txtValNA = "non_Arrhenius_coefs = [ "
+ for objFils in obj.data:
+ for mc in objFils.mcListe :
+ self.txtNomCstNA += "'" + mc.nom + "', "
+ self.txtValNA += str(mc.valeur) + ", "
+ self.txtNomCstNA = self.txtNomCstNA[0:-2]
+ self.txtValNA = self.txtValNA[0:-2]
+ self.txtNomCstNA += ']\n'
+ self.txtValNA += ']\n'
+
+ if obj.nom == 'InitialParameters' :
+ self.listInitialParameters =[]
+ self.txtInitName = "initial_Value_names = [ "
+ self.txtInitVal = "initial_Values = [ "
+ for objFils in obj.data:
+ for mc in objFils.mcListe :
+ self.txtInitName += "'" + mc.nom + "', "
+ self.txtInitVal += str(mc.valeur) + ", "
+ self.listInitialParameters.append(mc.nom)
+ self.txtInitName = self.txtInitName[0:-2]
+ self.txtInitVal = self.txtInitVal[0:-2]
+ self.txtInitName += ']\n'
+ self.txtInitVal += ']\n'
+
+ if obj.nom in( 'initiation','propagation','termination','stabilization') :
+ for o in obj :
+ for mc in o.mcListe :
+ nom=mc.nom.replace (' ','').replace ('+','_').replace ('-','_').replace ('>','_').replace('(','').replace(')','').replace('*','').replace('[','').replace(']','')
+ nom=obj.nom+'_'+nom
+ self.listeEquations.append(nom )
+ return s
+
+ def generMCSIMP(self,obj) :
+ """
+ Convertit un objet MCSIMP en texte python
+ Remplit le dictionnaire des MCSIMP
+ """
+ s=PythonGenerator.generMCSIMP(self,obj)
+ if obj.nom=='Consigne' : return s
+
+ if obj.getGenealogie()[0][-6:-1]=="_PARA":
+ self.dictParam[obj.nom]=obj.valeur
+ else :
+ self.dictValeur[obj.nom]=obj.valeur
+ return s
# Modules Python
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import os, sys, types, re
class ModificationGenerator(object):
def generTexteModif(self,obj):
- texteModification=""
- for t in list(obj.editor.dicoNouveauxMC.keys()) :
- # 'ajoutDefinitionMC',etape,listeAvant,nomDuMC,typ,args
- fonction,Etape,Genea,nomSIMP,typeSIMP,arguments = obj.editor.dicoNouveauxMC[t]
- texteModification += "MODIFICATION_CATALOGUE(Fonction = '" + str(fonction)+ "',\n"
- texteModification += " Etape = '" + str(Etape) + "',\n"
- texteModification += " Genea = " + str(Genea) + ",\n"
- texteModification += " NomSIMP = '" + str(nomSIMP) + "',\n"
- texteModification += " TypeSIMP = '" + str(typeSIMP)+ "',\n"
- texteModification += " PhraseArguments = " +'"' + str(arguments)+ '"'+ ",);\n"
-
+ texteModification=""
+ for t in list(obj.editor.dicoNouveauxMC.keys()) :
+ # 'ajoutDefinitionMC',etape,listeAvant,nomDuMC,typ,args
+ fonction,Etape,Genea,nomSIMP,typeSIMP,arguments = obj.editor.dicoNouveauxMC[t]
+ texteModification += "MODIFICATION_CATALOGUE(Fonction = '" + str(fonction)+ "',\n"
+ texteModification += " Etape = '" + str(Etape) + "',\n"
+ texteModification += " Genea = " + str(Genea) + ",\n"
+ texteModification += " NomSIMP = '" + str(nomSIMP) + "',\n"
+ texteModification += " TypeSIMP = '" + str(typeSIMP)+ "',\n"
+ texteModification += " PhraseArguments = " +'"' + str(arguments)+ '"'+ ",);\n"
- return texteModification
+
+ return texteModification
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient le plugin generateur de fichier au format
+ Ce module contient le plugin generateur de fichier au format
python pour EFICAS.
"""
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
- from builtins import range
+ from builtins import str
+ from builtins import object
+ from builtins import range
except : pass
import traceback
import Accas
import Extensions
from Extensions.parametre import ITEM_PARAMETRE
-from .Formatage import Formatage
+from .Formatage import Formatage
from .Formatage import FormatageLigne
from Extensions.param2 import Formula
from Extensions.eficas_exception import EficasException
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'python',
- # La factory pour creer une instance du plugin
- 'factory' : PythonGenerator,
- }
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'python',
+ # La factory pour creer une instance du plugin
+ 'factory' : PythonGenerator,
+ }
class PythonGenerator(object):
- """
- Ce generateur parcourt un objet de type JDC et produit
- un fichier au format python
-
- L'acquisition et le parcours sont realises par la methode
- generator.gener(objet_jdc,format)
-
- L'ecriture du fichier au format ini par appel de la methode
- generator.writefile(nom_fichier)
-
- Ses caracteristiques principales sont exposees dans des attributs
- de classe :
- - extensions : qui donne une liste d'extensions de fichier preconisees
-
- """
- # Les extensions de fichier preconisees
- extensions=('.comm',)
-
- def __init__(self,cr=None):
- # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
- if cr :
- self.cr=cr
- else:
- self.cr=N_CR.CR(debut='CR generateur format python pour python',
- fin='fin CR format python pour python')
- # Le texte au format python est stocke dans l'attribut text
- self.text=''
- self.appliEficas=None
-
- def writefile(self,filename):
- fp=open(filename,'w')
- fp.write(self.text)
- fp.close()
-
- def gener(self,obj,format='brut',config=None,appliEficas=None):
- """
- Retourne une representation du JDC obj sous une
- forme qui est parametree par format.
- Si format vaut 'brut', retourne une liste de listes de ...
- Si format vaut 'standard', retourne un texte obtenu par concatenation de la liste
- Si format vaut 'beautifie', retourne le meme texte beautifie
- """
- import logging
- if obj == None :
- print ('appel a gener avec None')
- return
- self.appliEficas=appliEficas
- liste= self.generator(obj)
- #format='standard'
- if format == 'brut':
- self.text=liste
- elif format == 'standard':
- self.text=''.join(liste)
- elif format == 'beautifie':
- jdc_formate = Formatage(liste,mode='.py')
- #import cProfile, pstats, StringIO
- #pr = cProfile.Profile()
- #pr.enable()
- self.text=jdc_formate.formateJdc()
- #pr.disable()
- #s = StringIO.StringIO()
- #sortby = 'cumulative'
- #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
- #ps.print_stats()
- #print (s.getValue())
-
- elif format == 'Ligne':
- jdc_formate = FormatageLigne(liste,mode='.py')
- self.text=jdc_formate.formateJdc()
- else:
- raise EficasException(tr("Format non implemente ") +format)
- return self.text
-
- def generator(self,obj):
- """
- Cette methode joue un role d'aiguillage en fonction du type de obj
- On pourrait utiliser les methodes accept et visitxxx a la
- place (depend des gouts !!!)
- """
- # ATTENTION a l'ordre des tests : il peut avoir de l'importance (heritage)
- if isinstance(obj,Accas.PROC_ETAPE):
- return self.generPROC_ETAPE(obj)
- # Attention doit etre place avant MACRO (raison : heritage)
- elif isinstance(obj,Accas.FORM_ETAPE):
- return self.generFORM_ETAPE(obj)
- elif isinstance(obj,Accas.MACRO_ETAPE):
- return self.generMACRO_ETAPE(obj)
- elif isinstance(obj,Accas.ETAPE):
- return self.generETAPE(obj)
- elif isinstance(obj,Accas.MCFACT):
- return self.generMCFACT(obj)
- elif isinstance(obj,Accas.MCList):
- return self.generMCList(obj)
- elif isinstance(obj,Accas.MCBLOC):
- return self.generMCBLOC(obj)
- elif isinstance(obj,Accas.MCSIMP):
- return self.generMCSIMP(obj)
- elif isinstance(obj,Accas.ASSD):
- return self.generASSD(obj)
- elif isinstance(obj,Accas.ETAPE_NIVEAU):
- return self.generETAPE_NIVEAU(obj)
- elif isinstance(obj,Accas.COMMENTAIRE):
- return self.generCOMMENTAIRE(obj)
- # Attention doit etre place avant PARAMETRE (raison : heritage)
- elif isinstance(obj,Accas.PARAMETRE_EVAL):
- return self.generPARAMETRE_EVAL(obj)
- elif isinstance(obj,Accas.PARAMETRE):
- return self.generPARAMETRE(obj)
- elif isinstance(obj,Accas.EVAL):
- return self.generEVAL(obj)
- elif isinstance(obj,Accas.COMMANDE_COMM):
- return self.generCOMMANDE_COMM(obj)
- elif isinstance(obj,Accas.JDC):
- return self.generJDC(obj)
- elif isinstance(obj,Accas.MCNUPLET):
- return self.generMCNUPLET(obj)
- elif isinstance(obj,ITEM_PARAMETRE):
- return self.generITEM_PARAMETRE(obj)
- elif isinstance(obj,Formula):
- return self.generFormula(obj)
- else:
- raise EficasException(tr("Type d'objet non prevu") +obj)
-
- def generJDC(self,obj):
- """
- Cette methode convertit un objet JDC en une liste de chaines de
- caracteres a la syntaxe python
- """
- l=[]
-
- #print ('generJDC', obj.sdsDict)
- for objRef in obj.sdsDict :
- if (isinstance(obj.sdsDict[objRef],Accas.UserASSD)):
- l.append(self.generUserASSD(obj.sdsDict[objRef]))
- if obj.definition.l_niveaux == ():
- # Il n'y a pas de niveaux
- for etape in obj.etapes:
- l.append(self.generator(etape))
- else:
- # Il y a des niveaux
- for etape_niveau in obj.etapes_niveaux:
- l.extend(self.generator(etape_niveau))
- if l != [] :
- # Si au moins une etape, on ajoute le retour chariot sur la derniere etape
- if type(l[-1])==list:
- l[-1][-1] = l[-1][-1]+'\n'
- elif type(l[-1])==bytes or type(l[-1])==str:
- l[-1] = l[-1]+'\n'
- return l
-
- def generUserASSD(self,obj):
- classeName = obj.__class__.__name__
- if obj.valeur == None :
- texte = obj.nom + '=' + classeName + '()'
- return texte
-
- def generMCNUPLET(self,obj):
- """
- Methode generant une representation de self permettant son ecriture
- dans le format python
- """
- l=[]
- l.append('(')
- for v in obj.mcListe:
- text = re.sub(".*=","",self.generator(v))
- l.append(text)
- l.append('),')
- return l
-
- def generCOMMANDE_COMM(self,obj):
- """
- Cette methode convertit un COMMANDE_COMM
- en une liste de chaines de caracteres a la syntaxe python
- """
- l_lignes = obj.valeur.split('\n')
- txt=''
- for ligne in l_lignes:
- txt = txt + '##'+ligne+'\n'
- return txt
-
- def generEVAL(self,obj):
- """
- Cette methode convertit un EVAL
- en une liste de chaines de caracteres a la syntaxe python
- """
- return 'EVAL("""'+ obj.valeur +'""")'
-
- def generCOMMENTAIRE(self,obj):
- """
- Cette methode convertit un COMMENTAIRE
- en une liste de chaines de caracteres a la syntaxe python
- """
- # modification pour repondre a la demande de C. Durand, d'eviter
- # l'ajout systematique d'un diese, a la suite du commentaire
- # Dans la chaine de caracteres obj.valeur, on supprime le dernier
- # saut de ligne
- sans_saut = re.sub("\n$","",obj.valeur)
- l_lignes = sans_saut.split('\n')
- txt=''
- i=1
- for ligne in l_lignes:
- txt = txt + '#'+ligne+'\n'
-
- # suppression du dernier saut de ligne
- #txt = re.sub("\n$","",txt)
- # on ajoute un saut de ligne avant
- pattern=re.compile(" ?\#")
- m=pattern.match(txt)
- if m:
- txt="\n"+txt
- return txt
-
- def generPARAMETRE_EVAL(self,obj):
- """
- Cette methode convertit un PARAMETRE_EVAL
- en une liste de chaines de caracteres a la syntaxe python
- """
- if obj.valeur == None:
- return obj.nom + ' = None ;\n'
- else:
- return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
-
- def generITEM_PARAMETRE(self,obj):
- return repr(obj)
-
- def generFormula(self,obj):
- #return repr(obj)
- return str(obj)
-
- def generPARAMETRE(self,obj):
- """
- Cette methode convertit un PARAMETRE
- en une liste de chaines de caracteres a la syntaxe python
- """
- return repr(obj) + ";\n"
-
- def generETAPE_NIVEAU(self,obj):
- """
- Cette methode convertit une etape niveau
- en une liste de chaines de caracteres a la syntaxe python
- """
- l=[]
- if obj.etapes_niveaux == []:
- for etape in obj.etapes:
- l.append(self.generator(etape))
- else:
- for etape_niveau in obj.etapes_niveaux:
- l.extend(self.generator(etape_niveau))
- return l
-
- def generETAPE(self,obj):
- """
- Cette methode convertit une etape
- en une liste de chaines de caracteres a la syntaxe python
- """
- try:
- sdname= self.generator(obj.sd)
- if sdname.find('SD_') != -1: sdname='sansnom'
- except:
- sdname='sansnom'
- l=[]
- label=sdname + '='+obj.definition.nom+'('
- l.append(label)
- if obj.reuse != None :
- str = 'reuse ='+ self.generator(obj.reuse) + ','
- l.append(str)
- for v in obj.mcListe:
- if isinstance(v,Accas.MCBLOC) :
- liste=self.generator(v)
- for mocle in liste :
- l.append(mocle)
- elif isinstance(v,Accas.MCSIMP) :
- text=self.generator(v)
- l.append(v.nom+'='+text)
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un fichier au format python
+
+ L'acquisition et le parcours sont realises par la methode
+ generator.gener(objet_jdc,format)
+
+ L'ecriture du fichier au format ini par appel de la methode
+ generator.writeFile(nom_fichier)
+
+ Ses caracteristiques principales sont exposees dans des attributs
+ de classe :
+ - extensions : qui donne une liste d'extensions de fichier preconisees
+
+ """
+ # Les extensions de fichier preconisees
+ extensions=('.comm',)
+
+ def __init__(self,cr=None):
+ # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+ if cr :
+ self.cr=cr
else:
- # MCFACT ou MCList
- liste=self.generator(v)
- liste[0]=v.nom+'='+liste[0]
- l.append(liste)
- if len(l) == 1:
- l[0]=label+');'
- else :
- l.append(');')
- return l
+ self.cr=N_CR.CR(debut='CR generateur format python pour python',
+ fin='fin CR format python pour python')
+ # Le texte au format python est stocke dans l'attribut text
+ self.text=''
+ self.appliEficas=None
+
+ def writeFile(self,filename):
+ fp=open(filename,'w')
+ fp.write(self.text)
+ fp.close()
+
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
+ """
+ Retourne une representation du JDC obj sous une
+ forme qui est parametree par format.
+ Si format vaut 'brut', retourne une liste de listes de ...
+ Si format vaut 'standard', retourne un texte obtenu par concatenation de la liste
+ Si format vaut 'beautifie', retourne le meme texte beautifie
+ """
+ import logging
+ if obj == None :
+ print ('appel a gener avec None')
+ return
+ self.appliEficas=appliEficas
+ liste= self.generator(obj)
+ #format='standard'
+ if format == 'brut':
+ self.text=liste
+ elif format == 'standard':
+ self.text=''.join(liste)
+ elif format == 'beautifie':
+ jdc_formate = Formatage(liste,mode='.py')
+ #import cProfile, pstats, StringIO
+ #pr = cProfile.Profile()
+ #pr.enable()
+ self.text=jdc_formate.formateJdc()
+ #pr.disable()
+ #s = StringIO.StringIO()
+ #sortby = 'cumulative'
+ #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
+ #ps.print_stats()
+ #print (s.getValue())
+
+ elif format == 'Ligne':
+ jdc_formate = FormatageLigne(liste,mode='.py')
+ self.text=jdc_formate.formateJdc()
+ else:
+ raise EficasException(tr("Format non implemente ") +format)
+ return self.text
+
+ def generator(self,obj):
+ """
+ Cette methode joue un role d'aiguillage en fonction du type de obj
+ On pourrait utiliser les methodes accept et visitxxx a la
+ place (depend des gouts !!!)
+ """
+ # ATTENTION a l'ordre des tests : il peut avoir de l'importance (heritage)
+ if isinstance(obj,Accas.PROC_ETAPE):
+ return self.generPROC_ETAPE(obj)
+ # Attention doit etre place avant MACRO (raison : heritage)
+ elif isinstance(obj,Accas.FORM_ETAPE):
+ return self.generFORM_ETAPE(obj)
+ elif isinstance(obj,Accas.MACRO_ETAPE):
+ return self.generMACRO_ETAPE(obj)
+ elif isinstance(obj,Accas.ETAPE):
+ return self.generETAPE(obj)
+ elif isinstance(obj,Accas.MCFACT):
+ return self.generMCFACT(obj)
+ elif isinstance(obj,Accas.MCList):
+ return self.generMCList(obj)
+ elif isinstance(obj,Accas.MCBLOC):
+ return self.generMCBLOC(obj)
+ elif isinstance(obj,Accas.MCSIMP):
+ return self.generMCSIMP(obj)
+ elif isinstance(obj,Accas.ASSD):
+ return self.generASSD(obj)
+ elif isinstance(obj,Accas.ETAPE_NIVEAU):
+ return self.generETAPE_NIVEAU(obj)
+ elif isinstance(obj,Accas.COMMENTAIRE):
+ return self.generCOMMENTAIRE(obj)
+ # Attention doit etre place avant PARAMETRE (raison : heritage)
+ elif isinstance(obj,Accas.PARAMETRE_EVAL):
+ return self.generPARAMETRE_EVAL(obj)
+ elif isinstance(obj,Accas.PARAMETRE):
+ return self.generPARAMETRE(obj)
+ elif isinstance(obj,Accas.EVAL):
+ return self.generEVAL(obj)
+ elif isinstance(obj,Accas.COMMANDE_COMM):
+ return self.generCOMMANDE_COMM(obj)
+ elif isinstance(obj,Accas.JDC):
+ return self.generJDC(obj)
+ elif isinstance(obj,Accas.MCNUPLET):
+ return self.generMCNUPLET(obj)
+ elif isinstance(obj,ITEM_PARAMETRE):
+ return self.generITEM_PARAMETRE(obj)
+ elif isinstance(obj,Formula):
+ return self.generFormula(obj)
+ else:
+ raise EficasException(tr("Type d'objet non prevu") +obj)
+
+ def generJDC(self,obj):
+ """
+ Cette methode convertit un objet JDC en une liste de chaines de
+ caracteres a la syntaxe python
+ """
+ l=[]
+
+ #print ('generJDC', obj.sdsDict)
+ for objRef in obj.sdsDict :
+ if (isinstance(obj.sdsDict[objRef],Accas.UserASSD)):
+ l.append(self.generUserASSD(obj.sdsDict[objRef]))
+ if obj.definition.l_niveaux == ():
+ # Il n'y a pas de niveaux
+ for etape in obj.etapes:
+ l.append(self.generator(etape))
+ else:
+ # Il y a des niveaux
+ for etape_niveau in obj.etapes_niveaux:
+ l.extend(self.generator(etape_niveau))
+ if l != [] :
+ # Si au moins une etape, on ajoute le retour chariot sur la derniere etape
+ if type(l[-1])==list:
+ l[-1][-1] = l[-1][-1]+'\n'
+ elif type(l[-1])==bytes or type(l[-1])==str:
+ l[-1] = l[-1]+'\n'
+ return l
+
+ def generUserASSD(self,obj):
+ classeName = obj.__class__.__name__
+ if obj.valeur == None :
+ texte = obj.nom + '=' + classeName + '()'
+ return texte
+
+ def generMCNUPLET(self,obj):
+ """
+ Methode generant une representation de self permettant son ecriture
+ dans le format python
+ """
+ l=[]
+ l.append('(')
+ for v in obj.mcListe:
+ text = re.sub(".*=","",self.generator(v))
+ l.append(text)
+ l.append('),')
+ return l
+
+ def generCOMMANDE_COMM(self,obj):
+ """
+ Cette methode convertit un COMMANDE_COMM
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ l_lignes = obj.valeur.split('\n')
+ txt=''
+ for ligne in l_lignes:
+ txt = txt + '##'+ligne+'\n'
+ return txt
+
+ def generEVAL(self,obj):
+ """
+ Cette methode convertit un EVAL
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ return 'EVAL("""'+ obj.valeur +'""")'
+
+ def generCOMMENTAIRE(self,obj):
+ """
+ Cette methode convertit un COMMENTAIRE
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ # modification pour repondre a la demande de C. Durand, d'eviter
+ # l'ajout systematique d'un diese, a la suite du commentaire
+ # Dans la chaine de caracteres obj.valeur, on supprime le dernier
+ # saut de ligne
+ sans_saut = re.sub("\n$","",obj.valeur)
+ l_lignes = sans_saut.split('\n')
+ txt=''
+ i=1
+ for ligne in l_lignes:
+ txt = txt + '#'+ligne+'\n'
+
+ # suppression du dernier saut de ligne
+ #txt = re.sub("\n$","",txt)
+ # on ajoute un saut de ligne avant
+ pattern=re.compile(" ?\#")
+ m=pattern.match(txt)
+ if m:
+ txt="\n"+txt
+ return txt
+
+ def generPARAMETRE_EVAL(self,obj):
+ """
+ Cette methode convertit un PARAMETRE_EVAL
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ if obj.valeur == None:
+ return obj.nom + ' = None ;\n'
+ else:
+ return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
+
+ def generITEM_PARAMETRE(self,obj):
+ return repr(obj)
+
+ def generFormula(self,obj):
+ #return repr(obj)
+ return str(obj)
+
+ def generPARAMETRE(self,obj):
+ """
+ Cette methode convertit un PARAMETRE
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ return repr(obj) + ";\n"
+
+ def generETAPE_NIVEAU(self,obj):
+ """
+ Cette methode convertit une etape niveau
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ l=[]
+ if obj.etapes_niveaux == []:
+ for etape in obj.etapes:
+ l.append(self.generator(etape))
+ else:
+ for etape_niveau in obj.etapes_niveaux:
+ l.extend(self.generator(etape_niveau))
+ return l
+
+ def generETAPE(self,obj):
+ """
+ Cette methode convertit une etape
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ try:
+ sdname= self.generator(obj.sd)
+ if sdname.find('SD_') != -1: sdname='sansnom'
+ except:
+ sdname='sansnom'
+ l=[]
+ label=sdname + '='+obj.definition.nom+'('
+ l.append(label)
+ if obj.reuse != None :
+ str = 'reuse ='+ self.generator(obj.reuse) + ','
+ l.append(str)
+ for v in obj.mcListe:
+ if isinstance(v,Accas.MCBLOC) :
+ liste=self.generator(v)
+ for mocle in liste :
+ l.append(mocle)
+ elif isinstance(v,Accas.MCSIMP) :
+ text=self.generator(v)
+ l.append(v.nom+'='+text)
+ else:
+ # MCFACT ou MCList
+ liste=self.generator(v)
+ liste[0]=v.nom+'='+liste[0]
+ l.append(liste)
+ if len(l) == 1:
+ l[0]=label+');'
+ else :
+ l.append(');')
+ return l
- def generFORM_ETAPE(self,obj):
+ def generFORM_ETAPE(self,obj):
"""
Methode particuliere pour les objets de type FORMULE
"""
l.append(');')
return l
- def generMACRO_ETAPE(self,obj):
- """
- Cette methode convertit une macro-etape
- en une liste de chaines de caracteres a la syntaxe python
- """
- try:
- if obj.sd == None:
- sdname=''
- else:
- sdname= self.generator(obj.sd)+'='
- if sdname.find('SD_') != -1: sdname=''
- except:
- sdname='sansnom='
- l=[]
- label = sdname + obj.definition.nom+'('
- l.append(label)
- if obj.reuse != None:
- # XXX faut il la virgule ou pas ????
- str = "reuse =" + self.generator(obj.reuse) + ','
- l.append(str)
- for v in obj.mcListe:
- if isinstance(v,Accas.MCBLOC) :
- liste=self.generator(v)
- for mocle in liste :
- l.append(mocle)
- elif isinstance(v,Accas.MCSIMP) :
- text=self.generator(v)
- l.append(v.nom+'='+text)
- else:
- # MCFACT ou MCList
- liste=self.generator(v)
- liste[0]=v.nom+'='+liste[0]
- l.append(liste)
-
- if len(l) == 1:
- l[0]=label+');'
- else :
- l.append(');')
- return l
-
- def generPROC_ETAPE(self,obj):
- """
- Cette methode convertit une PROC etape
- en une liste de chaines de caracteres a la syntaxe python
- """
- l=[]
- label=obj.definition.nom+'('
- l.append(label)
- for v in obj.mcListe:
- if isinstance(v,Accas.MCBLOC) :
- liste=self.generator(v)
- for mocle in liste :
- l.append(mocle)
- elif isinstance(v,Accas.MCSIMP) :
- text=self.generator(v)
- if text==None : text= ""
- l.append(v.nom+'='+text)
- else:
- # MCFACT ou MCList
- liste=self.generator(v)
- liste[0]=v.nom+'='+liste[0]
- l.append(liste)
-
- if len(l) == 1:
- l[0]=label+');'
- else :
- l.append(');')
- return l
-
- def generASSD(self,obj):
- """
- Convertit un objet derive d'ASSD en une chaine de caracteres a la
- syntaxe python
- """
- return obj.getName()
-
-
- def generMCFACT(self,obj):
- """
- Convertit un objet MCFACT en une liste de chaines de caracteres a la
- syntaxe python
- """
- l=[]
- l.append('_F(')
- for v in obj.mcListe:
- if not isinstance(v,Accas.MCSIMP) and not isinstance (v,Accas.MCBLOC) :
- # on est en presence d'une entite composee : on recupere une liste
- liste=self.generator(v)
- liste[0]=v.nom+'='+liste[0]
- l.append(liste)
- elif isinstance(v,Accas.MCBLOC):
- liste=self.generator(v)
- for arg in liste :
- l.append(arg)
- else:
- # on est en presence d'un MCSIMP : on recupere une string
- text =self.generator(v)
- if text== None : text =""
- if v.nom != "Consigne" : l.append(v.nom+'='+text)
- # il faut etre plus subtil dans l'ajout de la virgule en differenciant
- # le cas ou elle est obligatoire (si self a des freres cadets
- # dans self.parent) ou non
- # (cas ou self est seul ou le benjamin de self.parent)
- l.append('),')
- return l
-
- def generMCList(self,obj):
- """
- Convertit un objet MCList en une liste de chaines de caracteres a la
- syntaxe python
- """
- if len(obj.data) > 1:
- l=['(']
- for mcfact in obj.data: l.append(self.generator(mcfact))
- l.append('),')
- else:
- l= self.generator(obj.data[0])
- return l
-
- def generMCBLOC(self,obj):
- """
- Convertit un objet MCBLOC en une liste de chaines de caracteres a la
- syntaxe python
- """
- l=[]
- for v in obj.mcListe:
- if isinstance(v,Accas.MCBLOC) :
- liste=self.generator(v)
- for mocle in liste :
- l.append(mocle)
- elif isinstance(v,Accas.MCFACT):
- liste=self.generator(v)
- elif isinstance(v,Accas.MCList):
- liste=self.generator(v)
- liste[0]=v.nom+'='+liste[0]
- # PN essai de correction bug identation
- if (hasattr(v,'data')) :
- if (isinstance(v.data[0],Accas.MCFACT) and (len(v.data) == 1)):
- l.append(liste)
+ def generMACRO_ETAPE(self,obj):
+ """
+ Cette methode convertit une macro-etape
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ try:
+ if obj.sd == None:
+ sdname=''
+ else:
+ sdname= self.generator(obj.sd)+'='
+ if sdname.find('SD_') != -1: sdname=''
+ except:
+ sdname='sansnom='
+ l=[]
+ label = sdname + obj.definition.nom+'('
+ l.append(label)
+ if obj.reuse != None:
+ # XXX faut il la virgule ou pas ????
+ str = "reuse =" + self.generator(obj.reuse) + ','
+ l.append(str)
+ for v in obj.mcListe:
+ if isinstance(v,Accas.MCBLOC) :
+ liste=self.generator(v)
+ for mocle in liste :
+ l.append(mocle)
+ elif isinstance(v,Accas.MCSIMP) :
+ text=self.generator(v)
+ l.append(v.nom+'='+text)
else:
- for mocle in liste :
- l.append(mocle)
- else :
- for mocle in liste :
- l.append(mocle)
+ # MCFACT ou MCList
+ liste=self.generator(v)
+ liste[0]=v.nom+'='+liste[0]
+ l.append(liste)
+
+ if len(l) == 1:
+ l[0]=label+');'
+ else :
+ l.append(');')
+ return l
+
+ def generPROC_ETAPE(self,obj):
+ """
+ Cette methode convertit une PROC etape
+ en une liste de chaines de caracteres a la syntaxe python
+ """
+ l=[]
+ label=obj.definition.nom+'('
+ l.append(label)
+ for v in obj.mcListe:
+ if isinstance(v,Accas.MCBLOC) :
+ liste=self.generator(v)
+ for mocle in liste :
+ l.append(mocle)
+ elif isinstance(v,Accas.MCSIMP) :
+ text=self.generator(v)
+ if text==None : text= ""
+ l.append(v.nom+'='+text)
+ else:
+ # MCFACT ou MCList
+ liste=self.generator(v)
+ liste[0]=v.nom+'='+liste[0]
+ l.append(liste)
+
+ if len(l) == 1:
+ l[0]=label+');'
+ else :
+ l.append(');')
+ return l
+
+ def generASSD(self,obj):
+ """
+ Convertit un objet derive d'ASSD en une chaine de caracteres a la
+ syntaxe python
+ """
+ return obj.getName()
+
+
+ def generMCFACT(self,obj):
+ """
+ Convertit un objet MCFACT en une liste de chaines de caracteres a la
+ syntaxe python
+ """
+ l=[]
+ l.append('_F(')
+ for v in obj.mcListe:
+ if not isinstance(v,Accas.MCSIMP) and not isinstance (v,Accas.MCBLOC) :
+ # on est en presence d'une entite composee : on recupere une liste
+ liste=self.generator(v)
+ liste[0]=v.nom+'='+liste[0]
+ l.append(liste)
+ elif isinstance(v,Accas.MCBLOC):
+ liste=self.generator(v)
+ for arg in liste :
+ l.append(arg)
+ else:
+ # on est en presence d'un MCSIMP : on recupere une string
+ text =self.generator(v)
+ if text== None : text =""
+ if v.nom != "Consigne" : l.append(v.nom+'='+text)
+ # il faut etre plus subtil dans l'ajout de la virgule en differenciant
+ # le cas ou elle est obligatoire (si self a des freres cadets
+ # dans self.parent) ou non
+ # (cas ou self est seul ou le benjamin de self.parent)
+ l.append('),')
+ return l
+
+ def generMCList(self,obj):
+ """
+ Convertit un objet MCList en une liste de chaines de caracteres a la
+ syntaxe python
+ """
+ if len(obj.data) > 1:
+ l=['(']
+ for mcfact in obj.data: l.append(self.generator(mcfact))
+ l.append('),')
else:
- data=self.generator(v)
- if data==None : data= ""
- if type(data) == list:
- data[0]=v.nom+'='+data[0]
- else:
- data=v.nom+'='+data
- l.append(data)
- return l
-
-
- def formatItem(self,valeur,etape,obj,vientDeListe=0):
- if (type(valeur) == float or 'R' in obj.definition.type) and not(isinstance(valeur,Accas.PARAMETRE)) :
- # Pour un flottant on utilise str ou repr si on vient d une liste
- # ou la notation scientifique
- # On ajoute un . si il n y en a pas dans la valeur
- s = str(valeur)
- if vientDeListe and repr(valeur) != str(valeur) : s=repr(valeur)
- if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.0'
- clefobj=etape.getSdname()
- if self.appliEficas and clefobj in self.appliEficas.dict_reels:
- if valeur in self.appliEficas.dict_reels[clefobj]:
- s=self.appliEficas.dict_reels[clefobj][valeur]
-
- elif type(valeur) == bytes or type(valeur) == str :
- if valeur.find('\n') == -1:
- # pas de retour chariot, on utilise repr
- s = repr(valeur)
- elif valeur.find('"""') == -1:
- # retour chariot mais pas de triple ", on formatte
- s='"""'+valeur+'"""'
- else:
- s = repr(valeur)
- elif isinstance(valeur,Accas.CO) or hasattr(etape,'sdprods') and valeur in etape.sdprods:
- s = "CO('"+ self.generator(valeur) +"')"
- elif isinstance(valeur,Accas.UserASSD):
- # ici on ne prend que la reference
- s = valeur.nom
- elif isinstance(valeur,Accas.ASSD):
- s = self.generator(valeur)
- elif isinstance(valeur,Accas.PARAMETRE):
- # il ne faut pas prendre la string que retourne gener
- # mais seulement le nom dans le cas d'un parametre
- s = valeur.nom
-
- #elif type(valeur) == types.InstanceType or isinstance(valeur,object):
- # if valeur.__class__.__name__ == 'CO' or hasattr(etape,'sdprods') and valeur in etape.sdprods :
- # s = "CO('"+ self.generator(valeur) +"')"
- # elif isinstance(valeur,Accas.PARAMETRE):
+ l= self.generator(obj.data[0])
+ return l
+
+ def generMCBLOC(self,obj):
+ """
+ Convertit un objet MCBLOC en une liste de chaines de caracteres a la
+ syntaxe python
+ """
+ l=[]
+ for v in obj.mcListe:
+ if isinstance(v,Accas.MCBLOC) :
+ liste=self.generator(v)
+ for mocle in liste :
+ l.append(mocle)
+ elif isinstance(v,Accas.MCFACT):
+ liste=self.generator(v)
+ elif isinstance(v,Accas.MCList):
+ liste=self.generator(v)
+ liste[0]=v.nom+'='+liste[0]
+ # PN essai de correction bug identation
+ if (hasattr(v,'data')) :
+ if (isinstance(v.data[0],Accas.MCFACT) and (len(v.data) == 1)):
+ l.append(liste)
+ else:
+ for mocle in liste :
+ l.append(mocle)
+ else :
+ for mocle in liste :
+ l.append(mocle)
+ else:
+ data=self.generator(v)
+ if data==None : data= ""
+ if type(data) == list:
+ data[0]=v.nom+'='+data[0]
+ else:
+ data=v.nom+'='+data
+ l.append(data)
+ return l
+
+
+ def formatItem(self,valeur,etape,obj,vientDeListe=0):
+ if (type(valeur) == float or 'R' in obj.definition.type) and not(isinstance(valeur,Accas.PARAMETRE)) :
+ # Pour un flottant on utilise str ou repr si on vient d une liste
+ # ou la notation scientifique
+ # On ajoute un . si il n y en a pas dans la valeur
+ s = str(valeur)
+ if vientDeListe and repr(valeur) != str(valeur) : s=repr(valeur)
+ if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.0'
+ clefobj=etape.getSdname()
+ if self.appliEficas and clefobj in self.appliEficas.dict_reels:
+ if valeur in self.appliEficas.dict_reels[clefobj]:
+ s=self.appliEficas.dict_reels[clefobj][valeur]
+
+ elif type(valeur) == bytes or type(valeur) == str :
+ if valeur.find('\n') == -1:
+ # pas de retour chariot, on utilise repr
+ s = repr(valeur)
+ elif valeur.find('"""') == -1:
+ # retour chariot mais pas de triple ", on formatte
+ s='"""'+valeur+'"""'
+ else:
+ s = repr(valeur)
+ elif isinstance(valeur,Accas.CO) or hasattr(etape,'sdprods') and valeur in etape.sdprods:
+ s = "CO('"+ self.generator(valeur) +"')"
+ elif isinstance(valeur,Accas.UserASSD):
+ # ici on ne prend que la reference
+ s = valeur.nom
+ elif isinstance(valeur,Accas.ASSD):
+ s = self.generator(valeur)
+ elif isinstance(valeur,Accas.PARAMETRE):
# il ne faut pas prendre la string que retourne gener
# mais seulement le nom dans le cas d'un parametre
- # s = valeur.nom
- # else:
- # s = self.generator(valeur)
-
- else :
- # Pour les autres types on utilise repr
- s = repr(valeur)
- return s
-
- def generMCSIMP(self,obj) :
- """
- Convertit un objet MCSIMP en une liste de chaines de caracteres a la
- syntaxe python
- """
- waitTuple=0
- if type(obj.valeur) in (tuple,list) :
- s = ''
- for ss_type in obj.definition.type:
- if repr(ss_type).find('Tuple') != -1 :
- waitTuple=1
- break
-
- if waitTuple :
- #s = str(obj.valeur) +','
- #obj.valeurFormatee=obj.valeur
- s = obj.getText() +','
- obj.valeurFormatee=obj.getText()
- else :
- obj.valeurFormatee=[]
- for val in obj.valeur :
- s =s +self.formatItem(val,obj.etape,obj,1) + ','
- if obj.waitTxm() :
- obj.valeurFormatee.append(val)
- else :
- obj.valeurFormatee.append(self.formatItem(val,obj.etape,obj))
- if len(obj.valeur) >= 1:
- s = '(' + s + '),'
- if obj.valeur==[] or obj.valeur==() : s="(),"
- if obj.nbrColonnes() :
- s=self.formatColonnes(obj.nbrColonnes(),obj.valeur,obj)
- else :
- obj.valeurFormatee=obj.valeur
- s=self.formatItem(obj.valeur,obj.etape,obj) + ','
- return s
-
-
- def formatColonnes(self,nbrColonnes,listeValeurs,obj):
- try :
- #if 1 == 1 :
- indice=0
- textformat="("
- while ( indice < len(listeValeurs) ) :
- try :
- #if 1 :
- for l in range(nbrColonnes) :
- texteVariable=self.formatItem(listeValeurs[indice],obj.etape,obj)
- textformat=textformat+texteVariable+" ,"
- indice=indice+1
- textformat=textformat+"\n"
- except :
- #else :
+ s = valeur.nom
+
+ #elif type(valeur) == types.InstanceType or isinstance(valeur,object):
+ # if valeur.__class__.__name__ == 'CO' or hasattr(etape,'sdprods') and valeur in etape.sdprods :
+ # s = "CO('"+ self.generator(valeur) +"')"
+ # elif isinstance(valeur,Accas.PARAMETRE):
+ # il ne faut pas prendre la string que retourne gener
+ # mais seulement le nom dans le cas d'un parametre
+ # s = valeur.nom
+ # else:
+ # s = self.generator(valeur)
+
+ else :
+ # Pour les autres types on utilise repr
+ s = repr(valeur)
+ return s
+
+ def generMCSIMP(self,obj) :
+ """
+ Convertit un objet MCSIMP en une liste de chaines de caracteres a la
+ syntaxe python
+ """
+ waitTuple=0
+ if type(obj.valeur) in (tuple,list) :
+ s = ''
+ for ss_type in obj.definition.type:
+ if repr(ss_type).find('Tuple') != -1 :
+ waitTuple=1
+ break
+
+ if waitTuple :
+ #s = str(obj.valeur) +','
+ #obj.valeurFormatee=obj.valeur
+ s = obj.getText() +','
+ obj.valeurFormatee=obj.getText()
+ else :
+ obj.valeurFormatee=[]
+ for val in obj.valeur :
+ s =s +self.formatItem(val,obj.etape,obj,1) + ','
+ if obj.waitTxm() :
+ obj.valeurFormatee.append(val)
+ else :
+ obj.valeurFormatee.append(self.formatItem(val,obj.etape,obj))
+ if len(obj.valeur) >= 1:
+ s = '(' + s + '),'
+ if obj.valeur==[] or obj.valeur==() : s="(),"
+ if obj.nbrColonnes() :
+ s=self.formatColonnes(obj.nbrColonnes(),obj.valeur,obj)
+ else :
+ obj.valeurFormatee=obj.valeur
+ s=self.formatItem(obj.valeur,obj.etape,obj) + ','
+ return s
+
+
+ def formatColonnes(self,nbrColonnes,listeValeurs,obj):
+ try :
+ #if 1 == 1 :
+ indice=0
+ textformat="("
while ( indice < len(listeValeurs) ) :
- texteVariable=self.formatItem(listeValeurs[indice],obj.etape,obj)
- textformat=textformat+texteVariable+", "
- indice=indice+1
- textformat=textformat+"\n"
- textformat=textformat[0:-1]+"),\n"
- except :
- #else :
- textformat=str(obj.valeur)
- return textformat
+ try :
+ #if 1 :
+ for l in range(nbrColonnes) :
+ texteVariable=self.formatItem(listeValeurs[indice],obj.etape,obj)
+ textformat=textformat+texteVariable+" ,"
+ indice=indice+1
+ textformat=textformat+"\n"
+ except :
+ #else :
+ while ( indice < len(listeValeurs) ) :
+ texteVariable=self.formatItem(listeValeurs[indice],obj.etape,obj)
+ textformat=textformat+texteVariable+", "
+ indice=indice+1
+ textformat=textformat+"\n"
+ textformat=textformat[0:-1]+"),\n"
+ except :
+ #else :
+ textformat=str(obj.valeur)
+ return textformat
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient le plugin generateur de fichier au format
+ Ce module contient le plugin generateur de fichier au format
python pour EFICAS.
PN
from __future__ import print_function
from __future__ import division
try :
- from builtins import range
+ from builtins import range
except :
- pass
+ pass
import traceback
import types,re
import math
#from Editeur.widgets import showerror
def entryPoint():
- """
- Retourne les informations necessaires pour le chargeur de plugins
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournees dans un dictionnaire
- """
- return {
- # Le nom du plugin
- 'name' : 'vers3DSalome',
- # La factory pour creer une instance du plugin
- 'factory' : vers3DSalomeGenerator,
- }
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'vers3DSalome',
+ # La factory pour creer une instance du plugin
+ 'factory' : vers3DSalomeGenerator,
+ }
class vers3DSalomeGenerator(PythonGenerator):
- """
- Ce generateur parcourt un objet AFFE-CARA_ELEM
- et produit un fichier au format texte contenant
- les instructions idl pour PAL
- """
-
- def __init__(self,cr=None):
- self.list_commandes=[];
- self.jdc=None
- self.node=None
- self.clefs=None
- self.liste_motetat = ("AFFE_CARA_ELEM", "ORIG_AXE", "AXE" ,
- "BARRE", "CABLE", "CARA", "COQUE", "EPAIS",
- "EXCENTREMENT", "GROUP_MA", "ORIENTATION",
- "POUTRE", "SECTION", "VALE", "VARI_SECT",
- "GRILLE", "ANGL_REP", "VECTEUR",
- "b_constant", "b_homothetique",
- "b_rectangle", "b_affine", "b_cercle", "b_generale" )
- self.dict_deb_com={"POUTRE":"VisuPoutre", "CABLE" : "VisuCable",
- "COQUE" : "VisuCoque", "GRILLE" : "VisuGrille",
- "ORIENTATION" : "Orientation", "BARRE" : "VisuBarre"}
-
- self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale",
- "CERCLE":"Cercle"}
-
- self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais","VECTEUR":"Vecteur"}
-
- self.initLigne ()
-
- def initJdc(self,jdc) :
- self.jdc=jdc
-
- def initLigne (self) :
- self.boolGpMa = 0
- self.commande = ""
- self.dict_attributs = {}
-
- def gener(self,node,config=None,appliEficas=None):
- """
- """
- self.node=node
- self.list_commandes=[];
- self.generator(self.node.object)
- return self.list_commandes
-
- def generator(self,obj):
- if (obj.nom in self.liste_motetat) and (self.calculeOuiNon(obj)):
- PythonGenerator.generator(self,obj)
- """
- f1=PythonGenerator.generator(self,obj)
- else :
- return ""
- """
-
- def calculeOuiNon(self,obj):
- ouinon=1
- for l in obj.getGenealogie() :
- if not l in self.liste_motetat :
- ouinon=0
- break
- return ouinon
-
-
- def generETAPE(self,obj):
- """
- """
- if obj.isValid() == 0 :
- #showerror("Element non valide","Salome ne sait pas traiter les elements non valides")
- return
- for v in obj.mcListe:
- liste=self.generator(v)
-
- def generMACRO_ETAPE(self,obj):
- """
- """
- if obj.isValid() == 0 :
- #showerror("Element non valide","Salome ne sait pas traiter les elements non valides")
- return
- for v in obj.mcListe:
- liste=self.generator(v)
-
-
- def generMCSIMP(self,obj) :
- """
- """
- if obj.nom in dir(self) :
- suite = self.__class__.__dict__[obj.nom](self,obj)
- else :
- clef=self.dict_traduit[obj.nom]
- # traitement des parametres
- try :
- self.dict_attributs[clef]=obj.val.eval()
- except :
- self.dict_attributs[clef]=obj.val
-
-
- def generMCFACT(self,obj):
- """
- Convertit un objet MCFACT en une liste de chaines de caracteres a la
- syntaxe python
- """
- self.initLigne ()
- self.commande=self.dict_deb_com[obj.nom]
- for v in obj.mcListe:
- self.generator(v)
- if self.boolGpMa == 1:
- self.list_commandes.append((self.commande,self.dict_attributs))
- else :
- #showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
- print(("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element"))
- pass
-
- def generMCList(self,obj):
- """
- """
- for mcfact in obj.data:
- self.generator(mcfact)
-
- def generMCBLOC(self,obj):
- """
- """
- for v in obj.mcListe:
- self.generator(v)
-
- def GROUP_MA(self,obj):
- self.boolGpMa = 1
- self.dict_attributs["Group_Maille"]=obj.val
-
- def SECTION(self,obj):
- assert (self.commande != "" )
- if self.commande == "VisuCable" :
- self.dict_attributs["R"]= math.sqrt(obj.val/math.pi).eval()
- elif (self.commande !="VisuGrille") :
- self.commande=self.commande+self.dict_suite_com[obj.valeur]
-
- def CARA(self,obj) :
- self.clefs=obj.val
- if type(self.clefs) == bytes or type(self.clefs) == str:
- self.clefs=(obj.val,)
-
- def VALE(self,obj) :
- atraiter=obj.val
- if len(self.clefs) > 1 :
- assert (len(atraiter) == len(self.clefs))
- else :
- atraiter=(atraiter,)
- for k in range(len(atraiter)) :
- clef=self.clefs[k]
- val =atraiter[k]
- if isinstance(val, (tuple, list)) and len(val) == 1:
- val = val[0]
- if isinstance (val, Extensions.parametre.PARAMETRE):
- val=val.valeur
- print(( val.__class))
- context={}
- if type(val) == type("aaa") :
- for p in self.jdc.params:
- context[p.nom]=eval(p.val,self.jdc.const_context, context)
- print((context[p.nom]))
- res=eval(val,self.jdc.const_context, context)
- val=res
- self.dict_attributs[clef]=val
-
- def ANGL_REP(self,obj) :
- assert (len(obj.val) == 2)
- alpha,beta=obj.val
- self.dict_attributs["angleAlpha"]=alpha
- self.dict_attributs["angleBeta"]=beta
-
- def ORIG_AXE(self,obj) :
- assert (len(obj.val) == 3)
- alpha,beta,gamma=obj.val
- self.dict_attributs["origAxeX"]=alpha
- self.dict_attributs["origAxeY"]=beta
- self.dict_attributs["origAxeZ"]=gamma
-
- def AXE(self,obj) :
- assert (len(obj.val) == 3)
- alpha,beta,gamma=obj.val
- self.dict_attributs["axeX"]=alpha
- self.dict_attributs["axeY"]=beta
- self.dict_attributs["axeZ"]=gamma
+ """
+ Ce generateur parcourt un objet AFFE-CARA_ELEM
+ et produit un fichier au format texte contenant
+ les instructions idl pour PAL
+ """
+
+ def __init__(self,cr=None):
+ self.list_commandes=[];
+ self.jdc=None
+ self.node=None
+ self.clefs=None
+ self.liste_motetat = ("AFFE_CARA_ELEM", "ORIG_AXE", "AXE" ,
+ "BARRE", "CABLE", "CARA", "COQUE", "EPAIS",
+ "EXCENTREMENT", "GROUP_MA", "ORIENTATION",
+ "POUTRE", "SECTION", "VALE", "VARI_SECT",
+ "GRILLE", "ANGL_REP", "VECTEUR",
+ "b_constant", "b_homothetique",
+ "b_rectangle", "b_affine", "b_cercle", "b_generale" )
+ self.dict_deb_com={"POUTRE":"VisuPoutre", "CABLE" : "VisuCable",
+ "COQUE" : "VisuCoque", "GRILLE" : "VisuGrille",
+ "ORIENTATION" : "Orientation", "BARRE" : "VisuBarre"}
+
+ self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale",
+ "CERCLE":"Cercle"}
+
+ self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais","VECTEUR":"Vecteur"}
+
+ self.initLigne ()
+
+ def initJdc(self,jdc) :
+ self.jdc=jdc
+
+ def initLigne (self) :
+ self.boolGpMa = 0
+ self.commande = ""
+ self.dict_attributs = {}
+
+ def gener(self,node,config=None,appliEficas=None):
+ """
+ """
+ self.node=node
+ self.list_commandes=[];
+ self.generator(self.node.object)
+ return self.list_commandes
+
+ def generator(self,obj):
+ if (obj.nom in self.liste_motetat) and (self.calculeOuiNon(obj)):
+ PythonGenerator.generator(self,obj)
+ """
+ f1=PythonGenerator.generator(self,obj)
+ else :
+ return ""
+ """
+
+ def calculeOuiNon(self,obj):
+ ouinon=1
+ for l in obj.getGenealogie() :
+ if not l in self.liste_motetat :
+ ouinon=0
+ break
+ return ouinon
+
+
+ def generETAPE(self,obj):
+ """
+ """
+ if obj.isValid() == 0 :
+ #showerror("Element non valide","Salome ne sait pas traiter les elements non valides")
+ return
+ for v in obj.mcListe:
+ liste=self.generator(v)
+
+ def generMACRO_ETAPE(self,obj):
+ """
+ """
+ if obj.isValid() == 0 :
+ #showerror("Element non valide","Salome ne sait pas traiter les elements non valides")
+ return
+ for v in obj.mcListe:
+ liste=self.generator(v)
+
+
+ def generMCSIMP(self,obj) :
+ """
+ """
+ if obj.nom in dir(self) :
+ suite = self.__class__.__dict__[obj.nom](self,obj)
+ else :
+ clef=self.dict_traduit[obj.nom]
+ # traitement des parametres
+ try :
+ self.dict_attributs[clef]=obj.val.eval()
+ except :
+ self.dict_attributs[clef]=obj.val
+
+
+ def generMCFACT(self,obj):
+ """
+ Convertit un objet MCFACT en une liste de chaines de caracteres a la
+ syntaxe python
+ """
+ self.initLigne ()
+ self.commande=self.dict_deb_com[obj.nom]
+ for v in obj.mcListe:
+ self.generator(v)
+ if self.boolGpMa == 1:
+ self.list_commandes.append((self.commande,self.dict_attributs))
+ else :
+ #showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
+ print(("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element"))
+ pass
+
+ def generMCList(self,obj):
+ """
+ """
+ for mcfact in obj.data:
+ self.generator(mcfact)
+
+ def generMCBLOC(self,obj):
+ """
+ """
+ for v in obj.mcListe:
+ self.generator(v)
+
+ def GROUP_MA(self,obj):
+ self.boolGpMa = 1
+ self.dict_attributs["Group_Maille"]=obj.val
+
+ def SECTION(self,obj):
+ assert (self.commande != "" )
+ if self.commande == "VisuCable" :
+ self.dict_attributs["R"]= math.sqrt(obj.val/math.pi).eval()
+ elif (self.commande !="VisuGrille") :
+ self.commande=self.commande+self.dict_suite_com[obj.valeur]
+
+ def CARA(self,obj) :
+ self.clefs=obj.val
+ if type(self.clefs) == bytes or type(self.clefs) == str:
+ self.clefs=(obj.val,)
+
+ def VALE(self,obj) :
+ atraiter=obj.val
+ if len(self.clefs) > 1 :
+ assert (len(atraiter) == len(self.clefs))
+ else :
+ atraiter=(atraiter,)
+ for k in range(len(atraiter)) :
+ clef=self.clefs[k]
+ val =atraiter[k]
+ if isinstance(val, (tuple, list)) and len(val) == 1:
+ val = val[0]
+ if isinstance (val, Extensions.parametre.PARAMETRE):
+ val=val.valeur
+ print(( val.__class))
+ context={}
+ if type(val) == type("aaa") :
+ for p in self.jdc.params:
+ context[p.nom]=eval(p.val,self.jdc.const_context, context)
+ print((context[p.nom]))
+ res=eval(val,self.jdc.const_context, context)
+ val=res
+ self.dict_attributs[clef]=val
+
+ def ANGL_REP(self,obj) :
+ assert (len(obj.val) == 2)
+ alpha,beta=obj.val
+ self.dict_attributs["angleAlpha"]=alpha
+ self.dict_attributs["angleBeta"]=beta
+
+ def ORIG_AXE(self,obj) :
+ assert (len(obj.val) == 3)
+ alpha,beta,gamma=obj.val
+ self.dict_attributs["origAxeX"]=alpha
+ self.dict_attributs["origAxeY"]=beta
+ self.dict_attributs["origAxeZ"]=gamma
+
+ def AXE(self,obj) :
+ assert (len(obj.val) == 3)
+ alpha,beta,gamma=obj.val
+ self.dict_attributs["axeX"]=alpha
+ self.dict_attributs["axeY"]=beta
+ self.dict_attributs["axeZ"]=gamma