Salome HOME
PN
[tools/eficas.git] / Editeur / macrodisplay.py
index 563b307f99e56cef29c5313bfac6bf7d6bfee4cf..7d769e9f550fd6d4ea8aa5939390acc799d47a07 100644 (file)
@@ -23,7 +23,7 @@
    des sous commandes d'une macro sous forme d'arbre
 """
 # Modules Python
-import types
+import types,sys
 import Tkinter,Pmw
 
 # Modules EFICAS
@@ -33,59 +33,24 @@ import Objecttreeitem
 import compojdc
 import treewidget
 from widgets import Fenetre
+from Ihm import CONNECTOR
 
-#class MACRO2TreeItem(Objecttreeitem.ObjectTreeItem):
 class MACRO2TreeItem(compojdc.JDCTreeItem):
-  def IsExpandable(self):
-    return 1
-
-  def GetText(self):
-      return  "    "
-
-  def GetIconName(self):
-    if self.object.isvalid():
-      return "ast-green-square"
-    else:
-      return "ast-red-square"
-
-  def keys(self):
-    return range(len(self.object.etapes))
-
-  def GetSubList(self):
-    sublist=[]
-    for key in self.keys():
-      liste = self.object.etapes
-      try:
-        value = liste[key]
-      except KeyError:
-        continue
-      def setfunction(value, key=key, object=liste):
-        object[key] = value
-      item = self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
-      sublist.append(item)
-    return sublist
-
-  def verif_condition_bloc(self):
-      # retourne la liste des sous-items dont la condition est valide
-      # sans objet pour le JDC
-      return [],[]
-
-  def get_l_noms_etapes(self):
-      """ Retourne la liste des noms des étapes de self.object"""
-      return self.object.get_l_noms_etapes()
+      pass
 
 class MacroDisplay:
-  def __init__(self,appli,jdc,nom_jdc):
+  def __init__(self,appli,macroitem,nom_jdc):
     self.fenetre = Tkinter.Toplevel()
     self.fenetre.configure(width = 800,height=500)
     self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
     self.fenetre.title("Visualisation Macro_Etape")
-    self.jdc=jdc
+    self.macroitem=macroitem
+    self.jdc=macroitem.object.jdc_aux
     self.nom_jdc=nom_jdc
     self.appli=appli
     self.barre=Tkinter.Frame(self.fenetre,relief="ridge",bd=2)
     self.barre.pack(expand=1,fill=Tkinter.X)
-    if self.jdc.fichier_text is not None:
+    if self.macroitem.object.fichier_text is not None:
       b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile)
       b.pack(side='left')
       tp=tooltip.TOOLTIP(b,"View file")
@@ -96,13 +61,16 @@ class MacroDisplay:
     self.canvas=self.mainPart.component('canvas')
     Pmw.Color.changecolor(self.canvas,background='gray95')
     self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1)
-    self.item=MACRO2TreeItem(self.appli,nom_jdc,jdc)
-    import treewidget
+    self.item=MACRO2TreeItem(self.appli,nom_jdc,self.jdc)
     self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu)
     self.tree.draw()
+    CONNECTOR.Connect(self.jdc,"close",self.onCloseView,())
+
+  def onCloseView(self):
+    self.quit()
 
   def visufile(self):
-    Fenetre(self.appli,titre="Source du fichier inclus",texte=self.jdc.fichier_text)
+    Fenetre(self.appli,titre="Source du fichier inclus",texte=self.macroitem.object.fichier_text)
 
   def make_rmenu(self,node,event):
       if hasattr(node.item,'rmenu_specs'):
@@ -132,26 +100,34 @@ 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)
 
   def quit(self):
+    #print "quit",self
+    self.tree.supprime()
+    self.tree=None
     self.fenetre.destroy()
 
-def makeMacroDisplay(appli,jdc,nom_jdc):
-  return MacroDisplay(appli,jdc,nom_jdc)
+  #def __del__(self):
+  #  print "__del__",self
+
+def makeMacroDisplay(appli,macroitem,nom_item):
+  return MacroDisplay(appli,macroitem,nom_item)
+
+import treeitemincanvas
 
-class TREEITEMINCANVAS:
+class TREEITEMINCANVAS(treeitemincanvas.TREEITEMINCANVAS):
    def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
-      print "TREEITEMINCANVAS",object
+      #print "TREEITEMINCANVAS",object
       self.object=object
       self.nom=nom
       self.appli=appli
@@ -166,18 +142,11 @@ class TREEITEMINCANVAS:
       self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu)
       self.tree.draw()
 
-   def mainloop(self):
-      self.parent.mainloop()
-
-   def update(self):
-      """Cette methode est utilisee pour signaler une mise a jour des objets associes"""
-      self.tree.update()
-
 import jdcdisplay
 
 class MACRODISPLAY(jdcdisplay.JDCDISPLAY):
    def __init__(self,jdc,nom_jdc,appli=None,parent=None):
-      print "MACRODISPLAY",jdc
+      #print "MACRODISPLAY",jdc
       self.jdc=jdc
       self.nom_jdc=nom_jdc
       self.fichier=None