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

📄 xxx.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 4 页
字号:
# Name:         xxx.py ('xxx' is easy to distinguish from 'wx' :) )# Purpose:      XML interface classes# Author:       Roman Rolinsky <rolinsky@mema.ucl.ac.be># Created:      22.08.2001# RCS-ID:       $Id: xxx.py 47172 2007-07-05 21:51:46Z ROL $from xml.dom import minidomfrom globals import *from params import *import traceback, types# Base class for interface parameter classesclass xxxNode:    def __init__(self, node):        self.node = node    def remove(self):        self.node.parentNode.removeChild(self.node)        self.node.unlink()# Generic (text) parameter classclass xxxParam(xxxNode):    # Standard use: for text nodes    def __init__(self, node):        xxxNode.__init__(self, node)        if not node.hasChildNodes():            # If does not have child nodes, create empty text node            text = g.tree.dom.createTextNode('')            node.appendChild(text)        else:            text = node.childNodes[0] # first child must be text node            assert text.nodeType == minidom.Node.TEXT_NODE            # Append other text nodes if present and delete them            extraText = ''            for n in node.childNodes[1:]:                if n.nodeType == minidom.Node.TEXT_NODE:                    extraText += n.data                    node.removeChild(n)                    n.unlink()                else: break            if extraText: text.data = text.data + extraText        # Use convertion from unicode to current encoding        self.textNode = text    # Value returns string    if wx.USE_UNICODE:   # no conversion is needed        def value(self):            return self.textNode.data        def update(self, value):            self.textNode.data = value    else:        def value(self):            try:                return self.textNode.data.encode(g.currentEncoding)            except LookupError:                return self.textNode.data.encode()        def update(self, value):            try: # handle exception if encoding is wrong                self.textNode.data = unicode(value, g.currentEncoding)            except UnicodeDecodeError:                self.textNode.data = unicode(value)                #wx.LogMessage("Unicode error: set encoding in file\nglobals.py to something appropriate")# Integer parameterclass xxxParamInt(xxxParam):    # Standard use: for text nodes    def __init__(self, node):        xxxParam.__init__(self, node)    # Value returns string    def value(self):        try:            return int(self.textNode.data)        except ValueError:            return -1                   # invalid value    def update(self, value):        self.textNode.data = str(value)# Content parameterclass xxxParamContent(xxxNode):    def __init__(self, node):        xxxNode.__init__(self, node)        data, l = [], []                # data is needed to quicker value retrieval        nodes = node.childNodes[:]      # make a copy of the child list        for n in nodes:            if n.nodeType == minidom.Node.ELEMENT_NODE:                assert n.tagName == 'item', 'bad content content'                if not n.hasChildNodes():                    # If does not have child nodes, create empty text node                    text = g.tree.dom.createTextNode('')                    node.appendChild(text)                else:                    # !!! normalize?                    text = n.childNodes[0] # first child must be text node                    assert text.nodeType == minidom.Node.TEXT_NODE                l.append(text)                data.append(text.data)            else:                       # remove other                node.removeChild(n)                n.unlink()        self.l, self.data = l, data    def value(self):        return self.data    def update(self, value):        # If number if items is not the same, recreate children        if len(value) != len(self.l):   # remove first if number of items has changed            childNodes = self.node.childNodes[:]            for n in childNodes:                self.node.removeChild(n)            l = []            for str in value:                itemElem = g.tree.dom.createElement('item')                itemText = g.tree.dom.createTextNode(str)                itemElem.appendChild(itemText)                self.node.appendChild(itemElem)                l.append(itemText)            self.l = l        else:            for i in range(len(value)):                self.l[i].data = value[i]        self.data = value# Content parameter for checklistclass xxxParamContentCheckList(xxxNode):    def __init__(self, node):        xxxNode.__init__(self, node)        data, l = [], []                # data is needed to quicker value retrieval        nodes = node.childNodes[:]      # make a copy of the child list        for n in nodes:            if n.nodeType == minidom.Node.ELEMENT_NODE:                assert n.tagName == 'item', 'bad content content'                checked = n.getAttribute('checked')                if not checked: checked = 0                if not n.hasChildNodes():                    # If does not have child nodes, create empty text node                    text = g.tree.dom.createTextNode('')                    node.appendChild(text)                else:                    # !!! normalize?                    text = n.childNodes[0] # first child must be text node                    assert text.nodeType == minidom.Node.TEXT_NODE                l.append((text, n))                data.append((str(text.data), int(checked)))            else:                       # remove other                node.removeChild(n)                n.unlink()        self.l, self.data = l, data    def value(self):        return self.data    def update(self, value):        # If number if items is not the same, recreate children        if len(value) != len(self.l):   # remove first if number of items has changed            childNodes = self.node.childNodes[:]            for n in childNodes:                self.node.removeChild(n)            l = []            for s,ch in value:                itemElem = g.tree.dom.createElement('item')                # Add checked only if True                if ch: itemElem.setAttribute('checked', '1')                itemText = g.tree.dom.createTextNode(s)                itemElem.appendChild(itemText)                self.node.appendChild(itemElem)                l.append((itemText, itemElem))            self.l = l        else:            for i in range(len(value)):                self.l[i][0].data = value[i][0]                self.l[i][1].setAttribute('checked', str(value[i][1]))        self.data = value# Bitmap parameterclass xxxParamBitmap(xxxParam):    def __init__(self, node):        xxxParam.__init__(self, node)        self.stock_id = node.getAttribute('stock_id')    def value(self):        return [self.stock_id, xxxParam.value(self)]    def update(self, value):        self.stock_id = value[0]        if self.stock_id:            self.node.setAttribute('stock_id', self.stock_id)        elif self.node.hasAttribute('stock_id'):            self.node.removeAttribute('stock_id')        xxxParam.update(self, value[1])################################################################################# Classes to interface DOM objectsclass xxxObject:    # Default behavior    hasChildren = False                 # has children elements?    hasStyle = True                     # almost everyone    hasName = True                      # has name attribute?    isSizer = hasChild = False    isElement = True    allParams = []                     # Some nodes have no parameters    # Style parameters (all optional)    styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'tooltip']    # Special parameters    specials = []    # Bitmap tags    bitmapTags = ['bitmap', 'bitmap2', 'icon']    # Required paremeters: none by default    required = []    # Default parameters with default values    default = {}    # Parameter types    paramDict = {}    # Window styles and extended styles    winStyles = []    # Tree icon index    #image = -1    # Construct a new xxx object from DOM element    # parent is parent xxx object (or None if none), element is DOM element object    def __init__(self, parent, element, refElem=None):        self.parent = parent        self.node = element        self.refElem = refElem        self.undo = None        # Reference are dereferenced        if element.tagName == 'object_ref':            # Find original object            self.ref = element.getAttribute('ref')            if refElem:                self.className = self.refElem.getAttribute('class')            else:                self.className = 'xxxUnknown'            self.required = []        else:            # Get attributes            self.ref = None            self.className = element.getAttribute('class')        self.subclass = element.getAttribute('subclass')        if self.hasName: self.name = element.getAttribute('name')        # Set parameters (text element children)        self.params = {}        for n in element.childNodes[:]:            if n.nodeType == minidom.Node.ELEMENT_NODE:                tag = n.tagName                if tag in ['object', 'object_ref']:                    continue            # do nothing for object children here                elif tag not in self.allParams and tag not in self.styles:                    print 'WARNING: unknown parameter for %s: %s' % \                          (self.className, tag)                elif tag in self.specials:                    self.special(tag, n)                elif tag == 'content':                    if self.className == 'wxCheckListBox':                        self.params[tag] = xxxParamContentCheckList(n)                    else:                        self.params[tag] = xxxParamContent(n)                elif tag == 'font': # has children                    self.params[tag] = xxxParamFont(element, n)                elif tag in self.bitmapTags:                    # Can have attributes                    self.params[tag] = xxxParamBitmap(n)                else:                   # simple parameter                    self.params[tag] = xxxParam(n)            elif n.nodeType == minidom.Node.TEXT_NODE and n.data.isspace():                # Remove empty text nodes                element.removeChild(n)                n.unlink()        # Check that all required params are set        for param in self.required:            if not self.params.has_key(param):                # If default is specified, set it                if self.default.has_key(param):                    elem = g.tree.dom.createElement(param)                    if param == 'content':                        if self.className == 'wxCheckListBox':                            self.params[param] = xxxParamContentCheckList(elem)                        else:                            self.params[param] = xxxParamContent(elem)                    else:                        self.params[param] = xxxParam(elem)                    # Find place to put new element: first present element after param                    found = False                    paramStyles = self.allParams + self.styles                    for p in paramStyles[paramStyles.index(param) + 1:]:                        # Content params don't have same type                        if self.params.has_key(p) and p != 'content':                            found = True                            break                    if found:                        nextTextElem = self.params[p].node                        self.node.insertBefore(elem, nextTextElem)                    else:                        self.node.appendChild(elem)                else:                    wx.LogWarning('Required parameter %s of %s missing' %                                 (param, self.className))    # Returns real tree object    def treeObject(self):        if self.hasChild: return self.child        return self    # Returns tree image index    def treeImage(self):        if self.hasChild: return self.child.treeImage()        return self.image    # Class name plus wx name    def treeName(self):        if self.hasChild: return self.child.treeName()        if self.subclass: className = self.subclass        else: className = self.className        if self.hasName and self.name: return className + ' "' + self.name + '"'        return className    # Class name or subclass    def panelName(self):        if self.subclass: name = self.subclass + '(' + self.className + ')'        name = self.className        if self.ref: name = 'ref: ' + self.ref + ', ' + name        return name    # Sets name of tree object    def setTreeName(self, name):        if self.hasChild: obj = self.child        else: obj = self        obj.name = name        obj.node.setAttribute('name', name)    # Set normal (text) params    def set(self, param, value):        try:            self.params[param].update(value)

⌨️ 快捷键说明

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