1 # -*- coding: utf-8 -*-
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
22 Ce module contient la classe MacroDisplay qui realise l'affichage
23 des sous commandes d'une macro sous forme d'arbre
32 from Editeur import Objecttreeitem
35 from widgets import Fenetre
36 from Ihm import CONNECTOR
38 class MACRO2TreeItem(compojdc.JDCTreeItem):
42 def __init__(self,appli,macroitem,nom_jdc):
43 self.fenetre = Tkinter.Toplevel()
44 self.fenetre.configure(width = 800,height=500)
45 self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
46 self.fenetre.title("Visualisation Macro_Etape")
47 self.macroitem=macroitem
48 self.jdc=macroitem.object.jdc_aux
51 self.barre=Tkinter.Frame(self.fenetre,relief="ridge",bd=2)
52 self.barre.pack(expand=0,fill=Tkinter.X)
53 if self.macroitem.object.fichier_text is not None:
54 b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile)
56 tp=tooltip.TOOLTIP(b,"View file")
57 self.mainPart=Pmw.ScrolledCanvas(self.fenetre,
61 self.canvas=self.mainPart.component('canvas')
62 Pmw.Color.changecolor(self.canvas,background='gray95')
63 self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1)
64 self.item=MACRO2TreeItem(self.appli,nom_jdc,self.jdc)
65 self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu)
67 CONNECTOR.Connect(self.jdc,"close",self.onCloseView,())
69 def onCloseView(self):
73 Fenetre(self.appli,titre="Source du fichier inclus",texte=self.macroitem.object.fichier_text)
75 def make_rmenu(self,node,event):
76 if hasattr(node.item,'rmenu_specs'):
77 rmenu = Tkinter.Menu(self.canvas, tearoff=0)
78 self.cree_menu(rmenu,node.item.rmenu_specs,node)
79 rmenu.tk_popup(event.x_root,event.y_root)
81 def cree_menu(self,menu,itemlist,node):
83 Ajoute les items du tuple itemlist
89 number_item=number_item + 1
94 if type(method) == types.TupleType:
95 # On a un tuple => on cree une cascade
96 menu_cascade=Tkinter.Menu(menu)
97 menu.add_cascade(label=label,menu=menu_cascade)
98 self.cree_menu(menu_cascade,method,node)
99 elif method[0] == '&':
100 # On a une chaine avec & en tete => on cree un radiobouton
102 command=getattr(node.item,method[1:])
103 menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
104 if radio == None:radio=number_item
108 command=getattr(node.item,method)
109 menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
111 # Si au moins un radiobouton existe on invoke le premier
112 if radio:menu.invoke(radio)
118 self.fenetre.destroy()
121 # print "__del__",self
123 def makeMacroDisplay(appli,macroitem,nom_item):
124 return MacroDisplay(appli,macroitem,nom_item)
126 import treeitemincanvas
128 class TREEITEMINCANVAS(treeitemincanvas.TREEITEMINCANVAS):
129 def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
130 #print "TREEITEMINCANVAS",object
136 self.item=MACRO2TreeItem(self.appli,self.nom,self.object)
137 self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95')
138 self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
142 self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu)
147 class MACRODISPLAY(jdcdisplay.JDCDISPLAY):
148 def __init__(self,jdc,nom_jdc,appli=None,parent=None):
149 #print "MACRODISPLAY",jdc
153 self.panel_courant=None
156 self.node_selected = None
159 self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
160 self.pane.add('treebrowser',min=0.4,size=0.5)
161 self.pane.add('selected',min=0.4)
162 self.pane.pack(expand=1,fill='both')
163 self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
164 self.appli,self.select_node,self.make_rmenu)