~brian-sidebotham/wxwidgets-cmake/wxpython-2.9.4

« back to all changes in this revision

Viewing changes to wxPython/wx/tools/XRCed/XMLTreeMenu.py

  • Committer: Brian Sidebotham
  • Date: 2013-08-03 14:30:08 UTC
  • Revision ID: brian.sidebotham@gmail.com-20130803143008-c7806tkych1tp6fc
Initial import into Bazaar

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Name:         XMLTreeMenu.py
 
2
# Purpose:      dynamic pulldown menu for XMLTree
 
3
# Author:       Roman Rolinsky <rolinsky@femagsoft.com>
 
4
# Created:      31.05.2007
 
5
# RCS-ID:       $Id: XMLTreeMenu.py 64107 2010-04-22 14:05:36Z ROL $
 
6
 
 
7
import wx
 
8
from globals import ID
 
9
from component import Manager
 
10
 
 
11
class XMLTreeMenu(wx.Menu):
 
12
    '''dynamic pulldown menu for XMLTree'''
 
13
    def __init__(self, container, comp, tree, createSibling, insertBefore):
 
14
        '''
 
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.
 
19
        '''
 
20
        wx.Menu.__init__(self)
 
21
        items = tree.GetSelections()
 
22
        if len(items) <= 1:
 
23
            item = tree.GetSelection()
 
24
            if not item: item = tree.root
 
25
            if not container:
 
26
                menu = self.CreateTopLevelMenu(comp)
 
27
            elif container is Manager.rootComponent and createSibling:
 
28
                menu = self.CreateTopLevelMenu(container)
 
29
            else:
 
30
                if createSibling:
 
31
                    menu = self.CreateSubMenus(container)
 
32
                else:
 
33
                    menu = self.CreateSubMenus(comp)
 
34
            # Select correct label for submenu
 
35
            if createSibling:
 
36
                if insertBefore:
 
37
                    self.AppendMenu(ID.SIBLING, 'Create Sibling', menu,
 
38
                                    'Create sibling before selected object')
 
39
                else:
 
40
                    self.AppendMenu(ID.SIBLING, 'Create Sibling', menu,
 
41
                                    'Create sibling after selected object')
 
42
            else:
 
43
                if insertBefore:
 
44
                    self.AppendMenu(ID.INSERT, 'Insert', menu,
 
45
                                    'Create object as the first child')
 
46
                else:
 
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()
 
52
            
 
53
            if container:
 
54
                if container is Manager.rootComponent:
 
55
                    menu = self.CreateTopLevelMenu(container, ID.SHIFT)
 
56
                else:
 
57
                    menu = self.CreateSubMenus(container, ID.SHIFT)
 
58
                self.AppendMenu(ID.REPLACE, 'Replace With', menu,
 
59
                                'Replace selected object by another')
 
60
                self.AppendSeparator()
 
61
                
 
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')
 
67
            else:
 
68
                self.Append(ID.PASTE, 'Paste', 'Paste from the clipboard')
 
69
        if items:
 
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')
 
75
 
 
76
    def CreateTopLevelMenu(self, comp, idShift=0):
 
77
        m = wx.Menu()
 
78
        for index,component,label,help in Manager.menus['TOP_LEVEL']:
 
79
            if comp.canHaveChild(component):
 
80
                m.Append(component.id + idShift, label, help)
 
81
        m.AppendSeparator()
 
82
        m.Append(ID.REF, 'reference...', 'Create object_ref node')
 
83
        m.Append(ID.COMMENT, 'comment', 'Create comment node')        
 
84
        return m
 
85
 
 
86
    def CreateSubMenus(self, comp, idShift=0):
 
87
        menu = wx.Menu()
 
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
 
96
            m = wx.Menu()
 
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()
 
103
            else:
 
104
                m.Destroy()
 
105
        menu.Append(ID.REF, 'reference...', 'Create object_ref node')
 
106
        menu.Append(ID.COMMENT, 'comment', 'Create comment node')
 
107
        return menu