diff options
-rw-r--r-- | e-util/ChangeLog | 11 | ||||
-rw-r--r-- | e-util/Makefile.am | 2 | ||||
-rw-r--r-- | e-util/e-categories-master-list-wombat.c | 199 | ||||
-rw-r--r-- | e-util/e-categories-master-list-wombat.h | 35 |
4 files changed, 247 insertions, 0 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog index 1f7b49db1c..b965827fef 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,14 @@ +2001-07-02 Christopher James Lahey <clahey@ximian.com> + + * Makefile.am (libeutil_la_SOURCES): Added + e-categories-master-list-wombat.c and + e-categories-master-list-wombat.h. + (INCLUDES): Added $(BONOBO_CONF_CFLAGS). + + * e-categories-master-list-wombat.c, + e-categories-master-list-wombat.h: New class implementing a master + list that stores its state using bonobo-conf. + 2001-07-02 Rodrigo Moya <rodrigo@ximian.com> * e-categories-config.[ch]: new file for a set of functions for diff --git a/e-util/Makefile.am b/e-util/Makefile.am index 08b1f19b0b..d9c6ed7d43 100644 --- a/e-util/Makefile.am +++ b/e-util/Makefile.am @@ -16,6 +16,8 @@ noinst_LTLIBRARIES = libeutil.la libeutil-static.la \ libedb3util.la libeutil_la_SOURCES = \ + e-categories-master-list-wombat.c \ + e-categories-master-list-wombat.h \ e-categories-config.c \ e-categories-config.h \ e-corba-utils.c \ diff --git a/e-util/e-categories-master-list-wombat.c b/e-util/e-categories-master-list-wombat.c new file mode 100644 index 0000000000..4410b6f009 --- /dev/null +++ b/e-util/e-categories-master-list-wombat.c @@ -0,0 +1,199 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * e-categories-master-list.c: the master list of categories. + * + * Authors: + * Chris Lahey <clahey@ximian.com> + * + * (C) 1999, 2000 Ximian, Inc. + */ +#include <config.h> + +#include "e-categories-master-list-wombat.h" + +#include <gal/util/e-i18n.h> +#include <bonobo-conf/bonobo-config-database.h> +#include <bonobo/bonobo-moniker-util.h> +#include <bonobo/bonobo-exception.h> +#include <bonobo/bonobo-listener.h> +#include <bonobo/bonobo-event-source.h> + +#define PARENT_TYPE e_categories_master_list_array_get_type () + +#define d(x) + +struct _ECategoriesMasterListWombatPriv { + Bonobo_ConfigDatabase db; + Bonobo_EventSource_ListenerId listener_id; +}; + +static ECategoriesMasterListArrayClass *parent_class; + +static void +ecmlw_load (ECategoriesMasterListWombat *ecmlw) +{ + char *string; + gboolean def; + + string = bonobo_config_get_string_with_default + (ecmlw->priv->db, + "General/CategoryMasterList", + NULL, + &def); + + if (!def) + e_categories_master_list_array_from_string + (E_CATEGORIES_MASTER_LIST_ARRAY (ecmlw), + string); + + g_print ("load: %s\n", string); + + g_free (string); +} + +static void +ecmlw_save (ECategoriesMasterListWombat *ecmlw) +{ + char *string; + CORBA_Environment ev; + + string = e_categories_master_list_array_to_string (E_CATEGORIES_MASTER_LIST_ARRAY (ecmlw)); + + g_print ("save: %s\n", string); + + CORBA_exception_init (&ev); + + bonobo_config_set_string (ecmlw->priv->db, + "General/CategoryMasterList", + string, + &ev); + + CORBA_exception_free (&ev); + + g_free (string); +} + +/** + * ecmlw_commit: + * @ecml: the master list to remove from. + */ +static void +ecmlw_commit (ECategoriesMasterList *ecml) +{ + ECategoriesMasterListWombat *ecmlw = E_CATEGORIES_MASTER_LIST_WOMBAT (ecml); + + ((ECategoriesMasterListClass *) parent_class)->commit (ecml); + + ecmlw_save (ecmlw); +} + + +/** + * ecmlw_reset: + * @ecml: the master list to reset. + */ +static void +ecmlw_reset (ECategoriesMasterList *ecml) +{ + ECategoriesMasterListWombat *ecmlw = E_CATEGORIES_MASTER_LIST_WOMBAT (ecml); + + ((ECategoriesMasterListClass *) parent_class)->reset (ecml); + + ecmlw_save (ecmlw); +} + +static void +ecmlw_destroy (GtkObject *object) +{ + ECategoriesMasterListWombat *ecmlw = E_CATEGORIES_MASTER_LIST_WOMBAT (object); + CORBA_Environment ev; + + CORBA_exception_init (&ev); + + /* remove the listener */ + + bonobo_event_source_client_remove_listener (ecmlw->priv->db, + ecmlw->priv->listener_id, + &ev); + bonobo_object_release_unref (ecmlw->priv->db, &ev); + + CORBA_exception_free (&ev); +} + + +static void +ecmlw_class_init (GtkObjectClass *object_class) +{ + ECategoriesMasterListClass *ecml_class = E_CATEGORIES_MASTER_LIST_CLASS(object_class); + + parent_class = gtk_type_class (PARENT_TYPE); + + ecml_class->commit = ecmlw_commit; + + ecml_class->reset = ecmlw_reset ; + + object_class->destroy = ecmlw_destroy; +} + +static void +property_change_cb (BonoboListener *listener, + char *event_name, + CORBA_any *any, + CORBA_Environment *ev, + gpointer user_data) +{ + ecmlw_load (user_data); +} + +static void +ecmlw_init (ECategoriesMasterListWombat *ecmlw) +{ + CORBA_Environment ev; + + CORBA_exception_init (&ev); + + ecmlw->priv = g_new (ECategoriesMasterListWombatPriv, 1); + ecmlw->priv->db = bonobo_get_object ("wombat:", "Bonobo/ConfigDatabase", &ev); + + /* add a listener */ + ecmlw->priv->listener_id = + bonobo_event_source_client_add_listener (ecmlw->priv->db, property_change_cb, + NULL, &ev, ecmlw); + if (BONOBO_EX (&ev)) { + CORBA_exception_free (&ev); + return; + } + + CORBA_exception_free (&ev); + + ecmlw_load (ecmlw); +} + +guint +e_categories_master_list_wombat_get_type (void) +{ + static guint type = 0; + + if (!type) { + GtkTypeInfo info = { + "ECategoriesMasterListWombat", + sizeof (ECategoriesMasterListWombat), + sizeof (ECategoriesMasterListWombatClass), + (GtkClassInitFunc) ecmlw_class_init, + (GtkObjectInitFunc) ecmlw_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, + }; + + type = gtk_type_unique (PARENT_TYPE, &info); + } + + return type; +} + +ECategoriesMasterList * +e_categories_master_list_wombat_new (void) +{ + return E_CATEGORIES_MASTER_LIST (gtk_type_new (e_categories_master_list_wombat_get_type ())); +} diff --git a/e-util/e-categories-master-list-wombat.h b/e-util/e-categories-master-list-wombat.h new file mode 100644 index 0000000000..a6fe2a04ff --- /dev/null +++ b/e-util/e-categories-master-list-wombat.h @@ -0,0 +1,35 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +#ifndef _E_CATEGORIES_MASTER_LIST_WOMBAT_H_ +#define _E_CATEGORIES_MASTER_LIST_WOMBAT_H_ + +#include <gal/widgets/e-categories-master-list-array.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define E_CATEGORIES_MASTER_LIST_WOMBAT_TYPE (e_categories_master_list_wombat_get_type ()) +#define E_CATEGORIES_MASTER_LIST_WOMBAT(o) (GTK_CHECK_CAST ((o), E_CATEGORIES_MASTER_LIST_WOMBAT_TYPE, ECategoriesMasterListWombat)) +#define E_CATEGORIES_MASTER_LIST_WOMBAT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_CATEGORIES_MASTER_LIST_WOMBAT_TYPE, ECategoriesMasterListWombatClass)) +#define E_IS_CATEGORIES_MASTER_LIST_WOMBAT(o) (GTK_CHECK_TYPE ((o), E_CATEGORIES_MASTER_LIST_WOMBAT_TYPE)) +#define E_IS_CATEGORIES_MASTER_LIST_WOMBAT_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_CATEGORIES_MASTER_LIST_WOMBAT_TYPE)) + +typedef struct _ECategoriesMasterListWombatPriv ECategoriesMasterListWombatPriv; + +typedef struct { + ECategoriesMasterListArray base; + ECategoriesMasterListWombatPriv *priv; +} ECategoriesMasterListWombat; + +typedef struct { + ECategoriesMasterListArrayClass parent_class; +} ECategoriesMasterListWombatClass; + +GtkType e_categories_master_list_wombat_get_type (void); +ECategoriesMasterList *e_categories_master_list_wombat_new (void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _E_CATEGORIES_MASTER_LIST_WOMBAT_H_ */ |