Salome HOME
CCAR: correction edition include avec fichier inexistant
[tools/eficas.git] / Editeur / macrodisplay.py
index 069a05d1083b68687a17e982871148f71828e922..af5671e9711956282f27b505b705309561a25cc2 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -29,61 +30,29 @@ import Tkinter,Pmw
 import images
 import tooltip
 import Objecttreeitem
+import compojdc
+import treewidget
 from widgets import Fenetre
 
-class MACRO2TreeItem(Objecttreeitem.ObjectTreeItem):
-  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()
+class MACRO2TreeItem(compojdc.JDCTreeItem):
+      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)
-    b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile)
-    b.pack(side='left')
-    tp=tooltip.TOOLTIP(b,"View file")
+    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")
     self.mainPart=Pmw.ScrolledCanvas(self.fenetre,
                                      hull_width=600,
                                      hull_height=500,
@@ -91,13 +60,13 @@ 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)
+    self.item=MACRO2TreeItem(self.appli,nom_jdc,self.jdc)
     import treewidget
     self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu)
     self.tree.draw()
 
   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'):
@@ -127,13 +96,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)
@@ -141,6 +110,51 @@ class MacroDisplay:
   def quit(self):
     self.fenetre.destroy()
 
-def makeMacroDisplay(appli,jdc,nom_jdc):
-  return MacroDisplay(appli,jdc,nom_jdc)
+def makeMacroDisplay(appli,macroitem,nom_item):
+  return MacroDisplay(appli,macroitem,nom_item)
+
+class TREEITEMINCANVAS:
+   def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
+      #print "TREEITEMINCANVAS",object
+      self.object=object
+      self.nom=nom
+      self.appli=appli
+      self.parent=parent
+
+      self.item=MACRO2TreeItem(self.appli,self.nom,self.object)
+      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95')
+      self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
+      if not sel:
+         def sel(event=None):
+            return
+      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
+      self.jdc=jdc
+      self.nom_jdc=nom_jdc
+      self.fichier=None
+      self.panel_courant=None
+      self.appli=appli
+      self.parent=parent
+      self.node_selected = None
+      self.modified='n'
+
+      self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
+      self.pane.add('treebrowser',min=0.4,size=0.5)
+      self.pane.add('selected',min=0.4)
+      self.pane.pack(expand=1,fill='both')
+      self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
+                 self.appli,self.select_node,self.make_rmenu)