Combined the gobject.type-info package info gobject package
[cl-gtk2.git] / glib / gobject.package.lisp
1 (defpackage :gobject
2   (:use :cl :glib :cffi :tg :bordeaux-threads :iter :closer-mop :gobject.ffi)
3   (:export #:g-type
4            #:g-type-children
5            #:g-type-parent
6            #:g-type-designator
7            #:g-type-fundamental
8            #:g-type-depth
9            #:g-type-next-base
10            #:g-type-is-a
11            #:g-type-interfaces
12            #:g-type-interface-prerequisites
13            #:g-strv-get-type
14            #:g-closure-get-type
15            #:g-class-property-definition
16            #:g-class-property-definition-name
17            #:g-class-property-definition-type
18            #:g-class-property-definition-readable
19            #:g-class-property-definition-writable
20            #:g-class-property-definition-constructor
21            #:g-class-property-definition-constructor-only
22            #:g-class-property-definition-owner-type
23            #:parse-g-param-spec
24            #:class-properties
25            #:interface-properties
26            #:enum-item
27            #:enum-item-name
28            #:enum-item-value
29            #:enum-item-nick
30            #:get-enum-items
31            #:flags-item
32            #:flags-item-name
33            #:flags-item-value
34            #:flags-item-nick
35            #:get-flags-items
36            #:signal-info
37            #:signal-info-id
38            #:signal-info-name
39            #:signal-info-owner-type
40            #:signal-info-flags
41            #:signal-info-return-type
42            #:signal-info-param-types
43            #:signal-info-detail
44            #:query-signal-info
45            #:type-signals
46            #:parse-signal-name
47            #:class-property-info
48            #:+g-type-invalid+
49            #:+g-type-void+
50            #:+g-type-interface+
51            #:+g-type-char+
52            #:+g-type-uchar+
53            #:+g-type-boolean+
54            #:+g-type-int+
55            #:+g-type-uint+
56            #:+g-type-long+
57            #:+g-type-ulong+
58            #:+g-type-int64+
59            #:+g-type-uint64+
60            #:+g-type-enum+
61            #:+g-type-flags+
62            #:+g-type-float+
63            #:+g-type-double+
64            #:+g-type-string+
65            #:+g-type-pointer+
66            #:+g-type-boxed+
67            #:+g-type-param+
68            #:+g-type-object+
69            #:g-object
70            #:pointer
71            #:g-type-from-object
72            #:g-type-name
73            #:g-type-from-name
74            #:g-signal-connect
75            #:define-g-object-class
76            #:g-initially-unowned
77            #:define-g-enum
78            #:*lisp-name-package*
79            #:define-g-boxed-class
80            #:define-g-flags
81            #:fixed-array
82            #:g-boxed-inline
83            #:g-boxed-ptr
84            #:define-g-interface
85            #:release
86            #:using
87            #:using*
88            #:define-g-boxed-ref
89            #:g-boxed-ref
90            #:allocate-stable-pointer
91            #:free-stable-pointer
92            #:get-stable-pointer-value
93            #:with-stable-pointer
94            #:release*
95            #:disown-boxed-ref
96            #:g-type-interface
97            #:g-value
98            #:register-object-type-implementation
99            #:ensure-g-type
100            #:define-vtable
101            #:g-type
102            #:set-g-value
103            #:parse-gvalue
104            #:emit-signal
105            #:g-value-unset
106            #:g-value-zero
107            #:g-value-init
108            #:g-type-class-ref
109            #:g-object-class
110            #:gobject-class
111            #:g-param-spec
112            #:type-instance
113            #:g-type-class-unref
114            #:registered-object-type-by-name
115            #:g-type-children
116            #:g-signal-lookup
117            #:g-type-parent
118            #:connect-signal
119            #:boxed-c-structure-name
120            #:g-type-designator
121            #:g-type-fundamental
122            #:g-type-depth
123            #:g-type-next-base
124            #:g-type-is-a
125            #:g-type-interfaces
126            #:g-type-interface-prerequisites
127            #:g-type-name
128            #:g-type-from-name
129            #:g-type
130            #:g-type-children
131            #:g-type-parent
132            #:g-type-designator
133            #:g-type-fundamental
134            #:g-type-depth
135            #:g-type-next-base
136            #:g-type-is-a
137            #:g-type-interfaces
138            #:g-type-interface-prerequisites
139            #:g-strv-get-type
140            #:g-closure-get-type
141            #:g-class-property-definition
142            #:g-class-property-definition-name
143            #:g-class-property-definition-type
144            #:g-class-property-definition-readable
145            #:g-class-property-definition-writable
146            #:g-class-property-definition-constructor
147            #:g-class-property-definition-constructor-only
148            #:g-class-property-definition-owner-type
149            #:parse-g-param-spec
150            #:class-properties
151            #:interface-properties
152            #:enum-item
153            #:enum-item-name
154            #:enum-item-value
155            #:enum-item-nick
156            #:get-enum-items
157            #:flags-item
158            #:flags-item-name
159            #:flags-item-value
160            #:flags-item-nick
161            #:get-flags-items
162            #:stable-pointer-value)
163   (:documentation
164    "CL-GTK2-GOBJECT is a binding to GObject type system.
165 For information on GObject, see its @a[http://library.gnome.org/devel/gobject/stable/]{documentation}.
166
167 CL-GTK2-GOBJECT is structured as follows:
168 @itemize{
169 @item{Binding to GObject API, providing low-level means to use functionality of GObject. This includes introspection facilities and means to invoke functionality of GObject.}
170 @item{GObject wrapper that bridges Lisp language with GObject API.}
171 }
172
173 @begin[GObject instrospection API]{section}
174 The base of GObject type system is GType. GType is a numerical value that is the unique identifier of a registered type.
175 Each GType has a name that is retrieved with @fun{g-type-name}. Conversely, GType can be retrieved from its name via @fun{g-type-from-name}.
176
177 There are several predefined GType values that correspond to fundamental or base types.
178 @begin{itemize}
179 @item{@variable{+g-type-invalid+}}
180 @item{@variable{+g-type-void+}}
181 @item{@variable{+g-type-interface+}}
182 @item{@variable{+g-type-char+}}
183 @item{@variable{+g-type-uchar+}}
184 @item{@variable{+g-type-boolean+}}
185 @item{@variable{+g-type-int+}}
186 @item{@variable{+g-type-uint+}}
187 @item{@variable{+g-type-long+}}
188 @item{@variable{+g-type-ulong+}}
189 @item{@variable{+g-type-int64+}}
190 @item{@variable{+g-type-uint64+}}
191 @item{@variable{+g-type-enum+}}
192 @item{@variable{+g-type-flags+}}
193 @item{@variable{+g-type-float+}}
194 @item{@variable{+g-type-double+}}
195 @item{@variable{+g-type-string+}}
196 @item{@variable{+g-type-pointer+}}
197 @item{@variable{+g-type-boxed+}}
198 @item{@variable{+g-type-param+}}
199 @item{@variable{+g-type-object+}}
200 @end{itemize}
201
202 GType values form type hierarchies via signle inheritance. Functions @fun{g-type-parent} and @fun{g-type-children} enable to traverse through the type hierarchy.
203
204 For some types, additional information is available. Functions @fun{class-properties} and @fun{interface-properties} return properties of classes and interfaces. Functions @fun{get-enum-items} and @fun{get-flags-items} return members of enum and flags types.
205
206 //TODO: document and refactor signals
207
208 @end{section}
209
210 @begin[GValue]{section}
211 GObject uses GValues as a generic way to pass values. It is used when calling closures, emitting signals, setting and getting properties' values, passing values to object constructors. @class{g-value} foreign structure is used for holding GValue. It used like all foreign structures: either with @code{cffi:foreign-alloc} or with @code{cffi:with-foreign-object}. Before first use, @class{g-value} should be zeroed with @fun{g-value-zero}. Zeroed @class{g-value} may be configured to hold a GValue of a given type with @fun{g-value-init}. @fun{parse-g-value} retrieves the Lisp object corresponding to the value stored in GValue. @fun{set-g-value} sets the GValue from Lisp object.
212 @end{section}"))
213
214 (in-package :gobject)
215
216 (defvar *gobject-debug* nil)
217
218 (defun debugf (&rest args)
219   (when *gobject-debug*
220     (apply 'format t args)))