diff options
Diffstat (limited to 'shell/e-component-info.c')
-rw-r--r-- | shell/e-component-info.c | 295 |
1 files changed, 0 insertions, 295 deletions
diff --git a/shell/e-component-info.c b/shell/e-component-info.c deleted file mode 100644 index 19d999a868..0000000000 --- a/shell/e-component-info.c +++ /dev/null @@ -1,295 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-component-info.c - Load/save information about Evolution components. - * - * Copyright (C) 2002 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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. - * - * Author: Ettore Perazzoli <ettore@ximian.com> - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "e-component-info.h" - -#include "e-util/e-lang-utils.h" - -#include <gnome-xml/parser.h> -#include <gnome-xml/xmlmemory.h> - -#include <string.h> -#include <stdlib.h> - - -static char * -get_value_for_node (xmlNode *node) -{ - xmlChar *xml_value; - char *glib_value; - - xml_value = xmlNodeGetContent (node); - glib_value = g_strdup (xml_value); - xmlFree (xml_value); - - return glib_value; -} - -static xmlNode * -lookup_node (xmlNode *parent_node, - const char *node_name) -{ - xmlNode *p; - - for (p = parent_node->childs; p != NULL; p = p->next) { - if (strcmp ((const char *) p->name, node_name) == 0) - return p; - } - - return NULL; -} - -static char * -get_value (xmlNode *parent_node, - const char *node_name) -{ - xmlNode *node; - - node = lookup_node (parent_node, node_name); - if (node == NULL) - return NULL; - - return get_value_for_node (node); -} - -static xmlNode * -lookup_node_for_language (xmlNode *parent_node, - const char *node_name, - const char *language_id) -{ - xmlNode *p; - - for (p = parent_node->childs; p != NULL; p = p->next) { - xmlChar *node_language_id; - - if (strcmp ((const char *) p->name, node_name) != 0) - continue; - - node_language_id = xmlNodeGetLang (p); - if (node_language_id == NULL) - continue; - - if (strcmp (node_language_id, language_id) == 0) { - xmlFree (node_language_id); - return p; - } - } - - return NULL; -} - -static char * -get_i18n_value (xmlNode *parent_node, - const char *node_name, - GSList *language_list) -{ - GSList *p; - - for (p = language_list; p != NULL; p = p->next) { - xmlNode *node; - const char *language_id; - - language_id = (const char *) p->data; - node = lookup_node_for_language (parent_node, node_name, language_id); - - if (node == NULL && language_id[2] == '_') { - char short_language_id[3]; - - strncpy (short_language_id, language_id, 2); - node = lookup_node_for_language (parent_node, node_name, short_language_id); - } - - if (node != NULL) { - xmlChar *xml_value; - char *glib_value; - - xml_value = xmlNodeGetContent (node); - glib_value = g_strdup (xml_value); - xmlFree (xml_value); - - return glib_value; - } - } - - return get_value (parent_node, node_name); -} - - -static void -add_folder_type (EComponentInfo *info, - xmlNode *parent_node, - GSList *language_list) -{ - EComponentInfoFolderType *folder_type; - char *user_creatable_string; - - folder_type = g_new (EComponentInfoFolderType, 1); - - folder_type->name = get_value (parent_node, "name"); - folder_type->icon_file_name = get_value (parent_node, "icon_file_name"); - folder_type->display_name = get_i18n_value (parent_node, "display_name", language_list); - folder_type->description = get_i18n_value (parent_node, "description", language_list); - - /* FIXME dnd types. */ - - folder_type->accepted_dnd_types = NULL; - folder_type->exported_dnd_types = NULL; - - user_creatable_string = get_value (parent_node, "user_creatable"); - if (user_creatable_string == NULL || atoi (user_creatable_string) == 0) - folder_type->is_user_creatable = FALSE; - else - folder_type->is_user_creatable = TRUE; - - info->folder_types = g_slist_prepend (info->folder_types, folder_type); -} - -static void -add_user_creatable_item_type (EComponentInfo *info, - xmlNode *parent_node, - GSList *language_list) -{ - EComponentInfoUserCreatableItemType *type; - - type = g_new (EComponentInfoUserCreatableItemType, 1); - - type->id = get_value (parent_node, "id"); - type->description = get_i18n_value (parent_node, "description", language_list); - type->icon_file_name = get_value (parent_node, "icon_file_name"); - type->menu_description = get_i18n_value (parent_node, "menu_description", language_list); - type->menu_shortcut = get_value (parent_node, "menu_shortcut"); - - info->user_creatable_item_types = g_slist_prepend (info->user_creatable_item_types, type); -} - -static void -add_uri_schema (EComponentInfo *info, - xmlNode *parent_node) -{ - info->uri_schemas = g_slist_prepend (info->uri_schemas, get_value_for_node (parent_node)); -} - - -EComponentInfo * -e_component_info_load (const char *file_name) -{ - EComponentInfo *new; - xmlDoc *doc; - xmlNode *root; - xmlNode *p; - GSList *language_list; - - g_return_val_if_fail (file_name != NULL, NULL); - - doc = xmlParseFile (file_name); - if (doc == NULL) - return NULL; - - root = xmlDocGetRootElement (doc); - if (root == NULL || strcmp (root->name, "evolution_component") != 0) { - xmlFreeDoc (doc); - return NULL; - } - - language_list = e_get_language_list (); - - new = g_new (EComponentInfo, 1); - - new->id = get_value (root, "id"); - new->description = get_i18n_value (root, "description", language_list); - new->icon_file_name = get_value (root, "icon_file_name"); - - new->folder_types = NULL; - new->uri_schemas = NULL; - new->user_creatable_item_types = NULL; - - for (p = root->childs; p != NULL; p = p->next) { - if (strcmp ((char *) p->name, "folder_type") == 0) - add_folder_type (new, p, language_list); - else if (strcmp ((char *) p->name, "user_creatable_item_type") == 0) - add_user_creatable_item_type (new, p, language_list); - else if (strcmp ((char *) p->name, "uri_schema") == 0) - add_uri_schema (new, p); - } - - xmlFreeDoc (doc); - e_free_language_list (language_list); - - return new; -} - -void -e_component_info_free (EComponentInfo *component_info) -{ - GSList *p; - - g_return_if_fail (component_info != NULL); - - g_free (component_info->id); - g_free (component_info->description); - g_free (component_info->icon_file_name); - - for (p = component_info->folder_types; p != NULL; p = p->next) { - EComponentInfoFolderType *folder_type; - GSList *q; - - folder_type = (EComponentInfoFolderType *) p->data; - g_free (folder_type->name); - g_free (folder_type->icon_file_name); - g_free (folder_type->display_name); - g_free (folder_type->description); - - for (q = folder_type->accepted_dnd_types; q != NULL; q = q->next) - g_free ((char *) q->data); - g_slist_free (folder_type->accepted_dnd_types); - - for (q = folder_type->exported_dnd_types; q != NULL; q = q->next) - g_free ((char *) q->data); - g_slist_free (folder_type->exported_dnd_types); - - g_free (folder_type); - } - g_free (component_info->folder_types); - - for (p = component_info->uri_schemas; p != NULL; p = p->next) - g_free ((char *) p->data); - g_slist_free (component_info->uri_schemas); - - for (p = component_info->user_creatable_item_types; p != NULL; p = p->next) { - EComponentInfoUserCreatableItemType *type; - - type = (EComponentInfoUserCreatableItemType *) p->data; - - g_free (type->id); - g_free (type->description); - g_free (type->icon_file_name); - g_free (type->menu_description); - g_free (type->menu_shortcut); - } - g_slist_free (component_info->user_creatable_item_types); - - g_free (component_info); -} |