summaryrefslogtreecommitdiff
path: root/weave/wx_spec.py
diff options
context:
space:
mode:
Diffstat (limited to 'weave/wx_spec.py')
-rw-r--r--weave/wx_spec.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/weave/wx_spec.py b/weave/wx_spec.py
new file mode 100644
index 000000000..d53053e82
--- /dev/null
+++ b/weave/wx_spec.py
@@ -0,0 +1,76 @@
+import wx_info
+import base_info
+from base_spec import base_specification
+from types import *
+import os
+
+wx_support_template = \
+"""
+static %(wx_class)s* py_to_%(wx_class)s(PyObject* py_obj,char* name)
+{
+ %(wx_class)s *wx_ptr;
+
+ // work on this error reporting...
+ if (SWIG_GetPtrObj(py_obj,(void **) &wx_ptr,"_%(wx_class)s_p"))
+ handle_bad_type(py_obj,"%(wx_class)s", name);
+ return wx_ptr;
+}
+"""
+
+class wx_specification(base_specification):
+ _build_information = [wx_info.wx_info()]
+ def __init__(self,class_name=None):
+ self.type_name = 'unkown wx_object'
+ if class_name:
+ # customize support_code for whatever type I was handed.
+ vals = {'wx_class': class_name}
+ specialized_support = wx_support_template % vals
+ custom = base_info.base_info()
+ custom._support_code = [specialized_support]
+ self._build_information = self._build_information + [custom]
+ self.type_name = class_name
+
+ def type_match(self,value):
+ try:
+ class_name = value.this.split('_')[-2]
+ if class_name[:2] == 'wx':
+ return 1
+ except AttributeError:
+ pass
+ return 0
+
+ def type_spec(self,name,value):
+ # factory
+ class_name = value.this.split('_')[-2]
+ new_spec = self.__class__(class_name)
+ new_spec.name = name
+ return new_spec
+ def declaration_code(self,inline=0):
+ type = self.type_name
+ name = self.name
+ var_name = self.retrieve_py_variable(inline)
+ template = '%(type)s *%(name)s = '\
+ 'py_to_%(type)s(%(var_name)s,"%(name)s");\n'
+ code = template % locals()
+ return code
+
+ def __repr__(self):
+ msg = "(%s:: name: %s)" % (self.type_name,self.name)
+ return msg
+ def __cmp__(self,other):
+ #only works for equal
+ return cmp(self.name,other.name) or \
+ cmp(self.__class__, other.__class__) or \
+ cmp(self.type_name,other.type_name)
+
+"""
+# this should only be inabled on machines with wx installed
+# It'll cause major problems otherwise.
+def test():
+ from scipy_test import module_test
+ module_test(__name__,__file__)
+
+def test_suite():
+ from scipy_test import module_test_suite
+ return module_test_suite(__name__,__file__)
+""" \ No newline at end of file