]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
CCAR: corrections dans la prise en compte de l'edition d'INCLUDE
authoreficas <>
Mon, 18 Apr 2005 10:20:36 +0000 (10:20 +0000)
committereficas <>
Mon, 18 Apr 2005 10:20:36 +0000 (10:20 +0000)
14 files changed:
Aster/eficas_aster.py
Aster/prefs.py
Editeur/appli.py
Editeur/bureau.py
Editeur/compomacro.py
Editeur/eficas_go.py
Editeur/jdcdisplay.py
Editeur/macrodisplay.py
Editeur/panels.py
Editeur/readercata.py
Editeur/session.py
Ihm/I_ETAPE.py
Ihm/I_JDC.py
Ihm/I_MACRO_ETAPE.py

index c5bb96b5a07231f3d2d6e820a07d829c249b7b1d..f1870683b63fe7994217b3fba92688eaf5c260ab 100755 (executable)
@@ -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()
index 22a0a58b97c35eb8703abf87040cd8769e6f4232..5ee30d25862d102aa2a533da2fcf72169d6bf581 100644 (file)
@@ -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')
index e85c79f8e98cca1f001f6b8b966fab99c3ee26e8..e9f105aba19d246eea472b80ca6539c017623343 100644 (file)
@@ -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)
index 8bcafcad6344666704c021ce3fe4b01b69a9249e..b62aed8ac0418838cb24f090f1f8ab24f954152f 100644 (file)
@@ -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
index ef0874262a54f8d2ff1494eec961c3781d169eeb..af1e921d3e670a9c892bbb6741ffccdde375f01e 100644 (file)
@@ -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
index 79a1bb01183436cd96136dff44381791343695aa..2446c724dbc741d1c0c88b953babf938b4b0b3ec 100644 (file)
@@ -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)
index 8ac5a82f0d5b16585c4e3dde630c6d16410aff29..51ee9d4cd0ff512703bb68766e89bd0573a93af3 100644 (file)
@@ -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)
index 563b307f99e56cef29c5313bfac6bf7d6bfee4cf..58a72da4be600635e6a4759a06ac28f7258c7073 100644 (file)
@@ -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)
index 7700a2ac9238cfb9d50bb382a4f5519e7ef43cec..8626adec2af37613ba7ab104fa3227f6881081f5 100644 (file)
@@ -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
 
index e9badcaf643437c356ec35141f72a220a1f102b9..5b72e6b305374d5cd078c9853eecc92d74313f74 100644 (file)
@@ -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]
index 834ee4100e0689608228e81b811f81395400e767..e503352cb811889051df42b0a72cfa27ba01b8b1 100644 (file)
@@ -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")
 
index 4f3c092e3aa1a54c34baa9d57cc60e6bc8b072a6..0a9fe3f849420d70b73604e60ba24955d5f38cd7 100644 (file)
@@ -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
index 13ef7f64cdb9585f3524270c554b8341954b6101..53e300303c6dd7d5408f39a093666207ccd4e262 100644 (file)
@@ -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
 
index 26dd673a79910250eed4ac14d6a1bec9a595e032..9be1ca6fd32e7dbe673165824e3cdf22f42bb09f 100644 (file)
@@ -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={}