96785b661ddad6933d894c6b94ca04db04e0a9ec
[platform/upstream/gstreamer.git] / gst / gobject2gtk.h
1 #ifndef __GOBJECT_2_GTK_H__
2 #define __GOBJECT_2_GTK_H__
3
4 #include <gtk/gtk.h>
5
6 #define G_MAXUINT UINT_MAX
7 #define G_MAXULONG ULONG_MAX
8
9 #define G_E     2.7182818284590452354E0
10 #define G_LN2   6.9314718055994530942E-1
11 #define G_LN10  2.3025850929940456840E0
12 #define G_PI    3.14159265358979323846E0
13 #define G_PI_2  1.57079632679489661923E0
14 #define G_PI_4  0.78539816339744830962E0
15 #define G_SQRT2 1.4142135623730950488E0
16
17 typedef struct _GObject GObject;
18 typedef struct _GObjectClass GObjectClass;
19
20 #define g_object_ref(obj)                       gtk_object_ref((GtkObject *)(obj))
21 #define g_object_unref(obj)                     gtk_object_unref((GtkObject *)(obj))
22
23 // the helper macros for type checking
24 #define G_TYPE_CHECK_INSTANCE_CAST              GTK_CHECK_CAST
25 #define G_TYPE_CHECK_INSTANCE_TYPE              GTK_CHECK_TYPE
26 #define G_TYPE_INSTANCE_GET_CLASS(o,t,c)        (((c*)(GTK_OBJECT(o)->klass)))
27 #define G_TYPE_CHECK_CLASS_CAST                 GTK_CHECK_CLASS_CAST
28 #define G_TYPE_CHECK_CLASS_TYPE                 GTK_CHECK_CLASS_TYPE
29 #define G_TYPE_FROM_CLASS(klass)                (((GtkObjectClass *)(klass))->type)
30 #define G_OBJECT_GET_CLASS(object)              (G_OBJECT(object)->klass)
31 #define G_OBJECT_TYPE                           GTK_OBJECT_TYPE
32 #define G_OBJECT_CLASS_TYPE(gclass)             (gclass->type)
33
34 // types
35 #define G_TYPE_NONE                             GTK_TYPE_NONE
36 #define G_TYPE_CHAR                             GTK_TYPE_CHAR
37 #define G_TYPE_UCHAR                            GTK_TYPE_UCHAR
38 #define G_TYPE_BOOLEAN                          GTK_TYPE_BOOL
39 #define G_TYPE_INT                              GTK_TYPE_INT
40 #define G_TYPE_UINT                             GTK_TYPE_UINT
41 #define G_TYPE_LONG                             GTK_TYPE_LONG
42 #define G_TYPE_ULONG                            GTK_TYPE_ULONG
43 #define G_TYPE_ENUM                             GTK_TYPE_ENUM
44 #define G_TYPE_FLAGS                            GTK_TYPE_FLAGS
45 #define G_TYPE_FLOAT                            GTK_TYPE_FLOAT
46 #define G_TYPE_DOUBLE                           GTK_TYPE_DOUBLE
47 #define G_TYPE_STRING                           GTK_TYPE_STRING
48 #define G_TYPE_POINTER                          GTK_TYPE_POINTER
49 #define G_TYPE_BOXED                            GTK_TYPE_BOXED
50 #define G_TYPE_PARAM                            GTK_TYPE_PARAM
51
52 // marshallers
53 #define g_cclosure_marshal_VOID__VOID           gtk_marshal_NONE__NONE
54 #define g_cclosure_marshal_VOID__BOOLEAN        gtk_marshal_NONE__BOOL
55 #define g_cclosure_marshal_VOID__CHAR           gtk_marshal_NONE__CHAR
56 #define g_cclosure_marshal_VOID__UCHAR          gtk_marshal_NONE__UCHAR
57 #define g_cclosure_marshal_VOID__INT            gtk_marshal_NONE__INT
58 #define g_cclosure_marshal_VOID__UINT           gtk_marshal_NONE__UINT
59 #define g_cclosure_marshal_VOID__LONG           gtk_marshal_NONE__LONG
60 #define g_cclosure_marshal_VOID__ULONG          gtk_marshal_NONE__ULONG
61 #define g_cclosure_marshal_VOID__ENUM           gtk_marshal_NONE__ENUM
62 #define g_cclosure_marshal_VOID__FLAGS          gtk_marshal_NONE__FLAGS
63 #define g_cclosure_marshal_VOID__FLOAT          gtk_marshal_NONE__FLOAT
64 #define g_cclosure_marshal_VOID__DOUBLE         gtk_marshal_NONE__DOUBLE
65 #define g_cclosure_marshal_VOID__STRING         gtk_marshal_NONE__STRING
66 #define g_cclosure_marshal_VOID__PARAM          gtk_marshal_NONE__PARAM
67 #define g_cclosure_marshal_VOID__BOXED          gtk_marshal_NONE__BOXED
68 #define g_cclosure_marshal_VOID__POINTER        gtk_marshal_NONE__POINTER
69 #define g_cclosure_marshal_VOID__OBJECT         gtk_marshal_NONE__OBJECT
70 #define g_cclosure_marshal_STRING__OBJECT_POINTER       gtk_marshal_STRING__OBJECT_POINTER
71 #define g_cclosure_marshal_VOID__UINT_POINTER   gtk_marshal_NONE__UINT_POINTER
72
73 #define gst_marshal_VOID__OBJECT_POINTER        gtk_marshal_NONE__POINTER_POINTER
74 #define gst_marshal_VOID__INT_INT               gtk_marshal_NONE__INT_INT
75 #define gst_marshal_VOID__INT                   gtk_marshal_NONE__INT
76 #define gst_marshal_VOID__STRING                gtk_marshal_NONE__STRING
77 #define gst_marshal_VOID__VOID                  gtk_marshal_NONE__NONE
78 #define gst_marshal_VOID__BOOLEAN               gtk_marshal_NONE__BOOL
79 #define gst_marshal_VOID__POINTER               gtk_marshal_NONE__POINTER
80
81 /* General macros */
82 #ifdef  __cplusplus
83 # define G_BEGIN_DECLS  extern "C" {
84 # define G_END_DECLS    }
85 #else
86 # define G_BEGIN_DECLS
87 # define G_END_DECLS
88 #endif
89
90 // args
91 //#define set_property set_arg
92 //#define get_property get_arg
93
94 #define g_object_get_property(obj,argname,pspec)\
95 G_STMT_START{ \
96   (pspec)->name = (gchar*)argname;\
97   gtk_object_getv ((GtkObject *)(obj),1,(pspec));\
98 }G_STMT_END
99
100 #define g_object_set(o,args...)                 gtk_object_set ((GtkObject *) (o), ## args)
101
102
103 // type system
104 #define GType                                   GtkType
105 #define GTypeFlags                              guint
106 #define GClassInitFunc                          GtkClassInitFunc
107 #define GBaseInitFunc                           GtkClassInitFunc
108 #define GInstanceInitFunc                       GtkObjectInitFunc
109 #define g_type_class_peek_parent(c)             gtk_type_parent_class (GTK_OBJECT_CLASS (c)->type)
110 #define g_type_init                             gtk_type_init
111 #define g_type_is_a                             gtk_type_is_a
112 #define g_type_class_ref                        gtk_type_class
113 #define g_type_class_unref(c)
114 #define g_type_name(t)                          gtk_type_name(t)
115 #define g_type_from_name(t)                     gtk_type_from_name(t)
116 #define g_type_parent(t)                        gtk_type_parent(t)
117 #define GEnumValue                              GtkEnumValue
118 #define g_enum_register_static                  gtk_type_register_enum
119
120
121 GType g2g_object_get_type (void);
122
123 /*********************************
124  * FIXME API NOT in glib2.0
125  ***********************************/
126
127
128 // type registration
129 typedef struct _GTypeInfo               GTypeInfo;
130 struct _GTypeInfo
131 {
132   /* interface types, classed types, instantiated types */
133   guint16                class_size;
134
135   GBaseInitFunc          base_init;
136   gpointer               base_finalize;
137
138   /* classed types, instantiated types */
139   GClassInitFunc         class_init;
140   gpointer               class_finalize;
141   gconstpointer          class_data;
142   
143   /* instantiated types */
144   guint16                instance_size;
145   guint16                n_preallocs;
146   GInstanceInitFunc      instance_init;
147
148   /* value handling */
149   const gpointer         value_table;
150 };
151
152 #define G_TYPE_FLAG_ABSTRACT                            0
153
154 #define g_type_register_static                          g2g_type_register_static
155 guint g2g_type_register_static (GtkType parent_type, gchar *type_name,
156                               const GTypeInfo *info, guint flags);
157
158
159
160 // object creation
161 #define g_object_new                                    g2g_object_new
162 gpointer g2g_object_new(GtkType type,gpointer blah_varargs_stuff);
163
164 // disposal
165 #define g_object_run_dispose                            g2g_object_run_dispose
166 void g2g_object_run_dispose (GObject *object);
167
168
169 #define G_SIGNAL_RUN_LAST                               GTK_RUN_LAST
170 #define G_SIGNAL_RUN_FIRST                              GTK_RUN_FIRST
171 #define G_SIGNAL_RUN_CLEANUP                            0
172 #define G_SIGNAL_NO_RECURSE                             GTK_RUN_NO_RECURSE
173 #define G_SIGNAL_NO_HOOKS                               GTK_RUN_NO_HOOKS
174
175 #define GCallback                                       gpointer        // FIXME?
176 #define G_CALLBACK(f)                                   ((gpointer)(f))
177
178 #define g_signal_new                                    g2g_signal_new
179 #define g_signal_handlers_destroy(x)
180
181 guint
182 g2g_signal_new (const gchar       *signal_name,
183                 GtkType            object_type,
184                 GtkSignalRunType   signal_flags,
185                 guint              function_offset,
186                 gpointer           accumulator,  // GSignalAccumulator   
187                 gpointer           accu_data,
188                 GtkSignalMarshaller  marshaller,
189                 GType              return_type,
190                 guint              nparams,
191                 ...);
192
193 #define \
194 g_signal_emit(object,signal,detail,args...) \
195 gtk_signal_emit((GtkObject *)object,signal, ## args )
196
197 #define \
198 g_signal_connect(object,name,func,func_data) \
199 gtk_signal_connect((GtkObject *)object,name,func,func_data)
200
201 #define \
202 g_signal_emit_by_name(object,name,data,self) \
203 gtk_signal_emit_by_name ((GtkObject *)object,name,data,self)
204
205 #define \
206 g_signal_has_handler_pending(object,name,data,may_block) \
207 gtk_signal_handler_pending ((GtkObject *)object,name,may_block)
208
209 #define g_signal_lookup                 gtk_signal_lookup
210 #define g_signal_handler_block(o,id)    gtk_signal_handler_block ((GtkObject *)(o), id)
211 #define g_signal_handler_unblock(o,id)  gtk_signal_handler_unblock ((GtkObject *)(o), id)
212
213 gint* g_signal_list_ids (GType type, guint *n_ids);
214
215 // arguments/parameters
216
217 // first define GValue and GParamSpec
218 #define GValue                  GtkArg
219 #define GParamFlags             gint
220 #define G_VALUE_TYPE(v)         ((v)->type)
221 #define G_PARAM_READWRITE       GTK_ARG_READWRITE
222 #define G_PARAM_READABLE        GTK_ARG_READABLE
223 #define G_PARAM_WRITABLE        GTK_ARG_WRITABLE
224 #define G_OBJECT_WARN_INVALID_PROPERTY_ID(a,b,c)
225 typedef struct _GParamSpec GParamSpec;
226 struct _GParamSpec {
227   gchar *name;
228   gint value_type;
229   gint flags;
230 };
231
232 #define g_value_init(value,t)                   ((value)->type = (t))
233 #define g_value_copy(src_val,dest_val)  (dest_val = gtk_arg_copy(src_val,dest_val))
234 #define g_value_unset(val)
235
236 #define g_object_class_install_property         g2g_object_class_install_property
237 void g2g_object_class_install_property(GObjectClass *oclass,guint property_id,GParamSpec *pspec);
238 #define g_object_class_find_property            g2g_object_class_find_property
239 GParamSpec *g2g_object_class_find_property(GObjectClass *oclass,const gchar *name);
240 #define g_object_class_list_properties          g2g_object_class_list_properties
241 GParamSpec **g2g_object_class_list_properties(GObjectClass *oclass,guint *n_properties);
242
243 #define G_IS_PARAM_SPEC_ENUM(pspec)             (GTK_FUNDAMENTAL_TYPE(pspec->value_type) == GTK_TYPE_ENUM)
244
245 #define g_param_spec_boolean                    g2g_param_spec_boolean
246 GParamSpec *g2g_param_spec_boolean(gchar *name,gchar *nick,gchar *blurb,gboolean def,gint flags);
247 #define g_param_spec_int                        g2g_param_spec_int
248 GParamSpec *g2g_param_spec_int(gchar *name,gchar *nick,gchar *blurb,gint min,gint max,gint def,gint flags);
249 #define g_param_spec_uint                       g2g_param_spec_uint
250 GParamSpec *g2g_param_spec_uint(gchar *name,gchar *nick,gchar *blurb,guint min,guint max,guint def,gint flags);
251 #define g_param_spec_long                       g2g_param_spec_long
252 GParamSpec *g2g_param_spec_long(gchar *name,gchar *nick,gchar *blurb,glong min,glong max,glong def,gint flags);
253 #define g_param_spec_ulong                      g2g_param_spec_ulong
254 GParamSpec *g2g_param_spec_ulong(gchar *name,gchar *nick,gchar *blurb,gulong min,gulong max,gulong def,gint flags);
255 #define g_param_spec_float                      g2g_param_spec_float
256 GParamSpec *g2g_param_spec_float(gchar *name,gchar *nick,gchar *blurb,float min,float max,float def,gint flags);
257 #define g_param_spec_double                     g2g_param_spec_double
258 GParamSpec *g2g_param_spec_double(gchar *name,gchar *nick,gchar *blurb,double min,double max,double def,gint flags);
259 #define g_param_spec_enum                       g2g_param_spec_enum
260 GParamSpec *g2g_param_spec_enum(gchar *name,gchar *nick,gchar *blurb,GType e,guint def,gint flags);
261 #define g_param_spec_pointer                    g2g_param_spec_pointer
262 GParamSpec *g2g_param_spec_pointer(gchar *name,gchar *nick,gchar *blurb,gint flags);
263 #define g_param_spec_string                     g2g_param_spec_string
264 GParamSpec *g2g_param_spec_string(gchar *name,gchar *nick,gchar *blurb,gchar *def,gint flags);
265
266 #define g_value_get_char(value)                 GTK_VALUE_CHAR(*value)
267 #define g_value_set_char(value,data)            (GTK_VALUE_CHAR(*value) = (data))
268 #define g_value_get_uchar(value)                GTK_VALUE_UCHAR(*value)
269 #define g_value_set_uchar(value,data)           (GTK_VALUE_UCHAR(*value) = (data))
270 #define g_value_get_boolean(value)              GTK_VALUE_BOOL(*value)
271 #define g_value_set_boolean(value,data)         (GTK_VALUE_BOOL(*value) = (data))
272 #define g_value_get_enum(value)                 GTK_VALUE_INT(*value)
273 #define g_value_set_enum(value,data)            (GTK_VALUE_INT(*value) = (data))
274 #define g_value_get_int(value)                  GTK_VALUE_INT(*value)
275 #define g_value_set_int(value,data)                     (GTK_VALUE_INT(*value) = (data))
276 #define g_value_get_uint(value)                 GTK_VALUE_UINT(*value)
277 #define g_value_set_uint(value,data)            (GTK_VALUE_UINT(*value) = (data))
278 #define g_value_get_long(value)                 GTK_VALUE_LONG(*value)
279 #define g_value_set_long(value,data)            (GTK_VALUE_LONG(*value) = (data))
280 #define g_value_get_ulong(value)                GTK_VALUE_ULONG(*value)
281 #define g_value_set_ulong(value,data)           (GTK_VALUE_ULONG(*value) = (data))
282 #define g_value_get_float(value)                GTK_VALUE_FLOAT(*value)
283 #define g_value_set_float(value,data)           (GTK_VALUE_FLOAT(*value) = (data))
284 #define g_value_get_double(value)               GTK_VALUE_DOUBLE(*value)
285 #define g_value_set_double(value,data)          (GTK_VALUE_DOUBLE(*value) = (data))
286 #define g_value_get_string(value)               GTK_VALUE_STRING(*value)
287 #define g_value_set_string(value,data)          (GTK_VALUE_STRING(*value) = (data))
288 #define g_value_get_pointer(value)              GTK_VALUE_POINTER(*value)
289 #define g_value_set_pointer(value,data)         (GTK_VALUE_POINTER(*value) = (data))
290
291
292 #define G_VALUE_HOLDS_CHAR(value) (((value)->type)==GTK_TYPE_CHAR)
293 #define G_VALUE_HOLDS_UCHAR(value) (((value)->type)==GTK_TYPE_UCHAR)
294 #define G_VALUE_HOLDS_BOOLEAN(value) (((value)->type)==GTK_TYPE_BOOL)
295 #define G_VALUE_HOLDS_INT(value) (((value)->type)==GTK_TYPE_INT)
296 #define G_VALUE_HOLDS_UINT(value) (((value)->type)==GTK_TYPE_UINT)
297 #define G_VALUE_HOLDS_LONG(value) (((value)->type)==GTK_TYPE_LONG)
298 #define G_VALUE_HOLDS_ULONG(value) (((value)->type)==GTK_TYPE_ULONG)
299 #define G_VALUE_HOLDS_FLOAT(value) (((value)->type)==GTK_TYPE_FLOAT)
300 #define G_VALUE_HOLDS_DOUBLE(value) (((value)->type)==GTK_TYPE_DOUBLE)
301 #define G_VALUE_HOLDS_STRING(value) (((value)->type)==GTK_TYPE_STRING)
302 #define G_VALUE_HOLDS_POINTER(value) (((value)->type)==GTK_TYPE_POINTER)
303
304 // the object itself
305 //#define GObject                               GtkObject
306 //#define GObjectClass                          GtkObjectClass
307 #define G_OBJECT(obj)                           ((GObject *)(obj))
308 #define G_OBJECT_CLASS(c)                       ((GObjectClass *)(c))
309
310 #define G_TYPE_OBJECT \
311   (g2g_object_get_type())
312 //#define G_OBJECT(obj) 
313 //  (GTK_CHECK_CAST((obj),G_TYPE_OBJECT,GObject))
314 //#define G_OBJECT_CLASS(klass) 
315 //  (GTK_CHECK_CLASS_CAST((klass),G_TYPE_OBJECT,GObjectClass)) 
316 #define G_IS_OBJECT(obj) \
317   (GTK_CHECK_TYPE((obj),G_TYPE_OBJECT))
318 #define G_IS_OBJECT_CLASS(obj) \
319   (GTK_CHECK_CLASS_TYPE((klass),G_TYPE_OBJECT))
320
321 struct _GObject {
322 /***** THE FOLLOWING IS A VERBATIM COPY FROM GTKOBJECT *****/
323   /* GtkTypeObject related fields: */
324   GObjectClass *klass;
325  
326    
327   /* 32 bits of flags. GtkObject only uses 4 of these bits and
328    *  GtkWidget uses the rest. This is done because structs are
329    *  aligned on 4 or 8 byte boundaries. If a new bitfield were
330    *  used in GtkWidget much space would be wasted.
331    */
332   guint32 flags;
333   
334   /* reference count.
335    * refer to the file docs/refcounting.txt on this issue.
336    */
337   guint ref_count;
338   
339   /* A list of keyed data pointers, used for e.g. the list of signal
340    * handlers or an object's user_data.
341    */
342   GData *object_data;
343 /***** END OF COPY FROM GTKOBJECT *****/
344 };
345
346 struct _GObjectClass {
347 /***** THE FOLLOWING IS A VERBATIM COPY FROM GTKOBJECT *****/
348   /* GtkTypeClass fields: */               
349   GtkType type;
350
351    
352   /* The signals this object class handles. "signals" is an
353    *  array of signal ID's.
354    */
355   guint *signals;
356      
357   /* The number of signals listed in "signals".
358    */
359   guint nsignals;
360   
361   /* The number of arguments per class.
362    */
363   guint n_args;
364   GSList *construct_args;
365
366   /* Non overridable class methods to set and get per class arguments */
367   void (*set_arg) (GtkObject *object,
368                    GtkArg    *arg,
369                    guint      arg_id);
370   void (*get_arg) (GtkObject *object,
371                    GtkArg    *arg,
372                    guint      arg_id);
373   
374   /* The functions that will end an objects life time. In one way ore
375    *  another all three of them are defined for all objects. If an
376    *  object class overrides one of the methods in order to perform class
377    *  specific destruction then it must still invoke its superclass'
378    *  implementation of the method after it is finished with its
379    *  own cleanup. (See the destroy function for GtkWidget for
380    *  an example of how to do this).   
381    */
382   void (* dispose) (GObject *object);
383   void (* destroy)  (GObject *object);
384  
385   void (* finalize) (GObject *object);
386 /***** END OF COPY FROM GTKOBJECT *****/
387
388   void (*set_property) (GObject *object, guint prop_id,
389                         const GValue *value, GParamSpec *pspec);
390   void (*get_property) (GObject *object, guint prop_id,
391                         GValue *value, GParamSpec *pspec);
392 };
393
394 GType g_object_get_type (void);
395
396 #endif /* __GOBJECT_2_GTK_H__ */