|
Packit |
1e8aac |
/*
|
|
Packit |
1e8aac |
* glade-gtk-recent-file-filter.c - GladeWidgetAdaptor for GtkRecentFilter and GtkFileFilter
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Copyright (C) 2013 Tristan Van Berkom
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Authors:
|
|
Packit |
1e8aac |
* Tristan Van Berkom <tristan.van.berkom@gmail.com>
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This library is free software; you can redistribute it and/or modify it
|
|
Packit |
1e8aac |
* under the terms of the GNU Lesser General Public License as
|
|
Packit |
1e8aac |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
1e8aac |
* the License, or (at your option) any later version.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This library is distributed in the hope that it will be useful, but
|
|
Packit |
1e8aac |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
1e8aac |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
1e8aac |
* Lesser General Public License for more details.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
1e8aac |
* License along with this program; if not, write to the Free Software
|
|
Packit |
1e8aac |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <config.h>
|
|
Packit |
1e8aac |
#include <glib/gi18n-lib.h>
|
|
Packit |
1e8aac |
#include <gladeui/glade.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include "glade-string-list.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#define GLADE_TAG_PATTERNS "patterns"
|
|
Packit |
1e8aac |
#define GLADE_TAG_PATTERN "pattern"
|
|
Packit |
1e8aac |
#define GLADE_TAG_MIME_TYPES "mime-types"
|
|
Packit |
1e8aac |
#define GLADE_TAG_MIME_TYPE "mime-type"
|
|
Packit |
1e8aac |
#define GLADE_TAG_APPLICATIONS "applications"
|
|
Packit |
1e8aac |
#define GLADE_TAG_APPLICATION "application"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
typedef enum {
|
|
Packit |
1e8aac |
FILTER_PATTERN,
|
|
Packit |
1e8aac |
FILTER_MIME,
|
|
Packit |
1e8aac |
FILTER_APPLICATION
|
|
Packit |
1e8aac |
} FilterType;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_gtk_filter_read_strings (GladeWidget *widget,
|
|
Packit |
1e8aac |
GladeXmlNode *node,
|
|
Packit |
1e8aac |
FilterType type,
|
|
Packit |
1e8aac |
const gchar *property_name)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeXmlNode *items_node;
|
|
Packit |
1e8aac |
GladeXmlNode *item_node;
|
|
Packit |
1e8aac |
GList *string_list = NULL;
|
|
Packit |
1e8aac |
const gchar *string_group_tag;
|
|
Packit |
1e8aac |
const gchar *string_tag;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case FILTER_PATTERN:
|
|
Packit |
1e8aac |
string_group_tag = GLADE_TAG_PATTERNS;
|
|
Packit |
1e8aac |
string_tag = GLADE_TAG_PATTERN;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case FILTER_MIME:
|
|
Packit |
1e8aac |
string_group_tag = GLADE_TAG_MIME_TYPES;
|
|
Packit |
1e8aac |
string_tag = GLADE_TAG_MIME_TYPE;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case FILTER_APPLICATION:
|
|
Packit |
1e8aac |
string_group_tag = GLADE_TAG_APPLICATIONS;
|
|
Packit |
1e8aac |
string_tag = GLADE_TAG_APPLICATION;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
g_assert_not_reached ();
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if ((items_node =
|
|
Packit |
1e8aac |
glade_xml_search_child (node, string_group_tag)) != NULL)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (item_node = glade_xml_node_get_children (items_node);
|
|
Packit |
1e8aac |
item_node; item_node = glade_xml_node_next (item_node))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *str;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_xml_node_verify (item_node, string_tag))
|
|
Packit |
1e8aac |
continue;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if ((str = glade_xml_get_content (item_node)) == NULL)
|
|
Packit |
1e8aac |
continue;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
string_list = glade_string_list_append (string_list, str, NULL, NULL, FALSE, NULL);
|
|
Packit |
1e8aac |
g_free (str);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_widget_property_set (widget, property_name, string_list);
|
|
Packit |
1e8aac |
glade_string_list_free (string_list);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_gtk_filter_write_strings (GladeWidget *widget,
|
|
Packit |
1e8aac |
GladeXmlContext *context,
|
|
Packit |
1e8aac |
GladeXmlNode *node,
|
|
Packit |
1e8aac |
FilterType type,
|
|
Packit |
1e8aac |
const gchar *property_name)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeXmlNode *item_node;
|
|
Packit |
1e8aac |
GList *string_list = NULL, *l;
|
|
Packit |
1e8aac |
GladeString *string;
|
|
Packit |
1e8aac |
const gchar *string_tag;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case FILTER_PATTERN: string_tag = GLADE_TAG_PATTERN; break;
|
|
Packit |
1e8aac |
case FILTER_MIME: string_tag = GLADE_TAG_MIME_TYPE; break;
|
|
Packit |
1e8aac |
case FILTER_APPLICATION: string_tag = GLADE_TAG_APPLICATION; break;
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
g_assert_not_reached ();
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_widget_property_get (widget, property_name, &string_list) || !string_list)
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (l = string_list; l; l = l->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
string = l->data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
item_node = glade_xml_node_new (context, string_tag);
|
|
Packit |
1e8aac |
glade_xml_node_append_child (node, item_node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_xml_set_content (item_node, string->string);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GladeEditorProperty *
|
|
Packit |
1e8aac |
glade_gtk_recent_file_filter_create_eprop (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GladePropertyClass * klass,
|
|
Packit |
1e8aac |
gboolean use_command)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeEditorProperty *eprop;
|
|
Packit |
1e8aac |
GParamSpec *pspec;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
pspec = glade_property_class_get_pspec (klass);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (pspec->value_type == GLADE_TYPE_STRING_LIST)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
eprop = glade_eprop_string_list_new (klass, use_command, FALSE, FALSE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
eprop = GWA_GET_CLASS
|
|
Packit |
1e8aac |
(G_TYPE_OBJECT)->create_eprop (adaptor, klass, use_command);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return eprop;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gchar *
|
|
Packit |
1e8aac |
glade_gtk_recent_file_filter_string_from_value (GladeWidgetAdaptor * adaptor,
|
|
Packit |
1e8aac |
GladePropertyClass * klass,
|
|
Packit |
1e8aac |
const GValue * value)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GParamSpec *pspec;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
pspec = glade_property_class_get_pspec (klass);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (pspec->value_type == GLADE_TYPE_STRING_LIST)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *list = g_value_get_boxed (value);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return glade_string_list_to_string (list);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
return GWA_GET_CLASS
|
|
Packit |
1e8aac |
(G_TYPE_OBJECT)->string_from_value (adaptor, klass, value);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_recent_filter_read_widget (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GladeWidget *widget,
|
|
Packit |
1e8aac |
GladeXmlNode *node)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) ||
|
|
Packit |
1e8aac |
glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* First chain up and read in all the normal properties.. */
|
|
Packit |
1e8aac |
GWA_GET_CLASS (G_TYPE_OBJECT)->read_widget (adaptor, widget, node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_gtk_filter_read_strings (widget, node, FILTER_MIME, "glade-mime-types");
|
|
Packit |
1e8aac |
glade_gtk_filter_read_strings (widget, node, FILTER_PATTERN, "glade-patterns");
|
|
Packit |
1e8aac |
glade_gtk_filter_read_strings (widget, node, FILTER_APPLICATION, "glade-applications");
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_recent_filter_write_widget (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GladeWidget *widget,
|
|
Packit |
1e8aac |
GladeXmlContext *context,
|
|
Packit |
1e8aac |
GladeXmlNode *node)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeXmlNode *strings_node;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) ||
|
|
Packit |
1e8aac |
glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* First chain up and read in all the normal properties.. */
|
|
Packit |
1e8aac |
GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
strings_node = glade_xml_node_new (context, GLADE_TAG_MIME_TYPES);
|
|
Packit |
1e8aac |
glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_MIME, "glade-mime-types");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_xml_node_get_children (strings_node))
|
|
Packit |
1e8aac |
glade_xml_node_delete (strings_node);
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
glade_xml_node_append_child (node, strings_node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
strings_node = glade_xml_node_new (context, GLADE_TAG_PATTERNS);
|
|
Packit |
1e8aac |
glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_PATTERN, "glade-patterns");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_xml_node_get_children (strings_node))
|
|
Packit |
1e8aac |
glade_xml_node_delete (strings_node);
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
glade_xml_node_append_child (node, strings_node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
strings_node = glade_xml_node_new (context, GLADE_TAG_APPLICATIONS);
|
|
Packit |
1e8aac |
glade_gtk_filter_write_strings (widget, context, strings_node,
|
|
Packit |
1e8aac |
FILTER_APPLICATION, "glade-applications");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_xml_node_get_children (strings_node))
|
|
Packit |
1e8aac |
glade_xml_node_delete (strings_node);
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
glade_xml_node_append_child (node, strings_node);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_file_filter_read_widget (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GladeWidget *widget,
|
|
Packit |
1e8aac |
GladeXmlNode *node)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) ||
|
|
Packit |
1e8aac |
glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* First chain up and read in all the normal properties.. */
|
|
Packit |
1e8aac |
GWA_GET_CLASS (G_TYPE_OBJECT)->read_widget (adaptor, widget, node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_gtk_filter_read_strings (widget, node, FILTER_MIME, "glade-mime-types");
|
|
Packit |
1e8aac |
glade_gtk_filter_read_strings (widget, node, FILTER_PATTERN, "glade-patterns");
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_gtk_file_filter_write_widget (GladeWidgetAdaptor *adaptor,
|
|
Packit |
1e8aac |
GladeWidget *widget,
|
|
Packit |
1e8aac |
GladeXmlContext *context,
|
|
Packit |
1e8aac |
GladeXmlNode *node)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeXmlNode *strings_node;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) ||
|
|
Packit |
1e8aac |
glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* First chain up and read in all the normal properties.. */
|
|
Packit |
1e8aac |
GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
strings_node = glade_xml_node_new (context, GLADE_TAG_MIME_TYPES);
|
|
Packit |
1e8aac |
glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_MIME, "glade-mime-types");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_xml_node_get_children (strings_node))
|
|
Packit |
1e8aac |
glade_xml_node_delete (strings_node);
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
glade_xml_node_append_child (node, strings_node);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
strings_node = glade_xml_node_new (context, GLADE_TAG_PATTERNS);
|
|
Packit |
1e8aac |
glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_PATTERN, "glade-patterns");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!glade_xml_node_get_children (strings_node))
|
|
Packit |
1e8aac |
glade_xml_node_delete (strings_node);
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
glade_xml_node_append_child (node, strings_node);
|
|
Packit |
1e8aac |
}
|