]> Pileus Git - ~andy/gtk/blob - gtk/gtktypeutils.h
added new flag GTK_EXCLUSIVE_GRAB. allow exclusive grabs.
[~andy/gtk] / gtk / gtktypeutils.h
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the Free
16  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18 #ifndef __GTK_TYPE_UTILS_H__
19 #define __GTK_TYPE_UTILS_H__
20
21
22 #include <gdk/gdk.h>
23
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif /* __cplusplus */
28
29
30 /* Fundamental Types */
31
32 typedef enum
33 {
34   GTK_TYPE_INVALID,
35   GTK_TYPE_NONE,
36   GTK_TYPE_CHAR,
37   GTK_TYPE_BOOL,
38   GTK_TYPE_INT,
39   GTK_TYPE_UINT,
40   GTK_TYPE_LONG,
41   GTK_TYPE_ULONG,
42   GTK_TYPE_FLOAT,
43   GTK_TYPE_DOUBLE,
44   GTK_TYPE_STRING,
45   GTK_TYPE_ENUM,
46   GTK_TYPE_FLAGS,
47   GTK_TYPE_BOXED,
48   GTK_TYPE_FOREIGN,
49   GTK_TYPE_CALLBACK,
50   GTK_TYPE_ARGS,
51
52   GTK_TYPE_POINTER,
53
54   /* it'd be great if the next two could be removed eventually */
55   GTK_TYPE_SIGNAL,
56   GTK_TYPE_C_CALLBACK,
57
58   GTK_TYPE_OBJECT
59
60 } GtkFundamentalType;
61
62 typedef guint GtkType;
63
64 /* Builtin Types */
65
66 extern GtkType gtk_type_builtins[];
67 #include <gtk/gtktypebuiltins.h>
68
69 /* General Types */
70
71 #define GTK_TYPE_MAKE(ft, seqno) (((seqno)<<8)|ft)
72 #define GTK_FUNDAMENTAL_TYPE(t)  ((GtkFundamentalType)((t)&0xFF))
73 #define GTK_TYPE_SEQNO(t)        ((t)>0xFF? (t)>>8:(t))
74
75 typedef struct _GtkArg         GtkArg;
76 typedef struct _GtkObject      GtkObject;   /* forward declaration of object type */
77 typedef struct _GtkTypeInfo    GtkTypeInfo;
78
79 typedef void (*GtkClassInitFunc)  (gpointer klass);
80 typedef void (*GtkObjectInitFunc) (gpointer object);
81 typedef void (*GtkArgGetFunc) (GtkObject *object, GtkArg *arg, guint arg_id);
82 typedef void (*GtkArgSetFunc) (GtkObject *object, GtkArg *arg, guint arg_id);
83 typedef gint (*GtkFunction) (gpointer data);
84 typedef void (*GtkCallbackMarshal) (GtkObject *object,
85                                     gpointer data,
86                                     guint n_args,
87                                     GtkArg *args);
88 typedef void (*GtkDestroyNotify) (gpointer data);
89
90 struct _GtkArg
91 {
92   GtkType type;
93   gchar *name;
94
95   union {
96     gchar char_data;
97     gint int_data;
98     guint uint_data;
99     gint bool_data;
100     glong long_data;
101     gulong ulong_data;
102     gfloat float_data;
103     gdouble double_data;
104     gchar *string_data;
105     gpointer pointer_data;
106     GtkObject *object_data;
107     struct {
108       GtkCallbackMarshal marshal;
109       gpointer data;
110       GtkDestroyNotify notify;
111     } callback_data;
112     struct {
113       gpointer data;
114       GtkDestroyNotify notify;
115     } foreign_data;
116     struct {
117       gint n_args;
118       GtkArg *args;
119     } args_data;
120     struct {
121       GtkFunction f;
122       gpointer d;
123     } signal_data;
124     struct {
125       GtkFunction func;
126       gpointer func_data;
127     } c_callback_data;
128   } d;
129 };
130
131 #define GTK_VALUE_CHAR(a)       ((a).d.char_data)
132 #define GTK_VALUE_BOOL(a)       ((a).d.bool_data)
133 #define GTK_VALUE_INT(a)        ((a).d.int_data)
134 #define GTK_VALUE_UINT(a)       ((a).d.uint_data)
135 #define GTK_VALUE_LONG(a)       ((a).d.long_data)
136 #define GTK_VALUE_ULONG(a)      ((a).d.ulong_data)
137 #define GTK_VALUE_FLOAT(a)      ((a).d.float_data)
138 #define GTK_VALUE_DOUBLE(a)     ((a).d.double_data)
139 #define GTK_VALUE_STRING(a)     ((a).d.string_data)
140 #define GTK_VALUE_ENUM(a)       ((a).d.int_data)
141 #define GTK_VALUE_FLAGS(a)      ((a).d.int_data)
142 #define GTK_VALUE_BOXED(a)      ((a).d.pointer_data)
143 #define GTK_VALUE_FOREIGN(a)    ((a).d.foreign_data)
144 #define GTK_VALUE_CALLBACK(a)   ((a).d.callback_data)
145 #define GTK_VALUE_ARGS(a)       ((a).d.args_data)
146 #define GTK_VALUE_OBJECT(a)     ((a).d.object_data)
147 #define GTK_VALUE_POINTER(a)    ((a).d.pointer_data)
148 #define GTK_VALUE_SIGNAL(a)     ((a).d.signal_data)
149 #define GTK_VALUE_C_CALLBACK(a) ((a).d.c_callback_data)
150
151 #define GTK_RETLOC_CHAR(a)      ((gchar*)(a).d.pointer_data)
152 #define GTK_RETLOC_BOOL(a)      ((gint*)(a).d.pointer_data)
153 #define GTK_RETLOC_INT(a)       ((gint*)(a).d.pointer_data)
154 #define GTK_RETLOC_UINT(a)      ((guint*)(a).d.pointer_data)
155 #define GTK_RETLOC_LONG(a)      ((glong*)(a).d.pointer_data)
156 #define GTK_RETLOC_ULONG(a)     ((gulong*)(a).d.pointer_data)
157 #define GTK_RETLOC_FLOAT(a)     ((gfloat*)(a).d.pointer_data)
158 #define GTK_RETLOC_DOUBLE(a)    ((gdouble*)(a).d.pointer_data)
159 #define GTK_RETLOC_STRING(a)    ((gchar**)(a).d.pointer_data)
160 #define GTK_RETLOC_ENUM(a)      ((gint*)(a).d.pointer_data)
161 #define GTK_RETLOC_FLAGS(a)     ((gint*)(a).d.pointer_data)
162 #define GTK_RETLOC_BOXED(a)     ((gpointer*)(a).d.pointer_data)
163 #define GTK_RETLOC_OBJECT(a)    ((GtkObject**)(a).d.pointer_data)
164 #define GTK_RETLOC_POINTER(a)   ((gpointer*)(a).d.pointer_data)
165
166 struct _GtkTypeInfo
167 {
168   gchar *type_name;
169   guint object_size;
170   guint class_size;
171   GtkClassInitFunc class_init_func;
172   GtkObjectInitFunc object_init_func;
173   GtkArgSetFunc arg_set_func;
174   GtkArgGetFunc arg_get_func;
175 };
176
177
178 void     gtk_type_init              (void);
179 GtkType  gtk_type_unique            (guint        parent_type,
180                                      GtkTypeInfo *type_info);
181 gchar*   gtk_type_name              (guint        type);
182 GtkType  gtk_type_from_name         (const gchar *name);
183 GtkType  gtk_type_parent            (GtkType      type);
184 gpointer gtk_type_class             (GtkType      type);
185 gpointer gtk_type_new               (GtkType      type);
186 void     gtk_type_describe_heritage (GtkType      type);
187 void     gtk_type_describe_tree     (GtkType      type,
188                                      gint         show_size);
189 gint     gtk_type_is_a              (GtkType      type,
190                                      GtkType      is_a_type);
191 void     gtk_type_get_arg           (GtkObject   *object,
192                                      GtkType      type,
193                                      GtkArg      *arg,
194                                      guint        arg_id);
195 void     gtk_type_set_arg           (GtkObject   *object,
196                                      GtkType      type,
197                                      GtkArg      *arg,
198                                      guint        arg_id);
199 GtkArg*  gtk_arg_copy               (GtkArg      *src_arg,
200                                      GtkArg      *dest_arg);
201
202
203
204 #ifdef __cplusplus
205 }
206 #endif /* __cplusplus */
207
208
209 #endif /* __GTK_TYPE_UTILS_H__ */