File: | cut-n-paste/toolbar-editor/egg-toolbars-model.c |
Warning: | line 101, column 15 Value stored to 'node' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* |
2 | * Copyright (C) 2002-2004 Marco Pesenti Gritti |
3 | * Copyright (C) 2004 Christian Persch |
4 | * |
5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by |
7 | * the Free Software Foundation; either version 2, or (at your option) |
8 | * any later version. |
9 | * |
10 | * This program is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | * GNU General Public License for more details. |
14 | * |
15 | * You should have received a copy of the GNU General Public License |
16 | * along with this program; if not, write to the Free Software |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
18 | * |
19 | * $Id$ |
20 | */ |
21 | |
22 | #include "config.h" |
23 | |
24 | #include "egg-toolbars-model.h" |
25 | #include "eggtypebuiltins.h" |
26 | #include "eggmarshalers.h" |
27 | |
28 | #include <unistd.h> |
29 | #include <string.h> |
30 | #include <libxml/tree.h> |
31 | #include <cdk/cdk.h> |
32 | |
33 | static void egg_toolbars_model_finalize (GObject *object); |
34 | |
35 | enum |
36 | { |
37 | ITEM_ADDED, |
38 | ITEM_REMOVED, |
39 | TOOLBAR_ADDED, |
40 | TOOLBAR_CHANGED, |
41 | TOOLBAR_REMOVED, |
42 | LAST_SIGNAL |
43 | }; |
44 | |
45 | typedef struct |
46 | { |
47 | char *name; |
48 | EggTbModelFlags flags; |
49 | } EggToolbarsToolbar; |
50 | |
51 | typedef struct |
52 | { |
53 | char *name; |
54 | } EggToolbarsItem; |
55 | |
56 | static guint signals[LAST_SIGNAL] = { 0 }; |
57 | |
58 | struct EggToolbarsModelPrivate |
59 | { |
60 | GNode *toolbars; |
61 | GList *types; |
62 | GHashTable *flags; |
63 | }; |
64 | |
65 | G_DEFINE_TYPE_WITH_PRIVATE (EggToolbarsModel, egg_toolbars_model, G_TYPE_OBJECT)static void egg_toolbars_model_init (EggToolbarsModel *self); static void egg_toolbars_model_class_init (EggToolbarsModelClass *klass); static GType egg_toolbars_model_get_type_once (void ); static gpointer egg_toolbars_model_parent_class = ((void*) 0); static gint EggToolbarsModel_private_offset; static void egg_toolbars_model_class_intern_init (gpointer klass) { egg_toolbars_model_parent_class = g_type_class_peek_parent (klass); if (EggToolbarsModel_private_offset != 0) g_type_class_adjust_private_offset (klass, &EggToolbarsModel_private_offset); egg_toolbars_model_class_init ((EggToolbarsModelClass*) klass); } __attribute__ ((__unused__ )) static inline gpointer egg_toolbars_model_get_instance_private (EggToolbarsModel *self) { return (((gpointer) ((guint8*) (self ) + (glong) (EggToolbarsModel_private_offset)))); } GType egg_toolbars_model_get_type (void) { static GType static_g_define_type_id = 0; if ((__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id) == sizeof (gpointer), "Expression evaluates to false"); (void) ( 0 ? (gpointer) * (&static_g_define_type_id) : ((void*)0)) ; (!(__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id ) == sizeof (gpointer), "Expression evaluates to false"); __typeof__ (*(&static_g_define_type_id)) gapg_temp_newval; __typeof__ ((&static_g_define_type_id)) gapg_temp_atomic = (&static_g_define_type_id ); __atomic_load (gapg_temp_atomic, &gapg_temp_newval, 5) ; gapg_temp_newval; })) && g_once_init_enter_pointer ( &static_g_define_type_id)); })) ) { GType g_define_type_id = egg_toolbars_model_get_type_once (); (__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id) == sizeof (gpointer) , "Expression evaluates to false"); 0 ? (void) (*(&static_g_define_type_id ) = (g_define_type_id)) : (void) 0; g_once_init_leave_pointer ((&static_g_define_type_id), (gpointer) (guintptr) (g_define_type_id )); })) ; } return static_g_define_type_id; } __attribute__ ( (__noinline__)) static GType egg_toolbars_model_get_type_once (void) { GType g_define_type_id = g_type_register_static_simple (((GType) ((20) << (2))), g_intern_static_string ("EggToolbarsModel" ), sizeof (EggToolbarsModelClass), (GClassInitFunc)(void (*)( void)) egg_toolbars_model_class_intern_init, sizeof (EggToolbarsModel ), (GInstanceInitFunc)(void (*)(void)) egg_toolbars_model_init , (GTypeFlags) 0); { {{ EggToolbarsModel_private_offset = g_type_add_instance_private (g_define_type_id, sizeof (EggToolbarsModelPrivate)); };} } return g_define_type_id; } |
66 | |
67 | static xmlDocPtr |
68 | egg_toolbars_model_to_xml (EggToolbarsModel *model) |
69 | { |
70 | GNode *l1, *l2, *tl; |
71 | GList *l3; |
72 | xmlDocPtr doc; |
73 | |
74 | g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return (((void*)0)); } } while (0); |
75 | |
76 | tl = model->priv->toolbars; |
77 | |
78 | xmlIndentTreeOutput(*(__xmlIndentTreeOutput())) = TRUE(!(0)); |
79 | doc = xmlNewDoc ((const xmlChar*) "1.0"); |
80 | doc->children = xmlNewDocNode (doc, NULL((void*)0), (const xmlChar*) "toolbars", NULL((void*)0)); |
81 | |
82 | for (l1 = tl->children; l1 != NULL((void*)0); l1 = l1->next) |
83 | { |
84 | xmlNodePtr tnode; |
85 | EggToolbarsToolbar *toolbar = l1->data; |
86 | |
87 | tnode = xmlNewChild (doc->children, NULL((void*)0), (const xmlChar*) "toolbar", NULL((void*)0)); |
88 | xmlSetProp (tnode, (const xmlChar*) "name", (const xmlChar*) toolbar->name); |
89 | xmlSetProp (tnode, (const xmlChar*) "hidden", |
90 | (toolbar->flags&EGG_TB_MODEL_HIDDEN) ? (const xmlChar*) "true" : (const xmlChar*) "false"); |
91 | xmlSetProp (tnode, (const xmlChar*) "editable", |
92 | (toolbar->flags&EGG_TB_MODEL_NOT_EDITABLE) ? (const xmlChar*) "false" : (const xmlChar*) "true"); |
93 | |
94 | for (l2 = l1->children; l2 != NULL((void*)0); l2 = l2->next) |
95 | { |
96 | xmlNodePtr node; |
97 | EggToolbarsItem *item = l2->data; |
98 | |
99 | if (strcmp (item->name, "_separator") == 0) |
100 | { |
101 | node = xmlNewChild (tnode, NULL((void*)0), (const xmlChar*) "separator", NULL((void*)0)); |
Value stored to 'node' is never read | |
102 | continue; |
103 | } |
104 | |
105 | node = xmlNewChild (tnode, NULL((void*)0), (const xmlChar*) "toolitem", NULL((void*)0)); |
106 | xmlSetProp (node, (const xmlChar*) "name", (const xmlChar*) item->name); |
107 | |
108 | /* Add 'data' nodes for each data type which can be written out for this |
109 | * item. Only write types which can be used to restore the data. */ |
110 | for (l3 = model->priv->types; l3 != NULL((void*)0); l3 = l3->next) |
111 | { |
112 | EggToolbarsItemType *type = l3->data; |
113 | if (type->get_name != NULL((void*)0) && type->get_data != NULL((void*)0)) |
114 | { |
115 | xmlNodePtr dnode; |
116 | char *tmp; |
117 | |
118 | tmp = type->get_data (type, item->name); |
119 | if (tmp != NULL((void*)0)) |
120 | { |
121 | dnode = xmlNewTextChild (node, NULL((void*)0), (const xmlChar*) "data", (const xmlChar*) tmp); |
122 | g_free (tmp); |
123 | |
124 | tmp = cdk_atom_name (type->type); |
125 | xmlSetProp (dnode, (const xmlChar*) "type", (const xmlChar*) tmp); |
126 | g_free (tmp); |
127 | } |
128 | } |
129 | } |
130 | } |
131 | } |
132 | |
133 | return doc; |
134 | } |
135 | |
136 | static gboolean |
137 | safe_save_xml (const char *xml_file, xmlDocPtr doc) |
138 | { |
139 | char *tmp_file; |
140 | char *old_file; |
141 | gboolean old_exist; |
142 | gboolean retval = TRUE(!(0)); |
143 | |
144 | tmp_file = g_strconcat (xml_file, ".tmp", NULL((void*)0)); |
145 | old_file = g_strconcat (xml_file, ".old", NULL((void*)0)); |
146 | |
147 | if (xmlSaveFormatFile (tmp_file, doc, 1) <= 0) |
148 | { |
149 | g_warning ("Failed to write XML data to %s", tmp_file); |
150 | goto failed; |
151 | } |
152 | |
153 | old_exist = g_file_test (xml_file, G_FILE_TEST_EXISTS); |
154 | |
155 | if (old_exist) |
156 | { |
157 | if (rename (xml_file, old_file) < 0) |
158 | { |
159 | g_warning ("Failed to rename %s to %s", xml_file, old_file); |
160 | retval = FALSE(0); |
161 | goto failed; |
162 | } |
163 | } |
164 | |
165 | if (rename (tmp_file, xml_file) < 0) |
166 | { |
167 | g_warning ("Failed to rename %s to %s", tmp_file, xml_file); |
168 | |
169 | if (rename (old_file, xml_file) < 0) |
170 | { |
171 | g_warning ("Failed to restore %s from %s", xml_file, tmp_file); |
172 | } |
173 | retval = FALSE(0); |
174 | goto failed; |
175 | } |
176 | |
177 | if (old_exist) |
178 | { |
179 | if (unlink (old_file) < 0) |
180 | { |
181 | g_warning ("Failed to delete old file %s", old_file); |
182 | } |
183 | } |
184 | |
185 | failed: |
186 | g_free (old_file); |
187 | g_free (tmp_file); |
188 | |
189 | return retval; |
190 | } |
191 | |
192 | void |
193 | egg_toolbars_model_save_toolbars (EggToolbarsModel *model, |
194 | const char *xml_file, |
195 | const char *version) |
196 | { |
197 | xmlDocPtr doc; |
198 | xmlNodePtr root; |
199 | |
200 | g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ; } } while (0); |
201 | |
202 | doc = egg_toolbars_model_to_xml (model); |
203 | root = xmlDocGetRootElement (doc); |
204 | xmlSetProp (root, (const xmlChar*) "version", (const xmlChar*) version); |
205 | safe_save_xml (xml_file, doc); |
206 | xmlFreeDoc (doc); |
207 | } |
208 | |
209 | static gboolean |
210 | is_unique (EggToolbarsModel *model, |
211 | EggToolbarsItem *idata) |
212 | { |
213 | EggToolbarsItem *idata2; |
214 | GNode *toolbar, *item; |
215 | |
216 | |
217 | for(toolbar = g_node_first_child (model->priv->toolbars)((model->priv->toolbars) ? ((GNode*) (model->priv-> toolbars))->children : ((void*)0)); |
218 | toolbar != NULL((void*)0); toolbar = g_node_next_sibling (toolbar)((toolbar) ? ((GNode*) (toolbar))->next : ((void*)0))) |
219 | { |
220 | for(item = g_node_first_child (toolbar)((toolbar) ? ((GNode*) (toolbar))->children : ((void*)0)); |
221 | item != NULL((void*)0); item = g_node_next_sibling (item)((item) ? ((GNode*) (item))->next : ((void*)0))) |
222 | { |
223 | idata2 = item->data; |
224 | |
225 | if (idata != idata2 && strcmp (idata->name, idata2->name) == 0) |
226 | { |
227 | return FALSE(0); |
228 | } |
229 | } |
230 | } |
231 | |
232 | return TRUE(!(0)); |
233 | } |
234 | |
235 | static GNode * |
236 | toolbar_node_new (const char *name) |
237 | { |
238 | EggToolbarsToolbar *toolbar; |
239 | |
240 | toolbar = g_new (EggToolbarsToolbar, 1)((EggToolbarsToolbar *) g_malloc_n ((1), sizeof (EggToolbarsToolbar ))); |
241 | toolbar->name = g_strdup (name)g_strdup_inline (name); |
242 | toolbar->flags = 0; |
243 | |
244 | return g_node_new (toolbar); |
245 | } |
246 | |
247 | static GNode * |
248 | item_node_new (const char *name, EggToolbarsModel *model) |
249 | { |
250 | EggToolbarsItem *item; |
251 | int flags; |
252 | |
253 | g_return_val_if_fail (name != NULL, NULL)do { if ((name != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "name != NULL"); return (((void*)0)); } } while (0); |
254 | |
255 | item = g_new (EggToolbarsItem, 1)((EggToolbarsItem *) g_malloc_n ((1), sizeof (EggToolbarsItem ))); |
256 | item->name = g_strdup (name)g_strdup_inline (name); |
257 | |
258 | flags = GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, item->name))((gint) (glong) (g_hash_table_lookup (model->priv->flags , item->name))); |
259 | if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0) |
260 | g_hash_table_insert (model->priv->flags, |
261 | g_strdup (item->name)g_strdup_inline (item->name), |
262 | GINT_TO_POINTER (flags | EGG_TB_MODEL_NAME_USED)((gpointer) (glong) (flags | EGG_TB_MODEL_NAME_USED))); |
263 | |
264 | return g_node_new (item); |
265 | } |
266 | |
267 | static void |
268 | item_node_free (GNode *item_node, EggToolbarsModel *model) |
269 | { |
270 | EggToolbarsItem *item = item_node->data; |
271 | int flags; |
272 | |
273 | flags = GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, item->name))((gint) (glong) (g_hash_table_lookup (model->priv->flags , item->name))); |
274 | if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0 && is_unique (model, item)) |
275 | g_hash_table_insert (model->priv->flags, |
276 | g_strdup (item->name)g_strdup_inline (item->name), |
277 | GINT_TO_POINTER (flags & ~EGG_TB_MODEL_NAME_USED)((gpointer) (glong) (flags & ~EGG_TB_MODEL_NAME_USED))); |
278 | |
279 | g_free (item->name); |
280 | g_free (item); |
281 | |
282 | g_node_destroy (item_node); |
283 | } |
284 | |
285 | static void |
286 | toolbar_node_free (GNode *toolbar_node, EggToolbarsModel *model) |
287 | { |
288 | EggToolbarsToolbar *toolbar = toolbar_node->data; |
289 | |
290 | g_node_children_foreach (toolbar_node, G_TRAVERSE_ALL, |
291 | (GNodeForeachFunc) item_node_free, model); |
292 | |
293 | g_free (toolbar->name); |
294 | g_free (toolbar); |
295 | |
296 | g_node_destroy (toolbar_node); |
297 | } |
298 | |
299 | EggTbModelFlags |
300 | egg_toolbars_model_get_flags (EggToolbarsModel *model, |
301 | int toolbar_position) |
302 | { |
303 | GNode *toolbar_node; |
304 | EggToolbarsToolbar *toolbar; |
305 | |
306 | toolbar_node = g_node_nth_child (model->priv->toolbars, toolbar_position); |
307 | g_return_val_if_fail (toolbar_node != NULL, 0)do { if ((toolbar_node != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toolbar_node != NULL" ); return (0); } } while (0); |
308 | |
309 | toolbar = toolbar_node->data; |
310 | |
311 | return toolbar->flags; |
312 | } |
313 | |
314 | void |
315 | egg_toolbars_model_set_flags (EggToolbarsModel *model, |
316 | int toolbar_position, |
317 | EggTbModelFlags flags) |
318 | { |
319 | GNode *toolbar_node; |
320 | EggToolbarsToolbar *toolbar; |
321 | |
322 | toolbar_node = g_node_nth_child (model->priv->toolbars, toolbar_position); |
323 | g_return_if_fail (toolbar_node != NULL)do { if ((toolbar_node != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toolbar_node != NULL" ); return; } } while (0); |
324 | |
325 | toolbar = toolbar_node->data; |
326 | |
327 | toolbar->flags = flags; |
328 | |
329 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), signals[TOOLBAR_CHANGED], |
330 | 0, toolbar_position); |
331 | } |
332 | |
333 | |
334 | char * |
335 | egg_toolbars_model_get_data (EggToolbarsModel *model, |
336 | CdkAtom type, |
337 | const char *name) |
338 | { |
339 | EggToolbarsItemType *t; |
340 | char *data = NULL((void*)0); |
341 | GList *l; |
342 | |
343 | if (type == CDK_NONE((CdkAtom)((gpointer) (gulong) (0))) || type == cdk_atom_intern (EGG_TOOLBAR_ITEM_TYPE"application/x-toolbar-item", FALSE(0))) |
344 | { |
345 | g_return_val_if_fail (name != NULL, NULL)do { if ((name != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "name != NULL"); return (((void*)0)); } } while (0); |
346 | g_return_val_if_fail (*name != 0, NULL)do { if ((*name != 0)) { } else { g_return_if_fail_warning (( (gchar*) 0), ((const char*) (__func__)), "*name != 0"); return (((void*)0)); } } while (0); |
347 | return strdup (name); |
348 | } |
349 | |
350 | for (l = model->priv->types; l != NULL((void*)0); l = l->next) |
351 | { |
352 | t = l->data; |
353 | if (t->type == type && t->get_data != NULL((void*)0)) |
354 | { |
355 | data = t->get_data (t, name); |
356 | if (data != NULL((void*)0)) break; |
357 | } |
358 | } |
359 | |
360 | return data; |
361 | } |
362 | |
363 | char * |
364 | egg_toolbars_model_get_name (EggToolbarsModel *model, |
365 | CdkAtom type, |
366 | const char *data, |
367 | gboolean create) |
368 | { |
369 | EggToolbarsItemType *t; |
370 | char *name = NULL((void*)0); |
371 | GList *l; |
372 | |
373 | if (type == CDK_NONE((CdkAtom)((gpointer) (gulong) (0))) || type == cdk_atom_intern (EGG_TOOLBAR_ITEM_TYPE"application/x-toolbar-item", FALSE(0))) |
374 | { |
375 | g_return_val_if_fail (data, NULL)do { if ((data)) { } else { g_return_if_fail_warning (((gchar *) 0), ((const char*) (__func__)), "data"); return (((void*)0 )); } } while (0); |
376 | g_return_val_if_fail (*data, NULL)do { if ((*data)) { } else { g_return_if_fail_warning (((gchar *) 0), ((const char*) (__func__)), "*data"); return (((void*) 0)); } } while (0); |
377 | return strdup (data); |
378 | } |
379 | |
380 | if (create) |
381 | { |
382 | for (l = model->priv->types; name == NULL((void*)0) && l != NULL((void*)0); l = l->next) |
383 | { |
384 | t = l->data; |
385 | if (t->type == type && t->new_name != NULL((void*)0)) |
386 | name = t->new_name (t, data); |
387 | } |
388 | |
389 | return name; |
390 | } |
391 | else |
392 | { |
393 | for (l = model->priv->types; name == NULL((void*)0) && l != NULL((void*)0); l = l->next) |
394 | { |
395 | t = l->data; |
396 | if (t->type == type && t->get_name != NULL((void*)0)) |
397 | name = t->get_name (t, data); |
398 | } |
399 | |
400 | return name; |
401 | } |
402 | } |
403 | |
404 | static gboolean |
405 | impl_add_item (EggToolbarsModel *model, |
406 | int toolbar_position, |
407 | int position, |
408 | const char *name) |
409 | { |
410 | GNode *parent_node; |
411 | GNode *child_node; |
412 | int real_position; |
413 | |
414 | g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ((0)); } } while (0); |
415 | g_return_val_if_fail (name != NULL, FALSE)do { if ((name != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "name != NULL"); return ((0)); } } while (0); |
416 | |
417 | parent_node = g_node_nth_child (model->priv->toolbars, toolbar_position); |
418 | child_node = item_node_new (name, model); |
419 | g_node_insert (parent_node, position, child_node); |
420 | |
421 | real_position = g_node_child_position (parent_node, child_node); |
422 | |
423 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), signals[ITEM_ADDED], 0, |
424 | toolbar_position, real_position); |
425 | |
426 | return TRUE(!(0)); |
427 | } |
428 | |
429 | gboolean |
430 | egg_toolbars_model_add_item (EggToolbarsModel *model, |
431 | int toolbar_position, |
432 | int position, |
433 | const char *name) |
434 | { |
435 | EggToolbarsModelClass *klass = EGG_TOOLBARS_MODEL_GET_CLASS (model)((((EggToolbarsModelClass*) (((GTypeInstance*) ((model)))-> g_class)))); |
436 | return klass->add_item (model, toolbar_position, position, name); |
437 | } |
438 | |
439 | int |
440 | egg_toolbars_model_add_toolbar (EggToolbarsModel *model, |
441 | int position, |
442 | const char *name) |
443 | { |
444 | GNode *node; |
445 | int real_position; |
446 | |
447 | g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), -1)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return (-1); } } while (0); |
448 | |
449 | node = toolbar_node_new (name); |
450 | g_node_insert (model->priv->toolbars, position, node); |
451 | |
452 | real_position = g_node_child_position (model->priv->toolbars, node); |
453 | |
454 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), signals[TOOLBAR_ADDED], |
455 | 0, real_position); |
456 | |
457 | return g_node_child_position (model->priv->toolbars, node); |
458 | } |
459 | |
460 | static char * |
461 | parse_data_list (EggToolbarsModel *model, |
462 | xmlNodePtr child, |
463 | gboolean create) |
464 | { |
465 | char *name = NULL((void*)0); |
466 | while (child && name == NULL((void*)0)) |
467 | { |
468 | if (xmlStrEqual (child->name, (const xmlChar*) "data")) |
469 | { |
470 | xmlChar *type = xmlGetProp (child, (const xmlChar*) "type"); |
471 | xmlChar *data = xmlNodeGetContent (child); |
472 | |
473 | if (type != NULL((void*)0)) |
474 | { |
475 | CdkAtom atom = cdk_atom_intern ((const char*) type, TRUE(!(0))); |
476 | name = egg_toolbars_model_get_name (model, atom, (const char*) data, create); |
477 | } |
478 | |
479 | xmlFree (type); |
480 | xmlFree (data); |
481 | } |
482 | |
483 | child = child->next; |
484 | } |
485 | |
486 | return name; |
487 | } |
488 | |
489 | static void |
490 | parse_item_list (EggToolbarsModel *model, |
491 | xmlNodePtr child, |
492 | int position) |
493 | { |
494 | while (child) |
495 | { |
496 | if (xmlStrEqual (child->name, (const xmlChar*) "toolitem")) |
497 | { |
498 | char *name; |
499 | |
500 | /* Try to get the name using the data elements first, |
501 | as they are more 'portable' or 'persistent'. */ |
502 | name = parse_data_list (model, child->children, FALSE(0)); |
503 | if (name == NULL((void*)0)) |
504 | { |
505 | name = parse_data_list (model, child->children, TRUE(!(0))); |
506 | } |
507 | |
508 | /* If that fails, try to use the name. */ |
509 | if (name == NULL((void*)0)) |
510 | { |
511 | xmlChar *type = xmlGetProp (child, (const xmlChar*) "type"); |
512 | xmlChar *data = xmlGetProp (child, (const xmlChar*) "name"); |
513 | CdkAtom atom = type ? cdk_atom_intern ((const char*) type, TRUE(!(0))) : CDK_NONE((CdkAtom)((gpointer) (gulong) (0))); |
514 | |
515 | /* If an old format, try to use it. */ |
516 | name = egg_toolbars_model_get_name (model, atom, (const char*) data, FALSE(0)); |
517 | if (name == NULL((void*)0)) |
518 | { |
519 | name = egg_toolbars_model_get_name (model, atom, (const char*) data, TRUE(!(0))); |
520 | } |
521 | |
522 | xmlFree (type); |
523 | xmlFree (data); |
524 | } |
525 | |
526 | if (name != NULL((void*)0)) |
527 | { |
528 | egg_toolbars_model_add_item (model, position, -1, name); |
529 | g_free (name); |
530 | } |
531 | } |
532 | else if (xmlStrEqual (child->name, (const xmlChar*) "separator")) |
533 | { |
534 | egg_toolbars_model_add_item (model, position, -1, "_separator"); |
535 | } |
536 | |
537 | child = child->next; |
538 | } |
539 | } |
540 | |
541 | static void |
542 | parse_toolbars (EggToolbarsModel *model, |
543 | xmlNodePtr child) |
544 | { |
545 | while (child) |
546 | { |
547 | if (xmlStrEqual (child->name, (const xmlChar*) "toolbar")) |
548 | { |
549 | xmlChar *string; |
550 | int position; |
551 | EggTbModelFlags flags; |
552 | |
553 | string = xmlGetProp (child, (const xmlChar*) "name"); |
554 | position = egg_toolbars_model_add_toolbar (model, -1, (const char*) string); |
555 | flags = egg_toolbars_model_get_flags (model, position); |
556 | xmlFree (string); |
557 | |
558 | string = xmlGetProp (child, (const xmlChar*) "editable"); |
559 | if (string && xmlStrEqual (string, (const xmlChar*) "false")) |
560 | flags |= EGG_TB_MODEL_NOT_EDITABLE; |
561 | xmlFree (string); |
562 | |
563 | string = xmlGetProp (child, (const xmlChar*) "hidden"); |
564 | if (string && xmlStrEqual (string, (const xmlChar*) "true")) |
565 | flags |= EGG_TB_MODEL_HIDDEN; |
566 | xmlFree (string); |
567 | |
568 | string = xmlGetProp (child, (const xmlChar*) "style"); |
569 | if (string && xmlStrEqual (string, (const xmlChar*) "icons-only")) |
570 | flags |= EGG_TB_MODEL_ICONS; |
571 | xmlFree (string); |
572 | |
573 | egg_toolbars_model_set_flags (model, position, flags); |
574 | |
575 | parse_item_list (model, child->children, position); |
576 | } |
577 | |
578 | child = child->next; |
579 | } |
580 | } |
581 | |
582 | gboolean |
583 | egg_toolbars_model_load_toolbars (EggToolbarsModel *model, |
584 | const char *xml_file) |
585 | { |
586 | xmlDocPtr doc; |
587 | xmlNodePtr root; |
588 | |
589 | g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ((0)); } } while (0); |
590 | |
591 | if (!xml_file || !g_file_test (xml_file, G_FILE_TEST_EXISTS)) return FALSE(0); |
592 | |
593 | doc = xmlParseFile (xml_file); |
594 | if (doc == NULL((void*)0)) |
595 | { |
596 | g_warning ("Failed to load XML data from %s", xml_file); |
597 | return FALSE(0); |
598 | } |
599 | root = xmlDocGetRootElement (doc); |
600 | |
601 | parse_toolbars (model, root->children); |
602 | |
603 | xmlFreeDoc (doc); |
604 | |
605 | return TRUE(!(0)); |
606 | } |
607 | |
608 | gboolean |
609 | egg_toolbars_model_load_toolbars_from_resource (EggToolbarsModel *model, |
610 | const char *path) |
611 | { |
612 | xmlDocPtr doc; |
613 | xmlNodePtr root; |
614 | GBytes *bytes; |
615 | GError *error = NULL((void*)0); |
616 | const guint8 *data; |
617 | gsize data_len; |
618 | |
619 | g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ((0)); } } while (0); |
620 | |
621 | bytes = g_resources_lookup_data (path, G_RESOURCE_LOOKUP_FLAGS_NONE, &error); |
622 | g_assert_no_error (error)do { if (error) g_assertion_message_error (((gchar*) 0), "egg-toolbars-model.c" , 622, ((const char*) (__func__)), "error", error, 0, 0); } while (0); |
623 | |
624 | data = g_bytes_get_data (bytes, &data_len); |
625 | doc = xmlParseMemory ((const char *) data, data_len); |
626 | if (doc == NULL((void*)0)) |
627 | g_error ("Failed to load XML data from resource %s", path); |
628 | |
629 | root = xmlDocGetRootElement (doc); |
630 | parse_toolbars (model, root->children); |
631 | |
632 | xmlFreeDoc (doc); |
633 | g_bytes_unref (bytes); |
634 | |
635 | return TRUE(!(0)); |
636 | } |
637 | |
638 | static void |
639 | parse_available_list (EggToolbarsModel *model, |
640 | xmlNodePtr child) |
641 | { |
642 | gint flags; |
643 | |
644 | while (child) |
645 | { |
646 | if (xmlStrEqual (child->name, (const xmlChar*) "toolitem")) |
647 | { |
648 | xmlChar *name; |
649 | |
650 | name = xmlGetProp (child, (const xmlChar*) "name"); |
651 | flags = egg_toolbars_model_get_name_flags |
652 | (model, (const char*)name); |
653 | egg_toolbars_model_set_name_flags |
654 | (model, (const char*)name, flags | EGG_TB_MODEL_NAME_KNOWN); |
655 | xmlFree (name); |
656 | } |
657 | child = child->next; |
658 | } |
659 | } |
660 | |
661 | static void |
662 | parse_names (EggToolbarsModel *model, |
663 | xmlNodePtr child) |
664 | { |
665 | while (child) |
666 | { |
667 | if (xmlStrEqual (child->name, (const xmlChar*) "available")) |
668 | { |
669 | parse_available_list (model, child->children); |
670 | } |
671 | |
672 | child = child->next; |
673 | } |
674 | } |
675 | |
676 | gboolean |
677 | egg_toolbars_model_load_names (EggToolbarsModel *model, |
678 | const char *xml_file) |
679 | { |
680 | xmlDocPtr doc; |
681 | xmlNodePtr root; |
682 | |
683 | g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ((0)); } } while (0); |
684 | |
685 | if (!xml_file || !g_file_test (xml_file, G_FILE_TEST_EXISTS)) return FALSE(0); |
686 | |
687 | doc = xmlParseFile (xml_file); |
688 | if (doc == NULL((void*)0)) |
689 | { |
690 | g_warning ("Failed to load XML data from %s", xml_file); |
691 | return FALSE(0); |
692 | } |
693 | root = xmlDocGetRootElement (doc); |
694 | |
695 | parse_names (model, root->children); |
696 | |
697 | xmlFreeDoc (doc); |
698 | |
699 | return TRUE(!(0)); |
700 | } |
701 | |
702 | gboolean |
703 | egg_toolbars_model_load_names_from_resource (EggToolbarsModel *model, |
704 | const char *path) |
705 | { |
706 | xmlDocPtr doc; |
707 | xmlNodePtr root; |
708 | GBytes *bytes; |
709 | GError *error = NULL((void*)0); |
710 | const guint8 *data; |
711 | gsize data_len; |
712 | |
713 | g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ((0)); } } while (0); |
714 | |
715 | bytes = g_resources_lookup_data (path, G_RESOURCE_LOOKUP_FLAGS_NONE, &error); |
716 | g_assert_no_error (error)do { if (error) g_assertion_message_error (((gchar*) 0), "egg-toolbars-model.c" , 716, ((const char*) (__func__)), "error", error, 0, 0); } while (0); |
717 | |
718 | data = g_bytes_get_data (bytes, &data_len); |
719 | doc = xmlParseMemory ((const char *) data, data_len); |
720 | if (doc == NULL((void*)0)) |
721 | g_error ("Failed to load XML data from resource %s", path); |
722 | |
723 | root = xmlDocGetRootElement (doc); |
724 | parse_names (model, root->children); |
725 | |
726 | xmlFreeDoc (doc); |
727 | g_bytes_unref (bytes); |
728 | |
729 | return TRUE(!(0)); |
730 | } |
731 | |
732 | static void |
733 | egg_toolbars_model_class_init (EggToolbarsModelClass *klass) |
734 | { |
735 | GObjectClass *object_class = G_OBJECT_CLASS (klass)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((klass)), (((GType) ((20) << (2)))))))); |
736 | |
737 | /* make sure the flags type is known */ |
738 | g_type_ensure (EGG_TYPE_TB_MODEL_FLAGSegg_tb_model_flags_get_type()); |
739 | |
740 | object_class->finalize = egg_toolbars_model_finalize; |
741 | |
742 | klass->add_item = impl_add_item; |
743 | |
744 | signals[ITEM_ADDED] = |
745 | g_signal_new ("item_added", |
746 | G_OBJECT_CLASS_TYPE (object_class)((((GTypeClass*) (object_class))->g_type)), |
747 | G_SIGNAL_RUN_LAST, |
748 | G_STRUCT_OFFSET (EggToolbarsModelClass, item_added)((glong) __builtin_offsetof(EggToolbarsModelClass, item_added )), |
749 | NULL((void*)0), NULL((void*)0), _egg_marshal_VOID__INT_INT, |
750 | G_TYPE_NONE((GType) ((1) << (2))), 2, G_TYPE_INT((GType) ((6) << (2))), G_TYPE_INT((GType) ((6) << (2)))); |
751 | signals[TOOLBAR_ADDED] = |
752 | g_signal_new ("toolbar_added", |
753 | G_OBJECT_CLASS_TYPE (object_class)((((GTypeClass*) (object_class))->g_type)), |
754 | G_SIGNAL_RUN_LAST, |
755 | G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_added)((glong) __builtin_offsetof(EggToolbarsModelClass, toolbar_added )), |
756 | NULL((void*)0), NULL((void*)0), g_cclosure_marshal_VOID__INT, |
757 | G_TYPE_NONE((GType) ((1) << (2))), 1, G_TYPE_INT((GType) ((6) << (2)))); |
758 | signals[ITEM_REMOVED] = |
759 | g_signal_new ("item_removed", |
760 | G_OBJECT_CLASS_TYPE (object_class)((((GTypeClass*) (object_class))->g_type)), |
761 | G_SIGNAL_RUN_LAST, |
762 | G_STRUCT_OFFSET (EggToolbarsModelClass, item_removed)((glong) __builtin_offsetof(EggToolbarsModelClass, item_removed )), |
763 | NULL((void*)0), NULL((void*)0), _egg_marshal_VOID__INT_INT, |
764 | G_TYPE_NONE((GType) ((1) << (2))), 2, G_TYPE_INT((GType) ((6) << (2))), G_TYPE_INT((GType) ((6) << (2)))); |
765 | signals[TOOLBAR_REMOVED] = |
766 | g_signal_new ("toolbar_removed", |
767 | G_OBJECT_CLASS_TYPE (object_class)((((GTypeClass*) (object_class))->g_type)), |
768 | G_SIGNAL_RUN_LAST, |
769 | G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_removed)((glong) __builtin_offsetof(EggToolbarsModelClass, toolbar_removed )), |
770 | NULL((void*)0), NULL((void*)0), g_cclosure_marshal_VOID__INT, |
771 | G_TYPE_NONE((GType) ((1) << (2))), 1, G_TYPE_INT((GType) ((6) << (2)))); |
772 | signals[TOOLBAR_CHANGED] = |
773 | g_signal_new ("toolbar_changed", |
774 | G_OBJECT_CLASS_TYPE (object_class)((((GTypeClass*) (object_class))->g_type)), |
775 | G_SIGNAL_RUN_LAST, |
776 | G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_changed)((glong) __builtin_offsetof(EggToolbarsModelClass, toolbar_changed )), |
777 | NULL((void*)0), NULL((void*)0), g_cclosure_marshal_VOID__INT, |
778 | G_TYPE_NONE((GType) ((1) << (2))), 1, G_TYPE_INT((GType) ((6) << (2)))); |
779 | } |
780 | |
781 | static void |
782 | egg_toolbars_model_init (EggToolbarsModel *model) |
783 | { |
784 | model->priv =egg_toolbars_model_get_instance_private (model); |
785 | |
786 | model->priv->toolbars = g_node_new (NULL((void*)0)); |
787 | model->priv->flags = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL((void*)0)); |
788 | egg_toolbars_model_set_name_flags (model, "_separator", |
789 | EGG_TB_MODEL_NAME_KNOWN | |
790 | EGG_TB_MODEL_NAME_INFINITE); |
791 | } |
792 | |
793 | static void |
794 | egg_toolbars_model_finalize (GObject *object) |
795 | { |
796 | EggToolbarsModel *model = EGG_TOOLBARS_MODEL (object)((((EggToolbarsModel*) (void *) g_type_check_instance_cast (( GTypeInstance*) ((object)), ((egg_toolbars_model_get_type ()) ))))); |
797 | |
798 | g_node_children_foreach (model->priv->toolbars, G_TRAVERSE_ALL, |
799 | (GNodeForeachFunc) toolbar_node_free, model); |
800 | g_node_destroy (model->priv->toolbars); |
801 | g_hash_table_destroy (model->priv->flags); |
802 | |
803 | G_OBJECT_CLASS (egg_toolbars_model_parent_class)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((egg_toolbars_model_parent_class)), (((GType) ((20) << (2))))))))->finalize (object); |
804 | } |
805 | |
806 | EggToolbarsModel * |
807 | egg_toolbars_model_new (void) |
808 | { |
809 | return EGG_TOOLBARS_MODEL (g_object_new (EGG_TYPE_TOOLBARS_MODEL, NULL))((((EggToolbarsModel*) (void *) g_type_check_instance_cast (( GTypeInstance*) ((g_object_new ((egg_toolbars_model_get_type ( )), ((void*)0)))), ((egg_toolbars_model_get_type ())))))); |
810 | } |
811 | |
812 | void |
813 | egg_toolbars_model_remove_toolbar (EggToolbarsModel *model, |
814 | int position) |
815 | { |
816 | GNode *node; |
817 | EggTbModelFlags flags; |
818 | |
819 | g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ; } } while (0); |
820 | |
821 | flags = egg_toolbars_model_get_flags (model, position); |
822 | |
823 | if (!(flags & EGG_TB_MODEL_NOT_REMOVABLE)) |
824 | { |
825 | node = g_node_nth_child (model->priv->toolbars, position); |
826 | g_return_if_fail (node != NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "node != NULL"); return ; } } while (0); |
827 | |
828 | toolbar_node_free (node, model); |
829 | |
830 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), signals[TOOLBAR_REMOVED], |
831 | 0, position); |
832 | } |
833 | } |
834 | |
835 | void |
836 | egg_toolbars_model_remove_item (EggToolbarsModel *model, |
837 | int toolbar_position, |
838 | int position) |
839 | { |
840 | GNode *node, *toolbar; |
841 | |
842 | g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ; } } while (0); |
843 | |
844 | toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); |
845 | g_return_if_fail (toolbar != NULL)do { if ((toolbar != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toolbar != NULL" ); return; } } while (0); |
846 | |
847 | node = g_node_nth_child (toolbar, position); |
848 | g_return_if_fail (node != NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "node != NULL"); return ; } } while (0); |
849 | |
850 | item_node_free (node, model); |
851 | |
852 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), signals[ITEM_REMOVED], 0, |
853 | toolbar_position, position); |
854 | } |
855 | |
856 | void |
857 | egg_toolbars_model_move_item (EggToolbarsModel *model, |
858 | int toolbar_position, |
859 | int position, |
860 | int new_toolbar_position, |
861 | int new_position) |
862 | { |
863 | GNode *node, *toolbar, *new_toolbar; |
864 | |
865 | g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ; } } while (0); |
866 | |
867 | toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); |
868 | g_return_if_fail (toolbar != NULL)do { if ((toolbar != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toolbar != NULL" ); return; } } while (0); |
869 | |
870 | new_toolbar = g_node_nth_child (model->priv->toolbars, new_toolbar_position); |
871 | g_return_if_fail (new_toolbar != NULL)do { if ((new_toolbar != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "new_toolbar != NULL" ); return; } } while (0); |
872 | |
873 | node = g_node_nth_child (toolbar, position); |
874 | g_return_if_fail (node != NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "node != NULL"); return ; } } while (0); |
875 | |
876 | g_node_unlink (node); |
877 | |
878 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), signals[ITEM_REMOVED], 0, |
879 | toolbar_position, position); |
880 | |
881 | g_node_insert (new_toolbar, new_position, node); |
882 | |
883 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), signals[ITEM_ADDED], 0, |
884 | new_toolbar_position, new_position); |
885 | } |
886 | |
887 | void |
888 | egg_toolbars_model_delete_item (EggToolbarsModel *model, |
889 | const char *name) |
890 | { |
891 | EggToolbarsItem *idata; |
892 | EggToolbarsToolbar *tdata; |
893 | GNode *toolbar, *item, *next; |
894 | int tpos, ipos; |
895 | |
896 | g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((model)); GType __t = ((egg_toolbars_model_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0) ); else __r = g_type_check_instance_is_a (__inst, __t); __r; } )))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "EGG_IS_TOOLBARS_MODEL (model)"); return ; } } while (0); |
897 | |
898 | toolbar = g_node_first_child (model->priv->toolbars)((model->priv->toolbars) ? ((GNode*) (model->priv-> toolbars))->children : ((void*)0)); |
899 | tpos = 0; |
900 | |
901 | while (toolbar != NULL((void*)0)) |
902 | { |
903 | item = g_node_first_child (toolbar)((toolbar) ? ((GNode*) (toolbar))->children : ((void*)0)); |
904 | ipos = 0; |
905 | |
906 | /* Don't delete toolbars that were already empty */ |
907 | if (item == NULL((void*)0)) |
908 | { |
909 | toolbar = g_node_next_sibling (toolbar)((toolbar) ? ((GNode*) (toolbar))->next : ((void*)0)); |
910 | continue; |
911 | } |
912 | |
913 | while (item != NULL((void*)0)) |
914 | { |
915 | next = g_node_next_sibling (item)((item) ? ((GNode*) (item))->next : ((void*)0)); |
916 | idata = item->data; |
917 | if (strcmp (idata->name, name) == 0) |
918 | { |
919 | item_node_free (item, model); |
920 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), |
921 | signals[ITEM_REMOVED], |
922 | 0, tpos, ipos); |
923 | } |
924 | else |
925 | { |
926 | ipos++; |
927 | } |
928 | |
929 | item = next; |
930 | } |
931 | |
932 | next = g_node_next_sibling (toolbar)((toolbar) ? ((GNode*) (toolbar))->next : ((void*)0)); |
933 | tdata = toolbar->data; |
934 | if (!(tdata->flags & EGG_TB_MODEL_NOT_REMOVABLE) && |
935 | g_node_first_child (toolbar)((toolbar) ? ((GNode*) (toolbar))->children : ((void*)0)) == NULL((void*)0)) |
936 | { |
937 | toolbar_node_free (toolbar, model); |
938 | |
939 | g_signal_emit (G_OBJECT (model)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), (((GType) ((20) << (2)))))))), |
940 | signals[TOOLBAR_REMOVED], |
941 | 0, tpos); |
942 | } |
943 | else |
944 | { |
945 | tpos++; |
946 | } |
947 | |
948 | toolbar = next; |
949 | } |
950 | } |
951 | |
952 | int |
953 | egg_toolbars_model_n_items (EggToolbarsModel *model, |
954 | int toolbar_position) |
955 | { |
956 | GNode *toolbar; |
957 | |
958 | toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); |
959 | g_return_val_if_fail (toolbar != NULL, -1)do { if ((toolbar != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toolbar != NULL" ); return (-1); } } while (0); |
960 | |
961 | return g_node_n_children (toolbar); |
962 | } |
963 | |
964 | const char * |
965 | egg_toolbars_model_item_nth (EggToolbarsModel *model, |
966 | int toolbar_position, |
967 | int position) |
968 | { |
969 | GNode *toolbar; |
970 | GNode *item; |
971 | EggToolbarsItem *idata; |
972 | |
973 | toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); |
974 | g_return_val_if_fail (toolbar != NULL, NULL)do { if ((toolbar != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toolbar != NULL" ); return (((void*)0)); } } while (0); |
975 | |
976 | item = g_node_nth_child (toolbar, position); |
977 | g_return_val_if_fail (item != NULL, NULL)do { if ((item != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "item != NULL"); return (((void*)0)); } } while (0); |
978 | |
979 | idata = item->data; |
980 | return idata->name; |
981 | } |
982 | |
983 | int |
984 | egg_toolbars_model_n_toolbars (EggToolbarsModel *model) |
985 | { |
986 | return g_node_n_children (model->priv->toolbars); |
987 | } |
988 | |
989 | const char * |
990 | egg_toolbars_model_toolbar_nth (EggToolbarsModel *model, |
991 | int position) |
992 | { |
993 | GNode *toolbar; |
994 | EggToolbarsToolbar *tdata; |
995 | |
996 | toolbar = g_node_nth_child (model->priv->toolbars, position); |
997 | g_return_val_if_fail (toolbar != NULL, NULL)do { if ((toolbar != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "toolbar != NULL" ); return (((void*)0)); } } while (0); |
998 | |
999 | tdata = toolbar->data; |
1000 | |
1001 | return tdata->name; |
1002 | } |
1003 | |
1004 | /** |
1005 | * egg_toolbars_model_get_types: |
1006 | * @model: |
1007 | * |
1008 | * Returns: (transfer none) (element-type EggToolbarsItemType): |
1009 | */ |
1010 | GList * |
1011 | egg_toolbars_model_get_types (EggToolbarsModel *model) |
1012 | { |
1013 | return model->priv->types; |
1014 | } |
1015 | |
1016 | /** |
1017 | * egg_toolbars_model_set_types: |
1018 | * @model: |
1019 | * @types: (element-type EggToolbarsItemType): |
1020 | * |
1021 | */ |
1022 | void |
1023 | egg_toolbars_model_set_types (EggToolbarsModel *model, GList *types) |
1024 | { |
1025 | model->priv->types = types; |
1026 | } |
1027 | |
1028 | static void |
1029 | fill_avail_array (gpointer key, gpointer value, GPtrArray *array) |
1030 | { |
1031 | int flags = GPOINTER_TO_INT (value)((gint) (glong) (value)); |
1032 | if ((flags & EGG_TB_MODEL_NAME_KNOWN) && !(flags & EGG_TB_MODEL_NAME_USED)) |
1033 | g_ptr_array_add (array, key); |
1034 | } |
1035 | |
1036 | /** |
1037 | * egg_toolbars_model_get_name_avail: |
1038 | * @model: |
1039 | * |
1040 | * Returns: (element-type utf8) (transfer container): |
1041 | */ |
1042 | GPtrArray * |
1043 | egg_toolbars_model_get_name_avail (EggToolbarsModel *model) |
1044 | { |
1045 | GPtrArray *array = g_ptr_array_new (); |
1046 | g_hash_table_foreach (model->priv->flags, (GHFunc) fill_avail_array, array); |
1047 | return array; |
1048 | } |
1049 | |
1050 | gint |
1051 | egg_toolbars_model_get_name_flags (EggToolbarsModel *model, const char *name) |
1052 | { |
1053 | return GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, name))((gint) (glong) (g_hash_table_lookup (model->priv->flags , name))); |
1054 | } |
1055 | |
1056 | void |
1057 | egg_toolbars_model_set_name_flags (EggToolbarsModel *model, const char *name, gint flags) |
1058 | { |
1059 | g_hash_table_insert (model->priv->flags, g_strdup (name)g_strdup_inline (name), GINT_TO_POINTER (flags)((gpointer) (glong) (flags))); |
1060 | } |