diff options
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/menus/gal-view-menus.c | 188 | ||||
-rw-r--r-- | widgets/menus/gal-view-menus.h | 46 | ||||
-rw-r--r-- | widgets/misc/e-unicode.c | 4 |
3 files changed, 236 insertions, 2 deletions
diff --git a/widgets/menus/gal-view-menus.c b/widgets/menus/gal-view-menus.c new file mode 100644 index 0000000000..398c34d789 --- /dev/null +++ b/widgets/menus/gal-view-menus.c @@ -0,0 +1,188 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gal-view-menus.c: Savable state of a table. + * + * Author: + * Chris Lahey <clahey@helixcode.com> + * + * (C) 2000 Helix Code, Inc. + */ +#include <config.h> +#include <stdlib.h> +#include <gtk/gtksignal.h> +#include <gnome-xml/parser.h> +#include <gnome-xml/xmlmemory.h> +#include "gal/util/e-util.h" +#include "gal/util/e-xml-utils.h" +#include "gal-view-menus.h" +#include "gal-define-views-dialog.h" + +#define PARENT_TYPE (gtk_object_get_type()) + +static GtkObjectClass *gvm_parent_class; + +static void +gvm_destroy (GtkObject *object) +{ +#if 0 + GalViewMenus *gvm = GAL_VIEW_MENUS (object); +#endif + + GTK_OBJECT_CLASS (gvm_parent_class)->destroy (object); +} + +static void +gvm_class_init (GtkObjectClass *klass) +{ + gvm_parent_class = gtk_type_class (PARENT_TYPE); + + klass->destroy = gvm_destroy; +} + +E_MAKE_TYPE(gal_view_menus, "GalViewMenus", GalViewMenus, gvm_class_init, NULL, PARENT_TYPE); + +GalViewMenus * +gal_view_menus_new (void) +{ + GalViewMenus *gvm = gtk_type_new (GAL_VIEW_MENUS_TYPE); + + return (GalViewMenus *) gvm; +} + +static void +define_views(BonoboUIComponent *component, + GalViewMenus *menus, + char *cname) +{ + gtk_widget_show(gal_define_views_dialog_new()); +} + +static BonoboUIVerb verbs[] = { + {"DefineViews", (BonoboUIVerbFn) define_views, NULL, NULL}, +}; + +void gal_view_menus_apply (GalViewMenus *menus, + BonoboUIComponent *component, + CORBA_Environment *ev) +{ + bonobo_ui_component_set_translate(component, "/", "<Root> <menu> <submenu name=\"View\"> <menuitem name=\"DefineViews\" _label=\"Define Views\" verb=\"DefineViews\"/> </submenu></menu></Root>", ev); + bonobo_ui_component_add_verb_list_with_data(component, verbs, menus); +} + +#if 0 +gboolean +gal_view_menus_load_from_file (GalViewMenus *state, + const char *filename) +{ + xmlDoc *doc; + doc = xmlParseFile (filename); + if (doc) { + xmlNode *node = xmlDocGetRootElement(doc); + gal_view_menus_load_from_node(state, node); + xmlFreeDoc(doc); + return TRUE; + } + return FALSE; +} + +void +gal_view_menus_load_from_string (GalViewMenus *state, + const char *xml) +{ + xmlDoc *doc; + doc = xmlParseMemory ((char *) xml, strlen(xml)); + if (doc) { + xmlNode *node = xmlDocGetRootElement(doc); + gal_view_menus_load_from_node(state, node); + xmlFreeDoc(doc); + } +} + +void +gal_view_menus_load_from_node (GalViewMenus *state, + const xmlNode *node) +{ + xmlNode *children; + GList *list = NULL, *iterator; + int i; + + if (state->sort_info) + gtk_object_unref(GTK_OBJECT(state->sort_info)); + state->sort_info = NULL; + for (children = node->xmlChildrenNode; children; children = children->next) { + if (!strcmp(children->name, "column")) { + int *column = g_new(int, 1); + + *column = e_xml_get_integer_prop_by_name(children, "source"); + + list = g_list_append(list, column); + } else if (state->sort_info == NULL && !strcmp(children->name, "grouping")) { + state->sort_info = e_table_sort_info_new(); + e_table_sort_info_load_from_node(state->sort_info, children); + } + } + g_free(state->columns); + state->col_count = g_list_length(list); + state->columns = g_new(int, state->col_count); + for (iterator = list, i = 0; iterator; iterator = g_list_next(iterator), i++) { + state->columns[i] = *(int *)iterator->data; + g_free(iterator->data); + } + g_list_free(list); +} + +void +gal_view_menus_save_to_file (GalViewMenus *state, + const char *filename) +{ + xmlDoc *doc; + doc = xmlNewDoc("1.0"); + xmlDocSetRootElement(doc, gal_view_menus_save_to_node(state, NULL)); + xmlSaveFile(filename, doc); +} + +char * +gal_view_menus_save_to_string (GalViewMenus *state) +{ + char *ret_val; + xmlChar *string; + int length; + xmlDoc *doc; + + doc = xmlNewDoc(NULL); + xmlDocSetRootElement(doc, gal_view_menus_save_to_node(state, NULL)); + xmlDocDumpMemory(doc, &string, &length); + + ret_val = g_strdup(string); + xmlFree(string); + return ret_val; +} + +xmlNode * +gal_view_menus_save_to_node (GalViewMenus *state, + xmlNode *parent) +{ + int i; + xmlNode *node; + + if (parent) + node = xmlNewChild (parent, NULL, "GalViewMenus", NULL); + else + node = xmlNewNode (NULL, "GalViewMenus"); + + e_xml_set_double_prop_by_name(node, "state-version", 0.0); + + for (i = 0; i < state->col_count; i++) { + int column = state->columns[i]; + xmlNode *new_node; + + new_node = xmlNewChild(node, NULL, "column", NULL); + e_xml_set_integer_prop_by_name (new_node, "source", column); + } + + + e_table_sort_info_save_to_node(state->sort_info, node); + + return node; +} +#endif diff --git a/widgets/menus/gal-view-menus.h b/widgets/menus/gal-view-menus.h new file mode 100644 index 0000000000..74bfbdbe82 --- /dev/null +++ b/widgets/menus/gal-view-menus.h @@ -0,0 +1,46 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +#ifndef _GAL_VIEW_MENUS_H_ +#define _GAL_VIEW_MENUS_H_ + +#include <gtk/gtkobject.h> +#include <gnome-xml/tree.h> +#include <bonobo/bonobo-ui-component.h> + +#define GAL_VIEW_MENUS_TYPE (gal_view_menus_get_type ()) +#define GAL_VIEW_MENUS(o) (GTK_CHECK_CAST ((o), GAL_VIEW_MENUS_TYPE, GalViewMenus)) +#define GAL_VIEW_MENUS_CLASS(k) (GTK_CHECK_CLASS_CAST((k), GAL_VIEW_MENUS_TYPE, GalViewMenusClass)) +#define GAL_IS_VIEW_MENUS(o) (GTK_CHECK_TYPE ((o), GAL_VIEW_MENUS_TYPE)) +#define GAL_IS_VIEW_MENUS_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), GAL_VIEW_MENUS_TYPE)) + +typedef struct { + GtkObject base; + void *priv; +} GalViewMenus; + +typedef struct { + GtkObjectClass parent_class; +} GalViewMenusClass; + +GtkType gal_view_menus_get_type (void); +GalViewMenus *gal_view_menus_new (void); + +void gal_view_menus_apply (GalViewMenus *menus, + BonoboUIComponent *component, + CORBA_Environment *ev); + +#if 0 +gboolean gal_view_menus_load_from_file (GalViewMenus *menus, + const char *filename); +void gal_view_menus_load_from_string (GalViewMenus *menus, + const char *xml); +void gal_view_menus_load_from_node (GalViewMenus *menus, + const xmlNode *node); + +void gal_view_menus_save_to_file (GalViewMenus *menus, + const char *filename); +char *gal_view_menus_save_to_string (GalViewMenus *menus); +xmlNode *gal_view_menus_save_to_node (GalViewMenus *menus, + xmlNode *parent); +#endif + +#endif /* _GAL_VIEW_MENUS_H_ */ diff --git a/widgets/misc/e-unicode.c b/widgets/misc/e-unicode.c index cf3f0dcfd9..7281404088 100644 --- a/widgets/misc/e-unicode.c +++ b/widgets/misc/e-unicode.c @@ -49,7 +49,7 @@ e_unicode_init (void) const gchar * e_utf8_strstrcasedecomp (const gchar *haystack, const gchar *needle) { - unicode_char_t *huni, *nuni; + unicode_char_t *nuni; unicode_char_t unival; gint nlen; const guchar *o, *p; @@ -104,7 +104,7 @@ e_utf8_strstrcasedecomp (const gchar *haystack, const gchar *needle) const gchar * e_utf8_strstrcase (const gchar *haystack, const gchar *needle) { - unicode_char_t *huni, *nuni; + unicode_char_t *nuni; unicode_char_t unival; gint nlen; const guchar *o, *p; |