diff options
Diffstat (limited to 'giscanner/gobjecttreebuilder.py')
-rw-r--r-- | giscanner/gobjecttreebuilder.py | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/giscanner/gobjecttreebuilder.py b/giscanner/gobjecttreebuilder.py index 241d42c8..188f1607 100644 --- a/giscanner/gobjecttreebuilder.py +++ b/giscanner/gobjecttreebuilder.py @@ -3,7 +3,8 @@ import re import os from . import cgobject -from .treebuilder import Class, Enum, Function, Interface, Member, Struct +from .treebuilder import (Class, Enum, Function, Interface, Member, Property, + Struct) from .odict import odict @@ -55,13 +56,13 @@ class GLibEnumMember(Member): class GLibObject(Class): - def __init__(self, name, parent, methods, get_type): - Class.__init__(self, name, parent, methods) + def __init__(self, name, parent, get_type): + Class.__init__(self, name, parent) self.get_type = get_type class GLibBoxed(Struct): - def __init__(self, name, methods, get_type): + def __init__(self, name, get_type): Struct.__init__(self, name) self.constructors = [] self.methods = [] @@ -69,11 +70,15 @@ class GLibBoxed(Struct): class GLibInterface(Interface): - def __init__(self, name, methods, get_type): - Interface.__init__(self, name, methods) + def __init__(self, name, get_type): + Interface.__init__(self, name) self.get_type = get_type +class GLibProperty(Property): + pass + + class GObjectTreeBuilder(object): def __init__(self, namespace_name): self._namespace_name = namespace_name @@ -255,21 +260,39 @@ class GObjectTreeBuilder(object): def _introspect_object(self, type_id, symbol): type_name = cgobject.type_name(type_id) parent_name = cgobject.type_name(cgobject.type_parent(type_id)) - node = GLibObject(type_name, parent_name, [], symbol) + node = GLibObject(type_name, parent_name, symbol) + self._introspect_properties(node, type_id) self._strip_namespace(node) self._add_attribute(node) self._remove_attribute(type_name) def _introspect_interface(self, type_id, symbol): type_name = cgobject.type_name(type_id) - node = GLibInterface(type_name, [], symbol) + node = GLibInterface(type_name, symbol) self._strip_namespace(node) + self._introspect_properties(node, type_id) self._add_attribute(node) self._remove_attribute(type_name) def _introspect_boxed(self, type_id, symbol): type_name = cgobject.type_name(type_id) - node = GLibBoxed(type_name, [], symbol) + node = GLibBoxed(type_name, symbol) self._strip_namespace(node) self._add_attribute(node) self._remove_attribute(type_name) + + def _introspect_properties(self, node, type_id): + fundamental_type_id = cgobject.type_fundamental(type_id) + if fundamental_type_id == cgobject.TYPE_OBJECT: + pspecs = cgobject.object_class_list_properties(type_id) + elif fundamental_type_id == cgobject.TYPE_INTERFACE: + pspecs = cgobject.object_interface_list_properties(type_id) + else: + raise AssertionError + + for pspec in pspecs: + if pspec.owner_type != type_id: + continue + node.properties.append(Property( + pspec.name, + cgobject.type_name(pspec.value_type))) |