aboutsummaryrefslogblamecommitdiffstats
path: root/shell/e-folder.c
blob: 566ead1274bb4cd4877978719b299783152727d4 (plain) (tree)











































































































































































































                                                                                  
/*
 * e-folder.c: Abstract class for Evolution folders
 *
 * Author:
 *   Miguel de Icaza (miguel@helixcode.com)
 *
 * (C) 2000 Helix Code, Inc.
 */
#include <config.h>
#include <gtk/gtksignal.h>
#include "e-util/e-util.h"
#include "e-folder.h"

#define PARENT_TYPE gtk_object_get_type ()

static GtkObjectClass *parent_class;

#define EFC(o) E_FOLDER_CLASS (GTK_OBJECT (o)->klass)

enum {
    VIEW_CHANGED,
    LAST_SIGNAL
};
static guint efolder_signals [LAST_SIGNAL] = { 0, };

static void
e_folder_destroy (GtkObject *object)
{
    EFolder *efolder = E_FOLDER (object);
    
    if (efolder->uri)
        g_free (efolder->uri);

    if (efolder->desc)
        g_free (efolder->desc);

    if (efolder->home_page)
        g_free (efolder->home_page);
    
    parent_class->destroy (object);
}

static void
e_folder_class_init (GtkObjectClass *object_class)
{
    parent_class = gtk_type_class (PARENT_TYPE);

    object_class->destroy = e_folder_destroy;

    efolder_signals [VIEW_CHANGED] =
        gtk_signal_new ("view_changed",
                GTK_RUN_LAST,
                object_class->type,
                GTK_SIGNAL_OFFSET (EFolderClass, view_changed),
                gtk_marshal_NONE__NONE,
                GTK_TYPE_NONE,
                0);
    /* Register our signals */
    gtk_object_class_add_signals (
        object_class, efolder_signals, LAST_SIGNAL);
}

E_MAKE_TYPE (e_folder, "EFolder", EFolder, e_folder_class_init, NULL, PARENT_TYPE)

void
e_folder_set_uri (EFolder *efolder, const char *uri)
{
    g_return_if_fail (efolder != NULL);
    g_return_if_fail (E_IS_FOLDER (efolder));
    g_return_if_fail (uri != NULL);

    if (efolder->uri)
        g_free (efolder->uri);
    
    efolder->uri = g_strdup (uri);
}

const char *
e_folder_get_uri (EFolder *efolder)
{
    g_return_val_if_fail (efolder != NULL, NULL);
    g_return_val_if_fail (E_IS_FOLDER (efolder), NULL);

    return efolder->uri;
}

void
e_folder_set_description (EFolder *efolder, const char *desc)
{
    g_return_if_fail (efolder != NULL);
    g_return_if_fail (E_IS_FOLDER (efolder));
    g_return_if_fail (desc != NULL);

    if (efolder->desc)
        g_free (efolder->desc);
    
    efolder->desc = g_strdup (desc);
}

const char *
e_folder_get_description (EFolder *efolder)
{
    g_return_val_if_fail (efolder != NULL, NULL);
    g_return_val_if_fail (E_IS_FOLDER (efolder), NULL);

    return efolder->desc;
}

void
e_folder_set_home_page (EFolder *efolder, const char *home_page)
{
    g_return_if_fail (efolder != NULL);
    g_return_if_fail (E_IS_FOLDER (efolder));
    g_return_if_fail (home_page != NULL);

    if (efolder->home_page)
        g_free (efolder->home_page);
    
    efolder->home_page = g_strdup (home_page);
}

const char *
e_folder_get_home_page   (EFolder *efolder)
{
    g_return_val_if_fail (efolder != NULL, NULL);
    g_return_val_if_fail (E_IS_FOLDER (efolder), NULL);

    return efolder->home_page;
}

const char *
e_folder_get_type_name (EFolder *efolder)
{
    g_return_val_if_fail (efolder != NULL, NULL);
    g_return_val_if_fail (E_IS_FOLDER (efolder), NULL);

    return EFC (efolder)->get_type_name (efolder);
}

void
e_folder_construct (EFolder *efolder,
            const char *uri, const char *name,
            const char *desc, const char *home_page,
            const char *view_name)
{
    g_return_if_fail (efolder != NULL);
    g_return_if_fail (E_IS_FOLDER (efolder));

    if (uri)
        efolder->uri = g_strdup (uri);
    if (name)
        efolder->name = g_strdup (name);
    if (desc)
        efolder->desc = g_strdup (desc);
    if (home_page)
        efolder->home_page = g_strdup (home_page);
    if (view_name)
        efolder->view_name = g_strdup (view_name);
}

const char *
e_folder_get_name (EFolder *efolder)
{
    g_return_val_if_fail (efolder != NULL, NULL);
    g_return_val_if_fail (E_IS_FOLDER (efolder), NULL);

    return efolder->name;
}

void
e_folder_set_name (EFolder *efolder, const char *name)
{
    g_return_if_fail (efolder != NULL);
    g_return_if_fail (E_IS_FOLDER (efolder));

    if (efolder->name)
        g_free (efolder->name);

    efolder->name = g_strdup (name);
}

const char *
e_folder_get_view_name (EFolder *efolder)
{
    g_return_val_if_fail (efolder != NULL, NULL);
    g_return_val_if_fail (E_IS_FOLDER (efolder), NULL);

    return efolder->view_name;
}

void
e_folder_set_view_name (EFolder *efolder, const char *view_name)
{
    g_return_if_fail (efolder != NULL);
    g_return_if_fail (E_IS_FOLDER (efolder));

    if (efolder->view_name)
        g_free (efolder->view_name);

    efolder->view_name = g_strdup (view_name);

    gtk_signal_emit (GTK_OBJECT (efolder),
             efolder_signals [VIEW_CHANGED]);
}