From 85461fc1b92e62bacc43550c2dd5d4f9ab4a7099 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Wed, 1 Jun 2005 15:18:17 +0000 Subject: [PATCH] CCAR: corrections diverses dans le cas d'insertion d'un include avec concepts de nom existant mise a jour du numero de version et du numero de version d'Aster suppression des blocages avec eficas_test.py en cas d'erreur petites corrections dans apparition des fenetres (withdraw/deiconify) ajout de tests pour edition d'includes emboites et de poursuites enchainees (j2.ini et fichiers associes) fermeture des fichiers include et poursuite dependant en cas de demande de fermeture ou de destruction par l'utilisateur mise a niveau Aster 8.0.23 vieilles methodes marquees _BAK et OBSOLETE --- Accas/A_MACRO_ETAPE.py | 2 + Aster/Tests/d0.comm | 6 ++ Aster/Tests/incl.11 | 2 + Aster/Tests/incl.16 | 1 + Aster/Tests/incl.17 | 15 +++ Aster/Tests/incl.25 | 1 + Aster/Tests/j2.ini | 20 ++++ Aster/Tests/p1.comm | 9 +- Aster/Tests/p2.comm | 9 +- Aster/Tests/p3.comm | 12 +-- Aster/Tests/pincl.11 | 1 + Aster/Tests/qincl.11 | 1 + Aster/Tests/rincl.11 | 1 + Aster/properties.py | 7 +- Editeur/Objecttreeitem.py | 1 + Editeur/appli.py | 7 +- Editeur/bureau.py | 48 +++++++++- Editeur/compofact.py | 3 + Editeur/compojdc.py | 2 + Editeur/compomacro.py | 40 ++++++-- Editeur/componiveau.py | 2 + Editeur/compooper.py | 6 +- Editeur/composimp.py | 2 + Editeur/eficas.py | 1 + Editeur/fenetre_mc_inconnus.py | 2 + Editeur/macrodisplay.py | 4 - Editeur/panels.py | 10 +- Editeur/splash.py | 3 +- Editeur/treewidget.py | 4 +- Editeur/uniquebasepanel.py | 6 +- Editeur/uniquepanel.py | 11 +-- Editeur/widgets.py | 3 + Extensions/commande_comm.py | 2 + Extensions/commentaire.py | 3 + Extensions/jdc_include.py | 15 ++- Extensions/parametre.py | 3 + Ihm/I_ETAPE.py | 3 + Ihm/I_JDC.py | 24 ++++- Ihm/I_MACRO_ETAPE.py | 165 ++++++++------------------------- Ihm/I_PROC_ETAPE.py | 7 ++ Noyau/N_FONCTION.py | 6 +- Noyau/N_MACRO_ETAPE.py | 7 +- Validation/V_MCSIMP.py | 2 +- 43 files changed, 282 insertions(+), 197 deletions(-) create mode 100644 Aster/Tests/d0.comm create mode 100644 Aster/Tests/incl.16 create mode 100644 Aster/Tests/incl.17 create mode 100644 Aster/Tests/incl.25 create mode 100644 Aster/Tests/j2.ini create mode 100644 Aster/Tests/pincl.11 create mode 100644 Aster/Tests/qincl.11 create mode 100644 Aster/Tests/rincl.11 diff --git a/Accas/A_MACRO_ETAPE.py b/Accas/A_MACRO_ETAPE.py index 63734135..f3f9b7b9 100644 --- a/Accas/A_MACRO_ETAPE.py +++ b/Accas/A_MACRO_ETAPE.py @@ -21,10 +21,12 @@ from Noyau import N_MACRO_ETAPE from Validation import V_MACRO_ETAPE from Ihm import I_MACRO_ETAPE +from A_ASSD import CO class MACRO_ETAPE(I_MACRO_ETAPE.MACRO_ETAPE, V_MACRO_ETAPE.MACRO_ETAPE, N_MACRO_ETAPE.MACRO_ETAPE): + typeCO=CO def __init__(self,oper=None,reuse=None,args={}): N_MACRO_ETAPE.MACRO_ETAPE.__init__(self,oper,reuse,args) V_MACRO_ETAPE.MACRO_ETAPE.__init__(self) diff --git a/Aster/Tests/d0.comm b/Aster/Tests/d0.comm new file mode 100644 index 00000000..726e2840 --- /dev/null +++ b/Aster/Tests/d0.comm @@ -0,0 +1,6 @@ +DEBUT() +print "***********************************" +print "*********COUCOU1*******************" +print "***********************************" +INCLUDE(UNITE=11) +FIN() diff --git a/Aster/Tests/incl.11 b/Aster/Tests/incl.11 index 2e89f000..4d2f5fdc 100644 --- a/Aster/Tests/incl.11 +++ b/Aster/Tests/incl.11 @@ -1 +1,3 @@ MA=LIRE_MAILLAGE() + + diff --git a/Aster/Tests/incl.16 b/Aster/Tests/incl.16 new file mode 100644 index 00000000..79db1b98 --- /dev/null +++ b/Aster/Tests/incl.16 @@ -0,0 +1 @@ +mm=LIRE_MAILLAGE() diff --git a/Aster/Tests/incl.17 b/Aster/Tests/incl.17 new file mode 100644 index 00000000..d3ec5d6d --- /dev/null +++ b/Aster/Tests/incl.17 @@ -0,0 +1,15 @@ +MMA=LIRE_MAILLAGE() + +mo=AFFE_MODELE(MAILLAGE=MMA, + AFFE=_F(TOUT='OUI', + PHENOMENE='MECANIQUE', + MODELISATION='3D',),); + +MACRO_MATR_ASSE(MODELE=mo, + NUME_DDL=CO('numdl'), + MATR_ASSE=_F(MATRICE=CO('mm'), + OPTION='RIGI_MECA',),); + +mm=FACT_LDLT(reuse =mm, + MATR_ASSE=mm,); + diff --git a/Aster/Tests/incl.25 b/Aster/Tests/incl.25 new file mode 100644 index 00000000..2e89f000 --- /dev/null +++ b/Aster/Tests/incl.25 @@ -0,0 +1 @@ +MA=LIRE_MAILLAGE() diff --git a/Aster/Tests/j2.ini b/Aster/Tests/j2.ini new file mode 100644 index 00000000..f0dd6ce1 --- /dev/null +++ b/Aster/Tests/j2.ini @@ -0,0 +1,20 @@ +[jdc] +jdc=a +[a] +comm=p3.comm +poursuite=b +11=incl.11 +17=incl.17 +16=incl.16 +25=incl.25 +[b] +comm=p2.comm +poursuite=c +11=pincl.11 +[c] +comm=p1.comm +poursuite=d +11=qincl.11 +[d] +comm=d0.comm +11=rincl.11 diff --git a/Aster/Tests/p1.comm b/Aster/Tests/p1.comm index 267482c7..7f15f690 100644 --- a/Aster/Tests/p1.comm +++ b/Aster/Tests/p1.comm @@ -1,7 +1,6 @@ POURSUITE() -#import traceback -#traceback.print_stack() -print "==================================" -print "coucou1" -print "==================================" +print "+++++++++++++++++++++++++++++++++++" +print "+++++++++COUCOU3+++++++++++++++++++" +print "+++++++++++++++++++++++++++++++++++" +INCLUDE(UNITE=11) FIN() diff --git a/Aster/Tests/p2.comm b/Aster/Tests/p2.comm index d345a4c2..7f15f690 100644 --- a/Aster/Tests/p2.comm +++ b/Aster/Tests/p2.comm @@ -1,7 +1,6 @@ POURSUITE() -#import traceback -#traceback.print_stack() -print "==================================" -print "coucou2" -print "==================================" +print "+++++++++++++++++++++++++++++++++++" +print "+++++++++COUCOU3+++++++++++++++++++" +print "+++++++++++++++++++++++++++++++++++" +INCLUDE(UNITE=11) FIN() diff --git a/Aster/Tests/p3.comm b/Aster/Tests/p3.comm index 86c7ce24..40ec7776 100644 --- a/Aster/Tests/p3.comm +++ b/Aster/Tests/p3.comm @@ -1,7 +1,7 @@ -DEBUT() -#import traceback -#traceback.print_stack() -print "==================================" -print "coucou3" -print "==================================" +POURSUITE() +print "+++++++++++++++++++++++++++++++++++" +print "+++++++++COUCOU4+++++++++++++++++++" +print "+++++++++++++++++++++++++++++++++++" +INCLUDE(UNITE=17) +INCLUDE(UNITE=11) FIN() diff --git a/Aster/Tests/pincl.11 b/Aster/Tests/pincl.11 new file mode 100644 index 00000000..b1bd46d9 --- /dev/null +++ b/Aster/Tests/pincl.11 @@ -0,0 +1 @@ +MAA=LIRE_MAILLAGE() diff --git a/Aster/Tests/qincl.11 b/Aster/Tests/qincl.11 new file mode 100644 index 00000000..c7101a0d --- /dev/null +++ b/Aster/Tests/qincl.11 @@ -0,0 +1 @@ +MAAA=LIRE_MAILLAGE() diff --git a/Aster/Tests/rincl.11 b/Aster/Tests/rincl.11 new file mode 100644 index 00000000..c0277244 --- /dev/null +++ b/Aster/Tests/rincl.11 @@ -0,0 +1 @@ +MAAAA=LIRE_MAILLAGE() diff --git a/Aster/properties.py b/Aster/properties.py index 5348761d..302cea10 100644 --- a/Aster/properties.py +++ b/Aster/properties.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -#@ MODIF properties Accas DATE 10/10/2002 AUTEUR gcbhhhh M.ADMINISTRATEUR +#@ MODIF properties Accas DATE 01/06/2005 AUTEUR gcbhhhh M.ADMINISTRATEUR # CONFIGURATION MANAGEMENT OF EDF VERSION # RESPONSABLE D6BHHHH J-P.LEFEBVRE # ====================================================================== @@ -21,5 +20,5 @@ # IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR # DE LA VERSION DU CODE_ASTER ASSOCIE #---------------------------------------------------------------------- -version = "7.4.0" -date = "22/11/2004" +version = "8.0.23" +date = "01/06/2005" diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index 3b928c6d..70b404f8 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -484,6 +484,7 @@ class SequenceTreeItem(ObjectTreeItem): return self.sublist def GetSubList_BAK(self): + raise "OBSOLETE" sublist = [] for obj in self._object.data: def setfunction(value, object=obj): diff --git a/Editeur/appli.py b/Editeur/appli.py index 5787d6fb..9478e5bc 100644 --- a/Editeur/appli.py +++ b/Editeur/appli.py @@ -44,7 +44,7 @@ from widgets import Fenetre from Misc import MakeNomComplet import session -VERSION="EFICAS v1.7" +VERSION="EFICAS v1.8" class APPLI: def __init__ (self,master,code=prefs.code,fichier=None,test=0) : @@ -81,17 +81,20 @@ class APPLI: # PN : ajout d un attribut pour indiquer si # l appli a ete lance depuis Salome self.salome=0 + + # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test if (self.test == 0): splash.fini_splash() #self.affiche_FAQ() - cwd=os.getcwd() # Ouverture des fichiers de commandes donnes sur la ligne de commande + cwd=os.getcwd() for study in session.d_env.studies: os.chdir(cwd) d=session.get_unit(study,self) self.bureau.openJDC(study["comm"],d) + def send_message(self,message): self.message=message diff --git a/Editeur/bureau.py b/Editeur/bureau.py index c0776c07..b7e20949 100644 --- a/Editeur/bureau.py +++ b/Editeur/bureau.py @@ -38,6 +38,7 @@ from jdcdisplay import JDCDISPLAY from utils import extension_fichier,stripPath,save_in_file from widgets import Fenetre,Ask_Format_Fichier from fenetre_mc_inconnus import fenetre_mc_inconnus +from Ihm import CONNECTOR import comploader @@ -135,6 +136,7 @@ class BUREAU: self.JDC = self.JDCDisplay_courant.jdc #self.JDC.set_context() self.JDCName = self.JDC.nom + #print "selectJDC",numero_jdc,self.JDCDisplay_courant,self.JDCName def newJDC(self,event=None): """ @@ -176,14 +178,48 @@ class BUREAU: self.nb.selectpage(label_onglet) self.nb.setnaturalsize() texte = "Jeu de commandes :" + self.JDCName+" ouvert" + CONNECTOR.Connect(JDC,"close",self.onClose,(self.JDCDisplay_courant,)) self.appli.affiche_infos(texte) + def onClose(self,jdcdisplay): + #print "onClose",jdcdisplay + CONNECTOR.Disconnect(jdcdisplay.jdc,"close",self.onClose,(jdcdisplay,)) + self.closeJDCDISPLAY(jdcdisplay) + + def closeJDCDISPLAY(self,jdc): + """ + Ferme le jdcdisplay spécifié par l'argument jdc + """ + if jdc is self.JDCDisplay_courant: + # on ferme le jdcdisplay courant + self.closeSelectedJDC() + else: + # on ferme un autre jdcdisplay que le courant + old_JDCDisplay=self.JDCDisplay_courant + old_page=self.nb.getcurselection() + + self.JDCDisplay_courant=jdc + self.JDC=jdc.jdc + numero_jdc=self.liste_JDCDisplay.index(jdc) + self.nb.selectpage(numero_jdc) + #print numero_jdc + + self.closeSelectedJDC() + self.JDCDisplay_courant=old_JDCDisplay + self.JDC=old_JDCDisplay.jdc + self.nb.selectpage(old_page) + def closeJDC (self,event=None) : + """ + Ferme le JDC associé au JDCDISPLAY selectionné + """ + if self.JDCDisplay_courant : + self.JDCDisplay_courant.jdc.close() + + def closeSelectedJDC (self) : """ Ferme le JDC courant et détruit l'onglet associé dans le notebook self.nb """ - if self.JDCDisplay_courant == None: - return if self.JDCDisplay_courant.modified == 'o' : message = "Voulez-vous sauvegarder le jeu de commandes "+self.JDC.nom+" courant ?" reponse = askyesno(title="Sauvegarde du jdc courant", @@ -302,8 +338,10 @@ class BUREAU: if txt_exception : # des exceptions ont été levées à la création du JDC # --> on affiche les erreurs mais pas le JDC + self.JDC=J self.appli.affiche_infos("Erreur fatale au chargement de %s" %file) - showerror("Erreur fatale au chargement d'un fichier",txt_exception) + if self.appli.test == 0 : + showerror("Erreur fatale au chargement d'un fichier",txt_exception) else: self.ShowJDC(J,self.JDCName) self.appli.toolbar.active_boutons() @@ -505,8 +543,7 @@ class BUREAU: Lance la suppression du noeud courant """ if not self.JDCDisplay_courant : return - if self.JDCDisplay_courant.modified == 'n' : - self.JDCDisplay_courant.init_modif() + self.JDCDisplay_courant.init_modif() self.JDCDisplay_courant.node_selected.delete() def visuJDC_py(self,event=None): @@ -615,6 +652,7 @@ class BUREAU: """ test = 1 for JDCDisplay in liste : + self.JDCDisplay_courant=JDCDisplay self.JDC = JDCDisplay.jdc test = test * self.saveJDC(echo = 'non') return test diff --git a/Editeur/compofact.py b/Editeur/compofact.py index e58be4cf..d3802f3e 100644 --- a/Editeur/compofact.py +++ b/Editeur/compofact.py @@ -146,6 +146,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem): return 0 def GetSubList_BAK(self): + raise "OBSOLETE" sublist=[] for obj in self.object.mc_liste: def setfunction(value, object=obj): @@ -155,6 +156,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem): return sublist def additem_BAK(self,name,pos): + raise "OBSOLETE" if isinstance(name,Objecttreeitem.ObjectTreeItem) : objet = self.object.addentite(name.getObject(),pos) else : @@ -169,6 +171,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem): return item def verif_condition_bloc_BAK(self): + raise "OBSOLETE" return self.object.verif_condition_bloc() import Accas diff --git a/Editeur/compojdc.py b/Editeur/compojdc.py index 93b2f6c7..bf2f38cf 100644 --- a/Editeur/compojdc.py +++ b/Editeur/compojdc.py @@ -170,11 +170,13 @@ class JDCTreeItem(Objecttreeitem.ObjectTreeItem): return listeCmd def additem_BAK(self,name,pos): + raise "OBSOLETE" cmd=self.addentite(name,pos) item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd) return item def verif_condition_bloc_BAK(self): + raise "OBSOLETE" # retourne la liste des sous-items dont la condition est valide # sans objet pour le JDC return [],[] diff --git a/Editeur/compomacro.py b/Editeur/compomacro.py index e2e5776f..5ec18f1f 100644 --- a/Editeur/compomacro.py +++ b/Editeur/compomacro.py @@ -34,10 +34,11 @@ import convert from widgets import askopenfilename from widgets import Fenetre,FenetreYesNo from widgets import showinfo,showerror +from Ihm import CONNECTOR # __version__="$Name: $" -__Id__="$Id: compomacro.py,v 1.19 2005/05/19 12:18:47 eficas Exp $" +__Id__="$Id: compomacro.py,v 1.20 2005/05/24 10:34:16 eficas Exp $" # class MACROPanel(panels.OngletPanel): @@ -77,13 +78,21 @@ class MACROPanel(panels.OngletPanel): dont a besoin la macro """ titre = Tkinter.Label(page,text="La commande %s requiert un fichier " %self.node.item.get_nom()) - titre.place(relx=0.5,rely=0.3,anchor='center') - Tkinter.Label(page,text="Fichier :").place(relx=0.1,rely=0.5,relwidth=0.2) - self.entry = Tkinter.Entry(page,relief='sunken',bg='white') - self.entry.place(relx=0.35,rely=0.5,relwidth=0.55) - Tkinter.Button(page,text='Valider',command = self.change_fichier_init).place(relx=0.3,rely=0.8) - Tkinter.Button(page,text='Browse',command = self.browse_fichier_init).place(relx=0.5,rely=0.8) - Tkinter.Button(page,text='Annuler',command = self.annule_fichier_init).place(relx=0.7,rely=0.8) + titre.place(relx=0.5,rely=0.2,anchor='center') + frameMain=Tkinter.Frame(page) + frameMain.place(relx=0.5,rely=0.4,anchor='center',relwidth=1.) + Tkinter.Label(frameMain,text="Fichier :").pack(side='left',padx=5) + self.entry = Tkinter.Entry(frameMain,relief='sunken',bg='white') + self.entry.pack(side='left',padx=5,fill='x',expand=1) + frameButtons=Tkinter.Frame(page) + but1=Tkinter.Button(frameButtons,text='Valider',command = self.change_fichier_init) + but2=Tkinter.Button(frameButtons,text='Browse',command = self.browse_fichier_init) + but3=Tkinter.Button(frameButtons,text='Annuler',command = self.annule_fichier_init) + but1.grid(row=0,column=0,padx=5,pady=5) + but2.grid(row=0,column=1,padx=5,pady=5) + but3.grid(row=0,column=2,padx=5,pady=5) + frameButtons.place(relx=0.5,rely=0.6,anchor='center') + if hasattr(self.node.item.object,'fichier_ini'): if self.node.item.object.fichier_ini : self.entry.insert(0,self.node.item.object.fichier_ini) @@ -192,6 +201,9 @@ class INCLUDETreeItemBase(MACROTreeItem): #print "makeEdit",self.object,self.object.nom #print "makeEdit",self.object.jdc_aux,self.object.jdc_aux.nom #print "makeEdit",self.object.jdc_aux.context_ini + if self.object.jdc_aux is None: + showerror("Include vide","L'include doit etre correctement initialisé avant d'etre édité") + return self.parent_node=node # On cree un nouvel onglet dans le bureau appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom, @@ -200,7 +212,14 @@ class INCLUDETreeItemBase(MACROTreeItem): self.myjdc=appli.bureau.JDCDisplay_courant self.myjdc.fichier=self.object.fichier_ini + def onClose(self): + #print "onClose",self + self.appli.bureau.closeJDCDISPLAY(self.myjdc) + def makeView(self,appli,node): + if self.object.jdc_aux is None: + showerror("Include vide","L'include doit etre correctement initialisé avant d'etre édité") + return nom=self.object.nom if hasattr(self.object,'fichier_ini'): if self.object.fichier_ini is None: @@ -208,6 +227,11 @@ class INCLUDETreeItemBase(MACROTreeItem): else: nom=nom+' '+self.object.fichier_ini macdisp=macrodisplay.makeMacroDisplay(appli,self,nom) + CONNECTOR.Connect(self.object.jdc_aux,"close",self.onCloseView,(macdisp,)) + + def onCloseView(self,macdisp): + #print "onCloseView",self,macdisp + macdisp.quit() class INCLUDEPanel(MACROPanel): def makeFichierPage(self,page): diff --git a/Editeur/componiveau.py b/Editeur/componiveau.py index e0414dee..918e0322 100644 --- a/Editeur/componiveau.py +++ b/Editeur/componiveau.py @@ -48,10 +48,12 @@ class Node(treewidget.Node): on crée ou supprime les noeuds concernés (self est d'un niveau inférieur ou égal à l'ETAPE) """ + raise "OBSOLETE" return 0 def replace_enfant_BAK(self,item): """ Retourne le noeud fils à éventuellement remplacer """ + raise "OBSOLETE" return None diff --git a/Editeur/compooper.py b/Editeur/compooper.py index 76045f6f..4dfeff12 100644 --- a/Editeur/compooper.py +++ b/Editeur/compooper.py @@ -246,6 +246,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): return self.sublist def GetSubList_BAK(self): + raise "OBSOLETE" if self.isactif(): liste=self.object.mc_liste else: @@ -328,6 +329,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): return commande_comment def additem_BAK(self,name,pos): + raise "OBSOLETE" mcent=self.addentite(name,pos) self.expandable=1 @@ -340,6 +342,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): return item def GetSubList_BAK(self): + raise "OBSOLETE" sublist=[] for obj in self.object.mc_liste: def setfunction(value, object=obj): @@ -349,9 +352,10 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): return sublist def verif_condition_bloc_BAK(self): + raise "OBSOLETE" return self.object.verif_condition_bloc() - def replace_child(self,old_item,new_item): + def replace_child_BAK(self,old_item,new_item): """ Remplace old_item.getObject() par new_item.getObject() dans les fils de self.object diff --git a/Editeur/composimp.py b/Editeur/composimp.py index 0e88f5fb..5a0260c1 100644 --- a/Editeur/composimp.py +++ b/Editeur/composimp.py @@ -330,6 +330,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): return self.object.valid_valeur_partielle(valeur) def valide_liste_partielle_BAK(self,item,listecourante): + raise "OBSOLETE" valeuravant=self.object.valeur valeur=listecourante valeur.append(item) @@ -352,6 +353,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): return self.object.valid_valeur(valeur) def valide_liste_complete_BAK (self,valeur): + raise "OBSOLETE" valeuravant=self.object.valeur retour=self.object.set_valeur(valeur) validite=0 diff --git a/Editeur/eficas.py b/Editeur/eficas.py index 2845e036..463ac547 100644 --- a/Editeur/eficas.py +++ b/Editeur/eficas.py @@ -95,6 +95,7 @@ class EFICAS(appli.APPLI): else: texte="Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE') texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite' + if self.test == 1: raise Exception("Erreur: "+texte) w = Label(self.dialog.interior(), text = texte) w.pack(padx = 10, pady = 10) diff --git a/Editeur/fenetre_mc_inconnus.py b/Editeur/fenetre_mc_inconnus.py index 18d3078b..ccf11af8 100644 --- a/Editeur/fenetre_mc_inconnus.py +++ b/Editeur/fenetre_mc_inconnus.py @@ -36,6 +36,7 @@ class fenetre_mc_inconnus : def __init__(self,l_mc): self.l_mc = l_mc self.fenetre = Toplevel() + self.fenetre.withdraw() self.fenetre.geometry("400x400+0+0") self.fenetre.title("Mots-clés inconnus dans le fichier de commandes") self.init() @@ -44,6 +45,7 @@ class fenetre_mc_inconnus : self.init_liste_mc() self.init_boutons() centerwindow(self.fenetre) + self.fenetre.deiconify() def init(self) : """ diff --git a/Editeur/macrodisplay.py b/Editeur/macrodisplay.py index 971dd10c..af5671e9 100644 --- a/Editeur/macrodisplay.py +++ b/Editeur/macrodisplay.py @@ -108,10 +108,6 @@ class MacroDisplay: if radio:menu.invoke(radio) def quit(self): - try: - self.macroitem.views.remove(self) - except: - pass self.fenetre.destroy() def makeMacroDisplay(appli,macroitem,nom_item): diff --git a/Editeur/panels.py b/Editeur/panels.py index b6a97e9f..2540516f 100644 --- a/Editeur/panels.py +++ b/Editeur/panels.py @@ -109,8 +109,8 @@ class Panel(Frame) : self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='center') self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='center') else: - self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='center') - self.bouton_doc.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='center') + self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='center') + self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='center') def show_catalogue(self): try: @@ -202,7 +202,7 @@ class Panel(Frame) : Suppression du noeud courant """ # On signale au parent du panel (le JDCDisplay) une modification - if self.parent.modified == 'n' : self.parent.init_modif() + self.parent.init_modif() self.node.delete() def affiche(self): @@ -482,6 +482,7 @@ class OngletPanel(Panel) : self.parent.appli.affiche_infos('') def get_liste_cmd_BAK(self): + raise "OBSOLETE" listeCmd = self.cata.listCmd() return listeCmd @@ -526,8 +527,9 @@ class OngletPanel(Panel) : try : pos=self.node.parent.children.index(self.node) commande_comment = self.node.item.get_objet_commentarise() + # On signale au parent du panel (le JDCDisplay) une modification + self.parent.init_modif() self.node.parent.children[pos].select() - #self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande_comment,None) except Exception,e: traceback.print_exc() widgets.showerror("TOO BAD",str(e)) diff --git a/Editeur/splash.py b/Editeur/splash.py index 4e34848f..2918ddfe 100644 --- a/Editeur/splash.py +++ b/Editeur/splash.py @@ -145,7 +145,6 @@ class SplashScreen(Toplevel): self.progress = None self.destroy() if self.main: - self.main.update() - self.main.deiconify() centerwindow(self.main,parent='sans') + self.main.deiconify() diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py index 9a26db03..9664ad89 100644 --- a/Editeur/treewidget.py +++ b/Editeur/treewidget.py @@ -28,7 +28,7 @@ from Ihm import CONNECTOR # __version__="$Name: $" -__Id__="$Id: treewidget.py,v 1.20 2005/04/13 14:59:31 eficas Exp $" +__Id__="$Id: treewidget.py,v 1.21 2005/05/19 12:18:48 eficas Exp $" # Fonte_Standard = fontes.standard @@ -998,6 +998,7 @@ class Node : def delete_node_child_BAK(self,child): """ Supprime child des enfants de self et les id associés """ + raise "OBSOLETE" child.efface() self.children.remove(child) self.canvas.update() @@ -1007,6 +1008,7 @@ class Node : Supprime child des enfants de self, tous les id associés ET l'objet associé """ + raise "OBSOLETE" if self.item.suppitem(child.item): self.delete_node_child(child) return 1 diff --git a/Editeur/uniquebasepanel.py b/Editeur/uniquebasepanel.py index ddb53906..7fc8f7ea 100644 --- a/Editeur/uniquebasepanel.py +++ b/Editeur/uniquebasepanel.py @@ -128,7 +128,11 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel): Affiche la valeur de l'objet pointé par self """ valeur = self.node.item.get_valeur() - if valeur == None or valeur == '' : return # pas de valeur à afficher ... + if valeur == None or valeur == '' : # pas de valeur à afficher ... + self.entry.delete(0,END) + self.entry.focus() + return + valeur_texte=self.get_valeur_texte(valeur) if valeur_texte != "": valeur=valeur_texte diff --git a/Editeur/uniquepanel.py b/Editeur/uniquepanel.py index bb3f7a66..82634a45 100644 --- a/Editeur/uniquepanel.py +++ b/Editeur/uniquepanel.py @@ -68,10 +68,10 @@ class UNIQUE_Panel(newSIMPPanel): if self.parent.modified == 'n' : self.parent.init_modif() anc_val = self.node.item.get_valeur() valeurentree = self.get_valeur() - self.erase_valeur() valeur,validite=self.node.item.eval_valeur(valeurentree) if not validite : commentaire = "impossible d'évaluer : %s " %`valeurentree` + self.display_valeur() self.parent.appli.affiche_infos(commentaire) return @@ -84,16 +84,9 @@ class UNIQUE_Panel(newSIMPPanel): self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess) elif self.node.item.isvalid() : self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') - #if self.node.item.get_position()=='global': - #self.node.etape.verif_all() - #elif self.node.item.get_position()=='global_jdc': - #self.node.racine.verif_all() - #else : - #self.node.parent.verif() - #self.node.update() - #self.node.parent.select() else : cr = self.node.item.get_cr() mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() self.reset_old_valeur(anc_val,mess=mess) + self.display_valeur() diff --git a/Editeur/widgets.py b/Editeur/widgets.py index 43f3dfd6..d03678fa 100644 --- a/Editeur/widgets.py +++ b/Editeur/widgets.py @@ -57,6 +57,7 @@ class Fenetre : def __init__(self,appli,titre="",texte=""): self.appli=appli self.fenetre = Toplevel() + self.fenetre.withdraw() self.fenetre.configure(width = 800,height=500) self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) self.fenetre.title("Visualisation du "+titre) @@ -88,6 +89,7 @@ class Fenetre : # affichage du texte self.affiche_texte(self.texte) centerwindow(self.fenetre) + self.fenetre.deiconify() def page_up(self,event): event.widget.yview_scroll(-1, "page") @@ -883,6 +885,7 @@ class ListeChoix : #pass def get_liste_BAK(self): + raise "OBSOLETE" return self.liste # PN attention à la gestion des paramétres diff --git a/Extensions/commande_comm.py b/Extensions/commande_comm.py index 317bb6a3..f6343070 100644 --- a/Extensions/commande_comm.py +++ b/Extensions/commande_comm.py @@ -265,3 +265,5 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : def control_sdprods(self,d): """sans objet pour les commandes commentarisées""" pass + def close(self): + pass diff --git a/Extensions/commentaire.py b/Extensions/commentaire.py index a504800b..a94e190e 100644 --- a/Extensions/commentaire.py +++ b/Extensions/commentaire.py @@ -190,3 +190,6 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : """sans objet """ pass + def close(self): + pass + diff --git a/Extensions/jdc_include.py b/Extensions/jdc_include.py index 1e38f9f2..1f549274 100644 --- a/Extensions/jdc_include.py +++ b/Extensions/jdc_include.py @@ -86,6 +86,7 @@ class JDC_POURSUITE(JDC): self.g_context[sdnom]=sd def get_verif_contexte(self): + #print "get_verif_contexte" j_context=self.get_contexte_avant(None) self.verif_contexte(j_context) return j_context @@ -116,8 +117,9 @@ class JDC_POURSUITE(JDC): #print "verif_contexte" for nom_sd,sd in context.items(): if not isinstance(sd,ASSD):continue - if self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd, - etape=self.etape_include): + autre_sd= self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd, + etape=self.etape_include) + if sd and sd is not autre_sd: # Il existe un concept produit par une etape apres self # => impossible d'inserer raise Exception("Impossible d'inclure le fichier. Un concept de nom " + @@ -227,7 +229,14 @@ class JDC_POURSUITE(JDC): définie apres etape en tenant compte des concepts detruits Si avec vaut 'non' exclut etape de la recherche """ + #print "jdc_include.get_sd_apres_etape_avec_detruire",nom_sd,sd,id(sd) autre_sd=JDC.get_sd_apres_etape_avec_detruire(self,nom_sd,sd,etape,avec) + #print autre_sd,id(autre_sd) + # si autre_sd vaut None le concept sd a ete detruit. On peut terminer + # la recherche en retournant None + # Si autre_sd ne vaut pas sd, le concept a ete redefini. On peut terminer + # la recherche en retournant le concept nouvellement defini + # Sinon, on poursuit la recherche dans les etapes du niveau superieur. if autre_sd is None or autre_sd is not sd :return autre_sd return self.etape_include.parent.get_sd_apres_etape_avec_detruire(nom_sd,sd,self.etape_include,'non') @@ -263,8 +272,6 @@ class JDC_POURSUITE(JDC): # Nettoyage des etapes du parent self.etape_include.parent.replace_concept_after_etape(self.etape_include,old_sd,sd) - - class JDC_INCLUDE(JDC_POURSUITE): def active_etapes(self): for e in self.etapes: diff --git a/Extensions/parametre.py b/Extensions/parametre.py index 8f0e8fae..bb244fe6 100644 --- a/Extensions/parametre.py +++ b/Extensions/parametre.py @@ -437,6 +437,9 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : """sans objet """ pass + def close(self): + pass + class ITEM_PARAMETRE : diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index 4106b468..5713fde2 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -297,6 +297,9 @@ class ETAPE(I_MCCOMPO.MCCOMPO): self.parent.del_sdprod(self.sd) self.parent.delete_concept(self.sd) + def close(self): + return + def delete_concept(self,sd): """ Inputs : diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index 734ffde2..ead7ed13 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -196,6 +196,12 @@ class JDC(I_OBJECT.OBJECT): self.editmode=0 raise AsException("Impossible d ajouter la commande "+name) + def close(self): + #print "JDC.close",self + for etape in self.etapes: + if hasattr(etape,"close"):etape.close() + CONNECTOR.Emit(self,"close") + def set_current_step(self): CONTEXT.unset_current_step() CONTEXT.set_current_step(self) @@ -215,6 +221,7 @@ class JDC(I_OBJECT.OBJECT): définie apres etape en tenant compte des concepts detruits Si avec vaut 'non' exclut etape de la recherche """ + #print "JDC.get_sd_apres_etape_avec_detruire",nom_sd,sd ietap=self.etapes.index(etape) if avec == 'non':ietap=ietap+1 d={nom_sd:sd} @@ -223,21 +230,27 @@ class JDC(I_OBJECT.OBJECT): e.update_context(d) autre_sd=d.get(nom_sd,None) if autre_sd is None: - # Le concept a ete detruit + # Le concept a ete detruit. On interrompt la recherche car il n'y a + # pas eu de redefinition du concept (il n'y a pas de conflit potentiel). return None if autre_sd is not sd : - # L'etape produit un concept de meme nom + # L'etape produit un concept different de meme nom. La situation n'est + # pas saine (sauf peut etre si reuse ???) if hasattr(e,'reuse') and e.reuse == autre_sd: # Le concept etant reutilise, on interrompt la recherche. # On considere qu'il n'y a pas de nouveau concept defini # meme si dans les etapes suivantes le concept est detruit # et un concept de meme nom créé. + # AVERIFIER : avec reuse le concept devrait etre le meme + # le passage par ici est tres improbable return None else: - # Le concept est produit par l'etape + # Le concept est produit par l'etape (Il y a conflit potentiel). + # Le concept est redefini par une etape posterieure. return autre_sd - # On n'a rien trouve. Pas de concept de nom nom_sd - return None + # Pas de destruction du concept ni de redefinition. On retourne le + # concept initial + return sd def get_sd_apres_etape(self,nom_sd,etape,avec='non'): """ @@ -324,6 +337,7 @@ class JDC(I_OBJECT.OBJECT): # Il faut la désenregistrer etape.niveau.unregister(etape) etape.supprime_sdprods() + etape.close() self.active_etapes() # Apres suppression de l'etape il faut controler que les etapes diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index 87f5e0e3..3ecd1b8f 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -284,6 +284,12 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # On met g_context à blanc self.g_context={} + def close(self): + #print "MACRO_ETAPE.close",self + if hasattr(self,"jdc_aux") and self.jdc_aux: + # La macro a un jdc auxiliaire inclus. On demande sa fermeture + self.jdc_aux.close() + def delete_concept(self,sd): """ Fonction : Mettre a jour les mots cles de l etape et eventuellement @@ -370,14 +376,16 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): def force_fichier_init(self): """ - Force le fichier init en erreur + Force le remplacement du fichier init meme si le remplacant est en erreur """ - j_context=self.jdc_aux.get_contexte_avant(None) + # Reinitialisation complete du compte-rendu d'erreurs + self.jdc_aux.cr=self.jdc_aux.CR() # On remplit le dictionnaire des concepts produits inclus # en retirant les concepts présents dans le contexte initial # On ajoute egalement le concept produit dans le sds_dict du parent # sans verification car on est sur (verification integrée) que # le nommage est possible + j_context=self.jdc_aux.get_contexte_avant(None) self.g_context.clear() context_ini=self.jdc_aux.context_ini for k,v in j_context.items(): @@ -389,20 +397,19 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.index_etape_courante=self.jdc_aux.index_etape_courante self.contexte_fichier_init = j_context - # On conserve la memoire du nouveau fichier - # mais on n'utilise pas les concepts crees par ce fichier - # on met l'etape en erreur : fichier_err=string.join(l) + # On enregistre la modification de fichier self.init_modif() self.state="undetermined" - # On enregistre la modification de fichier self.record_unite() - #self.etapes=[] - #self.g_context={} # Le contexte du parent doit etre reinitialise car les concepts produits ont changé self.parent.reset_context() + # On remplace les anciens concepts par les nouveaux (y compris ajouts + # et suppression) et on propage les modifications aux etapes precedentes et suivantes + # reevalue_sd_jdc construit la liste des differences entre les contextes contexte_fichier_init + # et old_contexte_fichier_init et effectue les destructions et remplacements de concept + # necessaires self.old_contexte_fichier_init=self.old_context - #self.contexte_fichier_init={} self.reevalue_sd_jdc() self.fin_modif() @@ -438,9 +445,9 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): except: l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) self.fichier_err = string.join(l) - #self.etapes=[] self.g_context={} - + self.etapes=[] + self.jdc_aux=None self.old_contexte_fichier_init=old_context self.contexte_fichier_init={} self.reevalue_sd_jdc() @@ -466,16 +473,13 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): #if unite != self.fichier_unite or not self.parent.recorded_units.has_key(unite): if not self.parent.recorded_units.has_key(unite): - # Nouvelle unite - f,text=self.get_file(unite=unite,fic_origine=self.parent.nom) - units={} + # Le numero d'unite a ete change. Le nouveau numero ne fait pas partie des numeros + # enregistres. + f,text=self.get_file_memo(unite=unite,fic_origine=self.parent.nom) if f is not None: self.fichier_ini = f self.fichier_text=text - self.recorded_units=units - if self.fichier_ini is None and self.jdc.appli: - 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") + #print "update_fichier_init",self.recorded_units else: # Unite existante f,text,units=self.parent.recorded_units[unite] @@ -488,6 +492,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.fichier_err="Le fichier associé n'est pas défini" self.parent.change_unit(unite,self,self.fichier_unite) self.g_context={} + self.etapes=[] + self.jdc_aux=None self.contexte_fichier_init={} self.parent.reset_context() self.reevalue_sd_jdc() @@ -512,6 +518,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.fichier_err=string.join(l) self.parent.change_unit(unite,self,self.fichier_unite) self.g_context={} + self.etapes=[] + self.jdc_aux=None self.contexte_fichier_init={} # Le contexte du parent doit etre reinitialise car les concepts @@ -537,11 +545,16 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): #print self.parent.old_recorded_units #print self.parent.recorded_units if unite is None: + # On est dans le cas d'une poursuite. On ne reutilise aucune unite de parent units={} else: + # On est dans le cas d'un include. On reutilise toutes les unites de parent units=self.parent.recorded_units - if self.parent.old_recorded_units.has_key(unite): - f,text,units=self.parent.old_recorded_units[unite] + + #if self.parent.old_recorded_units.has_key(unite): + if self.parent.recorded_units.has_key(unite): + f,text,units=self.parent.recorded_units[unite] + #f,text,units=self.parent.old_recorded_units[unite] #print id(self.recorded_units) self.recorded_units=units #print id(self.recorded_units) @@ -550,6 +563,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): f,text=self.jdc.get_file(unite=unite,fic_origine=fic_origine) else: f,text=None,None + self.recorded_units=units if f is None and self.jdc.appli: self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus", @@ -559,15 +573,11 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): #ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro) def get_file(self,unite=None,fic_origine=''): """Retourne le nom du fichier et le source correspondant a l'unite unite - Initialise en plus recorded_units """ - #print "get_file",unite - units={} if self.jdc : f,text=self.jdc.get_file(unite=unite,fic_origine=fic_origine) else: f,text=None,None - self.recorded_units=units return f,text #ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro) @@ -619,6 +629,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): ) self.parent.record_unit(unite,self) self.g_context={} + self.etapes=[] + self.jdc_aux=None self.fichier_err = string.join(l) self.contexte_fichier_init={} raise @@ -661,6 +673,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.fichier_err = string.join(l) self.parent.record_unit(self.fichier_unite,self) self.g_context={} + self.etapes=[] + self.jdc_aux=None self.contexte_fichier_init={} raise @@ -736,6 +750,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): ) self.parent.record_unit(None,self) self.g_context={} + self.etapes=[] + self.jdc_aux=None self.fichier_err = string.join(l) self.contexte_fichier_init={} raise @@ -745,104 +761,3 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # et on leve une exception si une erreur a été enregistrée self.update_fichier_init(None) if self.fichier_err is not None: raise Exception(self.fichier_err) - -#ATTENTION SURCHARGE: cette methode surcharge celle de Noyau a garder en synchro - def type_sdprod(self,co,t): - """ - Cette methode a pour fonction de typer le concept co avec le type t - dans les conditions suivantes - 1- co est un concept produit de self - 2- co est un concept libre : on le type et on l attribue à self - Elle enregistre egalement les concepts produits (on fait l hypothese - que la liste sdprods a été correctement initialisee, vide probablement) - """ - #print "type_sdprod",co,t - if not hasattr(co,'etape'): - # Le concept vaut None probablement. On ignore l'appel - return - # - # On cherche a discriminer les differents cas de typage d'un concept - # produit par une macro qui est specifie dans un mot cle simple. - # On peut passer plusieurs fois par type_sdprod ce qui explique - # le nombre important de cas. - # - # Cas 1 : Le concept est libre. Il vient d'etre cree par CO(nom) - # Cas 2 : Le concept est produit par la macro. On est deja passe par type_sdprod. - # Cas semblable a Cas 1. - # Cas 3 : Le concept est produit par la macro englobante (parent). On transfere - # la propriete du concept de la macro parent a la macro courante (self) - # en verifiant que le type est valide - # Cas 4 : La concept est la propriete d'une etape fille. Ceci veut dire qu'on est - # deja passe par type_sdprod et que la propriete a ete transfere a une - # etape fille. Cas semblable a Cas 3. - # Cas 5 : Le concept est produit par une etape externe a la macro. - # - if co.etape == None: - # Cas 1 : le concept est libre - # On l'attache a la macro et on change son type dans le type demande - # Recherche du mot cle simple associe au concept - mcs=self.get_mcs_with_co(co) - if len(mcs) != 1: - raise AsException("""Erreur interne. -Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co) - mcs=mcs[0] - # - # Attention : la seule modif est ici : Accas.CO au lieu de CO - # - if not Accas.CO in mcs.definition.type: - raise AsException("""Erreur interne. -Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type)) - co.etape=self - co.__class__ = t - self.sdprods.append(co) - - elif co.etape== self: - # Cas 2 : le concept est produit par la macro (self) - # On est deja passe par type_sdprod (Cas 1 ou 3). - # Il suffit de le mettre dans la liste des concepts produits (self.sdprods) - # Le type du concept doit etre coherent avec le type demande (seulement derive) - if not isinstance(co,t): - raise AsException("""Erreur interne. -Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co.__class__)) - self.sdprods.append(co) - - elif co.etape== self.parent: - # Cas 3 : le concept est produit par la macro parente (self.parent) - # on transfere la propriete du concept a la macro fille - # et on change le type du concept comme demande - # Au prealable, on verifie que le concept existant (co) est une instance - # possible du type demande (t) - # Cette règle est normalement cohérente avec les règles de vérification des mots-clés - if not isinstance(co,t): - raise AsException(""" -Impossible de changer le type du concept produit (%s) en (%s). -Le type actuel (%s) devrait etre une classe derivee du nouveau type (%s)""" % (co,t,co.__class__,t)) - mcs=self.get_mcs_with_co(co) - if len(mcs) != 1: - raise AsException("""Erreur interne. -Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co) - mcs=mcs[0] - if not Accas.CO in mcs.definition.type: - raise AsException("""Erreur interne. -Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type)) - co.etape=self - # On ne change pas le type car il respecte la condition isinstance(co,t) - #co.__class__ = t - self.sdprods.append(co) - - elif self.issubstep(co.etape): - # Cas 4 : Le concept est propriété d'une sous etape de la macro (self). - # On est deja passe par type_sdprod (Cas 3 ou 1). - # Il suffit de le mettre dans la liste des concepts produits (self.sdprods) - # Le type du concept et t doivent etre derives. - # Il n'y a aucune raison pour que la condition ne soit pas verifiee. - if not isinstance(co,t): - raise AsException("""Erreur interne. -Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co.__class__)) - self.sdprods.append(co) - - else: - # Cas 5 : le concept est produit par une autre étape - # On ne fait rien - return - diff --git a/Ihm/I_PROC_ETAPE.py b/Ihm/I_PROC_ETAPE.py index d69cc9a7..f9df60ad 100644 --- a/Ihm/I_PROC_ETAPE.py +++ b/Ihm/I_PROC_ETAPE.py @@ -41,6 +41,13 @@ class PROC_ETAPE(I_ETAPE.ETAPE): """ return None + def supprime_sdprods(self): + """ + Fonction: Lors d'une destruction d'etape, detruit tous les concepts produits + Une procedure n'en a aucun + """ + return + def delete_concept(self,sd): """ Inputs : diff --git a/Noyau/N_FONCTION.py b/Noyau/N_FONCTION.py index 00a82552..ccdf3786 100644 --- a/Noyau/N_FONCTION.py +++ b/Noyau/N_FONCTION.py @@ -1,4 +1,4 @@ -#@ MODIF N_FONCTION Noyau DATE 20/10/2004 AUTEUR DURAND C.DURAND +#@ MODIF N_FONCTION Noyau DATE 17/05/2005 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -32,7 +32,9 @@ class formule(ASSD): self.expression=None def __call__(self,*val): - context={} + if hasattr(self.parent,'contexte_fichier_init'): + context=self.parent.contexte_fichier_init + else : context={} i=0 for param in self.nompar : context[param]=val[i] diff --git a/Noyau/N_MACRO_ETAPE.py b/Noyau/N_MACRO_ETAPE.py index df5cf32f..87c14e47 100644 --- a/Noyau/N_MACRO_ETAPE.py +++ b/Noyau/N_MACRO_ETAPE.py @@ -1,4 +1,4 @@ -#@ MODIF N_MACRO_ETAPE Noyau DATE 22/02/2005 AUTEUR DURAND C.DURAND +#@ MODIF N_MACRO_ETAPE Noyau DATE 31/05/2005 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -43,6 +43,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE): """ nature = "COMMANDE" + typeCO=CO def __init__(self,oper=None,reuse=None,args={}): """ Attributs : @@ -328,7 +329,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE): raise AsException("""Erreur interne. Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co) mcs=mcs[0] - if not CO in mcs.definition.type: + if not self.typeCO in mcs.definition.type: raise AsException("""Erreur interne. Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type)) co.etape=self @@ -361,7 +362,7 @@ Le type actuel (%s) devrait etre une classe derivee du nouveau type (%s)""" % (c raise AsException("""Erreur interne. Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co) mcs=mcs[0] - if not CO in mcs.definition.type: + if not self.typeCO in mcs.definition.type: raise AsException("""Erreur interne. Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type)) co.etape=self diff --git a/Validation/V_MCSIMP.py b/Validation/V_MCSIMP.py index d9860ea9..4fd7e8f9 100644 --- a/Validation/V_MCSIMP.py +++ b/Validation/V_MCSIMP.py @@ -352,7 +352,7 @@ class MCSIMP: return self.is_object_from(valeur,type_permis) else: print "Type non encore géré %s" %`type_permis` - #print self.nom,self.parent.nom,self.jdc.fichier + print self.nom,self.parent.nom,self.jdc.fichier def isinintervalle(self,valeur,cr='non'): """ -- 2.39.2