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

📄 xrced.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 5 页
字号:
        else:            elem = g.tree.dom.createComment(xml)                # Tempopary xxx object to test things        xxx = MakeXXXFromDOM(parent, elem)                # Check compatibility        if not self.ItemsAreCompatible(parent, xxx.treeObject()): return        # Check parent and child relationships.        # If parent is sizer or notebook, child is of wrong class or        # parent is normal window, child is child container then detach child.        isChildContainer = isinstance(xxx, xxxChildContainer)        parentIsBook = parent.__class__ in [xxxNotebook, xxxChoicebook, xxxListbook]        if isChildContainer and \           ((parent.isSizer and not isinstance(xxx, xxxSizerItem)) or \            (parentIsBook and not isinstance(xxx, xxxPage)) or \           not (parent.isSizer or parentIsBook)):            elem.removeChild(xxx.child.node) # detach child            elem.unlink()           # delete child container            elem = xxx.child.node # replace            # This may help garbage collection            xxx.child.parent = None            isChildContainer = False        # Parent is sizer or notebook, child is not child container        if parent.isSizer and not isChildContainer and not isinstance(xxx, xxxSpacer):            # Create sizer item element            sizerItemElem = MakeEmptyDOM(parent.itemTag)            sizerItemElem.appendChild(elem)            elem = sizerItemElem        elif isinstance(parent, xxxNotebook) and not isChildContainer:            pageElem = MakeEmptyDOM('notebookpage')            pageElem.appendChild(elem)            elem = pageElem        elif isinstance(parent, xxxChoicebook) and not isChildContainer:            pageElem = MakeEmptyDOM('choicebookpage')            pageElem.appendChild(elem)            elem = pageElem        elif isinstance(parent, xxxListbook) and not isChildContainer:            pageElem = MakeEmptyDOM('listbookpage')            pageElem.appendChild(elem)            elem = pageElem        # Insert new node, register undo        newItem = tree.InsertNode(parentLeaf, parent, elem, nextItem)        undoMan.RegisterUndo(UndoPasteCreate(parentLeaf, parent, newItem, selected))        # Scroll to show new item (!!! redundant?)        tree.EnsureVisible(newItem)        tree.SelectItem(newItem)        if not tree.IsVisible(newItem):            tree.ScrollTo(newItem)            tree.Refresh()        # Update view?        if g.testWin and tree.IsHighlatable(newItem):            if conf.autoRefresh:                tree.needUpdate = True                tree.pendingHighLight = newItem            else:                tree.pendingHighLight = None        self.SetModified()        self.SetStatusText('Pasted')    def ItemsAreCompatible(self, parent, child):        # Check compatibility        error = False        # Comments are always compatible        if child.__class__ == xxxComment:            return True        # Top-level        if child.__class__ in [xxxDialog, xxxFrame, xxxWizard]:            # Top-level classes            if parent.__class__ != xxxMainNode: error = True        elif child.__class__ == xxxMenuBar:            # Menubar can be put in frame or dialog            if parent.__class__ not in [xxxMainNode, xxxFrame, xxxDialog]: error = True        elif child.__class__ == xxxToolBar:            # Toolbar can be top-level of child of panel or frame            if parent.__class__ not in [xxxMainNode, xxxPanel, xxxFrame] and \               not parent.isSizer: error = True        elif not parent.hasChildren:            error = True        elif child.__class__ == xxxPanel and parent.__class__ == xxxMainNode:            pass        elif child.__class__ == xxxSpacer:            if not parent.isSizer: error = True        elif child.__class__ == xxxSeparator:            if not parent.__class__ in [xxxMenu, xxxToolBar]: error = True        elif child.__class__ == xxxTool:            if parent.__class__ != xxxToolBar: error = True        elif child.__class__ == xxxMenu:            if not parent.__class__ in [xxxMainNode, xxxMenuBar, xxxMenu]: error = True        elif child.__class__ == xxxMenuItem:            if not parent.__class__ in [xxxMenuBar, xxxMenu]: error = True        elif child.isSizer and parent.__class__ in [xxxNotebook, xxxChoicebook, xxxListbook]:            error = True        else:                           # normal controls can be almost anywhere            if parent.__class__ == xxxMainNode or \               parent.__class__ in [xxxMenuBar, xxxMenu]: error = True        if error:            if parent.__class__ == xxxMainNode: parentClass = 'root'            else: parentClass = parent.className            wx.LogError('Incompatible parent/child: parent is %s, child is %s!' %                       (parentClass, child.className))            return False        return True    def OnMoveUp(self, evt):        selected = tree.selection        if not selected: return        index = tree.ItemIndex(selected)        if index == 0: return # No previous sibling found        # Remove highlight, update testWin        if g.testWin and g.testWin.highLight:            g.testWin.highLight.Remove()            tree.needUpdate = True        # Undo info        self.lastOp = 'MOVEUP'        status = 'Moved before previous sibling'        # Prepare undo data        panel.Apply()        tree.UnselectAll()        parent = tree.GetItemParent(selected)        elem = tree.RemoveLeaf(selected)        nextItem = tree.GetFirstChild(parent)[0]        for i in range(index - 1): nextItem = tree.GetNextSibling(nextItem)        selected = tree.InsertNode(parent, tree.GetPyData(parent).treeObject(), elem, nextItem)        newIndex = tree.ItemIndex(selected)        tree.SelectItem(selected)        undoMan.RegisterUndo(UndoMove(parent, index, parent, newIndex))        self.modified = True        self.SetStatusText(status)        return    def OnMoveDown(self, evt):        selected = tree.selection        if not selected: return        index = tree.ItemIndex(selected)        next = tree.GetNextSibling(selected)        if not next: return        # Remove highlight, update testWin        if g.testWin and g.testWin.highLight:            g.testWin.highLight.Remove()            tree.needUpdate = True        # Undo info        self.lastOp = 'MOVEDOWN'        status = 'Moved after next sibling'        # Prepare undo data        panel.Apply()        tree.UnselectAll()        parent = tree.GetItemParent(selected)        elem = tree.RemoveLeaf(selected)        nextItem = tree.GetFirstChild(parent)[0]        for i in range(index + 1): nextItem = tree.GetNextSibling(nextItem)        selected = tree.InsertNode(parent, tree.GetPyData(parent).treeObject(), elem, nextItem)        newIndex = tree.ItemIndex(selected)        tree.SelectItem(selected)        undoMan.RegisterUndo(UndoMove(parent, index, parent, newIndex))        self.modified = True        self.SetStatusText(status)        return        def OnMoveLeft(self, evt):        selected = tree.selection        if not selected: return        oldParent = tree.GetItemParent(selected)        if not oldParent: return        pparent = tree.GetItemParent(oldParent)        if not pparent: return        # Check compatibility        if not self.ItemsAreCompatible(tree.GetPyData(pparent).treeObject(), tree.GetPyData(selected).treeObject()): return        if g.testWin and g.testWin.highLight:            g.testWin.highLight.Remove()            tree.needUpdate = True        # Undo info        self.lastOp = 'MOVELEFT'        status = 'Made next sibling of parent'        # Prepare undo data        panel.Apply()        tree.UnselectAll()        oldIndex = tree.ItemIndex(selected)        elem = tree.RemoveLeaf(selected)        nextItem = tree.GetFirstChild(pparent)[0]        parentIndex = tree.ItemIndex(oldParent)        for i in range(parentIndex + 1): nextItem = tree.GetNextSibling(nextItem)        # Check parent and child relationships.        # If parent is sizer or notebook, child is of wrong class or        # parent is normal window, child is child container then detach child.        parent = tree.GetPyData(pparent).treeObject()        xxx = MakeXXXFromDOM(parent, elem)        isChildContainer = isinstance(xxx, xxxChildContainer)        if isChildContainer and \           ((parent.isSizer and not isinstance(xxx, xxxSizerItem)) or \            (isinstance(parent, xxxNotebook) and not isinstance(xxx, xxxNotebookPage)) or \           not (parent.isSizer or isinstance(parent, xxxNotebook))):            elem.removeChild(xxx.child.node) # detach child            elem.unlink()           # delete child container            elem = xxx.child.node # replace            # This may help garbage collection            xxx.child.parent = None            isChildContainer = False        # Parent is sizer or notebook, child is not child container        if parent.isSizer and not isChildContainer and not isinstance(xxx, xxxSpacer):            # Create sizer item element            sizerItemElem = MakeEmptyDOM('sizeritem')            sizerItemElem.appendChild(elem)            elem = sizerItemElem        elif isinstance(parent, xxxNotebook) and not isChildContainer:            pageElem = MakeEmptyDOM('notebookpage')            pageElem.appendChild(elem)            elem = pageElem        selected = tree.InsertNode(pparent, tree.GetPyData(pparent).treeObject(), elem, nextItem)        newIndex = tree.ItemIndex(selected)        tree.SelectItem(selected)        undoMan.RegisterUndo(UndoMove(oldParent, oldIndex, pparent, newIndex))                self.modified = True        self.SetStatusText(status)    def OnMoveRight(self, evt):        selected = tree.selection        if not selected: return        oldParent = tree.GetItemParent(selected)        if not oldParent: return                newParent = tree.GetPrevSibling(selected)        if not newParent: return        parent = tree.GetPyData(newParent).treeObject()        # Check compatibility        if not self.ItemsAreCompatible(parent, tree.GetPyData(selected).treeObject()): return        # Remove highlight, update testWin        if g.testWin and g.testWin.highLight:            g.testWin.highLight.Remove()            tree.needUpdate = True        # Prepare undo data        panel.Apply()        tree.UnselectAll()        # Undo info        self.lastOp = 'MOVERIGHT'        status = 'Made last child of previous sibling'        oldIndex = tree.ItemIndex(selected)        elem = tree.RemoveLeaf(selected)        # Check parent and child relationships.        # If parent is sizer or notebook, child is of wrong class or        # parent is normal window, child is child container then detach child.        xxx = MakeXXXFromDOM(parent, elem)        isChildContainer = isinstance(xxx, xxxChildContainer)        if isChildContainer and \           ((parent.isSizer and not isinstance(xxx, xxxSizerItem)) or \            (isinstance(parent, xxxNotebook) and not isinstance(xxx, xxxNotebookPage)) or \           not (parent.isSizer or isinstance(parent, xxxNotebook))):            elem.removeChild(xxx.child.node) # detach child            elem.unlink()           # delete child container            elem = xxx.child.node # replace            # This may help garbage collection            xxx.child.parent = None            isChildContainer = False        # Parent is sizer or notebook, child is not child container        if parent.isSizer and not isChildContainer and not isinstance(xxx, xxxSpacer):            # Create sizer item element            sizerItemElem = MakeEmptyDOM('sizeritem')            sizerItemElem.appendChild(elem)            elem = sizerItemElem        elif isinstance(parent, xxxNotebook) and not isChildContainer:            pageElem = MakeEmptyDOM('notebookpage')            pageElem.appendChild(elem)            elem = pageElem        selected = tree.InsertNode(newParent, tree.GetPyData(newParent).treeObject(), elem, wx.TreeItemId())        newIndex = tree.ItemIndex(selected)        tree.Expand(selected)        tree.SelectItem(selected)        undoMan.RegisterUndo(UndoMove(oldParent, oldIndex, newParent, newIndex))        self.modified = True        self.SetStatusText(status)    def OnCutDelete(self, evt):        selected = tree.selection        if not selected: return         # key pressed event        # Undo info        if evt.GetId() == wx.ID_CUT:            self.lastOp = 'CUT'            status = 'Removed to clipboard'        else:            self.lastOp = 'DELETE'            status = 'Deleted'        # Delete testWin?        if g.testWin:            # If deleting top-level item, delete testWin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -