diff options
author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-01-27 17:10:17 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-01-27 17:10:17 +0900 |
commit | b997768168b7d7a0f10dd1fce2070bb4c8110d4b (patch) | |
tree | fef953494c8d843f9a9067490d1ba82c4924ca8c | |
parent | 401771de795063ec14ee0321966afce9f82ea427 (diff) | |
download | glade-b997768168b7d7a0f10dd1fce2070bb4c8110d4b.tar.gz |
* plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-gtk.c: Added support for GtkRecentFilter
as well as reading and writing the new <mime-types> <patterns> and <applications> tags
that are recently added to GtkRecentFilter's GtkBuildable implementation.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | plugins/gtk+/glade-gtk.c | 207 | ||||
-rw-r--r-- | plugins/gtk+/gtk+.xml.in | 35 |
3 files changed, 244 insertions, 4 deletions
@@ -1,3 +1,9 @@ +2011-01-27 Tristan Van Berkom <tristanvb@openismus.com> + + * plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-gtk.c: Added support for GtkRecentFilter + as well as reading and writing the new <mime-types> <patterns> and <applications> tags + that are recently added to GtkRecentFilter's GtkBuildable implementation. + 2011-01-26 Tristan Van Berkom <tristanvb@openismus.com> * plugins/gtk+/Makefile.am, plugins/gtk+/glade-string-list.[ch]: Added Boxed type diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c index 128ddb2a..e363b061 100644 --- a/plugins/gtk+/glade-gtk.c +++ b/plugins/gtk+/glade-gtk.c @@ -8934,8 +8934,7 @@ glade_gtk_combo_box_text_write_widget (GladeWidgetAdaptor * adaptor, return; /* First chain up and read in all the normal properties.. */ - GWA_GET_CLASS (GTK_TYPE_WIDGET)->write_widget (adaptor, widget, context, - node); + GWA_GET_CLASS (GTK_TYPE_COMBO_BOX)->write_widget (adaptor, widget, context, node); attrs_node = glade_xml_node_new (context, GLADE_TAG_ITEMS); @@ -11956,3 +11955,207 @@ glade_gtk_text_tag_table_action_activate (GladeWidgetAdaptor *adaptor, glade_gtk_text_tag_table_launch_editor (object); } } + + +/*--------------------------- GtkRecentFilter ---------------------------------*/ +#define GLADE_TAG_PATTERNS "patterns" +#define GLADE_TAG_PATTERN "pattern" +#define GLADE_TAG_MIME_TYPES "mime-types" +#define GLADE_TAG_MIME_TYPE "mime-type" +#define GLADE_TAG_APPLICATIONS "applications" +#define GLADE_TAG_APPLICATION "applciation" + +typedef enum { + FILTER_PATTERN, + FILTER_MIME, + FILTER_APPLICATION +} FilterType; + +GladeEditorProperty * +glade_gtk_recent_filter_create_eprop (GladeWidgetAdaptor * adaptor, + GladePropertyClass * klass, + gboolean use_command) +{ + GladeEditorProperty *eprop; + GParamSpec *pspec; + + pspec = glade_property_class_get_pspec (klass); + + if (pspec->value_type == GLADE_TYPE_STRING_LIST) + { + eprop = glade_eprop_string_list_new (klass, use_command, FALSE); + } + else + eprop = GWA_GET_CLASS + (G_TYPE_OBJECT)->create_eprop (adaptor, klass, use_command); + + return eprop; +} + +gchar * +glade_gtk_recent_filter_string_from_value (GladeWidgetAdaptor * adaptor, + GladePropertyClass * klass, + const GValue * value) +{ + GParamSpec *pspec; + + pspec = glade_property_class_get_pspec (klass); + + if (pspec->value_type == GLADE_TYPE_STRING_LIST) + { + GList *list = g_value_get_boxed (value); + + return glade_string_list_to_string (list); + } + else + return GWA_GET_CLASS + (G_TYPE_OBJECT)->string_from_value (adaptor, klass, value); +} + +static void +glade_gtk_filter_read_strings (GladeWidget *widget, + GladeXmlNode *node, + FilterType type, + const gchar *property_name) +{ + GladeXmlNode *items_node; + GladeXmlNode *item_node; + GList *string_list = NULL; + const gchar *string_group_tag; + const gchar *string_tag; + + switch (type) + { + case FILTER_PATTERN: + string_group_tag = GLADE_TAG_PATTERNS; + string_tag = GLADE_TAG_PATTERN; + break; + case FILTER_MIME: + string_group_tag = GLADE_TAG_MIME_TYPES; + string_tag = GLADE_TAG_MIME_TYPE; + break; + case FILTER_APPLICATION: + string_group_tag = GLADE_TAG_APPLICATIONS; + string_tag = GLADE_TAG_APPLICATION; + break; + default: + g_assert_not_reached (); + break; + } + + if ((items_node = + glade_xml_search_child (node, string_group_tag)) != NULL) + { + + for (item_node = glade_xml_node_get_children (items_node); + item_node; item_node = glade_xml_node_next (item_node)) + { + gchar *str; + + if (!glade_xml_node_verify (item_node, string_tag)) + continue; + + if ((str = glade_xml_get_content (item_node)) == NULL) + continue; + + string_list = glade_string_list_append (string_list, str, NULL, NULL, FALSE); + g_free (str); + } + + glade_widget_property_set (widget, property_name, string_list); + glade_string_list_free (string_list); + } +} + +static void +glade_gtk_filter_write_strings (GladeWidget *widget, + GladeXmlContext *context, + GladeXmlNode *node, + FilterType type, + const gchar *property_name) +{ + GladeXmlNode *item_node; + GList *string_list = NULL, *l; + GladeString *string; + const gchar *string_tag; + + switch (type) + { + case FILTER_PATTERN: string_tag = GLADE_TAG_PATTERN; break; + case FILTER_MIME: string_tag = GLADE_TAG_MIME_TYPE; break; + case FILTER_APPLICATION: string_tag = GLADE_TAG_APPLICATION; break; + default: + g_assert_not_reached (); + break; + } + + if (!glade_widget_property_get (widget, property_name, &string_list) || !string_list) + return; + + for (l = string_list; l; l = l->next) + { + string = l->data; + + item_node = glade_xml_node_new (context, string_tag); + glade_xml_node_append_child (node, item_node); + + glade_xml_set_content (item_node, string->string); + } +} + +void +glade_gtk_recent_filter_read_widget (GladeWidgetAdaptor *adaptor, + GladeWidget *widget, + GladeXmlNode *node) +{ + if (!glade_xml_node_verify (node, GLADE_XML_TAG_WIDGET)) + return; + + /* First chain up and read in all the normal properties.. */ + GWA_GET_CLASS (G_TYPE_OBJECT)->read_widget (adaptor, widget, node); + + glade_gtk_filter_read_strings (widget, node, FILTER_MIME, "glade-mime-types"); + glade_gtk_filter_read_strings (widget, node, FILTER_PATTERN, "glade-patterns"); + glade_gtk_filter_read_strings (widget, node, FILTER_APPLICATION, "glade-applications"); +} + +void +glade_gtk_recent_filter_write_widget (GladeWidgetAdaptor *adaptor, + GladeWidget *widget, + GladeXmlContext *context, + GladeXmlNode *node) +{ + GladeXmlNode *strings_node; + + if (!glade_xml_node_verify (node, GLADE_XML_TAG_WIDGET)) + return; + + /* First chain up and read in all the normal properties.. */ + GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node); + + strings_node = glade_xml_node_new (context, GLADE_TAG_MIME_TYPES); + glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_MIME, "glade-mime-types"); + + if (!glade_xml_node_get_children (strings_node)) + glade_xml_node_delete (strings_node); + else + glade_xml_node_append_child (node, strings_node); + + + strings_node = glade_xml_node_new (context, GLADE_TAG_PATTERNS); + glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_PATTERN, "glade-patterns"); + + if (!glade_xml_node_get_children (strings_node)) + glade_xml_node_delete (strings_node); + else + glade_xml_node_append_child (node, strings_node); + + strings_node = glade_xml_node_new (context, GLADE_TAG_APPLICATIONS); + glade_gtk_filter_write_strings (widget, context, strings_node, + FILTER_APPLICATION, "glade-applications"); + + if (!glade_xml_node_get_children (strings_node)) + glade_xml_node_delete (strings_node); + else + glade_xml_node_append_child (node, strings_node); +} diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in index f30ebb44..67cdf854 100644 --- a/plugins/gtk+/gtk+.xml.in +++ b/plugins/gtk+/gtk+.xml.in @@ -1221,7 +1221,7 @@ embedded in another object</_tooltip> <type>GParamBoxed</type> <value-type>GladeStringList</value-type> </parameter-spec> - <_tooltip>The items to show in the combo box</_tooltip> + <_tooltip>The list of items to show in the combo box</_tooltip> </property> </properties> </glade-widget-class> @@ -1846,7 +1846,6 @@ embedded in another object</_tooltip> <glade-widget-class name="GtkRecentChooserDialog" generic-name="recentchooserdialog" _title="Recent Chooser Dialog"/> - <!-- Objects --> <glade-widget-class name="GtkSizeGroup" generic-name="sizegroup" _title="Size Group" toplevel="True"> <depends-function>glade_gtk_size_group_depends</depends-function> <read-widget-function>glade_gtk_size_group_read_widget</read-widget-function> @@ -3369,6 +3368,37 @@ embedded in another object</_tooltip> <glade-widget-class name="GtkFileFilter" generic-name="filefilter" _title="File Filter" toplevel="True"/> + + <glade-widget-class name="GtkRecentFilter" generic-name="recentfilter" _title="Recent Filter" + toplevel="True"> + <create-editor-property-function>glade_gtk_recent_filter_create_eprop</create-editor-property-function> + <string-from-value-function>glade_gtk_recent_filter_string_from_value</string-from-value-function> + <read-widget-function>glade_gtk_recent_filter_read_widget</read-widget-function> + <write-widget-function>glade_gtk_recent_filter_write_widget</write-widget-function> + <properties> + <property id="glade-mime-types" _name="Mime Types" save="False" ignore="True" since="3.0"> + <parameter-spec> + <type>GParamBoxed</type> + <value-type>GladeStringList</value-type> + </parameter-spec> + <_tooltip>The list of mime types to add to the filter</_tooltip> + </property> + <property id="glade-patterns" _name="Patterns" save="False" ignore="True" since="3.0"> + <parameter-spec> + <type>GParamBoxed</type> + <value-type>GladeStringList</value-type> + </parameter-spec> + <_tooltip>The list of file name patterns to add to the filter</_tooltip> + </property> + <property id="glade-applications" _name="Applications" save="False" ignore="True" since="3.0"> + <parameter-spec> + <type>GParamBoxed</type> + <value-type>GladeStringList</value-type> + </parameter-spec> + <_tooltip>The list of application names to add to the filter</_tooltip> + </property> + </properties> + </glade-widget-class> </glade-widget-classes> @@ -3507,6 +3537,7 @@ embedded in another object</_tooltip> <glade-widget-class-ref name="GtkIconFactory"/> <glade-widget-class-ref name="GtkStatusIcon"/> <glade-widget-class-ref name="GtkFileFilter"/> + <glade-widget-class-ref name="GtkRecentFilter"/> </glade-widget-group> </glade-catalog> |