From f74b4345b6f90c2de0b39fe0b2591ede0c5d842a Mon Sep 17 00:00:00 2001 From: eficas <> Date: Mon, 18 Apr 2005 10:20:36 +0000 Subject: [PATCH] CCAR: corrections dans la prise en compte de l'edition d'INCLUDE --- Aster/eficas_aster.py | 2 +- Aster/prefs.py | 3 +++ Editeur/appli.py | 2 +- Editeur/bureau.py | 2 +- Editeur/compomacro.py | 26 +++++++++++++++++++++----- Editeur/eficas_go.py | 3 ++- Editeur/jdcdisplay.py | 4 ++-- Editeur/macrodisplay.py | 4 ++-- Editeur/panels.py | 2 ++ Editeur/readercata.py | 9 ++++++++- Editeur/session.py | 6 ++++++ Ihm/I_ETAPE.py | 15 +++++++++++---- Ihm/I_JDC.py | 9 +++++++++ Ihm/I_MACRO_ETAPE.py | 40 ++++++++++++++++++++++++++++++---------- 14 files changed, 99 insertions(+), 28 deletions(-) diff --git a/Aster/eficas_aster.py b/Aster/eficas_aster.py index c5bb96b5..f1870683 100755 --- a/Aster/eficas_aster.py +++ b/Aster/eficas_aster.py @@ -41,4 +41,4 @@ sys.path[:0]=[prefs.INSTALLDIR] import Editeur from Editeur import eficas_go -eficas_go.lance_eficas(code='ASTER') +eficas_go.lance_eficas() diff --git a/Aster/prefs.py b/Aster/prefs.py index 22a0a58b..5ee30d25 100644 --- a/Aster/prefs.py +++ b/Aster/prefs.py @@ -36,6 +36,9 @@ INSTALLDIR=os.path.join(REPINI,'..') CODE_PATH = None #CODE_PATH = os.path.join(REPINI,'../../Superv') +# la variable code donne le nom du code a selectionner +code="ASTER" + # ICONDIR sert à localiser le répertoire contenant les icones # Par défaut on utilise le répertoire icons dans Editeur ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons') diff --git a/Editeur/appli.py b/Editeur/appli.py index e85c79f8..e9f105ab 100644 --- a/Editeur/appli.py +++ b/Editeur/appli.py @@ -45,7 +45,7 @@ import session VERSION="EFICAS v1.7" class APPLI: - def __init__ (self,master,code='ASTER',fichier=None,test=0) : + def __init__ (self,master,code=prefs.code,fichier=None,test=0) : self.code=code self.top=master self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS) diff --git a/Editeur/bureau.py b/Editeur/bureau.py index 8bcafcad..b62aed8a 100644 --- a/Editeur/bureau.py +++ b/Editeur/bureau.py @@ -464,7 +464,7 @@ class BUREAU: liste = self.GetListeJDCaSauvegarder() if liste != [] : # Certains fichiers n'ont pas été sauvegardés ... - if askyesno("Enregistrer modifications","Enregister les modifications ?") : + if askyesno("Enregistrer modifications","Enregistrer les modifications ?") : test = self.saveall(liste) if test != 1 : return diff --git a/Editeur/compomacro.py b/Editeur/compomacro.py index ef087426..af1e921d 100644 --- a/Editeur/compomacro.py +++ b/Editeur/compomacro.py @@ -37,7 +37,7 @@ from widgets import showinfo,showerror # __version__="$Name: $" -__Id__="$Id: compomacro.py,v 1.15 2005/03/10 09:25:30 eficas Exp $" +__Id__="$Id: compomacro.py,v 1.16 2005/04/13 14:59:31 eficas Exp $" # class MACROPanel(panels.OngletPanel): @@ -240,22 +240,38 @@ class INCLUDETreeItem(MACROTreeItem): ("Edit","makeEdit"), ] - def makeEdit(self,appli): + def __init__(self,appli, labeltext, object, setfunction): + MACROTreeItem.__init__(self,appli, labeltext, object, setfunction) + self.views=[] + + def makeEdit(self,appli,node): print "makeEdit",self.object,self.object.nom - print self.object.jdc_aux,self.object.jdc_aux.nom + print "makeEdit",self.object.jdc_aux,self.object.jdc_aux.nom + self.parent_node=node # On cree un nouvel onglet dans le bureau appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom, label_onglet=None, JDCDISPLAY=macrodisplay.MACRODISPLAY) + self.myjdc=appli.bureau.JDCDisplay_courant + self.object.jdc_aux.subscribe(self) + + def notify(self,obj): + print "notify",self,obj + self.parent_node.update_valid() + # Il faudrait redessiner l'arbre de maniere optimale + # et pas seulement l'updater + for display in self.views: + display.tree.update() - def makeView(self,appli): + def makeView(self,appli,node): nom=self.object.nom if hasattr(self.object,'fichier_ini'): if self.object.fichier_ini is None: nom=nom+' '+"Fichier non défini" else: nom=nom+' '+self.object.fichier_ini - macrodisplay.makeMacroDisplay(appli,self.object,nom) + macdisp=macrodisplay.makeMacroDisplay(appli,self.object,nom) + self.views.append(macdisp) class INCLUDE_MATERIAUTreeItem(INCLUDETreeItem): pass class POURSUITETreeItem(INCLUDETreeItem): pass diff --git a/Editeur/eficas_go.py b/Editeur/eficas_go.py index 79a1bb01..2446c724 100644 --- a/Editeur/eficas_go.py +++ b/Editeur/eficas_go.py @@ -31,12 +31,13 @@ import import_code import splash import session -def lance_eficas(code,fichier=None): +def lance_eficas(code=None,fichier=None): """ Lance l'appli EFICAS """ # Analyse des arguments de la ligne de commande options=session.parse(sys.argv) + code=options.code root = Tkinter.Tk() splash.init_splash(root,code=code,titre="Lancement d'EFICAS pour %s" %code) diff --git a/Editeur/jdcdisplay.py b/Editeur/jdcdisplay.py index 8ac5a82f..51ee9d4c 100644 --- a/Editeur/jdcdisplay.py +++ b/Editeur/jdcdisplay.py @@ -109,13 +109,13 @@ class JDCDISPLAY: # On a une chaine avec & en tete => on cree un radiobouton try: command=getattr(node.item,method[1:]) - menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command:c(a)) + menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) if radio == None:radio=number_item except:pass else: try: command=getattr(node.item,method) - menu.add_command(label=label,command=lambda a=self.appli,c=command:c(a)) + menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) except:pass # Si au moins un radiobouton existe on invoke le premier if radio:menu.invoke(radio) diff --git a/Editeur/macrodisplay.py b/Editeur/macrodisplay.py index 563b307f..58a72da4 100644 --- a/Editeur/macrodisplay.py +++ b/Editeur/macrodisplay.py @@ -132,13 +132,13 @@ class MacroDisplay: # On a une chaine avec & en tete => on cree un radiobouton try: command=getattr(node.item,method[1:]) - menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command:c(a)) + menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) if radio == None:radio=number_item except:pass else: try: command=getattr(node.item,method) - menu.add_command(label=label,command=lambda a=self.appli,c=command:c(a)) + menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) except:pass # Si au moins un radiobouton existe on invoke le premier if radio:menu.invoke(radio) diff --git a/Editeur/panels.py b/Editeur/panels.py index 7700a2ac..8626adec 100644 --- a/Editeur/panels.py +++ b/Editeur/panels.py @@ -480,7 +480,9 @@ class OngletPanel(Panel) : return jdc.get_groups() def get_liste_cmd(self): + print "get_liste_cmd",self.node.item.object jdc=self.node.item.object.get_jdc_root() + print jdc listeCmd = jdc.get_liste_cmd() return listeCmd diff --git a/Editeur/readercata.py b/Editeur/readercata.py index e9badcaf..5b72e6b3 100644 --- a/Editeur/readercata.py +++ b/Editeur/readercata.py @@ -80,6 +80,11 @@ class READERCATA: if catalogue[0] == self.code : liste_cata_possibles.append(catalogue) + if len(liste_cata_possibles)==0: + showerror("Import du catalogue","Pas de catalogue defini pour le code %s" % self.code) + self.appli.quit() + sys.exit(1) + if self.version_code is not None: # La version a ete fixee for cata in liste_cata_possibles: @@ -97,6 +102,7 @@ class READERCATA: self.ask_choix_catalogue() if self.fic_cata == None : + print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code) sys.exit(0) # détermination de fic_cata_c et fic_cata_p @@ -297,7 +303,8 @@ class READERCATA: # test si plusieurs catalogues ou non if len(liste_choix) == 0: showerror("Aucun catalogue déclaré pour %s" %self.code) - self.quit() + self.appli.quit() + sys.exit(1) elif len(liste_choix) == 1: self.fic_cata = self.dico_catalogues[liste_choix[0]][2] self.version_code = liste_choix[0] diff --git a/Editeur/session.py b/Editeur/session.py index 834ee410..e503352c 100644 --- a/Editeur/session.py +++ b/Editeur/session.py @@ -46,6 +46,7 @@ except: import os,traceback import ConfigParser +import prefs # Les valeurs decodees par optparse sont mises dans un objet dictionnaire-like. # On l'utilise comme environnement de session. @@ -207,9 +208,11 @@ def create_parser(): parser.add_option("-j","--jdc",dest="comm",type='string', action="callback",callback=check_comm, help="nom du fichier de commandes") + parser.add_option("-p","--poursuite", type="string",dest="pours", action="callback", callback=check_poursuite, help="nom du fichier poursuite") + parser.add_option("-i","--include", action="callback", callback=check_include, nargs=2, help="numero d'unite suivi du nom du fichier include") @@ -221,6 +224,9 @@ def create_parser(): parser.add_option("-c","--cata", action="store", type="string",dest="cata", help="version de catalogue a utiliser") + parser.add_option("-k","--kode", action="store", type="string",dest="code", + help="nom du code a utiliser",default=prefs.code) + parser.add_option("-d","--debug", action="store", type="int",dest="debug", help="niveau de debug") diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index 4f3c092e..0a9fe3f8 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -66,10 +66,11 @@ class ETAPE(I_MCCOMPO.MCCOMPO): Met l'état de l'étape à : modifié Propage la modification au parent """ - # Une action - # doit etre realisée apres init_modif et la validite reevaluée - # apres cette action. L'état modified de tous les objets doit etre - # preservé. + # init_modif doit etre appelé avant de réaliser une modification + # La validité devra etre recalculée apres cette modification + # mais dans l'appel à fin_modif pour préserver l'état modified + # de tous les objets entre temps + print "init_modif",self,self.parent self.state = 'modified' if self.parent: self.parent.init_modif() @@ -80,6 +81,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): déclencher d'éventuels traitements post-modification ex : INCLUDE et POURSUITE """ + print "fin_modif",self,self.parent if self.isvalid() : d=self.parent.get_contexte_apres(self) if self.parent: @@ -114,6 +116,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): self.sd = self.reuse = self.jdc.get_sd_avant_etape(nom,self) if self.sd != None : self.sdnom=self.sd.nom + self.fin_modif() return 1,"Concept existant" else: return 0,"Opérateur réentrant mais concept non existant" @@ -128,6 +131,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): if isinstance(sd,self.get_type_produit()) : self.sd = self.reuse = sd self.sdnom = sd.nom + self.fin_modif() return 1,"Opérateur facultativement réentrant et concept existant trouvé" else: return 0,"Concept déjà existant et de mauvais type" @@ -159,6 +163,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): # Il suffit de changer son attribut nom pour le nommer self.sd.nom = nom self.sdnom=nom + self.fin_modif() return 1,"Nommage du concept effectué" except: return 0,"Nommage impossible"+str(sys.exc_info()[1]) @@ -173,6 +178,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): else: self.sd.nom=nom self.sdnom=nom + self.fin_modif() return 1,"Nommage du concept effectué" if self.isvalid() : # Normalement l appel de isvalid a mis a jour le concept produit (son type) @@ -183,6 +189,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): else: self.sd.nom=nom self.sdnom=nom + self.fin_modif() return 1,"Nommage du concept effectué" else: # Normalement on ne devrait pas passer ici diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index 13ef7f64..53e30030 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -100,6 +100,7 @@ class JDC(I_OBJECT.OBJECT): self.etapes.insert(pos,objet) self.editmode=0 self.active_etapes() + self.fin_modif() return objet elif name == "PARAMETRE": # ajout d'un parametre @@ -111,6 +112,7 @@ class JDC(I_OBJECT.OBJECT): self.editmode=0 self.reset_context() self.active_etapes() + self.fin_modif() return objet elif name == "PARAMETRE_EVAL": # ajout d'un parametre EVAL @@ -122,6 +124,7 @@ class JDC(I_OBJECT.OBJECT): self.editmode=0 self.reset_context() self.active_etapes() + self.fin_modif() return objet elif type(name)==types.InstanceType: # on est dans le cas où on veut ajouter une commande déjà @@ -147,6 +150,8 @@ class JDC(I_OBJECT.OBJECT): self.active_etapes() self.editmode=0 self.reset_context() + print "addentite",self.etapes + self.fin_modif() return objet else : # On veut ajouter une nouvelle commande @@ -163,6 +168,8 @@ class JDC(I_OBJECT.OBJECT): self.editmode=0 self.reset_context() self.active_etapes() + print "addentite",self.etapes + self.fin_modif() return e except AsException,e: self.reset_current_step() @@ -389,9 +396,11 @@ class JDC(I_OBJECT.OBJECT): Méthode appelée au moment où une modification va être faite afin de déclencher d'éventuels traitements pré-modification """ + print "init_modif",self self.state = 'modified' def fin_modif(self): + print "fin_modif",self self.isvalid() pass diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index 26dd673a..9be1ca6f 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -63,7 +63,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): ou leve une exception --> utilisée par ops.POURSUITE et INCLUDE """ - #print "get_contexte_jdc" + print "get_contexte_jdc" try: # on essaie de créer un objet JDC auxiliaire avec un contexte initial context_ini = self.parent.get_contexte_avant(self) @@ -97,6 +97,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): j.analyse() # On récupère les étapes internes (pour validation) self.etapes=j.etapes + self.jdc_aux=j + print "get_contexte_jdc",id(self.etapes) except: traceback.print_exc() # On force le contexte (etape courante) à self @@ -258,7 +260,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): Cette méthode sert à créer un contexte en interprétant un texte source Python """ - #print "make_contexte_include" + print "make_contexte_include" # on récupère le contexte d'un nouveau jdc dans lequel on interprete text contexte = self.get_contexte_jdc(fichier,text) if contexte == None : @@ -299,14 +301,16 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): les noms des fichiers Ceci suppose que les relations entre unites et noms ont été memorisees préalablement """ - #print "update_fichier_init",unite + print "update_fichier_init",unite self.fichier_err=None self.old_contexte_fichier_init=self.contexte_fichier_init + old_fichier_ini=self.fichier_ini + + print "update_fichier_init",self,self.parent,self.parent.recorded_units - #print self,self.parent,self.parent.recorded_units #if unite != self.fichier_unite or not self.parent.recorded_units.has_key(unite): if not self.parent.recorded_units.has_key(unite): - # Changement d'unite ou Nouvelle unite + # Nouvelle unite f,text=self.get_file(unite=unite,fic_origine=self.parent.nom) units={} if f is not None: @@ -317,7 +321,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus", message="Ce fichier ne sera pas pris en compte\n"+"Le fichier associé n'est pas défini") else: - # Meme unite existante + # Unite existante f,text,units=self.parent.recorded_units[unite] self.fichier_ini = f self.fichier_text=text @@ -333,6 +337,10 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.reevalue_sd_jdc() return + if old_fichier_ini == self.fichier_ini: + # Le fichier inclus n'a pas changé. On ne recrée pas le contexte + return + try: self.make_contexte_include(self.fichier_ini,self.fichier_text) # Les 3 attributs fichier_ini fichier_text recorded_units doivent etre corrects @@ -413,7 +421,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): 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 "make_include",unite + print "make_include",unite # 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 del self.unite @@ -429,7 +437,11 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.contexte_fichier_init={} self.fichier_unite=unite self.fichier_err=None - import Extensions.jdc_include + try: + import Extensions.jdc_include + except: + traceback.print_exc() + raise self.JdC_aux=Extensions.jdc_include.JdC_include if f is None: @@ -476,7 +488,11 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.fichier_err=None self.contexte_fichier_init={} # On specifie la classe a utiliser pour le JDC auxiliaire - import Extensions.jdc_include + try: + import Extensions.jdc_include + except: + traceback.print_exc() + raise self.JdC_aux=Extensions.jdc_include.JdC_include try: self.make_contexte_include(self.fichier_ini ,self.fichier_text) @@ -537,7 +553,11 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.fichier_unite = None self.fichier_text = text self.fichier_err=None - import Extensions.jdc_include + try: + import Extensions.jdc_include + except: + traceback.print_exc() + raise self.JdC_aux=Extensions.jdc_include.JdC_poursuite self.contexte_fichier_init={} -- 2.39.2