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

📄 xrced.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 5 页
字号:
            remove = False            tag = node.tagName            if tag == 'object':                if not klass.hasChildren:  remove = True            elif tag not in klass.allParams and \                     (not klass.hasStyle or tag not in klass.styles):                remove = True            else:                tags.append(tag)            if remove:                elem.removeChild(node)                node.unlink()                # Remove sizeritem child if spacer        if className == 'spacer' and xxx.className != 'spacer':            sizeritem = elem.parentNode            assert sizeritem.getAttribute('class') == 'sizeritem'            sizeritem.removeChild(elem)            elem.unlink()            elem = sizeritem            tree.GetPyData(selected).hasChild = False        elif xxx.className == 'spacer' and className != 'spacer':            # Create sizeritem element            assert xxx.parent.isSizer            elem.setAttribute('class', 'sizeritem')            node = MakeEmptyDOM(className)            elem.appendChild(node)            # Replace to point to new object            xxx = xxxSizerItem(xxx.parent, elem)            elem = node            tree.SetPyData(selected, xxx)            xxx = xxx.child        else:            # Copy parameters present in dummy but not in elem            for node in dummy.childNodes:                if node.tagName not in tags:  elem.appendChild(node.cloneNode(True))        dummy.unlink()                # Change class name        elem.setAttribute('class', className)        if elem.hasAttribute('subclass'):            elem.removeAttribute('subclass') # clear subclassing        # Re-create xxx element        xxx = MakeXXXFromDOM(xxx.parent, elem)        # Remove incompatible style flags        if 'style' in xxx.params:            styles = map(string.strip, xxx.params['style'].value().split('|'))            newStyles = [s for s in styles if s in klass.winStyles or s in genericStyles]            if newStyles != styles:                if newStyles:                    value = reduce(lambda a,b: a+'|'+b, newStyles)                else:                    value = ''                xxx.params['style'].update(value)        # Update parent in child objects        if tree.ItemHasChildren(selected):            i, cookie = tree.GetFirstChild(selected)            while i.IsOk():                x = tree.GetPyData(i)                x.parent = xxx                if x.hasChild: x.child.parent = xxx                i, cookie = tree.GetNextChild(selected, cookie)        # Update tree        if tree.GetPyData(selected).hasChild: # child container            container = tree.GetPyData(selected)            container.resetChild(xxx)            xxx = container        else:            tree.SetPyData(selected, xxx)        tree.SetItemText(selected, xxx.treeName())        tree.SetItemImage(selected, xxx.treeImage())        # Set default name for top-level windows        if parent.__class__ == xxxMainNode:            cl = xxx.treeObject().__class__            frame.maxIDs[cl] += 1            xxx.setTreeName('%s%d' % (defaultIDs[cl], frame.maxIDs[cl]))        # Update panel        g.panel.SetData(xxx)        # Update tools        g.tools.UpdateUI()        #undoMan.RegisterUndo(UndoPasteCreate(parentLeaf, parent, newItem, selected))        # Update view?        if g.testWin and tree.IsHighlatable(selected):            if conf.autoRefresh:                tree.needUpdate = True                tree.pendingHighLight = selected            else:                tree.pendingHighLight = None        tree.SetFocus()        self.SetModified()    # Expand/collapse subtree    def OnExpand(self, evt):        if tree.selection: tree.ExpandAll(tree.selection)        else: tree.ExpandAll(tree.root)    def OnCollapse(self, evt):        if tree.selection: tree.CollapseAll(tree.selection)        else: tree.CollapseAll(tree.root)    def OnPullDownHighlight(self, evt):        menuId = evt.GetMenuId()        if menuId != -1:            menu = evt.GetEventObject()            try:                help = menu.GetHelpString(menuId)                self.SetStatusText(help)            except:                self.SetStatusText('')        else:            self.SetStatusText('')    def OnUpdateUI(self, evt):        if evt.GetId() in [wx.ID_CUT, wx.ID_COPY, self.ID_DELETE]:            evt.Enable(tree.selection is not None and tree.selection != tree.root)        elif evt.GetId() == wx.ID_SAVE:            evt.Enable(self.modified)        elif evt.GetId() in [wx.ID_PASTE, self.ID_TOOL_PASTE]:            evt.Enable(tree.selection is not None)        elif evt.GetId() in [self.ID_TEST,                             self.ID_MOVEUP, self.ID_MOVEDOWN,                             self.ID_MOVELEFT, self.ID_MOVERIGHT]:            evt.Enable(tree.selection is not None and tree.selection != tree.root)        elif evt.GetId() in [self.ID_LOCATE, self.ID_TOOL_LOCATE,                             self.ID_REFRESH]:            evt.Enable(g.testWin is not None)        elif evt.GetId() == wx.ID_UNDO:  evt.Enable(undoMan.CanUndo())        elif evt.GetId() == wx.ID_REDO:  evt.Enable(undoMan.CanRedo())    def OnIdle(self, evt):        if self.inIdle: return          # Recursive call protection        self.inIdle = True        #print 'onidle',tree.needUpdate,tree.pendingHighLight        try:            if tree.needUpdate:                if conf.autoRefresh:                    if g.testWin:                        #self.SetStatusText('Refreshing test window...')                        # (re)create                        tree.CreateTestWin(g.testWin.item)                        #self.SetStatusText('')                    tree.needUpdate = False            elif tree.pendingHighLight:                try:                    tree.HighLight(tree.pendingHighLight)                except:                    # Remove highlight if any problem                    if g.testWin and g.testWin.highLight:                        g.testWin.highLight.Remove()                    tree.pendingHighLight = None                    raise            else:                evt.Skip()        finally:            self.inIdle = False    def OnIconize(self, evt):        if evt.Iconized():            conf.x, conf.y = self.GetPosition()            conf.width, conf.height = self.GetSize()            if conf.embedPanel:                conf.sashPos = self.splitter.GetSashPosition()            else:                conf.panelX, conf.panelY = self.miniFrame.GetPosition()                conf.panelWidth, conf.panelHeight = self.miniFrame.GetSize()                self.miniFrame.Show(False)        else:            if not conf.embedPanel:                self.miniFrame.Show(True)        evt.Skip()    def OnCloseWindow(self, evt):        if not self.AskSave(): return        if g.testWin: g.testWin.Destroy()        if not panel.GetPageCount() == 2:            panel.page2.Destroy()        else:            # If we don't do this, page does not get destroyed (a bug?)            panel.RemovePage(1)        if not self.IsIconized():            conf.x, conf.y = self.GetPosition()            if wx.Platform == '__WXMAC__':                conf.width, conf.height = self.GetClientSize()            else:                conf.width, conf.height = self.GetSize()            if conf.embedPanel:                conf.sashPos = self.splitter.GetSashPosition()            else:                conf.panelX, conf.panelY = self.miniFrame.GetPosition()                conf.panelWidth, conf.panelHeight = self.miniFrame.GetSize()        evt.Skip()    def CreateLocalConf(self, path):        name = os.path.splitext(path)[0]        name += '.xcfg'        return wx.FileConfig(localFilename=name)    def Clear(self):        self.dataFile = ''        conf.localconf = None        undoMan.Clear()        self.SetModified(False)        tree.Clear()        panel.Clear()        if g.testWin:            g.testWin.Destroy()            g.testWin = None        # Numbers for new controls        self.maxIDs = {}        for cl in [xxxPanel, xxxDialog, xxxFrame,                   xxxMenuBar, xxxMenu, xxxToolBar,                   xxxWizard, xxxBitmap, xxxIcon]:            self.maxIDs[cl] = 0        # Restore handlers, menu, etc. to initial        setHandlers(self.handlers[:])        g.pullDownMenu.custom = self.custom[:]        # Remove modules imported from comment directives        map(sys.modules.pop, [m for m in sys.modules if m not in self.modules])        xxxParamComment.locals = {}     # clear local namespace        xxxParamComment.allow = None    # clear execution state    def SetModified(self, state=True):        self.modified = state        name = os.path.basename(self.dataFile)        if not name: name = defaultName        if state:            self.SetTitle(progname + ': ' + name + ' *')        else:            self.SetTitle(progname + ': ' + name)    def Open(self, path):        if not os.path.exists(path):            wx.LogError('File does not exists: %s' % path)            return False        # Try to read the file        try:            f = open(path)            self.Clear()            dom = minidom.parse(f)            f.close()            # Set encoding global variable and default encoding            if dom.encoding:                g.currentEncoding = dom.encoding                wx.SetDefaultPyEncoding(g.currentEncoding.encode())            else:                g.currentEncoding = ''            # Change dir            self.dataFile = path = os.path.abspath(path)            dir = os.path.dirname(path)            if dir: os.chdir(dir)            # Allow importing modules from the same directory            sys.path = sys_path + [dir]            tree.SetData(dom)            self.SetTitle(progname + ': ' + os.path.basename(path))            conf.localconf = self.CreateLocalConf(self.dataFile)        except:            # Nice exception printing            inf = sys.exc_info()            wx.LogError(traceback.format_exception(inf[0], inf[1], None)[-1])            wx.LogError('Error reading file: %s' % path)            if debug: raise            return False        return True    def Indent(self, node, indent = 0):        if node.nodeType == minidom.Node.COMMENT_NODE:            text = self.domCopy.createTextNode('\n' + ' ' * indent)            node.parentNode.insertBefore(text, node)            return                      # no children        # Copy child list because it will change soon        children = node.childNodes[:]        # Main node doesn't need to be indented        if indent:            text = self.domCopy.createTextNode('\n' + ' ' * indent)            node.parentNode.insertBefore(text, node)        if children:            # Append newline after last child, except for text nodes            if children[-1].nodeType == minidom.Node.ELEMENT_NODE:                text = self.domCopy.createTextNode('\n' + ' ' * indent)                node.appendChild(text)            # Indent children which are elements            for n in children:                if n.nodeType == minidom.Node.ELEMENT_NODE or \                       n.nodeType == minidom.Node.COMMENT_NODE:                    self.Indent(n, indent + 2)    def Save(self, path):        try:            import codecs            # Apply changes            if tree.selection and panel.IsModified():                self.OnRefresh(wx.CommandEvent())            if g.currentEncoding:                f = codecs.open(path, 'wt', g.currentEncoding)            else:                f = codecs.open(path, 'wt')            # Make temporary copy for formatting it            # !!! We can't clone dom node, it works only once            #self.domCopy = tree.dom.cloneNode(True)            self.domCopy = MyDocument()            mainNode = self.domCopy.appendChild(tree.mainNode.cloneNode(True))            # Remove first child (test element)            testElem = mainNode.firstChild            mainNode.removeChild(testElem)            testElem.unlink()            self.Indent(mainNode)            self.domCopy.writexml(f, encoding = g.currentEncoding)            f.close()            self.domCopy.unlink()            self.domCopy = None            self.SetModified(False)            panel.SetModified(False)            conf.localconf.Flush()        except:            inf = sys.exc_info()         

⌨️ 快捷键说明

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