aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component/select-names/e-select-names-text-model.c
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@helixcode.com>2000-07-04 07:03:45 +0800
committerChris Lahey <clahey@src.gnome.org>2000-07-04 07:03:45 +0800
commit6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344 (patch)
tree02c04c1412131341c976409cbc093bfe4b529417 /addressbook/gui/component/select-names/e-select-names-text-model.c
parent43f902781ba5f22478f966a2f7687baf1a2eccdd (diff)
downloadgsoc2013-evolution-6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344.tar
gsoc2013-evolution-6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344.tar.gz
gsoc2013-evolution-6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344.tar.bz2
gsoc2013-evolution-6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344.tar.lz
gsoc2013-evolution-6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344.tar.xz
gsoc2013-evolution-6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344.tar.zst
gsoc2013-evolution-6fd5b82ca0c15cb641eb0f7aa427a6989b0f1344.zip
Removed e-card-iterator.c, e-card-iterator.h, e-card-list-iterator.c,
2000-07-03 Christopher James Lahey <clahey@helixcode.com> * backend/ebook/Makefile.am: Removed e-card-iterator.c, e-card-iterator.h, e-card-list-iterator.c, e-card-list-iterator.h, e-card-list.c, e-card-list.h. * backend/ebook/e-card-iterator.c, backend/ebook/e-card-iterator.h, backend/ebook/e-card-list-iterator.c, backend/ebook/e-card-list-iterator.h, backend/ebook/e-card-list.c, backend/ebook/e-card-list.h: Removed in favor or versions without the -card in the e-util directory since these classes are not specific to cards at all. * backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h, backend/ebook/e-card.c, backend/ebook/e-card.h, backend/ebook/load-pine-addressbook.c, backend/ebook/test-card.c, backend/pas/pas-backend-file.c: Changed the references to e-card-list.c and friends to e-list.c and friends. * contact-editor/e-contact-editor.c: Added #include <e-contact-save-as.h> to fix a warning. * gui/component/Makefile.am: Moved a number of classes associated with the select-names object to the new select-names directory. * gui/component/addressbook.c: Changed the reference to e-select-names.h. * gui/component/e-select-names.c, gui/component/e-select-names.h, gui/component/select-names.glade, gui/component/select-names.glade.h: Moved these files into select-names/. * gui/component/select-names/.cvsignore, gui/component/select-names/Makefile.am, gui/component/select-names/e-select-names-manager.c, gui/component/select-names/e-select-names-manager.h, gui/component/select-names/e-select-names-model.c, gui/component/select-names/e-select-names-model.h, gui/component/select-names/e-select-names-table-model.c, gui/component/select-names/e-select-names-table-model.h, gui/component/select-names/e-select-names-text-model.c, gui/component/select-names/e-select-names-text-model.h, gui/component/select-names/e-select-names.c, gui/component/select-names/e-select-names.h, gui/component/select-names/recipient.glade, gui/component/select-names/select-names.glade, gui/component/select-names/select-names.glade.h: New files for select names dialog (e-select-names.c, e-select-names.h, select-names.glade, select-names.glade.h and recipient.glade moved from gui/component/.) svn path=/trunk/; revision=3876
Diffstat (limited to 'addressbook/gui/component/select-names/e-select-names-text-model.c')
-rw-r--r--addressbook/gui/component/select-names/e-select-names-text-model.c263
1 files changed, 263 insertions, 0 deletions
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;
+}
+