[glade/multiple-toplevels] * plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-gtk.c: Added support for GtkRecentFilter as well



commit 342e4b643fa1fd0249c9c1ef35cd9c595750fe12
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Thu Jan 27 17:10:17 2011 +0900

    	* 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.

 ChangeLog                |    6 ++
 plugins/gtk+/glade-gtk.c |  207 +++++++++++++++++++++++++++++++++++++++++++++-
 plugins/gtk+/gtk+.xml.in |   35 +++++++-
 3 files changed, 244 insertions(+), 4 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 9dd812a..b51d687 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 128ddb2..e363b06 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 f30ebb4..67cdf85 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>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]