gobject-introspection r198 - in trunk: . giscanner



Author: johan
Date: Mon Apr 21 18:46:21 2008
New Revision: 198
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=198&view=rev

Log:
2008-04-21  Johan Dahlin  <johan gnome org>

        * giscanner/gidlwriter.py:
        * giscanner/gobjecttreebuilder.py:
        Add support for boxed types



Modified:
   trunk/ChangeLog
   trunk/giscanner/gidlwriter.py
   trunk/giscanner/gobjecttreebuilder.py

Modified: trunk/giscanner/gidlwriter.py
==============================================================================
--- trunk/giscanner/gidlwriter.py	(original)
+++ trunk/giscanner/gidlwriter.py	Mon Apr 21 18:46:21 2008
@@ -1,7 +1,7 @@
 from __future__ import with_statement
 
-from .gobjecttreebuilder import (GLibEnum, GLibEnumMember, GLibFlags,
-                                 GLibObject, GLibInterface)
+from .gobjecttreebuilder import (GLibBoxed, GLibEnum, GLibEnumMember,
+                                 GLibFlags, GLibObject, GLibInterface)
 from .treebuilder import Class, Enum, Function, Interface
 from .xmlwriter import XMLWriter
 
@@ -29,6 +29,8 @@
             self._write_class(node)
         elif isinstance(node, Interface):
             self._write_interface(node)
+        elif isinstance(node, GLibBoxed):
+            self._write_boxed(node)
         else:
             print 'WRITER: Unhandled node', node
 
@@ -93,3 +95,11 @@
         with self.tagcontext('interface', attrs):
             for method in interface.methods:
                 self._write_method(method)
+
+    def _write_boxed(self, boxed):
+        attrs = [('name', boxed.name)]
+        if isinstance(boxed, GLibBoxed):
+            attrs.append(('get-type', boxed.get_type))
+        with self.tagcontext('boxed', attrs):
+            for method in boxed.methods:
+                self._write_method(method)

Modified: trunk/giscanner/gobjecttreebuilder.py
==============================================================================
--- trunk/giscanner/gobjecttreebuilder.py	(original)
+++ trunk/giscanner/gobjecttreebuilder.py	Mon Apr 21 18:46:21 2008
@@ -60,6 +60,13 @@
         self.get_type = get_type
 
 
+class GLibBoxed(Struct):
+    def __init__(self, name, methods, get_type):
+        Struct.__init__(self, name)
+        self.methods = []
+        self.get_type = get_type
+
+
 class GLibInterface(Interface):
     def __init__(self, name, methods, get_type):
         Interface.__init__(self, name, methods)
@@ -158,7 +165,7 @@
 
         object_name = first_arg.replace('*', '')
         class_ = self._get_attribute(object_name)
-        if class_ is None or not isinstance(class_, GLibObject):
+        if class_ is None or not isinstance(class_, (GLibObject, GLibBoxed)):
             return False
 
         # GtkButton -> gtk_button_, so we can figure out the method name
@@ -190,6 +197,8 @@
             self._introspect_object(type_id, symbol)
         elif fundamental_type_id == cgobject.TYPE_INTERFACE:
             self._introspect_interface(type_id, symbol)
+        elif fundamental_type_id == cgobject.TYPE_BOXED:
+            self._introspect_boxed(type_id, symbol)
         else:
             print 'unhandled GType: %s' % (cgobject.type_name(type_id),)
 
@@ -218,3 +227,8 @@
         type_name = cgobject.type_name(type_id)
         node = GLibInterface(type_name, [], symbol)
         self._add_attribute(node, replace=True)
+
+    def _introspect_boxed(self, type_id, symbol):
+        type_name = cgobject.type_name(type_id)
+        node = GLibBoxed(type_name, [], symbol)
+        self._add_attribute(node, replace=True)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]