📄 tree.py
字号:
],
['container', 'Containers',
(ID_NEW.PANEL, 'Panel', 'Create panel'),
(ID_NEW.NOTEBOOK, 'Notebook', 'Create notebook control'),
(ID_NEW.CHOICEBOOK, 'Choicebook', 'Create choicebook control'),
(ID_NEW.LISTBOOK, 'Listbook', 'Create listbook control'),
(ID_NEW.SPLITTER_WINDOW, 'SplitterWindow', 'Create splitter window'),
(ID_NEW.TOOL_BAR, 'ToolBar', 'Create toolbar'),
(ID_NEW.STATUS_BAR, 'StatusBar', 'Create status bar'),
(ID_NEW.MENU_BAR, 'MenuBar', 'Create menubar'),
# (ID_NEW.WIZARD_PAGE, 'Wizard Page', 'Create wizard page'),
(ID_NEW.WIZARD_PAGE_SIMPLE, 'WizardPageSimple', 'Create simple wizard page'),
],
['sizer', 'Sizers',
(ID_NEW.BOX_SIZER, 'BoxSizer', 'Create box sizer'),
(ID_NEW.STATIC_BOX_SIZER, 'StaticBoxSizer',
'Create static box sizer'),
(ID_NEW.GRID_SIZER, 'GridSizer', 'Create grid sizer'),
(ID_NEW.FLEX_GRID_SIZER, 'FlexGridSizer',
'Create flexgrid sizer'),
(ID_NEW.GRID_BAG_SIZER, 'GridBagSizer',
'Create gridbag sizer'),
(ID_NEW.SPACER, 'Spacer', 'Create spacer'),
(ID_NEW.STD_DIALOG_BUTTON_SIZER, 'StdDialogButtonSizer',
'Create standard button sizer'),
]
]
self.menuControls = [
(ID_NEW.MENU, 'Menu', 'Create menu'),
(ID_NEW.MENU_ITEM, 'MenuItem', 'Create menu item'),
(ID_NEW.SEPARATOR, 'Separator', 'Create separator'),
]
self.toolBarControls = [
(ID_NEW.TOOL, 'Tool', 'Create tool'),
(ID_NEW.SEPARATOR, 'Separator', 'Create separator'),
['control', 'Various controls',
(ID_NEW.STATIC_TEXT, 'Label', 'Create label'),
(ID_NEW.STATIC_BITMAP, 'Bitmap', 'Create bitmap'),
(ID_NEW.STATIC_LINE, 'Line', 'Create line'),
(ID_NEW.TEXT_CTRL, 'TextBox', 'Create text box'),
(ID_NEW.CHOICE, 'Choice', 'Create choice'),
(ID_NEW.SLIDER, 'Slider', 'Create slider'),
(ID_NEW.GAUGE, 'Gauge', 'Create gauge'),
(ID_NEW.SCROLL_BAR, 'ScrollBar', 'Create scroll bar'),
(ID_NEW.LIST_CTRL, 'ListCtrl', 'Create list control'),
],
['button', 'Buttons',
(ID_NEW.BUTTON, 'Button', 'Create button'),
(ID_NEW.BITMAP_BUTTON, 'BitmapButton', 'Create bitmap button'),
(ID_NEW.RADIO_BUTTON, 'RadioButton', 'Create radio button'),
(ID_NEW.SPIN_BUTTON, 'SpinButton', 'Create spin button'),
],
['box', 'Boxes',
(ID_NEW.STATIC_BOX, 'StaticBox', 'Create static box'),
(ID_NEW.CHECK_BOX, 'CheckBox', 'Create check box'),
(ID_NEW.RADIO_BOX, 'RadioBox', 'Create radio box'),
(ID_NEW.COMBO_BOX, 'ComboBox', 'Create combo box'),
(ID_NEW.LIST_BOX, 'ListBox', 'Create list box'),
(ID_NEW.CHECK_LIST, 'CheckListBox', 'Create checklist box'),
],
]
self.stdButtons = [
(ID_NEW.OK_BUTTON, 'OK Button', 'Create standard button'),
(ID_NEW.YES_BUTTON, 'YES Button', 'Create standard button'),
(ID_NEW.SAVE_BUTTON, 'SAVE Button', 'Create standard button'),
(ID_NEW.APPLY_BUTTON, 'APPLY Button', 'Create standard button'),
(ID_NEW.NO_BUTTON, 'NO Button', 'Create standard button'),
(ID_NEW.CANCEL_BUTTON, 'CANCEL Button', 'Create standard button'),
(ID_NEW.HELP_BUTTON, 'HELP Button', 'Create standard button'),
(ID_NEW.CONTEXT_HELP_BUTTON, 'CONTEXT HELP Button', 'Create standard button'),
]
self.stdButtonIDs = {
ID_NEW.OK_BUTTON: ('wxID_OK', '&Ok'),
ID_NEW.YES_BUTTON: ('wxID_YES', '&Yes'),
ID_NEW.SAVE_BUTTON: ('wxID_SAVE', '&Save'),
ID_NEW.APPLY_BUTTON: ('wxID_APPLY', '&Apply'),
ID_NEW.NO_BUTTON: ('wxID_NO', '&No'),
ID_NEW.CANCEL_BUTTON: ('wxID_CANCEL', '&Cancel'),
ID_NEW.HELP_BUTTON: ('wxID_HELP', '&Help'),
ID_NEW.CONTEXT_HELP_BUTTON: ('wxID_CONTEXT_HELP', '&Help'),
}
################################################################################
# Set menu to list items.
# Each menu command is a tuple (id, label, help)
# submenus are lists [id, label, help, submenu]
# and separators are any other type. Shift is for making
# alternative sets of IDs. (+1000).
def SetMenu(m, list, shift=False):
for l in list:
if type(l) == types.TupleType:
# Shift ID
if shift: l = (1000 + l[0],) + l[1:]
apply(m.Append, l)
elif type(l) == types.ListType:
subMenu = wx.Menu()
SetMenu(subMenu, l[2:], shift)
m.AppendMenu(wx.NewId(), l[0], subMenu, l[1])
else: # separator
m.AppendSeparator()
################################################################################
class HighLightBox:
def __init__(self, pos, size):
if size.width == -1: size.width = 0
if size.height == -1: size.height = 0
w = g.testWin.panel
l1 = wx.Window(w, -1, pos, wx.Size(size.width, 2))
l1.SetBackgroundColour(wx.RED)
l2 = wx.Window(w, -1, pos, wx.Size(2, size.height))
l2.SetBackgroundColour(wx.RED)
l3 = wx.Window(w, -1, wx.Point(pos.x + size.width - 2, pos.y), wx.Size(2, size.height))
l3.SetBackgroundColour(wx.RED)
l4 = wx.Window(w, -1, wx.Point(pos.x, pos.y + size.height - 2), wx.Size(size.width, 2))
l4.SetBackgroundColour(wx.RED)
self.lines = [l1, l2, l3, l4]
# Move highlight to a new position
def Replace(self, pos, size):
if size.width == -1: size.width = 0
if size.height == -1: size.height = 0
self.lines[0].SetDimensions(pos.x, pos.y, size.width, 2)
self.lines[1].SetDimensions(pos.x, pos.y, 2, size.height)
self.lines[2].SetDimensions(pos.x + size.width - 2, pos.y, 2, size.height)
self.lines[3].SetDimensions(pos.x, pos.y + size.height - 2, size.width, 2)
# Remove it
def Remove(self):
map(wx.Window.Destroy, self.lines)
g.testWin.highLight = None
def Refresh(self):
map(wx.Window.Refresh, self.lines)
################################################################################
class XML_Tree(wx.TreeCtrl):
def __init__(self, parent, id):
wx.TreeCtrl.__init__(self, parent, id, style = wx.TR_HAS_BUTTONS | wx.TR_MULTIPLE)
self.SetBackgroundColour(wx.Colour(224, 248, 224))
# Register events
wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
# One works on Linux, another on Windows
if wx.Platform == '__WXGTK__':
wx.EVT_TREE_ITEM_ACTIVATED(self, self.GetId(), self.OnItemActivated)
else:
wx.EVT_LEFT_DCLICK(self, self.OnDClick)
wx.EVT_RIGHT_DOWN(self, self.OnRightDown)
wx.EVT_TREE_ITEM_EXPANDED(self, self.GetId(), self.OnItemExpandedCollapsed)
wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemExpandedCollapsed)
self.selection = None
self.selectionChanging = False
self.needUpdate = False
self.pendingHighLight = None
self.ctrl = self.shift = False
self.dom = None
# Create image list
il = wx.ImageList(16, 16, True)
self.rootImage = il.Add(images.getTreeRootImage().Scale(16,16).ConvertToBitmap())
xxxObject.image = il.Add(images.getTreeDefaultImage().Scale(16,16).ConvertToBitmap())
xxxPanel.image = il.Add(images.getTreePanelImage().Scale(16,16).ConvertToBitmap())
xxxDialog.image = il.Add(images.getTreeDialogImage().Scale(16,16).ConvertToBitmap())
xxxFrame.image = il.Add(images.getTreeFrameImage().Scale(16,16).ConvertToBitmap())
xxxMenuBar.image = il.Add(images.getTreeMenuBarImage().Scale(16,16).ConvertToBitmap())
xxxMenu.image = il.Add(images.getTreeMenuImage().Scale(16,16).ConvertToBitmap())
xxxMenuItem.image = il.Add(images.getTreeMenuItemImage().Scale(16,16).ConvertToBitmap())
xxxToolBar.image = il.Add(images.getTreeToolBarImage().Scale(16,16).ConvertToBitmap())
xxxTool.image = il.Add(images.getTreeToolImage().Scale(16,16).ConvertToBitmap())
xxxSeparator.image = il.Add(images.getTreeSeparatorImage().Scale(16,16).ConvertToBitmap())
xxxSizer.imageH = il.Add(images.getTreeSizerHImage().Scale(16,16).ConvertToBitmap())
xxxSizer.imageV = il.Add(images.getTreeSizerVImage().Scale(16,16).ConvertToBitmap())
xxxStaticBoxSizer.imageH = il.Add(images.getTreeStaticBoxSizerHImage().Scale(16,16).ConvertToBitmap())
xxxStaticBoxSizer.imageV = il.Add(images.getTreeStaticBoxSizerVImage().Scale(16,16).ConvertToBitmap())
xxxGridSizer.image = il.Add(images.getTreeSizerGridImage().Scale(16,16).ConvertToBitmap())
xxxFlexGridSizer.image = il.Add(images.getTreeSizerFlexGridImage().Scale(16,16).ConvertToBitmap())
self.il = il
self.SetImageList(il)
def RegisterKeyEvents(self):
wx.EVT_KEY_DOWN(self, g.tools.OnKeyDown)
wx.EVT_KEY_UP(self, g.tools.OnKeyUp)
wx.EVT_ENTER_WINDOW(self, g.tools.OnMouse)
wx.EVT_LEAVE_WINDOW(self, g.tools.OnMouse)
def ExpandAll(self, item):
if self.ItemHasChildren(item):
self.Expand(item)
i, cookie = self.GetFirstChild(item)
children = []
while i.IsOk():
children.append(i)
i, cookie = self.GetNextChild(item, cookie)
for i in children:
self.ExpandAll(i)
def CollapseAll(self, item):
if self.ItemHasChildren(item):
i, cookie = self.GetFirstChild(item)
children = []
while i.IsOk():
children.append(i)
i, cookie = self.GetNextChild(item, cookie)
for i in children:
self.CollapseAll(i)
self.Collapse(item)
# Clear tree
def Clear(self):
self.selection = None
self.UnselectAll()
self.DeleteAllItems()
# Add minimal structure
if self.dom: self.dom.unlink()
self.dom = MyDocument()
self.dummyNode = self.dom.createComment('dummy node')
# Create main node
self.mainNode = self.dom.createElement('resource')
self.dom.appendChild(self.mainNode)
self.rootObj = xxxMainNode(self.dom)
self.root = self.AddRoot('XML tree', self.rootImage,
data=wx.TreeItemData(self.rootObj))
self.SetItemHasChildren(self.root)
self.testElem = self.dom.createElement('dummy')
self.mainNode.appendChild(self.testElem)
self.Expand(self.root)
# Clear old data and set new
def SetData(self, dom):
self.selection = None
self.UnselectAll()
self.DeleteAllItems()
# Add minimal structure
if self.dom: self.dom.unlink()
self.dom = dom
self.dummyNode = self.dom.createComment('dummy node')
# Find 'resource' child, add it's children
self.mainNode = dom.documentElement
self.rootObj = xxxMainNode(self.dom)
self.root = self.AddRoot('XML tree', self.rootImage,
data=wx.TreeItemData(self.rootObj))
self.SetItemHasChildren(self.root)
nodes = self.mainNode.childNodes[:]
for node in nodes:
if IsObject(node):
self.AddNode(self.root, None, node)
else:
self.mainNode.removeChild(node)
node.unlink()
if self.mainNode.firstChild:
self.testElem = self.dom.createElement('dummy')
self.mainNode.insertBefore(self.testElem, self.mainNode.firstChild)
else:
self.testElem = self.dom.createElement('dummy')
self.mainNode.appendChild(self.testElem)
self.Expand(self.root)
# Add tree item for given parent item if node is DOM element node with
# object/object_ref tag. xxxParent is parent xxx object
def AddNode(self, itemParent, xxxParent, node):
# Set item data to current node
try:
xxx = MakeXXXFromDOM(xxxParent, node)
except:
print 'ERROR: MakeXXXFromDom(%s, %s)' % (xxxParent, node)
raise
treeObj = xxx.treeObject()
# Append tree item
item = self.AppendItem(itemParent, treeObj.treeName(),
image=treeObj.treeImage(),
data=wx.TreeItemData(xxx))
# Different color for references
if treeObj.ref:
self.SetItemTextColour(item, 'DarkGreen')
# Try to find children objects
if treeObj.hasChildren:
nodes = treeObj.element.childNodes[:]
for n in nodes:
if IsObject(n):
self.AddNode(item, treeObj, n)
elif n.nodeType != minidom.Node.ELEMENT_NODE:
treeObj.element.removeChild(n)
n.unlink()
# Insert new item at specific position
def InsertNode(self, itemParent, parent, elem, nextItem):
# Insert in XML tree and wxWin
xxx = MakeXXXFromDOM(parent, elem)
# If nextItem is None, we append to parent, otherwise insert before it
if nextItem.IsOk():
node = self.GetPyData(nextItem).element
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -