2
# Purpose: dynamic pulldown menu for XMLTree
3
# Author: Roman Rolinsky <rolinsky@femagsoft.com>
5
# RCS-ID: $Id: XMLTreeMenu.py 64107 2010-04-22 14:05:36Z ROL $
9
from component import Manager
11
class XMLTreeMenu(wx.Menu):
12
'''dynamic pulldown menu for XMLTree'''
13
def __init__(self, container, comp, tree, createSibling, insertBefore):
15
Create tree pull-down menu. createSibling flag is set if the
16
child must be a sibling of the selected item, insertBefore
17
flag is set if the child should be put before selected item in
18
sibling mode or as the first child in non-sibling mode.
20
wx.Menu.__init__(self)
21
items = tree.GetSelections()
23
item = tree.GetSelection()
24
if not item: item = tree.root
26
menu = self.CreateTopLevelMenu(comp)
27
elif container is Manager.rootComponent and createSibling:
28
menu = self.CreateTopLevelMenu(container)
31
menu = self.CreateSubMenus(container)
33
menu = self.CreateSubMenus(comp)
34
# Select correct label for submenu
37
self.AppendMenu(ID.SIBLING, 'Create Sibling', menu,
38
'Create sibling before selected object')
40
self.AppendMenu(ID.SIBLING, 'Create Sibling', menu,
41
'Create sibling after selected object')
44
self.AppendMenu(ID.INSERT, 'Insert', menu,
45
'Create object as the first child')
47
self.AppendMenu(ID.APPEND, 'Append', menu,
48
'Create object as the last child')
49
if comp is not Manager.rootComponent:
50
self.Append(ID.SUBCLASS, 'Sublass...', 'Define subclass')
51
self.AppendSeparator()
54
if container is Manager.rootComponent:
55
menu = self.CreateTopLevelMenu(container, ID.SHIFT)
57
menu = self.CreateSubMenus(container, ID.SHIFT)
58
self.AppendMenu(ID.REPLACE, 'Replace With', menu,
59
'Replace selected object by another')
60
self.AppendSeparator()
62
self.Append(wx.ID_CUT, 'Cut', 'Cut to the clipboard')
63
self.Append(wx.ID_COPY, 'Copy', 'Copy to the clipboard')
64
if createSibling and item != tree.root:
65
self.Append(ID.PASTE_SIBLING, 'Paste Sibling',
66
'Paste from the clipboard as a sibling')
68
self.Append(ID.PASTE, 'Paste', 'Paste from the clipboard')
70
self.Append(wx.ID_DELETE, 'Delete', 'Delete selected objects')
71
if comp.isContainer():
72
self.AppendSeparator()
73
self.Append(ID.EXPAND, 'Expand', 'Expand tree')
74
self.Append(ID.COLLAPSE, 'Collapse', 'Collapse tree')
76
def CreateTopLevelMenu(self, comp, idShift=0):
78
for index,component,label,help in Manager.menus['TOP_LEVEL']:
79
if comp.canHaveChild(component):
80
m.Append(component.id + idShift, label, help)
82
m.Append(ID.REF, 'reference...', 'Create object_ref node')
83
m.Append(ID.COMMENT, 'comment', 'Create comment node')
86
def CreateSubMenus(self, comp, idShift=0):
88
for index,component,label,help in Manager.menus['ROOT']:
89
if comp.canHaveChild(component):
90
menu.Append(component.id + idShift, label, help)
91
if menu.GetMenuItemCount():
92
menu.AppendSeparator()
93
for name in Manager.menuNames[2:]:
94
# Skip empty menu groups
95
if not Manager.menus.get(name, []): continue
97
for index,component,label,help in Manager.menus[name]:
98
if comp.canHaveChild(component):
99
m.Append(component.id + idShift, label, help)
100
if m.GetMenuItemCount():
101
menu.AppendMenu(ID.MENU, name, m)
102
menu.AppendSeparator()
105
menu.Append(ID.REF, 'reference...', 'Create object_ref node')
106
menu.Append(ID.COMMENT, 'comment', 'Create comment node')