📄 xxx.py
字号:
#if not os.path.dirname(path) and os.path.isfile(path): except ImportError: wx.LogError('ctypes module not found') globals()[localname] = None return try: dl = ctypes.CDLL(path) globals()[localname] = dl # Register AddXmlHandlers() if exists try: register(dl.AddXmlHandlers) except: pass except: wx.LogError('error loading dynamic library: %s' % path) print traceback.print_exc()# Called when creating test windowdef addHandlers(): for h in _handlers: if _CFuncPtr and isinstance(h, _CFuncPtr): try: apply(h, ()) except: wx.LogError('error calling DL func: "%s"' % h) print traceback.print_exc() else: try: xrc.XmlResource.Get().AddHandler(apply(h, ())) except: wx.LogError('error adding XmlHandler: "%s"' % h) print traceback.print_exc()def custom(klassName, klass='unknown'): """Define custom control based on xrcClass. klass: new object name xrcClass: name of an existing XRC object class or a class object defining class parameters. """ if type(klass) is str: # Copy correct xxx class under new name kl = xxxDict[klass] xxxClass = types.ClassType('xxx' + klassName, kl.__bases__, kl.__dict__) else: xxxClass = klass # Register param IDs for param in klass.allParams + klass.paramDict.keys(): if not paramIDs.has_key(param): paramIDs[param] = wx.NewId() # Insert in dictionaty xxxDict[klassName] = xxxClass # Add to menu g.pullDownMenu.addCustom(klassName)class xxxParamComment(xxxParam): locals = {} # namespace for comment directives allow = None # undefined initial state for current file def __init__(self, node): xxxNode.__init__(self, node) self.textNode = node # Parse "pragma" comments if enabled if node.data and node.data[0] == '%' and g.conf.allowExec != 'no' and \ xxxParamComment.allow is not False: # Show warning if g.conf.allowExec == 'ask' and xxxParamComment.allow is None: flags = wx.ICON_EXCLAMATION | wx.YES_NO | wx.CENTRE dlg = wx.MessageDialog(g.frame, '''This file contains executable %comment directives. Allow to execute?''', 'Warning', flags) say = dlg.ShowModal() dlg.Destroy() if say == wx.ID_YES: xxxParamComment.allow = True else: xxxParamComment.allow = False try: code = node.data[1:] exec code in globals(), self.locals except: wx.LogError('exec error: "%s"' % code) print traceback.print_exc()class xxxComment(xxxObject): hasStyle = hasName = False allParams = required = ['comment'] def __init__(self, parent, node): self.parent = parent self.node = node self.isElement = False self.undo = None self.className = 'comment' self.ref = self.subclass = None self.params = {'comment': xxxParamComment(node)} def treeName(self): # Replace newlines by \n to avoid tree item resizing return self.params['comment'].value().replace('\n', r'\n')################################################################################# Mapping of XRC names to xxx classesxxxDict = { 'wxPanel': xxxPanel, 'wxDialog': xxxDialog, 'wxFrame': xxxFrame, 'tool': xxxTool, 'wxToolBar': xxxToolBar, 'wxStatusBar': xxxStatusBar, 'wxWizard': xxxWizard, 'wxWizardPage': xxxWizardPage, 'wxWizardPageSimple': xxxWizardPageSimple, 'wxBitmap': xxxBitmap, 'wxIcon': xxxIcon, 'wxButton': xxxButton, 'wxBitmapButton': xxxBitmapButton, 'wxRadioButton': xxxRadioButton, 'wxSpinButton': xxxSpinButton, 'wxToggleButton' : xxxToggleButton, 'wxStaticBox': xxxStaticBox, 'wxStaticBitmap': xxxStaticBitmap, 'wxRadioBox': xxxRadioBox, 'wxComboBox': xxxComboBox, 'wxCheckBox': xxxCheckBox, 'wxListBox': xxxListBox, 'wxStaticText': xxxStaticText, 'wxStaticLine': xxxStaticLine, 'wxTextCtrl': xxxTextCtrl, 'wxChoice': xxxChoice, 'wxSlider': xxxSlider, 'wxGauge': xxxGauge, 'wxScrollBar': xxxScrollBar, 'wxTreeCtrl': xxxTreeCtrl, 'wxListCtrl': xxxListCtrl, 'wxCheckListBox': xxxCheckList, 'notebookpage': xxxPage, 'choicebookpage': xxxPage, 'listbookpage': xxxPage, 'wxNotebook': xxxNotebook, 'wxChoicebook': xxxChoicebook, 'wxListbook': xxxListbook, 'wxSplitterWindow': xxxSplitterWindow, 'wxHtmlWindow': xxxHtmlWindow, 'wxCalendarCtrl': xxxCalendarCtrl, 'wxGenericDirCtrl': xxxGenericDirCtrl, 'wxSpinCtrl': xxxSpinCtrl, 'wxScrolledWindow': xxxScrolledWindow, 'wxGrid': xxxGrid, 'wxFilePickerCtrl': xxxFilePickerCtrl, 'wxDatePickerCtrl': xxxDateCtrl, 'wxBoxSizer': xxxBoxSizer, 'wxStaticBoxSizer': xxxStaticBoxSizer, 'wxGridSizer': xxxGridSizer, 'wxFlexGridSizer': xxxFlexGridSizer, 'wxGridBagSizer': xxxGridBagSizer, 'wxStdDialogButtonSizer': xxxStdDialogButtonSizer, 'sizeritem': xxxSizerItem, 'button': xxxSizerItemButton, 'spacer': xxxSpacer, 'wxMenuBar': xxxMenuBar, 'wxMenu': xxxMenu, 'wxMenuItem': xxxMenuItem, 'separator': xxxSeparator, 'unknown': xxxUnknown, 'comment': xxxComment, }# Create IDs for all parameters of all classesparamIDs = {'fg': wx.NewId(), 'bg': wx.NewId(), 'exstyle': wx.NewId(), 'font': wx.NewId(), 'enabled': wx.NewId(), 'focused': wx.NewId(), 'hidden': wx.NewId(), 'tooltip': wx.NewId(), 'encoding': wx.NewId(), 'cellpos': wx.NewId(), 'cellspan': wx.NewId(), 'text': wx.NewId() }for cl in xxxDict.values(): if cl.allParams: for param in cl.allParams + cl.paramDict.keys(): if not paramIDs.has_key(param): paramIDs[param] = wx.NewId()################################################################################# Helper functions# Test for object elementsdef IsObject(node): return node.nodeType == minidom.Node.ELEMENT_NODE and \ node.tagName in ['object', 'object_ref'] or \ node.nodeType == minidom.Node.COMMENT_NODE# Make XXX object from some DOM object, selecting correct classdef MakeXXXFromDOM(parent, node): if node.nodeType == minidom.Node.COMMENT_NODE: return xxxComment(parent, node) if node.tagName == 'object_ref': ref = node.getAttribute('ref') refElem = FindResource(ref) if refElem: cls = refElem.getAttribute('class') else: return xxxUnknown(parent, node) else: refElem = None cls = node.getAttribute('class') try: klass = xxxDict[cls] except KeyError: # If we encounter a weird class, use unknown template print 'WARNING: unsupported class:', node.getAttribute('class') klass = xxxUnknown return klass(parent, node, refElem)# Make empty DOM elementdef MakeEmptyDOM(className): elem = g.tree.dom.createElement('object') elem.setAttribute('class', className) # Set required and default parameters xxxClass = xxxDict[className] defaultNotRequired = filter(lambda x, l=xxxClass.required: x not in l, xxxClass.default.keys()) for param in xxxClass.required + defaultNotRequired: textElem = g.tree.dom.createElement(param) try: textNode = g.tree.dom.createTextNode(xxxClass.default[param]) except KeyError: textNode = g.tree.dom.createTextNode('') textElem.appendChild(textNode) elem.appendChild(textElem) return elem# Make empty XXX objectdef MakeEmptyXXX(parent, className): # Make corresponding DOM object first elem = MakeEmptyDOM(className) # Special handling, e.g. if parent is a sizer, we should create # sizeritem object, except for spacers, etc. if parent: if parent.isSizer and className != 'spacer': sizerItemElem = MakeEmptyDOM(parent.itemTag) sizerItemElem.appendChild(elem) elem = sizerItemElem elif isinstance(parent, xxxNotebook): pageElem = MakeEmptyDOM('notebookpage') pageElem.appendChild(elem) elem = pageElem elif isinstance(parent, xxxChoicebook): pageElem = MakeEmptyDOM('choicebookpage') pageElem.appendChild(elem) elem = pageElem elif isinstance(parent, xxxListbook): pageElem = MakeEmptyDOM('listbookpage') pageElem.appendChild(elem) elem = pageElem # Now just make object xxx = MakeXXXFromDOM(parent, elem) # Special defaults for new panels and controls if isinstance(xxx, xxxSizerItem): if isinstance(xxx.child, xxxContainer) and not xxx.child.isSizer: for param,v in xxxSizerItem.defaults_panel.items(): xxx.set(param, v) elif isinstance(xxx.child, xxxObject): for param,v in xxxSizerItem.defaults_control.items(): xxx.set(param, v) return xxx # Make empty DOM element for referencedef MakeEmptyRefDOM(ref): elem = g.tree.dom.createElement('object_ref') elem.setAttribute('ref', ref) return elem# Make empty XXX objectdef MakeEmptyRefXXX(parent, ref): # Make corresponding DOM object first elem = MakeEmptyRefDOM(ref) # If parent is a sizer, we should create sizeritem object, except for spacers if parent: if parent.isSizer: sizerItemElem = MakeEmptyDOM(parent.itemTag) sizerItemElem.appendChild(elem) elem = sizerItemElem elif isinstance(parent, xxxNotebook): pageElem = MakeEmptyDOM('notebookpage') pageElem.appendChild(elem) elem = pageElem elif isinstance(parent, xxxChoicebook): pageElem = MakeEmptyDOM('choicebookpage') pageElem.appendChild(elem) elem = pageElem elif isinstance(parent, xxxListbook): pageElem = MakeEmptyDOM('listbookpage') pageElem.appendChild(elem) elem = pageElem # Now just make object xxx = MakeXXXFromDOM(parent, elem) # Label is not used for references xxx.allParams = xxx.allParams[:] #xxx.allParams.remove('label') return xxx# Make empty comment nodedef MakeEmptyCommentDOM(): node = g.tree.dom.createComment('') return node# Make empty xxxCommentdef MakeEmptyCommentXXX(parent): node = MakeEmptyCommentDOM() # Now just make object xxx = MakeXXXFromDOM(parent, node) return xxx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -