aboutsummaryrefslogblamecommitdiffstats
path: root/e-util/e-categories-master-list-wombat.c
blob: 9e451998775dc6f9c0ee8125f7c242a130b032d1 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                                                           
                                
                              
 

                          





                                                              

                                  









                                                     
                                                                                  
                                                                                                           

                                                                  

                                  

                                                                                                   
         
 
                                                         







                                               


                                                                                                   
                                          
 
                                                            
                                                                                     
                                              

































                                                                                    
                               

                                                                                      
 



                                                                                                     
 
                                                       
 


                                     
 

                                                                    



           
                                             


                                                                                              
                                                               




                                             
                                              


            

                                                







                                                 
                                                                 
                                                         


                                  



                                                                  



                           
     

                                               

                              
                    
                                                
                                                                  







                                                             

                  
                                                                                                     







                                                
                                                                                                    
 
/* -*- 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 "e-categories-config.h"
#include "e-config-listener.h"

#include <libxml/tree.h>
#include <libxml/parser.h>

#define PARENT_TYPE e_categories_master_list_array_get_type ()

#define d(x)

struct _ECategoriesMasterListWombatPriv {
    EConfigListener *listener;
    guint listener_id;
};

static ECategoriesMasterListArrayClass *parent_class;

static void
ecmlw_load (ECategoriesMasterListWombat *ecmlw)
{
    char *string;
    gboolean def;

    string = e_config_listener_get_string_with_default (ecmlw->priv->listener,
                                "/apps/evolution/general/category_master_list",
                                NULL,
                                &def);
    /* parse the XML string */
    if (!def) {
        e_categories_master_list_array_from_string (E_CATEGORIES_MASTER_LIST_ARRAY (ecmlw),
                                string);
    }

    d(g_print ("load: %s\n", string?string:"(nil)"));

    g_free (string);
}

static void
ecmlw_save (ECategoriesMasterListWombat *ecmlw)
{
    char *string;

    string = e_categories_master_list_array_to_string (E_CATEGORIES_MASTER_LIST_ARRAY (ecmlw));

    d(g_print ("save: %s\n", string));

    e_config_listener_set_string (ecmlw->priv->listener,
                      "/apps/evolution/general/category_master_list",
                      string);

    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_dispose (GObject *object)
{
    ECategoriesMasterListWombat *ecmlw = E_CATEGORIES_MASTER_LIST_WOMBAT (object);

    if (ecmlw->priv) {
        /* remove the listener */
        g_signal_handler_disconnect (ecmlw->priv->listener,
                         ecmlw->priv->listener_id);                  

        g_object_unref (ecmlw->priv->listener);

        g_free (ecmlw->priv);
        ecmlw->priv = NULL;
    }

    if (G_OBJECT_CLASS (parent_class)->dispose)
        (* G_OBJECT_CLASS (parent_class)->dispose) (object);
}


static void
ecmlw_class_init (GObjectClass *object_class)
{
    ECategoriesMasterListClass *ecml_class = E_CATEGORIES_MASTER_LIST_CLASS(object_class);

    parent_class          = g_type_class_ref (PARENT_TYPE);

    ecml_class->commit    = ecmlw_commit;

    ecml_class->reset     = ecmlw_reset ;

    object_class->dispose = ecmlw_dispose;
}

static void 
property_change_cb (EConfigListener   *listener,
            char              *key,
            gpointer           user_data)
{
    ecmlw_load (user_data);
}

static void
ecmlw_init (ECategoriesMasterListWombat *ecmlw)
{
    ecmlw->priv = g_new (ECategoriesMasterListWombatPriv, 1);
    ecmlw->priv->listener = e_config_listener_new ();

    /* add a listener */
    ecmlw->priv->listener_id =
        g_signal_connect (ecmlw->priv->listener,
                  "key_changed",
                  G_CALLBACK (property_change_cb),
                  ecmlw);

    ecmlw_load (ecmlw);
}

GType
e_categories_master_list_wombat_get_type (void)
{
    static GType type = 0;

    if (!type) {
        static const GTypeInfo info =  {
            sizeof (ECategoriesMasterListWombatClass),
            NULL,           /* base_init */
            NULL,           /* base_finalize */
            (GClassInitFunc) ecmlw_class_init,
            NULL,           /* class_finalize */
            NULL,           /* class_data */
            sizeof (ECategoriesMasterListWombat),
            0,             /* n_preallocs */
            (GInstanceInitFunc) ecmlw_init,
        };

        type = g_type_register_static (PARENT_TYPE, "ECategoriesMasterListWombat", &info, 0);
    }

    return type;
}

ECategoriesMasterList *
e_categories_master_list_wombat_new       (void)
{
    return E_CATEGORIES_MASTER_LIST (g_object_new (E_TYPE_CATEGORIES_MASTER_LIST_WOMBAT, NULL));
}