from Noyau import N_GEOM
from Noyau import N_FONCTION
from Noyau import N_CO
+from Noyau import N_UserASSD
# On ajoute la classe ASSD dans l'heritage multiple pour recreer
# une hierarchie d'heritage identique a celle de Noyau
class ASSD(I_ASSD.ASSD,N_ASSD.ASSD):pass
#class LASSD(I_LASSD.LASSD,N_LASSD.LASSD):pass
class LASSD(I_LASSD.LASSD):pass
+class UserASSD(N_UserASSD.UserASSD,ASSD): pass
class assd(N_ASSD.assd,I_ASSD.assd,ASSD):pass
class GEOM(N_GEOM.GEOM,I_ASSD.GEOM,ASSD):pass
class geom(N_GEOM.geom,I_ASSD.geom,ASSD):pass
class CO(N_CO.CO,I_ASSD.CO,ASSD):pass
+
+
from Noyau import N_ETAPE
from Validation import V_ETAPE
from Ihm import I_ETAPE
-from Efi2Xsd.MCAccasXsd import X_MCCOMPO
+from Efi2Xsd.MCAccasXML import X_ETAPE
-class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_MCCOMPO,N_ETAPE.ETAPE):
+class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_ETAPE,N_ETAPE.ETAPE):
def __init__(self,oper=None,reuse=None,args={}):
- print ('------------- ETAPE accas', oper.nom, args)
N_ETAPE.ETAPE.__init__(self,oper,reuse,args)
V_ETAPE.ETAPE.__init__(self)
from Validation import V_JDC
from Extensions import jdc
from Ihm import I_JDC
-from Efi2Xsd.MCAccasXsd import X_JDC
+from Efi2Xsd.MCAccasXML import X_JDC
class JDC(jdc.JDC,I_JDC.JDC,X_JDC,V_JDC.JDC,N_JDC.JDC):
from .A_ASSD import CO,assd
from Validation import V_MACRO_ETAPE
from Ihm import I_MACRO_ETAPE
from .A_ASSD import CO
-from Efi2Xsd.MCAccasXsd import X_MCCOMPO
+from Efi2Xsd.MCAccasXML import X_MCCOMPO
class MACRO_ETAPE(I_MACRO_ETAPE.MACRO_ETAPE,
X_MCCOMPO,
from Noyau import N_MCBLOC
from Validation import V_MCBLOC
from Ihm import I_MCBLOC
-from Efi2Xsd.MCAccasXsd import X_MCBLOC
+from Efi2Xsd.MCAccasXML import X_MCBLOC
class MCBLOC(I_MCBLOC.MCBLOC,N_MCBLOC.MCBLOC,X_MCBLOC,V_MCBLOC.MCBLOC):
from Noyau import N_MCFACT
from Validation import V_MCFACT
from Ihm import I_MCFACT
-from Efi2Xsd.MCAccasXsd import X_MCFACT
+from Efi2Xsd.MCAccasXML import X_MCFACT
class MCFACT(I_MCFACT.MCFACT,N_MCFACT.MCFACT,X_MCFACT,V_MCFACT.MCFACT):
def __init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=None):
from Noyau import N_MCLIST
from Validation import V_MCLIST
from Ihm import I_MCLIST
-from Efi2Xsd.MCAccasXsd import X_MCLIST
+from Efi2Xsd.MCAccasXML import X_MCLIST
class MCList(I_MCLIST.MCList,N_MCLIST.MCList,X_MCLIST,V_MCLIST.MCList):
from Noyau import N_MCSIMP
from Validation import V_MCSIMP
from Ihm import I_MCSIMP
-from Efi2Xsd.MCAccasXsd import X_MCSIMP
+from Efi2Xsd.MCAccasXML import X_MCSIMP
class MCSIMP(I_MCSIMP.MCSIMP,N_MCSIMP.MCSIMP,X_MCSIMP,V_MCSIMP.MCSIMP):
def __init__(self,val,definition,nom,parent,objPyxbDeConstruction=None):
from Noyau import N_PROC_ETAPE
from Validation import V_PROC_ETAPE
from Ihm import I_PROC_ETAPE
-from Efi2Xsd.MCAccasXsd import X_MCCOMPO
+from Efi2Xsd.MCAccasXML import X_MCCOMPO
class PROC_ETAPE(I_PROC_ETAPE.PROC_ETAPE,
V_PROC_ETAPE.PROC_ETAPE,
--- /dev/null
+import types
+class 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
+
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2017 EDF R&D
+# Copyright (C) 2007-2019 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
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_JDC import JDC
from .A_ETAPE import ETAPE
from .A_A_CLASSER import A_CLASSER
from .A_AVANT import AVANT
-from .A_ASSD import ASSD,assd
+from .A_ASSD import ASSD,assd, UserASSD
from .A_ASSD import GEOM,geom
# Pour le moment on laisse fonction (ceinture et bretelles)
from .A_ASSD import FONCTION, fonction
self.labels_eficas=['lang','rep_cata','catalogues','closeAutreCommande','closeFrameRechercheCommande','closeEntete','taille']
configuration.configBase.__init__(self,appli,repIni)
- self.rep_user = os.environ["HOME"]
+ #self.rep_user = os.environ["HOME"]
+ self.rep_user = os.path.expanduser("~")
self.appli = appli
self.code = appli.code
# self.lang = "fr"
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.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))
from __future__ import print_function
try :
from builtins import str
- from builtins import range
from builtins import object
except :
pass
import types,os,glob,imp,sys
-from six.moves.reprlib import Repr
from copy import copy,deepcopy
# import du chargeur de composants
from Ihm import CONNECTOR
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
-from six.moves import range
+try :
+ from repr import Repr
+except :
+ from reprlib import Repr
myrepr = Repr()
myrepr.maxstring = 100
myrepr.maxother = 100
class ObjectTreeItem(TreeItem,Delegate):
- def __init__(self, appli, labeltext, object, setFunction=None):
+ def __init__(self, appliEficas, labeltext, object, setFunction=None):
self.labeltext = labeltext
- self.appli = appli
+ self.appliEficas = appliEficas
# L'objet delegue est stocke dans l'attribut object
# L'objet associe a l'item est stocke dans l'attribut _object
# Il peut etre obtenu par appel a la methode getObject
Cree un item copie de self
"""
object = self._object.copy()
- appli = copy(self.appli)
+ appliEficas = copy(self.appliEficas)
labeltext = copy(self.labeltext)
fonction = deepcopy(self.setFunction)
- item = makeObjecttreeitem(appli,labeltext,object,fonction)
+ item = makeObjecttreeitem(appliEficas,labeltext,object,fonction)
return item
def isActif(self):
self.setFunction(value)
except:
pass
-# Modif de ma part CCar : je ne comprend pas a quoi ca sert
-# ca parait meme incorrect
- # else:
- # self.object = value
def isExpandable(self):
return 1
except AttributeError:
continue
item = makeObjecttreeitem(
- self.appli,
+ self.appliEficas,
str(key) + " =",
value,
lambda value, key=key, object=self.object:
(ex: macros POURSUITE et INCLUDE de Code_Aster), 0 SINON """
# return self.object.definition.fichier_ini
- def makeObjecttreeitem(self,appli,labeltext, object, setFunction=None):
+ def makeObjecttreeitem(self,appliEficas,labeltext, object, setFunction=None):
"""
Cette methode, globale pour les objets de type item, permet de construire et de retourner un objet
de type item associe a l'object passe en argument.
"""
- return makeObjecttreeitem(appli,labeltext,object,setFunction)
+ return makeObjecttreeitem(appliEficas,labeltext,object,setFunction)
#def __del__(self):
# print "__del__",self
def addItem(self,obj,pos):
self._object.insert(pos,obj)
- item = self.makeObjecttreeitem(self.appli, obj.nom + ":", obj)
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + ":", obj)
return item
def suppItem(self,item):
self._object.remove(item.getObject())
# la liste peut etre retournee vide !
message = "Mot-clef " + item.getObject().nom + " supprime"
- self.appli.afficheInfos(message)
+ self.appliEficas.afficheInfos(message)
return 1
except:
return 0
# nouvel objet : on cree un nouvel item
def setFunction(value, object=obj):
object=value
- it = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction)
+ 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)
class TroisDPilote(object):
- def __init__(self,node,appli):
+ def __init__(self,node,appliEficas):
self.node=node
- self.appli=appli
+ self.appliEficas=appliEficas
def envoievisu(self):
"""
return ""
from Extensions.param2 import originalMath
originalMath.toOriginal()
- self.appli.envoievisu(texte)
+ self.appliEficas.envoievisu(texte)
originalMath.toSurcharge()
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce package contient les fonctionnalites COMMUNES necessaires
- aux deux editeurs graphiques QT et TK
"""
from __future__ import print_function
try :
from builtins import str
- from builtins import range
from builtins import object
except :
pass
from Extensions.i18n import tr
from Noyau.N_CR import CR
-from six.moves import range
#
__Id__="$Id: analyseCatalogue.py,v 1.9.8.1.2.1.2.6 2014-01-23 09:14:44 pnoyret Exp $"
return cata
-def makeCataPickle(fic_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
"""
- fic_cata_p = os.path.splitext(fic_cata)[0]+'_pickled.py'
- cata_ordonne = analyseCatalogue(None,fic_cata)
- f = open(fic_cata_p,'w+')
+ 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()
class CatalogDescription(object):
- def __init__(self, identifier, cata_file_path, file_format = "python",
- default = False, code = None,ss_code=None, user_name = None,
- selectable = True, file_format_in = "python"):
+ def __init__(self, labelCode, fichierCata, formatFichierOut = "python", formatFichierIn='python',
+ default = False, code = None,ss_code=None,):
"""
This class can be used to describe an Eficas catalog.
- :type identifier: string
- :param identifier: unique identifier for the catalog
+ :type labelCode: string
+ :param labelCode: unique labelCode for the catalog
- :type cata_file_path: string
- :param cata_file_path: path of the file containing the catalog itself
+ :type fichierCata: string
+ :param fichierCata: path of the file containing the catalog itself
- :type file_format: string
- :param file_format: format of the files generated when using this
- catalog
+ :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)
+ :param default: indicate if this catalog is the default one (appear on the top of the catalogs list)
:type code: string
- :param code: Deprecated. Used to indicate the code associated to this
- catalog
+ :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 user_name: string
- :param user_name: 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.identifier = identifier
- self.cata_file_path = cata_file_path
- self.file_format = file_format
+
+ self.labelCode = labelCode
+ self.fichierCata = fichierCata
+ self.formatFichierOut = formatFichierOut
+ self.formatFichierIn = formatFichierIn
self.default = default
self.code = code
- if user_name is None:
- self.user_name = identifier
- else:
- self.user_name = user_name
- self.selectable = selectable
- self.file_format_in = file_format_in
@staticmethod
- def create_from_tuple(cata_tuple):
+ def createFromTuple(cataTuple):
#print "Warning: Describing a catalog with a tuple is deprecated. " \
# "Please create a CatalogDescription instance directly."
- desc = CatalogDescription(code = cata_tuple[0],
- identifier = cata_tuple[1],
- cata_file_path = cata_tuple[2],
- file_format = cata_tuple[3])
+ if cataTuple[0] == '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
- if len(cata_tuple) == 5:
- if cata_tuple[4] == "defaut":
- desc.default = True
- else:
- desc.file_format_in = cata_tuple[4]
return desc
le dictionnaire composants.
- gettreeitem(object) -> type d'item : fonction qui retourne un type
d'item correspondant au type de l'objet noyau fourni.
- - makeObjecttreeitem(appli,labeltext, object, setFunction=None) -> item : fonction qui retourne un item
+ - makeObjecttreeitem(appliEficas,labeltext, object, setFunction=None) -> item : fonction qui retourne un item
correspondant a l'objet noyau fourni.
"""
# import generaux
itemtype=composants[None]
return itemtype
-def makeObjecttreeitem(appli,labeltext, object, setFunction=None):
+def makeObjecttreeitem(appliEficas,labeltext, object, setFunction=None):
"""
Cette fonction permet de construire et de retourner un objet
de type item associe a l'object passe en argument.
"""
c = gettreeitem(object)
- return c(appli,labeltext, object, setFunction)
+ return c(appliEficas,labeltext, object, setFunction)
#
from __future__ import absolute_import
try :
- from builtins import range
from builtins import object
except : pass
import os
import re
-from six.moves import range
sous_menus={
# "OPENTURNS_STUDY" : {0:{"Essai":"Std.comm"}},
Ce module centralise les informations issues de la ligne de commande.
La ligne de commande est parsee avec l'aide du module python optparse.
-Les options possibles sont : -c, -j, -p, -d, -i, -f comme definies ci-dessous.
+Les options possibles sont : -l, -j, -p, -d, -i, -f comme definies ci-dessous.
Un exemple typique d'utilisation est :
->>> ./appli.py -c V7.3 -d 1 -j aa -i 11 iii -p ppp -i 22 ii -j bb -f ff
+>>> ./appli.py -v V7.3 -d 1 -j aa -i 11 iii -p ppp -i 22 ii -j bb -f ff
qui demande a l'application d'ouvrir trois jeux de commandes.
if not hasattr(parser.values,"studies"):
parser.values.studies=[]
parser.values.comm=[]
- config = six.moves.configparser.configparser()
+ # Python 2 to 3
+ try :
+ import ConfigParser
+ config=ConfigParser.ConfigParser()
+ except :
+ 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)))
def createparser():
# creation du parser des options de la ligne de commande
#import prefs
- parser=optparse.OptionParser(usage=tr("utilisation : %prog [options]"), version="%prog 1.13")
+ parser=optparse.OptionParser(usage=tr("utilisation : %prog [options]"), version="%prog 9.5")
parser.add_option(u"-j","--jdc",dest="comm",type='string',
action="callback",callback=checkComm,
action="callback", callback=checkInclude,
nargs=2, help=tr("numero d'unite suivi du nom du fichier include"))
- parser.add_option(u"-f","--fich", type="string",dest="fich",
- action="callback", callback=checkFich,
- help=tr("fichier decrivant une etude"))
+ #parser.add_option(u"-f","--fich", type="string",dest="fich",
+ # action="callback", callback=checkFich,
+ # help=tr("fichier decrivant une etude"))
- parser.add_option(u"-c","--cata", action="store", type="string",dest="cata",
- help=tr("version de catalogue a utiliser"))
+ parser.add_option(u"-c","--cata", action="store", type="string",dest="fichierCata",
+ help=tr("catalogue a utiliser"))
- parser.add_option(u"-v","--version_cata", action="store", type="string",dest="version_cata",
+ parser.add_option(u"-v","--label", action="store", type="string",dest="labelCode",
help=tr("version de catalogue a utiliser"))
parser.add_option(u"-d","--debug", action="store", type="int",dest="debug",
help=tr("niveau de debug"))
+ parser.add_option(u"-x","--withXSD", action="store_true", dest="withXSD",
+ default=False,
+ help=tr("construit le .xml en meme temps que le .comm"))
+
+ parser.add_option(u"-a","--withEltAbstrait", action="store_true", dest="avecEltAbstrait",
+ default=False,
+ help=tr("construit des elements abstraits dans le XSD pour gerer le cascading"))
+
parser.add_option(u"-s","--schema", action="store", type="string",dest="ssCode",
help=tr("schema"))
# To handle locale information
- parser.add_option("-l", "--locale", action="store", type="string", dest="locale",
- help=tr("localisation de l'application, pour la traduction"))
+ #parser.add_option("-l", "--locale", action="store", type="string", dest="locale",
+ # help=tr("localisation de l'application, pour la traduction"))
return parser
if not hasattr(options,"studies"):
options.studies=[]
options.comm=[]
+ if not hasattr(options,"fichierCata"): options.fichierCata=None
+ if not hasattr(options,"labelCode"): options.labelCode=None
+ if options.withXSD :
+ try : import pyxb
+ except : print ('Please, source pyxb environment'); exit()
try:
del parser.values.current
except:
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)):
+ 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()
global d_env
d_env=options
#printDEnv()
+ #print (options)
return options
-def getUnit(d_study,appli):
+def getUnit(d_study,appliEficas):
"""
Fonction : construit et retourne un dictionnaire contenant les informations
sur les fichiers poursuite et includes sous la forme adaptee
...]
d_study : dictionnaire de l'etude
- appli : objet application EFICAS (permet d'acceder aux services comme getSource)
+ appliEficas : objet application EFICAS (permet d'acceder aux services comme getSource)
"""
- return getDunit(d_study,appli)
+ return getDunit(d_study,appliEficas)
-def getDunit(d_unit,appli):
+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"],appli)
- text=appli.getSource(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=appli.getSource(v)
+ text=appliEficas.getSource(v)
d[k]=v,text,d
return d
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# cette version ne fonctionne pas bien
+
+
import sys,os
import types
+import Accas
+import imp
+from copy import deepcopy, copy
+import traceback
+
# CONTEXT est accessible (__init__.py de Noyau)
from .mapDesTypes import listeParamTjsSequence, listeParamSelonType
from .mapDesTypes import Tuple
+PourTraduction = False
-from .balises import *
-
+from .balisesXSD import *
# -----------------
class X_definition:
# -----------------
- def getCode(self):
- if hasattr(self,'code') : return
+ 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,'code') ): obj=obj.pere
- self.code = obj.code
-
- #def genealogie(self,n):
- # texte=self.nom
- # obj=self
- # j=1
- # while ( hasattr(obj,'pere') ):
- # texte=obj.pere.nom+'_'+texte
- # obj=obj.pere
- # j=j+1
- # if j > n : return (True, 'T_'+texte)
- # return (False, 'T_'+texte)
-
- def definitNomDuTypePyxb(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) : return objAComparer.nomDuTypePyxb
+ 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 existeDeja(self,nom):
- # if nom in cata.dictTypesXSD.keys() :
- # self.aCreer = False
- # return cata.dictTypesXSD[nom]
- # else :
- # cata.dictTypesXSD[nom] = self
- # return None
# ----------------------------------------
-class X_definitionComposee (X_definition):
+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':
+ 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:],]
+
+
+ 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()
+
+
+ # 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):
+ def CreeTexteComplexeVenantDesFils(self,dansFactorisation=False):
texteComplexeVenantDesFils=""
- for nom in self.ordre_mc:
- mcFils = self.entites[nom]
- mcFils.dumpXsd()
- self.texteComplexe += mcFils.texteElt
- self.texteSimple += mcFils.texteSimple
- texteComplexeVenantDesFils += mcFils.texteComplexe
+ 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):
- #print ('------------------------------------------------')
- #print ('dumpXsd de ' , self.nom)
+ def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
+ #print ('_________ dumpXsd___________', self.nom)
+ if PourTraduction : print (self.nom)
+ self.prepareDumpXSD()
- self.getCode()
+ self.getNomDuCodeDumpe()
self.nomDuTypePyxb = self.definitNomDuTypePyxb()
self.texteSimple = "" # on n ajoute pas de type simple
# pour accepter les PROC et ...
#
if self.aCreer :
- self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb,self.minOccurs,self.maxOccurs)
- texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils()
+ 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
- self.texteComplexe += finTypeCompo
+ # 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 = ""
- minDsSequence=0
- if hasattr(self, 'statut') and self.statut=='f' : minDsSequence=0
- maxDsSequence=1
- if self.label in ('BLOC', 'FACT'):
- self.texteElt=eltCompoDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minDsSequence,maxDsSequence)
- else :
- self.texteElt=eltCompoDsSequenceSiProc.format(self.nom,self.code,self.nomDuTypePyxb)
+ self.texteElt=eltCompoDsSequence.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs)
#print (self.texteComplexe)
- #print ('------------------------------------------------')
+ #print ('------------------------------------------------',self.nom)
def traduitMinMax(self):
- # ____________________
- # valable pour bloc, proc et oper
+ # ______________________
+ # valable pour PROC et OPER
self.minOccurs = 0
- self.maxOccurs = 1
+ 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 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
+
+
+
+
# ---------------------------------
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)
+
+
+
# ---------------------------------
class X_OPER (X_definitionComposee):
# ---------------------------------
- pass
+ 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)
+
# ----------------------------------
class X_PROC (X_definitionComposee):
#-----------------------------------
class X_BLOC (X_definitionComposee):
#-----------------------------------
- def dumpXsd(self):
- #print ('------------------------------------------------')
- #print ('dumpXsd de ' , self.nom)
-
- self.getCode()
+ 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()
+ texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils(dansFactorisation)
self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
self.texteComplexe += finTypeSubst
else :
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 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):
+ 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.getCode()
+ self.getNomDuCodeDumpe()
self.aCreer = True
+ self.texteComplexe = ""
+ self.texteSimple = ""
+ self.texteElt = ""
+ if self.nom =='Consigne' : return
- # --> homonymie on peut utiliser genealogie
- #self.traduitMinMax()
- #self.traduitValMinValMax()
+ # --> homonymie on peut utiliser genealogie ?
self.nomDuTypeDeBase = self.traduitType()
- self.nomDuTypePyxb = self.definitNomDuTypePyxb()
- if self.aCreer == True :
- if self.into != None:
- self.texteSimple = debutTypeSimpleWithInto.format (self.nomDuTypePyxb, self.nomDuTypeDeBase)
- for val in self.into :
- self.texteSimple += typeSimpleWithInto.format(val)
- self.texteSimple += finTypeSimpleWithInto
- else :
- self.texteSimple = typeSimple.format(self.nomDuTypePyxb, self.nomDuTypeDeBase)
- else :
- # le type existe deja
- self.texteSimple=""
- self.texteComplexe = ""
+ 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)
- # on se sert des listes si maxOccurs est > 0
- # a gerer dans le dump
+
+
+ # on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0
if self.statut =='f' : minOccurs = 0
- else : minOccurs = 1
- self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
+ 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,]
+ else :
+ cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self)
+ return 'xs:string'
- if hasattr(self.type[0], 'label') and self.type[0].label == "Tuple" : return ('XXXXXXXX')
- return dictNomsDesTypes[self.type[0]]
+ # 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]
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)
+ #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
def traduitMinMax(self):
if self.min == 1 and self.max == 1 : return
- print ('il faut creer une liste ' , self.nom)
+ #print ('il faut creer une liste ' , self.nom)
def compare(self,autreMC):
if self.label != autreMC.label : return False
- for attr in ( 'type', 'ang', 'fr', 'into', 'intoSug' , 'siValide', 'defaut', 'min' ,'max' ,'homo' ,'position' ,'val_min' , 'val_max' , 'docu' , 'validators' , 'sug' ) :
+ 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)
+
+
#-----------------
class X_JDC_CATA :
#-----------------
- def dumpXsd(self):
-
+ def dumpXsd(self, avecEltAbstrait, debug = True):
+ cata = CONTEXT.getCurrentCata()
+ if debug : print ('avecEltAbstrait -------------------', avecEltAbstrait)
+
+ if debug : print ('self.importedBy -------------------', self.importedBy)
+ if debug : print ('self.code -------------------', self.code)
+
self.texteSimple = ""
self.texteComplexe = ""
- self.nomDuTypePyxb='T_'+self.code
- self.texteCata = debutTypeCata.format(self.nomDuTypePyxb)
- for commande in self.commandes :
- commande.code=self.code
- commande.dumpXsd()
- self.texteSimple += commande.texteSimple
- self.texteSimple += commande.texteComplexe
- self.texteCata += commande.texteElt
- self.texteCata += finTypeCata
- self.texteElt=eltCata.format(self.code,self.code, self.nomDuTypePyxb)
-
- self.texteXSD = texteDebut.format(self.code,self.code,self.code)
+ 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
+ else :
+ 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)
+ if debug : print ('self.nomDuXsdPere -------------------', self.nomDuXsdPere)
+
+ self.nomDuTypePyxb = 'T_'+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)
+ 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 += eltCata.format(self.implement,self.implement,self.implement,self.implement,self.nomDuXsdPere)
+ #if self.implement == self.code :
+ # self.texteCata += debutTypeCata.format(self.nomDuCodeDumpe)
+ #else :
+ # self.texteCata += debutTypeCataExtension.format(self.nomDuCodeDumpe)
+ # self.texteCata += debutExtension.format(self.code,self.nomDuCodeDumpe)
+ # self.texteInclusion += includeCata.format(self.nomDuXsdPere)
+
+
+
+ #for codeHeritant in self.importedBy:
+ # self.texteCata += eltCodeSpecDsCata.format(codeHeritant)
+ # self.texteTypeAbstrait += eltAbstrait.format(codeHeritant,codeHeritant,self.code,codeHeritant)
+
+ #if self.implement != "" : self.texteCata = self.texteCata + finExtension + finTypeCompo
+ #else : self.texteCata += finTypeCata
+
+ #if self.implement != "" :
+ # self.texteElt=implementeAbstrait.format(self.nomDuCodeDumpe,self.code,self.nomDuTypePyxb,self.code,self.nomDuCodeDumpe)
+ #else :
+ # 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)
+ 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)
+
+ if self.texteInclusion != "" : self.texteXSD += self.texteInclusion
self.texteXSD += self.texteSimple
+ self.texteXSD += self.texteComplexe
+
+ #if self.texteTypeAbstrait != "" : self.texteXSD += self.texteTypeAbstrait
self.texteXSD += self.texteCata
- self.texteXSD += self.texteElt
+ #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)
+ for clef in self.dictTypesASSDorUserASSDCrees:
+ existeASSD=0
+ texteDesFields=""
+ 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]:
+ 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 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 )
+ 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() )
+
+ #PNPN on debranche les keyref le temps de bien reflechir a leur forme
+ #if texteKeyRef != '' :
+ # self.texteXSD = self.texteXSD[0:-3]+'>\n'
+ # self.texteXSD += texteKeyRef
+ # self.texteXSD += fermeEltCata
+
self.texteXSD += texteFin
- #print (self.texteSimple)
- #print (self.texteCata)
- #print (self.texteElt)
+
+
+
+ #if not PourTraduction : print (self.texteXSD)
+ 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
+
+ #import pprint
+ #if (not PourTraduction) and (dico != {}) : pprint.pprint(dico)
+ print ('__________________________ decommenter pour le texteXSD________________________')
print (self.texteXSD)
+ return self.texteXSD
+
+ def dumpLesCommandes(self):
+ 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
+
+ newModule=imp.new_module('__main__')
+ exec (texte, newModule.__dict__)
+ allClassToDump=[]
+ for i in dir(importCataSource):
+ if i not in dir(newModule):
+ allClassToDump.append(importCataSource.__dict__[i])
+
+
+ self.texteSimple = ''
+ self.texteComplexe = ''
+ for c in allClassToDump :
+ if not(isinstance(c, Accas.OPER)) and not(isinstance(c, Accas.PROC)) : continue
+ 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)
+ self.texteCata += c.texteElt
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import sys,os
+import inspect
+import traceback
+def trace():
+ 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
+except : pass
+
+from Accas import A_ASSD
+
+class X_OBJECT:
+# -------------
+
+ def delObjPyxb(self, debug=True):
+ 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)
+ 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 ('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
+ #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=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 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())
+
+
+
+
+class X_MCCOMPO(X_OBJECT) :
+# -------------------------
+#
+ def buildObjPyxb(self,mc_list, debug=True) :
+ 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))] )
+ 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)
+ 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)
+
+
+
+
+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 --------------------------')
+
+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 --------------------------')
+
+
+class X_MCFACT (X_MCCOMPO):
+# -------------------------
+ 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
+
+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 analyseContent(self,objAAnalyser):
+# objAAnalyser.dictArgs={}
+# for objContenu in objAAnalyser.content():
+# #print ('j analyse ', objContenu)
+# objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
+# objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
+# #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
+# if objContenu._IsSimpleTypeContent():
+# print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
+# print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
+# #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
+# print (dir(objContenu))
+# objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
+# #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
+# 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 ( '________________')
+
+
+
+if __name__ == "__main__":
+ print ('a faire')
--- /dev/null
+texteDebut='<?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/{}"\ntargetNamespace="http://chercheurs.edf.com/logiciels/{}"\nelementFormDefault="qualified" attributeFormDefault="unqualified" version="0">\n'
+texteDebutNiveau2='<?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/{}"\ntargetNamespace="http://chercheurs.edf.com/logiciels/{}"\nelementFormDefault="qualified" attributeFormDefault="unqualified" version="0">\n'
+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>'
+
+# SIMP
+debutSimpleType = '\t<xs:simpleType name="{}">\n'
+debutSimpleTypeSsNom = '\t<xs:simpleType>\n'
+fermeSimpleType = '\t</xs:simpleType>\n'
+debutRestrictionBase = '\t\t<xs:restriction base="{}">\n'
+fermeRestrictionBase = '\t\t</xs:restriction>\n'
+enumeration = '\t\t\t<xs:enumeration value="{}"/>\n'
+maxInclusiveBorne = '\t\t\t<xs:maxInclusive value = "{}"/>\n'
+minInclusiveBorne = '\t\t\t<xs:minInclusive value = "{}"/>\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'
+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"/>
+# <xs:field xpath="./Vimmp:SurfaceName"/>
+# </xs:key>
+
+ #<xs:keyref name="MyField_Ref_A_CreateMesh" refer="Test1:Key_Name_In_ReadMesh_CreateMesh">
+ #<xs:selector xpath="./Test1:MyField/Test1:onMesh"/>
+
+
+
+
+# COMPO
+debutTypeCompo = '\t<xs:complexType name="{}" >\n'
+debutTypeCompoEtape = '\t <xs:complexContent>\n\t <xs:extension base="T_step_{}">\n'
+finTypeCompoEtape = '\t </xs:extension>\n\t </xs:complexContent>\n'
+debutTypeCompoSeq = '\t\t<xs:sequence>\n'
+finTypeCompoSeq = '\t\t</xs:sequence>\n'
+finTypeCompo = '\t</xs:complexType>\n'
+eltCompoDsSequence = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+#eltCompoDsSequenceInExtension = '\t\t\t<xs:element name="{}" type="{}:{}"/>\n'
+
+# ETAPE
+eltEtape = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}"/>\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'
+#choiceDsBloc = '\t\t\t<xs:choice minOccurs={}>\n'
+debutChoiceDsBloc = '<xs:choice>\n'
+debutChoiceDsBlocAvecMin = '<xs:choice minOccurs="{}">\n'
+finChoiceDsBloc = '</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'
+
+
+
+# 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'
+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 |"
+
+# CATA
+debutTypeCata = '\t<xs:complexType name="T_{}">\n\t\t<xs:choice minOccurs="0" maxOccurs="unbounded">\n'
+debutTypeCataExtension = '\t<xs:complexType name="T_{}">\n'
+finTypeCata = '\t\t</xs:choice>\n\t</xs:complexType>\n'
+finSchema = '</xs:schema>'
+#eltCata = '\t<xs:element name="{}" type="{}:{}"/>\n'
+#eltCodeSpecDsCata = '\t\t\t<xs:element ref="{}_Abstract" minOccurs="0" maxOccurs="1"/>\n'
+#fermeEltCata = '\t</xs:element>\n'
+includeCata = '<xs:include schemaLocation="cata_{}.xsd" />\n\n'
+
+
+# EXTENSION
+debutExtension = '\t\t<xs:complexContent>\n\t\t<xs:extension base="{}:T_{}_Abstract">\n\t\t<xs:choice minOccurs="0" maxOccurs="unbounded">\n'
+finExtension = '\t\t</xs:choice>\n\t\t</xs:extension>\n\t\t</xs:complexContent>\n'
+
+# TYPE ABSTRAIT
+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'
+eltCataFils = '\t<xs:element name="step_{}" type="{}:T_step_{}" substitutionGroup="step_{}"/>\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'
+
+if __name__ == '__main__' :
+ print ('ne fait rien')
+
'fr' : ('doc','fr',),
'docu' : ('doc','docu'),
}
- # 'UIinfo' : 'UIinfo'
- # 'reentrant'
- # 'repetable'
- # 'op_init'
- # 'fenetreIhm' : 'fenetreIhm'
dictPROCXMLEficas = inverseDico(dictPROCEficasXML)
dictOPERXMLEficas = dictPROCXMLEficas
dictPourCast = { 'I' : int, 'R' : float, 'bool' : bool , }
-dictNomsDesTypes = { 'I' : 'int', 'R' : 'float', bool : 'boolean' , 'TXM' : 'string', 'Fichier' : 'string', 'Repertoire':'string', 'FichierNoAbs' : 'string', 'FichierOuRepertoire':'string' }
+dictNomsDesTypes = { 'I' : 'xs:int', 'R' : 'xs:float', bool : 'xs:boolean' , 'TXM' : 'xs:string', 'Fichier' : 'xs:string', 'Repertoire':'xs:string', 'FichierNoAbs' : 'xs:string', 'FichierOuRepertoire':'xs:string' }
listeParamDeTypeTypeAttendu = ( 'defaut', 'sug', 'val_min', 'val_max', 'into', 'intoSug')
listeParamDeTypeStr = ('fr', 'docu', 'ang', 'nom' )
def o_register(self,sd):
return self.jdc_pere.o_register(sd)
- def NommerSdprod(self,sd,sdnom,restrict='non'):
+ 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 contexe global g_context
"""
- #print "NommerSdprod",sd,sdnom,restrict
+ #print "nommerSDProd",sd,sdnom,restrict
if self.prefix_include:
if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom
sdnom=sd.id[2:]
pass
- o=self.sds_dict.get(sdnom,None)
+ o=self.sdsDict.get(sdnom,None)
if isinstance(o,ASSD):
raise AsException(tr("Nom de concept deja defini : %s" ,sdnom))
# ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
# Ajoute a la creation (appel de regSD).
- self.sds_dict[sdnom]=sd
+ self.sdsDict[sdnom]=sd
sd.nom=sdnom
# En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
from __future__ import print_function
import os
-from PyQt5.QtCore import QTranslator
+try :
+ 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 = QTranslator()
-eficas_translator = QTranslator()
def localise(application, locale=None,file=None,translatorFichier=None, debug=False ):
"""
"""
+ 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
sys_locale = QLocale.system().name()
if locale is None: locale="fr"
-
if locale=="ang" : locale="en"
if file != None and debug :
elif debug:
print ("Unable to load Eficas translator!")
- global code_translator
if debug : print ('translatorFichier :' ,translatorFichier)
if translatorFichier != None :
if (code_translator.load(translatorFichier)) and debug:
self.definition=definition
self.nom=nom
self.parent = parent
- # GETVAL affecte la valeur par defaut si necessaire
- self.valeur=self.GETVAL(self.val)
+ # 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.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 :
+ 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 :
+ 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()
except : pass
import math
import types
+# PNPN a resorber
import six
try:
from __future__ import print_function
try :
from builtins import str
- from builtins import range
from builtins import object
except : pass
# import de modules Eficas
from Noyau.N_CR import CR
+from Noyau.N_UserASSD import UserASSD
from Noyau import N_OBJECT
from Ihm import I_OBJECT
from .param2 import *
from Ihm import CONNECTOR
from Extensions.i18n import tr
-from six.moves import range
+
class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
"""
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
formatted strings, according to all formatting schemes: via dictionaries,
tuples, or atoms.
-``PyQt4`` is currently supported.
"""
from __future__ import absolute_import
try :
except :
pass
from .eficas_exception import EficasException
-#from Extensions.eficas_exception import EficasException
+
import re
-from six.moves import map
+regex=re.compile(r"% *[0-9]+")
+
import six
+from six.moves import map
from six.moves import range
from six.moves import zip
-regex=re.compile(r"% *[0-9]+")
string or Unicode object with formatting specifications, and,
optionally, an iterable or an int or float.
Lets Python do the string formatting."""
- from PyQt5.QtWidgets import QApplication
+ try :
+ from PyQt5.QtWidgets import QApplication
+ except :
+ return string
+
string = _preprocess_atom(string)
if len(args) == 0:
r = six.text_type(QApplication.translate("@default", string))
class ASSD:
def __repr__(self):
- return tr("concept %(inst_name)s de type %(class_name)s", \
- {'inst_name': self.getName(), \
- 'class_name': self.__class__.__name__})
+ return "concept " + self.getName() + " type " + self.__class__.__name__
def __str__(self):
return self.getName() or "<None>"
- #def __del__(self):
- # print "__del__",self
class assd(ASSD):
def __convert__(cls,valeur):
class GEOM(ASSD):
def __convert__(cls,valeur):
return valeur
- __convert__=classmethod(__convert__)
+ __convert__= classmethod(__convert__)
class geom(GEOM):
pass
from __future__ import absolute_import
from . import I_REGLE
-import six
class A_CLASSER(I_REGLE.REGLE):
def getText(self):
for arg in self.args1:
t=t+arg.strip()+' ou '
text = text + t[0:-4] +'\n'
- return six.text_type(text)
+ return text
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
from __future__ import absolute_import
-import six
_no=0
import Accas
# % (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 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)
+#
from Extensions.eficas_exception import EficasException
# Objet re pour controler les identificateurs Python
-concept_re=re.compile(r'[a-zA-Z_]\w*$')
+conceptRE=re.compile(r'[a-zA-Z_]\w*$')
# import rajoute suite a l'ajout de buildSd --> a resorber
import traceback
- 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 ?)
- if not concept_re.match(nom):
+ # 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 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)
# 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")
deja definis dans le contexte
Si c'est le cas, les concepts produits doivent etre supprimes
"""
- #print "controlSdprods",d.keys(),self.sd and self.sd.nom,self.nom
+ 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
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
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
#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 : %s ligne : %r %s'),
- self.nom, self.appel[0], tr("\n Include Invalide. \n ne sera pas pris en compte"))
+ 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 __convert__(self,valeur):
# Attention ne verifie pas grand chose
- # cela vaut-il la peine de refaire ce que Qt fait tres bien
if type(valeur) != bytes and type(valeur) != str:
return None
return valeur
"""
d=self.getContexteAvant(etape)
-
l=[]
for k,v in d.items():
#if type(v) != types.InstanceType and not isinstance(v,object): continue
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=[]
Correlation.isValid()
etapeTraitee.isValid()
- def recalculeValiditeApresChangementGlobalJdc(self):
- #print "je passe dans recalculeValiditeApresChangementGlobalJdc"
+ def recalculeValiditeApresChangementGlobalJdc(self, motClef):
+ print ("je passe dans recalculeValiditeApresChangementGlobalJdc")
try :
- liste=self.getJdcRoot().cata.liste_condition
+ liste=self.getJdcRoot().cata.dict_condition[motClef.nom]
except :
liste=()
for etapeTraitee in self.etapes :
if etapeTraitee.nom not in liste: continue
- self.forceRecalculBloc(etapeTraitee)
+ #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):
+ #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)
+ # 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):
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
"""
sd=self.getSdAvantEtape(nom_sd,etape)
if sd:return sd
- return self.getSdApresEtape(nom_sd,etape,avec)
+ 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):
"""
def activeEtapes(self):
"""
- Cette methode a pour fonction de desactiver les etapes qui doivent
- l'etre cad, dans le cas d'ASTER, les etapes qui ne sont pas
- comprises entre le premier DEBUT/POURSUITE et le premier FIN
- et rendre actives les autres
- """
- #if self.definition.code == 'ASTER' :
- # Seulement pour ASTER :
- # Avant DEBUT actif vaut 0
- # Apres DEBUT et avant le 1er FIN actif vaut 1
- # Apres le 1er FIN actif vaut -1
- # actif=0
- #actif=1
+ """
for etape in self.etapes:
- #if actif == 0 and etape.nom in ['DEBUT','POURSUITE']:actif=1
- #if actif == 1:
etape.active()
- #self.enregistreEtapePyxb(etape)
- #else:
- # etape.inactive()
- #if etape.nom == 'FIN':actif=-1
def deplaceEntite(self,indexNoeudACopier,indexNoeudOuColler,pos):
"""
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.deletePyxbObject()
+ #etape.delObjPyxb()
self.etapes.remove(etape)
if etape.niveau is not self:
Effectue les verifications sur les etapes du jdc mais aussi sur les
jdc parents s'ils existent.
"""
- #print "controlContextApres",self,etape
+ print ("controlContextApres",self,etape)
#Regularise les etapes du jdc apres l'etape etape
self.controlJdcContextApres(etape)
Methode semblable a controlContextApres mais ne travaille
que sur les etapes et sous etapes du jdc
"""
- #print "controlJdcContextApres",self,etape
+ print ("controlJdcContextApres",self,etape)
if etape is None:
# on demarre de la premiere etape
index_etape=0
return
context=self.getContexteAvant(etape)
-
for e in self.etapes[index_etape:]:
e.controlSdprods(context)
e.updateContext(context)
def analyse(self):
- try :
- if self.editor.format == 'xml' :
- # il ne faut pas le faire quand le jeu de donnees est vide
- self.setCurrentContext()
- self.analyseFromXML()
- #print ('stop demande'); exit()
- #self.execCompileFromXML()
- else :
- self.compile()
- self.execCompile()
- if not self.cr.estvide():return
- self.activeEtapes()
- except:
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):
"""
self.isValid()
pass
- def deepUpdateConditionBloc(self):
+ def deepUpdateConditionBloc(self,motClef=None):
# pour le moment, on ne fait rien
- self.getJdcRoot().recalculeValiditeApresChangementGlobalJdc()
+ self.getJdcRoot().recalculeValiditeApresChangementGlobalJdc(motClef)
#raise EficasException(tr("Pas implemente"))
def updateConditionBloc(self):
de commandes, nommage de concepts, etc.
"""
#print "resetContext",self,self.nom
- self.current_context={}
+ self.currentContext={}
self.index_etape_courante=0
ind={}
for i,etape in enumerate(self.etapes):
#print "delSdprod",self,sd
#print "delSdprod",self.sds
#print "delSdprod",self.g_context
- #print "delSdprod",self.sds_dict
+ #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.sds_dict : del self.sds_dict[sd.nom]
+ if sd.nom in self.sdsDict : del self.sdsDict[sd.nom]
def delParam(self,param):
"""
meme nom n'existe pas deja
"""
if sd == None or sd.nom == None:return
-
- o=self.sds_dict.get(sd.nom,None)
+ o=self.sdsDict.get(sd.nom,None)
if isinstance(o,ASSD):
raise AsException(tr("Nom de concept deja defini "+ sd.nom))
- self.sds_dict[sd.nom]=sd
+ self.sdsDict[sd.nom]=sd
self.g_context[sd.nom] = sd
#if sd not in self.sds : self.sds.append(sd)
Noyau.N_JDC.JDC.supprime(self)
for etape in self.etapes:
etape.supprime()
- self.appli=None
+ self.appliEficas=None
self.g_context={}
self.const_context={}
- self.sds_dict={}
+ self.sdsDict={}
self.mc_globaux={}
- self.current_context={}
+ self.currentContext={}
self.condition_context={}
self.etapes_niveaux=[]
self.niveau=None
(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
return self.gRegister(etape)
#ATTENTION SURCHARGE : cette methode doit etre gardee en synchronisation avec celle de Noyau
- def NommerSdprod(self,sd,sdnom,restrict='non'):
+ def nommerSDProd(self,sd,sdnom,restrict='non'):
"""
Nomme la SD apres avoir verifie que le nommage est possible :
nom non utilise
# 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 CONTEXT.debug : print(("JDC.nommerSDProd ",sd,sdnom))
if self._etape_context:
o=self.getContexteAvant(self._etape_context).get(sdnom,None)
else:
- o=self.sds_dict.get(sdnom,None)
+ o=self.sdsDict.get(sdnom,None)
if isinstance(o,ASSD):
- raise AsException(tr(" Nom de concept deja defini : "+ sdnom))
+ 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).
- self.sds_dict[sdnom]=sd
+ #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
Retourne le nom du fichier correspondant a un numero d'unite
logique (entier) ainsi que le source contenu dans le fichier
"""
- if self.appli is not None:
- # Si le JDC est relie a une application maitre, on delegue la recherche
- file,text= self.appli.getFile(unite,fic_origine)
+ 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:
from Noyau import N_Exception
from Noyau.N_Exception import AsException
import Accas # attention aux imports circulaires
-import six
-from six.moves import range
# fin import a resorber
class MACRO_ETAPE(I_ETAPE.ETAPE):
ou leve une exception
--> utilisee par ops.POURSUITE et INCLUDE
"""
- #print ("getContexteJdc",self,self.nom, text)
+ print ("getContexteJdc",self,self.nom, text)
# On recupere l'etape courante
step=CONTEXT.getCurrentStep()
self.text_included_converted=0
- #try:
- if 1 :
+ 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.
self.text_converted=0
self.text_error=""
if self.nom != "INCLUDE_MATERIAU":
- format=self.parent.appli.appliEficas.format_fichier
+ format=self.jdc.appliEficas.format_fichier
#on force a python pour Carmel
if format=="CARMEL3D" : format="python"
import convert
# Le convertisseur existe on l'utilise
p=convert.plugins[format]()
p.text=text
- text=p.convert('exec',self.jdc.appli)
+ 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():
if hasattr(self,'sd') and self.sd != None : context_ini[self.sd.nom]=self.sd
j=self.JdC_aux( procedure=text, nom=fichier,
- appli=self.jdc.appli,
+ 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)
- #old_recorded_units=old_recorded_units,**args)
+ old_recorded_units=old_recorded_units,**args)
j.analyse()
if not j.cr.estvide(): self.text_included_converted=0
self.jdc_aux=j
self.jdc.jdcDict=self.jdc_aux
- #except:
- else :
+ except:
+ #else :
traceback.print_exc()
# On retablit l'etape courante step
CONTEXT.unsetCurrentStep()
#print ("valid ",j.isValid())
CONTEXT.unsetCurrentStep()
CONTEXT.setCurrentStep(step)
- raise EficasException(tr("Impossible de relire le fichier %s \n ")+ six.text_type(j.cr))
+ raise EficasException(tr("Impossible de relire le fichier %s \n ")+ str(j.cr))
if not j.isValid() and doitEtreValide:
# 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 sds_dict du parent
+ # 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.sds_dict[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
if callable(v):continue
self.g_context[k]=param2.Variable(k,v)
+ print (j)
+ print (dir(j))
+ print (j.currentContext)
# On recupere le contexte courant
- self.current_context=j.current_context
+ self.currentContext=j.currentContext
+ print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm')
self.index_etape_courante=j.index_etape_courante
+ print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm')
self.jdc_aux=j
+ print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm')
# On retablit l'etape courante step
CONTEXT.unsetCurrentStep()
+ print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm')
CONTEXT.setCurrentStep(step)
+ print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm')
+ print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm')
return j_context
def reevalueSdJdc(self):
"""
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.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 sds_dict du parent
+ # 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)
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.sds_dict[k]=v
+ self.parent.sdsDict[k]=v
# On recupere le contexte courant
- self.current_context=self.jdc_aux.current_context
+ 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
except:
# Impossible de construire le jdc auxiliaire (sortie par exception)
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- if self.jdc.appli is not None:
- self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ 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={}
"""
Cette methode sert a craer un contexte en interpratant un texte source Python.
"""
- #print ("makeContexteInclude",fichier)
+ 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:
# 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)
+ print ("fin makeContexteInclude",fichier)
def reevalueFichierInitObsolete(self):
"""Recalcule les concepts produits par le fichier enregistre"""
f,text=None,None
self.recorded_units=units
- if f is None and self.jdc.appli:
- self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ 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
# car il appelle directement ou indirectement updateContext
# equivalent a resetContext. Evite les recursions
self.jdc_aux.context_ini=d.copy()
- self.jdc_aux.current_context={}
+ 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
return
if type(self.definition.op_init) == types.FunctionType:
+ print ('mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm dans updateContext')
self.definition.op_init(*(self,d))
if self.sd != None :d[self.sd.nom]=self.sd
for co in self.sdprods:
for concept in self.old_context_fichier_init.values():
self.jdc.deleteConcept(concept)
if fichier == None :
- fichier=str(self.jdc.appli.getFile_dictDonnees())
+ fichier=str(self.jdc.appliEficas.getFile_dictDonnees())
if fichier == str("") :
self.fichier_ini="badfile"
self.fichier_text=""
self.jdc.deleteConcept(concept)
if fichier == None :
- fichier=str(self.jdc.appli.getFileVariable())
+ fichier=str(self.jdc.appliEficas.getFileVariable())
if fichier == str("") :
self.fichier_ini="badfile"
self.fichier_text=""
def makeIncl2Except(self,mess=None):
l=traceback.format_exception_only(tr("Fichier invalide"),sys.exc_info()[1])
- if self.jdc.appli is not None:
+ if self.jdc.editor is not None:
if mess == None :
- self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ 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.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ self.jdc.editor.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
message=tr(mess))
#self.parent.recordUnit(unite,self)
self.g_context={}
#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
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 ???)
"""
- #print "makeInclude",unite
+ print ("makeInclude",fname)
# 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
+ #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
raise EficasException(self.fichier_err)
try:
+ print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii')
self.makeContexteInclude(self.fichier_ini ,self.fichier_text)
+ print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii')
self.parent.recordUnit(unite,self)
+ print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii')
except:
l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1]))
- if self.jdc.appli:
- self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"),
+ 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.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)
self.parent.recordUnit(None,self)
except:
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- if self.jdc.appli:
- self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier poursuite"),
+ 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={}
#
from __future__ import absolute_import
from . import I_MCCOMPO
-class MCBLOC(I_MCCOMPO.MCCOMPO):pass
+class MCBLOC(I_MCCOMPO.MCCOMPO):
+
+ def getNomDsXML(self):
+ return self.parent.getNomDsXML()
+
index=index+1
return index
- def findRangObjetDsArbre(self,objet) :
+ def chercheIndiceDsLeContenu(self,objet) :
# uniquement pour Pyxb
- # parcourt les Blocs
+ # ajoute la taille des les Blocs
+ # faut -il chercher plus loin ds les petits-enfants ?
+ if objet.nature == 'MCList' : objet=objet[0]
leRang=0
- pos=self.mcListe.index(objet)
+ 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+1) < pos :
+ while i < positionDsLaListe :
leRang= leRang + self.mcListe[i].longueurDsArbre()
i=i+1
+ leRang=leRang+positionDsLaListeDeFactSiFact
return leRang
return 0
self.initModif()
- #objet.deletePyxbObject()
+ objet.delObjPyxb()
+# PNPNPN a corriger
+ try :
+ objet.deleteRef()
+ except : pass
self.mcListe.remove(objet)
CONNECTOR.Emit(self,"supp",objet)
objet.deleteMcGlobal()
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
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 = name
objet.verifExistenceSd()
# On verifie que l'ajout d'objet est autorise
if self.ispermis(objet) == 0:
- self.jdc.appli.afficheAlerte(tr("Erreur"),
+ 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()
self.mcListe.insert(pos,objet)
# Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
objet.reparent(self)
- #objet.addPyxbObject(self.findRangObjetDsArbre(objet))
+ 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()
# on cree une liste d'objets. Dans le cas contraire,
# on emet un message d'erreur.
if not old_obj.isRepetable():
- self.jdc.appli.afficheAlerte(tr("Erreur"),tr("L'objet %s ne peut pas etre repete", objet.nom))
+ 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
est bien permis, cad peut bien etre un fils de self,
Retourne 0 sinon
"""
- if type(fils) == bytes or type(fils) == str :
+ 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
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
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 {}
Validation.V_MCCOMPO.MCCOMPO.initModifUp(self)
CONNECTOR.Emit(self,"valid")
+
"""
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 getLabelText(self):
"""
self.remove(obj)
CONNECTOR.Emit(self,"supp",obj)
self.updateConditionBloc()
- #obj.deletePyxbObject()
+ obj.delObjPyxb()
obj.supprime()
self.etape.modified()
self.finModif()
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 :
+ 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.appli.afficheAlerte(tr("Erreur"),
+ self.jdc.editor.afficheAlerte(tr("Erreur"),
tr("L'objet %s ne peut pas etre ajoute", obj.nom))
return None
for motcle in self.data :
motcle.deleteMcGlobal()
+
#def __del__(self):
# print "__del__",self
import types
import traceback
from copy import copy
-from six.moves.reprlib import Repr
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
-from six.moves import range
-myrepr = Repr()
-myrepr.maxstring = 100
-myrepr.maxother = 100
from Noyau.N_utils import repr_float
import Validation
from Noyau.N_ASSD import ASSD,assd
from Noyau.N_GEOM import GEOM,geom
from Noyau.N_CO import CO
+from Accas.A_ASSD import UserASSD
import Accas
# fin attention
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:
self.definition.siValide(self)
return validite
+
def getNomConcept(self):
p=self
while p.parent :
# traitement d'un flottant isole
txt = str(self.valeur)
clefobj=self.getNomConcept()
- if clefobj in self.jdc.appli.appliEficas.dict_reels :
- if self.valeur in self.jdc.appli.appliEficas.dict_reels[clefobj]:
- txt=self.jdc.appli.appliEficas.dict_reels[clefobj][self.valeur]
+ 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
for val in self.valeur:
if type(val) == float :
clefobj=self.getNomConcept()
- if clefobj in self.jdc.appli.appliEficas.dict_reels:
- if val in self.jdc.appli.appliEficas.dict_reels[clefobj]:
- txt=txt + sep +self.jdc.appli.appliEficas.dict_reels[clefobj][val]
+ 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 :
val=self.valeur
if type(val) == float :
clefobj=self.getNomConcept()
- if clefobj in self.jdc.appli.appliEficas.dict_reels :
- if val in self.jdc.appli.appliEficas.appliEficas.dict_reels[clefobj] :
- return self.jdc.appli.appliEficas.dict_reels[clefobj][val]
+ 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()
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,ASSD) and not issubclass(typ,GEOM):
+ 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
if self.definition.position == 'global' :
self.etape.deepUpdateConditionBloc()
elif self.definition.position == 'global_jdc' :
- self.jdc.deepUpdateConditionBloc()
+ self.jdc.deepUpdateConditionBloc(self)
else:
self.parent.updateConditionBloc()
def setValeur(self,new_valeur,evaluation='oui'):
- #print ("setValeur Ihm/IMCSIMP ",new_valeur)
self.initModif()
self.valeur = new_valeur
self.val = new_valeur
- #self.setValeurObjPyxb(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)
self.updateConditionBloc()
self.etape.modified()
self.finModif()
"""
sd = self.jdc.getSdAvantEtape(new_valeur,self.etape)
#sd = self.jdc.getContexteAvant(self.etape).get(new_valeur,None)
- #print sd
if sd is not None:
return sd,1
lsd = self.jdc.chercheListAvant(self.etape,new_valeur)
def evalValItem(self,new_valeur):
"""
- Tente d'evaluer new_valeur comme un concept, un parametre, un objet Python
+ 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 self.etape and self.etape.parent:
+ 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:
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()
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)
- self.valeur.remove(sd)
+ 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:
self.initModif()
- self.valeur.remove(sd)
+ 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":
Met a jour la valeur du mot cle simple suite au remplacement
du concept old_sd
"""
- #print "replaceConcept",old_sd,sd
+ print ("replaceConcept",old_sd,sd)
if type(self.valeur) == tuple :
if old_sd in self.valeur:
self.initModif()
self.val=sd
self.finModif()
- def setValeurCo(self,nom_co):
+ def setValeurCo(self,nomCO):
"""
- Affecte a self l'objet de type CO et de nom nom_co
+ Affecte a self l'objet de type CO et de nom nomCO
"""
- #print "setValeurCo",nom_co
step=self.etape.parent
- if nom_co == None or nom_co == '':
+ 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(nom_co,self.etape,avec='oui')
+ 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
# 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
+ # 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(nom_co)
+ new_objet = Accas.CO(nomCO)
CONTEXT.unsetCurrentStep()
CONTEXT.setCurrentStep(cs)
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
if etape :
del etape.mc_globaux[self.nom]
elif self.definition.position == 'global_jdc' :
- del self.jdc.mc_globaux[self.nom]
+# PNPNPN a debuger
+ print (self.nom)
+ try :
+ del self.jdc.mc_globaux[self.nom]
+ except : pass
def updateMcGlobal(self):
"""
self.valeur=a
- def nNbDeDistributions(self):
+ def nbDeDistributions(self):
listeVariables=self.jdc.getDistributions(self.etape)
self.monType.nbLigs=len(listeVariables)
self.monType.nbCols=len(listeVariables)
-#--------------------------------------------------------------------------------
-
-#ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation
-# Elles doivent etre reintegrees des que possible
+ def getNomDsXML(self):
+ nomDsXML=self.parent.getNomDsXML()+"."+self.nom
+ return nomDsXML
def verifTypeIhm(self,val,cr='non'):
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")
+
import Noyau
from . import CONNECTOR
+import re
+conceptRE=re.compile(r'[a-zA-Z_]\w*$')
class OBJECT:
from Noyau.N_CO import CO
else:
return [self.nom.strip()]
+
def getGenealogie(self):
"""
Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC
#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")
+
+
+
class ErrorObj(OBJECT):pass
return []
- def enregistreXML(self,root,catalogueXml):
- import xml.etree.ElementTree as ET
- regleXml=ET.SubElement(root,'regles')
- txt=""
- for mot in self.getText().split('\n'):
- mot.replace(' ','')
- txt=txt + mot + " "
- regleXml.text= txt
+# def enregistreXML(self,root,catalogueXml):
+# import xml.etree.ElementTree as ET
+# regleXml=ET.SubElement(root,'regles')
+# txt=""
+# for mot in self.getText().split('\n'):
+# mot.replace(' ','')
+# txt=txt + mot + " "
+# regleXml.text= txt
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 PyQt5.QtGui import QIcon
+from PyQt5.QtCore import Qt
+
+from Extensions.i18n import tr
+from .gereRegles import GereRegles
from .monChoixCommande import MonChoixCommande
#------------------------------------------
#------------------------------------------
def __init__( self, jdc_item, QWParent):
- #if hasattr(QWParent,'widgetTree') :
- self.editor = 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(0, "Commande ")
self.headerItem().setText(1, "Concept/Valeur")
else :
- self.headerItem().setText(0, "Commande ")
+ self.headerItem().setText(0, "Commande ")
self.setColumnWidth(0,200)
self.setExpandsOnDoubleClick(False)
self.setSelectionMode(3)
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.node_selected = self.racine
+ self.inhibeExpand = True
self.expandItem(self.racine)
- self.inhibeExpand=False
- #print ("self.editor.maConfiguration.afficheCommandesPliees", self.editor.maConfiguration.afficheCommandesPliees)
+ self.inhibeExpand = False
if self.racine.children !=[] :
- #self.editor.initSplitterSizes(3)
if self.editor.maConfiguration.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche()
- else : self.racine.children[0].deplieToutEtReaffiche()
+ 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()
+ #---------------------------------
+ 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 coord the position of the mouse pointer (QPoint)
Attention : existeMenu permet de savoir si un menu est associe a cet item
"""
- #print "handleContextMenu"
+ #print ("handleContextMenu")
if item == None : return
- self.itemCourant=item
+ self.itemCourant = item
if item.existeMenu == 0 : return
+
if item.menu == None:
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)
def handleCollapsedItem(self,item):
- #print "dans CollapsedItem", self.inhibeExpand
+ #----------------------------------
+ #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
+ self.itemCourant = item
+ 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.itemCourant = item
self.inhibeExpand = True
- itemParent=item
+ itemParent = item
while not (hasattr (itemParent,'getPanel')) :
if itemParent.plie==True : itemParent.setDeplie()
itemParent=itemParent.treeParent
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
- itemAvant=item
+ self.itemCourant = item
+ itemParent = item
+ itemAvant = item
while not (hasattr (itemParent,'getPanel')) :
if itemParent.plie==True : itemParent.setDeplie()
itemAvant=itemParent
itemParent=itemParent.treeParent
-
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()
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()
- elif itemParent!=item:
- self.tree.handleExpandedItem(item)
- #item.fenetre.donnePremier()
- #item.fenetre.rendActif()
- #print 'il faut afficher le 1er'
+ elif itemParent!=item: self.tree.handleExpandedItem(item)
+ # 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(six.text_type(txt))
+ if self.editor: self.editor.afficheCommentaire(str(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')
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.vraiParent = treeParent
self.treeParent = treeParent
self.tree = self.treeParent.tree
- self.editor = self.treeParent.editor
+ self.editor = self.treeParent.editor
self.appliEficas = treeParent.appliEficas
- self.JESUISOFF=0
+ self.JESUISOFF = 0
+ self.firstAffiche = True
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() ) )
+ if (isinstance(self.item,compocomm.COMMTreeItem)) : name = tr("Commentaire")
+ elif (isinstance(self.item,compoparam.PARAMTreeItem)) : name = tr(str(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
else : mesColonnes=(name,)
if self.treeParent.plie==True :
- self.plie = True
- self.appartientAUnNoeudPlie=True
+ self.plie = True
+ self.appartientAUnNoeudPlie = True
if self.treeParent.item.isMCList() : self.appartientAUnNoeudPlie = self.treeParent.appartientAUnNoeudPlie
else :
- self.plie = False
+ self.plie = False
self.appartientAUnNoeudPlie = False
#if item.nom == "POUTRE" :print "creation d'un noeud : ", item, " ",item.nom,"", self.treeParent, self.appartientAUnNoeudPlie , self.plie
self.item.connect("valid",self.onValid,())
self.item.connect("supp" ,self.onSupp,())
self.item.connect("add" ,self.onAdd,())
+ self.item.connect("redessine" ,self.onRedessine,())
self.state=""
self.fenetre=None
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)
else : self.listeItemExpanded.append(enfant.item)
for enfant in self.childrenComplete :
- parent=enfant.treeParent
+ parent = enfant.treeParent
parent.removeChild(enfant)
enfant.JESUISOFF=1
def chercheNoeudCorrespondant(self,objSimp):
+ #-------------------------------------------
sublist = self.item._getSubList()
for node in self.childrenComplete:
if node.item.object==objSimp : return node
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.fenetreCentraleAffichee.deleteLater()
from monWidgetNiveauFact import MonWidgetNiveauFact, MonWidgetNiveauFactTableau
- maDefinition=self.item.get_definition()
- monObjet=self.item.object
+ 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.fenetre = self.maFenetreCadre
self.editor.widgetCentraleLayout.addWidget(self.maFenetreCadre)
self.editor.fenetreCentraleAffichee=self.maFenetreCadre
self.select()
def getPanelModifie(self):
+ #-------------------------
if self.fenetreIhm == None : return None
- if self.fenetreIhm=='deplie1Niveau':
+ 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)
+ # pour l instant pas d inactif
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 :
+ 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()
+
+ 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)
+ 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()
+ try :
+ self.editor.widgetCentraleLayout.removeWidget(self.editor.fenetreCentraleAffichee)
+ self.editor.fenetreCentraleAffichee.setParent(None)
+ self.editor.fenetreCentraleAffichee.close()
+ self.editor.fenetreCentraleAffichee.deleteLater()
+ except :
+ pass
self.editor.widgetCentraleLayout.addWidget(self.fenetre)
#print ("j ajoute ", self.fenetre, self.fenetre.node.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
"""
QMessageBox.critical( self.editor, "TOO BAD",str(e))
def unCommentIt(self):
+ #-------------------------
"""
Realise la decommentarisation de self
"""
QMessageBox.critical( self.editor, "Erreur !",str(e))
def addComment( self, after=True ):
+ #-----------------------------------
"""
Ajoute un commentaire a l'interieur du JDC :
"""
return self.appendBrother( COMMENT, pos )
def addParameters( self, after=True ):
+ #-------------------------------------
"""
Ajoute un parametre a l'interieur du JDC :
"""
def select( self ):
+ #------------------
"""
Rend le noeud courant (self) selectionne et deselectionne
tous les autres
#------------------------------------------------------------------
# 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
if self.treeParent != self.vraiParent :
index = self.vraiParent.children.index(self)
- if pos == 'before': index = index
- elif pos == 'after': index = index +1
+ 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
+ elif pos == 'after' : index = index +1
else:
- print(six.text_type(pos), tr(" n'est pas un index valide pour appendBrother"))
+ 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 name not in self.editor.readercata.Classement_Commandes_Ds_Arbre : return True
indexName=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(name)
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')
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) == object:
- #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:
- elif type(name) == object:
- index = self.item.getIndexChild(name.nom)
- else:
- index = self.item.getIndexChild(name)
+ if pos == 'first' : index = 0
+ elif pos == 'last' : index = len(self.children)
+ elif type(pos) == int : index = pos # position fixee
+ elif type(pos) == object : index = self.item.getIndex(pos) +1 # pos est un item. Il faut inserer name apres pos
+ elif type(name) == object : 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
+ 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]
+ 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)
+ 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
+ else : toselect=self.treeParent
+
if recalcule : jdc.recalculeEtatCorrelation()
if ret==0 :
if self.treeParent.childrenComplete :
notdeleted.select()
else :
toselect.select()
+
from InterfaceQT4 import compojdc
# cas ou on detruit dans l arbre sans affichage
if isinstance(self.treeParent,compojdc.Node) :
self.treeParent.fenetre.reaffiche(toselect)
def deleteMultiple(self,liste=()):
+ #--------------------------------
"""
Methode externe pour la destruction d une liste de noeud
"""
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 :
- # print "onValid pour ", self.item.nom, self,'pb'
- pass
+ 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.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)
+ if self.JESUISOFF == 1 : return
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):
+ #-----------------------
+ #print ("onSup pour ", self.item.nom, object)
+ #import traceback
+ #traceback.print_stack()
if self.JESUISOFF==1 : return
- #print "onSup pour ", self.item.nom, object
self.editor.initModif()
self.updateNodes()
- # PN -- non necessaire si item=jdc
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
def updateNodeValid(self):
+ #-----------------------
"""Cette methode remet a jour la validite du noeud (icone)
Elle appelle isValid
"""
- repIcon=self.appliEficas.repIcon
- couleur=self.item.getIconName()
+ 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()
+ #print ("NODE updateNodeLabel", self.item.getLabelText())
labeltext,fonte,couleur = self.item.getLabelText()
# 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'):
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.appliEficas.noeudColore=self
def updatePlusieursNodeLabelInBlue(self,liste):
+ #----------------------------------------------
if hasattr(self.appliEficas,'listeNoeudsColores'):
for noeud in self.appliEficas.listeNoeudsColores:
noeud.setTextColor( 0,Qt.black)
self.appliEficas.listeNoeudsColores=[]
for noeud in liste :
noeud.setTextColor( 0,Qt.blue )
- labeltext,fonte,couleur = noeud.item.getLabelText()
if item.nom != tr(item.nom) : labeltext = str(tr(item.nom)+" :")
+ 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
+ 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()
+ self.updateNodeTexte()
if self.isExpanded() :
for child in self.children:
if child.isHidden() == false : child.updateTexte()
def forceRecalculChildren(self,niveau):
- if self.state=='recalcule' :
- self.state=""
+ #--------------------------------------
+ if self.state == 'recalcule' :
+ self.state = ""
return
self.state='recalcule'
if hasattr(self.item,'object'):
def doPaste(self,node_selected,pos='after'):
+ #--------------------------------------------
"""
Declenche la copie de l'objet item avec pour cible
l'objet passe en argument : node_selected
return child
def doPasteCommande(self,objet_a_copier,pos='after'):
+ #-----------------------------------------------------
"""
Realise la copie de l'objet passe en argument qui est necessairement
un onjet
return child
def doPastePremier(self,objet_a_copier):
+ #---------------------------------------
"""
Realise la copie de l'objet passe en argument (objet_a_copier)
"""
return child
def plieToutEtReafficheSaufItem(self, itemADeplier):
+ #---------------------------------------------------
self.inhibeExpand=True
from InterfaceQT4 import compojdc
if (isinstance(self, compojdc.Node)) :
self.inhibeExpand=False
def plieToutEtReaffiche(self):
+ #-----------------------------
#print ('plieToutEtReaffiche', self.item.getNom())
from InterfaceQT4 import compojdc
if (isinstance(self, compojdc.Node)) : self.affichePanneau(); return
#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
# item.appartientAUnNoeudPlie=False
def setPlieChildren(self):
+ #-----------------------------
self.plie=True
from InterfaceQT4 import composimp
if isinstance(self,composimp.Node) : return
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)
#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()
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]
+ 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.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]
+ 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.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
class BLOCTreeItem(compofact.FACTTreeItem):
itemNode=Node
- #def get_objet(self,name) :
- # for v in self.object.mcListe:
- # if v.nom == name : return v
- # return None
-
def isCopiable(self):
return 0
from __future__ import absolute_import
-from PyQt5.QtWidgets import QAction
from Editeur import Objecttreeitem
from . import browser
def createPopUpMenu(self):
typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
+ from PyQt5.QtWidgets import QAction
self.Decommente = QAction(tr("decommenter"),self.tree)
self.Decommente.triggered.connect(self.decommenter)
self.Decommente.setStatusTip(tr("Decommente la commande "))
debComm=self.item.getText()
self.setText(1,tr(debComm))
-
class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
itemNode=Node
from Editeur import Objecttreeitem
-import six
import traceback
class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
- def getPanelGroupe(self,parentQt,commande,insertIn=-1):
+ def getPanelGroupe(self,parentQt,commande):
+ # ----------------------------------------
maDefinition=self.item.get_definition()
monObjet=self.item.object
monNom=self.item.nom
maCommande=commande
if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
else : self.niveau=1
- #if hasattr(self,'plie') :print self.item.nom, self.plie
- #if maDefinition.fenetreIhm == 'Tableau':
- # from InterfaceQt4.monWidgetFact import MonWidgetFactTableau
- # widget=MonWidgetFactTableau(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
- #elif hasattr(self,'plie') and self.plie==True :
if hasattr(self,'plie') and self.plie==True :
from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
- widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn)
+ 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,insertIn)
+ widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
return widget
def createPopUpMenu(self):
+ # ------------------------
typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
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
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"
+ # ----------------
+ 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):
# return keys
def getSubList(self):
+ # ----------------
"""
Reactualise la liste des items fils stockes dans self.sublist
"""
# nouvel objet : on cree un nouvel item
def setFunction(value, object=obj):
object.setval(value)
- item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction)
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
sublist[pos]=item
pos=pos+1
return (0, tr('Impossible de supprimer un mot-cle obligatoire '))
if self.object.suppEntite(itemobject):
- message = tr("Mot-cle %s supprime")+ six.text_type(itemobject.nom)
+ message = tr("Mot-cle %s supprime")+ itemobject.nom
return (1, message)
else:
return (0,tr('Pb interne : impossible de supprimer ce mot-cle'))
for obj in liste:
if sublist[pos] is None:
# nouvel objet : on cree un nouvel item
- item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj)
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj)
sublist[pos]=item
pos=pos+1
from InterfaceQT4 import compooper
from InterfaceQT4 import browser
from InterfaceQT4 import typeNode
-from PyQt5.QtWidgets import QAction
-from PyQt5.QtCore import Qt
-
class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):
def createPopUpMenu(self):
typeNode.PopUpMenuNode.createPopUpMenu(self)
- if ("AFFE_CARA_ELEM" in self.item.getGenealogie()) and self.editor.salome:
- self.ViewElt = QAction(tr('View3D'),self.tree)
- self.ViewElt.triggered.connect(self.view3D)
- self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure"))
- self.menu.addAction(self.ViewElt)
- if self.item.isValid() :
- self.ViewElt.setEnabled(1)
- else:
- self.ViewElt.setEnabled(0)
-
- def view3D(self) :
- from Editeur import TroisDPal
- troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
- troisD.envoievisu()
+
+# def view3D(self) :
+# from Editeur import TroisDPal
+# troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
+# troisD.envoievisu()
class INCLUDETreeItemBase(MACROTreeItem):
- def __init__(self,appli, labeltext, object, setFunction):
- MACROTreeItem.__init__(self,appli, labeltext, object, setFunction)
+ def __init__(self,appliEficas, labeltext, object, setFunction):
+ MACROTreeItem.__init__(self,appliEficas, labeltext, object, setFunction)
def isCopiable(self):
return 0
def createPopUpMenu(self):
typeNode.PopUpMenuNode.createPopUpMenu(self)
- def makeEdit(self): #,appli,node
+ 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")
def createPopUpMenu(self):
typeNode.PopUpMenuNode.createPopUpMenu(self)
- def makeEdit(self): #,appli,node
+ 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
# ------------------------------------
-def treeitem(appli, labeltext, object, setFunction=None):
+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(appli, labeltext, object, setFunction)
+ return INCLUDE_MATERIAUTreeItem(appliEficas, labeltext, object, setFunction)
elif object.nom == "INCLUDE" or object.nom== "DICTDATA":
- return INCLUDETreeItem(appli, labeltext, object, setFunction)
+ return INCLUDETreeItem(appliEficas, labeltext, object, setFunction)
elif object.nom == "POURSUITE":
- return POURSUITETreeItem(appli, labeltext, object, setFunction)
+ return POURSUITETreeItem(appliEficas, labeltext, object, setFunction)
else:
- return MACROTreeItem(appli, labeltext, object, setFunction)
+ return MACROTreeItem(appliEficas, labeltext, object, setFunction)
import Accas
objet=Accas.MACRO_ETAPE
def createPopUpMenu(self):
typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
- def getPanelGroupe(self,parentQt,commande,insertIn=-1):
+ def getPanelGroupe(self,parentQt,commande):
maDefinition=self.item.get_definition()
monObjet=self.item.object
monNom=self.item.nom
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,insertIn)
+ 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,insertIn)
+ 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)
# nouvel objet : on cree un nouvel item
def setFunction(value, object=obj):
object=value
- item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction)
+ 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
import Accas
objet = Accas.MCList
-def treeitem(appli,labeltext,object,setFunction):
+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(appli,labeltext,object,setFunction)
+ return MCListTreeItem(appliEficas,labeltext,object,setFunction)
import os
import tempfile
-from PyQt5.QtWidgets import QMessageBox, QAction, QApplication
-from PyQt5.QtGui import QCursor
-from PyQt5.QtCore import Qt
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
self.editor.initModif()
test,mess = self.item.nommeSd(nom)
if (test== 0):
- self.editor.afficheInfos(mess,Qt.red)
+ self.editor.afficheInfos(mess,'red')
old=self.item.getText()
self.monWidgetNom.setText(old)
else :
def createPopUpMenu(self):
typeNode.PopUpMenuNode.createPopUpMenu(self)
- if ("AFFE_CARA_ELEM" in self.item.getGenealogie()) and self.editor.salome:
- self.ViewElt = QAction(tr('View3D'),self.tree)
- self.tree.connect(self.ViewElt,SIGNAL("triggered()"),self.view3D)
- self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure"))
- self.menu.addAction(self.ViewElt)
- if self.item.isValid() :
- self.ViewElt.setEnabled(1)
- else:
- self.ViewElt.setEnabled(0)
- if self.item.getNom() == "DISTRIBUTION" :
- self.Graphe = QAction(tr('Graphique'),self.tree)
- self.Graphe.triggered.connect(self.viewPng)
- self.Graphe.setStatusTip(tr("affiche la distribution "))
- self.menu.addAction(self.Graphe)
- if self.item.isValid() :
- self.Graphe.setEnabled(1)
- else:
- self.Graphe.setEnabled(0)
-
- def view3D(self) :
- from Editeur import TroisDPal
- troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
- troisD.envoievisu()
-
- def viewPng(self) :
- from monPixmap import MonLabelPixmap
- import generator
- try:
- QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
- g = generator.plugins[self.appliEficas.format_fichier]()
- g.gener(self.item.object, format='beautifie')
- stdGener = g.getGenerateur()
- loi = list(g.dictMCLois.keys())[0]
- nomLoi = loi.getName()
- (fd, fichier) = tempfile.mkstemp(prefix = "openturns_graph_", suffix = ".png")
- os.close(fd)
- chemin = os.path.dirname(fichier)
- base = os.path.splitext(os.path.basename(fichier))[0]
- script = stdGener.GraphiquePDF(loi, chemin, base)
- #print script
- d = {}
- exec(script, d)
- widgetPng=MonLabelPixmap(self.appliEficas,fichier,nomLoi)
- os.remove(fichier)
- QApplication.restoreOverrideCursor()
- widgetPng.show()
- except:
- QApplication.restoreOverrideCursor()
- QMessageBox.warning(
- self.appliEficas,
- tr("Erreur interne"),
- tr("La PDF de la loi ne peut pas etre affichee."),
- tr("&Annuler"))
+
+# def view3D(self) :
+# from Editeur import TroisDPal
+# troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
+# troisD.envoievisu()
+
class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
""" La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
# nouvel objet : on cree un nouvel item
def setFunction(value, object=obj):
object.setval(value)
- item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction)
+ item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
sublist[pos]=item
pos=pos+1
oldnom=self.object.sd.nom
test,mess= self.object.nommeSd(nom)
if test:self.object.parent.resetContext()
- if (test and oldnom in self.appli.dict_reels ):
- self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
+ 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):
représentatif de self.object
"""
# Format de fichier utilisé
- format=self.appli.appliEficas.format_fichier
+ format=self.appliEficas.formatFichierIn
return self.object.getObjetCommentarise(format)
def getObjetCommentarise_BAK(self):
"""
import generator,Accas
# Format de fichier utilisé
- format=self.appli.appliEficas.format_fichier
+ 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
from InterfaceQT4 import browser
from Noyau.N_CR import justifyText
from Accas import SalomeEntry
+from Accas import UserASSD
class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
def getPanelGroupe(self,parentQt,maCommande):
+ #print (self,self.item.nom, )
maDefinition=self.item.get_definition()
monObjet=self.item.object
monNom=self.item.nom
from InterfaceQT4.monWidgetSDCOInto import MonWidgetSDCOInto
widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.waitAssd():
- if len(self.item.getSdAvantDuBonType()) == 0 :
+
+ # 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(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(self.item.getSdAvantDuBonType()) < 7 :
+ elif len(maListe) < 7 :
from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
else :
from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
- elif self.item.waitAssd() :
+ 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 \
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) :
+ 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)
else :
try :
if "R" in self.object.definition.type:
clef=self.object.getNomConcept()
- if clef in self.appli.dict_reels:
+ if clef in self.appliEficas.dict_reels:
if type(valeurs) == tuple:
valeurs_reelles=[]
for val in valeurs :
- if val in self.appli.dict_reels[clef]:
- valeurs_reelles.append(self.appli.dict_reels[clef][val])
+ if val in self.appliEficas.dict_reels[clef]:
+ valeurs_reelles.append(self.appliEficas.dict_reels[clef][val])
else :
valeurs_reelles.append(val)
else :
- if valeurs in self.appli.dict_reels[clef]:
- valeurs_reelles=self.appli.dict_reels[clef][valeurs]
+ if valeurs in self.appliEficas.dict_reels[clef]:
+ valeurs_reelles=self.appliEficas.dict_reels[clef][valeurs]
valeurs=valeurs_reelles
except :
pass
def getIconName(self):
- if self.appli.maConfiguration.differencieSiDefaut and self.isValid():
+ 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 text
- def setValeurCo(self,nom_co):
+ def setValeurCo(self,nomCo):
"""
- Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
+ Affecte au MCS pointe par self l'objet de type CO et de nom nom_co
"""
- ret = self.object.setValeurCo(nom_co)
+ ret = self.object.setValeurCo(nomCo)
#print "setValeurCo",ret
return ret
def getSdAvantDuBonType(self):
"""
- Retourne la liste des noms des SD présentes avant l'étape qui contient
- le MCS pointé par self et du type requis par ce MCS
+ 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)
- return a
+ 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")
def waitCo(self):
"""
- Méthode booléenne qui retourne 1 si l'objet pointé par 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
"""
def waitGeom(self):
"""
- Méthode booléenne qui retourne 1 si l'objet pointé par self
+ Methode booleenne qui retourne 1 si l'objet pointe par self
attend un objet GEOM, 0 sinon
"""
return self.object.waitGeom()
def waitComplex(self):
- """ Méthode booléenne qui retourne 1 si l'objet pointé par 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
return 0
def waitReel(self):
- """ Méthode booléenne qui retourne 1 si l'objet pointé par self
- attend un réel, 0 sinon """
+ """ 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 self.object.waitTuple()
def waitDate(self):
- """ Méthode booléenne qui retourne 1 si l'objet pointé par self
- attend un réel, 0 sinon """
+ """ 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):
- """ Méthode booléenne qui retourne 1 si l'objet pointé par self
- attend un réel, 0 sinon """
+ """ 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:
def waitTuple(self):
- """ Méthode booléenne qui retourne 1 si l'objet pointé par 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 0
def waitMatrice(self):
- """ Méthode booléenne qui retourne 1 si l'objet pointé par 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 0
def waitAssd(self):
- """Méthode booléenne qui retourne 1 si l'objet pointé par self
- attend un objet de type ASSD ou dérivé, 0 sinon """
+ """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) :
def getType(self):
"""
- Retourne le type de valeur attendu par l'objet représenté par l'item.
+ Retourne le type de valeur attendu par l'objet represente par l'item.
"""
return self.object.getType()
def evalValeurItem(self,valeur):
- """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple
+ """ 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
valeurretour,validite = valeur,1
else :
valeurretour,validite= self.object.evalValeur(valeur)
- #print "evalValeurItem",valeurretour,validite
if validite == 0:
if (type(valeur) == bytes or type(valeur) == str )and self.object.waitTxm():
#except:
#valeurretour=None
#validite=0
- # on est dans le cas ou on a évalué et ou on n'aurait pas du
+ # 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)
def isCO(self,valeur=None):
"""
Indique si valeur est un concept produit de la macro
- Cette méthode n'a de sens que pour un MCSIMP d'une 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 présent dans l'attribut sdprods de l'étape
+ # 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
def traiteReel(self,valeur):
"""
- Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel
- ou de détecter si on fait référence a un concept produit par DEFI_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()
return valeur
if len(valeur) >= 3 :
if valeur[0:4] == 'EVAL' :
- # on a trouvé un EVAL --> on retourne directement la valeur
+ # on a trouve un EVAL --> on retourne directement la valeur
return valeur
if valeur.find('.') == -1 :
- # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
+ # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
if (self.isParam(valeur)):
return valeur
else:
import os, sys, types, re
import traceback
-from PyQt5.QtWidgets import QMessageBox
from Editeur.Eficas_utils import read_file
from Extensions.i18n import tr
class configBase(object):
#-------------------------------
- def __init__(self,appli,repIni):
+ def __init__(self,appliEficas,repIni):
#-------------------------------
# Classe de base permettant de lire, afficher
# le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
# dans le fichier general sinon
- self.appli = appli
- self.code = appli.code
- self.salome = appli.salome
+ 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
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.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)
#Particularite des schemas MAP
if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
- #if self.appli: self.parent=appli.top
+ #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.environ['HOME']
+ self.savedir=os.path.expanduser("~")
else:
self.savedir='C:/'
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.abspath(os.path.join(os.environ['HOME'],nomDir))
+ rep=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.force_langue=False
+ self.demandeLangue=False
self.suiteTelemac=False
self.nombreDeBoutonParLigne=0
self.translatorFichier=None
self.dicoImages= {}
self.dicoIcones= {}
self.afficheCommandesPliees = True
- self.simpleClic= False
+ self.afficheFirstPlies = False
+ self.simpleClic = False
self.afficheOptionnelVide=False
self.afficheListesPliees=True
self.boutonDsMenuBar=False
self.repIcones=None
self.differencieSiDefaut=False
self.typeDeCata='Python'
- self.dumpXSD=False
- self.withXSD=False
- self.afficheIhm=True
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=False
+ self.utilParExtensions=[]
self.rendVisiblesLesCaches=False
+ self.pasDeMCOptionnels=False
+
+ self.dumpXSD=False
+ self.withXSD=False
+ self.afficheIhm=True
def lectureFichierIniStandard(self):
#--------------------------------------
- name='prefs_'+self.appli.code
- prefsCode=__import__(name)
+ 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)
try:
exec(txt, d)
except :
- QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ 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 :
exec(txt, d)
except :
l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
- QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ 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])
#
+def makeConfig(appliEficas,rep):
+ return configBase(appliEficas,rep)
import types,sys,os, re
import subprocess
import traceback
-import six
from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter, QLabel
# Methodes faisant appel a ssIhm
# ----------------------------------------
- def __init__ (self,appli,fichier = None, jdc=None, QWParent=None, units = None, include=0):
- #------------------------------------------------------------------------------------------
+ def __init__ (self,appliEficas,fichier = None, jdc=None, QWParent=None, units = None, include=0):
+ #------------------------------------------------------------------------------------------------
QWidget.__init__(self,None)
self.fenetreCentraleAffichee=None
self.dejaDansPlieTout=False
self.listeDesListesOuvertes=set()
- self.afficheListesPliees=True
- if appli!=None and hasattr(appli,"statusBar"): self.sb = appli.statusBar()
+ if appliEficas!=None and hasattr(appliEficas,"statusBar"): self.sb = appliEficas.statusBar()
else : self.sb = None
self.QWParent=QWParent
- JDCEditorSsIhm. __init__ (self,appli,fichier, jdc,units,include)
+ JDCEditorSsIhm. __init__ (self,appliEficas,fichier, jdc,units,include)
+ if self.jdc:
+ comploader.chargerComposants()
+ self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+
# Particularites IHM : met la fenetre a jour
self.initSplitterSizes()
- if self.code == "ASTER" or self.code == "monCode" : self.afficheListesPliees =True
- if self.code == 'PSEN_N1' : self.afficheListesPliees = False
#self.affiche=self.appliEficas.maConfiguration.affiche
+ self.afficheListesPliees=self.maConfiguration.afficheListesPliees
if self.code in ['MAP','CARMELCND','PSEN'] : self.maConfiguration.afficheCommandesPliees=False
if self.code in ['MAP',]: self.fermeArbre()
# self.widgetTree.close()
# self.widgetTree=None
- if self.maConfiguration.closeArbre: self.fermeArbre()
+ if self.maConfiguration.closeArbre : self.fermeArbre()
+ if self.maConfiguration.closeOptionnel : self.fermeOptionnel()
if self.maConfiguration.boutonDsMenuBar : self.appliEficas.remplitIconesCommandes()
- self.version_code = session.d_env.cata
- self.format = self.appliEficas.format_fichier
+ self.formatFichierOut = self.appliEficas.formatFichierOut
+ self.formatFichierIn = self.appliEficas.formatFichierIn
self.node_selected = []
self.deplier = True
self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
if self.appliEficas.readercata.demandeCatalogue==True :
- nomFichierTranslation='translatorFichier'+'_'+str(self.appliEficas.readercata.versionCode)
+ nomFichierTranslation='translatorFichier'+'_'+str(self.appliEficas.readercata.labelCode)
if hasattr(self.appliEficas.maConfiguration,nomFichierTranslation) :
translatorFichier=getattr(self.appliEficas.maConfiguration,nomFichierTranslation)
from Extensions import localisation
def run(self):
#------------#
fonction="run"+self.code
- #print fonction
if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
#------------#
# ---------------------------------------------
# Methodes Non Crees dans ssIHM
# ---------------------------------------------
+ #---------------#
+ def runVP(self):
+ #---------------#
+ texte=self.getTextJDC("MAPVp",pourRun=1)
+ print (texte)
#---------------#
def runMAP(self):
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.format)
+ 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)
#-----------------------------------------------------#
def determineNomFichier(self,path,extension):
#-----------------------------------------------------#
- if self.appli.code in DictExtensions:
- chaine1=DictExtensions[self.appli.code]+" (*."+DictExtensions[self.appli.code]+");;"
+ 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.appli.code == "MAP" :
+ if self.appliEficas.code == "MAP" :
extensions = extensions + ";; Run (*.input);;"
fn = QFileDialog.getSaveFileName( self,
if QFileInfo(fn).exists():
msgBox = QMessageBox(self)
msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
- msgBox.setText(tr("Le fichier <b>%s</b> existe deja.", six.text_type(fn)))
+ msgBox.setText(tr("Le fichier")+ " "+str(fn)+ " " +tr("existe deja"))
msgBox.addButton(tr("&Ecraser"),0)
msgBox.addButton(tr("&Abandonner"),1)
abort=msgBox.exec_()
extension='.casR'
fn = self.fichierComplet
#saveas=True # Pour forcer le nom
- self.generator=self.maConfiguration.mesGenerators.plugins[self.format]()
+ 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 fn == None : return (0, None)
if fn== '' : return (0, None)
- ulfile = os.path.abspath(six.text_type(fn))
+ ulfile = os.path.abspath(fn)
self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
- fn = six.text_type(QDir.toNativeSeparators(fn))
+ fn = QDir.toNativeSeparators(fn)
self.fichierComplet = os.path.splitext(fn)[0]+extension
if hasattr(self.generator, "writeComplet"):
- self.generator.writeComplet(self.fichierComplet,self.jdc,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
+ self.generator.writeComplet(self.fichierComplet,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
if self.salome : self.appliEficas.addJdcInSalome( self.fichierComplet)
if not self.modified and not saveas:
return (0, None) # do nothing if text wasn't changed
- if self.appli.code in DictExtensions :
- extension=DictExtensions[self.appli.code]
+ if self.appliEficas.code in DictExtensions :
+ extension=DictExtensions[self.appliEficas.code]
else :
extension='.comm'
if fn == None : return (0, None)
if fn== '' : return (0, None)
- ulfile = os.path.abspath(six.text_type(fn))
+ ulfile = os.path.abspath(fn)
self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
- fn = six.text_type(QDir.toNativeSeparators(fn))
+ fn = QDir.toNativeSeparators(fn)
newName = fn
self.tree.racine.item.getObject().nom=os.path.basename(newName)
self.tree.racine.updateNodeLabel()
- #print ('sortie du XML')
- #self.jdc.toXml()
+
+ 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)
if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
#if hasattr(self.generator, "writeDefault"):
if not fn : return (0, " ")
fn=fn[0]
- ulfile = os.path.abspath(six.text_type(fn))
+ ulfile = os.path.abspath(fn)
self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
- # On utilise le convertisseur defini par format_fichier
+ # On utilise le convertisseur defini par formatFichierIn
source=self.getSource(ulfile)
if source:
# On a reussia convertir le fichier self.ulfile
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()
import subprocess
import traceback
-import six
-from six.moves import range
import traceback
# Methodes Communes ou appelees depuis avec Ihm
# ---------------------------------------------
- def __init__ (self,appli,fichier = None, jdc = None, units = None, include=0 ):
- #------------------------------------------------------------------------------#
+ def __init__ (self,appliEficas,fichier = None, jdc = None, units = None, include=0 ):
+ #-----------------------------------------------------------------------------------#
# paticularisee avec Ihm
if debug : print ('dans le init de JDCEditorSsIhm')
- self.appliEficas = appli
- self.appli = appli
+ self.appliEficas = appliEficas
self.fichier = fichier
- self.fichierComplet = fichier
+ self.fichierComplet = fichier
+ if fichier != None : self.extensionFichier = os.path.splitext(fichier)[1]
+ else : self.extensionFichier = None
self.jdc = jdc
self.first = True
self.jdc_item = None
self.dict_reels = {}
self.liste_simp_reel = []
- if appli != None : self.salome = self.appliEficas.salome
+ if self.appliEficas != None : self.salome = self.appliEficas.salome
else : self.salome = 0
# ces attributs sont mis a jour par definitCode appelee par newEditor
self.code = self.appliEficas.maConfiguration.code
self.maConfiguration = self.appliEficas.maConfiguration
- self.version_code = session.d_env.cata
-
if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.readercata.demandeCatalogue==True or self.appliEficas.multi==True:
if self.maConfiguration.typeDeCata == 'XML' :
self.appliEficas.code=self.code
else :
self.readercata=self.appliEficas.readercata
- if self.readercata.fic_cata == None : return #Sortie Salome
+ if self.readercata.fichierCata == None : return #Sortie Salome
self.titre=self.readercata.titre
- self.format = self.appliEficas.format_fichier
+ self.formatFichierOut = self.appliEficas.formatFichierOut
+ self.formatFichierIn = self.appliEficas.formatFichierIn
if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
self.dict_reels={}
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.fileInfo = None
self.lastModified = 0
except :
print ("mauvaise lecture du fichier")
if self.salome :
- try :
- self.appliEficas.addJdcInSalome( self.fichier)
- except :
- print ("mauvais enregistrement dans Salome")
+ try : self.appliEficas.addJdcInSalome( self.fichier)
+ except : print ("mauvais enregistrement dans Salome")
else :
self.jdc=jdc
else:
if not self.jdc: # nouveau jdc
- if not include :
- self.jdc = self._newJDC(units=units)
- else :
- self.jdc = self._newJDCInclude(units=units)
+ if not include : self.jdc = self._newJDC(units=units)
+ else : self.jdc = self._newJDCInclude(units=units)
self.nouveau=1
if self.jdc:
- self.jdc.appli = self # a resorber
self.jdc.editor = self
- self.jdc.lang = self.appli.langue
+ self.jdc.lang = self.appliEficas.langue
self.jdc.aReafficher=False
txt_exception = None
- if not jdc:
- self.jdc.analyse()
+ 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()
+ else : self.jdc.analyse()
txt_exception = self.jdc.cr.getMessException()
if txt_exception :
self.jdc = None
self.informe('pb chargement jdc',txt_exception)
- else:
- comploader.chargerComposants()
- self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+ #else:
+ #comploader.chargerComposants()
+ #self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
#-------------------------------#
def readFile(self, fn):
# charge un JDC
# paticularisee avec Ihm
- fn = six.text_type(fn)
+ fn = str(fn)
jdcName=os.path.basename(fn)
# Il faut convertir le contenu du fichier en fonction du format
- if self.appliEficas.format_fichier_in in convert.plugins:
+ 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[self.appliEficas.format_fichier_in]()
+ p=convert.plugins[formatIn]()
p.readfile(fn)
if p.text=="" : self.nouveau=1
#print ('PNPN --> CIST a faire')
- pareil,texteNew=self.verifieChecksum(p.text)
- if not pareil :
- self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
-
- p.text=texteNew
- memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
- if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew)
- p.text=texteNew
-
- text=p.convert('exec',self.appliEficas)
-
- if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
+ 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
+ memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
+ if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew)
+ p.text=texteNew
+ text=p.convert('exec',self.appliEficas)
+ if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
+ else:
+ text=p.text
else :
self.afficheInfos("Type de fichier non reconnu",'red')
self.informe( "Type de fichier non reconnu",
- "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.format_fichier_in)
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
return None
CONTEXT.unsetCurrentStep()
#jdc=self.readercata.cata[0].JdC(procedure=text,
jdc=self.readercata.cata.JdC(procedure=text,
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
nom=jdcName,
if self.code == "PSEN" : texte = self._newPSEN()
if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
- #if hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC
if hasattr(self.readercata.cata,'TEXTE_NEW_JDC') : texte=self.readercata.cata.TEXTE_NEW_JDC
- #jdc=self.readercata.cata[0].JdC( procedure =texte,
- #print (self.readercata.cata)
jdc=self.readercata.cata.JdC( procedure =texte,
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
rep_mat=self.maConfiguration.rep_mat
)
- jdc.lang = self.appli.langue
+ jdc.lang = self.appliEficas.langue
if units is not None:
jdc.recorded_units=units
jdc.old_recorded_units=units
- ## PNPN est ce que la ligne suivante est bien utile ?
- # elle positionne le contexte
+ # 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 ?
- if self.format == 'xml' : return jdc
- if texte == "" :
- jdc.editor=self
- jdc.analyse()
+ jdc.editor=self
return jdc
#--------------------------------#
#jaux=self.readercata.cata[0].JdC( procedure="",
jaux=self.readercata.cata.JdC( procedure="",
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
rep_mat=self.maConfiguration.rep_mat,
)
+ jaux.editor=self
jaux.analyse()
J=JdC_aux( procedure="",
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
jdc_pere=jaux,
rep_mat=self.maConfiguration.rep_mat,
)
+ J.editor=self
J.analyse()
if units is not None:
J.recorded_units=units
#-----------------------#
# Il faut convertir le contenu du fichier en fonction du format
- if self.format in convert.plugins :
+ if self.formatFichierIn in convert.plugins :
# Le convertisseur existe on l'utilise
- p=convert.plugins[self.format]()
+ p=convert.plugins[self.formatFichierIn]()
p.readfile(file)
text=p.convert('execnoparseur')
if not p.cr.estvide():
# Il n'existe pas c'est une erreur
self.afficheInfos("Type de fichier non reconnu",'red')
self.informe( "Type de fichier non reconnu",
- "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.format_fichier_in)
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
return None
#----------------------------------------------#
def viewJdcSource(self):
#-----------------------#
if self.fichier == None : return
- f=open(self.fichier,'r')
- texteSource=f.read()
- f.close()
- self._viewText(texteSource, "JDC_SOURCE")
+ if os.path.isfile(self.fichier):
+ f=open(self.fichier,'r')
+ texteSource=f.read()
+ f.close()
+ self._viewText(texteSource, "JDC_SOURCE")
+ else :
+ self._viewText("file doesn't exist", "JDC_SOURCE")
+
#-----------------------#
def viewJdcPy(self):
#-----------------------#
- strSource = str( self.getTextJDC(self.format) )
+ strSource = str( self.getTextJDC(self.formatFichierOut) )
self._viewText(strSource, "JDC_RESULTAT")
#-----------------------#
def viewJdcRapport(self):
#-----------------------#
# on ajoute les regles
- strRapport = six.text_type( self.jdc.report() )
+ strRapport = str( self.jdc.report() )
self._viewText(strRapport, "JDC_RAPPORT")
#-----------------------#
def getJdcRapport(self):
#-----------------------#
# on ajoute les regles
- strRapport = six.text_type( self.jdc.report() )
+ strRapport = str( self.jdc.report() )
return strRapport
#---------------------#
@return flag indicating success
"""
- fn = six.text_type(fn)
+ fn = str(fn)
if txt == None :
- txt = self.getTextJDC(self.format,formatLigne=formatLigne)
+ txt = self.getTextJDC(self.formatFichierOut,formatLigne=formatLigne)
eol = '\n'
if len(txt) >= len(eol):
if txt[-len(eol):] != eol:
f.close()
return 1
except IOError as why:
- self.afficheInfos('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :' + str(why))
+ 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,pourRun=0,formatLigne="beautifie"):
+ 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,appli=self.appliEficas)
+ 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:
hash_checksum = hashlib.md5()
hash_checksum.update(newtexte.encode('utf-8'))
checksum = hash_checksum.hexdigest()
- ligne = "#CHECKSUM:"+checksum+":FIN CHECKSUM"
+ ligne = ligne="#CHECKSUM:"+checksum+":FIN CHECKSUM"
except :
try :
newtexte=texte.replace('"','\\"')
dico=self.generator.Dico
return dico
else :
- self.afficheInfos(tr("Format %s non reconnu" , self.format),Qt.red)
+ self.afficheInfos(tr("Format %s non reconnu" , 'Dictionnaire Imbrique' ),'red')
return ""
#-----------------------------------------#
def chercheDico(self):
#-----------------------------------------#
dicoCourant={}
- format = self.appliEficas.format_fichier
+ format = self.appliEficas.formatFichierOut
if format in generator.plugins:
# Le generateur existe on l'utilise
self.generator=generator.plugins[format]()
self.generator=generator.plugins[self.format]()
print (self.generator)
if hasattr(self.generator, "writeComplet"):
- self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
+ self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
# ---------------------------------------------
"""
- if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
self.fichierOut = fichier
-
- if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
+ 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)
+ if self.jdc.isValid() and hasattr(self.generator, "writeDefault"):
self.generator.writeDefault(fichier)
elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
self.generator.writeDefault(fichier)
-
self.modified = 0
-
return (1, self.fichier)
#
ouChercher=etape
if debug : print (ouChercher)
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui", debug=1)
+ 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", debug=1)
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
# Attention si +sieursMCFACT
ouChercher=ouChercher[0]
if debug : print (ouChercher)
import sys,os
-repIni=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
-ihmQTDir=os.path.join(repIni,"UiQT5")
-editeurDir=os.path.join(repIni,"Editeur")
-ihmDir=os.path.join(repIni,"InterfaceQT4")
+repIni = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
+ihmQTDir = os.path.join(repIni,"UiQT5")
+editeurDir = os.path.join(repIni,"Editeur")
+ihmDir = os.path.join(repIni,"InterfaceQT4")
-if ihmDir not in sys.path : sys.path.append(ihmDir)
-if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
-if editeurDir not in sys.path :sys.path.append(editeurDir)
-
-def getEficasSsIhm(code=None,fichier=None,ssCode=None,multi=False,langue='en',versionCode=None):
- #print (versionCode)
- from InterfaceQT4.qtEficasSsIhm import AppliSsIhm
- Eficas=AppliSsIhm(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue,versionCode=versionCode)
- from Editeur import session
- options=session.parse(['ssIhm','-k',code,'-v',versionCode])
- return Eficas
+if ihmDir not in sys.path : sys.path.append(ihmDir)
+if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
+if editeurDir not in sys.path : sys.path.append(editeurDir)
-def lanceEficas(code=None,fichier=None,ssCode=None,multi=False,langue='en'):
+def lanceEficas(code=None, multi=False, langue='en', labelCode=None):
+#-------------------------------------------------------------------
"""
- Lance l'appli EFICAS
+ Lance l'appli EFICAS avec Ihm
"""
- # Analyse des arguments de la ligne de commande
try :
from PyQt5.QtWidgets import QApplication
except :
return
from Editeur import session
- options=session.parse(sys.argv)
- if options.code!= None : code=options.code
- if options.ssCode!= None : ssCode=options.ssCode
+ options = session.parse(sys.argv)
+ if options.code != None : code=options.code
from InterfaceQT4.qtEficas import Appli
app = QApplication(sys.argv)
- #import cProfile, pstats, StringIO
- #pr = cProfile.Profile()
- #pr.enable()
-
- Eficas=Appli(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue)
- #pr.disable()
- #s = StringIO.StringIO()
- #sortby = 'cumulative'
- #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
- #ps.print_stats()
- #print (s.getValue())
-
+ Eficas=Appli(code=code,salome=0,multi=multi,langue=langue,labelCode=labelCode)
Eficas.show()
res=app.exec_()
sys.exit(res)
+def getEficasSsIhm(code=None, multi=False, langue='en', labelCode=None,forceXML=False, genereXSD=False):
+#------------------------------------------------------------------------------------------------------
+ """
+ Lance l'appli EFICAS sans Ihm
+ """
+ from Editeur import session
+ options = session.parse(sys.argv)
+ if options.code != None : code=options.code
+ if forceXML : options.withXSD=True
+
+ from InterfaceQT4.qtEficasSsIhm import AppliSsIhm
+ Eficas=AppliSsIhm(code=code, salome=0, multi=multi, langue=langue, labelCode=labelCode, genereXSD=genereXSD)
+ return Eficas
+
+
+def genereXSD(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()
+ texteXSD=monEficasSsIhm.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
+
+ fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
+ #if fichierCataTrunc[0:4] in ('cata','Cata'): fichierCataTrunc=fichierCataTrunc[4:]
+ #if fichierCataTrunc[0] in ('_','-') : fichierCataTrunc=fichierCataTrunc[1:]
+ fileXSD = fichierCataTrunc + '.xsd'
+
+ f = open( str(fileXSD), 'w')
+ f.write(str(texteXSD))
+
+def genereXML(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
+ fichier=options.comm[0]
+ 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'
+ monEditeur.XMLgenerator.gener(monEditeur.jdc)
+ monEditeur.XMLgenerator.writeDefault(fichierXML)
+
+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
+ fichier=options.comm[0]
+ if fichier==None :
+ print ('comm file is needed')
+ return
+ from .editorSsIhm import JDCEditorSsIhm
+ monEficasSsIhm = getEficasSsIhm(code=options.code)
+ monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
+ if not (monEditeur.jdc.isValid()) : print (monEditeur.getJdcRapport())
+ else : print ('Jdc is valid')
+ return monEditeur.jdc.isValid()
+
+def validateFonction(laFonction, debug=True):
+#-------------------------------
+ # ici un singleton pour avoir l editor, le catalogue et...
+ monEficasSsIhm = getEficasSsIhm(code='Essai')
+ monEditor=monEficasSsIhm.getEditor()
+ print ('_______ validateFonction', laFonction, laFonction.__name__)
+ from functools import wraps
+ from collections import OrderedDict
+ from inspect import getargspec
+ @wraps(laFonction)
+ 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
+ return fonctionValidee
+
+ #maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+ return fonctionValidee
+
+
+ return laFonction
+
+
+
+# --------------------------- 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 pour trouver les noms des groupes
+ 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.cata==None : options.cata=version
- if fichier==None : fichier=options.comm[0]
- if code == None : code=options.code
+ if version!=None and options.version == None : options.version=version
+ if fichier == None : fichier=options.comm[0]
+ if code == None : code=options.code
from .qtEficas import Appli
Eficas=Appli(code=code,salome=0,ssCode=ssCode,ssIhm=True,langue=langue)
return monEditeur
def lanceEficas_ssIhm_chercheGroupes(code=None,fichier=None,ssCode=None,version=None):
+ print ('deprecated')
monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version)
print((monEditeur.chercheGroupes()))
def lanceEficas_ssIhm_cherche_cr(code=None,fichier=None,ssCode=None,version=None):
+ print ('deprecated')
monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version)
print((monEditeur.jdc.cr))
def lanceEficas_ssIhm_reecrit(code=None,fichier=None,ssCode=None,version=None,ou=None,cr=False,debug=False,leger=False,langue='ang'):
+ print ('deprecated')
#print 'lanceEficas_ssIhm_reecrit', fichier
monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version,langue=langue)
if ou == None :
"""
Lance l'appli EFICAS pour trouver les noms des groupes
"""
+ print ('deprecated')
# Analyse des arguments de la ligne de commande
from Editeur import session
options=session.parse(sys.argv)
from .qtEficas import Appli
- #app = QApplication(sys.argv)
- #Eficas=Appli(code=code,ssCode=None,salome=0)
from .ssIhm import QWParentSSIhm
Eficas=QWParentSSIhm(code,version)
parameters=getJdcParameters(texte,macro)
return parameters
-#def getEficasSsIhm(code='Adao',versionCode='V0'):
-# from .qtEficasSsIhm import AppliSsIhm
-# Eficas=AppliSsIhm(code=code,ssCode=None,salome=0)
-# return Eficas
def getJdcParameters(jdc,macro):
"""
specified jdc text to a python dictionnary whose keys are the
names of the data of the macro.
"""
+ print ('deprecated')
context = {}
source = "def args_to_dict(**kwargs): return kwargs \n"
source+= "%s = _F = args_to_dict \n"%macro
This function loads the text from the specified JdC file. A JdC
file is the persistence file of Eficas (*.comm).
"""
+ print ('deprecated')
fcomm=open(filename,'r')
jdc = ""
for line in fcomm.readlines():
if __name__ == "__main__":
import sys
sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
- lanceEficas(code=None,fichier=None,ssCode=None,multi=True)
+ lanceEficas(code=None,multi=True)
#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()
import types,os,re,sys
import traceback
-import six
import inspect
from PyQt5.QtWidgets import QMessageBox, QFileDialog , QMenu, QPushButton, QTreeView ,QListView, QAbstractItemView
fichier=fichier[0]
if not(fichier == ""):
- ulfile = os.path.abspath(six.text_type(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"))
options = QFileDialog.ShowDirsOnly)
if not (directory == "") :
- absdir = os.path.abspath(six.text_type(directory))
+ absdir = os.path.abspath(directory)
self.appliEficas.maConfiguration.savedir = os.path.dirname(absdir)
self.lineEditVal.setText(directory)
self.LEvaleurPressed()
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'):
- spacerItem = QSpacerItem(20, 5, QSizePolicy.Minimum, QSizePolicy.Expanding)
- self.commandesLayout.addItem(spacerItem)
+ #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:
for node in self.node.children:
# non return mais continue car il faut tenir compte des blocs
if node.appartientAUnNoeudPlie==True : continue
- #print "je suis apres le if pour ",node.item.nom
widget=node.getPanelGroupe(self,self.maCommande)
#print ("widget pour ", node.item.nom, widget)
self.listeFocus.append(node.fenetre)
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)
- #self.monOptionnel.affiche(liste)
def ajouteMCOptionnelDesBlocs(self):
self.reaffiche(self.node)
def setDeplie(self):
- #print ('je passe ds setDeplie de groupe')
+ #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)
+
from __future__ import absolute_import
import re
-import six
-
import os
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)
- strRapport=six.text_type(self.parent.node.item.object.report())
+ strRapport=str(self.parent.node.item.object.report())
self.parent.editor._viewText(strAide+"\n"+strRapport, "JDC_RAPPORT")
def mousePressEvent(self, event):
QToolTip.showText(event.globalPos(),myToolTip )
else :
t=""
- texte=six.text_type(self.parent.node.item.object.report())
+ texte=self.parent.node.item.object.report().report()
deb=1
for l in texte.split('\n')[2:-2]:
if re.match('^[\t !]*$',l) : continue
a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
discretes
"""
- def __init__(self, parentAppli=None):
- QDialog.__init__(self,parent=parentAppli,flags=Qt.Window)
+ def __init__(self, appliEficas=None):
+ QDialog.__init__(self,parent=appliEficas,flags=Qt.Window)
self.setModal(True)
self.setupUi(self)
- self.parentAppli=parentAppli
+ self.appliEficas=appliEficas
self.verifieInstall()
self.code=None
self.buttonBox.accepted.disconnect(self.accept)
self.groupCodes.addButton(bouton)
except :
pass
- self.parentAppli.listeCode=self.parentAppli.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.parentAppli.code=codeUpper
+ self.appliEficas.code=codeUpper
try :
dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
l=os.listdir(dirCode)
self.boolOrdre==1;
self.RBOrdre.setChecked(True);
self.afficheOrdre()
- if self.editor.maConfiguration.closeFrameRechercheCommande == True : self.frameAffichage.close()
+ if self.editor.maConfiguration.closeFrameRechercheCommandeSurPageDesCommandes == True : self.frameAffichage.close()
if self.editor.widgetTree != None : self.editor.restoreSplitterSizes(2)
else: self.editor.restoreSplitterSizes(3)
a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
discretes
"""
- def __init__(self, parentAppli=None):
- QDialog.__init__(self,parentAppli)
+ def __init__(self, appliEficas=None):
+ QDialog.__init__(self,appliEficas)
self.setModal(True)
self.setupUi(self)
- self.parentAppli=parentAppli
+ self.appliEficas=appliEficas
self.installLangue()
self.code=None
self.pB_OK.clicked.connect(self.choisitLangue)
def installLangue(self):
- if self.parentAppli.langue == 'fr' : self.rbFrancais.setChecked(True)
+ if self.appliEficas.langue == 'fr' : self.rbFrancais.setChecked(True)
else : self.rbEnglish.setChecked(True)
def choisitLangue(self):
- if self.rbFrancais.isChecked() : self.parentAppli.langue='fr'
- else : self.parentAppli.langue ='ang'
+ if self.rbFrancais.isChecked() : self.appliEficas.langue='fr'
+ else : self.appliEficas.langue ='ang'
self.close()
except : pass
import types,os
-from six.moves import range
from PyQt5.QtCore import Qt
import traceback
from Extensions.i18n import tr
-import six
from PyQt5.QtWidgets import QDialog, QMessageBox, QFileDialog
from PyQt5.QtCore import QSize
if fn == "" : return
if fn == None : return (0, None)
- ulfile = os.path.abspath(six.text_type(fn))
+ ulfile = os.path.abspath(fn)
if self.editor != None :
self.editor.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
try:
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
# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2017 EDF R&D
+# 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
from InterfaceQT4.qtSaisie import SaisieValeur
from PyQt5.QtWidgets import QComboBox, QCompleter
-from PyQt5.QtCore import Qt
+from PyQt5.QtCore import Qt, QEvent
class MonWidgetCBCommun (Feuille):
self.determineChoix()
self.setValeursApresBouton()
self.CBChoix.currentIndexChanged.connect(self.choixSaisi)
- #self.CBChoix.lineEdit().setText(tr("Select"))
+ self.CBChoix.wheelEvent=self.wheelEvent
self.parentQt.commandesLayout.insertWidget(-1,self)
self.maCommande.listeAffichageWidget.append(self.CBChoix)
self.AAfficher=self.CBChoix
def setValeursApresBouton(self):
if self.objSimp.getValeur()==None :
self.CBChoix.setCurrentIndex(-1)
- #self.CBChoix.lineEdit().setStyleSheet(("QLineEdit {" " background:yellow;\n" "font: italic ;\n" " }\n" " "))
self.CBChoix.lineEdit().setText(tr("Select"))
return
valeur=self.objSimp.getValeur()
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()
+
+
class MonWidgetCB (Ui_WidgetCB, MonWidgetCBCommun):
def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- self.maListeDeValeur=monSimpDef.into
+ 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()
+ self.maListeDeValeur = node.item.getSdAvantDuBonType()
MonWidgetCBCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2017 EDF R&D
+# 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
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
+ 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,)
+ try : self.node.item.suggestion.append(valeur)
+ except : self.node.item.suggestion = (valeur,)
self.lineEditVal.setText('')
self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur));
"""
"""
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
- resize=0
- if node.item.getFr() != "" :
- self.labelDoc.setText(node.item.getFr())
- resize=1
- else : self.labelDoc.close()
-
- if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
+ # 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)
- resize=resize*1
+ self.LENom.setText(etape.sdnom)
else :
- self.LENom.setText("")
- resize=resize*1
- if resize :
+ 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 :
- try :
- self.bCatalogue.clicked.connect(self.afficheCatalogue)
- self.bAvant.clicked.connect(self.afficheAvant)
- self.bApres.clicked.connect(self.afficheApres)
- except :
- pass
+ self.bCatalogue.clicked.connect(self.afficheCatalogue)
+ self.bAvant.clicked.connect(self.afficheAvant)
+ self.bApres.clicked.connect(self.afficheApres)
- if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange)
-
- if self.editor.code in ['Adao','ADAO'] and self.editor.maConfiguration.closeFrameRechercheCommande==True :
- self.frameAffichage.close()
if self.editor.maConfiguration.closeFrameRechercheCommande==True :
+ self.frameAffichage.close()
self.closeAutreCommande()
- if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
- self.racine=self.node.tree.racine
- if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True)
self.setAcceptDrops(True)
self.etablitOrdre()
- if self.editor.code == "CARMELCND" :
+ 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
+ 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.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()
- spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding)
- #spacerItem = QSpacerItem(21, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)
- #self.commandesLayout.addItem(spacerItem)
- self.verticalLayoutCommande.addItem(spacerItem)
-
- #self.editor.restoreSplitterSizes()
#print "fin init de widget Commande"
# 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()
+ 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()
+ f = f.parentWidget()
if hasattr(f,'AAfficher') : f=f.AAfficher
if i != -1 : i=self.listeAffichageWidget.index(f)
else :i=self.listeAffichageWidget.index(f)
i=i+1
# si on boucle on perd l'ordre
- def afficheNieme(self,n):
- #print ('ds afficheNieme')
- self.listeAffichageWidget[n].setFocus(7)
-
def afficheSuivant(self,f):
#print ('ds afficheSuivant')
try :
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)
def focusInEvent(self,event):
#print "je mets a jour dans focusInEvent de monWidget Commande "
- if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
self.afficheOptionnel()
else : self.recentre()
self.inhibeExpand=False
- def reafficheSeulement(self,nodeAReafficher,index):
- #print ('ds reafficheSeulement', nodeAReafficher)
- parentNodeAReafficher=nodeAReafficher.parentQt
- index=parentNodeAReafficher.commandesLayout.indexOf(nodeAReafficher)
- oldFenetre=nodeAReafficher.node.fenetre
- newWidget=nodeAReafficher.node.getPanelGroupe(parentNodeAReafficher,self,index)
- nodeAReafficher.node.fenetre=newWidget
- oldFenetre.setParent(None)
- oldFenetre.close()
- oldFenetre.deleteLater()
- #print ("fin pour " , self.node.item.nom)
def recentre(self):
s.horizontalScrollBar().setSliderPosition(self.avantH)
s.verticalScrollBar().setSliderPosition(self.avantV)
- def rendVisibleNoeud(self,node):
- self.f=node.fenetre
- #print "dans rendVisibleNoeud",self.f
- QTimer.singleShot(1, self.rendVisible)
-
def rendVisible(self):
- #print "dans rendVisible",self.f
QApplication.processEvents()
self.f.setFocus(7)
self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
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")
+ 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)
+ 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
+
+
except : pass
import types,os,re
-from six.moves import range
pattern_name = re.compile(r'^[^\d\W]\w*\Z')
# Modules Eficas
--- /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 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)
+
from Extensions.i18n import tr
# Import des panels
+# PN 18 mai 2020 : affiche systematique des optionnels
class MonWidgetFactCommun(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 : ",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(insertIn,self)
- self.doitAfficherOptionnel=False
+ 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 leaveEvent(self,event):
#print "leaveEvent", self.node.item.getLabelText()[0]
- self.doitAfficherOptionnel=False
+ #self.doitAfficherOptionnel=False
QWidget.leaveEvent(self,event)
def delayAffiche(self):
parentOuAjouter.ajoutMC(texteListeNom)
+# def reaffiche(self, nodeAVoir=None):
+# 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()
+# Groupe.reaffiche(self,nodeAVoir)
+
+
+
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,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_WidgetFactTableau,MonWidgetFactCommun):
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)
- #print ('je passe dans FactTableau')
+ #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)
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,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(insertIn,self)
+ self.parentQt.commandesLayout.insertWidget(-1,self)
def traiteClicSurLabel(self,texte):
return
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)
import types,os
# Modules Eficas
-from six.moves import range
from PyQt5.QtWidgets import QCheckBox, QScrollBar, QFrame, QApplication, QLabel
from PyQt5.QtWidgets import QSizePolicy,QSpacerItem
from PyQt5.QtGui import QPalette, QFont
from desWidgetMatrice import Ui_desWidgetMatrice
-from six.moves import range
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtWidgets import QTableWidgetItem
from PyQt5.QtGui import QIcon
self.nbLigs=len(self.listeVariables)
self.nbCols=len(self.listeVariables)
- def nNbDeDistributions(self):
+ def nbDeDistributions(self):
jdc=self.node.item.object.jdc
etape=self.node.item.object.etape
self.listeVariables=jdc.getDistributions(etape)
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.parentQt=parentQt
def afficheOptionnel(self,liste,liste_rouge,MC):
- #print ('afficheOptionnel MonWidgetOptionnel', self,liste,MC)
+ #print ('afficheOptionnel MonWidgetOptionnel',self, liste,MC.node.item.nom)
self.vireLesAutres(MC)
if MC.node.item.nom in self.dicoMCWidgetOptionnel :
del self.dicoMCWidgetOptionnel[k]
def titre(self,MC):
- if self.parentCommande.node.editor.code in ['Adao','ADAO'] and self.parentCommande.node.editor.maConfiguration.closeFrameRechercheCommande==True :
+ if self.parentCommande.node.editor.maConfiguration.closeFrameRechercheCommande==True :
self.frameLabelCommande.close()
return
labeltext,fonte,couleur = self.parentCommande.node.item.getLabelText()
from desWidgetParam import Ui_WidgetParam
from InterfaceQT4.gereIcones import FacultatifOuOptionnel
-import six
from PyQt5.QtWidgets import QWidget, QMessageBox
from PyQt5.QtGui import QIcon
try :
exec(monTexte, contexte)
except (ValueError,TypeError, NameError,RuntimeError,ZeroDivisionError) as exc:
- self.LECommentaire.setText(tr("Valeur incorrecte: ")+six.text_type (exc))
+ self.LECommentaire.setText(tr("Valeur incorrecte: ")+str(exc))
return False
except :
self.LECommentaire.setText(tr("Valeur incorrecte "))
from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
from .politiquesValidation import PolitiquePlusieurs
-from six.moves import range
from PyQt5.QtWidgets import QScrollBar
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)
+ if len(self.listeAAfficher)*30 > 400 : self.setMinimumHeight(400)
+ else :
+ if self.monSimpDef.min > len(self.listeAAfficher) : self.setMinimumHeight(self.monSimpDef.min*30+30)
+ if self.monSimpDef.max > len(self.listeAAfficher) : self.setMinimumHeight(180)
+ else : self.setMinimumHeight(len(self.listeAAfficher)*30+30)
+ 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)):
import types,os,sys
-from six.moves import range
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMessageBox, QScrollArea
from PyQt5.QtCore import QTimer, QSize, Qt
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
+dicoLongueur = {2:90,3:100,4:123,5:145,6:160,float('inf'):200}
+hauteurMaxFenetre = 200
+nbMinimumDeQLineEdit=7
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=[]
+ #print ('MonWidgetPlusieursBase', nom)
+ self.inFocusOutEvent = False
+ self.changeUnLineEdit = False
+ self.nomLine = "lineEditVal"
+ self.inInit = True # pour l affichage quand on cree le lineEdit
+ self.indexDernierLabel = 0
+ self.numLineEditEnCours = 0
+ self.changeUnLineEdit = None
+ self.listeAffichageWidget = []
+ self.dictLE = {}
+ self.politique = PolitiquePlusieurs(node,parentQt)
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)
+ repIcon = self.node.editor.appliEficas.repIcon
+ fichierUp = os.path.join(repIcon, 'arrow_up.png')
+ iconUp = QIcon(fichierUp)
+ self.RBHaut.setIcon(iconUp)
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)
+ fichierDown = os.path.join(repIcon, 'arrow_down.png')
+ iconDown = QIcon(fichierDown)
+ self.RBBas.setIcon(iconArrowDown)
+ fichierExp = os.path.join(repIcon, 'file-explorer.png')
+ iconExp = QIcon(fichierExp)
+ self.BSelectFichier.setIcon(iconExp)
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)
+ iconMoins = QIcon (self.repIcon+"/MoinsBleu.png")
+ self.RBMoins.setIcon(iconMoins)
+ iconPlus = QIcon(self.repIcon+"/PlusBleu.png")
+ self.RBPlus.setIcon(iconPlus)
+ iconLoupe =QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
+ self.RBVoisListe.setIcon(iconLoupe)
+
+
+ self.vScrollBar = self.scrollArea.verticalScrollBar()
+
+ if self.monSimpDef.max < 7 :
+ hauteurMax = dicoLongueur[self.monSimpDef.max]
+ self.RBVoisListe.close()
+ self.RBMoins.close()
+ self.RBPlus.close()
+ aConstruire = self.monSimpDef.max
+ else :
+ hauteurMax = hauteurMaxFenetre
+ aConstruire = nbMinimumDeQLineEdit
self.setMinimumHeight(hauteurMax)
- self.finCommentaireListe()
+
+ for i in range(1,aConstruire): self.ajoutLineEdit()
self.parentQt.commandesLayout.insertWidget(-1,self)
+
self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
- self.AAfficher=self.lineEditVal1
- self.inInit=False
+ self.AAfficher = self.lineEditVal1
+ self.inInit = False
# PNPN a completer __ si tuple le type des tuples sinon le tuple
+ self.finCommentaireListe()
self.monCommentaireLabel.setText(self.finCommentaireListe())
self.scrollArea.leaveEvent = self.leaveEventScrollArea
+
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)
+ # uniquement appele a l initialisation.
+ # les lineEdit ont deja ete crees
self.listeValeursCourantes=self.node.item.getListeValeurs()
index=1
for valeur in self.listeValeursCourantes :
- val=self.politique.getValeurTexte(valeur)
- nomLineEdit="lineEditVal"+str(index)
+ val = self.politique.getValeurTexte(valeur)
+ nomLineEdit = "lineEditVal"+str(index)
if hasattr(self,nomLineEdit) :
- courant=getattr(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 : 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,):
+ #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
self.indexDernierLabel=self.indexDernierLabel+1
nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
if hasattr(self,nomLineEdit) :
+ #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
self.indexDernierLabel=self.indexDernierLabel-1
return
nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
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)
+ # fait dans le init pour pouvoir passer le numero du LE mai 20
+ #nouveauLE.returnPressed.connect(self.changeValeur)
setattr(self,nomLineEdit,nouveauLE)
self.listeAffichageWidget.append(nouveauLE)
self.etablitOrdre()
- if valeur != None : nouveauLE.setText(str(valeur))
+ 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)
+ #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
def etablitOrdre(self):
i=0
# si on boucle on perd l'ordre
+
def rendVisibleLigne(self):
QApplication.processEvents()
self.estVisible.setFocus()
return self.finCommentaireListe()
def ajout1Valeur(self,valeur=None):
+ #import traceback
+ #traceback.print_stack()
if valeur == None : return
liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
if validite == 0 : return
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
+ # car alors le temps de verification devient prohibitif reconstructution 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 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)
+ validite,comm,comm2 = self.politique.ajoutNTuple(listeComplete)
if not validite :
- self.editor.affiche_infos(texte,Qt.red)
+ self.editor.afficheInfos(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)
- else : indexDernierRempli=0
-
self.politique.recordValeur(listeComplete)
indexDernierRempli=0
indexDernierRempli = indexDernierRempli + 1
- def changeValeur(self,changeDePlace=True,oblige=False):
+ def changeValeur(self,changeDePlace=True,oblige=False,numero=None):
+ #print ('monWidgetPlusieursBase changeValeur')
+ self.changeUnLineEdit = 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 != "" :
+ # c est ce qui est long mais permet d avoir
+ # une bonne connaissance des erreurs
+ # et de traiter le changede place
commentaire=self.ajout1Valeur(valeur)
if (commentaire != None ):
self.editor.afficheInfos(commentaire,Qt.red)
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)
+ self.node.item.setValeur(self.listeValeursCourantes)
+ #print (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)
+ #print ('monWidgetPlusBase leaveEventScrollArea', self.changeUnLineEdit)
+ if self.changeUnLineEdit : self.changeValeur(changeDePlace=False)
+ QScrollArea.leaveEvent(self.scrollArea,event)
+
+
+
-# Avertissement quand on quitte le widget
import types,os
# Modules Eficas
-from six.moves import range
from PyQt5.QtWidgets import QCheckBox, QScrollBar, QFrame, QApplication, QLabel
from PyQt5.QtWidgets import QSizePolicy,QSpacerItem
from PyQt5.QtGui import QPalette, QFont
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)")
+ else : nouveauCB.setStyleSheet("background:rgb(240,240,240)")
self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
nouveauCB.setFocus()
setattr(self,nomCB,nouveauCB)
- 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()
from .gereListe import MonLabelListeClic
from Extensions.i18n import tr
-from six.moves import range
from PyQt5.QtWidgets import QFrame, QApplication, QScrollBar
from PyQt5.QtCore import QTimer, QSize, Qt
from PyQt5.QtGui import QIcon, QPalette
self.nomLine="LEResultat"
self.listeLE=[]
self.ouAjouter=0
- self.NumLineEditEnCours=0
+ self.numLineEditEnCours=0
self.alpha=0
self.filtre=""
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parent,commande)
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')
self.ajoutLE(0)
return
self.filtreListe()
- if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
- else : self.setMinimumHeight(len(self.listeAAfficher)*30)
+ if len(self.listeAAfficher)*30 > 400 : self.setMinimumHeight(400)
+ else :
+ if self.monSimpDef.min > len(self.listeAAfficher) : self.setMinimumHeight(self.monSimpDef.min*30+30)
+ if self.monSimpDef.max > len(self.listeAAfficher) : self.setMinimumHeight(180)
+ else : self.setMinimumHeight(len(self.listeAAfficher)*30+30)
+ self.adjustSize()
self.politique=PolitiquePlusieurs(self.node,self.editor)
for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
setattr(self,nomLE,nouveauLE)
def ajoutLineEdit(self):
- print ('ajoutLineEdit')
+ #print ('ajoutLineEdit')
self.indexDernierLabel=self.indexDernierLabel+1
self.ajoutLEResultat (self.indexDernierLabel)
self.changeValeur()
self.setValeurs(first=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):
def boutonclic(self):
for valeur in self.dict_bouton:
if self.dict_bouton[valeur].isChecked():
- #print "dans boutonclic is checked", valeur, type(valeur)
SaisieValeur.LEvaleurPressed(self,valeur)
self.reaffiche()
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.parentQt.commandesLayout.insertWidget(-1,self,1)
self.setFocusPolicy(Qt.StrongFocus)
- self.lineEditVal.returnPressed.connect(self.LEvaleurPressed)
+ if monSimpDef.homo == 'constant' : self.lineEditVal.setReadOnly(True)
+ if monSimpDef.homo == 'constant' : self.lineEditVal.setStyleSheet("background:rgb(210,235,235);\n" "border:0px;")
+ else : self.lineEditVal.returnPressed.connect(self.LEvaleurPressed)
self.AAfficher=self.lineEditVal
self.maCommande.listeAffichageWidget.append(self.lineEditVal)
self.lineEditVal.focusInEvent=self.monFocusInEvent
self.LEvaleurPressed()
QLineEdit.focusOutEvent(self.lineEditVal,event)
- #def showEvent(self, event):
- # if self.prendLeFocus==1 :
- # self.activateWindow()
- # self.lineEditVal.setFocus()
- # self.prendLeFocus=0
- # QWidget.showEvent(self,event)
def setValeurs(self):
#print ("dans setValeurs")
self.setValeurs()
self.reaffiche()
- #if self.objSimp.parent.nom == "MODEL" :
- # if self.objSimp.isValid():
- # self.objSimp.parent.change_fichier="1"
- #self.node.item.parent.buildInclude(None,"")
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)
import types,os
-from six.moves import range
from PyQt5.QtCore import Qt
# Modules Eficas
setattr(self,nomCol,objCol)
spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.LATitre.addItem(spacerItem)
+
+
+
+# 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 __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 valide,commentaire,commentaire2,listeRetour
def ajoutNTuple(self,liste):
- listeRetour=[]
commentaire="Nouvelles valeurs acceptee"
commentaire2=""
- print (self.node.item.valideListePartielle)
valide=self.node.item.valideListePartielle(None,liste)
+ print ('uuuuuuuuuuu',valide)
if not valide :
commentaire2=self.node.item.infoErreurListe()
- return valide,commentaire,commentaire2,listeRetour
+ return valide,commentaire,commentaire2
def recordValeur(self,liste,dejaValide=True):
ancienneVal = self.node.item.getValeur()
-#!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf-8 -*-
# Copyright (C) 2007-2017 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 __future__ import absolute_import
-from __future__ import print_function
-try :
- from builtins import str
-except : pass
-
-import os, sys
-import six
-
-
-from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QBoxLayout, QMenu, QAction, QMessageBox
-from PyQt5.QtGui import QIcon
-from PyQt5.QtCore import Qt, QSize
-
-
-from Editeur import session
-from myMain import Ui_Eficas
-from InterfaceQT4.viewManager import MyViewManager
-from InterfaceQT4.qtEficasSsIhm import AppliSsIhm
-
-from Extensions.i18n import tr
-from Extensions.eficas_exception import EficasException
-from Extensions import param2
-
-
-class Appli(AppliSsIhm,Ui_Eficas,QMainWindow):
- """
- Class implementing the main user interface.
- """
- def __init__(self,code=None,salome=1,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=False,versionCode=None):
- """
- Constructor
- """
- if ssIhm == True :
- print ('mauvaise utilisation de la classe Appli. Utiliser AppliSsIm SVP')
- exit()
-
- AppliSsIhm.__init__(self,code,salome,parent,ssCode,multi,langue,ssIhm=True,versionCode=None)
- QMainWindow.__init__(self,parent)
- Ui_Eficas.__init__(self)
-
- self.ssIhm=False
- self.multi=multi
- self.demande=multi # voir PSEN
-
- if self.multi == False :
- self.definitCode(code,ssCode)
- if code==None: return
- else :
- print ('a programmer')
-
- self.suiteTelemac=False
- if hasattr (self, 'maConfiguration') :
- if self.maConfiguration.force_langue :
- 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
- from Extensions import localisation
- app=QApplication
- if hasattr (self, 'maConfiguration') : localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
- self.setupUi(self)
-
- #if parent != None : self.parentCentralWidget = parent.centralWidget()
- #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 self.code in ['MAP',] : self.resize(1440,self.height())
- #else : 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 :
- self.enleverActionsStructures()
- if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverParametres :
- self.enleverParametres()
- if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverSupprimer :
- self.enleverSupprimer()
-
-
- self.myQtab.removeTab(0)
- self.blEnteteGlob = QBoxLayout(2,self.frameEntete)
- self.blEnteteGlob.setSpacing(0)
- self.blEnteteGlob.setContentsMargins(0,0,0,0)
-
- self.blEntete = QBoxLayout(0)
- self.blEntete.insertWidget(0,self.toolBar)
- self.blEntete.insertWidget(0,self.menubar)
- self.blEnteteGlob.insertLayout(0,self.blEntete)
-
-
-
- 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()
-
- eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-
- self.viewmanager = MyViewManager(self)
- self.recentMenu=QMenu(tr('&Recents'))
- #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
-
- # actionARemplacer ne sert que pour l insert Menu
- self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
- self.menuFichier.removeAction(self.actionARemplacer)
- self.connecterSignaux()
- self.toolBar.addSeparator()
-
- if self.code != None : self.construitMenu()
-
- self.setWindowTitle(self.VERSION_EFICAS)
- try :
- #if 1 :
- # print ('attention try devient if 1')
- self.ouvreFichiers()
- except EficasException as exc:
- #except:
- # print "je suis dans le except"
- if self.salome == 0 : exit()
-
- #self.adjustSize()
-
- def closeEntete(self):
- self.menuBar().close()
- self.toolBar.close()
- self.frameEntete.close()
-
- def definitCode(self,code,ssCode) :
- 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()
- if self.code == None:return # pour le cancel de la fenetre choix code
- AppliSsIhm.definitCode(self,self.code,ssCode)
-
- #PN --> pb d exception qui font planter salome
- # plus supporte en python 3
- #app=QApplication
- #if hasattr(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","menuN1"):
- 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)
- if self.code.upper() in Appli.__dict__:
- Appli.__dict__[self.code.upper()](self,)
- if self.suiteTelemac : self.lookSuiteTelemac()
- self.metMenuAJourUtilisateurs()
- if hasattr (self, 'maConfiguration') and self.maConfiguration.ajoutExecution :
- self.ajoutExecution()
-
- def initAides(self):
- #print "je passe la"
- repAide=os.path.dirname(os.path.abspath(__file__))
- fileName='index.html'
- self.docPath=repAide+"/../Aide"
- if hasattr(self,'maConfiguration') and hasattr(self.maConfiguration,'docPath') : self.docPath=self.maConfiguration.docPath
- if hasattr(self,'maConfiguration') and hasattr(self.maConfiguration,'fileName'):fileName=self.maConfiguration.fileName
- 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.actionCode.setEnabled(True)
- self.menuAide.addAction(self.actionCode)
-
- def newN1(self):
- ssCode=None
- code="PSEN_N1"
- self.cleanPath()
- dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
- sys.path.insert(0,dirCode)
- self.code=code
- self.definitCode(code,ssCode)
- self.initRecents()
- self.multi=True
- self.demande=False
- self.fileNew()
-
- def newPSEN(self):
- ssCode=None
- code="PSEN"
- self.cleanPath()
- dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
- sys.path.insert(0,dirCode)
- self.code=code
- self.definitCode(code,ssCode)
- self.multi=True
- self.demande=False
- self.fileNew()
-
- def ajoutN1(self):
- return
- self.menuN1 = self.menubar.addMenu(tr("Process Output"))
- self.actionN1 = QAction(self)
- self.actionN1.setText(tr("Process Output"))
- self.menuN1.addAction(self.actionN1)
- self.actionN1.triggered.connect(self.newN1)
-
-
- if hasattr(self,'actionOpenProcess'):return
-
- self.actionOpenProcess = QAction(self)
- self.actionOpenProcess.setText(tr("Open Process_Output File"))
- self.menuN1.addAction(self.actionOpenProcess)
- self.actionOpenProcess.triggered.connect(self.openProcess)
-
- def ajoutExecution(self):
- 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)
- else :
- 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.actionExecution.setText(tr("Run"))
- self.actionExecution.triggered.connect(self.run)
-
- def ajoutSauveExecution(self):
- self.actionSaveRun = QAction(self)
- icon7 = QIcon(self.repIcon+"/export_MAP.png")
- self.actionSaveRun.setIcon(icon7)
- self.actionSaveRun.setObjectName("actionSaveRun")
- self.menuExecution.addAction(self.actionSaveRun)
- if not(self.actionSaveRun in self.toolBar.actions()):
- self.toolBar.addAction(self.actionSaveRun)
- self.actionSaveRun.setText(tr("Save Run"))
- self.actionSaveRun.triggered.connect(self.saveRun)
-
- def griserActionsStructures(self):
- self.actionCouper.setEnabled(False)
- self.actionColler.setEnabled(False)
- self.actionCopier.setEnabled(False)
- self.actionSupprimer.setEnabled(False)
-
- def enleverActionsStructures(self):
- self.toolBar.removeAction(self.actionCopier)
- self.toolBar.removeAction(self.actionColler)
- self.toolBar.removeAction(self.actionCouper)
- self.menuEdition.removeAction(self.actionCouper)
- self.menuEdition.removeAction(self.actionCopier)
- self.menuEdition.removeAction(self.actionColler)
-
-
- def enleverParametres(self):
- self.toolBar.removeAction(self.actionParametres)
- self.menuJdC.removeAction(self.actionParametres)
-
- def enleverSupprimer(self):
- self.toolBar.removeAction(self.actionSupprimer)
-
- def enlevernewInclude(self):
- self.actionNouvel_Include.setVisible(False)
-
- def enleverRechercherDsCatalogue(self):
- self.actionRechercherDsCatalogue.setVisible(False)
-
- def connectRechercherDsCatalogue(self):
- if hasattr(self,'rechercherDejaLa') : return
- self.rechercherDejaLa=True
- self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
-
- def ajoutSortieComplete(self):
- if hasattr(self,'actionSortieComplete') : return
- self.actionSortieComplete = QAction(self)
- self.actionSortieComplete.setText(tr("Sortie Complete"))
- self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieComplete)
- self.actionSortieComplete.triggered.connect(self.handleSortieComplete)
-
-
- def MT(self):
- self.enlevernewInclude()
- self.toolBar.addSeparator()
-
-
- def ZCRACKS(self):
- self.enlevernewInclude()
- self.toolBar.addSeparator()
- self.ajoutExecution()
-
- self.menuOptions = self.menubar.addMenu("menuOptions")
- self.menuOptions.addAction(self.actionParametres_Eficas)
- self.menuOptions.setTitle(tr("Options"))
-
- def ADAO(self):
- self.enleverActionsStructures()
- self.enlevernewInclude()
-
- def ASTER(self) :
- self.menuTraduction = self.menubar.addMenu("menuTraduction")
- self.menuTraduction.addAction(self.actionTraduitV11V12)
- self.menuTraduction.addAction(self.actionTraduitV10V11)
- self.menuTraduction.addAction(self.actionTraduitV9V10)
- self.menuTraduction.setTitle(tr("Traduction"))
-
- self.menuFichier.addAction(self.actionSauveLigne)
-
- self.menuOptions = self.menubar.addMenu("menuOptions")
- self.menuOptions.addAction(self.actionParametres_Eficas)
- self.menuOptions.addAction(self.actionLecteur_Pdf)
- self.menuOptions.setTitle(tr("Options"))
-
- def CARMEL3D(self):
- #if self.salome == 0 : return
- self.enlevernewInclude()
- self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
- self.menuMesh.setObjectName("Mesh")
- self.menuMesh.addAction(self.actionChercheGrpMaille)
- #self.griserActionsStructures()
-
- def CARMELCND(self):
- self.enlevernewInclude()
- self.enleverRechercherDsCatalogue()
- self.ajoutExecution()
- self.ajoutSauveExecution()
- self.griserActionsStructures()
-
- def MAP(self):
- self.enlevernewInclude()
- self.toolBar.addSeparator()
- self.ajoutExecution()
- self.ajoutSauveExecution()
- self.menuOptions = self.menubar.addMenu("menuOptions")
- self.menuOptions.addAction(self.actionParametres_Eficas)
- self.menuOptions.setTitle(tr("Options"))
-
- def MAPIDENTIFICATION(self):
- self.enlevernewInclude()
- self.enleverSupprimer()
- #self.ajoutExecution()
- self.enleverRechercherDsCatalogue()
- self.enleverActionsStructures()
- self.enleverParametres()
-
- def PSEN(self):
- if self.first: self.first=0
- try : self.action_Nouveau.triggered.disconnect(self.fileNew)
- except : pass
- try : self.action_Nouveau.triggered.disconnect(self.newPSEN)
- except : pass
-
- self.action_Nouveau.triggered.connect(self.newPSEN)
- self.enleverActionsStructures()
- self.enleverParametres()
- self.enleverRechercherDsCatalogue()
- self.enlevernewInclude()
- self.ajoutExecution()
- self.ajoutN1()
- self.ajoutHelpPSEN()
- self.ajoutIcones()
-
- def PSEN_N1(self):
- self.enleverActionsStructures()
- self.enleverParametres()
- self.enleverRechercherDsCatalogue()
- self.enlevernewInclude()
- self.ajoutExecution()
- self.ajoutIcones()
-
- def TELEMAC(self):
- self.enleverActionsStructures()
- self.enlevernewInclude()
- self.connectRechercherDsCatalogue()
- self.ajoutSortieComplete()
-
- def lookSuiteTelemac(self):
- self.enleverActionsStructures()
- self.enlevernewInclude()
- self.enleverParametres()
- self.enleverSupprimer()
- self.enleverRechercherDsCatalogue()
-
- def ajoutHelpPSEN(self):
- self.actionParametres_Eficas.setText('Help PSEN')
- self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
-
-
-
- def ChercheGrpMesh(self):
- Msg,listeGroup=self.ChercheGrpMeshInSalome()
- if Msg == None :
- self.viewmanager.handleAjoutGroup(listeGroup)
- else :
- print ("il faut gerer les erreurs")
-
- def ChercheGrpMaille(self):
- # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
- try:
- Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salome
- #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salome si ligne precedente commentee
- except:
- raise ValueError('Salome non ouvert')
- if Msg == None :
- self.viewmanager.handleAjoutGroup(listeGroup)
- else :
- print ("il faut gerer les erreurs")
-
-
- def ChercheGrp(self):
- #Msg,listeGroup=self.ChercheGrpMailleInSalome()
- #if Msg == None :
- # self.viewmanager.handleAjoutGroup(listeGroup)
- #else :
- #print "il faut gerer "
- pass
-
-
- def ajoutIcones(self) :
- # Pour pallier les soucis de repertoire d icone
- #print self.repIcon
- icon = QIcon(self.repIcon+"/new_file.png")
- self.action_Nouveau.setIcon(icon)
- icon1 = QIcon(self.repIcon+"/ouvrir.png")
- self.actionOuvrir.setIcon(icon1)
- icon2 = QIcon(self.repIcon+"/save.png")
- self.actionEnregistrer.setIcon(icon2)
- icon6 = QIcon(self.repIcon+"/delete.png")
- self.actionSupprimer.setIcon(icon6)
- icon7 = QIcon(self.repIcon+"/roue.png")
- self.actionExecution.setIcon(icon7)
-
-
-
-
- def connecterSignauxQT4(self) :
- self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
-
- self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
- self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.newInclude)
- self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
- self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
- self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
- self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
- self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
- self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
-
- self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
- self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
- self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
-
- self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
- self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
- self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
- self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
- self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
- self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.handleDeplier)
-
- self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
- self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
- self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
- self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
-
-
-
-
- # Pour Aster
- self.actionTraduitV9V10 = QAction(self)
- self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
- self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
- self.actionTraduitV10V11 = QAction(self)
- self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
- self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
- self.actionTraduitV11V12 = QAction(self)
- self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
- self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
- self.actionSauveLigne = QAction(self)
- self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
-
- #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
- self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
- self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
- self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
- self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
- self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
-
-
- # Pour Carmel
- self.actionChercheGrpMaille = QAction(self)
- self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
- self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
-
- # Pour CarmelCND
- self.actionChercheGrp = QAction(self)
- self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
- self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
-
- # Pour Aide
- self.actionCode = QAction(self)
- self.actionCode.setText(tr("Specificites Maille"))
- self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
-
- def connecterSignaux(self) :
-
- self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
- self.action_Nouveau.triggered.connect(self.fileNew)
- self.actionNouvel_Include.triggered.connect(self.newInclude)
- self.actionOuvrir.triggered.connect(self.fileOpen)
- self.actionEnregistrer.triggered.connect(self.fileSave)
- self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
- self.actionFermer.triggered.connect(self.fileClose)
- self.actionFermer_tout.triggered.connect(self.fileCloseAll)
- self.actionQuitter.triggered.connect(self.fileExit)
-
- self.actionEficas.triggered.connect(self.aidePPal)
- self.actionVersion.triggered.connect(self.version)
- self.actionParametres.triggered.connect(self.gestionParam)
- self.actionCommentaire.triggered.connect(self.ajoutCommentaire)
-
- self.actionCouper.triggered.connect(self.editCut)
- self.actionCopier.triggered.connect(self.editCopy)
- self.actionColler.triggered.connect(self.editPaste)
- self.actionSupprimer.triggered.connect(self.supprimer)
- self.actionRechercher.triggered.connect(self.rechercher)
- self.actionDeplier_replier.triggered.connect(self.handleDeplier)
-
- self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
- self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
- self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
- self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
- self.actionAfficher_l_Arbre.triggered.connect(self.ouvreArbre)
- self.actionCacher_l_Arbre.triggered.connect(self.fermeArbre)
-
-
- # Pour Aster
- self.actionTraduitV9V10 = QAction(self)
- self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
- self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
- self.actionTraduitV10V11 = QAction(self)
- self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
- self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
- self.actionTraduitV11V12 = QAction(self)
- self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
- self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
- self.actionSauveLigne = QAction(self)
- self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
-
- #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
- self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
- self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
- self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
- self.actionSauveLigne.triggered.connect(self.sauveLigne)
-
- # Pour Carmel
- self.actionChercheGrpMaille = QAction(self)
- self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
-
- # Pour CarmelCND
- self.actionChercheGrp = QAction(self)
- self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
- self.actionChercheGrp.triggered.connect(self.ChercheGrp)
-
- # Pour Aide
- self.actionCode = QAction(self)
- self.actionCode.setText(tr("Specificites Maille"))
- self.actionCode.triggered.connect(self.aideCode)
-
-
- def handleDeplier(self):
- self.viewmanager.handleDeplier()
-
- def ajoutCommentaire(self):
- self.viewmanager.ajoutCommentaire()
-
- def ouvreFichiers(self) :
- # Ouverture des fichiers de commandes donnes sur la ligne de commande
- cwd=os.getcwd()
- self.dir=cwd
- for study in session.d_env.studies:
- os.chdir(cwd)
- d=session.getUnit(study,self)
- self.viewmanager.handleOpen(fichier=study["comm"],units=d)
-
-
- def getSource(self,file):
- # appele par Editeur/session.py
- import convert
- p=convert.plugins['python']()
- p.readfile(file)
- texte=p.convert('execnoparseur')
- return texte
-
- def initPatrons(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 (not hasattr(self,"menuPatrons")):
- 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.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)
- # self.Patrons.setItemParameter(id,idx)
- 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)
- 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]
-
-
- def addToRecentListQT4(self, fn):
- """
- Public slot to add a filename to the list of recently opened files.
-
- @param fn name of the file to be added
- """
- self.recent.removeAll(fn)
- self.recent.prepend(fn)
- if len(self.recent) > 9:
- self.recent = self.recent[:9]
- index=0
- self.sauveRecents()
-
- def sauveRecents(self) :
- 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 :
+import logging
+import os
+logger=logging.getLogger()
+
+def initialise(flog=None):
+ if flog == None :
+ #MonHome=os.environ['HOME']
+ MonHome=os.path.expanduser("~")
+ MaDir=MonHome+"/Eficas_install"
+ try :
+ os.mkdir(MaDir)
+ except :
pass
- try :
- f.close()
- except :
- pass
-
-
-
- def traductionV11V12(self):
- from .gereTraduction import traduction
- traduction(self.maConfiguration.repIni,self.viewmanager,"V11V12")
-
- def traductionV10V11(self):
- from .gereTraduction import traduction
- traduction(self.maConfiguration.repIni,self.viewmanager,"V10V11")
-
- def traductionV9V10(self):
- from .gereTraduction import traduction
- traduction(self.maConfiguration.repIni,self.viewmanager,"V9V10")
-
- def version(self) :
- from .monVisu import DVisu
- titre = tr("version ")
- monVisuDialg=DVisu(parent=self,fl=0)
- monVisuDialg.setWindowTitle(titre)
- if self.code != None : monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
- else : monVisuDialg.TB.setText(self.VERSION_EFICAS )
- monVisuDialg.adjustSize()
- monVisuDialg.show()
-
- def aidePPal(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)
- except:
- 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)
- except:
- 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)
- except:
- #else:
- QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
-
-
- def optionEditeur(self) :
- try :
- name='monOptions_'+self.code
- except :
- QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
- return
- try :
- #if 1:
- optionCode=__import__(name)
- except :
- #else :
- 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 optionPdf(self) :
- from monOptionsPdf import OptionPdf
- monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.maConfiguration)
- monOption.show()
-
- def handleSortieComplete(self):
- return self.viewmanager.saveCompleteCurrentEditor()
-
- def handleShowRecentMenu(self):
- """
- Private method to set up recent files menu.
- """
- self.recentMenu.clear()
-
- for rp in self.recent:
- id = self.recentMenu.addAction(rp)
- self.ficRecents[id]=rp
- id.triggered.connect(self.handleOpenRecent)
- self.recentMenu.addSeparator()
- self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
-
- def handleOpenPatrons(self):
- idx=self.sender()
- fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
- self.viewmanager.handleOpen(fichier=fichier, patron = 1)
-
- def handleOpenRecent(self):
- idx=self.sender()
- fichier=self.ficRecents[idx]
- self.viewmanager.handleOpen(fichier=fichier, patron =0 )
-
- def handleClearRecent(self):
- self.recent = QStringList()
- self.sauveRecents()
-
- def handleRechercherDsCatalogue(self):
- if not self.viewmanager : return
- self.viewmanager.handleRechercherDsCatalogue()
-
- def fileNew(self):
- try:
- self.viewmanager.newEditor()
- except EficasException as exc:
- msg = six.text_type(exc)
- if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
-
- def openProcess(self):
- ssCode=None
- code="PSEN_N1"
- self.cleanPath()
- dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
- sys.path.insert(0,dirCode)
- self.code=code
- self.definitCode(code,ssCode)
- self.multi=True
- self.demande=False
- self.initRecents()
- self.fileOpen()
-
-
- def fileOpen(self):
- try:
- self.viewmanager.handleOpen()
- except EficasException as exc:
- msg = six.text_type(exc)
- if msg != "":
- QMessageBox.warning(self, tr(u"Erreur"), msg)
-
- def sauveLigne(self):
- return self.viewmanager.sauveLigneCurrentEditor()
-
- def fileSave(self):
- return self.viewmanager.saveCurrentEditor()
-
- def fileSaveAs(self):
- return self.viewmanager.saveAsCurrentEditor()
-
- def fileClose(self):
- self.viewmanager.handleClose(texte='&Fermer')
-
- def fileCloseAll(self):
- self.viewmanager.handleCloseAll(texte='&Fermer')
-
- def fileExit(self):
- # On peut sortir sur Abort
- res=self.viewmanager.handleCloseAll()
- if (res != 2) :
- self.close()
- return res
-
- def editCopy(self):
- self.viewmanager.handleEditCopy()
-
- def editCut(self):
- self.viewmanager.handleEditCut()
-
- def editPaste(self):
- self.viewmanager.handleEditPaste()
-
- def rechercher(self):
- self.viewmanager.handleRechercher()
-
- def run(self):
- self.viewmanager.run()
-
- def saveRun(self):
- self.viewmanager.saveRun()
-
-
- def supprimer(self):
- self.viewmanager.handleSupprimer()
-
- def jdcFichierSource(self):
- self.viewmanager.handleViewJdcFichierSource()
-
- def jdcRapport(self):
- self.viewmanager.handleViewJdcRapport()
-
- def jdcRegles(self):
- self.viewmanager.handleViewJdcRegles()
-
- def gestionParam(self):
- self.viewmanager.handleGestionParam()
-
- def visuJdcPy(self):
- self.viewmanager.handleViewJdcPy()
-
- def ouvreArbre(self):
- self.viewmanager.ouvreArbre()
-
- def fermeArbre(self):
- self.viewmanager.fermeArbre()
-
- def newInclude(self):
- self.viewmanager.newIncludeEditor()
-
- 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)
- except :
- pass
- for pathCode in self.listeAEnlever:
- try:
- sys.path.remove(aEnlever)
- except :
- pass
-
-
- def closeEvent(self,event):
- 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
- if not hasattr(self.mesScripts[self.code],'dict_menu') : return
- for monMenu in iter(self.mesScripts[self.code].dict_menu.items()) :
- titre,lesFonctions= monMenu
- 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)
- #action.triggered.connect(self.appelleFonctionUtilisateur)
- self.menuOptions.addAction(action)
- self.lesFonctionsUtilisateurs[action]=(laFonctionUtilisateur, lesArguments)
- self.menuOptions.triggered.connect(self.handleFonctionUtilisateur)
-
- def handleFonctionUtilisateur(self,action) :
- (laFonctionUtilisateur, lesArguments)=self.lesFonctionsUtilisateurs[action]
- self.viewmanager.handleFonctionUtilisateur(laFonctionUtilisateur, lesArguments)
-
-if __name__=='__main__':
-
- # Modules Eficas
- rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','Adao')))
- sys.path.append(rep)
- from Adao import prefs
- from Adao import prefs_Adao
- #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
-
- from Editeur import import_code
- from Editeur import session
-
- # Analyse des arguments de la ligne de commande
- options=session.parse(sys.argv)
- code=options.code
-
-
- app = QApplication(sys.argv)
- #app.setMainWidget(mw) (qt3)
- Eficas=Appli()
- Eficas.show()
-
- #mw.ouvreFichiers()
- #mw.show()
-
- res=app.exec_()
- sys.exit(res)
+ try :
+ os.listdir(MaDir)
+ flog=MaDir+"/convert.log"
+ except :
+ flog='/tmp/convert.log'
+
+ hdlr=logging.FileHandler(flog,'w')
+ formatter = logging.Formatter('%(levelname)s: %(message)s')
+ hdlr.setFormatter(formatter)
+ logger.addHandler(hdlr)
+ logger.setLevel(logging.INFO)
+ return hdlr
+
+
+def ferme (hdlr) :
+ logger.removeHandler(hdlr)
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+
from __future__ import absolute_import
from __future__ import print_function
try :
except : pass
import os, sys
-import six
from Extensions.eficas_exception import EficasException
from Extensions import param2
from InterfaceQT4.getVersion import getEficasVersion
from InterfaceQT4.viewManagerSsIhm import MyViewManagerSsIhm
-#from editorSsIhm import JDCEditorSsIhm
+
+from Editeur import session
class AppliSsIhm:
"""
Class implementing the main user interface.
"""
- def __init__(self,code=None,salome=1,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=True,versionCode=None):
+ def __init__(self,code=None,salome=1,parent=None,multi=False,langue='fr',ssIhm=True,labelCode=None,genereXSD=False):
"""
Constructor
"""
version=getEficasVersion()
self.VERSION_EFICAS="Eficas QT5 Salome " + version
- self.versionCode=versionCode
+ self.labelCode=labelCode
self.salome=salome
self.ssIhm=True
self.code=code
+ self.genereXSD=genereXSD
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 session.d_env.labelCode : self.labelCode=session.d_env.labelCode
+ self.withXSD=session.d_env.withXSD
+
if self.salome:
import Accas
try :
else : self.langue="ang"
if self.multi == False :
- self.definitCode(code,ssCode)
+ self.definitCode(code,None)
if code==None: return
self.suiteTelemac=False
self.ssCode=ssCode
if self.code == None:return # pour le cancel de la fenetre choix code
- name='prefs_'+self.code
- prefsCode=__import__(name)
+ try :
+ name='prefs_'+self.code
+ prefsCode=__import__(name)
+ self.repIni=prefsCode.repIni
+ except :
+ self.repIni=os.path.dirname(os.path.abspath(__file__))
+
- self.repIni=prefsCode.repIni
if ssCode != None :
- self.format_fichier= ssCode #par defaut
- prefsCode.NAME_SCHEME=ssCode
+ self.formatFichierOut = ssCode #par defaut
+ prefsCode.NAME_SCHEME = ssCode
else :
- self.format_fichier="python" #par defaut
+ self.formatFichierIn = "python" #par defaut
+ self.formatFichierOut = "python" #par defaut
nameConf='configuration_'+self.code
- configuration=__import__(nameConf)
- self.maConfiguration = configuration.make_config(self,prefsCode.repIni)
+ try :
+ 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)
if hasattr (self,'maConfiguration') and self.maConfiguration.translatorFichier :
from Extensions import localisation
localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
+ if self.withXSD : self.maConfiguration.withXSD=True
def getSource(self,file):
def initEditor(self,fichier = None,jdc = None, units = None,include=0):
- if self.editor != None :
- print ('un seul editeur par appli')
+ 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()
- self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include)
+ #self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include)
+ self.editor = self.viewmanager.getNewEditorNormal()
def fileNew(self):
- self.editor=initEditor(self)
+ self.editor=self.initEditor()
def getEditor(self):
+ if (hasattr(self, 'editor')) and self.editor != None : return self.editor
+ self.initEditor()
return self.editor
def fileOpen(self,fichier):
- fichierIn = os.path.abspath(six.text_type(fichier))
+ fichierIn = os.path.abspath(fichier)
try:
monEditor=self.viewmanager.handleOpen(fichierIn)
except EficasException as exc:
ok = editor.saveFileAs()
print ('ok ',ok)
- def dumpXsd(self):
+ def dumpXsd(self, avecEltAbstrait = False):
current_cata = CONTEXT.getCurrentCata()
- current_cata.dumpXsd()
- if self.maConfiguration.afficheIhm==False : exit()
+ texteXSD = current_cata.dumpXsd( avecEltAbstrait)
+ return texteXSD
+ #if self.maConfiguration.afficheIhm==False : exit()
+ #else : return texteXSD
#,self.fileSaveAs
#,self.fileClose
if __name__=='__main__':
# Modules Eficas
- monEficas= AppliSsIhm(code='Adao',salome=0,versionCode='V83')
+ monEficas= AppliSsIhm(code='Adao',salome=0,labelCode='V83')
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 :
try :
nouvelleValeur=str(self.lineEditVal.text())
self.inSaisieValeur=False
return
else :
- #PN PN PN ???? la 1 ligne est tres bizarre.
try :
- if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
+ # 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.verifItem(nouvelleValeur) !=1 :
+ 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 != "" :
- #PNPNPNP Il faut trouver une solution pour les 2 cas
- # self.editor.afficheInfos(commentaire)
- #self.Commentaire.setText(tr(commentaire))
if validite :
self.editor.afficheCommentaire(commentaire)
else :
self.setValide()
- #def TraiteLEValeurTuple(self,valeurBrute=None) :
- # listeValeurs=[]
- # if valeurBrute== None :valeurBrute=str(self.LEValeur.text())
- # listeValeursSplit=valeurBrute.split(',')
- # for val in listeValeursSplit :
- # try :
- # valeur=eval(val,{})
- # except :
- # valeur=val
- # listeValeurs.append(valeur)
- # return listeValeurs
def TraiteLEValeur(self,valeurTraitee=None) :
# lit la chaine entree dans le line edit
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
# Copyright (C) 2007-2017 EDF R&D
#
# This library is free software; you can redistribute it and/or
from builtins import object
except : pass
-import time
-import os,sys,py_compile
-import traceback
-import six.moves.cPickle
-import re
-import types
+import os, sys
# Modules Eficas
from Noyau.N_CR import CR
import analyse_catalogue_initial
import autre_analyse_cata
import uiinfo
-from InterfaceQT4.monChoixCata import MonChoixCata
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
-from PyQt5.QtWidgets import QMessageBox, QApplication, QDialog
#-------------------------------
class ReaderCataCommun(object):
#-------------------------------
- def askChoixCatalogue(self, cata_choice_list):
+ 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 ")
- widgetChoix = MonChoixCata(self.appliEficas, [cata.user_name for cata in cata_choice_list], title)
+ from InterfaceQT4.monChoixCata import MonChoixCata
+ widgetChoix = MonChoixCata(self.appliEficas, [cata.labelCode for cata in cataListeChoix], title)
ret=widgetChoix.exec_()
lab+=str(self.code)
lab+=tr(" avec le catalogue ")
if ret == QDialog.Accepted:
- cata = cata_choice_list[widgetChoix.CBChoixCata.currentIndex()]
- self.fic_cata = cata.cata_file_path
- self.versionCode = cata.identifier
- self.appliEficas.format_fichier = cata.file_format
- self.appliEficas.format_fichier_in = cata.file_format_in
- lab+=self.versionCode
+ 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)
- #qApp.mainWidget().setCaption(lab)
widgetChoix.close()
else:
widgetChoix.close()
def choisitCata(self):
# ____________________
- liste_cata_possibles=[]
+
+ listeCataPossibles=[]
self.Commandes_Ordre_Catalogue=[]
- all_cata_list = []
+
+ listeTousLesCatas = []
for catalogue in self.appliEficas.maConfiguration.catalogues:
- if isinstance(catalogue, CatalogDescription): all_cata_list.append(catalogue)
- elif isinstance(catalogue, tuple) : all_cata_list.append(CatalogDescription.create_from_tuple(catalogue))
+ 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: liste_cata_possibles = all_cata_list
+ if self.ssCode is None: listeCataPossibles = listeTousLesCatas
else:
- for catalogue in all_cata_list:
- if catalogue.code == self.code and catalogue.file_format == self.ssCode: liste_cata_possibles.append(catalogue)
-
- if len(liste_cata_possibles)==0:
- QMessageBox.critical(self.QWParent, tr("Import du catalogue"),
+ 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:
+ 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
- if self.versionCode is not None:
+ # le label est fixe dans la ligne de commande
+ if self.labelCode is not None:
# La version a ete fixee
- for cata in liste_cata_possibles:
- if self.versionCode == cata.identifier:
- self.fic_cata = cata.cata_file_path
- self.appliEficas.format_fichier = cata.file_format
- self.appliEficas.format_fichier_in = cata.file_format_in
+ for cata in listeCataPossibles:
+ if self.labelCode == cata.labelCode:
+ self.fichierCata = cata.fichierCata
+ self.appliEficas.formatFichierIn = cata.formatFichierIn
+ self.appliEficas.formatFichierOut = cata.formatFichierOut
else:
- cata_choice_list = []
- for cata in liste_cata_possibles:
- if cata.selectable:
- if cata.default : cata_choice_list.insert(0, cata)
- else : cata_choice_list.append(cata)
-
- if len(cata_choice_list) == 0:
- QMessageBox.critical(self.QWParent, tr("Import du catalogue"),
+ 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(cata_choice_list) == 1:
- self.fic_cata = cata_choice_list[0].cata_file_path
- self.versionCode = cata_choice_list[0].identifier
- self.appliEficas.format_fichier = cata_choice_list[0].file_format
- self.appliEficas.format_fichier_in = cata_choice_list[0].file_format_in
+ 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 ...
- self.askChoixCatalogue(cata_choice_list)
+ if self.appliEficas.ssIhm :
+ print ('Unable to know which catafile is choosen')
+ exit()
+ self.askChoixCatalogue(cataListeChoix)
self.demandeCatalogue=True
- if self.fic_cata == None :
+ if self.fichierCata == None :
if self.appliEficas.salome == 0 :
- print(("Pas de catalogue pour code %s, version %s" %(self.code,self.versionCode)))
+ print(("Pas de catalogue pour code %s, version %s" %(self.code,self.labelCode)))
sys.exit(1)
else :
self.appliEficas.close()
#------------------------------------
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
- self.appliEficas.format_fichier='python'
- self.versionCode=self.appliEficas.versionCode
- self.fic_cata=None
+ # 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
if self.code=="TELEMAC": self.creeDicoCasToCata()
-
def openCata(self):
"""
Ouvre le catalogue standard du code courant, cad le catalogue present
# import du catalogue
self.choisitCata()
- if self.appliEficas.maConfiguration.withXSD :
- try :
- #import raw.Telemac2d as modeleMetier
- #import raw.cata_genere_fact as modeleMetier
- import raw.cata_map_genere as modeleMetier
- #import raw.cata_bloc as modeleMetier
- print ('import Test ad modeleMetier')
- except :
- modeleMetier = None
- else :
- modeleMetier = None
-
- self.cata = self.importCata(self.fic_cata)
+ 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 :
- QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fic_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)
# retrouveOrdreCataStandard fait une analyse textuelle du catalogue
# remplace par retrouveOrdreCataStandardAutre qui utilise une numerotation
# des mots cles a la creation
- #print (self.cata)
#print (dir(self.cata))
self.retrouveOrdreCataStandardAutre()
if self.appliEficas.maConfiguration.modeNouvCommande == "initial" : self.retrouveOrdreCataStandard()
# traitement des clefs documentaires
#
- self.titre=self.VERSION_EFICAS+" "+tr( " avec le catalogue ") + os.path.basename(self.fic_cata)
+ 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
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]
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
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 = {}
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.fic_cata))[0]
- rep_cata = os.path.dirname(self.fic_cata)
- self.Commandes_Ordre_Catalogue = analyse_catalogue_initial.analyseCatalogue(self.fic_cata)
+ 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):
self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
self.code=self.appliEficas.code
self.ssCode=self.appliEficas.ssCode
- self.appliEficas.format_fichier='python'
- self.appliEficas.format_fichier_in ='xml'
+ # PN ?? bizarre le 22/04/20
+ self.appliEficas.formatfichierOut='python'
+ self.appliEficas.formatfichierIn ='xml'
self.modeNouvCommande=self.appliEficas.maConfiguration.modeNouvCommande
- self.versionCode=self.appliEficas.versionCode
+ self.labelCode=self.appliEficas.labelCode
self.version_cata=None
- self.fic_cata=None
+ self.ficCata=None
self.OpenCata()
self.cataitem=None
self.titre='Eficas XML'
def OpenCata(self):
- #self.fic_cata = 'Cata_MED_FAM.xml'
+ #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.fic_cata).read()
+ xml=open(self.ficCata).read()
SchemaMed = readerEfiXsd.efficas.CreateFromDocument(xml)
SchemaMed.exploreCata()
self.cata=SchemaMed
"""
Classe de base pour definir des types de structures de donnees ASTER
equivalent d un concept ASTER
+ Doit_on garder tout ce qui concerne jeveux ? les concepts ?
"""
idracine = "SD"
self.order = self.parent.icmd
else:
self.order = 0
- # attributs pour le Catalogue de Structure de Données Jeveux
+ # attributs pour le Catalogue de Structure de Données
# "self.cata_sdj" est un attribut de classe
self.ptr_class_sdj = None
self.ptr_sdj = None
return self.etape[key]
def setName(self, nom):
- """Positionne le nom de self (et appelle sd_init)
+ """Positionne le nom de self
"""
+ print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
+ print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
+ print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
+ print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
+ print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
self.nom = nom
def isTypCO(self):
self.nom = self.parent.getName(self) or self.id
except:
self.nom = ""
- if self.nom.find('sansnom') != -1 or self.nom == '':
+
+ if self.nom=='sansnom' or self.nom == '':
self.nom = self.id
return self.nom
val = self.jdc.parLot
return val == 'OUI'
- def rebuild_sd(self):
- """Conserver uniquement pour la compatibilite avec le catalogue v10 dans eficas."""
+ def getEficasAttribut(self, attribut):
+ #print ('getEficasAttribut : ', self, attribut)
+ valeur=self.etape.getMocle(attribut)
+ try :
+ valeur=self.etape.getMocle(attribut)
+ except :
+ valeur = None
+ #print (valeur)
+ return valeur
+
+ def getEficasListOfAttributs(self,listeAttributs):
+ from .N_MCLIST import MCList
+ #print ('getEficasListOfAttributs pour', self,listeAttributs)
+ aTraiter=(self.etape,)
+ while len(listeAttributs) > 0 :
+ attribut=listeAttributs.pop(0)
+ print ("attribut", attribut)
+ nvListe=[]
+ for mc in aTraiter :
+ print (mc)
+ 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
class assd(ASSD):
from .N_types import forceList
+
class BLOC(N_ENTITE.ENTITE):
"""
class_instance = N_MCBLOC.MCBLOC
label = 'BLOC'
- def __init__(self, fr="", docu="", regles=(), statut='f', condition=None,ang="",
+ def __init__(self, fr="", docu="", regles=(), statut='f', condition=None,ang="", nomXML=None,
**args):
"""
Un bloc est caractérisé par les attributs suivants :
self.regles = (regles,)
self.statut = statut
self.condition = condition
+ self.nomXML = nomXML
self.entites = args
self.affecter_parente()
+ self.txtNomComplet = ''
def __call__(self, val, nom, parent=None, dicoPyxbDeConstruction=None):
"""
self.checkCondition()
self.verifCataRegles()
+
def verifPresence(self, dict, globs):
"""
Cette méthode vérifie si le dictionnaire passé en argument (dict)
dico.update(dict)
if self.condition != None:
try:
+ #if 1 :
test = eval(self.condition, globs, dico)
return test
+ #try:
+ # 1
except NameError:
# erreur 'normale' : un mot-clé n'est pas présent et on veut
# l'évaluer dans la condition
'\n', "Erreur dans la condition : ", self.condition, ''.join(l))
else:
return 0
+
+
+
def longueurDsArbre(self):
longueur=0
for mc in self.mcListe :
- longueur = longueur + longueurDsArbre(mc)
+ longueur = longueur + mc.longueurDsArbre()
return longueur
def blocUtils():
"""Valide si aucune des valeurs de 'mcsimp' n'est dans 'valeurs'."""
return not au_moins_un(mcsimp, valeurs)
+ def getEficasAttribut( nomUserASSD, nomAttr):
+ if nomUserASSD == None : return None
+ return ( nomUserASSD.getEficasAttribut(nomAttr))
+
+ def getEficasListOfAttributs( nomASSD, listeAttributs):
+ if nomASSD == None : return ()
+ return ( nomASSD.getEficasListOfAttributs(listeAttributs))
+
return locals()
#
if self.parent:
try:
- self.parent.NommerSdprod(self, nom)
+ self.parent.nommerSDProd(self, nom)
except AsException as e:
appel = N_utils.calleeWhere(niveau=2)
raise AsException(
"""Conversion de type.
"""
- def __init__(self, name, typ):
+ def __init__(self, name, typeACreer):
self.name = name
- self.typ = typ
+ self.typeACreer = typeACreer
def convert(self, obj):
"""Filtre liste
class TypeConversion(Conversion):
- """Conversion de type
+ """Conversion de typeACreer
"""
- def __init__(self, typ):
- Conversion.__init__(self, 'type', typ)
+ def __init__(self, typeACreer):
+ Conversion.__init__(self, 'type', typeACreer)
class IntConversion(TypeConversion):
return o
+class UserASSDConversion(TypeConversion):
+ def __init__(self, classUser):
+ TypeConversion.__init__(self, classUser)
+
+ def function(self, o):
+ #print ('je convertis : ', o, 'en ', self.typeACreer )
+ #import traceback
+ #traceback.print_stack()
+ if o == None : return None
+ nouvelObj=self.typeACreer(o)
+ return nouvelObj
+
_convertI = IntConversion()
_convertR = FloatConversion()
def ConversionFactory(name, typ):
if name == 'type':
- if 'I' in typ:
- return _convertI
- elif 'R' in typ:
- return _convertR
+ if 'I' in typ : return _convertI
+ elif 'R' in typ : return _convertR
+ if name == 'UserASSD':
+ #print(typ)
+ return (UserASSDConversion(typ))
return None
self.validators = self.factories['validator'](validators)
else:
self.validators = validators
+ #self.doitSenregistrerComme = None
+ self.txtNomComplet=''
+ self.redefinit=False
def affecter_parente(self):
"""
Il s'agit principalement des mots cles
"""
for k, v in list(self.entites.items()):
+ #print( k,v)
v.pere = self
v.nom = k
self.cr.fatal(_(u"L'attribut 'position' doit valoir 'local', 'global' "
u"ou 'global_jdc' : %r"), self.position)
- def dumpXSD(self):
- args = self.entites.copy()
- mcs = set()
- for nom, val in list(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':
- liste=val.dumpXSD()
- mcs.update(liste)
- print (self.nom, mcs)
- return mcs
+ 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
+ return self.txtNomComplet
+
+ def addDefinitionMC(self,listeMCAvant,**args):
+ ouChercher=self
+ for mot in listeMCAvant:
+ try :
+ ouChercher=ouChercher.entites[mot]
+ except :
+ 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)
+ ouChercher.entites[nomMC]=defMC
+
+ def changeDefinitionMC(self,listeMCAvant,**args):
+ ouChercher=self
+ for mot in listeMCAvant:
+ try :
+ ouChercher=ouChercher.entites[mot]
+ except :
+ 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)
+ monSIMP.propageRedefinit()
+
+ def propageRedefinit(self):
+ # a reflechir
+ self.redefinit=True
+ # PNPN il faut remonter a l etape
+
+
+
+ def makeObjetPourVerifSignature(self,**args):
+ etape = self.class_instance(oper=self, args=args)
+ etape.MCBuild()
+ return etape
+
enregistrements necessaires
surcharge dans Ihm
"""
- print ('makeRegister de ETAPE')
+ #print ('makeRegister de ETAPE')
if self.parent:
self.jdc = self.parent.getJdcRoot()
self.id = self.parent.register(self)
new_sd = self.sd.__class__(etape=new_etape)
new_etape.sd = new_sd
if self.reuse == None:
- new_etape.parent.NommerSdprod(new_sd, self.sd.nom)
+ new_etape.parent.nommerSDProd(new_sd, self.sd.nom)
else:
new_sd.setName(self.sd.nom)
new_etape.copyIntern(self)
Reinitialise le nommage du concept de l'etape lors d'un changement de jdc
"""
if self.sd and self.reuse == None:
- self.parent.NommerSdprod(self.sd, self.sd.nom)
+ self.parent.nommerSDProd(self.sd, self.sd.nom)
def isInclude(self):
"""Permet savoir si on a affaire a la commande INCLUDE
# pourrait etre appelee par une commande fortran faisant appel a des fonctions python
# on passe la main au parent
return self.parent.getConcept(nomsd)
+
indice=0
for v in val:
if type(v) == dict or isinstance(v, _F):
- objet = self.class_instance(
- nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=None)
- #nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice])
+ 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)
indice=indice+1
l.append(objet)
elif isinstance(v, self.class_instance):
else:
l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
elif type(val) == dict or isinstance(val, _F):
- objet = self.class_instance(
- nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
- l.append(objet)
+ if dicoPyxbDeConstruction :
+ objet = self.class_instance(
+ nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
+ else :
+ objet = self.class_instance(
+ nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=None)
+ l.append(objet)
elif isinstance(val, self.class_instance):
# 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)
+ l.buildObjPyxb(l)
return l
def verifCata(self):
self.checkDocu()
self.checkValidators()
self.verifCataRegles()
+
+
"""
from __future__ import absolute_import
from .N_ASSD import ASSD
-import six
+try:basestring
+except NameError: basestring = str
+
class GEOM(ASSD):
return self.nom
def __convert__(cls, valeur):
- if isinstance(valeur, (str, six.text_type)) and len(valeur.strip()) <= 8:
+ if isinstance(valeur, basestring) and len(valeur.strip()) <= 8:
return valeur.strip()
raise ValueError(
_(u'On attend une chaine de caractères (de longueur <= 8).'))
from .N_Exception import AsException, InterruptParsingError
from .N_ASSD import ASSD
from .strfunc import getEncoding
-from six.moves import range
MemoryErrorMsg = """MemoryError :
def __init__(self, definition=None, procedure=None, cata=None,
cata_ord_dico=None, parent=None,
- nom='SansNom', appli=None, context_ini=None, **args):
+ nom='SansNom', appliEficas=None, context_ini=None, **args):
self.procedure = procedure
self.definition = definition
self.cata = cata
- # PN pourquoi ?
- #if type(self.cata) != tuple and cata != None:
- # self.cata = (self.cata,)
self._build_reserved_kw_list()
self.cata_ordonne_dico = cata_ord_dico
self.nom = nom
- self.appli = appli
+ self.appliEficas = appliEficas
self.parent = parent
self.context_ini = context_ini
# On conserve les arguments supplementaires. Il est possible de passer
# on met le jdc lui-meme dans le context global pour l'avoir sous
# l'etiquette "jdc" dans le fichier de commandes
self.g_context = {'jdc': self}
+ CONTEXT.unsetCurrentJdC()
+ CONTEXT.setCurrentJdC(self)
# Dictionnaire pour stocker tous les concepts du JDC (acces rapide par
# le nom)
- self.sds_dict = {}
+ self.sdsDict = {}
self.etapes = []
self.index_etapes = {}
self.mc_globaux = {}
- self.current_context = {}
+ self.currentContext = {}
self.condition_context = {}
self.index_etape_courante = 0
self.UserError = "UserError"
compte-rendu self.cr
"""
try:
- if self.appli != None:
- self.appli.afficheInfos(
- 'Compilation du fichier de commandes en cours ...')
# Python 2.7 compile function does not accept unicode filename, so we encode it
# with the current locale encoding in order to have a correct
# 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.
# Update du dictionnaire des concepts
for sdnom, sd in list(self.context_ini.items()):
if isinstance(sd, ASSD):
- self.sds_dict[sdnom] = sd
+ self.sdsDict[sdnom] = sd
+
+ #if self.appliEficas != None:
+ # self.appliEficas.afficheInfos(
+ # 'Interpretation du fichier de commandes en cours ...')
- if self.appli != None:
- self.appli.afficheInfos(
- 'Interpretation du fichier de commandes en cours ...')
# On sauve le contexte pour garder la memoire des constantes
# En mode edition (EFICAS) ou lors des verifications le contexte
# est recalcule
exec(self.proc_compile, self.g_context)
CONTEXT.unsetCurrentStep()
- if self.appli != None:
- self.appli.afficheInfos('')
except InterruptParsingError:
# interrupt the command file parsing used by FIN to ignore the end
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(NameError, e)
msg = "erreur de syntaxe, %s ligne %d" % (s, l[-1][1])
if CONTEXT.debug:
traceback.print_exc()
"erreur non prevue et non traitee prevenir la maintenance " + '\n' + ''.join(l))
del exc_typ, exc_val, exc_fr
CONTEXT.unsetCurrentStep()
+ idx=0
+ for e in self.etapes:
+ self.enregistreEtapePyxb(e,idx)
+ idx=idx+1
def afficheFinExec(self):
"""
if sd != None and (etape.definition.reentrant == 'n' or etape.reuse is None):
# ATTENTION : On ne nomme la SD que dans le cas de non reutilisation
# d un concept. Commande non reentrante ou reuse absent.
- self.NommerSdprod(sd, nomsd)
+ self.nommerSDProd(sd, nomsd)
return sd
- def NommerSdprod(self, sd, sdnom, restrict='non'):
+ 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
"""
- o = self.sds_dict.get(sdnom, None)
+ o = self.sdsDict.get(sdnom, None)
if isinstance(o, ASSD):
raise AsException("Nom de concept deja defini : %s" % sdnom)
if sdnom in self._reserved_kw:
"Nom de concept invalide. '%s' est un mot-cle reserve." % sdnom)
# Ajoute a la creation (appel de regSD).
- self.sds_dict[sdnom] = sd
+ self.sdsDict[sdnom] = sd
sd.setName(sdnom)
# En plus si restrict vaut 'non', on insere le concept dans le contexte
if restrict == 'non':
self.g_context[sdnom] = sd
+ 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
+
+
def regSD(self, sd):
"""
Methode appelee dans l __init__ d un ASSD lors de sa creation
Retourne le nom du fichier correspondant a un numero d'unite
logique (entier) ainsi que le source contenu dans le fichier
"""
- if self.appli:
- # Si le JDC est relie a une application maitre, on delègue la
+ #if self.appliEficas:
+ # Si le JDC est relie a une appliEficascation maitre, on delègue la
# recherche
- return self.appli.getFile(unite, fic_origine)
- else:
- if unite != None:
- if os.path.exists("fort." + str(unite)):
- fname = "fort." + str(unite)
- if fname == None:
- raise AsException("Impossible de trouver le fichier correspondant"
- " a l unite %s" % unite)
- if not os.path.exists(fname):
- raise AsException("%s n'est pas un fichier existant" % fname)
- fproc = open(fname, 'r')
- text = fproc.read()
- fproc.close()
- text = text.replace('\r\n', '\n')
- linecache.cache[fname] = 0, 0, text.split('\n'), fname
- return fname, text
+ # return self.appliEficas.getFile(unite, fic_origine)
+ #else:
+ # if unite != None:
+ # if os.path.exists("fort." + str(unite)):
+ # fname = "fort." + str(unite)
+ if fname == None:
+ raise AsException("Impossible de trouver le fichier correspondant")
+ if not os.path.exists(fname):
+ raise AsException(fname + " n'est pas un fichier existant" )
+ fproc = open(fname, 'r')
+ text = fproc.read()
+ fproc.close()
+ text = text.replace('\r\n', '\n')
+ linecache.cache[fname] = 0, 0, text.split('\n'), fname
+ return fname, text
def set_parLot(self, parLot, user_value=False):
"""
Met le mode de traitement a PAR LOT
ou a COMMANDE par COMMANDE
en fonction de la valeur du mot cle PAR_LOT et
- du contexte : application maitre ou pas
+ du contexte : appliEficascation maitre ou pas
En PAR_LOT='NON', il n'y a pas d'ambiguite.
d'analyse et juste avant la phase d'execution.
"""
if user_value:
self.parLot_user = parLot
- if self.appli == None:
- # Pas d application maitre
+ if self.appliEficas == None:
+ # Pas d appliEficascation maitre
self.parLot = parLot
else:
- # Avec application maitre
+ # Avec appliEficascation maitre
self.parLot = 'OUI'
def accept(self, visitor):
# courante pendant le processus de construction des etapes.
# Si on insère des commandes (par ex, dans EFICAS), il faut prealablement
# remettre ce pointeur a 0
- # self.current_context.items() if isinstance(v, ASSD)])
- if self.parLot_user == 'NON':
- d = self.current_context = self.g_context.copy()
- if etape is None:
- return d
+ # self.currentContext.items() if isinstance(v, ASSD)])
+ #if self.parLot_user == 'NON':
+ # d = self.currentContext = self.g_context.copy()
+ # if etape is None:
+ # return d
# retirer les sd produites par 'etape'
- sd_names = [sd.nom for sd in etape.getCreated_sd()]
- for nom in sd_names:
- try:
- del d[nom]
- except KeyError:
- from warnings import warn
- warn(
- "concept '%s' absent du contexte de %s" % (
- nom, self.nom),
- RuntimeWarning, stacklevel=2)
- return d
+ # sd_names = [sd.nom for sd in etape.getCreated_sd()]
+ # for nom in sd_names:
+ # try:
+ # del d[nom]
+ # except KeyError:
+ # from warnings import warn
+ # warn(
+ # "concept '%s' absent du contexte de %s" % (
+ # nom, self.nom),
+ # RuntimeWarning, stacklevel=2)
+ # return d
if etape:
index_etape = self.index_etapes[etape]
else:
index_etape = len(self.etapes)
if index_etape >= self.index_etape_courante:
# On calcule le contexte en partant du contexte existant
- d = self.current_context
+ d = self.currentContext
if self.index_etape_courante == 0 and self.context_ini:
d.update(self.context_ini)
liste_etapes = self.etapes[self.index_etape_courante:index_etape]
else:
- d = self.current_context = {}
+ d = self.currentContext = {}
if self.context_ini:
d.update(self.context_ini)
liste_etapes = self.etapes
co.executed = 1
return co
- def del_concept(self, nomsd):
+ def delConcept(self, nomsd):
"""
- Methode pour supprimer la reference d'un concept dans le sds_dict.
+ Methode pour supprimer la reference d'un concept dans le sdsDict.
Ne detruire pas le concept (different de supprime).
"""
try:
- del self.sds_dict[nomsd.strip()]
+ del self.sdsDict[nomsd.strip()]
except:
pass
#for cat in self.cata:
cat=self.cata
self._reserved_kw.update(
- [kw for kw in dir(cat) if len(kw) <= 8 and kw == kw.upper()])
+ #PN 14 2020 [kw for kw in dir(cat) if len(kw) <= 8 and kw == kw.upper()])
+ [kw for kw in dir(cat) ])
self._reserved_kw.difference_update(
['OPER', 'MACRO', 'BLOC', 'SIMP', 'FACT', 'FORM',
'GEOM', 'MCSIMP', 'MCFACT'])
+
+
class_instance = N_JDC.JDC
label = 'JDC'
- def __init__(self, code='', execmodul=None, regles=(), niveaux=(), **args):
+ def __init__(self, code='', execmodul=None, regles=(), niveaux=(),fichierSource=None, **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.execmodul = execmodul
self.d_niveaux = {}
self.l_niveaux = niveaux
self.commandes = []
+ self.fichierSource = fichierSource
for niveau in niveaux:
self.d_niveaux[niveau.nom] = niveau
# On change d'objet catalogue. Il faut d'abord mettre le catalogue
CONTEXT.setCurrentCata(self)
self.fenetreIhm=None
self.dictTypesXSD={}
+ self.listeDesTypesXSDRedefini=[]
+ self.dictTypesASSDorUserASSDCrees={}
+ self.dictTypesASSDorUserASSDUtilises={}
+
def __call__(self, procedure=None, cata=None, cata_ord_dico=None,
nom='SansNom', parent=None, **args):
nommage = nommage
def __init__(
- self, nom, op, sd_prod=None, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None,
+ self, nom, op=None, sd_prod=None, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None,
docu="", regles=(), op_init=None, niveau = None, fichier_ini=0, UIinfo=None, **args):
"""
Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser
from __future__ import print_function
try :
from builtins import str
- from builtins import range
except : pass
import types
import sys
from .N_utils import AsType
from .N_CO import CO
from .N_ASSD import ASSD
-from six.moves import range
class MACRO_ETAPE(N_ETAPE.ETAPE):
N_ETAPE.ETAPE.__init__(self, oper, reuse, args, niveau=5)
self.g_context = {}
# Contexte courant
- self.current_context = {}
+ self.currentContext = {}
self.macro_const_context = {}
self.index_etape_courante = 0
self.etapes = []
"""
# L'etape courante pour laquelle le contexte a ete calcule est
# memorisee dans self.index_etape_courante
- # self.current_context.items() if isinstance(v, ASSD)])
- d = self.current_context = self.g_context.copy()
+ # self.currentContext.items() if isinstance(v, ASSD)])
+ d = self.currentContext = self.g_context.copy()
if etape is None:
return d
# retirer les sd produites par 'etape'
# On est dans le cas de la creation d'un nouveau concept
sd = etape.getSdProd()
if sd != None:
- self.NommerSdprod(sd, nomsd)
+ self.nommerSDProd(sd, nomsd)
return sd
- def NommerSdprod(self, sd, sdnom, restrict='non'):
+ def nommerSDProd(self, sd, sdnom, restrict='non'):
"""
Cette methode est appelee par les etapes internes de la macro.
La macro appelle le JDC pour valider le nommage.
if restrict == 'non':
# On demande le nommage au parent mais sans ajout du concept dans le contexte du parent
# car on va l'ajouter dans le contexte de la macro
- self.parent.NommerSdprod(sd, sdnom, restrict='oui')
+ self.parent.nommerSDProd(sd, sdnom, restrict='oui')
# On ajoute dans le contexte de la macro les concepts nommes
# Ceci est indispensable pour les CO (macro) dans un INCLUDE
self.g_context[sdnom] = sd
else:
# La demande de nommage vient probablement d'une macro qui a mis
# le concept dans son contexte. On ne traite plus que le nommage (restrict="oui")
- self.parent.NommerSdprod(sd, sdnom, restrict='oui')
+ self.parent.nommerSDProd(sd, sdnom, restrict='oui')
def deleteConceptAfterEtape(self, etape, sd):
"""
l'etape courante.
"""
ctx = {}
- # update car par ricochet on modifierait jdc.current_context
+ # update car par ricochet on modifierait jdc.currentContext
ctx.update(self.parent.getContexteCourant(self))
# on peut mettre None car toujours en PAR_LOT='NON', donc la dernière
ctx.update(self.getContexteAvant(None))
if etp.reuse:
new_sd.setName(etp.sd.nom)
else:
- self.NommerSdprod(new_sd, etp.sd.nom)
+ self.nommerSDProd(new_sd, etp.sd.nom)
new_etp.copyIntern(etp)
self.etapes.append(new_etp)
self.index_etapes[new_etp] = len(self.etapes) - 1
Reinitialise l'etape avec un nouveau jdc parent new_jdc
"""
if self.sd and self.reuse == None:
- self.parent.NommerSdprod(self.sd, self.sd.nom)
+ self.parent.nommerSDProd(self.sd, self.sd.nom)
for concept in self.sdprods:
- self.parent.NommerSdprod(concept, concept.nom)
+ self.parent.nommerSDProd(concept, concept.nom)
def reparent(self, parent):
"""
#import traceback
#traceback.print_stack()
#print(("MCCOMPO.buildMc _____________________________________", self.nom))
- #print (self.dicoPyxbDeConstruction)
if CONTEXT.debug:
print(("MCCOMPO.buildMc ", self.nom))
# Dans la phase de reconstruction args peut contenir des mots-clés
# mais qui sont malgré tout des descendants de l'objet courant
# (petits-fils, ...)
args = self.valeur
+ #print ('MCCOMPO___________________', self.valeur)
if args == None: args = {}
mcListe = []
# 2- les entités non présentes dans les arguments, présentes dans la définition avec un défaut
# Phase 1.1 : on traite d'abord les SIMP pour enregistrer les mots cles
# globaux
- # PN ligne suivante uniquement pour commodite
- # a detruire quand cela fonctionne recursivement
if not hasattr(self, 'dicoPyxbDeConstruction') : self.dicoPyxbDeConstruction = {}
for k, v in list(self.definition.entites.items()):
if v.label != 'SIMP':
del self.dicoPyxbDeConstruction[k]
else :
objPyxbDeConstruction=None
+ #print (args.get(k, None))
objet = v(val=args.get(k, None), nom=k, parent=self,objPyxbDeConstruction=objPyxbDeConstruction)
mcListe.append(objet)
# Si l'objet a une position globale on l'ajoute aux listes
# args ne contient plus que des mots-clés qui n'ont pas été attribués car ils sont
# à attribuer à des blocs du niveau inférieur ou bien sont des mots-clés erronés
for k, v in list(self.definition.entites.items()):
- if v.label != 'BLOC':
- continue
- # condition and a or b : Equivalent de l'expression : condition ?
- # a : b du langage C
-
+ if v.label != 'BLOC': continue
#PNPN on recalcule dico_valeurs dans le for
# pour les globaux imbriques (exple Telemac Advection)
# avant le calcul etait avant le for
# on retourne la liste ainsi construite
if self.jdc : self.cata=self.jdc.cata
else : self.cata = None
- #self.buildObjPyxb(mcListe)
+ self.buildObjPyxb(mcListe)
#else : print ('pas de construction pour ', self.nom, self.objPyxbDeConstruction)
#print ('buildObjPyxb : ' , self.nom)
#print(("MCCOMPO.buildMc fin_____________________________________", self.nom))
return mcListe
+ def buildMcApresGlobal(self):
+ print ('Noyau ---------------- buildMcApresGlobal pour', self.nom)
+ nouveau_args = self.reste_val
+ blocsDejaLa=[]
+ for mc in self.mcListe :
+ 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
+ dico_valeurs = self.creeDictCondition(self.mcListe, condition=1)
+ globs = self.jdc and self.jdc.condition_context or {}
+ 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
+
+
def ordonneListe(self, mcListe):
"""
Ordonne la liste suivant l'ordre du catalogue.
return l
+
def intersection_vide(dict1, dict2):
"""Verification qu'il n'y a pas de clé commune entre 'dict1' et 'dict2'."""
sk1 = set(dict1)
- nom
- parent
"""
- #print ('MCFACT', self, val, definition, nom, parent, objPyxbDeConstruction)
- import traceback
+ print ('MCFACT', self, val, definition, nom, parent, dicoPyxbDeConstruction)
+ #import traceback
#traceback.print_stack()
- #if nom == 'experience' : print ('MCFACT', self, parent, dicoPyxbDeConstruction); exit()
self.dicoPyxbDeConstruction=dicoPyxbDeConstruction
if self.dicoPyxbDeConstruction :
self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb']
self.nom = nom
self.val = val
self.parent = parent
- self.valeur = self.GETVAL(self.val)
+ self.valeur = self.getValeurEffective(self.val)
if parent:
self.jdc = self.parent.jdc
self.niveau = self.parent.niveau
self.etape = None
self.mcListe = self.buildMc()
- def GETVAL(self, val):
+ def getValeurEffective(self, val):
"""
Retourne la valeur effective du mot-clé en fonction
de la valeur donnée. Defaut si val == None
Attributs :
- val : valeur du mot clé simple
-
- definition
-
- nom
-
- parent
Autres attributs :
- valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
"""
- #print ("MCSIMP, ------------------------")
#print (self, val, definition, nom, parent)
- #print ("MCSIMP, ------------------------")
self.definition = definition
self.nom = nom
self.val = val
self.parent = parent
- self.convProto = ConversionFactory('type', typ=self.definition.type)
- self.valeur = self.GETVAL(self.val)
- self.objPyxbDeConstruction=objPyxbDeConstruction
+ self.objPyxbDeConstruction = objPyxbDeConstruction
if parent:
- self.jdc = self.parent.jdc
+ self.jdc = self.parent.jdc
if self.jdc : self.cata = self.jdc.cata
- else : self.cata = None
+ else : self.cata = None
self.niveau = self.parent.niveau
- self.etape = self.parent.etape
- #self.buildObjPyxb()
+ self.etape = self.parent.etape
else:
# Le mot cle simple a été créé sans parent
# est-ce possible ?
print ('je suis dans le else sans parent du build')
- self.jdc = None
- self.cata = None
+ print (poum)
+ self.jdc = None
+ self.cata = None
self.niveau = None
- self.etape = None
+ self.etape = None
+ if self.definition.creeDesObjets :
+ 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)
+ self.buildObjPyxb()
+ self.listeNomsObjsCrees = []
- def GETVAL(self, val):
+ def getValeurEffective(self, val):
"""
Retourne la valeur effective du mot-clé en fonction
de la valeur donnée. Defaut si val == None
"""
- if (val is None and hasattr(self.definition, 'defaut')):
- val = self.definition.defaut
+ 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.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 self.convProto:
+ objVal = self.convProto.convert(nomVal)
+ objVal.initialiseNom(nomVal)
+ if objVal.parent== None : objVal.initialiseParent(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
+ 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 self.convProto:
+ objVal = self.convProto.convert(nomVal)
+ objVal.initialiseNom(nomVal)
+ return (1, objVal, 'reference creee')
+
+ def rattacheUserASSD(self, objASSD):
+ 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
+
+
def getValeur(self):
"""
Retourne la "valeur" d'un mot-clé simple.
dico[self.nom] = l
return dico
+
def getMcsWithCo(self, co):
"""
Cette methode retourne l'objet MCSIMP self s'il a le concept co
"""
return [co for co in forceList(self.valeur)
if isinstance(co, CO) and co.isTypCO()]
+
+ def supprime(self):
+ if hasattr(self, 'val') and hasattr(self.val, 'supprime') :self.val.supprime()
+ N_OBJECT.OBJECT.supprime(self)
-# coding=utf-8
+## coding=utf-8
# Copyright (C) 2007-2017 EDF R&D
#
# This library is free software; you can redistribute it and/or
self.jdc = None
self.niveau = None
+
def getVal(self):
"""
Retourne la valeur de l'objet. Cette méthode fournit
else:
return self
- def GETVAL(self, val):
+ def getValeurEffective(self, val):
"""
Retourne la valeur effective du mot-clé en fonction
de la valeur donnée. Defaut si val == None
return 1
+
class ErrorObj(OBJECT):
"""Classe pour objets errones : emule le comportement d'un objet tel mcsimp ou mcfact
self.UIinfo = UIinfo
self.affecter_parente()
self.checkDefinition(self.nom)
+ self.txtNomComplet=""
def __call__(self, reuse=None, **args):
"""
nomsd = self.nommage.getNomConceptResultat(self.nom)
etape = self.class_instance(oper=self, reuse=reuse, args=args)
etape.MCBuild()
+ etape.metAJourNomASSD(nomsd)
return etape.buildSd(nomsd)
def make_objet(self, mc_list='oui'):
from __future__ import absolute_import
import types
+import Accas
from Noyau import N_ENTITE
from Noyau import N_MCSIMP
def __init__(self, typ,ang="", fr="", statut='f', into=None, intoSug = None,siValide = None, defaut=None,
min=1, max=1, homo=1, position='local',
- val_min=float('-inf'), val_max=float('inf'), docu="", validators=None,
- sug=None,fenetreIhm=None):
+ val_min=float('-inf'), val_max=float('inf'), docu="", validators=None, nomXML=None,
+ sug=None,fenetreIhm=None, attribut=False, sortie='n', intoXML=None):
"""
Un mot-clé simple est caractérisé par les attributs suivants :
- type : cet attribut est obligatoire et indique le type de valeur attendue
- val_max : valeur maximale autorisée
- docu : clef sur de la documentation utilisateur
- sug : valeur suggere
- - fenetreIhm=None
+ - fenetreIhm : si widget particulier
+ - attribut : si projection XSD sur attribut
+ - creeDesObjetsDeType : type des UserASSD si siValide en cree
+ - nomXML : se projette en XSD avec un autre nom pour accepter les tirets
+ - sortie : force l ecriture dans le fichier de sortie (utile pour Telemac)
"""
#print (self)
#import traceback
#print (self)
N_ENTITE.ENTITE.__init__(self, validators)
# Initialisation des attributs
+ self.creeDesObjets = False
+ self.utiliseUneReference = False
+ self.creeDesObjetsDeType = None
+ self.utiliseDesObjetsDeType = None
if type(typ) == tuple:
self.type = typ
else:
self.type = (typ,)
- self.fr = fr
- self.statut = statut
- self.into = into
- self.intoSug = intoSug
+ for t in (self.type) :
+ try :
+ if 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
+ self.fr = fr
+ self.statut = statut
+ self.into = into
+ self.intoSug = intoSug
self.siValide = siValide
- self.defaut = defaut
- self.min = min
- self.max = max
- self.homo = homo
+ self.defaut = defaut
+ self.min = min
+ self.max = max
+ self.homo = homo
self.position = position
- self.val_min = val_min
- self.val_max = val_max
- self.docu = docu
- self.sug = sug
- self.ang=ang
+ self.val_min = val_min
+ self.val_max = val_max
+ self.docu = docu
+ self.sug = sug
+ self.ang = ang
if self.max == '**' : self.max = float('inf')
if self.val_max == '**' : self.val_max = float('inf')
if self.min == '**' : self.min = float('-inf')
if self.val_min == '**' : self.val_min = float('-inf')
- self.fenetreIhm=fenetreIhm
- #self.creeT_SIMP()
+ self.fenetreIhm = fenetreIhm
+ self.attribut = attribut
+ self.nomXML = nomXML
+ self.intoXML = intoXML
+ self.sortie = sortie
def verifCata(self):
"""
self.checkInto()
self.checkPosition()
self.checkValidators()
+
def __call__(self, val, nom, parent=None, objPyxbDeConstruction = None):
"""
"""
return self.class_instance(nom=nom, definition=self, val=val, parent=parent, objPyxbDeConstruction=objPyxbDeConstruction)
-# def creeT_SIMP(self):
-# from Efi2Xsd.readerEfficas import monSIMP
-# from Efi2Xsd.mapDesTypes import dictSIMPEficasXML
-# self.objXML=monSIMP()
-# for nomEficasArg in dictSIMPEficasXML :
-# argu=getattr(self,nomEficasArg)
-# nomXMLarg=dictSIMPEficasXML[nomEficasArg]
-# if not isinstance(nomXMLarg, (list, tuple)) :
-# print(nomXMLarg, argu)
- #if nomEficasArg in listeParamDeTypeTypeAttendu:
- # typeAttendu = self.typ
-#
-# setattr(self.objXML, nomXMLarg, argu)
-
-
-# for nomXMLArg in dir(self) :
-# if nomXMLArg in self.dictATraiter :
-# nomEficasArg=self.dictATraiter[nomXMLArg]
-# argu=getattr(self,nomXMLArg)
-# if argu==None : continue
-#
-# if type(nomEficasArg) == types.DictionaryType:
-# for nomXML in list(nomEficasArg.keys()):
-# arguDecoupe=getattr(argu,nomXML)
-# nomEficasDecoupe=nomEficasArg[nomXML]
-# if arguDecoupe == None : continue
-# self.dictArgsEficas[nomEficasDecoupe]=arguDecoupe
-# else :
-# self.dictArgsEficas[nomEficasArg] = argu
-#
-#
-#
-#
-#
--- /dev/null
+# coding=utf-8
+# Copyright (C) 2007-2017 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_ASSD import ASSD
+
+class UserASSD(ASSD):
+ """
+ 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
+ Lorsqu on ecrit le jdc, n ecrit nom=UserASSD()
+ le parent est le SIMP qui cree l objet
+ a la lecture si la classe commence par un majuscule on fait le boulot dans MCSIMP, sinon dans
+ l init de parametre car le parsing considere qu on a un parametre
+ """
+
+ 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
+
+
+ def initialiseParent(self, parent):
+ #print ('je passe initialiseParent pour : ', self, parent)
+ self.parent= parent
+
+ 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)
+
+ def initialiseValeur(self,valeur=None):
+ self.valeur=valeur
+
+ def ajoutUtilisePar(self,mc):
+ self.utilisePar.add(mc)
+
+ def enleveUtilisePar(self,mc):
+ 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
+
+ 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)
+
from __future__ import print_function
try :
from builtins import str
- from builtins import range
from builtins import object
except : pass
import re
from .N_ASSD import ASSD
from .N_types import isInt, isFloat_or_int, isComplex, isNumber, isStr, isSequence
+from Accas import A_TUPLE
from Extensions.i18n import tr
-import six
-from six.moves import range
self.args = {}
def register(self, T, A):
+ print ('register Protocol',T,A)
self.registry[T] = A
def adapt(self, obj):
self.typ = typ
def default(self, obj, typ):
-
err = ""
for type_permis in typ:
+ if type_permis == 'createObject': continue
if type_permis == 'R':
if isFloat_or_int(obj):
return obj
return obj
except Exception as err:
pass
+ elif isinstance(type_permis, A_TUPLE.Tuple):
+ try:
+ if type_permis.__convert__(obj):
+ return obj
+ except Exception as err:
+ pass
elif isinstance(type_permis, object):
try:
if type_permis.__convert__(obj):
else:
print(("Type non encore gere %s" %type_permis))
raise ValError(
- tr("%s (de type %s) n'est pas d'un type autorise: %s %s") % (repr(obj), type(obj), typ, err))
+ tr("%s (de type %s) n'est pas d'un type autorise: %s ") % (repr(obj), type(obj), typ))
+ #import traceback; traceback.print_stack()
+ #print (object, type_permis,)
def isComplexe(self, valeur):
""" Retourne 1 si valeur est un complexe, 0 sinon """
return valeur
# MC ca ne devrait plus servir !
-CoercableFuncs = {int: int,
- int: int,
- float: float,
- complex: complex,
- str: six.text_type}
+# PN : commenter le 22.11.19
+#CoercableFuncs = {int: int,
+# int: int,
+# float: float,
+# complex: complex,
+# str: six.text_type}
-#class FunctionValObjet(FunctionVal):
-#OOOOOOOOOOOOOOo
class TypeVal(ListVal):
from .N_Exception import AsException
from .N_types import isInt, isFloat, isComplex, isStr, isSequence, isASSD
from .strfunc import getEncoding
-import six
SEP = '_'
# Python 2.7 compile function does not accept unicode filename, so we encode it
# with the current locale encoding in order to have a correct traceback.
# Here, we convert it back to unicode.
+ import six
filename = six.text_type(frame.f_code.co_filename, getEncoding())
return frame.fLineNo, filename, frame.f_code.co_firstlineno, frame.f_locals
except:
from __future__ import absolute_import
_root = None
_cata = None
+_jdc = None
debug = 0
# Le "current step" est l'etape courante.
"""
global _cata
_cata = None
+
+
+def getCurrentJdC():
+ """
+ Fonction qui retourne l'objet JDC courant
+ """
+ return _jdc
+
+def setCurrentJdC(jdc):
+ """
+ Fonction qui permet de changer l'objet JDC courant
+ """
+ global _jdc
+ if _jdc:
+ raise Exception("Impossible d'affecter _jdc. Il devrait valoir None")
+ _jdc = jdc
+
+def unsetCurrentJdC():
+ """
+ Fonction qui permet de remettre a None le JDC courant
+ """
+ global _jdc
+ _jdc = None
from __future__ import absolute_import
try :
from builtins import str
- from builtins import range
except :
pass
import re
# Modules EFICAS
from . import N_utils
from .strfunc import getEncoding
-import six
-from six.moves import range
regex1 = '=?\s*%s\s*\('
# commentaire standard precede d'un nombre quelconque de blancs (pas
if sys.version_info >= (3,0) :
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
</rect>
</property>
<property name="windowTitle">
- <string>Coix du Code</string>
+ <string>Choix du Code</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
+ <property name="margin">
<number>0</number>
</property>
<item>
<string/>
</property>
<layout class="QVBoxLayout" name="vlBouton">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
+ <property name="margin">
<number>0</number>
</property>
<item>
<rect>
<x>0</x>
<y>0</y>
- <width>400</width>
- <height>300</height>
+ <width>420</width>
+ <height>363</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="topMargin">
+ <number>1</number>
+ </property>
+ <property name="bottomMargin">
+ <number>1</number>
+ </property>
<item>
<widget class="QFrame" name="frameLabelMC">
<property name="sizePolicy">
<rect>
<x>0</x>
<y>0</y>
- <width>382</width>
- <height>223</height>
+ <width>402</width>
+ <height>306</height>
</rect>
</property>
<property name="sizePolicy">
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="MCOptionnelLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
+ <number>2</number>
+ </property>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
</size>
</property>
<property name="styleSheet">
- <string notr="true">/*background-color : rgb(168, 227, 142);rgb(57, 146, 228)*/
-background-color : rgb(66, 165, 238);
-/*border-style : outset;*/
+ <string notr="true">background-color : rgb(66, 165, 238);
border-radius : 10px;
border-width : 30 px;
border-color : beige;
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DVisu</class>
- <widget class="QWidget" name="DVisu">
+ <widget class="QDialog" name="DVisu">
<property name="geometry">
<rect>
<x>0</x>
<string notr="true"> QGroupBox {
border: 1px solid gray;
border-radius: 5px;
- margin-top: 1ex; /* leave space at the top for the title */
+ margin-top: 1ex;
}
QGroupBox::title {
<string/>
</property>
<property name="styleSheet">
- <string notr="true">background-color : rgb(224,223,222);
-font : 'times' 9px</string>
+ <string notr="true"/>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="spacing">
border-radius: 10px;
padding: 0 8px;
background: darkgray;
- /* selection-background-color: darkgray;*/
}
QLineEdit:disabled
{
background: lightgray;
}
-/*read-only {
- background: lightblue;*/</string>
+</string>
</property>
<property name="readOnly">
<bool>false</bool>
<string>...</string>
</property>
<property name="icon">
- <iconset theme="add"/>
+ <iconset>
+ <normaloff>../Editeur/icons/PlusBleu.png</normaloff>../Editeur/icons/PlusBleu.png</iconset>
</property>
<property name="iconSize">
<size>
<string notr="true"> QGroupBox {
border: 1px solid gray;
border-radius: 5px;
- margin-top: 1ex; /* leave space at the top for the title */
+ margin-top: 1ex;
}
QGroupBox::title {
</rect>
</property>
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="icon">
<iconset theme="find">
- <normaloff>.</normaloff>.</iconset>
+ <normaloff/>
+ </iconset>
</property>
<property name="iconSize">
<size>
<x>0</x>
<y>0</y>
<width>300</width>
- <height>125</height>
+ <height>129</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
+ <property name="horizontalSpacing">
<number>0</number>
</property>
- <property name="horizontalSpacing">
+ <property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<property name="spacing">
<number>0</number>
</property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
+ <property name="margin">
<number>0</number>
</property>
<item>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>40</height>
+ <height>400</height>
</size>
</property>
</spacer>
<string>...</string>
</property>
<property name="icon">
- <iconset>
- <normaloff>../Editeur/icons/PlusBleu.png</normaloff>../Editeur/icons/PlusBleu.png</iconset>
+ <iconset theme="add"/>
</property>
<property name="iconSize">
<size>
<string notr="true">border : 0px</string>
</property>
<property name="icon">
- <iconset>
- <normaloff>../Editeur/icons/MoinsBleu.png</normaloff>../Editeur/icons/MoinsBleu.png</iconset>
+ <iconset theme="remove"/>
</property>
<property name="iconSize">
<size>
<string>...</string>
</property>
<property name="icon">
- <iconset>
- <normaloff>../Editeur/icons/verre-loupe-icone-6087-64.png</normaloff>../Editeur/icons/verre-loupe-icone-6087-64.png</iconset>
+ <iconset theme="find"/>
</property>
<property name="iconSize">
<size>
<message>
<location filename="convert/convert_ini.py" line="81"/>
<source>lecture du fichier impossible :</source>
- <translation type="obsolete">unable to read file :</translation>
+ <translation>unable to read file :</translation>
</message>
<message>
<location filename="convert/convert_python.py" line="105"/>
<source>Impossible d'ouvrir le fichier %s</source>
- <translation type="obsolete">unable to open file %s</translation>
+ <translation>unable to open file %s</translation>
</message>
<message>
<location filename="convert/convert_python.py" line="116"/>
On retourne le fichier non converti. Prevenir la maintenance.
%s</source>
- <translation type="obsolete">Unable to translate the file. it probably contains mistake
+ <translation>Unable to translate the file. it probably contains mistake
ask eficas team
%s</translation>
</message>
<message>
<location filename="convert/convert_pyth.py" line="115"/>
<source>Format de sortie : %s, non supporte</source>
- <translation type="obsolete">Unsupported format %s</translation>
+ <translation>Unsupported format %s</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue_initial.py" line="44"/>
<source>Impossible d'ouvrir le fichier : %s</source>
- <translation type="obsolete">unable to open file: %s</translation>
+ <translation>unable to open file: %s</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="65"/>
<source>Erreur ! Erreur !</source>
- <translation type="obsolete">Error!</translation>
+ <translation>Error!</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="92"/>
<source>Erreur rencontree dans recherche_enfants : %s</source>
- <translation type="obsolete">Error in recherche_enfants : %s</translation>
+ <translation>Error in recherche_enfants : %s</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="102"/>
<source>Erreur dans la creation du mot-cle : %s</source>
- <translation type="obsolete">Error when creating %s</translation>
+ <translation>Error when creating %s</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="191"/>
<source>Impossible d'ouvrir le fichier : %s </source>
- <translation type="obsolete">unable to open file : %s</translation>
+ <translation>unable to open file : %s</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="208"/>
<source>le texte a analyser n'est pas celui d'une commande ou d'un operateur : </source>
- <translation type="obsolete">text is no eficas text:</translation>
+ <translation>text is no eficas text:</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="216"/>
<source>Erreur dans la recherche du nom de la commande : </source>
- <translation type="obsolete">error when searching command's name :</translation>
+ <translation>error when searching command's name :</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="219"/>
<source>Erreur dans la recherche des args de la commande :</source>
- <translation type="obsolete">error when searching argument's command :</translation>
+ <translation>error when searching argument's command :</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="238"/>
<source>Erreur dans la recherche du nom de la commande : </source>
- <translation type="obsolete">error when searching command's name :</translation>
+ <translation>error when searching command's name :</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="241"/>
<source>Erreur dans la recherche des args de la commande : </source>
- <translation type="obsolete">error when searching argument's command :</translation>
+ <translation>error when searching argument's command :</translation>
</message>
<message>
<location filename="Editeur/Objecttreeitem.py" line="304"/>
<source>%d n'est pas un index valide pour append_brother</source>
- <translation type="obsolete">%d is not a valid index for append-brother</translation>
+ <translation>%d is not a valid index for append-brother</translation>
</message>
<message>
<location filename="Editeur/session.py" line="96"/>
<source>le fichier de commandes %s n'existe pas</source>
- <translation type="obsolete">commands file %s does not exist</translation>
+ <translation>commands file %s does not exist</translation>
</message>
<message>
<location filename="Editeur/session.py" line="104"/>
<source>un fichier de commandes doit etre defini avant une poursuite %s</source>
- <translation type="obsolete">You have to define principal commands file before a secondary (poursuite) file %s</translation>
+ <translation>You have to define principal commands file before a secondary (poursuite) file %s</translation>
</message>
<message>
<location filename="Editeur/session.py" line="106"/>
<source>le fichier poursuite %s n'existe pas</source>
- <translation type="obsolete">the secondary (poursuite) file does not exist</translation>
+ <translation>the secondary (poursuite) file does not exist</translation>
</message>
<message>
<location filename="Editeur/session.py" line="117"/>
<source>include mal defini %s</source>
- <translation type="obsolete">include is not correct %s</translation>
+ <translation>include is not correct %s</translation>
</message>
<message>
<location filename="Editeur/session.py" line="123"/>
<source>un fichier de commandes doit etre defini avant un include %s</source>
- <translation type="obsolete">You have to define principal commands file before include %s</translation>
+ <translation>You have to define principal commands file before include %s</translation>
</message>
<message>
<location filename="Editeur/session.py" line="125"/>
<source>le fichier include %s n'existe pas</source>
- <translation type="obsolete">include file does not exist</translation>
+ <translation>include file does not exist</translation>
</message>
<message>
<location filename="Editeur/session.py" line="154"/>
<source>jdc %(v_1)s, le fichier
de commandes %(v_2)s n'existe pas</source>
<comment>v_1</comment>
- <translation type="obsolete">jdc %(v_1)s : .comm %(v_2)s does not exist</translation>
+ <translation>jdc %(v_1)s : .comm %(v_2)s does not exist</translation>
</message>
<message>
<location filename="Editeur/session.py" line="188"/>
<source> le fichier jdc %s n'existe pas</source>
- <translation type="obsolete">file %s does not exist</translation>
+ <translation>file %s does not exist</translation>
</message>
<message>
<location filename="Editeur/session.py" line="198"/>
<source> jdc %s manque option jdc dans section jdc</source>
- <translation type="obsolete">jdc %s does not have jdc option in command line</translation>
+ <translation>jdc %s does not have jdc option in command line</translation>
</message>
<message>
<location filename="Editeur/session.py" line="218"/>
<source>%(v_1)s include %(v_2)s : %(v_3)s</source>
<comment>v_1</comment>
- <translation type="obsolete">%(v_1)s include %(v_2)s : %(v_3)s</translation>
+ <translation>%(v_1)s include %(v_2)s : %(v_3)s</translation>
</message>
<message>
<location filename="Editeur/session.py" line="222"/>
<source>%(v_1)s fichier poursuite: %(v_2)s</source>
<comment>v_1</comment>
- <translation type="obsolete">%(v_1)ssecondary (poursuite) file %(v_2)s </translation>
+ <translation>%(v_1)ssecondary (poursuite) file %(v_2)s </translation>
</message>
<message>
<location filename="Editeur/session.py" line="229"/>
<source>nom etude : %s</source>
- <translation type="obsolete">study's name : %s</translation>
+ <translation>study's name : %s</translation>
</message>
<message>
<location filename="Editeur/session.py" line="236"/>
<source>utilisation : %prog [options]</source>
- <translation type="obsolete">use : %prog[options]</translation>
+ <translation>use : %prog[options]</translation>
</message>
<message>
<location filename="Editeur/session.py" line="238"/>
<source>nom du fichier de commandes</source>
- <translation type="obsolete">principal .comm file's name</translation>
+ <translation>principal .comm file's name</translation>
</message>
<message>
<location filename="Editeur/session.py" line="242"/>
<source>nom du fichier poursuite</source>
- <translation type="obsolete">secondary (poursuite) file's name</translation>
+ <translation>secondary (poursuite) file's name</translation>
</message>
<message>
<location filename="Editeur/session.py" line="246"/>
<source>numero d'unite suivi du nom du fichier include</source>
- <translation type="obsolete">unit number and include file's name</translation>
+ <translation>unit number and include file's name</translation>
</message>
<message>
<location filename="Editeur/session.py" line="250"/>
<source>fichier decrivant une etude</source>
- <translation type="obsolete">file containing a study</translation>
+ <translation>file containing a study</translation>
</message>
<message>
<location filename="Editeur/session.py" line="254"/>
<source>version de catalogue a utiliser</source>
- <translation type="obsolete"> catalog's version</translation>
+ <translation> catalog's version</translation>
</message>
<message>
<location filename="Editeur/session.py" line="257"/>
<source>nom du code a utiliser</source>
- <translation type="obsolete">code's name</translation>
+ <translation>code's name</translation>
</message>
<message>
<location filename="Editeur/session.py" line="260"/>
<source>niveau de debug</source>
- <translation type="obsolete">debug level</translation>
+ <translation>debug level</translation>
</message>
<message>
<location filename="Editeur/session.py" line="263"/>
<source>schema</source>
- <translation type="obsolete">schema</translation>
+ <translation>schema</translation>
</message>
<message>
<location filename="Editeur/session.py" line="298"/>
<source>Nombre incorrect d'arguments</source>
- <translation type="obsolete">incorrect number of arguments</translation>
+ <translation>incorrect number of arguments</translation>
</message>
<message>
<location filename="Editeur/session.py" line="296"/>
<source>Localisation specifiee pour l'application.</source>
- <translation type="obsolete">specified localization for the application.</translation>
+ <translation>specified localization for the application.</translation>
</message>
<message>
<location filename="Editeur/utils.py" line="130"/>
<source>Impossible de transferer les fichiers requis dans : %s</source>
- <translation type="obsolete">unable to transfer files to : %s</translation>
+ <translation>unable to transfer files to : %s</translation>
</message>
<message>
<location filename="Ihm/I_MCLIST.py" line="97"/>
<source>Erreur</source>
- <translation type="obsolete">error</translation>
+ <translation>error</translation>
</message>
<message>
<location filename="Extensions/commande_comm.py" line="199"/>
<source>Erreurs fatales</source>
- <translation type="obsolete">fatale error</translation>
+ <translation>fatale error</translation>
</message>
<message>
<location filename="Extensions/commande_comm.py" line="202"/>
<source>Impossible reconstruire commande
</source>
- <translation type="obsolete">unable to construct command</translation>
+ <translation>unable to construct command</translation>
</message>
<message>
<location filename="Extensions/commentaire.py" line="146"/>
<source>Objet commentaire non valorise</source>
- <translation type="obsolete">comment object has no value</translation>
+ <translation>comment object has no value</translation>
</message>
<message>
<location filename="Extensions/interpreteur_formule.py" line="110"/>
<source>Debut Fonction %s</source>
- <translation type="obsolete">start function %s</translation>
+ <translation>start function %s</translation>
</message>
<message>
<location filename="Extensions/interpreteur_formule.py" line="111"/>
<source>Fin Fonction %s</source>
- <translation type="obsolete">end function %s</translation>
+ <translation>end function %s</translation>
</message>
<message>
<location filename="Extensions/jdc_include.py" line="94"/>
<source>Nom de concept deja defini : %s</source>
- <translation type="obsolete">Concept's name %s is already existing</translation>
+ <translation>Concept's name %s is already existing</translation>
</message>
<message>
<location filename="Extensions/mcnuplet.py" line="104"/>
<source>Longueur incorrecte</source>
- <translation type="obsolete">incorrect length</translation>
+ <translation>incorrect length</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="65"/>
<source>L'attribut 'min' doit etre un entier : </source>
- <translation type="obsolete">min must be an integer :</translation>
+ <translation>min must be an integer :</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="68"/>
<source>L'attribut 'max' doit etre un entier : </source>
- <translation type="obsolete">max must be an integer :</translation>
+ <translation>max must be an integer :</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="70"/>
<source>Nombres d'occurrence min et max invalides :</source>
- <translation type="obsolete">min and max are invalid:</translation>
+ <translation>min and max are invalid:</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="72"/>
<source>L'attribut 'fr' doit etre une chaine de caracteres</source>
- <translation type="obsolete">'fr' must be a string</translation>
+ <translation>'fr' must be a string</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="74"/>
<source>L'attribut 'statut' doit valoir 'o','f','c' ou 'd'</source>
- <translation type="obsolete">values for statut arguments are : 'o','f','c' or 'd'</translation>
+ <translation>values for statut arguments are : 'o','f','c' or 'd'</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="76"/>
<source>L'attribut 'docu' doit etre une chaine de caracteres</source>
- <translation type="obsolete">docu must be a string</translation>
+ <translation>docu must be a string</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="105"/>
<source>Fin </source>
- <translation type="obsolete">end</translation>
+ <translation>end</translation>
</message>
<message>
<location filename="Extensions/parametre_eval.py" line="149"/>
<source>Le parametre EVAL %s ne peut valoir None</source>
- <translation type="obsolete">None is not a valid value for Eval parameter %s </translation>
+ <translation>None is not a valid value for Eval parameter %s </translation>
</message>
<message>
<location filename="Extensions/parametre_eval.py" line="163"/>
<source>Pas de nom donne au parametre EVAL</source>
- <translation type="obsolete">No name for parameter EVAL</translation>
+ <translation>No name for parameter EVAL</translation>
</message>
<message>
<location filename="Extensions/parametre_eval.py" line="166"/>
<source>Un nom de parametre ne peut depasser 8 caracteres</source>
- <translation type="obsolete">parameter's name can not exceed 8 characters</translation>
+ <translation>parameter's name can not exceed 8 characters</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="159"/>
<source>Un concept de nom %s existe deja !</source>
- <translation type="obsolete">Concept's name %s is already existing!</translation>
+ <translation>Concept's name %s is already existing!</translation>
</message>
<message>
<location filename="generator/Formatage.py" line="129"/>
<source>ERREUR</source>
- <translation type="obsolete">ERROR</translation>
+ <translation>ERROR</translation>
</message>
<message>
<location filename="generator/generator_asterv5.py" line="101"/>
<source>Format pas implemente : %s</source>
- <translation type="obsolete">format : %s not implemented</translation>
+ <translation>format : %s not implemented</translation>
</message>
<message>
<location filename="generator/generator_asterv5.py" line="145"/>
<source>Type d'objet non prevu : %s</source>
- <translation type="obsolete">object type not expected : %s</translation>
+ <translation>object type not expected : %s</translation>
</message>
<message>
<location filename="generator/generator_CARMEL3D.py" line="256"/>
<source> ce groupe de maillage %s est associe a au moins un materiau et au moins une source.</source>
- <translation type="obsolete">mesh group %s is associated with at least one material and at least a source.</translation>
+ <translation>mesh group %s is associated with at least one material and at least a source.</translation>
</message>
<message>
<location filename="generator/generator_CARMEL3D.py" line="267"/>
<source>ce groupe de maillage %s n'est associe a aucun materiau ou source.</source>
- <translation type="obsolete">mesh group %s is associated with no material or no source.</translation>
+ <translation>mesh group %s is associated with no material or no source.</translation>
</message>
<message>
<location filename="generator/generator_Creation.py" line="83"/>
<source>toutes les donnees ne sont pas connues</source>
- <translation type="obsolete">all data are not available</translation>
+ <translation>all data are not available</translation>
</message>
<message>
<location filename="generator/generator_file_from_template.py" line="59"/>
<source>Fichier patron %s n'existe pas.</source>
- <translation type="obsolete">pattern file %s does not exist.</translation>
+ <translation>pattern file %s does not exist.</translation>
</message>
<message>
<location filename="generator/generator_pyth.py" line="100"/>
<source>Pas supporte</source>
- <translation type="obsolete">not implemented</translation>
+ <translation>not implemented</translation>
</message>
<message>
<location filename="generator/generator_ini.py" line="105"/>
<source>Entite inconnue ou interdite :%s</source>
- <translation type="obsolete">Unknown or unsupported entity : %s</translation>
+ <translation>Unknown or unsupported entity : %s</translation>
</message>
<message>
<location filename="generator/generator_ini.py" line="123"/>
<source>Entite inconnue ou interdite :%s. Elle est ignoree</source>
- <translation type="obsolete">Unknown or unsupported entity : %s. ignored</translation>
+ <translation>Unknown or unsupported entity : %s. ignored</translation>
</message>
<message>
<location filename="generator/generator_ini.py" line="133"/>
<source>Les tuples ne sont pas supportes pour le format ini :%s </source>
- <translation type="obsolete">Tuple are not allowed for format ini : %s</translation>
+ <translation>Tuple are not allowed for format ini : %s</translation>
</message>
<message>
<location filename="generator/generator_ini.py" line="139"/>
<source>Type de valeur non supportee par le format ini :%(nom)s
%(exception)s</source>
<comment>nom</comment>
- <translation type="obsolete">Unsupported type of value for .ini format %(nom)s
+ <translation>Unsupported type of value for .ini format %(nom)s
%(exception)s</translation>
</message>
<message>
<location filename="generator/generator_openturns.py" line="124"/>
<source>Il y a un pb a la Creation du XML</source>
- <translation type="obsolete">problem when creating XML</translation>
+ <translation>problem when creating XML</translation>
</message>
<message>
<location filename="generator/generator_openturns_study.py" line="127"/>
<source>Il y a un pb a la Creation du STD</source>
- <translation type="obsolete">problem when creating STD</translation>
+ <translation>problem when creating STD</translation>
</message>
<message>
<location filename="generator/generator_pyth.py" line="130"/>
<source>Entite inconnue ou interdite : %s. Elle est ignoree</source>
- <translation type="obsolete">unkown ou unsupported entity : %s. ignored</translation>
+ <translation>unkown ou unsupported entity : %s. ignored</translation>
</message>
<message>
<location filename="generator/OpenturnsXML.py" line="228"/>
<source>Tag %s non-defini. Ceci est un bogue interne. en informer les developpeurs.</source>
- <translation type="obsolete">Tag %s not defined. Ask developpeurs team.</translation>
+ <translation>Tag %s not defined. Ask developpeurs team.</translation>
</message>
<message>
<location filename="generator/OpenturnsXML.py" line="240"/>
<source> Le mot-cle %s est obligatoire.</source>
- <translation type="obsolete">mandatory keyword : %s.</translation>
+ <translation>mandatory keyword : %s.</translation>
</message>
<message>
<location filename="Ihm/I_ASSD.py" line="29"/>
<source>concept %(inst_name)s de type %(class_name)s</source>
<comment>inst_name</comment>
- <translation type="obsolete">concept %(inst_name)s of type %(class_name)s</translation>
+ <translation>concept %(inst_name)s of type %(class_name)s</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="108"/>
<source>Un nom de concept doit etre un identificateur Python</source>
- <translation type="obsolete">concept's name must be a python identifier</translation>
+ <translation>concept's name must be a python identifier</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="126"/>
<source>Concept existant</source>
- <translation type="obsolete">allready existing concept</translation>
+ <translation>allready existing concept</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="128"/>
<source>Operateur reentrant mais concept non existant</source>
- <translation type="obsolete">operator 'reentrant' but concept does not exist</translation>
+ <translation>operator 'reentrant' but concept does not exist</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="140"/>
<source>Operateur reentrant et concept existant trouve</source>
- <translation type="obsolete">Operator 're-entrant' and concept exists</translation>
+ <translation>Operator 're-entrant' and concept exists</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="142"/>
<source>Concept deja existant et de mauvais type</source>
- <translation type="obsolete">already existing concept of not supported type</translation>
+ <translation>already existing concept of not supported type</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="198"/>
<source>Nommage du concept refuse : un concept de meme nom existe deja</source>
- <translation type="obsolete">Name is refused : already existing concept</translation>
+ <translation>Name is refused : already existing concept</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="52"/>
<source>Nommage du concept effectue</source>
- <translation type="obsolete">Concept named</translation>
+ <translation>Concept named</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="176"/>
<source>Nommage impossible %s</source>
- <translation type="obsolete">unable to name %s</translation>
+ <translation>unable to name %s</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="105"/>
<source>La liste des arguments d'une formule doit etre entre parentheses : parenthese ouvrante manquante</source>
- <translation type="obsolete">formula expects a list of arguments : no left parenthesis</translation>
+ <translation>formula expects a list of arguments : no left parenthesis</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="107"/>
<source>La liste des arguments d'une formule doit etre entre parentheses : parenthese fermante manquante</source>
- <translation type="obsolete">formula expects a list of arguments : no right parenthes</translation>
+ <translation>formula expects a list of arguments : no right parenthes</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="152"/>
<source>Pas de nom donne a la FORMULE</source>
- <translation type="obsolete">no name given</translation>
+ <translation>no name given</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="154"/>
<source>Un nom de FORMULE ne peut depasser 8 caracteres</source>
- <translation type="obsolete">name too long (8 characters max)</translation>
+ <translation>name too long (8 characters max)</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="156"/>
<source>Un nom de FORMULE ne peut pas commencer par un chiffre</source>
- <translation type="obsolete">name does not begin with a figure</translation>
+ <translation>name does not begin with a figure</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="173"/>
<source>Le type de la valeur retournee n'est pas specifie</source>
- <translation type="obsolete">no type is specified for the return value</translation>
+ <translation>no type is specified for the return value</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="175"/>
<source>Une formule ne peut retourner une valeur de type : %s</source>
- <translation type="obsolete">impossible to return a value of type : %s</translation>
+ <translation>impossible to return a value of type : %s</translation>
</message>
<message>
<location filename="Ihm/I_JDC.py" line="308"/>
<source>Impossible d'ajouter la commande</source>
- <translation type="obsolete">unable to add the keyword (commande)</translation>
+ <translation>unable to add the keyword (commande)</translation>
</message>
<message>
<location filename="Ihm/I_JDC.py" line="314"/>
<source>Impossible d ajouter la commande</source>
- <translation type="obsolete">unable to add the keyword (commande)</translation>
+ <translation>unable to add the keyword (commande)</translation>
</message>
<message>
<location filename="Ihm/I_JDC.py" line="629"/>
<source>Pas implemente</source>
- <translation type="obsolete">not implemented</translation>
+ <translation>not implemented</translation>
</message>
<message>
<location filename="Ihm/I_JDC.py" line="724"/>
<source>Nom de concept deja defini </source>
- <translation type="obsolete">already defined concept</translation>
+ <translation>already defined concept</translation>
</message>
<message>
<location filename="Ihm/I_JDC.py" line="899"/>
<source> Nom de concept deja defini : </source>
- <translation type="obsolete">already defined concept :</translation>
+ <translation>already defined concept :</translation>
</message>
<message>
<location filename="Ihm/I_JDC.py" line="942"/>
<source>Impossible de trouver le fichier correspondant a l'unite </source>
- <translation type="obsolete">unable to find file corresponding to unit</translation>
+ <translation>unable to find file corresponding to unit</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="725"/>
<source> n'est pas un fichier existant</source>
- <translation type="obsolete">is not an existing file</translation>
+ <translation>is not an existing file</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="1107"/>
<source>Fichier invalide %s</source>
- <translation type="obsolete">invalid file %s</translation>
+ <translation>invalid file %s</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="559"/>
<source>Impossible de construire le jeu de commandes correspondant au fichier</source>
- <translation type="obsolete">unable to create the jdc corresponding to the file</translation>
+ <translation>unable to create the jdc corresponding to the file</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="1057"/>
<source>Erreur lors de l'evaluation du fichier inclus</source>
- <translation type="obsolete">Error when reading the 'include' file</translation>
+ <translation>Error when reading the 'include' file</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="1195"/>
<source>Ce fichier ne sera pas pris en compte
%s</source>
- <translation type="obsolete">the file is ignored
+ <translation>the file is ignored
%s</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="735"/>
<source>Ce fichier ne sera pas pris en compte
Le fichier associe n'est pas defini</source>
- <translation type="obsolete">the file is ignored : associated file is not defined</translation>
+ <translation>the file is ignored : associated file is not defined</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="907"/>
<source>Le fichier n est pas defini</source>
- <translation type="obsolete">file is not defined</translation>
+ <translation>file is not defined</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="944"/>
<source>le fichier doit contenir une unique variable de sortie</source>
- <translation type="obsolete">file must declare a single output variable</translation>
+ <translation>file must declare a single output variable</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="990"/>
<source>Fichier invalide</source>
- <translation type="obsolete">invalid file</translation>
+ <translation>invalid file</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="993"/>
<source>Le contenu de ce fichier ne sera pas pris en compte
%s</source>
- <translation type="obsolete">the file will be ignored :
+ <translation>the file will be ignored :
%s</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="1047"/>
<source>Le fichier INCLUDE n est pas defini</source>
- <translation type="obsolete">include file is not defined</translation>
+ <translation>include file is not defined</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="1057"/>
<source>Le contenu de ce fichier ne sera pas pris en compte
</source>
- <translation type="obsolete">file will be ignored
+ <translation>file will be ignored
</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="1195"/>
<source>Erreur lors de l'evaluation du fichier poursuite</source>
- <translation type="obsolete">Error when creating secondary (poursuite) file</translation>
+ <translation>Error when creating secondary (poursuite) file</translation>
</message>
<message>
<location filename="Ihm/I_MCCOMPO.py" line="224"/>
<source>L'objet %(v_1)s ne peut etre un fils de %(v_2)s</source>
<comment>v_1</comment>
- <translation type="obsolete">Object %(v_1)s can not be a child for %(v_2)s</translation>
+ <translation>Object %(v_1)s can not be a child for %(v_2)s</translation>
</message>
<message>
<location filename="Ihm/I_MCCOMPO.py" line="253"/>
<source>L'objet %s ne peut pas etre repete</source>
- <translation type="obsolete">Object %s can not be repeated</translation>
+ <translation>Object %s can not be repeated</translation>
</message>
<message>
<location filename="Ihm/I_MCFACT.py" line="50"/>
<source>Erreur - mclist inexistante : %s</source>
- <translation type="obsolete">Error - mclist does not exist : %s</translation>
+ <translation>Error - mclist does not exist : %s</translation>
</message>
<message>
<location filename="Ihm/I_MCFACT.py" line="59"/>
<source>Erreur - mot cle facteur de nom : %s</source>
- <translation type="obsolete">Error - keyword "mot-clef facteur" nammed : %s</translation>
+ <translation>Error - keyword "mot-clef facteur" nammed : %s</translation>
</message>
<message>
<location filename="Ihm/I_MCLIST.py" line="94"/>
<source>traitement non-prevu</source>
- <translation type="obsolete">unexpected task</translation>
+ <translation>unexpected task</translation>
</message>
<message>
<location filename="Ihm/I_MCLIST.py" line="97"/>
<source>L'objet %s ne peut pas etre ajoute</source>
- <translation type="obsolete">Object %s cannot be add</translation>
+ <translation>Object %s cannot be add</translation>
</message>
<message>
<location filename="Ihm/I_MCSIMP.py" line="258"/>
<source>None n'est pas une valeur autorisee</source>
- <translation type="obsolete">None is not a valid value</translation>
+ <translation>None is not a valid value</translation>
</message>
<message>
<location filename="Ihm/I_MCSIMP.py" line="490"/>
<source>un concept de meme nom existe deja</source>
- <translation type="obsolete">concept already exists</translation>
+ <translation>concept already exists</translation>
</message>
<message>
<location filename="Ihm/I_MCSIMP.py" line="512"/>
<source>Concept cree</source>
- <translation type="obsolete">concept created</translation>
+ <translation>concept created</translation>
</message>
<message>
<location filename="Ihm/I_MCSIMP.py" line="643"/>
<source>La matrice n'est pas une matrice %(n_lign)d sur %(n_col)d</source>
<comment>n_lign</comment>
- <translation type="obsolete">matrix is not a %(n_lign)d x %(n_col)d matrix</translation>
+ <translation>matrix is not a %(n_lign)d x %(n_col)d matrix</translation>
</message>
<message>
<location filename="InterfaceQT4/compocomm.py" line="41"/>
<source>Decommenter</source>
- <translation type="obsolete">uncomment</translation>
+ <translation>uncomment</translation>
</message>
<message>
<location filename="InterfaceQT4/compocomm.py" line="43"/>
<source>Decommente la commande </source>
- <translation type="obsolete">uncomment the command</translation>
+ <translation>uncomment the command</translation>
</message>
<message>
<location filename="InterfaceQT4/compofact.py" line="133"/>
<source>Impossible de supprimer un mot-cle obligatoire </source>
- <translation type="obsolete">mandatory keyword cannot be deleted</translation>
+ <translation>mandatory keyword cannot be deleted</translation>
</message>
<message>
<location filename="InterfaceQT4/compofact.py" line="136"/>
<source>Mot-cle %s supprime</source>
- <translation type="obsolete">Keyword %s deleted</translation>
+ <translation>Keyword %s deleted</translation>
</message>
<message>
<location filename="InterfaceQT4/compofact.py" line="141"/>
<source>Pb interne : impossible de supprimer ce mot-cle</source>
- <translation type="obsolete">internal problem : unable to delete keyword</translation>
+ <translation>internal problem : unable to delete keyword</translation>
</message>
<message>
<location filename="InterfaceQT4/compojdc.py" line="86"/>
<source>Commentaire supprime</source>
- <translation type="obsolete">comment is deleted</translation>
+ <translation>comment is deleted</translation>
</message>
<message>
<location filename="InterfaceQT4/compojdc.py" line="88"/>
<source>Commande %s supprimee</source>
- <translation type="obsolete">command %s is deleted</translation>
+ <translation>command %s is deleted</translation>
</message>
<message>
<location filename="InterfaceQT4/compojdc.py" line="91"/>
<source>Pb interne : impossible de supprimer cet objet</source>
- <translation type="obsolete">internal problem : unable to delete object</translation>
+ <translation>internal problem : unable to delete object</translation>
</message>
<message>
<location filename="InterfaceQT4/compomacro.py" line="125"/>
<source>Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas
</source>
- <translation type="obsolete">unable to convert .comm file in order to open it with Eficas</translation>
+ <translation>unable to convert .comm file in order to open it with Eficas</translation>
</message>
<message>
<location filename="InterfaceQT4/compomacro.py" line="157"/>
<source>Include vide</source>
- <translation type="obsolete">include file is empty</translation>
+ <translation>include file is empty</translation>
</message>
<message>
<location filename="InterfaceQT4/compomacro.py" line="157"/>
<source>L'include doit etre correctement initialise pour etre visualise</source>
- <translation type="obsolete">include file must be correct</translation>
+ <translation>include file must be correct</translation>
</message>
<message>
<location filename="InterfaceQT4/compomclist.py" line="223"/>
<source>Impossible de supprimer ce mot-clef</source>
- <translation type="obsolete">unable to delete this keyword</translation>
+ <translation>unable to delete this keyword</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="67"/>
<source>View3D</source>
- <translation type="obsolete">View3D</translation>
+ <translation>View3D</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="69"/>
<source>affiche dans Geom les elements de structure</source>
- <translation type="obsolete">diplay SE in Geom</translation>
+ <translation>diplay SE in Geom</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="76"/>
<source>Graphique</source>
- <translation type="obsolete">graphic</translation>
+ <translation>graphic</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="78"/>
<source>affiche la distribution </source>
- <translation type="obsolete">display distribution</translation>
+ <translation>display distribution</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="201"/>
<source>Impossible de supprimer un mot-clef obligatoire </source>
- <translation type="obsolete">unable to delete a mandatory keyword</translation>
+ <translation>unable to delete a mandatory keyword</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="203"/>
<source>Mot-clef %s supprime </source>
- <translation type="obsolete">Keyword %s is deleted</translation>
+ <translation>Keyword %s is deleted</translation>
</message>
<message>
<location filename="InterfaceQT4/compoparam.py" line="146"/>
<source>Definition d'un parametre</source>
- <translation type="obsolete">defines a parameter</translation>
+ <translation>defines a parameter</translation>
</message>
<message>
<location filename="InterfaceQT4/configuration.py" line="156"/>
<source>Import du fichier de Configuration</source>
- <translation type="obsolete">import configuration file</translation>
+ <translation>import configuration file</translation>
</message>
<message>
<location filename="InterfaceQT4/configuration.py" line="156"/>
<source>Erreur a la lecture du fichier de configuration %s </source>
- <translation type="obsolete">Error when reading configuration file</translation>
+ <translation>Error when reading configuration file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="196"/>
<source>Erreur fatale au chargement de %s</source>
- <translation type="obsolete">fatal error when loading %s</translation>
+ <translation>fatal error when loading %s</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="197"/>
<source>Erreur fatale au chargement d'un fichier</source>
- <translation type="obsolete">Fatal error when loading file</translation>
+ <translation>Fatal error when loading file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="313"/>
<source>fichier modifie</source>
- <translation type="obsolete">file updated </translation>
+ <translation>file updated </translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="313"/>
<source>Attention! fichier change hors EFICAS</source>
- <translation type="obsolete">Warning ! this file was modified outside Eficas</translation>
+ <translation>Warning ! this file was modified outside Eficas</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="367"/>
<source>Type de fichier non reconnu</source>
- <translation type="obsolete">unsupported file type</translation>
+ <translation>unsupported file type</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="324"/>
<source>EFICAS ne sait pas ouvrir le type de fichier %s</source>
- <translation type="obsolete">Eficas is not able to open this file's type : %s</translation>
+ <translation>Eficas is not able to open this file's type : %s</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="367"/>
<source>EFICAS ne sait pas ouvrir ce type de fichier</source>
- <translation type="obsolete">Eficas is not able to open this file's type</translation>
+ <translation>Eficas is not able to open this file's type</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="610"/>
<source>Copie impossible</source>
- <translation type="obsolete">unable to copy</translation>
+ <translation>unable to copy</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="582"/>
<source>Veuillez selectionner un objet a copier</source>
- <translation type="obsolete">you have to select an object to copy</translation>
+ <translation>you have to select an object to copy</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="587"/>
<source>Veuillez selectionner un seul objet : la copie se fera apres le noeud selectionne</source>
- <translation type="obsolete">You have to select a single object : copy will be done after the selected node</translation>
+ <translation>You have to select a single object : copy will be done after the selected node</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="610"/>
<source>Aucun Objet n a ete copie ou coupe</source>
- <translation type="obsolete">No object was cut or copied</translation>
+ <translation>No object was cut or copied</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="636"/>
<source>Copie refusee</source>
- <translation type="obsolete">rejected copy</translation>
+ <translation>rejected copy</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="622"/>
<source>Eficas n a pas reussi a copier l objet</source>
- <translation type="obsolete">Eficas cannot copy this object</translation>
+ <translation>Eficas cannot copy this object</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="636"/>
<source>Copie refusee pour ce type d objet</source>
- <translation type="obsolete">Copy rejected : bad object type</translation>
+ <translation>Copy rejected : bad object type</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="648"/>
<source>Deplacement refuse</source>
- <translation type="obsolete">move rejected</translation>
+ <translation>move rejected</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="648"/>
<source>Deplacement refuse entre 2 fichiers. Seule la copie est autorisee </source>
- <translation type="obsolete">move rejected. no move between two files : only copy is available</translation>
+ <translation>move rejected. no move between two files : only copy is available</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="684"/>
<source>Copie impossible a cet endroit</source>
- <translation type="obsolete">unable to copy here</translation>
+ <translation>unable to copy here</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="684"/>
<source>Veuillez selectionner une commande, un parametre, un commentaire ou une macro</source>
- <translation type="obsolete">select a command; a parameter, a comment or a macro</translation>
+ <translation>select a command; a parameter, a comment or a macro</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="745"/>
<source>Choix d'un fichier XML</source>
- <translation type="obsolete">Choice of XML file</translation>
+ <translation>Choice of XML file</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="66"/>
<source>Ouvrir Fichier</source>
- <translation type="obsolete">Open file</translation>
+ <translation>Open file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1036"/>
<source>Erreur a la generation</source>
- <translation type="obsolete">Error when generating</translation>
+ <translation>Error when generating</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1036"/>
<source>EFICAS ne sait pas convertir ce JDC</source>
- <translation type="obsolete">Eficas is unable to convert JDC</translation>
+ <translation>Eficas is unable to convert JDC</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1040"/>
<source>Format %s non reconnu</source>
- <translation type="obsolete"> not supported format %s</translation>
+ <translation> not supported format %s</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="895"/>
<source>Execution impossible </source>
- <translation type="obsolete">Unable to execute</translation>
+ <translation>Unable to execute</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="832"/>
<source>le JDC doit etre valide pour une execution MAP</source>
- <translation type="obsolete">JDC has to be valid before run</translation>
+ <translation>JDC has to be valid before run</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="835"/>
<source>le JDC doit contenir un et un seul composant</source>
- <translation type="obsolete">JDC must contains a single componant</translation>
+ <translation>JDC must contains a single componant</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="935"/>
- <source>sauvegarde</source>
- <translation type="obsolete">save</translation>
+ <source>Sauvegarde du Fichier</source>
+ <translation>Save File</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="944"/>
- <source>Sauvegarde du Fichier</source>
- <translation type="obsolete">save file</translation>
+ <source>Le fichier</source>
+ <translation>file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="944"/>
- <source>Le fichier <b>%s</b> existe deja.</source>
- <translation type="obsolete">file <b>%s</b> already exists.</translation>
+ <source>existe deja</source>
+ <translation>allready exists</translation>
</message>
<message>
- <location filename="InterfaceQT4/editor.py" line="944"/>
<source>&Ecraser</source>
- <translation type="obsolete">&Replace</translation>
+ <translation>&Replace</translation>
</message>
<message>
- <location filename="InterfaceQT4/editor.py" line="1178"/>
- <source>Donnez le nom du fichier correspondant a l unite logique </source>
- <translation type="obsolete">Choose file corresponding to unit </translation>
+ <source>&Abandonner</source>
+ <translation>&Cancel</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1181"/>
<source>Choix d'un fichier de poursuite</source>
- <translation type="obsolete">Choose poursuite file</translation>
+ <translation>Choose poursuite file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1182"/>
<source>Le fichier %s contient une commande POURSUITE
</source>
- <translation type="obsolete">file %s contains a POURSUITE command</translation>
+ <translation>file %s contains a POURSUITE command</translation>
</message>
<message>
<location filename="InterfaceQT4/gereTraduction.py" line="37"/>
<source>Traduire Fichier</source>
- <translation type="obsolete">file translation</translation>
+ <translation>file translation</translation>
</message>
<message>
<location filename="InterfaceQT4/gereTraduction.py" line="37"/>
<source>Fichiers JDC (*.comm);;Tous les Fichiers (*)</source>
- <translation type="obsolete">JDC files(*.comm);; All FIles(*)</translation>
+ <translation>JDC files(*.comm);; All FIles(*)</translation>
</message>
<message>
<location filename="InterfaceQT4/gereTraduction.py" line="62"/>
<source>Fichier Traduit : %s
</source>
- <translation type="obsolete">Translated file : %s</translation>
+ <translation>Translated file : %s</translation>
</message>
<message>
<location filename="InterfaceQT4/gereTraduction.py" line="72"/>
<source>Pas de difference entre le fichier origine et le fichier traduit</source>
- <translation type="obsolete">No difference between the primary file and the translated file</translation>
+ <translation>No difference between the primary file and the translated file</translation>
</message>
<message>
<location filename="InterfaceQT4/monChoixCata.py" line="42"/>
<source>%d versions du catalogue sont disponibles</source>
- <translation type="obsolete">%d catalogs versions are available</translation>
+ <translation>%d catalogs versions are available</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="115"/>
<source>&Ok</source>
- <translation type="obsolete">&Ok</translation>
+ <translation>&Ok</translation>
</message>
<message>
<location filename="InterfaceQT4/feuille.py" line="173"/>
<source>Entrez </source>
- <translation type="obsolete">enter</translation>
+ <translation>enter</translation>
</message>
<message>
<location filename="InterfaceQT4/feuille.py" line="119"/>
<source> valeurs </source>
- <translation type="obsolete"> values </translation>
+ <translation> values </translation>
</message>
<message>
<location filename="InterfaceQT4/feuille.py" line="174"/>
<source>Entrez entre </source>
- <translation type="obsolete">enter between </translation>
+ <translation>enter between </translation>
</message>
<message>
<location filename="InterfaceQT4/feuille.py" line="174"/>
<source> et </source>
- <translation type="obsolete"> and </translation>
+ <translation> and </translation>
</message>
<message>
<location filename="InterfaceQT4/gereIcones.py" line="245"/>
<source>Selection</source>
- <translation type="obsolete">selection</translation>
+ <translation>selection</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpBase.py" line="86"/>
<source>Type de base inconnu</source>
- <translation type="obsolete">unkown type</translation>
+ <translation>unkown type</translation>
</message>
<message>
<location filename="InterfaceQT4/gereIcones.py" line="209"/>
<source>Visualisation Fichier </source>
- <translation type="obsolete">view file</translation>
+ <translation>view file</translation>
</message>
<message>
<location filename="InterfaceQT4/gereIcones.py" line="209"/>
<source>Impossibilite d'afficher le Fichier</source>
- <translation type="obsolete">Unable to display file</translation>
+ <translation>Unable to display file</translation>
</message>
<message>
<location filename="InterfaceQT4/gereIcones.py" line="222"/>
<source>Sauvegarder Fichier</source>
- <translation type="obsolete">save File</translation>
+ <translation>save File</translation>
</message>
<message>
<location filename="InterfaceQT4/gereIcones.py" line="236"/>
<source>Fichier selectionne</source>
- <translation type="obsolete">file selected</translation>
+ <translation>file selected</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpComplexe.py" line="116"/>
<source>expression valide</source>
- <translation type="obsolete">valid expression</translation>
+ <translation>valid expression</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpComplexe.py" line="122"/>
<source>expression invalide</source>
- <translation type="obsolete">unvalid expression</translation>
+ <translation>unvalid expression</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpComplexe.py" line="128"/>
<source>expression n est pas de la forme a+bj</source>
- <translation type="obsolete">expression is not as a+bj</translation>
+ <translation>expression is not as a+bj</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpComplexe.py" line="140"/>
<source>entrer une seule valeur SVP</source>
- <translation type="obsolete">Please, enter a single value</translation>
+ <translation>Please, enter a single value</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpComplexe.py" line="158"/>
<source>saisir le type de complexe</source>
- <translation type="obsolete">choose complex's type</translation>
+ <translation>choose complex's type</translation>
</message>
<message>
<location filename="InterfaceQT4/monViewTexte.py" line="69"/>
<source>Sauvegarder le fichier</source>
- <translation type="obsolete">save file</translation>
+ <translation>save file</translation>
</message>
<message>
<location filename="InterfaceQT4/monViewTexte.py" line="69"/>
<source>Le fichier <b>%(v_1)s</b> n'a pu etre sauvegarde. <br>Raison : %(v_2)s</source>
<comment>v_1</comment>
- <translation type="obsolete">file <b>%(v_1)s</b> was not saved. Raison : %(v_2)s</translation>
+ <translation>file <b>%(v_1)s</b> was not saved. Raison : %(v_2)s</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="78"/>
<source>&Recents</source>
- <translation type="obsolete">&Recently Opened</translation>
+ <translation>&Recently Opened</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="147"/>
<source>Aide specifique </source>
- <translation type="obsolete">code's help</translation>
+ <translation>code's help</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="189"/>
<source>Traduction</source>
- <translation type="obsolete">translation</translation>
+ <translation>translation</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="194"/>
<source>Options</source>
- <translation type="obsolete">Options</translation>
+ <translation>Options</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="409"/>
<source>version </source>
- <translation type="obsolete">version</translation>
+ <translation>version</translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="276"/>
<source> pour </source>
- <translation type="obsolete"> for </translation>
+ <translation> for </translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="436"/>
<source>Aide Indisponible</source>
- <translation type="obsolete">no help avalaible</translation>
+ <translation>no help avalaible</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="450"/>
<source>Parametrage</source>
- <translation type="obsolete">Options</translation>
+ <translation>Options</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="443"/>
<source>Veuillez d abord choisir un code</source>
- <translation type="obsolete">Choose a code</translation>
+ <translation>Choose a code</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="450"/>
<source>Pas de possibilite de personnalisation de la configuration </source>
- <translation type="obsolete">no options avalaible for configuration</translation>
+ <translation>no options avalaible for configuration</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="471"/>
<source>&Effacer</source>
- <translation type="obsolete">&Delete</translation>
+ <translation>&Delete</translation>
</message>
<message>
<location filename="InterfaceQT4/qtSaisie.py" line="98"/>
<source>Veuillez entrer le complexe sous forme aster ou sous forme python</source>
- <translation type="obsolete">enter a complex</translation>
+ <translation>enter a complex</translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="147"/>
<source>Import du catalogue</source>
- <translation type="obsolete">Loading catalog</translation>
+ <translation>Loading catalog</translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="95"/>
<source>Pas de catalogue defini pour le code </source>
- <translation type="obsolete">No catalog for this code</translation>
+ <translation>No catalog for this code</translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="119"/>
<source>Aucun catalogue trouve</source>
- <translation type="obsolete">No catalog</translation>
+ <translation>No catalog</translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="278"/>
<source> avec le catalogue </source>
- <translation type="obsolete">with catalog </translation>
+ <translation>with catalog </translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="147"/>
<source>Impossible d'importer le catalogue </source>
- <translation type="obsolete">unable to load catalog</translation>
+ <translation>unable to load catalog</translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="268"/>
<source>Choix d une version du code </source>
- <translation type="obsolete">Choose a version for </translation>
+ <translation>Choose a version for </translation>
</message>
<message>
<location filename="InterfaceQT4/readercata.py" line="270"/>
<source>Choix d une version </source>
- <translation type="obsolete">choose a version</translation>
+ <translation>choose a version</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="219"/>
<source>Parametre</source>
- <translation type="obsolete">parameter</translation>
+ <translation>parameter</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="37"/>
<source>Insere un parametre</source>
- <translation type="obsolete">insert a parameter</translation>
+ <translation>insert a parameter</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="115"/>
<source>item invalide</source>
- <translation type="obsolete">invalid item</translation>
+ <translation>invalid item</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="115"/>
<source>l item doit etre valide</source>
- <translation type="obsolete">item must be valid</translation>
+ <translation>item must be valid</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="141"/>
<source>apres</source>
- <translation type="obsolete">after</translation>
+ <translation>after</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="136"/>
<source>Insere un commentaire apres la commande </source>
- <translation type="obsolete">insert a comment after the command</translation>
+ <translation>insert a comment after the command</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="144"/>
<source>avant</source>
- <translation type="obsolete">before</translation>
+ <translation>before</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="139"/>
<source>Insere un commentaire avant la commande </source>
- <translation type="obsolete">insert a comment before the command</translation>
+ <translation>insert a comment before the command</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="143"/>
<source>Insere un parametre apres la commande </source>
- <translation type="obsolete">insert a parameter after the command</translation>
+ <translation>insert a parameter after the command</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="146"/>
<source>Insere un parametre avant la commande </source>
- <translation type="obsolete">insert a parameter before the commande</translation>
+ <translation>insert a parameter before the commande</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="148"/>
<source>Supprimer</source>
- <translation type="obsolete">delete</translation>
+ <translation>delete</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="150"/>
<source>supprime le mot clef </source>
- <translation type="obsolete">delete keyword</translation>
+ <translation>delete keyword</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="151"/>
<source>Documentation</source>
- <translation type="obsolete">documentation</translation>
+ <translation>documentation</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="153"/>
<source>documentation sur la commande </source>
- <translation type="obsolete">command's documentation</translation>
+ <translation>command's documentation</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="183"/>
<source>Documentation Vide</source>
- <translation type="obsolete">empty documentation</translation>
+ <translation>empty documentation</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="163"/>
<source>Aucune documentation n'est associee a ce noeud</source>
- <translation type="obsolete">no documentation is available for this node</translation>
+ <translation>no documentation is available for this node</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="170"/>
<source>impossible de trouver la commande </source>
- <translation type="obsolete">unable to find command</translation>
+ <translation>unable to find command</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="171"/>
<source>Lecteur PDF</source>
- <translation type="obsolete">PDF reader</translation>
+ <translation>PDF reader</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="182"/>
<source>impossible d'ouvrir </source>
- <translation type="obsolete">unable to open</translation>
+ <translation>unable to open</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="215"/>
<source>Commentaire</source>
- <translation type="obsolete">Comment</translation>
+ <translation>Comment</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="232"/>
<source>ce noeud</source>
- <translation type="obsolete">this node</translation>
+ <translation>this node</translation>
</message>
<message>
<location filename="InterfaceQT4/typeNode.py" line="234"/>
<source>commente le noeud </source>
- <translation type="obsolete">comment this node</translation>
+ <translation>comment this node</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="64"/>
<source>Fichiers JDC (*.comm);;Tous les Fichiers (*)</source>
- <translation type="obsolete">JDC Files (*.comm);;All Files(*)</translation>
+ <translation>JDC Files (*.comm);;All Files(*)</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="84"/>
<source>&Quitter</source>
- <translation type="obsolete">&Exit</translation>
+ <translation>&Exit</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="116"/>
<source>Quitter</source>
- <translation type="obsolete">Exit</translation>
+ <translation>Exit</translation>
+ </message>
+ <message>
+ <source>sauvegarde</source>
+ <translation>save</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="337"/>
<source>Fichier Duplique</source>
- <translation type="obsolete">file is duplicated</translation>
+ <translation>file is duplicated</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="337"/>
<source>Le fichier ne sera pas sauvegarde.</source>
- <translation type="obsolete">File will not be saved.</translation>
+ <translation>File will not be saved.</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="349"/>
<source>&Annuler</source>
- <translation type="obsolete">&Cancel</translation>
+ <translation>&Cancel</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="267"/>
<source>Fichier</source>
- <translation type="obsolete">File</translation>
+ <translation>File</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="267"/>
<source>Le fichier <b>%s</b> est deja ouvert.</source>
- <translation type="obsolete">File <b>%s</b> is already open.</translation>
+ <translation>File <b>%s</b> is already open.</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="267"/>
<source>&Duplication</source>
- <translation type="obsolete">&Duplication</translation>
+ <translation>&Duplication</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="267"/>
<source>&Abort</source>
- <translation type="obsolete">&Abort</translation>
+ <translation>&Abort</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="349"/>
<source>Fichier Modifie</source>
- <translation type="obsolete">File is modified</translation>
+ <translation>File is modified</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="349"/>
<source>Le fichier %s n a pas ete sauvegarde.</source>
- <translation type="obsolete">file %s was not saved.</translation>
+ <translation>file %s was not saved.</translation>
</message>
<message>
<location filename="InterfaceQT4/viewManager.py" line="349"/>
<source>&Sauvegarder</source>
- <translation type="obsolete">&Save</translation>
+ <translation>&Save</translation>
+ </message>
+ <message>
+ <location filename="InterfaceQT4/viewManager.py" line="349"/>
+ <source>&Quitter sans sauvegarder</source>
+ <translation>&Quit anyway</translation>
</message>
<message>
<location filename="convert/convert_pyth.py" line="109"/>
<source>Erreur a l'evaluation :
%s</source>
- <translation type="obsolete">Error when loadind :
+ <translation>Error when loadind :
%s</translation>
</message>
<message>
<location filename="Editeur/utils.py" line="50"/>
<source>Un fichier de nom %s existe deja : impossible de creer un repertoire de meme nom</source>
- <translation type="obsolete">File %s already exists : unable to create a directory with the same name</translation>
+ <translation>File %s already exists : unable to create a directory with the same name</translation>
</message>
<message>
<location filename="Editeur/utils.py" line="56"/>
<source>Creation du repertoire %s impossible
Verifiez vos droits d'acces</source>
- <translation type="obsolete">Unable to create directory : check your access rights</translation>
+ <translation>Unable to create directory : check your access rights</translation>
</message>
<message>
<location filename="Editeur/session.py" line="266"/>
<source>localisation de l'application, pour la traduction</source>
- <translation type="obsolete">use for application translation</translation>
+ <translation>use for application translation</translation>
</message>
<message>
<location filename="InterfaceQT4/browser.py" line="435"/>
<source> n'est pas un index valide pour append_brother</source>
- <translation type="obsolete">is not correct - no possible "append_brother"</translation>
+ <translation>is not correct - no possible "append_brother"</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="114"/>
<source>Erreur interne</source>
- <translation type="obsolete">Internal error</translation>
+ <translation>Internal error</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="114"/>
<source>La PDF de la loi ne peut pas etre affichee.</source>
- <translation type="obsolete">unable to display law's PDF.</translation>
+ <translation>unable to display law's PDF.</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="746"/>
<source>Le fichier contient une commande MODEL
</source>
- <translation type="obsolete">file contains MODEL command </translation>
+ <translation>file contains MODEL command </translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1176"/>
<source>Choix unite %d </source>
- <translation type="obsolete">Choice for unit %d</translation>
+ <translation>Choice for unit %d</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1179"/>
<source>Fichier pour unite </source>
- <translation type="obsolete">File for unit </translation>
+ <translation>File for unit </translation>
</message>
<message>
<location filename="Extensions/interpreteur_formule.py" line="97"/>
<source>La formule passee a l'interpreteur doit etre sous forme de tuple</source>
- <translation type="obsolete">formula must be written as tuple</translation>
+ <translation>formula must be written as tuple</translation>
</message>
<message>
<location filename="Extensions/nuplet.py" line="104"/>
<source>Debut </source>
- <translation type="obsolete">Beginning</translation>
+ <translation>Beginning</translation>
</message>
<message>
<location filename="Extensions/parametre_eval.py" line="150"/>
<source>Le parametre EVAL ne peut valoir None</source>
- <translation type="obsolete">None is not a valid value for EVAL</translation>
+ <translation>None is not a valid value for EVAL</translation>
</message>
<message>
<location filename="Extensions/parametre.py" line="188"/>
<source>Pas de nom donne au parametre </source>
- <translation type="obsolete">No name given</translation>
+ <translation>No name given</translation>
</message>
<message>
<location filename="Extensions/parametre.py" line="193"/>
<source>Le parametre %s ne peut valoir None</source>
- <translation type="obsolete">None is an incorrect value for parameter %s</translation>
+ <translation>None is an incorrect value for parameter %s</translation>
</message>
<message>
<location filename="generator/generator_aplat.py" line="147"/>
<source>Format non implemente : %s</source>
- <translation type="obsolete">Not implemented format</translation>
+ <translation>Not implemented format</translation>
</message>
<message>
<location filename="generator/generator_pyth.py" line="143"/>
<source>Type de valeur non supporte par le format pyth : n %(exception)s</source>
<comment>nom</comment>
- <translation type="obsolete">unsupported type of value</translation>
+ <translation>unsupported type of value</translation>
</message>
<message>
<location filename="Ihm/I_FORM_ETAPE.py" line="138"/>
<source>Impossible de realiser la verification de la formule</source>
- <translation type="obsolete">unable to verify formula</translation>
+ <translation>unable to verify formula</translation>
</message>
<message>
<location filename="InterfaceQT4/compooper.py" line="208"/>
<source>Pb interne : impossible de supprimer ce mot-clef</source>
- <translation type="obsolete">internal problem : unable to delete keyword</translation>
+ <translation>internal problem : unable to delete keyword</translation>
</message>
<message>
<location filename="convert/parseur_python.py" line="499"/>
<source>Eficas ne peut pas traiter plusieurs instructions
sur la meme ligne : %s</source>
- <translation type="obsolete">Eficas is not able to manage many instructions on a same line</translation>
+ <translation>Eficas is not able to manage many instructions on a same line</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="209"/>
<source>le texte a analyser n'est pas celui d'une commande ou
d'un operateur : %s</source>
- <translation type="obsolete">text is not valid for a command or a operaor</translation>
+ <translation>text is not valid for a command or a operaor</translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="229"/>
<source>le texte a analyser n'est pas celui d'une commande connue :
%(v_1)s %(v_2)s</source>
<comment>v_1</comment>
- <translation type="obsolete">text is not valid for command %(v_1)s %(v_2)s </translation>
+ <translation>text is not valid for command %(v_1)s %(v_2)s </translation>
</message>
<message>
<location filename="Editeur/analyse_catalogue.py" line="231"/>
<source>le texte a analyser n'est pas celui d'une commande connue :
%(v_1)s %(v_2)s</source>
<comment>v_1</comment>
- <translation type="obsolete">text is not valid for command %(v_1)s %(v_2)s</translation>
+ <translation>text is not valid for command %(v_1)s %(v_2)s</translation>
</message>
<message>
<location filename="Editeur/session.py" line="149"/>
<source> jdc %(v_1)s manque
fichier comm dans section %(v_2)s</source>
<comment>v_1</comment>
- <translation type="obsolete">file %(v_1)s need a .comm file in section %(v_2)s </translation>
+ <translation>file %(v_1)s need a .comm file in section %(v_2)s </translation>
</message>
<message>
<location filename="Editeur/session.py" line="170"/>
fichier include %(v_2)s, %(v_3)s
n'existe pas</source>
<comment>v_1</comment>
- <translation type="obsolete">file %(v_1)s need an include file %(v_2)s,%(v_3)s does not exist </translation>
+ <translation>file %(v_1)s need an include file %(v_2)s,%(v_3)s does not exist </translation>
</message>
<message>
<location filename="Editeur/session.py" line="202"/>
<source> jdc %(v_1)s manque fichier comm
dans section %(v_2)s</source>
<comment>v_1</comment>
- <translation type="obsolete">file %(v_1)s need a .comm file in section %(v_2)s</translation>
+ <translation>file %(v_1)s need a .comm file in section %(v_2)s</translation>
</message>
<message>
<location filename="Editeur/session.py" line="206"/>
<source>jdc %(v_1)s, le fichier de commandes
%(v_2)s n'existe pas</source>
<comment>v_1</comment>
- <translation type="obsolete">jdc%(v_1)s, .comm %(v_2)s does not exist</translation>
+ <translation>jdc%(v_1)s, .comm %(v_2)s does not exist</translation>
</message>
<message>
<location filename="Ihm/I_ETAPE.py" line="485"/>
<source>
Include Invalide.
ne sera pas pris en compte</source>
- <translation type="obsolete">Invalid include file. text will not be included</translation>
+ <translation>Invalid include file. text will not be included</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="167"/>
<source>Impossible de relire le fichier %s
</source>
- <translation type="obsolete">unable to read file</translation>
+ <translation>unable to read file</translation>
</message>
<message>
<location filename="Ihm/I_MACRO_ETAPE.py" line="178"/>
<source>Le fichier include contient des erreurs </source>
- <translation type="obsolete">include file contains errors</translation>
+ <translation>include file contains errors</translation>
</message>
<message>
<location filename="InterfaceQT4/compoparam.py" line="86"/>
<source>PARAMETRE</source>
- <translation type="obsolete">PARAMETER</translation>
+ <translation>PARAMETER</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1041"/>
<source>EFICAS ne sait pas convertir le JDC selon le format </source>
- <translation type="obsolete">Eficas does not know how to convert data according to the defined format</translation>
+ <translation>Eficas does not know how to convert data according to the defined format</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="871"/>
<source>le JDC doit etre valide pour une execution </source>
- <translation type="obsolete">Before a run action, JDC must be valid</translation>
+ <translation>Before a run action, JDC must be valid</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="895"/>
<source>Sauvegarder SVP avant l'execution </source>
- <translation type="obsolete">Save before run action</translation>
+ <translation>Save before run action</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1020"/>
<source>Sauvegarde de l'input impossible </source>
- <translation type="obsolete">unable to save input file</translation>
+ <translation>unable to save input file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1020"/>
<source>Un JdC valide est necessaire pour creer un .input</source>
- <translation type="obsolete">file must be valid to create a .input file</translation>
+ <translation>file must be valid to create a .input file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="964"/>
<source>Choix du composant obligatoire</source>
- <translation type="obsolete">You have to choose a component</translation>
+ <translation>You have to choose a component</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1177"/>
<source>Le fichier %s contient une commande INCLUDE
</source>
- <translation type="obsolete">file %s contains an "INCLUDE" command</translation>
+ <translation>file %s contains an "INCLUDE" command</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1183"/>
<source>Donnez le nom du fichier dont vous
voulez faire une poursuite</source>
- <translation type="obsolete">Name the principal file</translation>
+ <translation>Name the principal file</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1311"/>
<source>Fichiers Med (*.med);;Tous les Fichiers (*)</source>
- <translation type="obsolete">Med Files (*.med);;All Files(*)</translation>
+ <translation>Med Files (*.med);;All Files(*)</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1314"/>
<source>Fichier Med</source>
- <translation type="obsolete">Med File</translation>
+ <translation>Med File</translation>
</message>
<message>
<location filename="InterfaceQT4/editor.py" line="1314"/>
<source>Veuillez selectionner un fichier Med</source>
- <translation type="obsolete">Choose a Med file</translation>
+ <translation>Choose a Med file</translation>
</message>
<message>
<location filename="InterfaceQT4/feuille.py" line="165"/>
<source>reel</source>
- <translation type="obsolete">float</translation>
+ <translation>float</translation>
</message>
<message>
<location filename="InterfaceQT4/feuille.py" line="166"/>
<source>entier</source>
- <translation type="obsolete">integer</translation>
+ <translation>integer</translation>
</message>
<message>
<location filename="InterfaceQT4/feuille.py" line="167"/>
<source>complexe</source>
- <translation type="obsolete">complex</translation>
+ <translation>complex</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="436"/>
<source>l'aide n est pas installee </source>
- <translation type="obsolete">Help is not available</translation>
+ <translation>Help is not available</translation>
</message>
<message>
<location filename="InterfaceQT4/gereIcones.py" line="291"/>
<source>Export Med vers Fichier </source>
- <translation type="obsolete">export Med Mesh in a file</translation>
+ <translation>export Med Mesh in a file</translation>
</message>
<message>
<location filename="InterfaceQT4/gereIcones.py" line="291"/>
<source>Impossibilite d exporter le Fichier</source>
- <translation type="obsolete">Unable to export file</translation>
+ <translation>Unable to export file</translation>
</message>
<message>
<location filename="InterfaceQT4/monBoutonValide.py" line="43"/>
<source>objet valide</source>
- <translation type="obsolete">valid object</translation>
+ <translation>valid object</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpTuple3.py" line="47"/>
<source>Valeur non modifiable</source>
- <translation type="obsolete">value can not be changed</translation>
+ <translation>value can not be changed</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetOptionnel.py" line="91"/>
<source>Options pour
</source>
- <translation type="obsolete">Settings </translation>
+ <translation>Settings </translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetPlusieursInto.py" line="172"/>
<source>Nombre minimal de valeurs : </source>
- <translation type="obsolete">minimal number of values :</translation>
+ <translation>minimal number of values :</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetPlusieursInto.py" line="174"/>
<source>Nombre maximal de valeurs : </source>
- <translation type="obsolete">Maximal number of values :</translation>
+ <translation>Maximal number of values :</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSimpComplexe.py" line="84"/>
<source>l expression n est pas de la forme a+bj</source>
- <translation type="obsolete">expression must be as a+bj</translation>
+ <translation>expression must be as a+bj</translation>
</message>
<message>
<location filename="InterfaceQT4/politiquesValidation.py" line="157"/>
<source>Valeur du mot-cle enregistree</source>
- <translation type="obsolete">Value is recorded</translation>
+ <translation>Value is recorded</translation>
</message>
<message>
<location filename="InterfaceQT4/politiquesValidation.py" line="162"/>
<source>Valeur du mot-cle non autorisee </source>
- <translation type="obsolete">Value is not authorized</translation>
+ <translation>Value is not authorized</translation>
</message>
<message>
- <location filename="InterfaceQT4/viewManager.py" line="299"/>
- <source>Fichier non encore nomme </source>
- <translation type="obsolete">unnamed file</translation>
+ <source>Fichier non encore nomme</source>
+ <translation>unnamed file</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="1"/>
<source>SOURCE</source>
- <translation type="obsolete">SOURCE</translation>
+ <translation>SOURCE</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="2"/>
<source>EnveloppeConnexeInducteur</source>
- <translation type="obsolete">Bounding_Box</translation>
+ <translation>Bounding_Box</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="4"/>
<source>VecteurDirecteur</source>
- <translation type="obsolete">Direction_Vector</translation>
+ <translation>Direction_Vector</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="5"/>
<source>Centre</source>
- <translation type="obsolete">Center<byte value="x9"/></translation>
+ <translation>Center<byte value="x9"/></translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="6"/>
<source>SectionBobine</source>
- <translation type="obsolete">Section</translation>
+ <translation>Section</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="7"/>
<source>Amplitude</source>
- <translation type="obsolete">Amplitude</translation>
+ <translation>Amplitude</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="8"/>
<source>NbdeTours</source>
- <translation type="obsolete">NbTurns</translation>
+ <translation>NbTurns</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="9"/>
<source>CONDUCTEUR</source>
- <translation type="obsolete">CONDUCTOR</translation>
+ <translation>CONDUCTOR</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="10"/>
<source>Conductivite</source>
- <translation type="obsolete">Conductivity</translation>
+ <translation>Conductivity</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="11"/>
<source>PermeabiliteRelative</source>
- <translation type="obsolete">Relative_Permeability</translation>
+ <translation>Relative_Permeability</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="12"/>
<source>NOCOND</source>
- <translation type="obsolete">DIELECTRIC</translation>
+ <translation>DIELECTRIC</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="13"/>
<source>VCUT</source>
- <translation type="obsolete">CUT</translation>
+ <translation>CUT</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="14"/>
<source>Orientation</source>
- <translation type="obsolete">Orientation</translation>
+ <translation>Orientation</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="15"/>
<source>ZS</source>
- <translation type="obsolete">ZS</translation>
+ <translation>ZS</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="5"/>
<source>RepCarmel</source>
- <translation type="obsolete">Carmel_Directory</translation>
+ <translation>Carmel_Directory</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="18"/>
<source>TypedeFormule</source>
- <translation type="obsolete">Formula</translation>
+ <translation>Formula</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="19"/>
<source>Frequence</source>
- <translation type="obsolete">Frequency</translation>
+ <translation>Frequency</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="20"/>
<source>Nb_Max_Iterations</source>
- <translation type="obsolete">Max_Nb_Iterations</translation>
+ <translation>Max_Nb_Iterations</translation>
</message>
<message>
<location filename="CarmelCND/PourTraductionCarmel.py" line="21"/>
<source>Erreur_Max</source>
- <translation type="obsolete">Max_Error</translation>
+ <translation>Max_Error</translation>
</message>
<message>
<location filename="generator/generator_python.py" line="112"/>
<source>Format non implemente </source>
- <translation type="obsolete">non implemented format</translation>
+ <translation>non implemented format</translation>
</message>
<message>
<location filename="InterfaceQT4/gereListe.py" line="193"/>
<source>Fichier de donnees</source>
- <translation type="obsolete">data file</translation>
+ <translation>data file</translation>
</message>
<message>
<location filename="InterfaceQT4/gereListe.py" line="193"/>
<source>Tous les Fichiers (*)</source>
- <translation type="obsolete">all files (*)</translation>
+ <translation>all files (*)</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetCB.py" line="51"/>
<source>Select</source>
- <translation type="obsolete">select</translation>
+ <translation>select</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetPlusieursBase.py" line="226"/>
<source>nb min de valeurs : </source>
- <translation type="obsolete">minimal number of values :</translation>
+ <translation>minimal number of values :</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetPlusieursBase.py" line="231"/>
<source>nb max de valeurs atteint</source>
- <translation type="obsolete">maximum number of values</translation>
+ <translation>maximum number of values</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas.py" line="389"/>
<source>Sauve Format Ligne</source>
- <translation type="obsolete">save file in line format</translation>
+ <translation>save file in line format</translation>
</message>
<message>
<location filename="InterfaceQT4/qtSaisie.py" line="138"/>
<source>Valeur du mot-clef enregistree</source>
- <translation type="obsolete">value recorded</translation>
+ <translation>value recorded</translation>
</message>
<message>
<location filename="InterfaceQT4/qtSaisie.py" line="142"/>
<source>Valeur du mot-clef non autorisee :</source>
- <translation type="obsolete">unvalid value</translation>
+ <translation>unvalid value</translation>
</message>
<message>
<location filename="Noyau/N_VALIDATOR.py" line="170"/>
<source>%s n'est pas un fichier valide</source>
- <translation type="obsolete">%s is not a valid file</translation>
+ <translation>%s is not a valid file</translation>
</message>
<message>
<location filename="Noyau/N_VALIDATOR.py" line="1554"/>
<source>: verifie les types dans un tuple</source>
- <translation type="obsolete">valids type in a tuple</translation>
+ <translation>valids type in a tuple</translation>
</message>
<message>
<location filename="Noyau/N_VALIDATOR.py" line="1557"/>
<source>Les types entres ne sont pas permis</source>
- <translation type="obsolete">unvalid type for values</translation>
+ <translation>unvalid type for values</translation>
</message>
<message>
<location filename="InterfaceQT4/monFonctionPanel.py" line="62"/>
<source>La cardinalite n'est pas correcte, la derniere valeur est ignoree</source>
- <translation type="obsolete">unvalid multiplicity. last value will be ignored</translation>
+ <translation>unvalid multiplicity. last value will be ignored</translation>
</message>
<message>
<location filename="InterfaceQT4/monFonctionPanel.py" line="110"/>
<source> n est pas un tuple de </source>
- <translation type="obsolete">is not a tuple</translation>
+ <translation>is not a tuple</translation>
</message>
<message>
<location filename="InterfaceQT4/monFonctionPanel.py" line="112"/>
<source> valeurs</source>
- <translation type="obsolete"> values </translation>
+ <translation> values </translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetCreeParam.py" line="96"/>
<source>Valeur incorrecte</source>
- <translation type="obsolete">incorrect value</translation>
+ <translation>incorrect value</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetCreeParam.py" line="105"/>
<source> n est pas un identifiant correct
</source>
- <translation type="obsolete">is not a valid name</translation>
+ <translation>is not a valid name</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="78"/>
<source>Entrer un float SVP</source>
- <translation type="obsolete">Float expected</translation>
+ <translation>Float expected</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="83"/>
<source>Entrer un float inferieur a </source>
- <translation type="obsolete">float lower than</translation>
+ <translation>float lower than</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="88"/>
<source>Entrer un float superieur a </source>
- <translation type="obsolete">float superior than</translation>
+ <translation>float superior than</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="111"/>
<source>Mauvaise execution </source>
- <translation type="obsolete">bad run</translation>
+ <translation>bad run</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="111"/>
<source>impossible d executer la methode </source>
- <translation type="obsolete">unable to run method</translation>
+ <translation>unable to run method</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="135"/>
<source>Mauvaise Commande </source>
- <translation type="obsolete">bad command</translation>
+ <translation>bad command</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="135"/>
<source>Aucune variable connue</source>
- <translation type="obsolete">no possible variable </translation>
+ <translation>no possible variable </translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="183"/>
<source>Mauvaise dimension de matrice</source>
- <translation type="obsolete">bad matrix dimension</translation>
+ <translation>bad matrix dimension</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="181"/>
<source>le nombre de ligne n est pas egal a </source>
- <translation type="obsolete">number of lines is not </translation>
+ <translation>number of lines is not </translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="183"/>
<source>le nombre de colonne n est pas egal a </source>
- <translation type="obsolete">number of columns is not</translation>
+ <translation>number of columns is not</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="191"/>
<source>Mauvaise Valeur</source>
- <translation type="obsolete">bad value</translation>
+ <translation>bad value</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="191"/>
<source>l element </source>
- <translation type="obsolete">element</translation>
+ <translation>element</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetMatrice.py" line="191"/>
<source>n est pas correct</source>
- <translation type="obsolete">is not correct</translation>
+ <translation>is not correct</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetParam.py" line="94"/>
<source>Modification Impossible</source>
- <translation type="obsolete">unable to modify</translation>
+ <translation>unable to modify</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetParam.py" line="94"/>
<source>le parametre n'est pas valide</source>
- <translation type="obsolete">parameter is not valid</translation>
+ <translation>parameter is not valid</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetParam.py" line="108"/>
<source> n est pas un identifiant correct</source>
- <translation type="obsolete">is not a correct name</translation>
+ <translation>is not a correct name</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetParam.py" line="127"/>
<source>Valeur incorrecte: </source>
- <translation type="obsolete">incorrect value :</translation>
+ <translation>incorrect value :</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetParam.py" line="130"/>
<source>Valeur incorrecte </source>
- <translation type="obsolete">incorrect value</translation>
+ <translation>incorrect value</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetParam.py" line="133"/>
<source>Valeur correcte </source>
- <translation type="obsolete">valid value</translation>
+ <translation>valid value</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetSDCOInto.py" line="77"/>
<source>impossible d'evaluer : </source>
- <translation type="obsolete">unable to evaluate :</translation>
+ <translation>unable to evaluate :</translation>
</message>
<message>
<location filename="Extensions/parametre_eval.py" line="170"/>
<source>Un concept de nom %s existe déjà !</source>
- <translation type="obsolete">already existing concept with name : %s !</translation>
+ <translation>already existing concept with name : %s !</translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetCreeParam.py" line="109"/>
<source> existe deja
</source>
- <translation type="obsolete">already exists</translation>
+ <translation>already exists</translation>
</message>
<message>
<location filename="Ihm/I_MCSIMP.py" line="624"/>
<source>La matrice n'a pas le bon entete</source>
- <translation type="obsolete">header does not match with matrix</translation>
+ <translation>header does not match with matrix</translation>
</message>
<message>
<location filename="InterfaceQT4/browser.py" line="463"/>
<source>le mot clef </source>
- <translation type="obsolete">keyword </translation>
+ <translation>keyword </translation>
</message>
<message>
<location filename="InterfaceQT4/browser.py" line="455"/>
<source> doit etre insere avant </source>
- <translation type="obsolete"> has to be inserted before </translation>
+ <translation> has to be inserted before </translation>
</message>
<message>
<location filename="InterfaceQT4/browser.py" line="464"/>
<source>insertion impossible</source>
- <translation type="obsolete">unable to insert keyword</translation>
+ <translation>unable to insert keyword</translation>
</message>
<message>
<location filename="InterfaceQT4/browser.py" line="463"/>
<source> doit etre insere apres </source>
- <translation type="obsolete"> has to be inserted after </translation>
+ <translation> has to be inserted after </translation>
</message>
<message>
<location filename="InterfaceQT4/monWidgetPlusieursTuple.py" line="244"/>
<source>Nb maximum de valeurs atteint</source>
- <translation type="obsolete">Maximal number of values </translation>
+ <translation>Maximal number of values </translation>
</message>
<message>
<location filename="InterfaceQT4/gereRegles.py" line="58"/>
<source>pas de regle de construction pour ce jeu de commandes</source>
- <translation type="obsolete">No specific rules for building this dataset</translation>
+ <translation>No specific rules for building this dataset</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas.py" line="260"/>
<source>Gestion Maillage</source>
- <translation type="obsolete">Mesh Menu</translation>
+ <translation>Mesh Menu</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas.py" line="401"/>
<source>Acquiert groupe mailles</source>
- <translation type="obsolete">Read elements mesh</translation>
+ <translation>Read elements mesh</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas.py" line="406"/>
<source>Acquisition Groupe Maille</source>
- <translation type="obsolete">Read elements mesh</translation>
+ <translation>Read elements mesh</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="1"/>
<source>VERSION</source>
- <translation type="obsolete">VERSION_EN</translation>
+ <translation>VERSION_EN</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="2"/>
<source>NUM</source>
- <translation type="obsolete">NUMBER</translation>
+ <translation>NUMBER</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="3"/>
<source>FILETYPE</source>
- <translation type="obsolete">FILETYPE</translation>
+ <translation>FILETYPE</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="4"/>
<source>PARAMETERS</source>
- <translation type="obsolete">Parametres</translation>
+ <translation>Parametres</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="6"/>
<source>Fichier_maillage</source>
- <translation type="obsolete">FichierMaillage</translation>
+ <translation>FichierMaillage</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="7"/>
<source>Echelle_du_maillage</source>
- <translation type="obsolete">MeshScale</translation>
+ <translation>MeshScale</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="8"/>
<source>Formulation</source>
- <translation type="obsolete">Fomulation</translation>
+ <translation>Fomulation</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="9"/>
<source>Timeproblem</source>
- <translation type="obsolete">TimeProblem</translation>
+ <translation>TimeProblem</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="10"/>
<source>spectral </source>
- <translation type="obsolete">EssaiSpectral</translation>
+ <translation>EssaiSpectral</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="11"/>
<source>Basis</source>
- <translation type="obsolete">Basis</translation>
+ <translation>Basis</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="12"/>
<source>Fourier</source>
- <translation type="obsolete">Fourier</translation>
+ <translation>Fourier</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="13"/>
<source>Ordre</source>
- <translation type="obsolete">Ordre</translation>
+ <translation>Ordre</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="14"/>
<source>FREQUENCY</source>
- <translation type="obsolete">Frequency</translation>
+ <translation>Frequency</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="15"/>
<source>minimisation</source>
- <translation type="obsolete">Minimisation</translation>
+ <translation>Minimisation</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="16"/>
<source>no</source>
- <translation type="obsolete">no</translation>
+ <translation>no</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="17"/>
<source>yes</source>
- <translation type="obsolete">yes</translation>
+ <translation>yes</translation>
</message>
<message>
<location filename="Carmel3D/PourTraduction.py" line="18"/>
<source>nb_procs_para</source>
- <translation type="obsolete">NbProcs</translation>
+ <translation>NbProcs</translation>
</message>
<message>
<location filename="monCode/EssaiTraduction.py" line="1"/>
<source>POLYMER</source>
- <translation type="obsolete">Polymer_en_Anglais</translation>
+ <translation>Polymer_en_Anglais</translation>
</message>
<message>
<location filename="monCode/EssaiTraduction.py" line="2"/>
<source>MODEL_DATABASE</source>
- <translation type="obsolete">MoDEL_DATa_Anglais</translation>
+ <translation>MoDEL_DATa_Anglais</translation>
</message>
</context>
<context>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="158"/>
<source>Execution</source>
- <translation type="obsolete">Run</translation>
+ <translation>Run</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="166"/>
<source>Execution </source>
- <translation type="obsolete">Run</translation>
+ <translation>Run</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="326"/>
<source>Patrons</source>
- <translation type="obsolete">Patterns</translation>
+ <translation>Patterns</translation>
</message>
<message>
<location filename="myMain.ui" line="120"/>
<message>
<location filename="InterfaceQT4/qtEficas_with_log.py" line="176"/>
<source>Save Run</source>
- <translation type="obsolete">Save run</translation>
+ <translation>Save run</translation>
</message>
<message>
<location filename="InterfaceQT4/qtEficas.py" line="184"/>
<source>Run</source>
- <translation type="obsolete">run</translation>
+ <translation>run</translation>
</message>
<message>
<location filename="myMain.ui" line="243"/>
<source>Afficher l'Arbre</source>
<translation>Show dataset tree</translation>
</message>
-</context>
-<context>
- <name>JDCEditor</name>
<message>
- <location filename="InterfaceQT4/editor.py" line="944"/>
<source>&Abandonner</source>
- <translation type="obsolete">&Cancel</translation>
+ <translation>&Cancel</translation>
</message>
</context>
<context>
<message>
<location filename="UiQT4/desWidgetCommentaire.ui" line="147"/>
<source><html><head/><body><p><span style=" color:#0000ff;">Commentaire</span></p></body></html></source>
- <translation type="obsolete"><html><head/><body><p><span style=" color:#0000ff;">Comment</span></p></body></html></translation>
+ <translation><html><head/><body><p><span style=" color:#0000ff;">Comment</span></p></body></html></translation>
</message>
<message>
<location filename="desWidgetCommentaire.ui" line="330"/>
<message encoding="UTF-8">
<location filename="UiQT4/desWidgetCommentaire.ui" line="182"/>
<source>Détruit le commentaire</source>
- <translation type="obsolete">Delete the comment</translation>
+ <translation>Delete the comment</translation>
</message>
<message>
<location filename="desWidgetCommentaire.ui" line="339"/>
<message encoding="UTF-8">
<location filename="UiQT4/desWidgetParam.ui" line="176"/>
<source>Détruit le commentaire</source>
- <translation type="obsolete">Delete the comment</translation>
+ <translation>Delete the comment</translation>
</message>
<message>
<location filename="desWidgetParam.ui" line="568"/>
<message>
<location filename="UiQT4/desWidgetPlusieursIntoOrdonne.ui" line="228"/>
<source>TextLabel</source>
- <translation type="obsolete">TextLabel</translation>
+ <translation>TextLabel</translation>
</message>
<message>
<location filename="desWidgetPlusieursIntoOrdonne.ui" line="618"/>
self.getOptions()
return self.line
- def getTexte(self,appli=None):
+ def getTexte(self,appliEficas=None):
"""
Retourne le texte issu de l'analyse
"""
#traceback.print_stack()
from convert.convert_python import Pythonparser
-from six.moves import range
try:
basestring
except NameError:
- def convert(self, outformat, appli=None):
+ def convert(self, outformat, appliEficas=None):
from Accas import A_BLOC, A_FACT, A_SIMP
try :
- self.dicoCasToCata = appli.readercata.dicoCasToCata
+ self.dicoCasToCata = appliEficas.readercata.dicoCasToCata
except :
self.dicoCasToCata = {}
print ('pas de dicoCasToCata')
- self.dicoInverse = appli.readercata.dicoInverse
- self.dicoMC = appli.readercata.dicoMC
- self.Ordre_Des_Commandes = appli.readercata.Ordre_Des_Commandes
+ self.dicoInverse = appliEficas.readercata.dicoInverse
+ self.dicoMC = appliEficas.readercata.dicoMC
+ self.Ordre_Des_Commandes = appliEficas.readercata.Ordre_Des_Commandes
try :
- self.TelemacdicoEn = appli.readercata.TelemacdicoEn
+ self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn
except :
self.TelemacdicoEn = {}
print ('pas de TelemacdicoEn')
try :
- self.DicoEnumCasFrToEnumCasEn = appli.readercata.DicoEnumCasFrToEnumCasEn
+ self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn
except :
self.DicoEnumCasFrToEnumCasEn = {}
print ('pas de DicoEnumCasFrToEnumCasEn')
- if appli.langue=='fr' :
+ if appliEficas.langue=='fr' :
#from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn
for k in self.DicoEnumCasFrToEnumCasEn :
self.TelemacdicoEn[k]=self.DicoEnumCasFrToEnumCasEn[k]
# ne sert plus
- #appli.listeTelemac=self.dictSimp
- appli.listeTelemac={}
+ #appliEficas.listeTelemac=self.dictSimp
+ appliEficas.listeTelemac={}
if 'debut' in dicoComment :
commentaire="COMMENTAIRE("+repr(dicoComment['debut'])+")\n"
self.textePy=commentaire+self.textePy
"""
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',
- def convert(self, outformat, appli=None):
+ def convert(self, outformat, appliEficas=None):
# ici on ne fait rien
# on le fera a la creation du JDC
try:
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)
+ #print (self.textePy)
return self.textePy
def traiteMCFact(self,mot,valeurs):
s= s.replace('"<string>"','"<%s>"'%self.filename)
self.cr.fatal(tr("Erreur a l'evaluation :\n %s", s))
- def convert(self,outformat,appli=None):
+ def convert(self,outformat,appliEficas=None):
if outformat == 'dict':
return self.getdict()
else:
self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename)))
return
- def convert(self,outformat,appli=None):
+ 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(appli)
+ l= PARSEUR_PYTHON(self.text).getTexte(appliEficas)
#pr.disable()
#s = StringIO.StringIO()
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
import re
-from convert_python import PythonParser
+from convert_python import Pythonparser
def entryPoint():
"""
"""
return {
'name' : 'openturns_study',
- 'factory' : OTStudyParser
+ 'factory' : OTStudyparser
}
-class OTStudyParser(PythonParser):
+class OTStudyparser(Pythonparser):
"""
- This converter works like PythonParser, except that it also initializes all
+ 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.
"""
pattern_model_variable = re.compile(r'ModelVariable\s*=\s*(\w+)\s*,')
def convert(self, outformat, appli=None):
- text = PythonParser.convert(self, outformat, appli)
+ text = Pythonparser.convert(self, outformat, appli)
varnames = self.pattern_model_variable.findall(text)
newtext = ""
for var in varnames:
# Le nom du plugin
'name' : 'openturns_wrapper',
# La factory pour créer une instance du plugin
- 'factory' : PythonParser,
+ 'factory' : Pythonparser,
}
from __future__ import print_function
try :
from builtins import str
- from builtins import range
from builtins import object
except :
pass
import sys,string,re
import traceback
from Extensions.i18n import tr
-from six.moves import range
escapedQuotesRE = re.compile(r"(\\\\|\\\"|\\\')")
stringsAndCommentsRE = \
def __init__(self,texte):
self.texte = texte
self.l_objets=None
- self.appli=None
+ self.appliEficas=None
def isAffectation(self,texte):
"""
if nouvelindice == len(texte) :
nouvelindice=nouvelindice -1
break
- if mot in self.appli.liste_simp_reel:
+ if mot in self.appliEficas.liste_simp_reel:
if valeur[0] != "'":
try :
clef=eval(valeur)
#cas du tuple de valeurs
valeur=texte[indiceC+1:nouvelindice+1]
indiceC=nouvelindice+1
- if mot in self.appli.liste_simp_reel:
+ if mot in self.appliEficas.liste_simp_reel:
valeur=valeur[1:-1]
for val in valeur.split(',') :
# Attention la derniere valeur est""
#index=epure1.find(u"=")
#epure2=epure1[index+1:len(epure1)].replace(u"_F(u","(u")
#dict_reel_concept=self.construitGenea(epure2)
- if self.appli:
- dict_reel_concept=construitGenea(epure2,self.appli.liste_simp_reel)
+ if self.appliEficas:
+ dict_reel_concept=construitGenea(epure2,self.appliEficas.liste_simp_reel)
else:
dict_reel_concept={}
if nomConcept == "sansnom" :
nomConcept = ""
if nomConcept !=None :
if len(dict_reel_concept) != 0:
- self.appli.dict_reels[nomConcept]=dict_reel_concept
+ self.appliEficas.dict_reels[nomConcept]=dict_reel_concept
- def getTexte(self,appli=None):
+ def getTexte(self,appliEficas=None):
"""
Retourne le texte issu de l'analyse
"""
- self.appli=appli
+ self.appliEficas=appliEficas
try:
#if 1:
if not self.l_objets : self.analyse()
#fichier = 'D:/Eficas_dev/Tests/zzzz100a.comm'
#fichier = 'U:/Eficas_dev/Tests/test_eval.comm'
texte = open(fichier,'r').read()
- class appli(object):
+ class appliEficas(object):
dict_reels={}
liste_simp_reel=["VALE","VALE_C","GROUP_MA","RAYON"]
- a=appli()
+ a=appliEficas()
compile(txt, '<string>', 'exec')
print((a.dict_reels))
self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind +s_mcsimp.strip()
else :
# il faut couper ...
- #nom,valeur = string.split(s_mcsimp,self.sep,1)
nom,valeur = str.split(s_mcsimp,self.sep,1)
chaine = self.creerChaine(nom,valeur,'\n'+self.indent_courant*' ',ind)
- #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + s_mcsimp.strip()
self.texte_etape = self.texte_etape + chaine
return
# 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
+ 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
+ s=s+'\\\n'+texte
elif ',' in valeur:
# il s'agit d'une liste de tuple
# c est trop complique on ne splitte pas
else :
# On a une ( mais pas de , . On passe la chaine sans modification
- val = len(valeur)
+ val = len(valeur) +len(label)
texte = (self.l_max-2-val)*' '+valeur
- s=s+'\n'+texte
-
+ 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) :
import types,re,os
from Extensions.i18n import tr
from .generator_dicoImbrique import DicoImbriqueGenerator
-import pdb
def entryPoint():
"""
extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None, appli=None):
+ def gener(self,obj,format='brut',config=None, appliEficas=None):
try :
self.MachineDico = obj.MachineDico
extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None, appli=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)
"""
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None,appli=None,statut="Leger"):
+ def gener(self,obj,format='brut',config=None,appliEficas=None,statut="Leger"):
self.statut = statut
- self.langue = appli.langue
- try : self.TelemacdicoEn = appli.readercata.TelemacdicoEn
+ self.langue = appliEficas.langue
+ try : self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn
except :
print ('Attention : pas de TelemacdicoEn declare')
self.TelemacdicoEn = {}
self.DicoEnumCasEnInverse[motClef]=d
if self.langue == 'fr' :
#from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn
- self.DicoEnumCasFrToEnumCasEn = appli.readercata.DicoEnumCasFrToEnumCasEn
+ self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn
for motClef in self.DicoEnumCasFrToEnumCasEn:
d={}
for valTelemac in self.DicoEnumCasFrToEnumCasEn[motClef]:
self.DicoEnumCasEnInverse[motClef]=d
self.initDico()
# Pour Simplifier les verifs d ecriture
- if hasattr(appli,'listeTelemac') : self.listeTelemac=appli.listeTelemac
+ if hasattr(appliEficas,'listeTelemac') : self.listeTelemac=appliEficas.listeTelemac
else : self.listeTelemac = ()
self.dicoCataToCas={}
try :
- self.dicoCasToCata=appli.readercata.dicoCasToCata
+ self.dicoCasToCata=appliEficas.readercata.dicoCasToCata
except :
print ('Attention pas de dicoCasToCata declare')
self.dicoCasToCata={}
# ecriture de Leger
#----------------------------------------------------------------------------------------
- def writeComplet(self,fn,jdc,config,appli) :
- jdc_formate=self.gener(jdc,config=config,appli=appli,statut="Entier")
+ def writeComplet(self,fn,jdc,config,appliEficas) :
+ jdc_formate=self.gener(jdc,config=config,appliEficas=appliEficas,statut="Entier")
self.writeDefault(fn)
extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None,appli=None):
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
- try :
- print (obj)
+ 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
+ #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 writeDefault(self,fn) :
- #fileDico = fn[:fn.rfind(".")] + '.py'
- fileDico='/tmp/toto.xml'
- print (self.texteXML)
- f = open( str(fileDico), 'w')
- f.write('Dico = '+str(self.texteXML))
+ 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
fp.write(self.text)
fp.close()
- def gener(self,obj,format='brut',config=None,appli=None):
+ 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
extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None,appli=None):
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
self.initDico()
def generMCSIMP(self,obj) :
"""recuperation de l objet MCSIMP"""
s=PythonGenerator.generMCSIMP(self,obj)
- print ('jjjjjjjjjj')
- print (obj.nom)
- print (s)
courant=self.Dico
for p in obj.getGenealogiePrecise()[0:-1]:
if not (p in courant.keys()) : courant[p]={}
extensions=('.comm',)
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None, appli=None):
+ def gener(self,obj,format='brut',config=None, appliEficas=None):
self.initDico()
"""
- def gener(self,obj,format='brut',config=None,appli=None):
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
self.initDico()
self.text=PythonGenerator.gener(self,obj,format)
if obj.isValid() :self.genereExeMap()
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2019 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
+#
+"""
+ 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
+except : pass
+
+import traceback
+import types,re,os
+import Accas
+
+from .generator_python import PythonGenerator
+
+listeCalParName = ('Time' , 'Temperature', 'DoseRate', 'Thickness') #'calculation_parameter_names'
+
+
+def entryPoint():
+ """
+ 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,
+ }
+
+
+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
+
fin='fin CR format python pour python')
# Le texte au format python est stocke dans l'attribut text
self.text=''
- self.appli=None
+ 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,appli=None):
+ def gener(self,obj,format='brut',config=None,appliEficas=None):
"""
Retourne une representation du JDC obj sous une
forme qui est parametree par format.
if obj == None :
print ('appel a gener avec None')
return
- self.appli=obj.getJdcRoot().appli
- #self.appli=obj.appli
+ self.appliEficas=appliEficas
liste= self.generator(obj)
#format='standard'
if format == 'brut':
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[-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
"""
return obj.getName()
+
def generMCFACT(self,obj):
"""
Convertit un objet MCFACT en une liste de chaines de caracteres a la
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.appli.appliEficas and clefobj in self.appli.appliEficas.dict_reels:
- if valeur in self.appli.appliEficas.dict_reels[clefobj]:
- s=self.appli.appliEficas.dict_reels[clefobj][valeur]
+ 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:
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):
def formatColonnes(self,nbrColonnes,listeValeurs,obj):
- #try :
- if 1 == 1 :
+ try :
+ #if 1 == 1 :
indice=0
textformat="("
while ( indice < len(listeValeurs) ) :
indice=indice+1
textformat=textformat+"\n"
textformat=textformat[0:-1]+"),\n"
- #except :
- else :
+ except :
+ #else :
textformat=str(obj.valeur)
return textformat
self.commande = ""
self.dict_attributs = {}
- def gener(self,node,config=None,appli=None):
+ def gener(self,node,config=None,appliEficas=None):
"""
"""
self.node=node
print "ListeVariablesOut= %s", ListeVariablesOut
#print "DictLois=", DictLois
self.texteSTD = defaultSTD
- self.OpenTURNS_path = appli.CONFIGURATION.OpenTURNS_path
+ self.OpenTURNS_path = appli.maConfiguration.OpenTURNS_path
# Ce dictionnaire fait la correspondance entre le mot lu dans le dictionnaire des mots-clefs et la methode a appeler
self.traitement = {
if ( self.DictMCVal.has_key( 'Type' ) ):
TypeAnalyse = self.DictMCVal[ 'Type' ]
- Traitement = None
+ traitement = None
subDict = {}
if ( self.traitement.has_key( TypeAnalyse ) ):
- (Traitement, subDict) = self.traitement[ TypeAnalyse ]
+ (traitement, subDict) = self.traitement[ TypeAnalyse ]
- if ( Traitement is not None ):
- self.texteSTD = apply( STDGenerateur.__dict__[ Traitement ], (self, subDict) )
+ if ( traitement is not None ):
+ self.texteSTD = apply( STDGenerateur.__dict__[ traitement ], (self, subDict) )
return self.texteSTD
if ( self.DictMCVal.has_key( 'Method' ) ):
Methode = self.DictMCVal[ 'Method' ]
- Traitement = None
+ traitement = None
if ( subDict.has_key( Methode ) ):
- Traitement = subDict[ Methode ]
+ traitement = subDict[ Methode ]
- if ( Traitement is not None ):
- txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
+ if ( traitement is not None ):
+ txt += apply( STDGenerateur.__dict__[ traitement ], (self,) )
txt += self.MinMaxResult()
dictVariables = {}
for variable in self.ListeVariablesIn:
- nomVar = variable['ModelVariable'].get_name()
+ nomVar = variable['ModelVariable'].getName()
dictVariables[ nomVar ] = variable['Distribution']
i = 0
marginale = "%s_%d" % (self.variable["marginal"], i)
txt += "# Definit la loi marginale de la composante %d\n" % i
txt += "%s = %s\n" % (marginale, apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi) ))
- txt += "%s.setName( '%s' )\n" % (marginale, conceptloi.get_name())
+ txt += "%s.setName( '%s' )\n" % (marginale, conceptloi.getName())
txt += "%s[ %d ] = '%s'\n" % (self.variable["description"], i, variable)
txt += "%s[ %d ] = Distribution( %s )\n" % (self.variable["collection"], i, marginale)
txt += "\n"
'''
nomVar = "output"
for variable in self.ListeVariablesOut:
- nomVar = variable['ModelVariable'].get_name()
+ nomVar = variable['ModelVariable'].getName()
txt = "# Definit le vecteur aleatoire de sortie\n"
txt += "%s = RandomVector( %s, %s )\n" % (self.variable["outputRandomVector"], self.variable["model"], self.variable["inputRandomVector"])
if ( self.DictMCVal.has_key( 'Method' ) ):
Methode = self.DictMCVal[ 'Method' ]
- Traitement = None
+ traitement = None
if ( subDict.has_key( Methode ) ):
- Traitement = subDict[ Methode ]
+ traitement = subDict[ Methode ]
- if ( Traitement is not None ):
+ if ( traitement is not None ):
txt += "# Etude 'Central Uncertainty'\n"
- txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
+ txt += apply( STDGenerateur.__dict__[ traitement ], (self,) )
txt += self.Footer()
return txt
if ( self.DictMCVal.has_key( 'Method' ) ):
Methode = self.DictMCVal[ 'Method' ]
- Traitement = None
+ traitement = None
if ( subDict.has_key( Methode ) ):
- Traitement = subDict[ Methode ]
+ traitement = subDict[ Methode ]
- if ( Traitement is not None ):
- txt += apply( STDGenerateur.__dict__[ Traitement ], (self, subDict) )
+ if ( traitement is not None ):
+ txt += apply( STDGenerateur.__dict__[ traitement ], (self, subDict) )
txt += self.Footer()
return txt
if ( self.DictMCVal.has_key( 'Algorithm' ) ):
Algorithme = self.DictMCVal[ 'Algorithm' ]
- Traitement = None
+ traitement = None
if ( subDict.has_key( Algorithme ) ):
- Traitement = subDict[ Algorithme ]
+ traitement = subDict[ Algorithme ]
- if ( Traitement is not None ):
- txt = apply( STDGenerateur.__dict__[ Traitement ], (self,) )
+ if ( traitement is not None ):
+ txt = apply( STDGenerateur.__dict__[ traitement ], (self,) )
maxOuterSampling = None
if ( self.DictMCVal.has_key( 'MaximumOuterSampling' ) ):
if ( self.DictMCVal.has_key( 'OptimizationAlgorithm' ) ):
OptimizationAlgo = self.DictMCVal[ 'OptimizationAlgorithm' ]
- Traitement = None
+ traitement = None
if ( subDict.has_key( OptimizationAlgo ) ):
- Traitement = subDict[ OptimizationAlgo ]
+ traitement = subDict[ OptimizationAlgo ]
- if ( Traitement is not None ):
- txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
+ if ( traitement is not None ):
+ txt += apply( STDGenerateur.__dict__[ traitement ], (self,) )
txt += self.OptimizerSettings()
txt += self.PhysicalStartingPoint()
if ( self.DictMCVal.has_key( 'Approximation' ) ):
Approximation = self.DictMCVal[ 'Approximation' ]
- Traitement = None
+ traitement = None
if ( subDict.has_key( Approximation ) ):
- Traitement = subDict[ Approximation ]
+ traitement = subDict[ Approximation ]
- if ( Traitement is not None ):
- txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
+ if ( traitement is not None ):
+ txt += apply( STDGenerateur.__dict__[ traitement ], (self,) )
txt += self.RunAlgorithm()
txt += self.AnalyticalResult()
# Cette instruction genere le contenu du fichier de parametres pour le code Carmel3D
# si le jdc est valide (sinon cela n a pas de sens)
- if obj.isvalid() :
+ if obj.isValid() :
# constitution du bloc VERSION du fichier PHYS (existe toujours)
try :
self.generBLOC_VERSION(obj)
try:
if usePrefix:
- nomGroupeMaillage = self.nomReelGroupeMaillage(obj.get_sdname()) # nom du groupe de maillage, i.e. nom du concept, avec prefixes enleves
+ nomGroupeMaillage = self.nomReelGroupeMaillage(obj.getSdname()) # nom du groupe de maillage, i.e. nom du concept, avec prefixes enleves
else:
- nomGroupeMaillage = obj.get_sdname() # nom du groupe de maillage, i.e. nom du concept
+ nomGroupeMaillage = obj.getSdname() # nom du groupe de maillage, i.e. nom du concept
# test: un et un seul nom de materiau ou source doit etre associe a ce groupe de maillage, via les cles MATERIAL et SOURCE, respectivement.
# test sur un seul attribut, non pertinent car il peut y en avoir plusieurs.
#assert len(obj.valeur.keys())==1,"Un et un seul nom de materiau ou source doit etre associe a ce groupe du maillage :"+nomGroupeMaillage
texte+=" ]"+"\n"
if self.debug:
print "texte = %s", texte
- self.dictMaterConductor[obj.get_sdname()]=texte # sauvegarde du texte pour ce bloc
+ self.dictMaterConductor[obj.getSdname()]=texte # sauvegarde du texte pour ce bloc
def generMATERIAL_DIELECTRIC(self,obj):
"""preparation du sous bloc DIELECTRIC"""
texte+=" ]"+"\n"
if self.debug:
print "texte = %s", texte
- self.dictMaterDielectric[obj.get_sdname()]=texte # sauvegarde du texte pour ce bloc
+ self.dictMaterDielectric[obj.getSdname()]=texte # sauvegarde du texte pour ce bloc
def generMATERIAL_ZSURFACIC(self,obj):
"""preparation du sous bloc ZSURFACIC"""
texte+=" ]"+"\n"
if self.debug:
print "texte = %s", texte
- self.dictMaterZsurfacic[obj.get_sdname()]=texte # sauvegarde du texte pour ce bloc
+ self.dictMaterZsurfacic[obj.getSdname()]=texte # sauvegarde du texte pour ce bloc
def generMATERIAL_EMISO(self,obj):
"""preparation du sous bloc EM_ISOTROPIC_FILES.
#from os.path import basename
#texte =" CONDUCTIVITY MED "+basename(str(obj.valeur["CONDUCTIVITY_File"]))+"\n"
#texte+=" PERMEABILITY MED "+basename(str(obj.valeur["PERMEABILITY_File"]))+"\n"
- # print "obj get sdname= ", obj.get_sdname()
- # if obj.get_sdname() in self.dictMaterEmIso.keys() :
- # self.dictMaterEmIso[obj.get_sdname()].append(texte)
+ # print "obj get sdname= ", obj.getSdname()
+ # if obj.getSdname() in self.dictMaterEmIso.keys() :
+ # self.dictMaterEmIso[obj.getSdname()].append(texte)
# else :
- self.dictMaterEmIso[obj.get_sdname()]=texte
+ self.dictMaterEmIso[obj.getSdname()]=texte
def generMATERIAL_EMANISO(self,obj):
"""preparation du sous bloc EM_ANISOTROPIC_FILES.
"""
texte =" CONDUCTIVITY MATER "+str(obj.valeur["CONDUCTIVITY_File"])+"\n"
texte+=" PERMEABILITY MATER "+str(obj.valeur["PERMEABILITY_File"])+"\n"
- # print "obj get sdname= ", obj.get_sdname()
- # if obj.get_sdname() in self.dictMaterEmAnIso.keys() :
- # self.dictMaterEmAnIso[obj.get_sdname()].append(texte)
+ # print "obj get sdname= ", obj.getSdname()
+ # if obj.getSdname() in self.dictMaterEmAnIso.keys() :
+ # self.dictMaterEmAnIso[obj.getSdname()].append(texte)
# else :
- self.dictMaterEmAnIso[obj.get_sdname()]=texte
+ self.dictMaterEmAnIso[obj.getSdname()]=texte
def generMATERIAL_NILMAT(self,obj):
"""preparation du sous bloc NILMAT"""
texte=""
- self.dictMaterNilmat[obj.get_sdname()]=texte
+ self.dictMaterNilmat[obj.getSdname()]=texte
def generMATERIAL_ZINSULATOR(self,obj):
""""preparation du sous bloc ZINSULATOR"""
texte=""
- self.dictMaterZinsulator[obj.get_sdname()]=texte
+ self.dictMaterZinsulator[obj.getSdname()]=texte
#-------------------------------------------------------------------
else:
print tr("ERREUR! Une forme de la source du \
type WAVEFORM_CONSTANT ou WAVEFORM_SINUS est attendue.")
- self.dictSourceStInd[obj.get_sdname()]=texte
+ self.dictSourceStInd[obj.getSdname()]=texte
if self.debug:
print texte
except Exception:
else:
print tr("ERREUR! Une forme de la source du type \
WAVEFORM_CONSTANT ou WAVEFORM_SINUS est attendue.")
- self.dictSourceHport[obj.get_sdname()]=texte
+ self.dictSourceHport[obj.getSdname()]=texte
if self.debug:
print texte
except:
else:
print tr("ERREUR! Une forme de la source du type \
WAVEFORM_CONSTANT ou WAVEFORM_SINUS est attendue.")
- self.dictSourceEport[obj.get_sdname()]=texte
+ self.dictSourceEport[obj.getSdname()]=texte
if self.debug:
print texte
except:
# constitution du bloc VERSION du fichier PHYS
# creation d une entite VERSION ; elle sera du type PROC car decrit ainsi
# dans le du catalogue
- version=obj.addentite('VERSION',pos=None)
+ version=obj.addEntite('VERSION',pos=None)
self.generPROC_ETAPE(obj.etapes[0])
self.texteCarmel3D+="["+obj.etapes[0].nom+"\n"
for cle in obj.etapes[0].valeur :
self.texteCarmel3D+=" "+cle+" "+str(obj.etapes[0].valeur[cle])+"\n"
self.texteCarmel3D+="]\n"
# destruction de l entite creee
- obj.suppentite(version)
+ obj.suppEntite(version)
#----------------------------------------------------------------------------------------
def generBLOC_MATERIALS(self) :
self.text=PythonGenerator.gener(self,obj,format)
if self.debug:
- print ("self.text = ", self.text)
+ print "self.text = %s" % self.text
# Cette instruction genere le contenu du fichier de parametres pour le code Carmel3D
# si le jdc est valide (sinon cela n a pas de sens)
# constitution du bloc VERSION du fichier PHYS (existe toujours)
self.generBLOC_VERSION(obj)
- except ValueError as err:
+ except ValueError, err:
raise ValueError(str(err))
return self.text
fileXML = os.path.join(repertory, 'configuration.xml') # nom du fichier de configuration XML (chemin complet)
if self.debug:
- print ("\necriture du fichier XML : ", fileXML)
- print ("self.dictMaterial = ",self.dictMaterial)
- print ("self.dictSource = ",self.dictSource)
- print ("self.dictGroupes = ",self.dictGroupes)
- print ("self.dictMacroGroupes = ",self.dictMacroGroupes)
+ print "\necriture du fichier XML : ", fileXML
+ print "self.dictMaterial = ",self.dictMaterial
+ print "self.dictSource = ",self.dictSource
+ print "self.dictGroupes = ",self.dictGroupes
+ print "self.dictMacroGroupes = ",self.dictMacroGroupes
root = ET.Element("configuration")
#Bloc <TermeSourceElectrique>...</TermeSourceElectrique>
TermeSourceElectrique=ET.SubElement(root, "TermeSourceElectrique")
i=0 # ?
- if self.debug: print ('self.dictSource = ', self.dictSource)
+ if self.debug: print 'self.dictSource = ', self.dictSource
for source in self.dictSource.keys(): # parcours des sources
if len(self.dictSource[source]['milieux']) > 0: # on continue si au moins un groupe de maillage, i.e., milieux est associé à cette source
if self.dictSource[source].has_key('STRANDED_INDUCTOR'): # inducteur bobiné
# print "le dico complet=%s" %(self.dictGroupes)
if self.debug:
- print ("ecriture du fichier d'execution (SH)")
+ print "ecriture du fichier d'execution (SH)"
RepCarmel=os.path.join(repertory,"lancer.sh")
f = open( RepCarmel, 'wb')
self.texteCarmel3D_SH+='cd ' + repertory + ' \n'
def generMCSIMP(self,obj) :
"""recuperation de l objet MCSIMP"""
if self.debug:
- print ("MCSIMP", obj.nom, obj.valeur)
+ print "MCSIMP %(v_1)s %(v_2)s" % {'v_1': obj.nom, "v_2": obj.valeur}
s=PythonGenerator.generMCSIMP(self,obj)
try:
self.dicoCourant[obj.nom]=obj.valeurFormatee
except:
- print ("Oubli des messages texte homo='information'")
+ print "Oubli des messages texte homo='information'"
return s
obj.valeur=self.dicoEtapeCourant
if self.debug:
- print ("PROC_ETAPE " ,obj.nom, str(obj.valeur))
+ print "PROC_ETAPE %(v_1)s %(v_2)s" % {'v_1': unicode(obj.nom), "v_2": unicode(obj.valeur)}
s=PythonGenerator.generPROC_ETAPE(self,obj)
if obj.nom=="PARAMETERS" : self.generBLOC_PARAMETERS(obj)
if obj.nom=="SOLVEUR" : self.generSOLVEUR(obj)
s=PythonGenerator.generETAPE(self,obj)
obj.valeur=self.dicoEtapeCourant
if self.debug:
- print ("ETAPE " ,obj.nom, str(obj.valeur))
+ print "ETAPE : obj.nom = %(v_1)s , obj.valeur= %(v_2)s" % {'v_1': obj.nom, 'v_2': obj.valeur}
if obj.nom=="MESHGROUP" : self.generMESHGROUP(obj)
if obj.nom=="MATERIAL" : self.generMATERIAL(obj)
if obj.nom=="SOURCE" : self.generSOURCE(obj)
monGenerateur=generator.plugins[nomPlugin]()
jdc_aux_texte=monGenerateur.gener(obj.jdc_aux)
if self.debug:
- print ("jdc_aux_texte : ", jdc_aux_texte)
+ print "jdc_aux_texte : %s" % jdc_aux_texte
# sauvegarde de tous les matériaux trouvés dans les bibliothèques INCLUDE
for cle in monGenerateur.dictMaterial:
for cle in monGenerateur.dictSource:
self.dictSource[cle] = monGenerateur.dictSource[cle]
- print ("________FIN MACRO______________________________________")
+ print "________FIN MACRO______________________________________"
s=PythonGenerator.generMACRO_ETAPE(self,obj)
return s
"""
try:
nomGroupe = obj.getSdname() # nom du groupe de maillage, i.e. nom du concept
- print ("liste des noms sans prefixes", nomGroupe)
+ print "liste des noms sans prefixes %s" %(nomGroupe)
# test: un et un seul nom de materiau ou source doit etre associe a ce groupe de maillage, via les cles MATERIAL et SOURCE, respectivement.
# test sur un seul attribut, non pertinent car il peut y en avoir plusieurs.
# on utilise le fait que obj.valeur est un dictionnaire
self.dictGroupes[nomGroupe] = {}
if self.debug:
- print ("obj.valeur.keys()" , obj.valeur.keys())
+ print "obj.valeur.keys()= %s" % obj.valeur.keys()
#if 'MATERIAL' in obj.valeur.keys() and 'SOURCE' in obj.valeur.keys(): # test d'erreur lors de presence de materiau et source a la fois
# raise ValueError,tr(" ce groupe de maillage %s est associe a au moins un materiau et au moins une source." % nomGroupe)
# association a un materiau
# self.dictGroupes['ordreDomaineJdC'].append(nomGroupe)
texte=""
texte+="%s"%(obj.valeur['Domaine'])
- print ("le texte=", texte)
+ print"le texte=%s" %(texte)
self.dictDomaine[obj.getSdname()]=texte
- print ("liste des domaines " ,self.dictGroupes[nomGroupe]['DOMAINE'])
+ print "liste des domaines =%s" %(self.dictGroupes[nomGroupe]['DOMAINE'])
if 'Potentiel_Flottant' in obj.valeur.keys():
self.dictGroupes[nomGroupe]['Potentiel_Flottant'] = True
if 'Spire_Exploratrice' in obj.valeur.keys():
# else:
# raise ValueError, tr("ce groupe de maillage %s n'est associe a aucun materiau, source ou stranded_inductor_geometry." % nomGroupe)
if self.debug:
- print ("self.dictGroupes" , repr(self.dictGroupes))
- except ValueError as err:
- raise ValueError (str(err))
+ print "self.dictGroupes= %s" % repr(self.dictGroupes)
+ except ValueError, err:
+ raise ValueError, str(err)
def generMACRO_GROUPE(self, obj):
"""preparation de la ligne NAME referencant le groupe de mailles
"""
try:
nomMacroGroupe = obj.getSdname() # nom du macro groupe
- print ("liste des noms sans prefixes " ,nomMacroGroupe)
+ print "liste des noms sans prefixes %s" %(nomMacroGroupe)
self.dictMacroGroupes[nomMacroGroupe] = obj.valeur # sauvegarde des propriétés du macro-groupe
if self.debug:
- print ("obj.valeur.keys()" , obj.valeur.keys())
+ print "obj.valeur.keys()= %s" % obj.valeur.keys()
# association a une source
if 'LISTE_MESHGROUP' in obj.valeur.keys(): # test de liste définie dans la macro-groupe, sinon erreur
listeGroupesMauvaisFormat = obj.valeur['LISTE_MESHGROUP'] # sauvegarde de l'association entre ce macro groupe et un materiau ou source, par son nom, i.e. nom du concept du materiau ou de la source
groupe = groupe.replace('"', "") # suppression des guillement doubles
self.dictMacroGroupes[nomMacroGroupe]['LISTE'].append(groupe) # sauvegarde du nom au formatage correct
else:
- raise ValueError (tr(" : ce MACRO_GROUPE doit contenir une liste de groupes LISTE_MESHGROUP."))
+ raise ValueError, nomMacroGroupe + tr(" : ce MACRO_GROUPE doit contenir une liste de groupes LISTE_MESHGROUP.")
for nomGroupe in self.dictMacroGroupes[nomMacroGroupe]['LISTE']: # liste des groupes MESHGROUP de ce macro-groupe. On leur associe les propriétés du MACRO_GROUPE
for propriete in ('SOURCE', 'MATERIAL', 'STRANDED_INDUCTOR_GEOMETRY'): # liste des propriétés automatiques à copier du MACRO_GROUPE à chaque MESHGROUP de la liste
if propriete in obj.valeur.keys(): # ce macro-groupe est associé à cette propriété
if self.dictGroupes[nomGroupe].has_key(propriete) and self.dictGroupes[nomGroupe][propriete] != self.dictGroupes[nomGroupe][propriete].nom: # erreur, ce meshgroup a déjà une telle propriéte définie, différente
- print ("ERREUR! Conflit entre la MACRO_GROUPE et celle : du MESHGROUP associé à ce macro-groupe." ,\
- ( propriete, obj.valeur[propriete].nom, nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe ))
- raise ValueError( propriete + ',' + obj.valeur[propriete].nom + ',' + nomMacroGroupe + ',' + self.dictGroupes[nomGroupe][propriete] + ',' + nomGroupe\
- + tr(" : conflit entre la propriete (#1:#2) du MACRO_GROUPE (de nom #3) et celle (#4) du MESHGROUP (#5) associe a ce macro-groupe."))
+ print u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP %s associé à ce macro-groupe." % \
+ ( propriete, obj.valeur[propriete].nom, nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe )
+ raise ValueError, propriete + ',' + obj.valeur[propriete].nom + ',' + nomMacroGroupe + ',' + self.dictGroupes[nomGroupe][propriete] + ',' + nomGroupe\
+ + tr(" : conflit entre la propriete (#1:#2) du MACRO_GROUPE (de nom #3) et celle (#4) du MESHGROUP (#5) associe a ce macro-groupe.")
else : # pas de conflit de cette propriété, alors copie, meme si les propriétés sont les memes pour simplifier
self.dictGroupes[nomGroupe][propriete] = obj.valeur[propriete].nom # sauvegarde du nom de la propriété du macro-groupe dans le meshgroup
for propriete in ('CONDITION_LIMITE', ): # liste des propriétés définies à l'avance automatiques à copier du MACRO_GROUPE à chaque MESHGROUP de la liste
if propriete in obj.valeur.keys(): # ce macro-groupe est associé à cette propriété
if self.dictGroupes[nomGroupe].has_key(propriete) and self.dictGroupes[nomGroupe][propriete] != self.dictGroupes[nomGroupe][propriete]: # erreur, ce meshgroup a déjà une telle propriéte définie, différente
- print ("ERREUR! Conflit entre la MACRO_GROUPE et celle : du MESHGROUP associé à ce macro-groupe.")
- #( propriete, obj.valeur[propriete], nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe )
- #raise ValueError( propriete + ',' + obj.valeur[propriete].nom + ',' + nomMacroGroupe + ',' + self.dictGroupes[nomGroupe][propriete] + ',' + nomGroupe\
- #+ tr(" : conflit entre la propriete (#1:#2) du MACRO_GROUPE (de nom #3) et celle (#4) du MESHGROUP (#5) associe a ce macro-groupe."))
- raise ValueError()
+ print u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP %s associé à ce macro-groupe." % \
+ ( propriete, obj.valeur[propriete], nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe )
+ raise ValueError, propriete + ',' + obj.valeur[propriete].nom + ',' + nomMacroGroupe + ',' + self.dictGroupes[nomGroupe][propriete] + ',' + nomGroupe\
+ + tr(" : conflit entre la propriete (#1:#2) du MACRO_GROUPE (de nom #3) et celle (#4) du MESHGROUP (#5) associe a ce macro-groupe.")
else : # pas de conflit de cette propriété, alors copie, meme si les propriétés sont les memes pour simplifier
self.dictGroupes[nomGroupe][propriete] = obj.valeur[propriete] # sauvegarde du nom de la propriété du macro-groupe dans le meshgroup
- except ValueError as err:
- raise ValueError( str(err))
+ except ValueError, err:
+ raise ValueError, str(err)
def generSOLVEUR(self, obj):
if self.debug:
- print ("generation solveur", obj.valeur )
+ print "generation solveur obj.valeur = %s" % obj.valeur
try :
self.typeSolveur = obj.valeur['Type']
if self.typeSolveur == "Solveur_lineaire" : self.generSOLVEUR_LINEAIRE(obj)
if self.typeSolveur == "Solveur_non_lineaire" :
self.generSOLVEUR_LINEAIRE(obj)
self.generSOLVEUR_NON_LINEAIRE(obj)
- except ValueError as err:
- raise ValueError( str(err))
+ except ValueError, err:
+ raise ValueError, str(err)
def generSOLVEUR_LINEAIRE(self, obj):
if self.debug:
- print ("generation material" , obj.valeur )
+ print "generation material obj.valeur = %s" % obj.valeur
try :
nature = obj.valeur['Methode_lineaire']
if nature =="Methode iterative BICGCR" : self.generMETHODE_ITERATIVE_BICGCR(obj)
if nature =="Methode directe MUMPS" : self.generMETHODE_DIRECTE_MUMPS(obj)
- except ValueError as err:
- raise ValueError( str(err))
+ except ValueError, err:
+ raise ValueError, str(err)
def generMETHODE_ITERATIVE_BICGCR(self, obj):
if self.debug:
- print ("generation methode iterative BICGCR " , obj.valeur)
+ print "generation methode iterative BICGCR obj.valeur = %s" % obj.valeur
self.kEpsilonGCP = obj.valeur["Precision"]
self.precond=obj.valeur["Preconditionneur"]
self.nbIterationMax=obj.valeur["Nombre_iterations_max"]
def generMETHODE_DIRECTE_MUMPS(self, obj):
texte=""
if self.debug:
- print ("_____________directe_____________")
+ print "_____________directe_____________"
def generSOLVEUR_NON_LINEAIRE(self, obj):
if self.debug:
- print ("generation solveur_non_lineaire", obj.valeur)
+ print "generation solveur_non_lineaire obj.valeur = %s" % obj.valeur
correspondance_methodeNonLineaire = {"Methode de Newton":2,"Methode de substitution":1} # correspondance sur la méthode non-linéaire entre le catalogue et le XML
self.methodeNonLineaire = correspondance_methodeNonLineaire[obj.valeur["Methode_non_lineaire"]]
self.kEpsilonNonLinearite=obj.valeur["PrecisionNonLineaire"]
"""preparation du bloc correspondant a un materiau du fichier PHYS"""
texte=""
if self.debug:
- print ("generation material obj.valeur" , obj.valeur)
+ print "generation material obj.valeur = %s" % obj.valeur
try :
nomMaterial = obj.getSdname()
self.dictMaterial[nomMaterial]=obj.valeur
- print ("self.dictMaterial=" ,self.dictMaterial)
- except ValueError as err:
- raise ValueError( str(err))
+ print"self.dictMaterial=%s" %(self.dictMaterial)
+ except ValueError, err:
+ raise ValueError, str(err)
#-------------------------------------------------------------------
def generSOURCE(self,obj):
"""preparation du bloc correspondant a une source du fichier PHYS"""
if self.debug:
- print ("generation source obj valeur " , obj.valeur)
+ print "generation source obj valeur = %s" % obj.valeur
texte=""
try :
nomSource = obj.getSdname()
self.dictSource[nomSource]=obj.valeur # dictionnaire
self.dictSource[nomSource]['milieux'] = [] # liste ordonnée des groupes associés à cette source
- print ("mon dico des sources=" ,self.dictSource)
- except ValueError as err:
- raise ValueError( str(err))
+ print"mon dico des sources=%s" %(self.dictSource)
+ except ValueError, err:
+ raise ValueError, str(err)
#---------------------------------------------------------------------------------------
# traitement fichier PHYS
def generBLOC_PARAMETERS(self,obj):
if self.debug:
- print ("generation parameters " , obj.valeur )
+ print "generation parameters obj.valeur = %s" % obj.valeur
self.identification = obj.valeur["Identification_du_Modele"]
self.fichierMaillage = obj.valeur["Fichier_maillage"]
def generBLOC_SYMETRIE(self, obj):
if self.debug:
- print ("generation de la symetrie obj.valeur " , obj.valeur )
+ print "generation de la symetrie obj.valeur = %s" % obj.valeur
try:
self.listSymetrie.append(obj.valeur)
- except ValueError as err:
- raise ValueError( str(err))
+ print"ma liste symetrie =%s" %(self.listSymetrie)
+ except ValueError, err:
+ raise ValueError, str(err)
#----------------------------------------------------------------------------------------
def generMOUVEMENT(self, obj):
if self.debug:
- print ("generation du mouvement obj.valeur " , obj.valeur )
+ print "generation du mouvement obj.valeur = %s" % obj.valeur
try:
nom = obj.getSdname()
self.dictMouvement[nom] = {'ordre': self.nombreMouvements, 'valeurs': obj.valeur}
self.dictMouvement['ordre'].append(nom)
if self.debug:
- print ("self.dictMouvement " ,self.dictMouvement)
- print ("self.nombreMouvements " ,self.nombreMouvements)
- except ValueError as err:
- raise valueError( str(err))
+ print "self.dictMouvement =%s" %(self.dictMouvement)
+ print "self.nombreMouvements =%i" %(self.nombreMouvements)
+ except ValueError, err:
+ raise valueError, str(err)
#----------------------------------------------------------------------------------------
def generSTRANDED_INDUCTOR_GEOMETRY(self, obj):
"""preparation du bloc STRANDED_INDUCTOR_GEOMETRY"""
if self.debug:
- print ("generation strand obj valeur =" , obj.valeur)
+ print "generation strand obj valeur = %s" % obj.valeur
try :
nomStrand = obj.getSdname()
self.dictStrand[nomStrand]=obj.valeur
- print ("mon dico des stranded inductor geometry" ,self.dictStrand)
+ print"mon dico des stranded inductor geometry=%s" %(self.dictStrand)
- except ValueError as err:
- raise valueError( str(err))
+ except ValueError, err:
+ raise ValueError, str(err)
def generPOST_TRAITEMENT(self, obj):
if self.debug:
- print ("generation post traitement obj.valeur " , obj.valeur )
+ print "generation post traitement obj.valeur = %s" % obj.valeur
self.carteChamp=obj.valeur["Cartes_des_champs"]
self.carteCourantInduit=obj.valeur["Cartes_des_courants_induits"]
self.carteForce=obj.valeur["Cartes_des_forces"]
3 formats possibles : 2 listes (anciennement tuples?) et 1 nombre complexe
"""
if self.debug:
- print ("formatage")
+ print "formatage"
+ print "type : %(type_nb_c)s pour %(nb_c)s" % {'type_nb_c': type(nbC), 'nb_c': nbC}
nbformate =""
if isinstance(nbC,(tuple,list)):
if nbC[0] == "'RI'" :
else:
nbformate = "COMPLEX " + str(nbC.real)+" "+str(nbC.imag)
if self.debug:
- print ("nbformate " , nbformate)
+ print "nbformate : %s" % nbformate
return nbformate
s=PythonGenerator.generMCSIMP(self,obj)
if hasattr(obj.etape,'sdnom'): clef=obj.etape.sdnom+"____"
else: clef=""
- for i in obj.get_genealogie() :
+ for i in obj.getGenealogie() :
clef=clef+"__"+i
self.dictMCVal[clef]=obj.valeur
# print 'generMCSIMP self.texteDico = ',self.texteDico
if hasattr(obj.etape,'sdnom'): clef=obj.etape.sdnom+"____"
else: clef=""
- for i in obj.get_genealogie() :
+ for i in obj.getGenealogie() :
clef=clef+"__"+i
self.dictMCVal[clef]=obj.valeur
Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
"""
clef=""
- for i in obj.get_genealogie() :
+ for i in obj.getGenealogie() :
clef=clef+"__"+i
#self.dictMCVal[obj.nom]=obj.valeur
self.dictMCVal[clef]=obj.valeur
import types,re,os
from Extensions.i18n import tr
from .generator_python import PythonGenerator
-#ListeConcatene=('ridge_names','topo_names','geom_names','elset_names','faset_names','liset_names','nset_names','center','normal','dir')
-ListeConcatene=('ridge_names','topo_names','geom_names','elset_names','faset_names','liset_names','nset_names')
+#ListeConcatene=('ridge_names','topo_names','geom_names','elsetNames','fasetNames','lisetNames','nsetNames','center','normal','dir')
+ListeConcatene=('ridge_names','topo_names','geom_names','elsetNames','fasetNames','lisetNames','nsetNames')
ListeConcatene2=('center','normal','dir')
ListeConcatene3=('ra','rb')
if_ellipse=False
self.text=string.join(liste)
elif format == 'beautifie':
jdc_formate = Formatage(liste,sep=':',l_max=72)
- self.text=jdc_formate.formate_jdc()
+ self.text=jdc_formate.formateJdc()
else:
raise EficasException(tr("Format pas implemente : %s", format))
return self.text
Methode particuliere pour les objets de type FORMULE
"""
l=[]
- nom = obj.get_nom()
+ nom = obj.getNom()
if nom == '' : nom = 'sansnom'
if len(obj.mc_liste)>0:
l.append(nom + ' = FORMULE(')
Convertit un objet derive d'ASSD en une chaine de caracteres à la
syntaxe asterv5
"""
- return obj.get_name()
+ return obj.getName()
def generMCFACT(self,obj):
"""
"IncrementMaxTemperature" : "DTPREC",
"ChoixExtractionTransitoires" : "CHOIEXTR",
"IncrementMaxTempsAffichage" : "DTARCH",
- "TraitementGeometrie" : "TYPEGEOM",
+ "traitementGeometrie" : "TYPEGEOM",
"RayonInterne" : "RINT",
"RayonInterne_mess" : "RINT_MESSAGE",
"RayonExterne" : "REXT",
"IncrementMaxTemperature" : "increment max de temp/noeud/instant (degC)",
"ChoixExtractionTransitoires" : "choix d'extraction de transitoires de temp et contraintes",
"IncrementMaxTempsAffichage" : "increment max de temps pour affichage (s)",
- "TraitementGeometrie" : "traitement de la geometrie de la cuve : {GEOMETRIE, MAILLAGE}",
+ "traitementGeometrie" : "traitement de la geometrie de la cuve : {GEOMETRIE, MAILLAGE}",
"RayonInterne" : "rayon interne (m)",
"RayonInterne_mess" : "affichage ecran du rayon interne (m)",
"RayonExterne" : "rayon externe (m)",
"IncrementMaxTemperature" : "0.1",
"ChoixExtractionTransitoires" : "NON",
"IncrementMaxTempsAffichage" : "1000.",
- "TraitementGeometrie" : "GEOMETRIE",
+ "traitementGeometrie" : "GEOMETRIE",
"RayonInterne" : "1.994",
"RayonInterne_mess" : "NON",
"RayonExterne" : "2.2015",
"IncrementMaxTemperature" : "OPTIONS",
"ChoixExtractionTransitoires" : "OPTIONS",
"IncrementMaxTempsAffichage" : "OPTIONS",
- "TraitementGeometrie" : "DONNEES DE LA CUVE",
+ "traitementGeometrie" : "DONNEES DE LA CUVE",
"RayonInterne" : "DONNEES DE LA CUVE",
"RayonInterne_mess" : "DONNEES DE LA CUVE",
"RayonExterne" : "DONNEES DE LA CUVE",
def generMCSIMP(self,obj) :
self.dico_mot[obj.nom]=obj.valeur
clef=""
- for i in obj.get_genealogie() :
+ for i in obj.getGenealogie() :
clef=clef+"_"+i
self.dico_genea[clef]=obj.valeur
s=PythonGenerator.generMCSIMP(self,obj)
# Rubrique DONNEES DE LA CUVE
self.texteCuve += self.rubrique('DONNEES DE LA CUVE')
- if self.dico_mot.has_key('TraitementGeometrie'):
- self.texteCuve += self.affecteValeur('TraitementGeometrie', self.valeurproposee[str(self.dico_mot["TraitementGeometrie"])])
- if str(self.dico_mot["TraitementGeometrie"])=='Topologie':
+ if self.dico_mot.has_key('traitementGeometrie'):
+ self.texteCuve += self.affecteValeur('traitementGeometrie', self.valeurproposee[str(self.dico_mot["traitementGeometrie"])])
+ if str(self.dico_mot["traitementGeometrie"])=='Topologie':
self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
self.texteCuve += self.ecritVariable('LigamentExterneMin_mess')
self.texteCuve+="#"+"\n"
self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
- if str(self.dico_mot["TraitementGeometrie"])=='Maillage':
+ if str(self.dico_mot["traitementGeometrie"])=='Maillage':
self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
self.imprime(1,(self.dico_mot["ListeAbscisses"]))
else :
- self.texteCuve += self.affecteValeurDefaut('TraitementGeometrie')
+ self.texteCuve += self.affecteValeurDefaut('traitementGeometrie')
self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
"""
short_keyword = obj.nom.strip()
long_keyword = ""
- for i in obj.get_genealogie()[:-1]:
+ for i in obj.getGenealogie()[:-1]:
long_keyword += i + "."
long_keyword += short_keyword
self.kw_dict[short_keyword] = obj.valeur
Tous les mots-cles facteurs sont convertis en sections
Un mot-cle facteur ne peut contenir que des mots-cles simples. Sinon => erreur
"""
- liste_mcfact=[]
+ listeMcFact=[]
sect_defaut=''
if isinstance(obj,MCList):
if len(obj.data) > 1:
if len(mocle.data) > 1:
raise EficasException(tr("Pas supporte"))
else:
- liste_mcfact.append(self.generMCFACT(mocle.data[0]))
+ listeMcFact.append(self.generMCFACT(mocle.data[0]))
elif isinstance(mocle,MCFACT):
- liste_mcfact.append(self.generMCFACT(mocle))
+ listeMcFact.append(self.generMCFACT(mocle))
elif isinstance(mocle,MCSIMP):
sect_defaut=sect_defaut+self.generMCSIMP(mocle)
else:
self.text=''
if sect_defaut != '':
self.text="[DEFAULT]\n"+sect_defaut
- self.text=self.text + ''.join(liste_mcfact,'\n')
+ self.text=self.text + ''.join(listeMcFact,'\n')
return self.text
def generMCFACT(self,obj):
Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
"""
s=PythonGenerator.generMCSIMP(self,obj)
- if not( type(obj.valeur) in (list, tuple)) and (obj.get_min_max()[1] != 1):
+ if not( type(obj.valeur) in (list, tuple)) and (obj.getMinMax()[1] != 1):
valeur=(obj.valeur,)
else :
valeur=obj.valeur
def genereXML(self):
print "IDM: genereXML dans generator_openturns_wrapper.py"
- #print "appli.CONFIGURATION=",self.appli.CONFIGURATION.__dict__
+ #print "appli.maConfiguration=",self.appli.maConfiguration.__dict__
if self.listeFichiers != [] :
self.dictMCVal["Files"]=self.listeFichiers
print "dictMCVal", self.dictMCVal, "dictVariables", self.dictVariables
Méthode particulière pour les objets de type FORMULE
"""
l=[]
- nom = obj.get_nom()
+ nom = obj.getNom()
if nom == '' : nom = 'sansnom'
l.append(nom + ' = FORMULE(')
for v in obj.mc_liste: