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
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=1,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)