diff options
Diffstat (limited to 'addressbook/gui/component/select-names')
15 files changed, 1659 insertions, 30 deletions
diff --git a/addressbook/gui/component/select-names/.cvsignore b/addressbook/gui/component/select-names/.cvsignore new file mode 100644 index 0000000000..d6c55c7345 --- /dev/null +++ b/addressbook/gui/component/select-names/.cvsignore @@ -0,0 +1,7 @@ +.deps +.libs +.pure +Makefile +Makefile.in +*.lo +*.la diff --git a/addressbook/gui/component/select-names/Makefile.am b/addressbook/gui/component/select-names/Makefile.am new file mode 100644 index 0000000000..4a1bbc4741 --- /dev/null +++ b/addressbook/gui/component/select-names/Makefile.am @@ -0,0 +1,48 @@ +CPPFLAGS = \ + -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" + +INCLUDES = \ + -DG_LOG_DOMAIN=\"evolution-addressbook\" \ + $(EXTRA_GNOME_CFLAGS) \ + $(GNOME_INCLUDEDIR) \ + -I$(top_srcdir) \ + -I$(top_builddir) \ + -I$(top_srcdir)/shell \ + -I$(top_builddir)/shell \ + -I$(top_srcdir)/widgets/e-text \ + -I$(top_srcdir)/widgets/e-table \ + -I$(top_srcdir)/addressbook/gui/minicard \ + -I$(top_srcdir)/addressbook/contact-editor \ + -I$(top_srcdir)/addressbook/backend \ + -I$(top_builddir)/addressbook/backend \ + $(BONOBO_HTML_GNOME_CFLAGS) \ + -DEVOLUTION_VERSION=\""$(VERSION)"\" \ + -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ + -DEVOLUTION_ICONSDIR=\""$(iconsdir)"\" \ + -DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\" \ + -DCAMEL_PROVIDERDIR=\""$(providerdir)"\" + +lib_LTLIBRARIES = libeselectnames.la + +libeselectnames_la_SOURCES = \ + e-select-names-entry.c \ + e-select-names-entry.h \ + e-select-names-manager.c \ + e-select-names-manager.h \ + e-select-names-model.c \ + e-select-names-model.h \ + e-select-names-table-model.c \ + e-select-names-table-model.h \ + e-select-names-text-model.c \ + e-select-names-text-model.h \ + e-select-names.c \ + e-select-names.h + + +gladedir = $(datadir)/evolution/glade +glade_DATA = select-names.glade + +EXTRA_DIST = \ + $(glade_DATA) \ + select-names.glade.h + diff --git a/addressbook/gui/component/select-names/e-select-names-manager.c b/addressbook/gui/component/select-names/e-select-names-manager.c index 28981cf018..01b94057d6 100644 --- a/addressbook/gui/component/select-names/e-select-names-manager.c +++ b/addressbook/gui/component/select-names/e-select-names-manager.c @@ -13,6 +13,10 @@ #include <gtk/gtk.h> #include "e-select-names-manager.h" +#include "e-select-names-entry.h" +#include "e-select-names-model.h" +#include "e-select-names-text-model.h" +#include "widgets/e-text/e-entry.h" /* Object argument IDs */ enum { @@ -21,6 +25,12 @@ enum { }; +typedef struct { + char *id; + char *title; + ESelectNamesModel *model; +} ESelectNamesManagerSection; + static void e_select_names_manager_init (ESelectNamesManager *manager); static void e_select_names_manager_class_init (ESelectNamesManagerClass *klass); @@ -28,8 +38,6 @@ static void e_select_names_manager_destroy (GtkObject *object); static void e_select_names_manager_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); static void e_select_names_manager_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void fill_in_info(ESelectNamesManager *manager); - /** * e_select_names_manager_get_type: * @void: @@ -98,9 +106,10 @@ static void e_select_names_manager_destroy (GtkObject *object) { ESelectNamesManager *manager; - int i; manager = E_SELECT_NAMES_MANAGER (object); + + gtk_object_unref(GTK_OBJECT(manager->sections)); } @@ -114,7 +123,6 @@ e_select_names_manager_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) switch (arg_id) { case ARG_CARD: - fill_in_info(manager); break; default: return; @@ -131,11 +139,6 @@ e_select_names_manager_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) switch (arg_id) { case ARG_CARD: - e_select_names_manager_sync_card(manager); - if (manager->card) - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(manager->card); - else - GTK_VALUE_OBJECT (*arg) = NULL; break; default: arg->type = GTK_TYPE_INVALID; @@ -143,6 +146,26 @@ e_select_names_manager_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) } } +static void * +section_copy(const void *sec, void *data) +{ + const ESelectNamesManagerSection *section = sec; + ESelectNamesManagerSection *newsec; + + newsec = g_new(ESelectNamesManagerSection, 1); + newsec->id = g_strdup(section->id); + newsec->title = g_strdup(section->title); + return newsec; +} + +static void +section_free(void *sec, void *data) +{ + ESelectNamesManagerSection *section = sec; + g_free(section->id); + g_free(section->title); + g_free(section); +} /** * e_select_names_manager_init: @@ -150,22 +173,51 @@ e_select_names_manager_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) static void e_select_names_manager_init (ESelectNamesManager *manager) { + manager->sections = e_list_new(section_copy, section_free, manager); } -static void -fill_in_info(ESelectNamesManager *manager) +void e_select_names_manager_add_section (ESelectNamesManager *manager, + char *id, + char *title) { - ECard *card = manager->card; - if (card) { + ESelectNamesManagerSection *section; + + section = g_new(ESelectNamesManagerSection, 1); + section->id = g_strdup(id); + section->title = g_strdup(title); + e_list_append(manager->sections, section); + section_free(section, manager); +} +GtkWidget *e_select_names_manager_create_entry (ESelectNamesManager *manager, + char *id) +{ + GtkWidget *entry; + ETextModel *model; + EIterator *iterator; + iterator = e_list_get_iterator(manager->sections); + for (; e_iterator_is_valid(iterator); e_iterator_next(iterator)) { + const ESelectNamesManagerSection *section = e_iterator_get(iterator); + if (!strcmp(section->id, id)) { + entry = GTK_WIDGET(e_entry_new()); + model = e_select_names_text_model_new(section->model); + gtk_object_set(GTK_OBJECT(entry), + "model", model, + NULL); + return entry; + } } + return NULL; } -void -e_select_names_manager_sync_card(ESelectNamesManager *manager) +void e_select_names_manager_activate_dialog (ESelectNamesManager *manager, + char *id) { - ECard *card = manager->card; - if (card) { - fill_in_info(manager); - } +} + +/* Of type ECard */ +EList *e_select_names_manager_get_cards (ESelectNamesManager *manager, + char *id) +{ + return NULL; } diff --git a/addressbook/gui/component/select-names/e-select-names-manager.h b/addressbook/gui/component/select-names/e-select-names-manager.h index 5aba1d3295..600644f01a 100644 --- a/addressbook/gui/component/select-names/e-select-names-manager.h +++ b/addressbook/gui/component/select-names/e-select-names-manager.h @@ -12,6 +12,7 @@ #include <time.h> #include <gtk/gtk.h> #include <stdio.h> +#include <e-util/e-list.h> #define E_TYPE_SELECT_NAMES_MANAGER (e_select_names_manager_get_type ()) #define E_SELECT_NAMES_MANAGER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_MANAGER, ESelectNamesManager)) @@ -24,26 +25,28 @@ typedef struct _ESelectNamesManagerClass ESelectNamesManagerClass; struct _ESelectNamesManager { GtkObject object; - + + EList *sections; }; struct _ESelectNamesManagerClass { GtkObjectClass parent_class; }; -ESelectNamesManager *e_select_names_manager_new (void); -void e_select_names_add_section (ESelectNamesManager *manager, - char *id); -GtkWidget *e_select_names_create_entry (ESelectNamesManager *manager, - char *id); -void e_select_names_activate_dialog (ESelectNamesManager *manager, - char *id); +ESelectNamesManager *e_select_names_manager_new (void); +void e_select_names_manager_add_section (ESelectNamesManager *manager, + char *id, + char *title); +GtkWidget *e_select_names_manager_create_entry (ESelectNamesManager *manager, + char *id); +void e_select_names_manager_activate_dialog (ESelectNamesManager *manager, + char *id); /* Of type ECard */ -ECardList *e_select_names_get_cards (ESelectNamesManager *manager, - char *id); +EList *e_select_names_manager_get_cards (ESelectNamesManager *manager, + char *id); /* Standard Gtk function */ -GtkType e_select_names_manager_get_type (void); +GtkType e_select_names_manager_get_type (void); #endif /* ! __E_SELECT_NAMES_MANAGER_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names-model.c b/addressbook/gui/component/select-names/e-select-names-model.c new file mode 100644 index 0000000000..8399136dd8 --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names-model.c @@ -0,0 +1,200 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Chris Lahey <clahey@helixcode.com> + * + * Copyright (C) 2000 Helix Code, Inc. + */ + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <gtk/gtk.h> + +#include "e-select-names-model.h" + +enum { + E_SELECT_NAMES_MODEL_CHANGED, + E_SELECT_NAMES_MODEL_LAST_SIGNAL +}; + +static guint e_select_names_model_signals[E_SELECT_NAMES_MODEL_LAST_SIGNAL] = { 0 }; + +/* Object argument IDs */ +enum { + ARG_0, + ARG_CARD, +}; + +static void e_select_names_model_init (ESelectNamesModel *model); +static void e_select_names_model_class_init (ESelectNamesModelClass *klass); + +static void e_select_names_model_destroy (GtkObject *object); +static void e_select_names_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_select_names_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); + +/** + * e_select_names_model_get_type: + * @void: + * + * Registers the &ESelectNamesModel class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the &ESelectNamesModel class. + **/ +GtkType +e_select_names_model_get_type (void) +{ + static GtkType model_type = 0; + + if (!model_type) { + GtkTypeInfo model_info = { + "ESelectNamesModel", + sizeof (ESelectNamesModel), + sizeof (ESelectNamesModelClass), + (GtkClassInitFunc) e_select_names_model_class_init, + (GtkObjectInitFunc) e_select_names_model_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + model_type = gtk_type_unique (gtk_object_get_type (), &model_info); + } + + return model_type; +} + +/** + * e_select_names_model_new: + * @VCard: a string in vCard format + * + * Returns: a new #ESelectNamesModel that wraps the @VCard. + */ +ESelectNamesModel * +e_select_names_model_new (void) +{ + ESelectNamesModel *model = E_SELECT_NAMES_MODEL(gtk_type_new(e_select_names_model_get_type())); + return model; +} + +static void +e_select_names_model_class_init (ESelectNamesModelClass *klass) +{ + GtkObjectClass *object_class; + + object_class = GTK_OBJECT_CLASS(klass); + + e_select_names_model_signals[E_SELECT_NAMES_MODEL_CHANGED] = + gtk_signal_new ("changed", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (ESelectNamesModelClass, changed), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); + + gtk_object_class_add_signals (object_class, e_select_names_model_signals, E_SELECT_NAMES_MODEL_LAST_SIGNAL); + + gtk_object_add_arg_type ("ESelectNamesModel::card", + GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CARD); + + klass->changed = NULL; + + object_class->destroy = e_select_names_model_destroy; + object_class->get_arg = e_select_names_model_get_arg; + object_class->set_arg = e_select_names_model_set_arg; +} + +/* + * ESelectNamesModel lifecycle management and vcard loading/saving. + */ + +static void +e_select_names_model_destroy (GtkObject *object) +{ + ESelectNamesModel *model; + + model = E_SELECT_NAMES_MODEL (object); + + gtk_object_unref(GTK_OBJECT(model->data)); +} + + +/* Set_arg handler for the model */ +static void +e_select_names_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNamesModel *model; + + model = E_SELECT_NAMES_MODEL (object); + + switch (arg_id) { + case ARG_CARD: + break; + default: + return; + } +} + +/* Get_arg handler for the model */ +static void +e_select_names_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNamesModel *model; + + model = E_SELECT_NAMES_MODEL (object); + + switch (arg_id) { + case ARG_CARD: + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +static void * +data_copy(const void *sec, void *data) +{ + const ESelectNamesModelData *section = sec; + ESelectNamesModelData *newsec; + + newsec = g_new(ESelectNamesModelData, 1); + newsec->type = section->type; + newsec->card = section->card; + if (newsec->card) + gtk_object_ref(GTK_OBJECT(newsec->card)); + newsec->string = g_strdup(section->string); + return newsec; +} + +static void +data_free(void *sec, void *data) +{ + ESelectNamesModelData *section = sec; + if (section->card) + gtk_object_unref(GTK_OBJECT(section->card)); + g_free(section->string); + g_free(section); +} + +/** + * e_select_names_model_init: + */ +static void +e_select_names_model_init (ESelectNamesModel *model) +{ + model->data = e_list_new(data_copy, data_free, model); +} + +/* Of type ECard */ +EList *e_select_names_model_get_cards (ESelectNamesModel *model) +{ + return NULL; +} + +EList *e_select_names_model_get_data (ESelectNamesModel *model) +{ + return model->data; +} diff --git a/addressbook/gui/component/select-names/e-select-names-model.h b/addressbook/gui/component/select-names/e-select-names-model.h new file mode 100644 index 0000000000..20c90818f7 --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names-model.h @@ -0,0 +1,67 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Chris Lahey <clahey@helixcode.com> + * + * Copyright (C) 2000 Helix Code, Inc. + */ + +#ifndef __E_SELECT_NAMES_MODEL_H__ +#define __E_SELECT_NAMES_MODEL_H__ + +#include <time.h> +#include <gtk/gtk.h> +#include <stdio.h> +#include <e-util/e-list.h> +#include <addressbook/backend/ebook/e-card.h> + +#define E_TYPE_SELECT_NAMES_MODEL (e_select_names_model_get_type ()) +#define E_SELECT_NAMES_MODEL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_MODEL, ESelectNamesModel)) +#define E_SELECT_NAMES_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_MODEL, ESelectNamesModelClass)) +#define E_IS_SELECT_NAMES_MODEL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_MODEL)) +#define E_IS_SELECT_NAMES_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_SELECT_NAMES_MODEL)) + +typedef enum _ESelectNamesModelDataType ESelectNamesModelDataType; +typedef struct _ESelectNamesModelData ESelectNamesModelData; +typedef struct _ESelectNamesModel ESelectNamesModel; +typedef struct _ESelectNamesModelClass ESelectNamesModelClass; + +enum _ESelectNamesModelDataType { + E_SELECT_NAMES_MODEL_DATA_TYPE_CARD, + E_SELECT_NAMES_MODEL_DATA_TYPE_STRING_ADDRESS, + E_SELECT_NAMES_MODEL_DATA_TYPE_SEPARATION_MATERIAL, +}; + +struct _ESelectNamesModelData { + ESelectNamesModelDataType type; + ECard *card; + char *string; +}; + +struct _ESelectNamesModel { + GtkObject object; + + char *id; + char *title; + + EList *data; /* Of type ESelectNamesModelData. */ +}; + +struct _ESelectNamesModelClass { + GtkObjectClass parent_class; + + void (*changed) (ESelectNamesModel *model); +}; + +ESelectNamesModel *e_select_names_model_new (void); + +/* Of type ECard */ +EList *e_select_names_model_get_cards (ESelectNamesModel *model); + +/* Of type ESelectNamesModelData */ +EList *e_select_names_model_get_data (ESelectNamesModel *model); + +/* Standard Gtk function */ +GtkType e_select_names_model_get_type (void); + +#endif /* ! __E_SELECT_NAMES_MODEL_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names-table-model.c b/addressbook/gui/component/select-names/e-select-names-table-model.c new file mode 100644 index 0000000000..dc3edda5f9 --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names-table-model.c @@ -0,0 +1,157 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Chris Lahey <clahey@helixcode.com> + * + * Copyright (C) 2000 Helix Code, Inc. + */ + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <gtk/gtk.h> + +#include "e-select-names-table-model.h" + +/* Object argument IDs */ +enum { + ARG_0, + ARG_SOURCE, +}; + +static void e_select_names_table_model_init (ESelectNamesTableModel *model); +static void e_select_names_table_model_class_init (ESelectNamesTableModelClass *klass); + +static void e_select_names_table_model_destroy (GtkObject *object); +static void e_select_names_table_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_select_names_table_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); + +/** + * e_select_names_table_model_get_type: + * @void: + * + * Registers the &ESelectNamesTableModel class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the &ESelectNamesTableModel class. + **/ +GtkType +e_select_names_table_model_get_type (void) +{ + static GtkType model_type = 0; + + if (!model_type) { + GtkTypeInfo model_info = { + "ESelectNamesTableModel", + sizeof (ESelectNamesTableModel), + sizeof (ESelectNamesTableModelClass), + (GtkClassInitFunc) e_select_names_table_model_class_init, + (GtkObjectInitFunc) e_select_names_table_model_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + model_type = gtk_type_unique (e_table_model_get_type (), &model_info); + } + + return model_type; +} + +/** + * e_select_names_table_model_new: + * @VCard: a string in vCard format + * + * Returns: a new #ESelectNamesTableModel that wraps the @VCard. + */ +ETableModel * +e_select_names_table_model_new (ESelectNamesModel *source) +{ + ETableModel *model = E_TABLE_MODEL(gtk_type_new(e_select_names_table_model_get_type())); + gtk_object_set(GTK_OBJECT(model), + "source", source, + NULL); + return model; +} + +static void +e_select_names_table_model_class_init (ESelectNamesTableModelClass *klass) +{ + GtkObjectClass *object_class; + ETableModelClass *table_model_class; + + object_class = GTK_OBJECT_CLASS(klass); + table_model_class = E_TABLE_MODEL_CLASS(klass); + + gtk_object_add_arg_type ("ESelectNamesTableModel::source", + GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_SOURCE); + + object_class->destroy = e_select_names_table_model_destroy; + object_class->get_arg = e_select_names_table_model_get_arg; + object_class->set_arg = e_select_names_table_model_set_arg; +} + +/* + * ESelectNamesTableModel lifecycle management and vcard loading/saving. + */ + +static void +e_select_names_table_model_destroy (GtkObject *object) +{ + ESelectNamesTableModel *model; + + model = E_SELECT_NAMES_TABLE_MODEL (object); + + if (model->source) + gtk_object_unref(GTK_OBJECT(model->source)); +} + + +/* Set_arg handler for the model */ +static void +e_select_names_table_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNamesTableModel *model; + + model = E_SELECT_NAMES_TABLE_MODEL (object); + + switch (arg_id) { + case ARG_SOURCE: + if (model->source) + gtk_object_unref(GTK_OBJECT(model->source)); + model->source = E_SELECT_NAMES_MODEL(GTK_VALUE_OBJECT(*arg)); + if (model->source) + gtk_object_ref(GTK_OBJECT(model->source)); + break; + default: + return; + } +} + +/* Get_arg handler for the model */ +static void +e_select_names_table_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNamesTableModel *model; + + model = E_SELECT_NAMES_TABLE_MODEL (object); + + switch (arg_id) { + case ARG_SOURCE: + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(model->source); + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +/** + * e_select_names_table_model_init: + */ +static void +e_select_names_table_model_init (ESelectNamesTableModel *model) +{ + model->source = NULL; +} diff --git a/addressbook/gui/component/select-names/e-select-names-table-model.h b/addressbook/gui/component/select-names/e-select-names-table-model.h new file mode 100644 index 0000000000..94cbaff13a --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names-table-model.h @@ -0,0 +1,42 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Chris Lahey <clahey@helixcode.com> + * + * Copyright (C) 2000 Helix Code, Inc. + */ + +#ifndef __E_SELECT_NAMES_TABLE_MODEL_H__ +#define __E_SELECT_NAMES_TABLE_MODEL_H__ + +#include <time.h> +#include <gtk/gtk.h> +#include <stdio.h> +#include "e-select-names-model.h" +#include <widgets/e-table/e-table-model.h> + +#define E_TYPE_SELECT_NAMES_TABLE_MODEL (e_select_names_table_model_get_type ()) +#define E_SELECT_NAMES_TABLE_MODEL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_TABLE_MODEL, ESelectNamesTableModel)) +#define E_SELECT_NAMES_TABLE_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_TABLE_MODEL, ESelectNamesTableModelClass)) +#define E_IS_SELECT_NAMES_TABLE_MODEL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_TABLE_MODEL)) +#define E_IS_SELECT_NAMES_TABLE_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_SELECT_NAMES_TABLE_MODEL)) + +typedef struct _ESelectNamesTableModel ESelectNamesTableModel; +typedef struct _ESelectNamesTableModelClass ESelectNamesTableModelClass; + +struct _ESelectNamesTableModel { + ETableModel parent; + + ESelectNamesModel *source; +}; + +struct _ESelectNamesTableModelClass { + ETableModel parent_class; +}; + +ETableModel *e_select_names_table_model_new (ESelectNamesModel *source); + +/* Standard Gtk function */ +GtkType e_select_names_table_model_get_type (void); + +#endif /* ! __E_SELECT_NAMES_TABLE_MODEL_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names-text-model.c b/addressbook/gui/component/select-names/e-select-names-text-model.c new file mode 100644 index 0000000000..98d0f153c2 --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names-text-model.c @@ -0,0 +1,263 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Chris Lahey <clahey@helixcode.com> + * + * Copyright (C) 2000 Helix Code, Inc. + */ + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <gtk/gtk.h> + +#include "e-select-names-text-model.h" + +/* Object argument IDs */ +enum { + ARG_0, + ARG_SOURCE, +}; + +static void e_select_names_text_model_init (ESelectNamesTextModel *model); +static void e_select_names_text_model_class_init (ESelectNamesTextModelClass *klass); + +static void e_select_names_text_model_destroy (GtkObject *object); +static void e_select_names_text_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_select_names_text_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); + +static void e_select_names_text_model_set_text (ETextModel *model, gchar *text); +static void e_select_names_text_model_insert (ETextModel *model, gint position, gchar *text); +static void e_select_names_text_model_insert_length (ETextModel *model, gint position, gchar *text, gint length); +static void e_select_names_text_model_delete (ETextModel *model, gint position, gint length); + +static void e_select_names_text_model_model_changed (ESelectNamesModel *source, + ESelectNamesTextModel *model); + + +ETextModelClass *parent_class; +#define PARENT_TYPE e_text_model_get_type() + +/** + * e_select_names_text_model_get_type: + * @void: + * + * Registers the &ESelectNamesTextModel class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the &ESelectNamesTextModel class. + **/ +GtkType +e_select_names_text_model_get_type (void) +{ + static GtkType model_type = 0; + + if (!model_type) { + GtkTypeInfo model_info = { + "ESelectNamesTextModel", + sizeof (ESelectNamesTextModel), + sizeof (ESelectNamesTextModelClass), + (GtkClassInitFunc) e_select_names_text_model_class_init, + (GtkObjectInitFunc) e_select_names_text_model_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + model_type = gtk_type_unique (PARENT_TYPE, &model_info); + } + + return model_type; +} + +/** + * e_select_names_text_model_new: + * @VCard: a string in vCard format + * + * Returns: a new #ESelectNamesTextModel that wraps the @VCard. + */ +ETextModel * +e_select_names_text_model_new (ESelectNamesModel *source) +{ + ETextModel *model = E_TEXT_MODEL(gtk_type_new(e_select_names_text_model_get_type())); + gtk_object_set(GTK_OBJECT(model), + "source", source, + NULL); + return model; +} + +static void +e_select_names_text_model_class_init (ESelectNamesTextModelClass *klass) +{ + GtkObjectClass *object_class; + ETextModelClass *text_model_class; + + object_class = GTK_OBJECT_CLASS(klass); + text_model_class = E_TEXT_MODEL_CLASS(klass); + + parent_class = gtk_type_class(PARENT_TYPE); + + gtk_object_add_arg_type ("ESelectNamesTextModel::source", + GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_SOURCE); + + object_class->destroy = e_select_names_text_model_destroy; + object_class->get_arg = e_select_names_text_model_get_arg; + object_class->set_arg = e_select_names_text_model_set_arg; + + text_model_class->set_text = e_select_names_text_model_set_text; + text_model_class->insert = e_select_names_text_model_insert; + text_model_class->insert_length = e_select_names_text_model_insert_length; + text_model_class->delete = e_select_names_text_model_delete; +} + +static void +e_select_names_text_model_set_text (ETextModel *model, gchar *text) +{ + e_select_names_model_clear(model); +} + +static void +e_select_names_text_model_insert (ETextModel *model, gint position, gchar *text) +{ +} + +static void +e_select_names_text_model_insert_length (ETextModel *model, gint position, gchar *text, gint length) +{ +} + +static void +e_select_names_text_model_delete (ETextModel *model, gint position, gint length) +{ +} + +static void +e_select_names_text_model_model_changed (ESelectNamesModel *source, + ESelectNamesTextModel *model) +{ + EList *list = e_select_names_model_get_data(source); + EIterator *iterator = e_list_get_iterator(list); + int length = 0; + int length_count = 0; + int *lengthsp; + char *string; + char *stringp; + for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { + const ESelectNamesModelData *data = e_iterator_get(iterator); + length += strlen(data->string); + length_count++; + } + + g_free(model->lengths); + model->lengths = g_new(int, length_count + 1); + lengthsp = model->lengths; + + string = g_new(char, length + 1); + stringp = string; + *stringp = 0; + for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { + const ESelectNamesModelData *data = e_iterator_get(iterator); + int this_length; + + strcpy(stringp, data->string); + this_length = strlen(stringp); + stringp += this_length; + *(lengthsp++) = this_length; + } + *stringp = 0; + *lengthsp = -1; + g_free(E_TEXT_MODEL(model)->text); + E_TEXT_MODEL(model)->text = string; +} + + +static void +e_select_names_text_model_add_source (ESelectNamesTextModel *model, + ESelectNamesModel *source) +{ + model->source = source; + if (model->source) + gtk_object_ref(GTK_OBJECT(model->source)); + model->source_changed_id = gtk_signal_connect(GTK_OBJECT(model->source), "changed", + GTK_SIGNAL_FUNC(e_select_names_text_model_model_changed), + model); +} + +static void +e_select_names_text_model_drop_source (ESelectNamesTextModel *model) +{ + if (model->source_changed_id) + gtk_signal_disconnect(GTK_OBJECT(model->source), model->source_changed_id); + if (model->source) + gtk_object_unref(GTK_OBJECT(model->source)); + model->source = NULL; + model->source_changed_id = 0; +} + +/* + * ESelectNamesTextModel lifecycle management and vcard loading/saving. + */ + +static void +e_select_names_text_model_destroy (GtkObject *object) +{ + ESelectNamesTextModel *model; + + model = E_SELECT_NAMES_TEXT_MODEL (object); + + e_select_names_text_model_drop_source(model); + g_free(model->lengths); + + if (GTK_OBJECT_CLASS(parent_class)->destroy) + GTK_OBJECT_CLASS(parent_class)->destroy(object); +} + + +/* Set_arg handler for the model */ +static void +e_select_names_text_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNamesTextModel *model; + + model = E_SELECT_NAMES_TEXT_MODEL (object); + + switch (arg_id) { + case ARG_SOURCE: + e_select_names_text_model_drop_source(model); + e_select_names_text_model_add_source(model, E_SELECT_NAMES_MODEL(GTK_VALUE_OBJECT(*arg))); + break; + default: + return; + } +} + +/* Get_arg handler for the model */ +static void +e_select_names_text_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNamesTextModel *model; + + model = E_SELECT_NAMES_TEXT_MODEL (object); + + switch (arg_id) { + case ARG_SOURCE: + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(model->source); + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +/** + * e_select_names_text_model_init: + */ +static void +e_select_names_text_model_init (ESelectNamesTextModel *model) +{ + model->source = NULL; + model->source_changed_id = 0; + model->lengths = NULL; +} + diff --git a/addressbook/gui/component/select-names/e-select-names-text-model.h b/addressbook/gui/component/select-names/e-select-names-text-model.h new file mode 100644 index 0000000000..564886ffc9 --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names-text-model.h @@ -0,0 +1,44 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Chris Lahey <clahey@helixcode.com> + * + * Copyright (C) 2000 Helix Code, Inc. + */ + +#ifndef __E_SELECT_NAMES_TEXT_MODEL_H__ +#define __E_SELECT_NAMES_TEXT_MODEL_H__ + +#include <time.h> +#include <gtk/gtk.h> +#include <stdio.h> +#include "e-select-names-model.h" +#include <widgets/e-text/e-text-model.h> + +#define E_TYPE_SELECT_NAMES_TEXT_MODEL (e_select_names_text_model_get_type ()) +#define E_SELECT_NAMES_TEXT_MODEL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_TEXT_MODEL, ESelectNamesTextModel)) +#define E_SELECT_NAMES_TEXT_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_TEXT_MODEL, ESelectNamesTextModelClass)) +#define E_IS_SELECT_NAMES_TEXT_MODEL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_TEXT_MODEL)) +#define E_IS_SELECT_NAMES_TEXT_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_SELECT_NAMES_TEXT_MODEL)) + +typedef struct _ESelectNamesTextModel ESelectNamesTextModel; +typedef struct _ESelectNamesTextModelClass ESelectNamesTextModelClass; + +struct _ESelectNamesTextModel { + ETextModel parent; + + ESelectNamesModel *source; + int source_changed_id; + int *lengths; +}; + +struct _ESelectNamesTextModelClass { + ETextModel parent_class; +}; + +ETextModel *e_select_names_text_model_new (ESelectNamesModel *source); + +/* Standard Gtk function */ +GtkType e_select_names_text_model_get_type (void); + +#endif /* ! __E_SELECT_NAMES_TEXT_MODEL_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names.c b/addressbook/gui/component/select-names/e-select-names.c new file mode 100644 index 0000000000..a17dd410d3 --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names.c @@ -0,0 +1,344 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* e-select-names.c + * Copyright (C) 2000 Helix Code, Inc. + * Author: Chris Lahey <clahey@helixcode.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <config.h> +#include <gnome.h> +#include "e-select-names.h" +#include <e-table-simple.h> +#include <e-table.h> +#include <e-cell-text.h> +#include <addressbook/gui/component/model/e-addressbook-model.h> +#include <addressbook/gui/component/model/e-cardlist-model.h> +#include <addressbook/backend/ebook/e-book.h> + +static void e_select_names_init (ESelectNames *card); +static void e_select_names_class_init (ESelectNamesClass *klass); +static void e_select_names_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); +static void e_select_names_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_select_names_destroy (GtkObject *object); + +static GnomeDialogClass *parent_class = NULL; +#define PARENT_TYPE gnome_dialog_get_type() + +/* The arguments we take */ +enum { + ARG_0, + ARG_BOOK, + ARG_QUERY, +}; + +typedef struct { + char *title; + ETableModel *model; + ESelectNames *names; +} ESelectNamesChild; + +GtkType +e_select_names_get_type (void) +{ + static GtkType type = 0; + + if (!type) { + static const GtkTypeInfo info = + { + "ESelectNames", + sizeof (ESelectNames), + sizeof (ESelectNamesClass), + (GtkClassInitFunc) e_select_names_class_init, + (GtkObjectInitFunc) e_select_names_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, + }; + + type = gtk_type_unique (PARENT_TYPE, &info); + } + + return type; +} + +static void +e_select_names_class_init (ESelectNamesClass *klass) +{ + GtkObjectClass *object_class; + + object_class = (GtkObjectClass*) klass; + + parent_class = gtk_type_class (PARENT_TYPE); + + gtk_object_add_arg_type ("ESelectNames::book", GTK_TYPE_OBJECT, + GTK_ARG_READWRITE, ARG_BOOK); + gtk_object_add_arg_type ("ESelectNames::query", GTK_TYPE_STRING, + GTK_ARG_READWRITE, ARG_QUERY); + + object_class->set_arg = e_select_names_set_arg; + object_class->get_arg = e_select_names_get_arg; + object_class->destroy = e_select_names_destroy; +} + +#define SPEC "<ETableSpecification no-header=\"1\"> \ + <columns-shown> \ + <column> 0 </column> \ + <column> 2 </column> \ + </columns-shown> \ + <grouping> <leaf column=\"0\" ascending=\"1\"/> </grouping> \ +</ETableSpecification>" + +GtkWidget *e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int num1, int num2); + +static void +set_book(EBook *book, EBookStatus status, ETableModel *model) +{ + gtk_object_set(GTK_OBJECT(model), + "book", book, + NULL); + gtk_object_unref(GTK_OBJECT(book)); +} + +GtkWidget * +e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int num1, int num2) +{ + ETableModel *model; + ETableHeader *header; + ECell *cell_left_just; + EBook *book; + GtkWidget *table; + char *filename; + char *uri; + + model = e_addressbook_model_new(); + cell_left_just = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); + + header = e_table_header_new (); + e_table_header_add_column (header, e_table_col_new (0, "Full Name", 1.0, 20, cell_left_just, + g_str_compare, TRUE), 0); + + book = e_book_new(); + gtk_object_ref(GTK_OBJECT(model)); + gtk_object_ref(GTK_OBJECT(book)); + filename = gnome_util_prepend_user_home("evolution/local/Contacts/addressbook.db"); + uri = g_strdup_printf("file://%s", filename); + e_book_load_uri(book, uri, (EBookCallback) set_book, model); + g_free(uri); + g_free(filename); + table = e_table_new (header, model, SPEC); + gtk_object_set_data(GTK_OBJECT(table), "model", model); + return table; +} + +static void +set_current_selection(ETable *table, int row, ESelectNames *names) +{ + names->currently_selected = row; +} + +static void +e_select_names_init (ESelectNames *e_select_names) +{ + GladeXML *gui; + GtkWidget *widget; + + gui = glade_xml_new (EVOLUTION_GLADEDIR "/select-names.glade", NULL); + e_select_names->gui = gui; + + e_select_names->children = g_hash_table_new(g_str_hash, g_str_equal); + e_select_names->child_count = 0; + + widget = glade_xml_get_widget(gui, "table-top"); + if (!widget) { + return; + } + gtk_widget_ref(widget); + gtk_widget_unparent(widget); + gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(e_select_names)->vbox), widget, TRUE, TRUE, 0); + gtk_widget_unref(widget); + + gnome_dialog_append_buttons(GNOME_DIALOG(e_select_names), + GNOME_STOCK_BUTTON_OK, + GNOME_STOCK_BUTTON_CANCEL, + NULL); + + e_select_names->table = E_TABLE(glade_xml_get_widget(gui, "table-source")); + e_select_names->model = gtk_object_get_data(GTK_OBJECT(e_select_names->table), "model"); + + e_select_names->currently_selected = -1; + + gtk_signal_connect(GTK_OBJECT(e_select_names->table), "cursor_change", + GTK_SIGNAL_FUNC(set_current_selection), e_select_names); +} + +static void e_select_names_child_free(char *key, ESelectNamesChild *child, ESelectNames *e_select_names) +{ + g_free(child->title); + gtk_object_unref(GTK_OBJECT(child->model)); + g_free(key); +} + +static void +e_select_names_destroy (GtkObject *object) { + ESelectNames *e_select_names = E_SELECT_NAMES(object); + + gtk_object_unref(GTK_OBJECT(e_select_names->gui)); + g_hash_table_foreach(e_select_names->children, (GHFunc) e_select_names_child_free, e_select_names); + g_hash_table_destroy(e_select_names->children); +} + +GtkWidget* +e_select_names_new (void) +{ + GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_select_names_get_type ())); + return widget; +} + +static void +e_select_names_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) +{ + ESelectNames *editor; + + editor = E_SELECT_NAMES (o); + + switch (arg_id){ + default: + return; + } +} + +static void +e_select_names_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNames *e_select_names; + + e_select_names = E_SELECT_NAMES (object); + + switch (arg_id) { + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +static void +button_clicked(GtkWidget *button, ESelectNamesChild *child) +{ + ESelectNames *names = child->names; + int row = names->currently_selected; + if (row != -1) { + ECard *card = e_addressbook_model_get_card(E_ADDRESSBOOK_MODEL(names->model), row); + e_cardlist_model_add(E_CARDLIST_MODEL(child->model), &card, 1); + gtk_object_unref(GTK_OBJECT(card)); + } +} + +void +e_select_names_add_section(ESelectNames *e_select_names, char *name, char *id) +{ + ESelectNamesChild *child; + GtkWidget *button; + GtkWidget *alignment; + GtkTable *table; + char *label; + + ETableModel *model; + GtkWidget *etable; + ETableHeader *header; + ECell *cell_left_just; + + if (g_hash_table_lookup(e_select_names->children, id)) { + return; + } + + table = GTK_TABLE(glade_xml_get_widget (e_select_names->gui, "table-recipients")); + + child = g_new(ESelectNamesChild, 1); + + child->names = e_select_names; + + e_select_names->child_count++; + + alignment = gtk_alignment_new(0, 0, 1, 0); + label = g_strdup_printf("%s ->", _(name)); + button = gtk_button_new_with_label(label); + g_free(label); + gtk_container_add(GTK_CONTAINER(alignment), button); + gtk_widget_show_all(alignment); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(button_clicked), child); + gtk_table_attach(table, alignment, + 0, 1, + e_select_names->child_count, + e_select_names->child_count + 1, + GTK_FILL, GTK_FILL, + 0, 0); + + model = e_cardlist_model_new(); + header = e_table_header_new (); + cell_left_just = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); + e_table_header_add_column (header, e_table_col_new (0, "Full Name", 1.0, 20, cell_left_just, + g_str_compare, TRUE), 0); + etable = e_table_new (header, model, SPEC); + + child->model = model; + gtk_object_ref(GTK_OBJECT(child->model)); + + gtk_widget_show(etable); + + gtk_table_attach(table, etable, + 1, 2, + e_select_names->child_count, + e_select_names->child_count + 1, + GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, + 0, 0); +} + +static void * +card_copy(const void *value, void *closure) +{ + gtk_object_ref(GTK_OBJECT(value)); + return (void *)value; +} + +static void +card_free(void *value, void *closure) +{ + gtk_object_unref(GTK_OBJECT(value)); +} + +EList * +e_select_names_get_section(ESelectNames *e_select_names, char *id) +{ + ESelectNamesChild *child; + int i; + int rows; + EList *list; + + child = g_hash_table_lookup(e_select_names->children, id); + if (!child) + return NULL; + rows = e_table_model_row_count(child->model); + + list = e_list_new(card_copy, card_free, NULL); + for (i = 0; i < rows; i++) { + ECard *card = e_cardlist_model_get(E_CARDLIST_MODEL(child->model), i); + e_list_append(list, card); + gtk_object_unref(GTK_OBJECT(card)); + } + return list; +} diff --git a/addressbook/gui/component/select-names/e-select-names.h b/addressbook/gui/component/select-names/e-select-names.h new file mode 100644 index 0000000000..c9d4619db2 --- /dev/null +++ b/addressbook/gui/component/select-names/e-select-names.h @@ -0,0 +1,86 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* e-select-names.h + * Copyright (C) 2000 Helix Code, Inc. + * Author: Chris Lahey <clahey@helixcode.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef __E_SELECT_NAMES_H__ +#define __E_SELECT_NAMES_H__ + +#include <gnome.h> +#include <glade/glade.h> +#include <e-util/e-list.h> +#include <widgets/e-table/e-table.h> + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +/* ESelectNames - A dialog displaying information about a contact. + * + * The following arguments are available: + * + * name type read/write description + * -------------------------------------------------------------------------------- + */ + +#define E_SELECT_NAMES_TYPE (e_select_names_get_type ()) +#define E_SELECT_NAMES(obj) (GTK_CHECK_CAST ((obj), E_SELECT_NAMES_TYPE, ESelectNames)) +#define E_SELECT_NAMES_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_SELECT_NAMES_TYPE, ESelectNamesClass)) +#define E_IS_SELECT_NAMES(obj) (GTK_CHECK_TYPE ((obj), E_SELECT_NAMES_TYPE)) +#define E_IS_SELECT_NAMES_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_SELECT_NAMES_TYPE)) + + +typedef struct _ESelectNames ESelectNames; +typedef struct _ESelectNamesClass ESelectNamesClass; + +struct _ESelectNames +{ + GnomeDialog parent; + + /* item specific fields */ + GladeXML *gui; + + GHashTable *children; /* Of type char * to ESelectNamesChild */ + int child_count; + ETable *table; + ETableModel *model; + int currently_selected; +}; + +struct _ESelectNamesClass +{ + GnomeDialogClass parent_class; +}; + + +GtkWidget *e_select_names_new (void); +GtkType e_select_names_get_type (void); +void e_select_names_add_section (ESelectNames *e_select_names, + char *name, + char *id); +/* Returns a ref counted list of addresses. */ +EList *e_select_names_get_section (ESelectNames *e_select_names, + char *id); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* __E_SELECT_NAMES_H__ */ diff --git a/addressbook/gui/component/select-names/recipient.glade b/addressbook/gui/component/select-names/recipient.glade new file mode 100644 index 0000000000..b60972d094 --- /dev/null +++ b/addressbook/gui/component/select-names/recipient.glade @@ -0,0 +1,61 @@ +<?xml version="1.0"?> +<GTK-Interface> + +<project> + <name>Recipient</name> + <program_name>recipient</program_name> + <directory></directory> + <source_directory>src</source_directory> + <pixmaps_directory>pixmaps</pixmaps_directory> + <language>C</language> + <gnome_support>True</gnome_support> + <gettext_support>True</gettext_support> + <use_widget_names>True</use_widget_names> + <output_main_file>False</output_main_file> + <output_support_files>False</output_support_files> + <output_build_files>False</output_build_files> + <gnome_help_support>True</gnome_help_support> +</project> + +<widget> + <class>GtkWindow</class> + <name>window1</name> + <visible>False</visible> + <title>window1</title> + <type>GTK_WINDOW_TOPLEVEL</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>True</allow_grow> + <auto_shrink>False</auto_shrink> + + <widget> + <class>GtkHBox</class> + <name>hbox-top</name> + <homogeneous>False</homogeneous> + <spacing>4</spacing> + + <widget> + <class>GtkAlignment</class> + <name>alignment1</name> + <xalign>1.08033e-07</xalign> + <yalign>0</yalign> + <xscale>1</xscale> + <yscale>0</yscale> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkButton</class> + <name>text-button</name> + <can_focus>True</can_focus> + <label>-></label> + </widget> + </widget> + </widget> +</widget> + +</GTK-Interface> diff --git a/addressbook/gui/component/select-names/select-names.glade b/addressbook/gui/component/select-names/select-names.glade new file mode 100644 index 0000000000..46da911228 --- /dev/null +++ b/addressbook/gui/component/select-names/select-names.glade @@ -0,0 +1,245 @@ +<?xml version="1.0"?> +<GTK-Interface> + +<project> + <name>Select-names</name> + <program_name>select-names</program_name> + <directory></directory> + <source_directory>src</source_directory> + <pixmaps_directory>pixmaps</pixmaps_directory> + <language>C</language> + <gnome_support>True</gnome_support> + <gettext_support>True</gettext_support> + <output_main_file>False</output_main_file> + <output_support_files>False</output_support_files> + <output_build_files>False</output_build_files> + <output_translatable_strings>True</output_translatable_strings> + <translatable_strings_file>select-names.glade.h</translatable_strings_file> +</project> + +<widget> + <class>GnomeDialog</class> + <name>dialog-top</name> + <visible>False</visible> + <title>Select Names</title> + <type>GTK_WINDOW_TOPLEVEL</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>True</allow_grow> + <auto_shrink>False</auto_shrink> + <auto_close>False</auto_close> + <hide_on_close>False</hide_on_close> + + <widget> + <class>GtkVBox</class> + <child_name>GnomeDialog:vbox</child_name> + <name>dialog-vbox1</name> + <homogeneous>False</homogeneous> + <spacing>8</spacing> + <child> + <padding>4</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkHButtonBox</class> + <child_name>GnomeDialog:action_area</child_name> + <name>dialog-action_area1</name> + <layout_style>GTK_BUTTONBOX_END</layout_style> + <spacing>8</spacing> + <child_min_width>85</child_min_width> + <child_min_height>27</child_min_height> + <child_ipad_x>7</child_ipad_x> + <child_ipad_y>0</child_ipad_y> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + <pack>GTK_PACK_END</pack> + </child> + + <widget> + <class>GtkButton</class> + <name>button1</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <stock_button>GNOME_STOCK_BUTTON_OK</stock_button> + </widget> + + <widget> + <class>GtkButton</class> + <name>button3</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> + </widget> + </widget> + + <widget> + <class>GtkTable</class> + <name>table-top</name> + <rows>3</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>6</row_spacing> + <column_spacing>6</column_spacing> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkHBox</class> + <name>hbox1</name> + <homogeneous>False</homogeneous> + <spacing>4</spacing> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + + <widget> + <class>GtkEntry</class> + <name>entry-find</name> + <can_focus>True</can_focus> + <has_focus>True</has_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + </widget> + + <widget> + <class>GtkButton</class> + <name>button-find</name> + <can_focus>True</can_focus> + <label>Find...</label> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + </widget> + + <widget> + <class>GtkAccelLabel</class> + <name>accellabel1</name> + <label>T_ype name or select from List:</label> + <justify>GTK_JUSTIFY_LEFT</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + + <widget> + <class>Custom</class> + <name>table-source</name> + <creation_function>e_addressbook_create_ebook_table</creation_function> + <int1>0</int1> + <int2>0</int2> + <last_modification_time>Sat, 10 Jun 2000 22:02:57 GMT</last_modification_time> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>2</top_attach> + <bottom_attach>3</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>True</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + + <widget> + <class>GtkTable</class> + <name>table-recipients</name> + <rows>1</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>4</row_spacing> + <column_spacing>4</column_spacing> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>2</top_attach> + <bottom_attach>3</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + + <widget> + <class>GtkAccelLabel</class> + <name>accellabel2</name> + <label>Message Recipients</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + </widget> + </widget> + </widget> +</widget> + +</GTK-Interface> diff --git a/addressbook/gui/component/select-names/select-names.glade.h b/addressbook/gui/component/select-names/select-names.glade.h new file mode 100644 index 0000000000..a21ddce689 --- /dev/null +++ b/addressbook/gui/component/select-names/select-names.glade.h @@ -0,0 +1,10 @@ +/* + * Translatable strings file generated by Glade. + * Add this file to your project's POTFILES.in. + * DO NOT compile it as part of your application. + */ + +gchar *s = N_("Select Names"); +gchar *s = N_("Find..."); +gchar *s = N_("T_ype name or select from List:"); +gchar *s = N_("Message Recipients"); |