diff options
-rw-r--r-- | e-util/ChangeLog | 6 | ||||
-rw-r--r-- | e-util/e-categories-config.c | 61 | ||||
-rw-r--r-- | e-util/e-categories-config.h | 1 | ||||
-rw-r--r-- | e-util/e-categories-master-list-wombat.c | 58 |
4 files changed, 115 insertions, 11 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog index 7c10e4ee29..f0557ac098 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,5 +1,11 @@ 2001-07-04 Rodrigo Moya <rodrigo@ximian.com> + * e-categories-master-list-wombat.c (ecmlw_load): load all icons + and colors for each category + + (ecmlw_save): save all icons and categories associated with + each category + * e-categories-config.c: use BonoboConf to store/retrieve settings, and use ECategoriesMasterListWombat when creating a ECategories dialog widget diff --git a/e-util/e-categories-config.c b/e-util/e-categories-config.c index eb8e07b0c7..8d84826077 100644 --- a/e-util/e-categories-config.c +++ b/e-util/e-categories-config.c @@ -18,6 +18,7 @@ #include "e-categories-master-list-wombat.h" typedef struct { + char *filename; GdkPixmap *pixmap; GdkBitmap *mask; } icon_data_t; @@ -158,8 +159,8 @@ void e_categories_config_get_icon_for (const char *category, GdkPixmap **pixmap, GdkBitmap **mask) { icon_data_t *icon_data; - char *tmp; char *icon_file; + char *tmp; g_return_if_fail (category != NULL); g_return_if_fail (pixmap != NULL); @@ -179,13 +180,59 @@ e_categories_config_get_icon_for (const char *category, GdkPixmap **pixmap, GdkB tmp = g_strdup_printf ("General/Categories/%s/Icon", category); icon_file = config_get_string (tmp); g_free (tmp); + + if (icon_file) { + /* add new pixmap from file to the list */ + icon_data = g_new (icon_data_t, 1); + icon_data->filename = icon_file; + icon_data->pixmap = gdk_pixmap_create_from_xpm (NULL, &icon_data->mask, NULL, icon_file); + g_hash_table_insert (cat_icons, (gpointer) category, (gpointer) icon_data); + + *pixmap = icon_data->pixmap; + if (*mask) + *mask = icon_data->mask; + } + else { + *pixmap = NULL; + if (mask != NULL) + *mask = NULL; + } +} + +/** + * e_categories_config_get_icon_file_for + * @category: Category for which to get the icon file + */ +const char * +e_categories_config_get_icon_file_for (const char *category) +{ + icon_data_t *icon_data; + char *icon_file; + char *tmp; + + g_return_val_if_fail (category != NULL, NULL); + + if (!initialized) + initialize_categories_config (); + + icon_data = g_hash_table_lookup (cat_icons, category); + if (icon_data != NULL) + return (const char *) icon_data->filename; + + /* not found, so look in the configuration */ + tmp = g_strdup_printf ("General/Categories/%s/Icon", category); + icon_file = config_get_string (tmp); + g_free (tmp); + if (icon_file) { - g_free (icon_file); + /* add new pixmap from file to the list */ + icon_data = g_new (icon_data_t, 1); + icon_data->filename = icon_file; + icon_data->pixmap = gdk_pixmap_create_from_xpm (NULL, &icon_data->mask, NULL, icon_file); + g_hash_table_insert (cat_icons, (gpointer) category, (gpointer) icon_data); } - *pixmap = NULL; - if (mask != NULL) - *mask = NULL; + return (const char *) icon_file; } /** @@ -211,11 +258,13 @@ e_categories_config_set_icon_for (const char *category, const char *pixmap_file) gdk_pixmap_unref (icon_data->pixmap); gdk_bitmap_unref (icon_data->mask); + g_free (icon_data->filename); g_free (icon_data); } /* add new pixmap from file to the list */ icon_data = g_new (icon_data_t, 1); + icon_data->filename = g_strdup (pixmap_file); icon_data->pixmap = gdk_pixmap_create_from_xpm (NULL, &icon_data->mask, NULL, pixmap_file); g_hash_table_insert (cat_icons, (gpointer) category, (gpointer) icon_data); @@ -242,8 +291,6 @@ e_categories_config_open_dialog_for_entry (GtkEntry *entry) char *categories; GnomeDialog *dialog; int result; - GString *cat_icons; - GString *cat_colors; ECategoriesMasterList *ecml; g_return_if_fail (entry != NULL); diff --git a/e-util/e-categories-config.h b/e-util/e-categories-config.h index 9ad0b5fe09..0b798e466e 100644 --- a/e-util/e-categories-config.h +++ b/e-util/e-categories-config.h @@ -24,6 +24,7 @@ void e_categories_config_set_color_for (const char *category, const char *color) void e_categories_config_get_icon_for (const char *category, GdkPixmap **icon, GdkBitmap **mask); +const char *e_categories_config_get_icon_file_for (const char *category); void e_categories_config_set_icon_for (const char *category, const char *pixmap_file); diff --git a/e-util/e-categories-master-list-wombat.c b/e-util/e-categories-master-list-wombat.c index 4410b6f009..9b42802a2d 100644 --- a/e-util/e-categories-master-list-wombat.c +++ b/e-util/e-categories-master-list-wombat.c @@ -10,8 +10,12 @@ #include <config.h> #include "e-categories-master-list-wombat.h" +#include "e-categories-config.h" +#include <tree.h> +#include <parser.h> #include <gal/util/e-i18n.h> +#include <gal/util/e-xml-utils.h> #include <bonobo-conf/bonobo-config-database.h> #include <bonobo/bonobo-moniker-util.h> #include <bonobo/bonobo-exception.h> @@ -41,10 +45,39 @@ ecmlw_load (ECategoriesMasterListWombat *ecmlw) NULL, &def); - if (!def) - e_categories_master_list_array_from_string - (E_CATEGORIES_MASTER_LIST_ARRAY (ecmlw), - string); + /* parse the XML string */ + if (!def) { + xmlDocPtr doc; + xmlNodePtr node; + xmlNodePtr children; + char *string_copy; + + string_copy = g_strdup (string); + doc = xmlParseMemory (string_copy, strlen (string_copy)); + node = xmlDocGetRootElement (doc); + g_free (string_copy); + + /* add categories and their associated icons/colors */ + for (children = node->xmlChildrenNode; + children != NULL; + children = children->next) { + char *category; + char *icon; + char *color; + + category = e_xml_get_string_prop_by_name (children, "a"); + icon = (char *) e_categories_config_get_icon_file_for (category); + color = (char *) e_categories_config_get_color_for (category); + + e_categories_master_list_append ( + E_CATEGORIES_MASTER_LIST (ecmlw), + category, + color, + icon); + } + + xmlFreeDoc (doc); + } g_print ("load: %s\n", string); @@ -55,6 +88,8 @@ static void ecmlw_save (ECategoriesMasterListWombat *ecmlw) { char *string; + int i; + int count; CORBA_Environment ev; string = e_categories_master_list_array_to_string (E_CATEGORIES_MASTER_LIST_ARRAY (ecmlw)); @@ -68,6 +103,21 @@ ecmlw_save (ECategoriesMasterListWombat *ecmlw) string, &ev); + /* now save all icons and colors for each category */ + count = e_categories_master_list_count (E_CATEGORIES_MASTER_LIST (ecmlw)); + for (i = 0; i < count; i++) { + gchar *category; + gchar *icon; + gchar *color; + + category = e_categories_master_list_nth (E_CATEGORIES_MASTER_LIST (ecmlw), i); + icon = e_categories_master_list_nth_icon (E_CATEGORIES_MASTER_LIST (ecmlw), i); + color = e_categories_master_list_nth_color (E_CATEGORIES_MASTER_LIST (ecmlw), i); + + e_categories_config_set_icon_for (category, icon); + e_categories_config_set_color_for (category, color); + } + CORBA_exception_free (&ev); g_free (string); |