summaryrefslogtreecommitdiff
path: root/capplets/file-types/mime-types-model.c
diff options
context:
space:
mode:
Diffstat (limited to 'capplets/file-types/mime-types-model.c')
-rw-r--r--capplets/file-types/mime-types-model.c624
1 files changed, 0 insertions, 624 deletions
diff --git a/capplets/file-types/mime-types-model.c b/capplets/file-types/mime-types-model.c
deleted file mode 100644
index 5522d0ab1..000000000
--- a/capplets/file-types/mime-types-model.c
+++ /dev/null
@@ -1,624 +0,0 @@
-/* -*- mode: c; style: linux -*- */
-
-/* mime-types-model.c
- * Copyright (C) 2000 Red Hat, Inc.,
- * (C) 2002 Ximian, Inc.
- *
- * Written by Bradford Hovinen <hovinen@ximian.com>
- * Based on code by Jonathan Blandford <jrb@redhat.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- * The model-related bootstrapping is lifted from gtk+/gtk/gtktreestore.c
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "mime-types-model.h"
-#include "mime-type-info.h"
-#include "service-info.h"
-
-#define IS_CATEGORY(entry) ((entry) != NULL && (entry)->type == MODEL_ENTRY_CATEGORY)
-
-enum {
- PROP_0,
- PROP_CATEGORY_ONLY
-};
-
-struct _MimeTypesModelPrivate
-{
- gint stamp;
- gboolean category_only;
-};
-
-static GObjectClass *parent_class;
-
-
-
-static void mime_types_model_init (MimeTypesModel *mime_types_model,
- MimeTypesModelClass *class);
-static void mime_types_model_class_init (MimeTypesModelClass *class);
-static void mime_types_model_base_init (MimeTypesModelClass *class);
-
-static void mime_types_model_tree_model_init (GtkTreeModelIface *iface);
-
-static void mime_types_model_set_prop (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void mime_types_model_get_prop (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-
-static void mime_types_model_finalize (GObject *object);
-
-static guint mime_types_model_get_flags (GtkTreeModel *tree_model);
-static gint mime_types_model_get_n_columns (GtkTreeModel *tree_model);
-static GType mime_types_model_get_column_type (GtkTreeModel *tree_model,
- gint index);
-static gboolean mime_types_model_get_iter (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreePath *path);
-static GtkTreePath *mime_types_model_get_path (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static void mime_types_model_get_value (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gint column,
- GValue *value);
-static gboolean mime_types_model_iter_next (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static gboolean mime_types_model_iter_children (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent);
-static gboolean mime_types_model_iter_has_child (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static gint mime_types_model_iter_n_children (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static gboolean mime_types_model_iter_nth_child (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent,
- gint n);
-static gboolean mime_types_model_iter_parent (GtkTreeModel *tree_model,
- GtkTreeIter *result,
- GtkTreeIter *child);
-
-
-
-GType
-mime_types_model_get_type (void)
-{
- static GType mime_types_model_type = 0;
-
- if (!mime_types_model_type) {
- static const GTypeInfo mime_types_model_info = {
- sizeof (MimeTypesModelClass),
- (GBaseInitFunc) mime_types_model_base_init,
- NULL, /* GBaseFinalizeFunc */
- (GClassInitFunc) mime_types_model_class_init,
- NULL, /* GClassFinalizeFunc */
- NULL, /* user-supplied data */
- sizeof (MimeTypesModel),
- 0, /* n_preallocs */
- (GInstanceInitFunc) mime_types_model_init,
- NULL
- };
-
- static const GInterfaceInfo tree_model_info = {
- (GInterfaceInitFunc) mime_types_model_tree_model_init,
- NULL,
- NULL
- };
-
- mime_types_model_type =
- g_type_register_static (G_TYPE_OBJECT,
- "MimeTypesModel",
- &mime_types_model_info, 0);
-
- g_type_add_interface_static (mime_types_model_type,
- GTK_TYPE_TREE_MODEL,
- &tree_model_info);
- }
-
- return mime_types_model_type;
-}
-
-static void
-mime_types_model_init (MimeTypesModel *mime_types_model, MimeTypesModelClass *class)
-{
- mime_types_model->p = g_new0 (MimeTypesModelPrivate, 1);
- mime_types_model->p->stamp = g_random_int ();
-}
-
-static void
-mime_types_model_base_init (MimeTypesModelClass *class)
-{
-}
-
-static void
-mime_types_model_class_init (MimeTypesModelClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
-
- object_class->finalize = mime_types_model_finalize;
- object_class->set_property = mime_types_model_set_prop;
- object_class->get_property = mime_types_model_get_prop;
-
- g_object_class_install_property
- (object_class, PROP_CATEGORY_ONLY,
- g_param_spec_boolean ("category-only",
- _("Model for categories only"),
- _("Model for categories only"),
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- parent_class = G_OBJECT_CLASS
- (g_type_class_ref (G_TYPE_OBJECT));
-}
-
-static void
-mime_types_model_tree_model_init (GtkTreeModelIface *iface)
-{
- iface->get_flags = mime_types_model_get_flags;
- iface->get_n_columns = mime_types_model_get_n_columns;
- iface->get_column_type = mime_types_model_get_column_type;
- iface->get_iter = mime_types_model_get_iter;
- iface->get_path = mime_types_model_get_path;
- iface->get_value = mime_types_model_get_value;
- iface->iter_next = mime_types_model_iter_next;
- iface->iter_children = mime_types_model_iter_children;
- iface->iter_has_child = mime_types_model_iter_has_child;
- iface->iter_n_children = mime_types_model_iter_n_children;
- iface->iter_nth_child = mime_types_model_iter_nth_child;
- iface->iter_parent = mime_types_model_iter_parent;
-}
-
-static void
-mime_types_model_set_prop (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- MimeTypesModel *mime_types_model;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_MIME_TYPES_MODEL (object));
-
- mime_types_model = MIME_TYPES_MODEL (object);
-
- switch (prop_id) {
- case PROP_CATEGORY_ONLY:
- mime_types_model->p->category_only = g_value_get_boolean (value);
- break;
-
- default:
- g_warning ("Bad property set");
- break;
- }
-}
-
-static void
-mime_types_model_get_prop (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- MimeTypesModel *mime_types_model;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_MIME_TYPES_MODEL (object));
-
- mime_types_model = MIME_TYPES_MODEL (object);
-
- switch (prop_id) {
- case PROP_CATEGORY_ONLY:
- g_value_set_boolean (value, mime_types_model->p->category_only);
- break;
-
- default:
- g_warning ("Bad property get");
- break;
- }
-}
-
-static void
-mime_types_model_finalize (GObject *object)
-{
- MimeTypesModel *mime_types_model;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_MIME_TYPES_MODEL (object));
-
- mime_types_model = MIME_TYPES_MODEL (object);
-
- g_free (mime_types_model->p);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-GObject *
-mime_types_model_new (gboolean category_only)
-{
- return g_object_new (mime_types_model_get_type (),
- "category-only", category_only,
- NULL);
-}
-
-void
-mime_types_model_construct_iter (MimeTypesModel *model, ModelEntry *entry, GtkTreeIter *iter)
-{
- g_return_if_fail (model != NULL);
- g_return_if_fail (IS_MIME_TYPES_MODEL (model));
- g_return_if_fail (iter != NULL);
-
- iter->stamp = model->p->stamp;
- iter->user_data = entry;
-}
-
-
-
-static guint
-mime_types_model_get_flags (GtkTreeModel *tree_model)
-{
- g_return_val_if_fail (tree_model != NULL, 0);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), 0);
-
- return GTK_TREE_MODEL_ITERS_PERSIST;
-}
-
-static gint
-mime_types_model_get_n_columns (GtkTreeModel *tree_model)
-{
- g_return_val_if_fail (tree_model != NULL, 0);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), 0);
-
- return MODEL_LAST_COLUMN;
-}
-
-static GType
-mime_types_model_get_column_type (GtkTreeModel *tree_model, gint index)
-{
- g_return_val_if_fail (tree_model != NULL, G_TYPE_INVALID);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), G_TYPE_INVALID);
-
- switch (index) {
- case MODEL_COLUMN_MIME_TYPE:
- case MODEL_COLUMN_DESCRIPTION:
- case MODEL_COLUMN_FILE_EXT:
- return G_TYPE_STRING;
- break;
-
- case MODEL_COLUMN_ICON:
- return GDK_TYPE_PIXBUF;
- break;
-
- default:
- return G_TYPE_INVALID;
- break;
- }
-}
-
-/* Adapted from gtk+/gtk/gtktreestore.c, gtk_tree_store_get_iter */
-
-static gboolean
-mime_types_model_get_iter (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path)
-{
- MimeTypesModel *model;
- gint *indices, depth, i;
- GtkTreeIter parent;
-
- g_return_val_if_fail (tree_model != NULL, FALSE);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), FALSE);
-
- model = MIME_TYPES_MODEL (tree_model);
-
- indices = gtk_tree_path_get_indices (path);
- depth = gtk_tree_path_get_depth (path);
-
- g_return_val_if_fail (depth > 0, FALSE);
-
- parent.stamp = model->p->stamp;
- parent.user_data = get_model_entries (tree_model);
-
- if (!gtk_tree_model_iter_nth_child (tree_model, iter, &parent, indices[0]))
- return FALSE;
-
- for (i = 1; i < depth; i++) {
- parent = *iter;
- if (!gtk_tree_model_iter_nth_child (tree_model, iter, &parent, indices[i]))
- return FALSE;
- }
-
- return TRUE;
-}
-
-static GtkTreePath *
-mime_types_model_get_path (GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- MimeTypesModel *model;
- ModelEntry *entry;
- GtkTreePath *path;
-
- g_return_val_if_fail (tree_model != NULL, NULL);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), NULL);
-
- model = MIME_TYPES_MODEL (tree_model);
-
- path = gtk_tree_path_new ();
- entry = iter->user_data;
-
- while (entry->parent != NULL) {
- gtk_tree_path_prepend_index (path, model_entry_get_index (entry->parent, entry));
- entry = entry->parent;
- }
-
- return path;
-}
-
-static void
-mime_types_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value)
-{
- MimeTypesModel *model;
- ModelEntry *entry;
- GdkPixbuf *icon;
- gchar *pretty_string;
-
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (IS_MIME_TYPES_MODEL (tree_model));
-
- model = MIME_TYPES_MODEL (tree_model);
- entry = iter->user_data;
-
- switch (column) {
- case MODEL_COLUMN_MIME_TYPE:
- g_value_init (value, G_TYPE_STRING);
-
- switch (entry->type) {
- case MODEL_ENTRY_MIME_TYPE:
- g_value_set_static_string (value, MIME_TYPE_INFO (entry)->mime_type);
- break;
-
- case MODEL_ENTRY_SERVICE:
- g_value_set_static_string (value, SERVICE_INFO (entry)->protocol);
- break;
-
- default:
- g_value_set_string (value, "");
- break;
- }
-
- break;
-
- case MODEL_COLUMN_DESCRIPTION:
- g_value_init (value, G_TYPE_STRING);
-
- switch (entry->type) {
- case MODEL_ENTRY_MIME_TYPE:
- g_value_set_static_string (value, mime_type_info_get_description (MIME_TYPE_INFO (entry)));
- break;
-
- case MODEL_ENTRY_CATEGORY:
- g_value_set_static_string (value, MIME_CATEGORY_INFO (entry)->description);
- break;
-
- case MODEL_ENTRY_SERVICE:
- g_value_set_static_string (value, service_info_get_description (SERVICE_INFO (entry)));
- break;
-
- case MODEL_ENTRY_SERVICES_CATEGORY:
- g_value_set_static_string (value, _("Internet Services"));
- break;
-
- default:
- g_value_set_string (value, "");
- break;
- }
-
- break;
-
- case MODEL_COLUMN_ICON:
- g_value_init (value, GDK_TYPE_PIXBUF);
-
- switch (entry->type) {
- case MODEL_ENTRY_MIME_TYPE:
- icon = mime_type_info_get_icon (MIME_TYPE_INFO (entry));
-
- if (icon != NULL)
- g_value_set_object (value, G_OBJECT (icon));
- else
- g_value_set_object (value, NULL);
-
- break;
-
- default:
- g_value_set_object (value, NULL);
- break;
- }
-
- break;
-
- case MODEL_COLUMN_FILE_EXT:
- g_value_init (value, G_TYPE_STRING);
-
- switch (entry->type) {
- case MODEL_ENTRY_MIME_TYPE:
- pretty_string = mime_type_info_get_file_extensions_pretty_string (MIME_TYPE_INFO (entry));
- g_value_set_string (value, pretty_string);
- g_free (pretty_string);
- break;
-
- case MODEL_ENTRY_SERVICE:
- g_value_set_static_string (value, SERVICE_INFO (entry)->protocol);
- break;
-
- default:
- g_value_set_string (value, "");
- break;
- }
-
- break;
- }
-}
-
-static gboolean
-mime_types_model_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- MimeTypesModel *model;
- ModelEntry *entry;
-
- g_return_val_if_fail (tree_model != NULL, FALSE);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), FALSE);
-
- model = MIME_TYPES_MODEL (tree_model);
- entry = iter->user_data;
-
- if (entry != NULL)
- iter->user_data = entry->next;
-
- if (model->p->category_only)
- while (iter->user_data != NULL && !IS_CATEGORY (MODEL_ENTRY (iter->user_data)))
- iter->user_data = MODEL_ENTRY (iter->user_data)->next;
-
- return iter->user_data != NULL;
-}
-
-static gboolean
-mime_types_model_iter_children (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent)
-{
- MimeTypesModel *model;
- ModelEntry *entry;
-
- g_return_val_if_fail (tree_model != NULL, FALSE);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), FALSE);
-
- model = MIME_TYPES_MODEL (tree_model);
-
- if (parent != NULL)
- entry = parent->user_data;
- else
- entry = get_model_entries (tree_model);
-
- iter->user_data = entry->first_child;
-
- if (model->p->category_only)
- while (iter->user_data != NULL && !IS_CATEGORY (MODEL_ENTRY (iter->user_data)))
- iter->user_data = MODEL_ENTRY (iter->user_data)->next;
-
- return iter->user_data != NULL;
-}
-
-static gboolean
-mime_types_model_iter_has_child (GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- MimeTypesModel *model;
- ModelEntry *entry;
-
- g_return_val_if_fail (tree_model != NULL, FALSE);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), FALSE);
-
- model = MIME_TYPES_MODEL (tree_model);
- entry = iter->user_data;
-
- if (entry == NULL)
- return get_model_entries (tree_model)->first_child != NULL;
- else if (!model->p->category_only || IS_CATEGORY (entry->first_child))
- return entry->first_child != NULL;
- else {
- for (entry = entry->first_child; entry != NULL; entry = entry->next)
- if (IS_CATEGORY (entry))
- return TRUE;
-
- return FALSE;
- }
-}
-
-static gint
-mime_types_model_iter_n_children (GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- MimeTypesModel *model;
- ModelEntry *entry, *tmp;
- gint count = 0;
-
- g_return_val_if_fail (tree_model != NULL, 0);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), 0);
-
- model = MIME_TYPES_MODEL (tree_model);
-
- if (iter != NULL)
- entry = iter->user_data;
- else
- entry = NULL;
-
- if (entry == NULL)
- entry = get_model_entries (tree_model);
-
- if (model->p->category_only) {
- for (tmp = entry->first_child; tmp != NULL; tmp = tmp->next) {
- if (tmp->type == MODEL_ENTRY_CATEGORY)
- count++;
- }
- } else {
- for (tmp = entry->first_child; tmp != NULL; tmp = tmp->next)
- count++;
- }
-
- return count;
-}
-
-static gboolean
-mime_types_model_iter_nth_child (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, gint n)
-{
- MimeTypesModel *model;
- ModelEntry *entry;
-
- g_return_val_if_fail (tree_model != NULL, FALSE);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), FALSE);
-
- model = MIME_TYPES_MODEL (tree_model);
-
- if (parent != NULL)
- entry = parent->user_data;
- else
- entry = NULL;
-
- if (entry == NULL)
- iter->user_data = model_entry_get_nth_child (get_model_entries (tree_model), n, model->p->category_only);
- else
- iter->user_data = model_entry_get_nth_child (entry, n, model->p->category_only);
-
- return iter->user_data != NULL;
-}
-
-static gboolean
-mime_types_model_iter_parent (GtkTreeModel *tree_model, GtkTreeIter *result, GtkTreeIter *child)
-{
- MimeTypesModel *model;
- ModelEntry *entry;
-
- g_return_val_if_fail (tree_model != NULL, FALSE);
- g_return_val_if_fail (IS_MIME_TYPES_MODEL (tree_model), FALSE);
-
- model = MIME_TYPES_MODEL (tree_model);
- entry = child->user_data;
-
- if (entry != NULL && entry->parent->type != MODEL_ENTRY_NONE)
- result->user_data = entry->parent;
- else
- result->user_data = NULL;
-
- return result->user_data != NULL;
-}
-