3 (defstruct g-class-property-definition
12 (defun parse-g-param-spec (param)
13 (let ((flags (foreign-slot-value param 'g-param-spec 'flags)))
14 (make-g-class-property-definition
15 :name (foreign-slot-value param 'g-param-spec
17 :type (foreign-slot-value param 'g-param-spec
19 :readable (not (null (member :readable flags)))
20 :writable (not (null (member :writable flags)))
21 :constructor (not (null (member :construct flags)))
22 :constructor-only (not (null (member :construct-only flags)))
23 :owner-type (foreign-slot-value param 'g-param-spec
26 (defun class-properties (g-type)
27 (setf g-type (ensure-g-type g-type))
28 (let ((g-class (g-type-class-ref g-type)))
30 (with-foreign-object (n-properties :uint)
31 (let ((params (g-object-class-list-properties g-class n-properties)))
34 for i from 0 below (mem-ref n-properties :uint)
35 for param = (mem-aref params :pointer i)
36 collect (parse-g-param-spec param))
38 (g-type-class-unref g-class))))
40 (defun class-parent (type)
41 (g-type-parent (ensure-g-type type)))
43 (defun interface-properties (g-type)
44 (setf g-type (ensure-g-type g-type))
45 (let ((g-iface (g-type-default-interface-ref g-type)))
47 (with-foreign-object (n-properties :uint)
48 (let ((params (g-object-interface-list-properties g-iface n-properties)))
51 for i from 0 below (mem-ref n-properties :uint)
52 for param = (mem-aref params :pointer i)
53 for flags = (foreign-slot-value param 'g-param-spec 'flags)
54 collect (make-g-class-property-definition
55 :name (foreign-slot-value param 'g-param-spec
57 :type (foreign-slot-value param 'g-param-spec
59 :readable (not (null (member :readable flags)))
60 :writable (not (null (member :writable flags)))
61 :constructor (not (null (member :construct flags)))
62 :constructor-only (not (null (member :construct-only flags)))
63 :owner-type (foreign-slot-value param 'g-param-spec
66 (g-type-default-interface-unref g-iface))))
71 (defun get-enum-items (type)
72 (let ((g-class (g-type-class-ref (ensure-g-type type))))
75 with n = (foreign-slot-value g-class 'g-enum-class 'n-values)
76 with values = (foreign-slot-value g-class 'g-enum-class 'values)
78 for enum-value = (mem-aref values 'g-enum-value i)
79 collect (make-enum-item
80 :name (foreign-slot-value enum-value 'g-enum-value
82 :value (foreign-slot-value enum-value 'g-enum-value
84 :nick (foreign-slot-value enum-value 'g-enum-value
86 (g-type-class-unref g-class))))
91 (defun get-flags-items (type)
92 (let ((g-class (g-type-class-ref (ensure-g-type type))))
95 with n = (foreign-slot-value g-class 'g-flags-class 'n-values)
96 with values = (foreign-slot-value g-class 'g-flags-class 'values)
98 for flags-value = (mem-aref values 'g-flags-value i)
99 collect (make-flags-item
100 :name (foreign-slot-value flags-value 'g-flags-value
102 :value (foreign-slot-value flags-value 'g-flags-value
104 :nick (foreign-slot-value flags-value 'g-flags-value
106 (g-type-class-unref g-class))))