1 #ifndef __GLADE_WIDGET_H__
2 #define __GLADE_WIDGET_H__
3 
4 #include <gladeui/glade-widget-adaptor.h>
5 #include <gladeui/glade-widget-action.h>
6 #include <gladeui/glade-signal.h>
7 #include <gladeui/glade-property.h>
8 
9 #include <glib.h>
10 #include <glib-object.h>
11 
12 G_BEGIN_DECLS
13 
14 #define GLADE_TYPE_WIDGET            (glade_widget_get_type ())
15 #define GLADE_WIDGET(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_WIDGET, GladeWidget))
16 #define GLADE_WIDGET_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_WIDGET, GladeWidgetClass))
17 #define GLADE_IS_WIDGET(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_WIDGET))
18 #define GLADE_IS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_WIDGET))
19 #define GLADE_WIDGET_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_WIDGET, GladeWidgetClass))
20 
21 typedef struct _GladeWidgetClass   GladeWidgetClass;
22 typedef struct _GladeWidgetPrivate GladeWidgetPrivate;
23 
24 struct _GladeWidget
25 {
26   GInitiallyUnowned parent_instance;
27 
28   GladeWidgetPrivate *priv;
29 };
30 
31 struct _GladeWidgetClass
32 {
33   GInitiallyUnownedClass parent_class;
34 
35   void         (*add_child)               (GladeWidget *, GladeWidget *, gboolean);
36   void         (*remove_child)            (GladeWidget *, GladeWidget *);
37   void         (*replace_child)           (GladeWidget *, GObject *, GObject *);
38 
39   void         (*add_signal_handler)	(GladeWidget *, GladeSignal *);
40   void         (*remove_signal_handler)	(GladeWidget *, GladeSignal *);
41   void         (*change_signal_handler)	(GladeWidget *, GladeSignal *);
42 
43   gint         (*button_press_event)      (GladeWidget *, GdkEvent *);
44   gint         (*button_release_event)    (GladeWidget *, GdkEvent *);
45   gint         (*motion_notify_event)     (GladeWidget *, GdkEvent *);
46 
47   gboolean     (*event)                   (GladeWidget *, GdkEvent *);
48 
49   void   (* glade_reserved1)   (void);
50   void   (* glade_reserved2)   (void);
51   void   (* glade_reserved3)   (void);
52   void   (* glade_reserved4)   (void);
53   void   (* glade_reserved5)   (void);
54   void   (* glade_reserved6)   (void);
55   void   (* glade_reserved7)   (void);
56   void   (* glade_reserved8)   (void);
57 };
58 
59 /* Nameless widgets in fact have a name, except
60  * that they are prefixed with this prefix
61  */
62 #define GLADE_UNNAMED_PREFIX   "__glade_unnamed_"
63 
64 #define IS_GLADE_WIDGET_EVENT(event)		 \
65 	((event) == GDK_BUTTON_PRESS ||		 \
66 	 (event) == GDK_BUTTON_RELEASE ||	 \
67 	 (event) == GDK_MOTION_NOTIFY)
68 
69 /*******************************************************************************
70                                   General api
71  *******************************************************************************/
72 
73 GType                   glade_widget_get_type		    (void);
74 
75 GladeWidget            *glade_widget_get_from_gobject       (gpointer          object);
76 
77 gboolean                glade_widget_add_verify             (GladeWidget      *parent,
78 							     GladeWidget      *child,
79 							     gboolean          user_feedback);
80 
81 void                    glade_widget_add_child              (GladeWidget      *parent,
82 							     GladeWidget      *child,
83 							     gboolean          at_mouse);
84 
85 void                    glade_widget_remove_child           (GladeWidget      *parent,
86 							     GladeWidget      *child);
87 
88 void                    glade_widget_replace                (GladeWidget      *parent,
89 							     GObject          *old_object,
90 							     GObject          *new_object);
91 
92 void                    glade_widget_rebuild                (GladeWidget      *gwidget);
93 
94 GladeWidget            *glade_widget_dup                    (GladeWidget      *template_widget,
95 							     gboolean          exact);
96 
97 GList                  *glade_widget_get_signal_list        (GladeWidget      *widget);
98 
99 void                    glade_widget_copy_signals           (GladeWidget      *widget,
100 							     GladeWidget      *template_widget);
101 void                    glade_widget_copy_properties        (GladeWidget      *widget,
102 							     GladeWidget      *template_widget,
103 							     gboolean          copy_parentless,
104 							     gboolean          exact);
105 
106 void                    glade_widget_set_packing_properties (GladeWidget      *widget,
107 							     GladeWidget      *container);
108 
109 GList                  *glade_widget_get_properties         (GladeWidget      *widget);
110 GList                  *glade_widget_get_packing_properties (GladeWidget      *widget);
111 
112 GladeProperty          *glade_widget_get_property           (GladeWidget      *widget,
113 							     const gchar      *id_property);
114 
115 GladeProperty          *glade_widget_get_pack_property      (GladeWidget      *widget,
116 							     const gchar      *id_property);
117 
118 GList                  *glade_widget_dup_properties         (GladeWidget      *dest_widget,
119 							     GList            *template_props,
120                                                              gboolean          as_load,
121 							     gboolean          copy_parentless,
122 							     gboolean          exact);
123 
124 void                    glade_widget_remove_property        (GladeWidget      *widget,
125 							     const gchar      *id_property);
126 
127 void                    glade_widget_show                   (GladeWidget      *widget);
128 
129 void                    glade_widget_hide                   (GladeWidget      *widget);
130 
131 void                    glade_widget_add_signal_handler     (GladeWidget      *widget,
132 							     const GladeSignal      *signal_handler);
133 
134 void                    glade_widget_remove_signal_handler  (GladeWidget      *widget,
135 							     const GladeSignal      *signal_handler);
136 
137 void                    glade_widget_change_signal_handler  (GladeWidget      *widget,
138 							     const GladeSignal      *old_signal_handler,
139 							     const GladeSignal      *new_signal_handler);
140 
141 GPtrArray *             glade_widget_list_signal_handlers   (GladeWidget      *widget,
142 							     const gchar      *signal_name);
143 
144 gboolean                glade_widget_has_decendant          (GladeWidget      *widget,
145 							     GType             type);
146 
147 gboolean                glade_widget_event                  (GladeWidget      *gwidget,
148 							     GdkEvent         *event);
149 
150 gboolean                glade_widget_placeholder_relation   (GladeWidget      *parent,
151 							     GladeWidget      *widget);
152 
153 GladeWidgetAction      *glade_widget_get_action             (GladeWidget *widget,
154 							     const gchar *action_path);
155 
156 GladeWidgetAction      *glade_widget_get_pack_action        (GladeWidget *widget,
157 							     const gchar *action_path);
158 
159 GList                  *glade_widget_get_actions            (GladeWidget *widget);
160 GList                  *glade_widget_get_pack_actions       (GladeWidget *widget);
161 
162 gboolean                glade_widget_set_action_sensitive   (GladeWidget *widget,
163 							     const gchar *action_path,
164 							     gboolean     sensitive);
165 
166 gboolean                glade_widget_set_pack_action_sensitive (GladeWidget *widget,
167 								const gchar *action_path,
168 								gboolean     sensitive);
169 
170 gboolean                glade_widget_set_action_visible     (GladeWidget *widget,
171 							     const gchar *action_path,
172 							     gboolean     sensitive);
173 
174 gboolean                glade_widget_set_pack_action_visible (GladeWidget *widget,
175 							      const gchar *action_path,
176 							      gboolean     sensitive);
177 
178 void                    glade_widget_write                  (GladeWidget     *widget,
179 							     GladeXmlContext *context,
180 							     GladeXmlNode    *node);
181 
182 void                    glade_widget_write_child            (GladeWidget     *widget,
183 							     GladeWidget     *child,
184 							     GladeXmlContext *context,
185 							     GladeXmlNode    *node);
186 
187 void                    glade_widget_write_signals          (GladeWidget     *widget,
188 							     GladeXmlContext *context,
189 							     GladeXmlNode    *node);
190 
191 void                    glade_widget_write_placeholder      (GladeWidget     *parent,
192 							     GObject         *object,
193 							     GladeXmlContext *context,
194 							     GladeXmlNode    *node);
195 
196 GladeWidget            *glade_widget_read                   (GladeProject     *project,
197 							     GladeWidget      *parent,
198 							     GladeXmlNode     *node,
199 							     const gchar      *internal);
200 
201 void                    glade_widget_read_child             (GladeWidget      *widget,
202 							     GladeXmlNode     *node);
203 
204 
205 void                    glade_widget_write_special_child_prop (GladeWidget     *parent,
206 							       GObject         *object,
207 							       GladeXmlContext *context,
208 							       GladeXmlNode    *node);
209 
210 void                    glade_widget_set_child_type_from_node (GladeWidget         *parent,
211 							       GObject             *child,
212 							       GladeXmlNode        *node);
213 
214 GladeEditorProperty    *glade_widget_create_editor_property (GladeWidget      *widget,
215 							     const gchar      *property,
216 							     gboolean          packing,
217 							     gboolean          use_command);
218 
219 gchar                  *glade_widget_generate_path_name     (GladeWidget      *widget);
220 
221 gboolean                glade_widget_is_ancestor            (GladeWidget      *widget,
222 							     GladeWidget      *ancestor);
223 
224 G_DEPRECATED
225 gboolean                glade_widget_depends                (GladeWidget      *widget,
226 							     GladeWidget      *other);
227 
228 GdkDevice              *glade_widget_get_device_from_event  (GdkEvent *event);
229 
230 void                    glade_widget_ensure_name            (GladeWidget      *widget,
231 							     GladeProject     *project,
232 							     gboolean          use_command);
233 
234 /*******************************************************************************
235                       Project, object property references
236  *******************************************************************************/
237 
238 void                    glade_widget_add_prop_ref           (GladeWidget      *widget,
239 							     GladeProperty    *property);
240 
241 void                    glade_widget_remove_prop_ref        (GladeWidget      *widget,
242 							     GladeProperty    *property);
243 
244 GList                  *glade_widget_list_prop_refs         (GladeWidget      *widget);
245 gboolean                glade_widget_has_prop_refs          (GladeWidget      *widget);
246 
247 GladeProperty          *glade_widget_get_parentless_widget_ref (GladeWidget  *widget);
248 
249 
250 GList                  *glade_widget_get_parentless_reffed_widgets (GladeWidget *widget);
251 
252 /*******************************************************************************
253             Functions that deal with properties on the runtime object
254  *******************************************************************************/
255 
256 void                    glade_widget_object_set_property    (GladeWidget      *widget,
257 							     const gchar      *property_name,
258 							     const GValue     *value);
259 
260 void                    glade_widget_object_get_property    (GladeWidget      *widget,
261 							     const gchar      *property_name,
262 							     GValue           *value);
263 
264 void                    glade_widget_child_set_property     (GladeWidget      *widget,
265 							     GladeWidget      *child,
266 							     const gchar      *property_name,
267 							     const GValue     *value);
268 
269 void                    glade_widget_child_get_property     (GladeWidget      *widget,
270 							     GladeWidget      *child,
271 							     const gchar      *property_name,
272 							     GValue           *value);
273 
274 /*******************************************************************************
275                    GladeProperty api convenience wrappers
276  *******************************************************************************/
277 
278 gboolean                glade_widget_property_get           (GladeWidget      *widget,
279 							     const gchar      *id_property,
280 							     ...);
281 
282 gboolean                glade_widget_property_set           (GladeWidget      *widget,
283 							     const gchar      *id_property,
284 							     ...);
285 
286 gboolean                glade_widget_pack_property_get      (GladeWidget      *widget,
287 							     const gchar      *id_property,
288 							     ...);
289 
290 gboolean                glade_widget_pack_property_set      (GladeWidget      *widget,
291 							     const gchar      *id_property,
292 							     ...);
293 
294 gboolean                glade_widget_property_reset         (GladeWidget      *widget,
295 							     const gchar      *id_property);
296 
297 gboolean                glade_widget_pack_property_reset    (GladeWidget      *widget,
298 							     const gchar      *id_property);
299 
300 gboolean                glade_widget_property_default       (GladeWidget      *widget,
301 							     const gchar      *id_property);
302 
303 gboolean                glade_widget_property_original_default (GladeWidget      *widget,
304 								const gchar      *id_property);
305 
306 gboolean                glade_widget_pack_property_default  (GladeWidget      *widget,
307 							     const gchar      *id_property);
308 
309 gboolean                glade_widget_property_set_sensitive (GladeWidget      *widget,
310 							     const gchar      *id_property,
311 							     gboolean          sensitive,
312 							     const gchar      *reason);
313 
314 gboolean                glade_widget_pack_property_set_sensitive (GladeWidget      *widget,
315 								  const gchar      *id_property,
316 								  gboolean          sensitive,
317 								  const gchar      *reason);
318 
319 gboolean                glade_widget_property_set_enabled   (GladeWidget      *widget,
320 							     const gchar      *id_property,
321 							     gboolean          enabled);
322 
323 gboolean                glade_widget_pack_property_set_enabled (GladeWidget      *widget,
324 								const gchar      *id_property,
325 								gboolean          enabled);
326 
327 
328 gboolean                glade_widget_property_set_save_always (GladeWidget      *widget,
329 							       const gchar      *id_property,
330 							       gboolean          setting);
331 
332 gboolean                glade_widget_pack_property_set_save_always (GladeWidget      *widget,
333 								    const gchar      *id_property,
334 								    gboolean          setting);
335 
336 gchar                  *glade_widget_property_string        (GladeWidget      *widget,
337 							     const gchar      *id_property,
338 							     const GValue     *value);
339 
340 
341 gchar                  *glade_widget_pack_property_string   (GladeWidget      *widget,
342 							     const gchar      *id_property,
343 							     const GValue     *value);
344 
345 /*******************************************************************************
346                                   Accessors
347  *******************************************************************************/
348 
349 void                    glade_widget_set_name		    (GladeWidget      *widget,
350 							     const gchar      *name);
351 
352 G_CONST_RETURN gchar   *glade_widget_get_name               (GladeWidget      *widget);
353 G_CONST_RETURN gchar   *glade_widget_get_display_name       (GladeWidget      *widget);
354 gboolean                glade_widget_has_name               (GladeWidget      *widget);
355 
356 void                    glade_widget_set_is_composite       (GladeWidget      *widget,
357 							     gboolean          composite);
358 
359 gboolean                glade_widget_get_is_composite       (GladeWidget      *widget);
360 
361 void                    glade_widget_set_internal	    (GladeWidget      *widget,
362 							     const gchar      *internal);
363 
364 G_CONST_RETURN gchar   *glade_widget_get_internal           (GladeWidget      *widget);
365 
366 GObject                *glade_widget_get_object             (GladeWidget      *widget);
367 
368 void                    glade_widget_set_project	    (GladeWidget      *widget,
369 							     GladeProject     *project);
370 
371 GladeProject           *glade_widget_get_project            (GladeWidget      *widget);
372 
373 void                    glade_widget_set_in_project         (GladeWidget      *widget,
374 							     gboolean          in_project);
375 gboolean                glade_widget_in_project             (GladeWidget      *widget);
376 
377 GladeWidgetAdaptor     *glade_widget_get_adaptor            (GladeWidget      *widget);
378 
379 GladeWidget            *glade_widget_get_parent             (GladeWidget      *widget);
380 
381 void                    glade_widget_set_parent             (GladeWidget      *widget,
382 							     GladeWidget      *parent);
383 
384 GList                  *glade_widget_get_children	    (GladeWidget* widget);
385 
386 GladeWidget            *glade_widget_get_toplevel           (GladeWidget      *widget);
387 
388 gboolean                glade_widget_superuser              (void);
389 
390 void                    glade_widget_push_superuser         (void);
391 
392 void                    glade_widget_pop_superuser          (void);
393 
394 void                    glade_widget_verify                 (GladeWidget      *widget);
395 void                    glade_widget_set_support_warning    (GladeWidget      *widget,
396 							     const gchar      *warning);
397 G_CONST_RETURN gchar   *glade_widget_support_warning        (GladeWidget      *widget);
398 
399 void                    glade_widget_lock                   (GladeWidget      *widget,
400 							     GladeWidget      *locked);
401 void                    glade_widget_unlock                 (GladeWidget      *widget);
402 
403 GladeWidget            *glade_widget_get_locker             (GladeWidget      *widget);
404 
405 GList                  *glade_widget_list_locked_widgets    (GladeWidget      *widget);
406 
407 void                    glade_widget_support_changed        (GladeWidget      *widget);
408 
409 GtkTreeModel           *glade_widget_get_signal_model       (GladeWidget      *widget);
410 
411 GladeWidget            *glade_widget_find_child             (GladeWidget *widget,
412                                                              const gchar *name);
413 
414 G_END_DECLS
415 
416 #endif /* __GLADE_WIDGET_H__ */
417