diff options
author | Mikael Hallendal <micke@imendio.com> | 2005-01-13 17:38:16 +0000 |
---|---|---|
committer | Mikael Hallendal <hallski@src.gnome.org> | 2005-01-13 17:38:16 +0000 |
commit | dc3bbb143ab9ee8891776a792a00dd736a2ff4cf (patch) | |
tree | c908557af9bd5c2f66f10a5c98b0c121802d63a1 | |
parent | fa72dfbf614280565fd04a4b556048103c9b9bee (diff) | |
download | glade-dc3bbb143ab9ee8891776a792a00dd736a2ff4cf.tar.gz |
- Parsing part of getting packing defaults working. Now the information
2005-01-13 Mikael Hallendal <micke@imendio.com>
* src/glade-gtk.c: (glade_gtk_menu_bar_post_create):
* src/glade-types.h:
* src/glade-widget-class.c:
(glade_widget_class_packing_default_free),
(glade_widget_class_child_packing_free), (glade_widget_class_free),
(glade_widget_class_set_packing_defaults_from_node),
(glade_widget_class_extend_with_node),
(glade_widget_class_get_packing_defaults):
* src/glade-widget-class.h:
- Parsing part of getting packing defaults working. Now the information
needs to be used when packing.
* src/glade.h:
* widgets/glade-catalog.dtd:
- Added packing-defaults with sub nodes
* widgets/gtk+.xml:
- Added packing defaults for menu bar in GtkBox.
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | src/glade-gtk.c | 28 | ||||
-rw-r--r-- | src/glade-types.h | 3 | ||||
-rw-r--r-- | src/glade-widget-class.c | 111 | ||||
-rw-r--r-- | src/glade-widget-class.h | 13 | ||||
-rw-r--r-- | src/glade.h | 4 | ||||
-rw-r--r-- | widgets/glade-catalog.dtd | 14 | ||||
-rw-r--r-- | widgets/gtk+.xml.in | 10 |
8 files changed, 198 insertions, 4 deletions
@@ -1,3 +1,22 @@ +2005-01-13 Mikael Hallendal <micke@imendio.com> + + * src/glade-gtk.c: (glade_gtk_menu_bar_post_create): + * src/glade-types.h: + * src/glade-widget-class.c: + (glade_widget_class_packing_default_free), + (glade_widget_class_child_packing_free), (glade_widget_class_free), + (glade_widget_class_set_packing_defaults_from_node), + (glade_widget_class_extend_with_node), + (glade_widget_class_get_packing_defaults): + * src/glade-widget-class.h: + - Parsing part of getting packing defaults working. Now the information + needs to be used when packing. + * src/glade.h: + * widgets/glade-catalog.dtd: + - Added packing-defaults with sub nodes + * widgets/gtk+.xml: + - Added packing defaults for menu bar in GtkBox. + 2005-01-12 Mikael Hallendal <micke@imendio.com> * configure.in: Bumped GTK+ requirements to 2.4 diff --git a/src/glade-gtk.c b/src/glade-gtk.c index f6b15a1f..3963fe04 100644 --- a/src/glade-gtk.c +++ b/src/glade-gtk.c @@ -1150,6 +1150,34 @@ glade_gtk_window_post_create (GObject *object) gtk_window_set_default_size (window, 440, 250); } +void GLADEGTK_API +glade_gtk_menu_bar_post_create (GObject *object) +{ + GtkMenuBar *menu_bar; + GtkWidget *item; + GtkWidget *parent; + + g_return_if_fail (GTK_IS_MENU_BAR (object)); + + menu_bar = GTK_MENU_BAR (object); + parent = gtk_widget_get_parent (GTK_WIDGET (menu_bar)); + + if (!parent) + g_print ("NOOOOO PARENT\n"); + + gtk_box_set_child_packing (GTK_BOX (parent), GTK_WIDGET (menu_bar), + FALSE, TRUE, 0, GTK_PACK_START); + + item = gtk_menu_item_new_with_mnemonic (_("_File")); + gtk_menu_bar_append (menu_bar, item); + + item = gtk_menu_item_new_with_mnemonic (_("_Edit")); + gtk_menu_bar_append (menu_bar, item); + + item = gtk_menu_item_new_with_mnemonic (_("_Help")); + gtk_menu_bar_append (menu_bar, item); +} + /** * glade_gtk_dialog_post_create: * @object: diff --git a/src/glade-types.h b/src/glade-types.h index 93299592..07919c46 100644 --- a/src/glade-types.h +++ b/src/glade-types.h @@ -11,7 +11,8 @@ typedef struct _GladeClipboard GladeClipboard; typedef struct _GladeWidget GladeWidget; typedef struct _GladeWidgetClass GladeWidgetClass; -typedef struct _GladeWidgetClassSignal GladeWidgetClassSignal; +typedef struct _GladeWidgetClassSignal GladeWidgetClassSignal; +typedef struct _GladePackagingDefault GladePackingDefault; typedef struct _GladeProperty GladeProperty; typedef struct _GladePropertyClass GladePropertyClass; diff --git a/src/glade-widget-class.c b/src/glade-widget-class.c index d3e8af8b..ea73993a 100644 --- a/src/glade-widget-class.c +++ b/src/glade-widget-class.c @@ -50,6 +50,11 @@ static GHashTable *widget_classes = NULL; #define GLADE_ICON_SIZE 24 +typedef struct { + gchar *parent_name; + GList *packing_defaults; +} GladeChildPacking; + static void glade_widget_class_free_child (GladeSupportedChild *child) { @@ -58,6 +63,23 @@ glade_widget_class_free_child (GladeSupportedChild *child) g_free (child); } +static void +glade_widget_class_packing_default_free (GladePackingDefault *def) +{ + g_free (def->id); + g_free (def->value); +} + +static void +glade_widget_class_child_packing_free (GladeChildPacking *packing) +{ + g_free (packing->parent_name); + + g_list_foreach (packing->packing_defaults, + (GFunc) glade_widget_class_packing_default_free, NULL); + g_list_free (packing->packing_defaults); +} + /** * glade_widget_class_free: * @widget_class: a #GladeWidgetClass @@ -79,6 +101,8 @@ glade_widget_class_free (GladeWidgetClass *widget_class) g_list_foreach (widget_class->children, (GFunc) glade_widget_class_free_child, NULL); g_list_free (widget_class->children); + + g_list_foreach (widget_class->signals, (GFunc) glade_signal_free, NULL); g_list_free (widget_class->signals); @@ -374,6 +398,65 @@ glade_widget_class_update_properties_from_node (GladeXmlNode *node, } } +static void +glade_widget_class_set_packing_defaults_from_node (GladeXmlNode *node, + GladeWidgetClass *widget_class) +{ + GladeXmlNode *child; + + child = glade_xml_node_get_children (node); + for (; child; child = glade_xml_node_next (child)) + { + gchar *name; + GladeXmlNode *prop_node; + GladeChildPacking *packing; + + if (!glade_xml_node_verify (child, GLADE_TAG_PARENT_CLASS)) + continue; + + name = glade_xml_get_property_string_required (child, + GLADE_TAG_NAME, + widget_class->name); + + if (!name) + continue; + + packing = g_new0 (GladeChildPacking, 1); + packing->parent_name = name; + packing->packing_defaults = NULL; + + prop_node = glade_xml_node_get_children (child); + for (; prop_node; prop_node = glade_xml_node_next (prop_node)) + { + GladePackingDefault *def; + gchar *id; + gchar *value; + + id = glade_xml_get_property_string_required (prop_node, + GLADE_TAG_ID, + widget_class->name); + if (!id) + continue; + + value = glade_xml_get_property_string_required (prop_node, + GLADE_TAG_DEFAULT, + widget_class->name); + if (!value) + { + g_free (id); + continue; + } + + def = g_new0 (GladePackingDefault, 1); + def->id = id; + def->value = value; + + packing->packing_defaults = g_list_prepend (packing->packing_defaults, + def); + } + } +} + static gint glade_widget_class_find_child_by_type (GladeSupportedChild *child, GType type) { @@ -528,6 +611,13 @@ glade_widget_class_extend_with_node (GladeWidgetClass *widget_class, widget_class); } + child = glade_xml_search_child (node, GLADE_TAG_PACKING_DEFAULTS); + if (child) + { + glade_widget_class_set_packing_defaults_from_node (child, + widget_class); + } + return TRUE; } @@ -1259,3 +1349,24 @@ glade_widget_class_contains_non_widgets (GladeWidgetClass *class) } return FALSE; } + +/* Returned list should be freed with g_list_free */ +GList * +glade_widget_class_get_packing_defaults (GladeWidgetClass *class, + GladeWidgetClass *parent) +{ + GList *l; + + for (l = class->packing_defaults; l; l = l->next) + { + GladeChildPacking *packing; + + packing = (GladeChildPacking *) l->data; + /* FIXME: Chain up */ + if (strcmp (packing->parent_name, parent->name) == 0) + return g_list_copy (packing->packing_defaults); + } + + return NULL; +} + diff --git a/src/glade-widget-class.h b/src/glade-widget-class.h index 64edd0dc..c0e532be 100644 --- a/src/glade-widget-class.h +++ b/src/glade-widget-class.h @@ -64,6 +64,7 @@ struct _GladeWidgetClass GList *signals; /* List of GladeWidgetClassSignal objects */ GList *children; /* List of GladeSupportedChild objects */ + GList *packing_defaults; /* List of GladeChildProperty objects */ GModule *module; /* Module with the (optional) special functions * needed for placeholder_replace, post_create_function @@ -138,7 +139,15 @@ struct _GladeWidgetClassSignal gchar *type; /* Name of the object class that this signal belongs to * eg GtkButton */ }; - + +/* Need to go through all properties in catalog file and compare + * against parent class. + */ +struct _GladePackagingDefault +{ + gchar *id; + gchar *value; +}; GladeWidgetClass *glade_widget_class_new (GladeXmlNode *class_node, const gchar *library); @@ -181,6 +190,8 @@ void glade_widget_class_container_replace_child (GladeWidgetC GObject *new); gboolean glade_widget_class_contains_non_widgets (GladeWidgetClass *class); +GList * glade_widget_class_get_packing_defaults (GladeWidgetClass *class, + GladeWidgetClass *parent); G_END_DECLS #endif /* __GLADE_WIDGET_CLASS_H__ */ diff --git a/src/glade.h b/src/glade.h index 0fe917e2..34cfedd0 100644 --- a/src/glade.h +++ b/src/glade.h @@ -137,6 +137,10 @@ #define GLADE_TAG_CHILD "child" #define GLADE_TAG_CHILDREN "children" #define GLADE_TAG_TRANSLATABLE "translatable" +#define GLADE_TAG_PACKING_DEFAULTS "packing-defaults" +#define GLADE_TAG_PARENT_CLASS "parent-class" +#define GLADE_TAG_CHILD_PROPERTY "child-property" + extern gboolean verbose; diff --git a/widgets/glade-catalog.dtd b/widgets/glade-catalog.dtd index 71b66041..4b22bbfd 100644 --- a/widgets/glade-catalog.dtd +++ b/widgets/glade-catalog.dtd @@ -7,13 +7,14 @@ library CDATA #IMPLIED requires CDATA #IMPLIED> -<!ELEMENT glade-widget-classes (glade-widget-class*)> +<!ELEMENT glade-widget-classes (glade-widget-class+)> <!ELEMENT glade-widget-class (post-create-function?, get-internal-child-function?, child-property-applies-function?, properties?, - children?)> + children?, + packing-defaults?)> <!ATTLIST glade-widget-class name CDATA #REQUIRED generic-name CDATA #IMPLIED @@ -88,3 +89,12 @@ <!ELEMENT glade-widget-class-ref EMPTY> <!ATTLIST glade-widget-class-ref name CDATA #REQUIRED> +<!ELEMENT packing-defaults (parent-class+)> + +<!ELEMENT parent-class (child-property+)> +<!ATTLIST parent-class name CDATA #REQUIRED> + +<!ELEMENT child-property EMPTY> +<!ATTLIST child-property id CDATA #REQUIRED + default CDATA #REQUIRED> + diff --git a/widgets/gtk+.xml.in b/widgets/gtk+.xml.in index fcf6b9a1..c6284969 100644 --- a/widgets/gtk+.xml.in +++ b/widgets/gtk+.xml.in @@ -99,6 +99,10 @@ </glade-widget-class> <glade-widget-class name="GtkMenuBar" generic-name="menubar" title="Menu Bar"> + <post-create-function>glade_gtk_menu_bar_post_create</post-create-function> + <properties> + <property id="expand" default="False"/> + </properties> <!-- menubar is a container you can't add placeholders to it --> <children> <child> @@ -106,6 +110,12 @@ <fill-empty-function>empty</fill-empty-function> </child> </children> + <packing-defaults> + <parent-class name="GtkBox"> + <child-property id="expand" default="false"/> + </parent-class> + </packing-defaults> + </glade-widget-class> <glade-widget-class name="GtkToolbar" generic-name="toolbar" title="Tool Bar"> |