⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.py

📁 Wxpython Implemented on Windows CE, Source code
💻 PY
📖 第 1 页 / 共 4 页
字号:
             ],
            ['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 + -