X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/00d153468c7d1be2093de839bcf70b6a45aa388f..bdba6fdc0db2329dbe2d4fe45262631b1b506caa:/wxPython/wx/tools/XRCed/xxx.py diff --git a/wxPython/wx/tools/XRCed/xxx.py b/wxPython/wx/tools/XRCed/xxx.py index 1ee0ffa5a3..de19e8910b 100644 --- a/wxPython/wx/tools/XRCed/xxx.py +++ b/wxPython/wx/tools/XRCed/xxx.py @@ -315,6 +315,14 @@ class xxxObject: 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) + except KeyError: + p = xxxParam(g.tree.dom.createElement(param)) + p.update(value) + self.params[param] = p # Special processing for growablecols-like parameters # represented by several nodes def special(self, tag, node): @@ -837,7 +845,8 @@ class xxxChildContainer(xxxObject): class xxxSizerItem(xxxChildContainer): allParams = ['option', 'flag', 'border', 'minsize', 'ratio'] paramDict = {'option': ParamInt, 'minsize': ParamPosSize, 'ratio': ParamPosSize} - #default = {'cellspan': '1,1'} + defaults_panel = {} + defaults_control = {} def __init__(self, parent, element, refElem=None): # For GridBag sizer items, extra parameters added if isinstance(parent, xxxGridBagSizer): @@ -847,6 +856,13 @@ class xxxSizerItem(xxxChildContainer): if 'pos' in self.child.allParams: self.child.allParams = self.child.allParams[:] self.child.allParams.remove('pos') + # Set defaults for some children types + if isinstance(self.child, xxxContainer) and not self.child.isSizer: + for param,v in self.defaults_panel.items(): + self.set(param, v) + elif isinstance(self.child, xxxObject): + for param,v in self.defaults_control.items(): + self.set(param, v) def resetChild(self, xxx): xxxChildContainer.resetChild(self, xxx) # Remove pos parameter - not needed for sizeritems @@ -919,10 +935,16 @@ class xxxUnknown(xxxObject): ################################################################################ # Comment -_handlers = [] -_CFuncPtr = None +_handlers = [] # custom handler classes/funcs +def getHandlers(): + return _handlers +def setHandlers(handlers): + global _handlers + _handlers = handlers +_CFuncPtr = None # ctypes function type def register(hndlr): + """Register hndlr function or XmlResourceHandler class.""" if _CFuncPtr and isinstance(hndlr, _CFuncPtr): _handlers.append(hndlr) return @@ -934,24 +956,36 @@ def register(hndlr): _handlers.append(hndlr) def load_dl(path, localname=''): + """Load shared/dynamic library into xxx namespace. + + If path is not absolute or relative, try to find in the module's directory. + """ + if not localname: + localname = os.path.basename(os.path.splitext(path)[0]) try: import ctypes global _CFuncPtr - _CFuncPtr = ctypes._CFuncPtr + _CFuncPtr = ctypes._CFuncPtr # use as a flag of loaded ctypes + #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) - if not localname: - localname = os.path.basename(os.path.splitext(dl._name)[0]) globals()[localname] = dl + # Register AddXmlHandlers() if exists + try: + register(dl.AddXmlHandlers) + except: + pass except: - wx.LogError('error loading dynamic library: %s', path) + wx.LogError('error loading dynamic library: %s' % path) print traceback.print_exc() # Called when creating test window -def addHandlers(res): +def addHandlers(): for h in _handlers: if _CFuncPtr and isinstance(h, _CFuncPtr): try: @@ -961,14 +995,32 @@ def addHandlers(res): print traceback.print_exc() else: try: - res.AddHandler(apply(h, ())) + xrc.XmlResource.Get().AddHandler(apply(h, ())) except: wx.LogError('error adding XmlHandler: "%s"' % h) print traceback.print_exc() -def clearHandlers(): - global _handlers - _handlers = [] +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): def __init__(self, node): @@ -1002,6 +1054,7 @@ class xxxComment(xxxObject): ################################################################################ +# Mapping of XRC names to xxx classes xxxDict = { 'wxPanel': xxxPanel, 'wxDialog': xxxDialog,