]> git.saurik.com Git - wxWidgets.git/commitdiff
Support for custom controls, first attempt
authorRoman Rolinsky <rolinsky@femagsoft.com>
Tue, 13 Mar 2007 23:59:38 +0000 (23:59 +0000)
committerRoman Rolinsky <rolinsky@femagsoft.com>
Tue, 13 Mar 2007 23:59:38 +0000 (23:59 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44794 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/wx/tools/XRCed/tree.py
wxPython/wx/tools/XRCed/xrced.py
wxPython/wx/tools/XRCed/xxx.py

index ec093e40553e7e86eafa87243fca43a3e17c462d..ad64a5a709dcb40701e224652b5b8e7d2a9e6290 100644 (file)
@@ -902,6 +902,18 @@ class XML_Tree(wx.TreeCtrl):
         if not g.currentEncoding:
             xmlFlags != xrc.XRC_USE_LOCALE
         res = xrc.XmlResource('', xmlFlags)
+        xrc.XmlResource.Set(res)        # set as global
+        # Register handlers
+        addHandlers(res)
+        # Test Test.py
+        #import Test
+        #res.InsertHandler(Test.TestXmlHandler())
+        # Test test.so
+        import ctypes
+        test = ctypes.CDLL('test.so')
+        addr = int(str(res.this).split('_')[1], 16)
+        #test._Z17AddTestXmlHandlerP13wxXmlResource(ctypes.c_void_p(addr))
+        #test.AddTestXmlHandler(ctypes.c_void_p(addr))
         res.Load('memory:xxx.xrc')
         try:
             if xxx.__class__ == xxxFrame:
index 046bb763f4c8c94afe9ce5a7185d037955aecc8c..5e1068f57bb7789f8aa05de3c60eaddd23dc2e36 100644 (file)
@@ -1365,6 +1365,8 @@ Homepage: http://xrced.sourceforge.net\
                    xxxMenuBar, xxxMenu, xxxToolBar,
                    xxxWizard, xxxBitmap, xxxIcon]:
             self.maxIDs[cl] = 0
+        # Handlers
+        clearHandlers()
 
     def SetModified(self, state=True):
         self.modified = state
index 659ddebfccbcbe6d7df36e030e6eccb19e372e41..1ee0ffa5a37a2abebf0ede07e68e7f71f2925d25 100644 (file)
@@ -7,6 +7,7 @@
 from xml.dom import minidom
 from globals import *
 from params import *
+import traceback, types
 
 # Base class for interface parameter classes
 class xxxNode:
@@ -918,10 +919,69 @@ class xxxUnknown(xxxObject):
 ################################################################################
 # Comment
 
+_handlers = []
+_CFuncPtr = None
+
+def register(hndlr):
+    if _CFuncPtr and isinstance(hndlr, _CFuncPtr):
+        _handlers.append(hndlr)
+        return
+    if not isinstance(hndlr, type):
+        wx.LogError('handler is not a type: %s' % hndlr)
+    elif not issubclass(hndlr, wx.xrc.XmlResourceHandler):
+        wx.LogError('handler is not a XmlResourceHandler: %s' % hndlr)
+    else:
+        _handlers.append(hndlr)
+
+def load_dl(path, localname=''):
+    try:
+        import ctypes
+        global _CFuncPtr
+        _CFuncPtr = ctypes._CFuncPtr
+    except ImportError:
+        wx.LogError('ctypes module not found')
+        return
+    try:
+        dl = ctypes.CDLL(path)
+        if not localname:
+            localname = os.path.basename(os.path.splitext(dl._name)[0])
+        globals()[localname] = dl
+    except:
+        wx.LogError('error loading dynamic library: %s', path)
+        print traceback.print_exc()
+
+# Called when creating test window
+def addHandlers(res):
+    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:
+                res.AddHandler(apply(h, ()))
+            except:
+                wx.LogError('error adding XmlHandler: "%s"' % h)
+                print traceback.print_exc()
+
+def clearHandlers():
+    global _handlers
+    _handlers = []
+
 class xxxParamComment(xxxParam):
     def __init__(self, node):
         xxxNode.__init__(self, node)
         self.textNode = node
+        # Parse "pragma" comments
+        if node.data and node.data[0] == '%':
+            try:
+                code = node.data[1:]
+                exec code in globals()
+            except:
+                wx.LogError('exec error: "%s"' % code)
+                print traceback.print_exc()
 
 class xxxComment(xxxObject):
     hasStyle = hasName = False