diff options
Diffstat (limited to 'addressbook/gui/widgets')
35 files changed, 0 insertions, 9267 deletions
diff --git a/addressbook/gui/widgets/.cvsignore b/addressbook/gui/widgets/.cvsignore deleted file mode 100644 index 8f18401976..0000000000 --- a/addressbook/gui/widgets/.cvsignore +++ /dev/null @@ -1,14 +0,0 @@ -.deps -.libs -.pure -Makefile -Makefile.in -*.lo -*.la -minicard-label-test -minicard-test -minicard-view-test -minicard-widget-test -reflow-test -e-addressbook-marshal.c -e-addressbook-marshal.h diff --git a/addressbook/gui/widgets/Makefile.am b/addressbook/gui/widgets/Makefile.am deleted file mode 100644 index eed44c04a2..0000000000 --- a/addressbook/gui/widgets/Makefile.am +++ /dev/null @@ -1,154 +0,0 @@ -INCLUDES = \ - -DG_LOG_DOMAIN=\"e-minicard\" \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - -DEVOLUTION_ETSPECDIR=\""$(etspecdir)"\" \ - -DEVOLUTION_DATADIR=\""$(datadir)"\" \ - -DEVOLUTION_IMAGESDIR=\""$(datadir)"/images/evolution\" \ - -I$(top_srcdir) \ - -I$(top_srcdir)/addressbook/backend \ - -I$(top_builddir)/addressbook/backend \ - -I$(top_srcdir)/addressbook/gui/contact-editor \ - -I$(top_srcdir)/addressbook/gui/merging \ - -I$(top_srcdir)/addressbook/gui/component \ - -I$(top_srcdir)/widgets/misc \ - -I$(top_builddir)/shell \ - $(EVOLUTION_ADDRESSBOOK_CFLAGS) - -noinst_LIBRARIES = \ - libeminicard.a - -libeminicard_a_SOURCES = \ - e-addressbook-marshal.c \ - e-addressbook-reflow-adapter.c \ - e-addressbook-reflow-adapter.h \ - e-addressbook-table-adapter.c \ - e-addressbook-table-adapter.h \ - e-addressbook-model.c \ - e-addressbook-model.h \ - e-addressbook-util.c \ - e-addressbook-util.h \ - e-addressbook-view.c \ - e-addressbook-view.h \ - e-minicard-control.c \ - e-minicard-control.h \ - e-minicard-label.c \ - e-minicard-label.h \ - e-minicard-view-widget.c \ - e-minicard-view-widget.h \ - e-minicard-view.c \ - e-minicard-view.h \ - e-minicard-widget.c \ - e-minicard-widget.h \ - e-minicard.c \ - e-minicard.h \ - gal-view-factory-minicard.c \ - gal-view-factory-minicard.h \ - gal-view-minicard.c \ - gal-view-minicard.h - -# GLib marshalling cruft - -e-addressbook-marshal.h: e-addressbook-marshal.list - ( @GLIB_GENMARSHAL@ --prefix=e_addressbook_marshal e-addressbook-marshal.list --header > e-addressbook-marshal.tmp \ - && mv e-addressbook-marshal.tmp e-addressbook-marshal.h ) \ - || ( rm -f e-addressbook-marshal.tmp && exit 1 ) - -e-addressbook-marshal.c: e-addressbook-marshal.h - ( @GLIB_GENMARSHAL@ --prefix=e_addressbook_marshal e-addressbook-marshal.list --body > e-addressbook-marshal.tmp \ - && mv e-addressbook-marshal.tmp e-addressbook-marshal.c ) \ - || ( rm -f e-addressbook-marshal.tmp && exit 1 ) - -MARSHAL_GENERATED = e-addressbook-marshal.c e-addressbook-marshal.h - -#noinst_PROGRAMS = \ -# minicard-widget-test \ -# minicard-label-test \ -# minicard-test -## reflow-test -## minicard-view-test -# -#minicard_label_test_SOURCES = \ -# test-minicard-label.c -# -#minicard_label_test_LDADD = \ -# libeminicard.a \ -# $(EVOLUTION_ADDRESSBOOK_LIBS) \ -# $(top_builddir)/e-util/libeutil.la -# -#minicard_test_SOURCES = \ -# test-minicard.c -# -#minicard_test_LDADD = \ -# libeminicard.a \ -# $(top_builddir)/addressbook/backend/ebook/libebook.la \ -# $(top_builddir)/e-util/libeutil.la \ -# $(top_builddir)/libversit/libversit.la \ -# $(top_builddir)/e-util/ename/libename.la \ -# $(top_builddir)/addressbook/gui/contact-editor/libecontacteditor.a \ -# $(top_builddir)/addressbook/gui/contact-list-editor/libecontactlisteditor.a \ -# $(top_builddir)/addressbook/printing/libecontactprint.a \ -# $(top_builddir)/addressbook/gui/merging/libecardmerging.a \ -# $(top_builddir)/widgets/misc/libemiscwidgets.a \ -# $(top_builddir)/addressbook/gui/component/select-names/libeselectnames.la \ -# $(top_builddir)/e-util/libeutil.la \ -# $(EVOLUTION_ADDRESSBOOK_LIBS) \ -# libeminicard.a -# -#reflow_test_SOURCES = \ -# test-reflow.c -# -#reflow_test_LDADD = \ -# libeminicard.a \ -# $(top_builddir)/addressbook/backend/ebook/libebook.la \ -# $(top_builddir)/e-util/libeutil.la \ -# $(top_builddir)/libversit/libversit.la \ -# $(top_builddir)/e-util/ename/libename.la \ -# $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ -# $(top_builddir)/addressbook/printing/libecontactprint.a \ -# $(top_builddir)/widgets/misc/libemiscwidgets.a \ -# $(top_builddir)/e-util/libeutil.la \ -# $(EVOLUTION_ADDRESSBOOK_LIBS) - -#minicard_view_test_SOURCES = \ -# test-minicard-view.c - -#minicard_view_test_LDADD = \ -# $(EVOLUTION_ADDRESSBOOK_LIBS) -# libeminicard.a \ -# $(top_builddir)/addressbook/backend/ebook/libebook.la \ -# $(top_builddir)/e-util/libeutil.la \ -# $(top_builddir)/libversit/libversit.la \ -# $(top_builddir)/addressbook/ename/libename.la \ -# $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ -# $(top_builddir)/addressbook/printing/libecontactprint.a \ -# $(top_builddir)/widgets/misc/libemiscwidgets.a \ -# $(top_builddir)/e-util/libeutil.la -# -#minicard_widget_test_SOURCES = \ -# e-minicard-widget-test.c -# -#minicard_widget_test_LDADD = \ -# libeminicard.a \ -# $(top_builddir)/addressbook/backend/ebook/libebook.la \ -# $(top_builddir)/e-util/libeutil.la \ -# $(top_builddir)/libversit/libversit.la \ -# $(top_builddir)/e-util/ename/libename.la \ -# $(top_builddir)/addressbook/gui/contact-editor/libecontacteditor.a \ -# $(top_builddir)/addressbook/gui/contact-list-editor/libecontactlisteditor.a \ -# $(top_builddir)/addressbook/gui/component/select-names/libeselectnames.la \ -# $(top_builddir)/addressbook/printing/libecontactprint.a \ -# $(top_builddir)/widgets/misc/libemiscwidgets.a \ -# $(top_builddir)/e-util/libeutil.la \ -# $(top_builddir)/addressbook/gui/merging/libecardmerging.a \ -# $(EVOLUTION_ADDRESSBOOK_LIBS) - -gladedir = $(datadir)/evolution/glade -glade_DATA = - -etspecdir = $(datadir)/evolution/etspec -etspec_DATA= e-addressbook-view.etspec - -EXTRA_DIST = \ - $(glade_DATA) \ - $(etspec_DATA) \ - e-addressbook-marshal.list diff --git a/addressbook/gui/widgets/e-addressbook-marshal.list b/addressbook/gui/widgets/e-addressbook-marshal.list deleted file mode 100644 index 8f97e48e86..0000000000 --- a/addressbook/gui/widgets/e-addressbook-marshal.list +++ /dev/null @@ -1,10 +0,0 @@ -INT:POINTER -NONE:NONE -NONE:BOOL -NONE:POINTER -NONE:ENUM -NONE:INT,INT -NONE:INT -NONE:UINT -NONE:DOUBLE -INT:POINTER diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c deleted file mode 100644 index 1d5b228bac..0000000000 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ /dev/null @@ -1,682 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * - * Author: - * Christopher James Lahey <clahey@ximian.com> - * - * (C) 1999 Ximian, Inc. - */ - -#include <config.h> -#include "e-addressbook-marshal.h" -#include "e-addressbook-model.h" -#include <libxml/tree.h> -#include <libxml/parser.h> -#include <libxml/xmlmemory.h> -#include <gnome.h> -#include <gal/widgets/e-gui-utils.h> -#include "e-addressbook-util.h" -#include "e-addressbook-marshal.h" - -#define PARENT_TYPE G_TYPE_OBJECT -GObjectClass *parent_class; - -/* - * EAddressbookModel callbacks - * These are the callbacks that define the behavior of our custom model. - */ -static void e_addressbook_model_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void e_addressbook_model_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - - -enum { - PROP_0, - PROP_BOOK, - PROP_QUERY, - PROP_EDITABLE, -}; - -enum { - WRITABLE_STATUS, - STATUS_MESSAGE, - SEARCH_RESULT, - FOLDER_BAR_MESSAGE, - CARD_ADDED, - CARD_REMOVED, - CARD_CHANGED, - MODEL_CHANGED, - STOP_STATE_CHANGED, - BACKEND_DIED, - LAST_SIGNAL -}; - -#define COLS (E_CARD_SIMPLE_FIELD_LAST) - -static guint e_addressbook_model_signals [LAST_SIGNAL] = {0, }; - -static void -free_data (EAddressbookModel *model) -{ - if (model->data) { - int i; - - for ( i = 0; i < model->data_count; i++ ) { - g_object_unref (model->data[i]); - } - - g_free(model->data); - model->data = NULL; - model->data_count = 0; - model->allocated_count = 0; - } -} - -static void -remove_book_view(EAddressbookModel *model) -{ - if (model->book_view && model->create_card_id) - g_signal_handler_disconnect (model->book_view, - model->create_card_id); - if (model->book_view && model->remove_card_id) - g_signal_handler_disconnect (model->book_view, - model->remove_card_id); - if (model->book_view && model->modify_card_id) - g_signal_handler_disconnect (model->book_view, - model->modify_card_id); - if (model->book_view && model->status_message_id) - g_signal_handler_disconnect (model->book_view, - model->status_message_id); - if (model->book_view && model->sequence_complete_id) - g_signal_handler_disconnect (model->book_view, - model->sequence_complete_id); - - model->create_card_id = 0; - model->remove_card_id = 0; - model->modify_card_id = 0; - model->status_message_id = 0; - model->sequence_complete_id = 0; - - model->search_in_progress = FALSE; - - if (model->book_view) { - e_book_view_stop (model->book_view); - g_object_unref (model->book_view); - model->book_view = NULL; - } -} - -static void -addressbook_dispose(GObject *object) -{ - EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object); - - if (model->get_view_idle) { - g_source_remove(model->get_view_idle); - model->get_view_idle = 0; - } - - remove_book_view(model); - free_data (model); - - if (model->book) { - if (model->writable_status_id) - g_signal_handler_disconnect (model->book, - model->writable_status_id); - model->writable_status_id = 0; - - if (model->backend_died_id) - g_signal_handler_disconnect (model->book, - model->backend_died_id); - model->backend_died_id = 0; - - g_object_unref (model->book); - model->book = NULL; - } - - if (model->query) { - g_free (model->query); - model->query = NULL; - } - - if (G_OBJECT_CLASS(parent_class)->dispose) - G_OBJECT_CLASS(parent_class)->dispose(object); -} - -static void -update_folder_bar_message (EAddressbookModel *model) -{ - int count; - char *message; - - count = model->data_count; - - switch (count) { - case 0: - message = g_strdup (_("No cards")); - break; - case 1: - message = g_strdup (_("1 card")); - break; - default: - message = g_strdup_printf (_("%d cards"), count); - break; - } - - g_signal_emit (model, - e_addressbook_model_signals [FOLDER_BAR_MESSAGE], 0, - message); - - g_free (message); -} - -static void -create_card(EBookView *book_view, - const GList *cards, - EAddressbookModel *model) -{ - int old_count = model->data_count; - int length = g_list_length ((GList *)cards); - - if (model->data_count + length > model->allocated_count) { - while (model->data_count + length > model->allocated_count) - model->allocated_count = model->allocated_count * 2 + 1; - model->data = g_renew(ECard *, model->data, model->allocated_count); - } - - for ( ; cards; cards = cards->next) { - model->data[model->data_count++] = cards->data; - g_object_ref (cards->data); - } - - g_signal_emit (model, - e_addressbook_model_signals [CARD_ADDED], 0, - old_count, model->data_count - old_count); - - update_folder_bar_message (model); -} - -static void -remove_card(EBookView *book_view, - const char *id, - EAddressbookModel *model) -{ - int i; - - for ( i = 0; i < model->data_count; i++) { - if ( !strcmp(e_card_get_id(model->data[i]), id) ) { - g_object_unref (model->data[i]); - memmove(model->data + i, model->data + i + 1, (model->data_count - i - 1) * sizeof (ECard *)); - model->data_count--; - - g_signal_emit (model, - e_addressbook_model_signals [CARD_REMOVED], 0, - i); - update_folder_bar_message (model); - break; - } - } -} - -static void -modify_card(EBookView *book_view, - const GList *cards, - EAddressbookModel *model) -{ - for ( ; cards; cards = cards->next) { - int i; - for ( i = 0; i < model->data_count; i++) { - if ( !strcmp(e_card_get_id(model->data[i]), e_card_get_id(E_CARD(cards->data))) ) { - g_object_unref (model->data[i]); - model->data[i] = e_card_duplicate(E_CARD(cards->data)); - g_signal_emit (model, - e_addressbook_model_signals [CARD_CHANGED], 0, - i); - break; - } - } - } -} - -static void -status_message (EBookView *book_view, - char* status, - EAddressbookModel *model) -{ - g_signal_emit (model, - e_addressbook_model_signals [STATUS_MESSAGE], 0, - status); -} - -static void -sequence_complete (EBookView *book_view, - EBookViewStatus status, - EAddressbookModel *model) -{ - model->search_in_progress = FALSE; - status_message (book_view, NULL, model); - g_signal_emit (model, - e_addressbook_model_signals [SEARCH_RESULT], 0, - status); - g_signal_emit (model, - e_addressbook_model_signals [STOP_STATE_CHANGED], 0); -} - -static void -writable_status (EBook *book, - gboolean writable, - EAddressbookModel *model) -{ - if (!model->editable_set) { - model->editable = writable; - - g_signal_emit (model, - e_addressbook_model_signals [WRITABLE_STATUS], 0, - writable); - } -} - -static void -backend_died (EBook *book, - EAddressbookModel *model) -{ - g_signal_emit (model, - e_addressbook_model_signals [BACKEND_DIED], 0); -} - -static void -e_addressbook_model_class_init (GObjectClass *object_class) -{ - parent_class = g_type_class_ref (PARENT_TYPE); - - object_class->dispose = addressbook_dispose; - object_class->set_property = e_addressbook_model_set_property; - object_class->get_property = e_addressbook_model_get_property; - - g_object_class_install_property (object_class, PROP_BOOK, - g_param_spec_object ("book", - _("Book"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_BOOK, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_QUERY, - g_param_spec_string ("query", - _("Query"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_EDITABLE, - g_param_spec_boolean ("editable", - _("Editable"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - e_addressbook_model_signals [WRITABLE_STATUS] = - g_signal_new ("writable_status", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, writable_status), - NULL, NULL, - e_addressbook_marshal_NONE__BOOL, - G_TYPE_NONE, - 1, G_TYPE_BOOLEAN); - - e_addressbook_model_signals [STATUS_MESSAGE] = - g_signal_new ("status_message", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, status_message), - NULL, NULL, - e_addressbook_marshal_NONE__POINTER, - G_TYPE_NONE, - 1, G_TYPE_POINTER); - - e_addressbook_model_signals [SEARCH_RESULT] = - g_signal_new ("search_result", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, search_result), - NULL, NULL, - e_addressbook_marshal_NONE__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - - e_addressbook_model_signals [FOLDER_BAR_MESSAGE] = - g_signal_new ("folder_bar_message", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, folder_bar_message), - NULL, NULL, - e_addressbook_marshal_NONE__POINTER, - G_TYPE_NONE, 1, G_TYPE_POINTER); - - e_addressbook_model_signals [CARD_ADDED] = - g_signal_new ("card_added", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, card_added), - NULL, NULL, - e_addressbook_marshal_NONE__INT_INT, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); - - e_addressbook_model_signals [CARD_REMOVED] = - g_signal_new ("card_removed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, card_removed), - NULL, NULL, - e_addressbook_marshal_NONE__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - - e_addressbook_model_signals [CARD_CHANGED] = - g_signal_new ("card_changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, card_changed), - NULL, NULL, - e_addressbook_marshal_NONE__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - - e_addressbook_model_signals [MODEL_CHANGED] = - g_signal_new ("model_changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, model_changed), - NULL, NULL, - e_addressbook_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - e_addressbook_model_signals [STOP_STATE_CHANGED] = - g_signal_new ("stop_state_changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, stop_state_changed), - NULL, NULL, - e_addressbook_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - e_addressbook_model_signals [BACKEND_DIED] = - g_signal_new ("backend_died", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookModelClass, backend_died), - NULL, NULL, - e_addressbook_marshal_NONE__NONE, - G_TYPE_NONE, 0); -} - -static void -e_addressbook_model_init (GObject *object) -{ - EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object); - model->book = NULL; - model->query = g_strdup("(contains \"x-evolution-any-field\" \"\")"); - model->book_view = NULL; - model->get_view_idle = 0; - model->create_card_id = 0; - model->remove_card_id = 0; - model->modify_card_id = 0; - model->status_message_id = 0; - model->writable_status_id = 0; - model->backend_died_id = 0; - model->sequence_complete_id = 0; - model->data = NULL; - model->data_count = 0; - model->allocated_count = 0; - model->search_in_progress = FALSE; - model->editable = FALSE; - model->editable_set = FALSE; - model->first_get_view = TRUE; -} - -static void -book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure) -{ - EAddressbookModel *model = closure; - - remove_book_view(model); - - if (status != E_BOOK_STATUS_SUCCESS) { - e_addressbook_error_dialog (_("Error getting book view"), status); - return; - } - - model->book_view = book_view; - if (model->book_view) - g_object_ref (model->book_view); - model->create_card_id = g_signal_connect(model->book_view, - "card_added", - G_CALLBACK (create_card), - model); - model->remove_card_id = g_signal_connect(model->book_view, - "card_removed", - G_CALLBACK (remove_card), - model); - model->modify_card_id = g_signal_connect(model->book_view, - "card_changed", - G_CALLBACK(modify_card), - model); - model->status_message_id = g_signal_connect(model->book_view, - "status_message", - G_CALLBACK(status_message), - model); - model->sequence_complete_id = g_signal_connect(model->book_view, - "sequence_complete", - G_CALLBACK(sequence_complete), - model); - - free_data (model); - - model->search_in_progress = TRUE; - g_signal_emit (model, - e_addressbook_model_signals [MODEL_CHANGED], 0); - g_signal_emit (model, - e_addressbook_model_signals [STOP_STATE_CHANGED], 0); -} - -static gboolean -get_view (EAddressbookModel *model) -{ - if (model->book && model->query) { - if (model->first_get_view) { - char *capabilities; - capabilities = e_book_get_static_capabilities (model->book); - if (capabilities && strstr (capabilities, "do-initial-query")) { - e_book_get_book_view (model->book, model->query, book_view_loaded, model); - } else { - remove_book_view(model); - free_data (model); - g_signal_emit (model, - e_addressbook_model_signals [MODEL_CHANGED], 0); - g_signal_emit (model, - e_addressbook_model_signals [STOP_STATE_CHANGED], 0); - } - model->first_get_view = FALSE; - g_free (capabilities); - } - else - e_book_get_book_view (model->book, model->query, book_view_loaded, model); - } - - model->get_view_idle = 0; - return FALSE; -} - -ECard * -e_addressbook_model_get_card(EAddressbookModel *model, - int row) -{ - if (model->data && 0 <= row && row < model->data_count) { - ECard *card; - card = e_card_duplicate (model->data[row]); - return card; - } - return NULL; -} - -const ECard * -e_addressbook_model_peek_card(EAddressbookModel *model, - int row) -{ - if (model->data && 0 <= row && row < model->data_count) { - return model->data[row]; - } - return NULL; -} - -static void -e_addressbook_model_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -{ - EAddressbookModel *model; - - model = E_ADDRESSBOOK_MODEL (object); - - switch (prop_id){ - case PROP_BOOK: - if (model->book) { - if (model->writable_status_id) - g_signal_handler_disconnect (model->book, - model->writable_status_id); - model->writable_status_id = 0; - - if (model->backend_died_id) - g_signal_handler_disconnect (model->book, - model->backend_died_id); - model->backend_died_id = 0; - - g_object_unref (model->book); - } - model->book = E_BOOK(g_value_get_object (value)); - if (model->book) { - model->first_get_view = TRUE; - g_object_ref (model->book); - if (model->get_view_idle == 0) - model->get_view_idle = g_idle_add((GSourceFunc)get_view, model); - g_signal_connect (model->book, - "writable_status", - G_CALLBACK (writable_status), model); - g_signal_connect (model->book, - "backend_died", - G_CALLBACK (backend_died), model); - } - break; - case PROP_QUERY: - if (model->query) - g_free(model->query); - model->query = g_strdup(g_value_get_string (value)); - if (model->get_view_idle == 0) - model->get_view_idle = g_idle_add((GSourceFunc)get_view, model); - break; - case PROP_EDITABLE: - model->editable = g_value_get_boolean (value); - model->editable_set = TRUE; - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_addressbook_model_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - EAddressbookModel *e_addressbook_model; - - e_addressbook_model = E_ADDRESSBOOK_MODEL (object); - - switch (prop_id) { - case PROP_BOOK: - g_value_set_object (value, e_addressbook_model->book); - break; - case PROP_QUERY: - g_value_set_string (value, g_strdup(e_addressbook_model->query)); - break; - case PROP_EDITABLE: - g_value_set_boolean (value, e_addressbook_model->editable); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -GType -e_addressbook_model_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EAddressbookModelClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_addressbook_model_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EAddressbookModel), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_addressbook_model_init, - }; - - type = g_type_register_static (PARENT_TYPE, "EAddressbookModel", &info, 0); - } - - return type; -} - -EAddressbookModel* -e_addressbook_model_new (void) -{ - EAddressbookModel *et; - - et = g_object_new (E_TYPE_ADDRESSBOOK_MODEL, NULL); - - return et; -} - -void e_addressbook_model_stop (EAddressbookModel *model) -{ - remove_book_view(model); - g_signal_emit (model, - e_addressbook_model_signals [STOP_STATE_CHANGED], 0); - g_signal_emit (model, - e_addressbook_model_signals [STATUS_MESSAGE], 0, - "Search Interrupted."); -} - -gboolean -e_addressbook_model_can_stop (EAddressbookModel *model) -{ - return model->search_in_progress; -} - -void -e_addressbook_model_force_folder_bar_message (EAddressbookModel *model) -{ - update_folder_bar_message (model); -} - -int -e_addressbook_model_card_count (EAddressbookModel *model) -{ - return model->data_count; -} - -ECard * -e_addressbook_model_card_at (EAddressbookModel *model, int index) -{ - return model->data[index]; -} - -gboolean -e_addressbook_model_editable (EAddressbookModel *model) -{ - return model->editable; -} - -EBook * -e_addressbook_model_get_ebook (EAddressbookModel *model) -{ - return model->book; -} diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h deleted file mode 100644 index 4863c62e07..0000000000 --- a/addressbook/gui/widgets/e-addressbook-model.h +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef _E_ADDRESSBOOK_MODEL_H_ -#define _E_ADDRESSBOOK_MODEL_H_ - -#include <glib.h> -#include <glib-object.h> -#include "addressbook/backend/ebook/e-book.h" -#include "addressbook/backend/ebook/e-book-view.h" -#include "addressbook/backend/ebook/e-card-simple.h" - -#define E_TYPE_ADDRESSBOOK_MODEL (e_addressbook_model_get_type ()) -#define E_ADDRESSBOOK_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TYPE_ADDRESSBOOK_MODEL, EAddressbookModel)) -#define E_ADDRESSBOOK_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TYPE_ADDRESSBOOK_MODEL, EAddressbookModelClass)) -#define E_IS_ADDRESSBOOK_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TYPE_ADDRESSBOOK_MODEL)) -#define E_IS_ADDRESSBOOK_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TYPE_ADDRESSBOOK_MODEL)) - -typedef struct _EAddressbookModel EAddressbookModel; -typedef struct _EAddressbookModelClass EAddressbookModelClass; - -struct _EAddressbookModel { - GObject parent; - - /* item specific fields */ - EBook *book; - char *query; - EBookView *book_view; - - int get_view_idle; - - ECard **data; - int data_count; - int allocated_count; - - int create_card_id, remove_card_id, modify_card_id, status_message_id, writable_status_id, sequence_complete_id, backend_died_id; - - guint search_in_progress : 1; - guint editable : 1; - guint editable_set : 1; - guint first_get_view : 1; -}; - - -struct _EAddressbookModelClass { - GObjectClass parent_class; - - /* - * Signals - */ - void (*writable_status) (EAddressbookModel *model, gboolean writable); - void (*search_result) (EAddressbookModel *model, EBookViewStatus status); - void (*status_message) (EAddressbookModel *model, const gchar *message); - void (*folder_bar_message) (EAddressbookModel *model, const gchar *message); - void (*card_added) (EAddressbookModel *model, gint index, gint count); - void (*card_removed) (EAddressbookModel *model, gint index); - void (*card_changed) (EAddressbookModel *model, gint index); - void (*model_changed) (EAddressbookModel *model); - void (*stop_state_changed) (EAddressbookModel *model); - void (*backend_died) (EAddressbookModel *model); -}; - - -GType e_addressbook_model_get_type (void); -EAddressbookModel *e_addressbook_model_new (void); - -/* Returns object with ref count of 1. */ -ECard *e_addressbook_model_get_card (EAddressbookModel *model, - int row); -const ECard *e_addressbook_model_peek_card (EAddressbookModel *model, - int row); -EBook *e_addressbook_model_get_ebook (EAddressbookModel *model); - -void e_addressbook_model_stop (EAddressbookModel *model); -gboolean e_addressbook_model_can_stop (EAddressbookModel *model); - -void e_addressbook_model_force_folder_bar_message (EAddressbookModel *model); - -int e_addressbook_model_card_count (EAddressbookModel *model); -ECard *e_addressbook_model_card_at (EAddressbookModel *model, - int index); -gboolean e_addressbook_model_editable (EAddressbookModel *model); - -#endif /* _E_ADDRESSBOOK_MODEL_H_ */ diff --git a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c b/addressbook/gui/widgets/e-addressbook-reflow-adapter.c deleted file mode 100644 index 3c2bb20386..0000000000 --- a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c +++ /dev/null @@ -1,487 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - - -#include <config.h> - -#include <libgnome/gnome-i18n.h> -#include "e-addressbook-marshal.h" -#include "e-addressbook-reflow-adapter.h" -#include "e-addressbook-model.h" -#include "e-addressbook-view.h" -#include "e-addressbook-util.h" - -#include "e-minicard.h" -#include <gal/widgets/e-unicode.h> -#include <gal/widgets/e-font.h> -#include <gal/widgets/e-popup-menu.h> -#include <gal/widgets/e-gui-utils.h> -#include "e-contact-save-as.h" -#include "addressbook/printing/e-contact-print.h" -#include "addressbook/printing/e-contact-print-envelope.h" - - -struct _EAddressbookReflowAdapterPrivate { - EAddressbookModel *model; - - int create_card_id, remove_card_id, modify_card_id, model_changed_id; -}; - -#define PARENT_TYPE e_reflow_model_get_type() -EReflowModel *parent_class; - -#define d(x) - -enum { - PROP_0, - PROP_BOOK, - PROP_QUERY, - PROP_EDITABLE, - PROP_MODEL, -}; - -enum { - DRAG_BEGIN, - LAST_SIGNAL -}; - -static guint e_addressbook_reflow_adapter_signals [LAST_SIGNAL] = {0, }; - -static void -unlink_model(EAddressbookReflowAdapter *adapter) -{ - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - - if (priv->model && priv->create_card_id) - g_signal_handler_disconnect (priv->model, - priv->create_card_id); - if (priv->model && priv->remove_card_id) - g_signal_handler_disconnect (priv->model, - priv->remove_card_id); - if (priv->model && priv->modify_card_id) - g_signal_handler_disconnect (priv->model, - priv->modify_card_id); - - if (priv->model && priv->model_changed_id) - g_signal_handler_disconnect (priv->model, - priv->model_changed_id); - - priv->create_card_id = 0; - priv->remove_card_id = 0; - priv->modify_card_id = 0; - priv->model_changed_id = 0; - - if (priv->model) - g_object_unref (priv->model); - - priv->model = NULL; -} - - -static int -count_lines (const gchar *text) -{ - int num_lines = 1; - gunichar unival; - - for (text = e_unicode_get_utf8 (text, &unival); (unival && text); text = e_unicode_get_utf8 (text, &unival)) { - if (unival == '\n') { - num_lines ++; - } - } - - return num_lines; -} - -static int -text_height (GnomeCanvas *canvas, const gchar *text) -{ - EFont *font = e_font_from_gdk_font (gtk_style_get_font (gtk_widget_get_style (GTK_WIDGET (canvas)))); - gint height = e_font_height (font) * count_lines (text) / canvas->pixels_per_unit; - - e_font_unref (font); - return height; -} - -static void -addressbook_dispose(GObject *object) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(object); - - unlink_model (adapter); -} - -static void -addressbook_set_width (EReflowModel *erm, int width) -{ -} - -/* This function returns the number of items in our EReflowModel. */ -static int -addressbook_count (EReflowModel *erm) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(erm); - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - - return e_addressbook_model_card_count (priv->model); -} - -/* This function returns the number of items in our EReflowModel. */ -static int -addressbook_height (EReflowModel *erm, int i, GnomeCanvasGroup *parent) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(erm); - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - /* FIXME */ - ECardSimpleField field; - int count = 0; - int height; - char *string; - ECardSimple *simple = e_card_simple_new (e_addressbook_model_card_at (priv->model, i)); - - string = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_FILE_AS); - height = text_height (GNOME_CANVAS_ITEM (parent)->canvas, string ? string : "") + 10.0; - g_free(string); - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING && count < 5; field++) { - - if (field == E_CARD_SIMPLE_FIELD_FAMILY_NAME) - continue; - - string = e_card_simple_get(simple, field); - if (string && *string) { - int this_height; - int field_text_height; - - this_height = text_height (GNOME_CANVAS_ITEM (parent)->canvas, e_card_simple_get_name(simple, field)); - - field_text_height = text_height (GNOME_CANVAS_ITEM (parent)->canvas, string); - if (this_height < field_text_height) - this_height = field_text_height; - - this_height += 3; - - height += this_height; - count ++; - } - g_free (string); - } - height += 2; - - g_object_unref (simple); - - return height; -} - -static int -addressbook_compare (EReflowModel *erm, int n1, int n2) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(erm); - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - ECard *card1, *card2; - - card1 = e_addressbook_model_card_at (priv->model, n1); - card2 = e_addressbook_model_card_at (priv->model, n2); - - if (card1 && card2) { - char *file_as1, *file_as2; - file_as1 = card1->file_as; - file_as2 = card2->file_as; - if (file_as1 && file_as2) - return g_utf8_collate(file_as1, file_as2); - if (file_as1) - return -1; - if (file_as2) - return 1; - return strcmp(e_card_get_id(card1), e_card_get_id(card2)); - } - if (card1) - return -1; - if (card2) - return 1; - return 0; -} - -static int -adapter_drag_begin (EMinicard *card, GdkEvent *event, EAddressbookReflowAdapter *adapter) -{ - gint ret_val = 0; - - g_signal_emit (adapter, - e_addressbook_reflow_adapter_signals[DRAG_BEGIN], 0, - event, &ret_val); - - return ret_val; -} - -static GnomeCanvasItem * -addressbook_incarnate (EReflowModel *erm, int i, GnomeCanvasGroup *parent) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(erm); - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - GnomeCanvasItem *item; - - item = gnome_canvas_item_new(parent, - e_minicard_get_type(), - "card", e_addressbook_model_card_at (priv->model, i), - "editable", e_addressbook_model_editable (priv->model), - NULL); - -#if 0 - g_signal_connect (item, "selected", - G_CALLBACK(card_selected), 0, emvm); -#endif - - g_signal_connect (item, "drag_begin", - G_CALLBACK(adapter_drag_begin), adapter); - - return item; -} - -static void -addressbook_reincarnate (EReflowModel *erm, int i, GnomeCanvasItem *item) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(erm); - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - - gnome_canvas_item_set(item, - "card", e_addressbook_model_card_at (priv->model, i), - NULL); -} - - - -static void -create_card(EAddressbookModel *model, - gint index, gint count, - EAddressbookReflowAdapter *adapter) -{ - e_reflow_model_items_inserted (E_REFLOW_MODEL (adapter), - index, - count); -} - -static void -remove_card(EAddressbookModel *model, - gint index, - EAddressbookReflowAdapter *adapter) -{ - e_reflow_model_changed (E_REFLOW_MODEL (adapter)); -} - -static void -modify_card(EAddressbookModel *model, - gint index, - EAddressbookReflowAdapter *adapter) -{ - e_reflow_model_item_changed (E_REFLOW_MODEL (adapter), index); -} - -static void -model_changed(EAddressbookModel *model, - EAddressbookReflowAdapter *adapter) -{ - e_reflow_model_changed (E_REFLOW_MODEL (adapter)); -} - -static void -addressbook_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(object); - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - - switch (prop_id) { - case PROP_BOOK: - g_object_set (priv->model, - "book", g_value_get_object (value), - NULL); - break; - case PROP_QUERY: - g_object_set (priv->model, - "query", g_value_get_string (value), - NULL); - break; - case PROP_EDITABLE: - g_object_set (priv->model, - "editable", g_value_get_boolean (value), - NULL); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -addressbook_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(object); - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - - switch (prop_id) { - case PROP_BOOK: { - g_object_get_property (G_OBJECT (priv->model), - "book", value); - break; - } - case PROP_QUERY: { - char *query; - g_object_get_property (G_OBJECT (priv->model), - "query", value); - break; - } - case PROP_EDITABLE: { - g_object_get_property (G_OBJECT (priv->model), - "editable", value); - break; - } - case PROP_MODEL: - g_value_set_object (value, priv->model); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_addressbook_reflow_adapter_class_init (GObjectClass *object_class) -{ - EReflowModelClass *model_class = (EReflowModelClass *) object_class; - - parent_class = g_type_class_peek_parent (object_class); - - object_class->set_property = addressbook_set_property; - object_class->get_property = addressbook_get_property; - object_class->dispose = addressbook_dispose; - - g_object_class_install_property (object_class, PROP_BOOK, - g_param_spec_object ("book", - _("Book"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_BOOK, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_QUERY, - g_param_spec_string ("query", - _("Query"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_EDITABLE, - g_param_spec_boolean ("editable", - _("Editable"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_MODEL, - g_param_spec_object ("model", - _("Model"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_ADDRESSBOOK_MODEL, - G_PARAM_READABLE)); - - e_addressbook_reflow_adapter_signals [DRAG_BEGIN] = - g_signal_new ("drag_begin", - G_OBJECT_CLASS_TYPE(object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookReflowAdapterClass, drag_begin), - NULL, NULL, - e_addressbook_marshal_INT__POINTER, - G_TYPE_INT, 1, G_TYPE_POINTER); - - model_class->set_width = addressbook_set_width; - model_class->count = addressbook_count; - model_class->height = addressbook_height; - model_class->compare = addressbook_compare; - model_class->incarnate = addressbook_incarnate; - model_class->reincarnate = addressbook_reincarnate; -} - -static void -e_addressbook_reflow_adapter_init (GtkObject *object) -{ - EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(object); - EAddressbookReflowAdapterPrivate *priv; - - priv = adapter->priv = g_new0 (EAddressbookReflowAdapterPrivate, 1); - - priv->create_card_id = 0; - priv->remove_card_id = 0; - priv->modify_card_id = 0; - priv->model_changed_id = 0; -} - -GType -e_addressbook_reflow_adapter_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EAddressbookReflowAdapterClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_addressbook_reflow_adapter_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EAddressbookReflowAdapter), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_addressbook_reflow_adapter_init, - }; - - type = g_type_register_static (PARENT_TYPE, "EAddressbookReflowAdapter", &info, 0); - } - - return type; -} - -void -e_addressbook_reflow_adapter_construct (EAddressbookReflowAdapter *adapter, - EAddressbookModel *model) -{ - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - - priv->model = model; - g_object_ref (priv->model); - - priv->create_card_id = g_signal_connect(priv->model, - "card_added", - G_CALLBACK(create_card), - adapter); - priv->remove_card_id = g_signal_connect(priv->model, - "card_removed", - G_CALLBACK(remove_card), - adapter); - priv->modify_card_id = g_signal_connect(priv->model, - "card_changed", - G_CALLBACK(modify_card), - adapter); - priv->model_changed_id = g_signal_connect(priv->model, - "model_changed", - G_CALLBACK(model_changed), - adapter); -} - -EReflowModel * -e_addressbook_reflow_adapter_new (EAddressbookModel *model) -{ - EAddressbookReflowAdapter *et; - - et = g_object_new (E_TYPE_ADDRESSBOOK_REFLOW_ADAPTER, NULL); - - e_addressbook_reflow_adapter_construct (et, model); - - return E_REFLOW_MODEL(et); -} - - -ECard * -e_addressbook_reflow_adapter_get_card (EAddressbookReflowAdapter *adapter, - int index) -{ - EAddressbookReflowAdapterPrivate *priv = adapter->priv; - - return e_addressbook_model_get_card (priv->model, index); -} diff --git a/addressbook/gui/widgets/e-addressbook-reflow-adapter.h b/addressbook/gui/widgets/e-addressbook-reflow-adapter.h deleted file mode 100644 index 4bf131bc5c..0000000000 --- a/addressbook/gui/widgets/e-addressbook-reflow-adapter.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef _E_ADDRESSBOOK_REFLOW_ADAPTER_H_ -#define _E_ADDRESSBOOK_REFLOW_ADAPTER_H_ - -#include <gal/widgets/e-reflow-model.h> -#include <gal/widgets/e-selection-model.h> -#include "e-addressbook-model.h" -#include "addressbook/backend/ebook/e-book.h" -#include "addressbook/backend/ebook/e-book-view.h" -#include "addressbook/backend/ebook/e-card.h" - -#define E_TYPE_ADDRESSBOOK_REFLOW_ADAPTER (e_addressbook_reflow_adapter_get_type ()) -#define E_ADDRESSBOOK_REFLOW_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TYPE_ADDRESSBOOK_REFLOW_ADAPTER, EAddressbookReflowAdapter)) -#define E_ADDRESSBOOK_REFLOW_ADAPTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TYPE_ADDRESSBOOK_REFLOW_ADAPTER, EAddressbookReflowAdapterClass)) -#define E_IS_ADDRESSBOOK_REFLOW_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TYPE_ADDRESSBOOK_REFLOW_ADAPTER)) -#define E_IS_ADDRESSBOOK_REFLOW_ADAPTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TYPE_ADDRESSBOOK_REFLOW_ADAPTER)) - -typedef struct _EAddressbookReflowAdapter EAddressbookReflowAdapter; -typedef struct _EAddressbookReflowAdapterPrivate EAddressbookReflowAdapterPrivate; -typedef struct _EAddressbookReflowAdapterClass EAddressbookReflowAdapterClass; - -struct _EAddressbookReflowAdapter { - EReflowModel parent; - - EAddressbookReflowAdapterPrivate *priv; -}; - - -struct _EAddressbookReflowAdapterClass { - EReflowModelClass parent_class; - - /* - * Signals - */ - gint (* drag_begin) (EAddressbookReflowAdapter *adapter, GdkEvent *event); -}; - - -GType e_addressbook_reflow_adapter_get_type (void); -void e_addressbook_reflow_adapter_construct (EAddressbookReflowAdapter *adapter, - EAddressbookModel *model); -EReflowModel *e_addressbook_reflow_adapter_new (EAddressbookModel *model); - -/* Returns object with ref count of 1. */ -ECard *e_addressbook_reflow_adapter_get_card (EAddressbookReflowAdapter *adapter, - int index); -#endif /* _E_ADDRESSBOOK_REFLOW_ADAPTER_H_ */ diff --git a/addressbook/gui/widgets/e-addressbook-table-adapter.c b/addressbook/gui/widgets/e-addressbook-table-adapter.c deleted file mode 100644 index 5f09727ee0..0000000000 --- a/addressbook/gui/widgets/e-addressbook-table-adapter.c +++ /dev/null @@ -1,409 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include <config.h> -#include "e-addressbook-model.h" -#include "e-addressbook-table-adapter.h" -#include "e-card-merging.h" -#include "e-addressbook-util.h" -#include <libxml/tree.h> -#include <libxml/parser.h> -#include <libxml/xmlmemory.h> -#include <gnome.h> - -struct _EAddressbookTableAdapterPrivate { - EAddressbookModel *model; - - ECardSimple **simples; - int count; - - int create_card_id, remove_card_id, modify_card_id, model_changed_id; -}; - -#define PARENT_TYPE e_table_model_get_type() -ETableModelClass *parent_class; - -#define COLS (E_CARD_SIMPLE_FIELD_LAST) - -static void -unlink_model(EAddressbookTableAdapter *adapter) -{ - EAddressbookTableAdapterPrivate *priv = adapter->priv; - int i; - - g_signal_handler_disconnect (priv->model, - priv->create_card_id); - g_signal_handler_disconnect (priv->model, - priv->remove_card_id); - g_signal_handler_disconnect (priv->model, - priv->modify_card_id); - g_signal_handler_disconnect (priv->model, - priv->model_changed_id); - - priv->create_card_id = 0; - priv->remove_card_id = 0; - priv->modify_card_id = 0; - priv->model_changed_id = 0; - - /* free up the existing mapping if there is one */ - if (priv->simples) { - for (i = 0; i < priv->count; i ++) - g_object_unref (priv->simples[i]); - g_free (priv->simples); - priv->simples = NULL; - } - - g_object_unref (priv->model); - - priv->model = NULL; -} - -static void -build_simple_mapping(EAddressbookTableAdapter *adapter) -{ - EAddressbookTableAdapterPrivate *priv = adapter->priv; - int i; - - /* free up the existing mapping if there is one */ - if (priv->simples) { - for (i = 0; i < priv->count; i ++) - g_object_unref (priv->simples[i]); - g_free (priv->simples); - } - - /* build up our mapping to ECardSimple*'s */ - priv->count = e_addressbook_model_card_count (priv->model); - priv->simples = g_new (ECardSimple*, priv->count); - for (i = 0; i < priv->count; i ++) { - priv->simples[i] = e_card_simple_new (e_addressbook_model_card_at (priv->model, i)); - g_object_ref (priv->simples[i]); - } -} - -static void -addressbook_destroy(GtkObject *object) -{ - EAddressbookTableAdapter *adapter = E_ADDRESSBOOK_TABLE_ADAPTER(object); - - unlink_model(adapter); - - g_free (adapter->priv); -} - -/* This function returns the number of columns in our ETableModel. */ -static int -addressbook_col_count (ETableModel *etc) -{ - return COLS; -} - -/* This function returns the number of rows in our ETableModel. */ -static int -addressbook_row_count (ETableModel *etc) -{ - EAddressbookTableAdapter *adapter = E_ADDRESSBOOK_TABLE_ADAPTER(etc); - EAddressbookTableAdapterPrivate *priv = adapter->priv; - - return e_addressbook_model_card_count (priv->model); -} - -/* This function returns the value at a particular point in our ETableModel. */ -static void * -addressbook_value_at (ETableModel *etc, int col, int row) -{ - EAddressbookTableAdapter *adapter = E_ADDRESSBOOK_TABLE_ADAPTER(etc); - EAddressbookTableAdapterPrivate *priv = adapter->priv; - const char *value; - - if ( col >= COLS || row >= e_addressbook_model_card_count (priv->model) ) - return NULL; - - value = e_card_simple_get_const(priv->simples[row], col); - - if (value && !strncmp (value, "<?xml", 5)) { - EDestination *dest = e_destination_import (value); - if (dest) { - g_free ((gchar *) value); - value = g_strdup (e_destination_get_address (dest)); - g_object_unref (dest); - } - } - - - return (void *)(value ? value : ""); -} - -/* This function sets the value at a particular point in our ETableModel. */ -static void -card_modified_cb (EBook* book, EBookStatus status, - gpointer user_data) -{ - /* g_print ("%s: %s(): a card was modified\n", __FILE__, __FUNCTION__); */ - if (status != E_BOOK_STATUS_SUCCESS) - e_addressbook_error_dialog (_("Error modifying card"), status); -} -static void -addressbook_set_value_at (ETableModel *etc, int col, int row, const void *val) -{ - EAddressbookTableAdapter *adapter = E_ADDRESSBOOK_TABLE_ADAPTER(etc); - EAddressbookTableAdapterPrivate *priv = adapter->priv; - if (e_addressbook_model_editable (priv->model)) { - ECard *card; - - if ( col >= COLS|| row >= e_addressbook_model_card_count (priv->model) ) - return; - - e_table_model_pre_change(etc); - - e_card_simple_set(priv->simples[row], - col, - val); - g_object_get(priv->simples[row], - "card", &card, - NULL); - - e_card_merging_book_commit_card(e_addressbook_model_get_ebook(priv->model), - card, card_modified_cb, NULL); - - /* XXX do we need this? shouldn't the commit_card generate a changed signal? */ - e_table_model_cell_changed(etc, col, row); - } -} - -/* This function returns whether a particular cell is editable. */ -static gboolean -addressbook_is_cell_editable (ETableModel *etc, int col, int row) -{ - EAddressbookTableAdapter *adapter = E_ADDRESSBOOK_TABLE_ADAPTER(etc); - EAddressbookTableAdapterPrivate *priv = adapter->priv; - ECard *card; - - if (row >= 0 && row < e_addressbook_model_card_count (priv->model)) - card = e_addressbook_model_card_at (priv->model, row); - else - card = NULL; - - if (!e_addressbook_model_editable(priv->model)) - return FALSE; - else if (card && e_card_evolution_list (card)) - /* we only allow editing of the name and file as for - lists */ - return col == E_CARD_SIMPLE_FIELD_FULL_NAME || col == E_CARD_SIMPLE_FIELD_FILE_AS; - else - return col < E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING; -} - -static void -addressbook_append_row (ETableModel *etm, ETableModel *source, gint row) -{ - EAddressbookTableAdapter *adapter = E_ADDRESSBOOK_TABLE_ADAPTER(etm); - EAddressbookTableAdapterPrivate *priv = adapter->priv; - ECard *card; - ECardSimple *simple; - int col; - - card = e_card_new(""); - simple = e_card_simple_new(card); - - for (col = 0; col < E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING; col++) { - const void *val = e_table_model_value_at(source, col, row); - e_card_simple_set(simple, col, val); - } - e_card_simple_sync_card(simple); - e_card_merging_book_add_card (e_addressbook_model_get_ebook (priv->model), card, NULL, NULL); - g_object_unref (simple); - g_object_unref (card); -} - -/* This function duplicates the value passed to it. */ -static void * -addressbook_duplicate_value (ETableModel *etc, int col, const void *value) -{ - return g_strdup(value); -} - -/* This function frees the value passed to it. */ -static void -addressbook_free_value (ETableModel *etc, int col, void *value) -{ - g_free(value); -} - -static void * -addressbook_initialize_value (ETableModel *etc, int col) -{ - return g_strdup(""); -} - -static gboolean -addressbook_value_is_empty (ETableModel *etc, int col, const void *value) -{ - return !(value && *(char *)value); -} - -static char * -addressbook_value_to_string (ETableModel *etc, int col, const void *value) -{ - return g_strdup(value); -} - -static void -e_addressbook_table_adapter_class_init (GtkObjectClass *object_class) -{ - ETableModelClass *model_class = (ETableModelClass *) object_class; - - parent_class = g_type_class_peek_parent (object_class); - - object_class->destroy = addressbook_destroy; - - model_class->column_count = addressbook_col_count; - model_class->row_count = addressbook_row_count; - model_class->value_at = addressbook_value_at; - model_class->set_value_at = addressbook_set_value_at; - model_class->is_cell_editable = addressbook_is_cell_editable; - model_class->append_row = addressbook_append_row; - model_class->duplicate_value = addressbook_duplicate_value; - model_class->free_value = addressbook_free_value; - model_class->initialize_value = addressbook_initialize_value; - model_class->value_is_empty = addressbook_value_is_empty; - model_class->value_to_string = addressbook_value_to_string; -} - -static void -e_addressbook_table_adapter_init (GtkObject *object) -{ - EAddressbookTableAdapter *adapter = E_ADDRESSBOOK_TABLE_ADAPTER(object); - EAddressbookTableAdapterPrivate *priv; - - priv = adapter->priv = g_new0 (EAddressbookTableAdapterPrivate, 1); - - priv->create_card_id = 0; - priv->remove_card_id = 0; - priv->modify_card_id = 0; - priv->model_changed_id = 0; - priv->simples = NULL; - priv->count = 0; -} - - -static void -create_card (EAddressbookModel *model, - gint index, gint count, - EAddressbookTableAdapter *adapter) -{ - EAddressbookTableAdapterPrivate *priv = adapter->priv; - int i; - - priv->count += count; - priv->simples = g_renew(ECardSimple *, priv->simples, priv->count); - memmove (priv->simples + index + count, priv->simples + index, (priv->count - index - count) * sizeof (ECardSimple *)); - - e_table_model_pre_change (E_TABLE_MODEL (adapter)); - for (i = 0; i < count; i ++) { - priv->simples[index + i] = e_card_simple_new (e_addressbook_model_card_at (priv->model, index + i)); - } - e_table_model_rows_inserted (E_TABLE_MODEL (adapter), index, count); -} - -static void -remove_card (EAddressbookModel *model, - gint index, - EAddressbookTableAdapter *adapter) -{ - EAddressbookTableAdapterPrivate *priv = adapter->priv; - - e_table_model_pre_change (E_TABLE_MODEL (adapter)); - - g_object_unref (priv->simples[index]); - memmove (priv->simples + index, priv->simples + index + 1, (priv->count - index - 1) * sizeof (ECardSimple *)); - priv->count --; - e_table_model_rows_deleted (E_TABLE_MODEL (adapter), index, 1); -} - -static void -modify_card (EAddressbookModel *model, - gint index, - EAddressbookTableAdapter *adapter) -{ - EAddressbookTableAdapterPrivate *priv = adapter->priv; - - e_table_model_pre_change (E_TABLE_MODEL (adapter)); - - g_object_unref (priv->simples[index]); - priv->simples[index] = e_card_simple_new (e_addressbook_model_card_at (priv->model, index)); - g_object_ref (priv->simples[index]); - e_table_model_row_changed (E_TABLE_MODEL (adapter), index); -} - -static void -model_changed (EAddressbookModel *model, - EAddressbookTableAdapter *adapter) -{ - e_table_model_pre_change (E_TABLE_MODEL (adapter)); - build_simple_mapping (adapter); - e_table_model_changed (E_TABLE_MODEL (adapter)); -} - -GType -e_addressbook_table_adapter_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EAddressbookTableAdapterClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_addressbook_table_adapter_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EAddressbookTableAdapter), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_addressbook_table_adapter_init, - }; - - type = g_type_register_static (PARENT_TYPE, "EAddressbookTableAdapter", &info, 0); - } - - return type; -} - -void -e_addressbook_table_adapter_construct (EAddressbookTableAdapter *adapter, - EAddressbookModel *model) -{ - EAddressbookTableAdapterPrivate *priv = adapter->priv; - - priv->model = model; - g_object_ref (priv->model); - - priv->create_card_id = g_signal_connect(priv->model, - "card_added", - G_CALLBACK(create_card), - adapter); - priv->remove_card_id = g_signal_connect(priv->model, - "card_removed", - G_CALLBACK(remove_card), - adapter); - priv->modify_card_id = g_signal_connect(priv->model, - "card_changed", - G_CALLBACK(modify_card), - adapter); - priv->model_changed_id = g_signal_connect(priv->model, - "model_changed", - G_CALLBACK(model_changed), - adapter); - - build_simple_mapping (adapter); -} - -ETableModel * -e_addressbook_table_adapter_new (EAddressbookModel *model) -{ - EAddressbookTableAdapter *et; - - et = g_object_new(E_TYPE_ADDRESSBOOK_TABLE_ADAPTER, NULL); - - e_addressbook_table_adapter_construct (et, model); - - return E_TABLE_MODEL(et); -} diff --git a/addressbook/gui/widgets/e-addressbook-table-adapter.h b/addressbook/gui/widgets/e-addressbook-table-adapter.h deleted file mode 100644 index df66e1dce9..0000000000 --- a/addressbook/gui/widgets/e-addressbook-table-adapter.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef _E_ADDRESSBOOK_TABLE_ADAPTER_H_ -#define _E_ADDRESSBOOK_TABLE_ADAPTER_H_ - -#include <gal/e-table/e-table-model.h> -#include "addressbook/backend/ebook/e-book.h" -#include "addressbook/backend/ebook/e-book-view.h" -#include "addressbook/backend/ebook/e-card-simple.h" - -#define E_TYPE_ADDRESSBOOK_TABLE_ADAPTER (e_addressbook_table_adapter_get_type ()) -#define E_ADDRESSBOOK_TABLE_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TYPE_ADDRESSBOOK_TABLE_ADAPTER, EAddressbookTableAdapter)) -#define E_ADDRESSBOOK_TABLE_ADAPTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TYPE_ADDRESSBOOK_TABLE_ADAPTER, EAddressbookTableAdapterClass)) -#define E_IS_ADDRESSBOOK_TABLE_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TYPE_ADDRESSBOOK_TABLE_ADAPTER)) -#define E_IS_ADDRESSBOOK_TABLE_ADAPTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TYPE_ADDRESSBOOK_TABLE_ADAPTER)) - -/* Virtual Column list: - 0 Email - 1 Full Name - 2 Street - 3 Phone -*/ - -typedef struct _EAddressbookTableAdapter EAddressbookTableAdapter; -typedef struct _EAddressbookTableAdapterPrivate EAddressbookTableAdapterPrivate; -typedef struct _EAddressbookTableAdapterClass EAddressbookTableAdapterClass; - -struct _EAddressbookTableAdapter { - ETableModel parent; - - EAddressbookTableAdapterPrivate *priv; -}; - - -struct _EAddressbookTableAdapterClass { - ETableModelClass parent_class; -}; - - -GType e_addressbook_table_adapter_get_type (void); -void e_addressbook_table_adapter_construct (EAddressbookTableAdapter *adapter, - EAddressbookModel *model); -ETableModel *e_addressbook_table_adapter_new (EAddressbookModel *model); - -#endif /* _E_ADDRESSBOOK_TABLE_ADAPTER_H_ */ diff --git a/addressbook/gui/widgets/e-addressbook-util.c b/addressbook/gui/widgets/e-addressbook-util.c deleted file mode 100644 index 76453d5616..0000000000 --- a/addressbook/gui/widgets/e-addressbook-util.c +++ /dev/null @@ -1,359 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-table-field-chooser.c - * Copyright (C) 2001 Ximian, Inc. - * Author: Chris Toshok <toshok@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 "e-addressbook-util.h" - -#include <gnome.h> - -#include "e-card-merging.h" -#include <shell/evolution-shell-client.h> -#include <addressbook/backend/ebook/e-book-util.h> - -void -e_addressbook_error_dialog (const gchar *msg, EBookStatus status) -{ - static char *status_to_string[] = { - N_("Success"), - N_("Unknown error"), - N_("Repository offline"), - N_("Permission denied"), - N_("Card not found"), - N_("Card ID already exists"), - N_("Protocol not supported"), - N_("Cancelled"), - N_("Authentication Failed"), - N_("Authentication Required"), - N_("TLS not Available"), - N_("Addressbook does not exist"), - N_("Other error") - }; - char *error_msg; - - error_msg = g_strdup_printf ("%s: %s", msg, _(status_to_string [status])); - - gtk_widget_show (gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, - error_msg)); - - g_free (error_msg); -} - -gint -e_addressbook_prompt_save_dialog (GtkWindow *parent) -{ - GtkWidget *dialog; - gint response; - - dialog = gtk_message_dialog_new (parent, - (GtkDialogFlags)0, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_NONE, - _("Do you want to save changes?")); - gtk_dialog_add_buttons (GTK_DIALOG (dialog), - GTK_STOCK_YES, GTK_RESPONSE_YES, - GTK_STOCK_NO, GTK_RESPONSE_NO, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - NULL); - - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES); - - response = gtk_dialog_run (GTK_DIALOG (dialog)); - - gtk_widget_destroy (dialog); - - return response; -} - -static void -added_cb (EBook* book, EBookStatus status, const char *id, - gboolean is_list) -{ - if (status != E_BOOK_STATUS_SUCCESS) { - e_addressbook_error_dialog (is_list ? _("Error adding list") : _("Error adding card"), status); - } -} - -static void -modified_cb (EBook* book, EBookStatus status, - gboolean is_list) -{ - if (status != E_BOOK_STATUS_SUCCESS) { - e_addressbook_error_dialog (is_list ? _("Error modifying list") : _("Error modifying card"), - status); - } -} - -static void -deleted_cb (EBook* book, EBookStatus status, - gboolean is_list) -{ - if (status != E_BOOK_STATUS_SUCCESS) { - e_addressbook_error_dialog (is_list ? _("Error removing list") : _("Error removing card"), - status); - } -} - -static void -editor_closed_cb (GtkObject *editor, gpointer data) -{ - g_object_unref (editor); -} - -EContactEditor * -e_addressbook_show_contact_editor (EBook *book, ECard *card, - gboolean is_new_card, - gboolean editable) -{ - EContactEditor *ce; - - ce = e_contact_editor_new (book, card, is_new_card, editable); - - g_signal_connect (ce, "card_added", - G_CALLBACK (added_cb), GINT_TO_POINTER (FALSE)); - g_signal_connect (ce, "card_modified", - G_CALLBACK (modified_cb), GINT_TO_POINTER (FALSE)); - g_signal_connect (ce, "card_deleted", - G_CALLBACK (deleted_cb), GINT_TO_POINTER (FALSE)); - g_signal_connect (ce, "editor_closed", - G_CALLBACK (editor_closed_cb), NULL); - - return ce; -} - -EContactListEditor * -e_addressbook_show_contact_list_editor (EBook *book, ECard *card, - gboolean is_new_card, - gboolean editable) -{ - EContactListEditor *ce; - - ce = e_contact_list_editor_new (book, card, is_new_card, editable); - - g_signal_connect (ce, "list_added", - G_CALLBACK (added_cb), GINT_TO_POINTER (TRUE)); - g_signal_connect (ce, "list_modified", - G_CALLBACK (modified_cb), GINT_TO_POINTER (TRUE)); - g_signal_connect (ce, "list_deleted", - G_CALLBACK (deleted_cb), GINT_TO_POINTER (TRUE)); - g_signal_connect (ce, "editor_closed", - G_CALLBACK (editor_closed_cb), GINT_TO_POINTER (TRUE)); - - e_contact_list_editor_show (ce); - - return ce; -} - -static void -view_cards (EBook *book, GList *list, gboolean editable) -{ - for (; list; list = list->next) { - ECard *card = list->data; - if (e_card_evolution_list (card)) - e_addressbook_show_contact_list_editor (book, card, FALSE, editable); - else - e_addressbook_show_contact_editor (book, card, FALSE, editable); - } -} - -void -e_addressbook_show_multiple_cards (EBook *book, - GList *list, - gboolean editable) -{ - if (list) { - int length = g_list_length (list); - if (length > 5) { - GtkWidget *dialog; - gint response; - - dialog = gtk_message_dialog_new (NULL, - 0, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - _("Opening %d cards will open %d new windows as well.\n" - "Do you really want to display all of these cards?"), - length, - length); - - response = gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - if (response == GTK_RESPONSE_YES) - view_cards (book, list, editable); - } else { - view_cards (book, list, editable); - } - } -} - - - -typedef struct CardCopyProcess_ CardCopyProcess; - -typedef void (*CardCopyDone) (CardCopyProcess *process); - -struct CardCopyProcess_ { - int count; - GList *cards; - EBook *source; - EBook *destination; - CardCopyDone done_cb; -}; - -static void -card_deleted_cb (EBook* book, EBookStatus status, gpointer user_data) -{ - if (status != E_BOOK_STATUS_SUCCESS) { - e_addressbook_error_dialog (_("Error removing card"), status); - } -} - -static void -do_delete (gpointer data, gpointer user_data) -{ - EBook *book = user_data; - ECard *card = data; - - e_book_remove_card(book, card, card_deleted_cb, NULL); -} - -static void -delete_cards (CardCopyProcess *process) -{ - g_list_foreach (process->cards, - do_delete, - process->source); -} - -static void -process_unref (CardCopyProcess *process) -{ - process->count --; - if (process->count == 0) { - if (process->done_cb) { - process->done_cb (process); - } - e_free_object_list(process->cards); - g_object_unref (process->source); - g_object_unref (process->destination); - g_free (process); - } -} - -static void -card_added_cb (EBook* book, EBookStatus status, const char *id, gpointer user_data) -{ - CardCopyProcess *process = user_data; - - if (status != E_BOOK_STATUS_SUCCESS) { - e_addressbook_error_dialog (_("Error adding card"), status); - } else { - process_unref (process); - } -} - -static void -do_copy (gpointer data, gpointer user_data) -{ - EBook *book; - ECard *card; - CardCopyProcess *process; - - process = user_data; - card = data; - - book = process->destination; - - process->count ++; - e_book_add_card(book, card, card_added_cb, process); -} - -static void -got_book_cb (EBook *book, gpointer closure) -{ - CardCopyProcess *process; - process = closure; - if (book) { - process->destination = book; - g_object_ref (book); - g_list_foreach (process->cards, - do_copy, - process); - } - process_unref (process); -} - -extern EvolutionShellClient *global_shell_client; - -void -e_addressbook_transfer_cards (EBook *source, GList *cards /* adopted */, gboolean delete_from_source, GtkWindow *parent_window) -{ - const char *allowed_types[] = { "contacts/*", NULL }; - GNOME_Evolution_Folder *folder; - static char *last_uri = NULL; - CardCopyProcess *process; - char *desc; - - if (cards == NULL) - return; - - if (last_uri == NULL) - last_uri = g_strdup (""); - - if (cards->next == NULL) { - if (delete_from_source) - desc = _("Move card to"); - else - desc = _("Copy card to"); - } else { - if (delete_from_source) - desc = _("Move cards to"); - else - desc = _("Copy cards to"); - } - - evolution_shell_client_user_select_folder (global_shell_client, - parent_window, - desc, last_uri, allowed_types, - &folder); - if (!folder) - return; - - if (strcmp (last_uri, folder->evolutionUri) != 0) { - g_free (last_uri); - last_uri = g_strdup (folder->evolutionUri); - } - - process = g_new (CardCopyProcess, 1); - process->count = 1; - process->source = source; - g_object_ref (source); - process->cards = cards; - process->destination = NULL; - - if (delete_from_source) - process->done_cb = delete_cards; - else - process->done_cb = NULL; - - e_book_use_address_book_by_uri (folder->physicalUri, got_book_cb, process); - - CORBA_free (folder); -} diff --git a/addressbook/gui/widgets/e-addressbook-util.h b/addressbook/gui/widgets/e-addressbook-util.h deleted file mode 100644 index f0681cea4d..0000000000 --- a/addressbook/gui/widgets/e-addressbook-util.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-addressbook-util.h - * Copyright (C) 2001 Ximian, Inc. - * Author: Chris Toshok <toshok@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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_ADDRESSBOOK_UTIL_H__ -#define __E_ADDRESSBOOK_UTIL_H__ - -#include "addressbook/backend/ebook/e-book.h" -#include "addressbook/gui/contact-editor/e-contact-editor.h" -#include "addressbook/gui/contact-list-editor/e-contact-list-editor.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -void e_addressbook_error_dialog (const gchar *msg, - EBookStatus status); -gint e_addressbook_prompt_save_dialog (GtkWindow *parent); -EContactEditor *e_addressbook_show_contact_editor (EBook *book, - ECard *card, - gboolean is_new_card, - gboolean editable); -EContactListEditor *e_addressbook_show_contact_list_editor (EBook *book, - ECard *card, - gboolean is_new_card, - gboolean editable); -void e_addressbook_show_multiple_cards (EBook *book, - GList *list, - gboolean editable); -void e_addressbook_transfer_cards (EBook *source, - GList *cards, /* adopted */ - gboolean delete_from_source, - GtkWindow *parent_window); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_ADDRESSBOOK_UTIL_H__ */ diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c deleted file mode 100644 index d85df8a35d..0000000000 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ /dev/null @@ -1,1950 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-table-field-chooser.c - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 <gtk/gtk.h> - -#include <libgnome/gnome-i18n.h> -#include <libgnome/gnome-util.h> -#include <gal/e-table/e-table-scrolled.h> -#include <gal/e-table/e-table-model.h> -#include <gal/widgets/e-scroll-frame.h> -#include <gal/widgets/e-popup-menu.h> -#include <gal/widgets/e-gui-utils.h> -#include <gal/widgets/e-unicode.h> -#include <gal/menus/gal-view-factory-etable.h> -#include <gal/menus/gal-view-etable.h> -#include <gal/util/e-xml-utils.h> -#include <libgnomeui/gnome-dialog-util.h> - -#include <libgnomeprint/gnome-print.h> -#include <libgnomeprint/gnome-print-master.h> -#include <libgnomeprintui/gnome-print-dialog.h> -#include <libgnomeprintui/gnome-print-master-preview.h> - -#include "addressbook/printing/e-contact-print.h" -#include "addressbook/printing/e-contact-print-envelope.h" - -#include "gal-view-factory-minicard.h" -#include "gal-view-minicard.h" - -#include "e-addressbook-marshal.h" -#include "e-addressbook-view.h" -#include "e-addressbook-model.h" -#include "e-addressbook-util.h" -#include "e-addressbook-table-adapter.h" -#include "e-addressbook-reflow-adapter.h" -#include "e-minicard-view-widget.h" -#include "e-contact-save-as.h" -#include "e-card-merging.h" - -#include "e-contact-editor.h" -#include <gdk/gdkkeysyms.h> -#include <ctype.h> - -#include <libxml/tree.h> -#include <libxml/parser.h> - -#define SHOW_ALL_SEARCH "(contains \"x-evolution-any-field\" \"\")" - -#define d(x) - -static void e_addressbook_view_init (EAddressbookView *card); -static void e_addressbook_view_class_init (EAddressbookViewClass *klass); - -static void e_addressbook_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void e_addressbook_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - -static void e_addressbook_view_dispose (GObject *object); -static void change_view_type (EAddressbookView *view, EAddressbookViewType view_type); - -static void status_message (GtkObject *object, const gchar *status, EAddressbookView *eav); -static void search_result (GtkObject *object, EBookViewStatus status, EAddressbookView *eav); -static void folder_bar_message (GtkObject *object, const gchar *status, EAddressbookView *eav); -static void stop_state_changed (GtkObject *object, EAddressbookView *eav); -static void writable_status (GtkObject *object, gboolean writable, EAddressbookView *eav); -static void backend_died (GtkObject *object, EAddressbookView *eav); -static void command_state_change (EAddressbookView *eav); -static void alphabet_state_change (EAddressbookView *eav, gunichar letter); - -static void selection_clear_event (GtkWidget *invisible, GdkEventSelection *event, - EAddressbookView *view); -static void selection_received (GtkWidget *invisible, GtkSelectionData *selection_data, - guint time, EAddressbookView *view); -static void selection_get (GtkWidget *invisible, GtkSelectionData *selection_data, - guint info, guint time_stamp, EAddressbookView *view); -static void invisible_destroyed (gpointer data, GObject *where_object_was); - -static GtkTableClass *parent_class = NULL; - -/* The arguments we take */ -enum { - PROP_0, - PROP_BOOK, - PROP_QUERY, - PROP_TYPE, -}; - -enum { - STATUS_MESSAGE, - SEARCH_RESULT, - FOLDER_BAR_MESSAGE, - COMMAND_STATE_CHANGE, - ALPHABET_STATE_CHANGE, - LAST_SIGNAL -}; - -enum DndTargetType { - DND_TARGET_TYPE_VCARD, -}; -#define VCARD_TYPE "text/x-vcard" -static GtkTargetEntry drag_types[] = { - { VCARD_TYPE, 0, DND_TARGET_TYPE_VCARD }, -}; -static const int num_drag_types = sizeof (drag_types) / sizeof (drag_types[0]); - -static guint e_addressbook_view_signals [LAST_SIGNAL] = {0, }; - -static GdkAtom clipboard_atom = GDK_NONE; - -static GalViewCollection *collection = NULL; - -GType -e_addressbook_view_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EAddressbookViewClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_addressbook_view_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EAddressbookView), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_addressbook_view_init, - }; - - type = g_type_register_static (GTK_TYPE_TABLE, "EAddressbookView", &info, 0); - } - - return type; -} - -static void -e_addressbook_view_class_init (EAddressbookViewClass *klass) -{ - GObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = G_OBJECT_CLASS(klass); - widget_class = GTK_WIDGET_CLASS(klass); - - parent_class = gtk_type_class (gtk_table_get_type ()); - - object_class->set_property = e_addressbook_view_set_property; - object_class->get_property = e_addressbook_view_get_property; - object_class->dispose = e_addressbook_view_dispose; - - g_object_class_install_property (object_class, PROP_BOOK, - g_param_spec_object ("book", - _("Book"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_BOOK, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_QUERY, - g_param_spec_string ("query", - _("Query"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_TYPE, - g_param_spec_int ("type", - _("Type"), - /*_( */"XXX blurb" /*)*/, - E_ADDRESSBOOK_VIEW_NONE, E_ADDRESSBOOK_VIEW_MINICARD, E_ADDRESSBOOK_VIEW_NONE, - G_PARAM_READWRITE)); - - e_addressbook_view_signals [STATUS_MESSAGE] = - g_signal_new ("status_message", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookViewClass, status_message), - NULL, NULL, - e_addressbook_marshal_NONE__POINTER, - G_TYPE_NONE, 1, G_TYPE_POINTER); - - e_addressbook_view_signals [SEARCH_RESULT] = - g_signal_new ("search_result", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookViewClass, search_result), - NULL, NULL, - e_addressbook_marshal_NONE__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - - e_addressbook_view_signals [FOLDER_BAR_MESSAGE] = - g_signal_new ("folder_bar_message", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookViewClass, folder_bar_message), - NULL, NULL, - e_addressbook_marshal_NONE__POINTER, - G_TYPE_NONE, 1, G_TYPE_POINTER); - - e_addressbook_view_signals [COMMAND_STATE_CHANGE] = - g_signal_new ("command_state_change", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookViewClass, command_state_change), - NULL, NULL, - e_addressbook_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - e_addressbook_view_signals [ALPHABET_STATE_CHANGE] = - g_signal_new ("alphabet_state_change", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EAddressbookViewClass, alphabet_state_change), - NULL, NULL, - e_addressbook_marshal_NONE__UINT, - G_TYPE_NONE, 1, G_TYPE_UINT); - - - if (!clipboard_atom) - clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); -} - -static void -e_addressbook_view_init (EAddressbookView *eav) -{ - eav->view_type = E_ADDRESSBOOK_VIEW_NONE; - - eav->model = e_addressbook_model_new (); - - g_signal_connect (eav->model, - "status_message", - G_CALLBACK (status_message), - eav); - - g_signal_connect (eav->model, - "search_result", - G_CALLBACK (search_result), - eav); - - g_signal_connect (eav->model, - "folder_bar_message", - G_CALLBACK (folder_bar_message), - eav); - - g_signal_connect (eav->model, - "stop_state_changed", - G_CALLBACK (stop_state_changed), - eav); - - g_signal_connect (eav->model, - "writable_status", - G_CALLBACK (writable_status), - eav); - - g_signal_connect (eav->model, - "backend_died", - G_CALLBACK (backend_died), - eav); - - eav->editable = FALSE; - eav->book = NULL; - eav->query = g_strdup (SHOW_ALL_SEARCH); - - eav->object = NULL; - eav->widget = NULL; - - eav->view_instance = NULL; - eav->view_menus = NULL; - eav->uic = NULL; - eav->current_alphabet_widget = NULL; - - eav->invisible = gtk_invisible_new (); - - gtk_selection_add_target (eav->invisible, - clipboard_atom, - GDK_SELECTION_TYPE_STRING, - 0); - - g_signal_connect (eav->invisible, "selection_get", - G_CALLBACK (selection_get), - eav); - g_signal_connect (eav->invisible, "selection_clear_event", - G_CALLBACK (selection_clear_event), - eav); - g_signal_connect (eav->invisible, "selection_received", - G_CALLBACK (selection_received), - eav); - g_object_weak_ref (G_OBJECT (eav->invisible), invisible_destroyed, eav); -} - -static void -e_addressbook_view_dispose (GObject *object) -{ - EAddressbookView *eav = E_ADDRESSBOOK_VIEW(object); - - if (eav->model) { - g_object_unref (eav->model); - eav->model = NULL; - } - - if (eav->book) { - g_object_unref (eav->book); - eav->book = NULL; - } - - if (eav->query) { - g_free(eav->query); - eav->query = NULL; - } - - eav->uic = NULL; - - if (eav->view_instance) { - g_object_unref (eav->view_instance); - eav->view_instance = NULL; - } - - if (eav->view_menus) { - g_object_unref (eav->view_menus); - eav->view_menus = NULL; - } - - if (eav->clipboard_cards) { - g_list_foreach (eav->clipboard_cards, (GFunc)g_object_unref, NULL); - g_list_free (eav->clipboard_cards); - eav->clipboard_cards = NULL; - } - - if (eav->invisible) { - gtk_widget_destroy (eav->invisible); - eav->invisible = NULL; - } - - if (G_OBJECT_CLASS(parent_class)->dispose) - G_OBJECT_CLASS(parent_class)->dispose(object); -} - -GtkWidget* -e_addressbook_view_new (void) -{ - GtkWidget *widget = GTK_WIDGET (g_object_new (E_TYPE_ADDRESSBOOK_VIEW, NULL)); - return widget; -} - -static void -writable_status (GtkObject *object, gboolean writable, EAddressbookView *eav) -{ - eav->editable = writable; - command_state_change (eav); -} - -static void -init_collection (void) -{ - GalViewFactory *factory; - ETableSpecification *spec; - char *galview; - - if (collection == NULL) { - collection = gal_view_collection_new(); - - gal_view_collection_set_title (collection, _("Addressbook")); - - galview = gnome_util_prepend_user_home("/evolution/views/addressbook/"); - gal_view_collection_set_storage_directories - (collection, - EVOLUTION_DATADIR "/evolution/views/addressbook/", - galview); - g_free(galview); - - spec = e_table_specification_new(); - e_table_specification_load_from_file (spec, EVOLUTION_ETSPECDIR "/e-addressbook-view.etspec"); - - factory = gal_view_factory_etable_new (spec); - g_object_unref (spec); - gal_view_collection_add_factory (collection, factory); - g_object_unref (factory); - - factory = gal_view_factory_minicard_new (); - gal_view_collection_add_factory (collection, factory); - g_object_unref (factory); - - gal_view_collection_load(collection); - } -} - -static void -display_view(GalViewInstance *instance, - GalView *view, - gpointer data) -{ - EAddressbookView *address_view = data; - if (GAL_IS_VIEW_ETABLE(view)) { - change_view_type (address_view, E_ADDRESSBOOK_VIEW_TABLE); - gal_view_etable_attach_table (GAL_VIEW_ETABLE(view), e_table_scrolled_get_table(E_TABLE_SCROLLED(address_view->widget))); - } else if (GAL_IS_VIEW_MINICARD(view)) { - change_view_type (address_view, E_ADDRESSBOOK_VIEW_MINICARD); - gal_view_minicard_attach (GAL_VIEW_MINICARD(view), E_MINICARD_VIEW_WIDGET (address_view->object)); - } - address_view->current_view = view; -} - -static void -setup_menus (EAddressbookView *view) -{ - if (view->book && view->view_instance == NULL) { - init_collection (); - view->view_instance = gal_view_instance_new (collection, e_book_get_uri (view->book)); - } - - if (view->view_instance && view->uic) { - view->view_menus = gal_view_menus_new(view->view_instance); - gal_view_menus_apply(view->view_menus, view->uic, NULL); - - display_view (view->view_instance, gal_view_instance_get_current_view (view->view_instance), view); - - g_signal_connect(view->view_instance, "display_view", - G_CALLBACK (display_view), view); - } -} - -static void -e_addressbook_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -{ - EAddressbookView *eav = E_ADDRESSBOOK_VIEW(object); - - switch (prop_id){ - case PROP_BOOK: - if (eav->book) { - g_object_unref (eav->book); - } - if (g_value_get_object (value)) { - eav->book = E_BOOK(g_value_get_object (value)); - g_object_ref (eav->book); - } - else - eav->book = NULL; - - if (eav->view_instance) { - g_object_unref (eav->view_instance); - eav->view_instance = NULL; - } - - g_object_set(eav->model, - "book", eav->book, - NULL); - - setup_menus (eav); - - break; - case PROP_QUERY: -#if 0 /* This code will mess up ldap a bit. We need to think about the ramifications of this more. */ - if ((g_value_get_string (value) == NULL && !strcmp (eav->query, SHOW_ALL_SEARCH)) || - (g_value_get_string (value) != NULL && !strcmp (eav->query, g_value_get_string (value)))) - break; -#endif - g_free(eav->query); - eav->query = g_strdup(g_value_get_string (value)); - if (!eav->query) - eav->query = g_strdup (SHOW_ALL_SEARCH); - g_object_set(eav->model, - "query", eav->query, - NULL); - if (eav->current_alphabet_widget != NULL) { - GtkWidget *current = eav->current_alphabet_widget; - - eav->current_alphabet_widget = NULL; - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (current), FALSE); - } - break; - case PROP_TYPE: - change_view_type(eav, g_value_get_int (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_addressbook_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - EAddressbookView *eav = E_ADDRESSBOOK_VIEW(object); - - switch (prop_id) { - case PROP_BOOK: - if (eav->book) - g_value_set_object (value, eav->book); - else - g_value_set_object (value, NULL); - break; - case PROP_QUERY: - g_value_set_string (value, eav->query); - break; - case PROP_TYPE: - g_value_set_int (value, eav->view_type); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static ESelectionModel* -get_selection_model (EAddressbookView *view) -{ - if (view->view_type == E_ADDRESSBOOK_VIEW_MINICARD) - return e_minicard_view_widget_get_selection_model (E_MINICARD_VIEW_WIDGET(view->object)); - else - return e_table_get_selection_model (e_table_scrolled_get_table (E_TABLE_SCROLLED(view->widget))); -} - -/* Popup menu stuff */ -typedef struct { - EAddressbookView *view; - EPopupMenu *submenu; - gpointer closure; -} CardAndBook; - -static ESelectionModel* -card_and_book_get_selection_model (CardAndBook *card_and_book) -{ - return get_selection_model (card_and_book->view); -} - -static void -card_and_book_free (CardAndBook *card_and_book) -{ - EAddressbookView *view = card_and_book->view; - ESelectionModel *selection; - - if (card_and_book->submenu) - gal_view_instance_free_popup_menu (view->view_instance, - card_and_book->submenu); - - selection = card_and_book_get_selection_model (card_and_book); - if (selection) - e_selection_model_right_click_up(selection); - - g_object_unref (view); -} - -static void -get_card_list_1(gint model_row, - gpointer closure) -{ - CardAndBook *card_and_book; - GList **list; - EAddressbookView *view; - ECard *card; - - card_and_book = closure; - list = card_and_book->closure; - view = card_and_book->view; - - card = e_addressbook_model_get_card(view->model, model_row); - *list = g_list_prepend(*list, card); -} - -static GList * -get_card_list (CardAndBook *card_and_book) -{ - GList *list = NULL; - ESelectionModel *selection; - - selection = card_and_book_get_selection_model (card_and_book); - - if (selection) { - card_and_book->closure = &list; - e_selection_model_foreach (selection, get_card_list_1, card_and_book); - } - - return list; -} - -static void -has_email_address_1(gint model_row, - gpointer closure) -{ - CardAndBook *card_and_book; - gboolean *has_email; - EAddressbookView *view; - const ECard *card; - EList *email; - - card_and_book = closure; - has_email = card_and_book->closure; - view = card_and_book->view; - - if (*has_email) - return; - - card = e_addressbook_model_peek_card(view->model, model_row); - - g_object_get (G_OBJECT (card), - "email", &email, - NULL); - - if (e_list_length (email) > 0) - *has_email = TRUE; -} - -static gboolean -get_has_email_address (CardAndBook *card_and_book) -{ - ESelectionModel *selection; - gboolean has_email = FALSE; - - selection = card_and_book_get_selection_model (card_and_book); - - if (selection) { - card_and_book->closure = &has_email; - e_selection_model_foreach (selection, has_email_address_1, card_and_book); - } - - return has_email; -} - -static void -save_as (GtkWidget *widget, CardAndBook *card_and_book) -{ - GList *cards = get_card_list (card_and_book); - if (cards) { - e_contact_list_save_as(_("Save as VCard"), cards, NULL); - e_free_object_list(cards); - } -} - -static void -send_as (GtkWidget *widget, CardAndBook *card_and_book) -{ - GList *cards = get_card_list (card_and_book); - if (cards) { - e_card_list_send(cards, E_CARD_DISPOSITION_AS_ATTACHMENT); - e_free_object_list(cards); - } -} - -static void -send_to (GtkWidget *widget, CardAndBook *card_and_book) - -{ - GList *cards = get_card_list (card_and_book); - - if (cards) { - e_card_list_send(cards, E_CARD_DISPOSITION_AS_TO); - e_free_object_list(cards); - } -} - -static void -print (GtkWidget *widget, CardAndBook *card_and_book) -{ - GList *cards = get_card_list (card_and_book); - if (cards) { - if (cards->next) - gtk_widget_show(e_contact_print_card_list_dialog_new(cards)); - else - gtk_widget_show(e_contact_print_card_dialog_new(cards->data)); - e_free_object_list(cards); - } -} - -#if 0 /* Envelope printing is disabled for Evolution 1.0. */ -static void -print_envelope (GtkWidget *widget, CardAndBook *card_and_book) -{ - GList *cards = get_card_list (card_and_book); - if (cards) { - gtk_widget_show(e_contact_list_print_envelope_dialog_new(card_and_book->card)); - e_free_object_list(cards); - } -} -#endif - -static void -copy (GtkWidget *widget, CardAndBook *card_and_book) -{ - e_addressbook_view_copy (card_and_book->view); -} - -static void -paste (GtkWidget *widget, CardAndBook *card_and_book) -{ - e_addressbook_view_paste (card_and_book->view); -} - -static void -cut (GtkWidget *widget, CardAndBook *card_and_book) -{ - e_addressbook_view_cut (card_and_book->view); -} - -static void -delete (GtkWidget *widget, CardAndBook *card_and_book) -{ - if (e_contact_editor_confirm_delete(GTK_WINDOW(gtk_widget_get_toplevel(card_and_book->view->widget)))) { - EBook *book; - - GList *list = get_card_list(card_and_book); - GList *iterator; - - g_object_get(card_and_book->view->model, - "book", &book, - NULL); - - for (iterator = list; iterator; iterator = iterator->next) { - ECard *card = iterator->data; - /* Remove the card. */ - e_book_remove_card (book, - card, - NULL, - NULL); - } - e_free_object_list(list); - } -} - -static void -copy_to_folder (GtkWidget *widget, CardAndBook *card_and_book) -{ - e_addressbook_view_copy_to_folder (card_and_book->view); -} - -static void -move_to_folder (GtkWidget *widget, CardAndBook *card_and_book) -{ - e_addressbook_view_move_to_folder (card_and_book->view); -} - -static void -free_popup_info (GtkWidget *w, CardAndBook *card_and_book) -{ - card_and_book_free (card_and_book); -} - -static void -new_card (GtkWidget *widget, CardAndBook *card_and_book) -{ - EBook *book; - - g_object_get(card_and_book->view->model, - "book", &book, - NULL); - e_addressbook_show_contact_editor (book, e_card_new(""), TRUE, TRUE); -} - -static void -new_list (GtkWidget *widget, CardAndBook *card_and_book) -{ - EBook *book; - - g_object_get(card_and_book->view->model, - "book", &book, - NULL); - e_addressbook_show_contact_list_editor (book, e_card_new(""), TRUE, TRUE); -} - -#if 0 -static void -sources (GtkWidget *widget, CardAndBook *card_and_book) -{ - BonoboControl *control; - GNOME_Evolution_ShellView shell_view; - CORBA_Environment ev; - - control = g_object_get_data (G_OBJECT (gcal), "control"); - if (control == NULL) - return; - - shell_view = get_shell_view_interface (control); - if (shell_view == CORBA_OBJECT_NIL) - return; - - CORBA_exception_init (&ev); - - GNOME_Evolution_ShellView_showSettings (shell_view, &ev); - - if (BONOBO_EX (&ev)) - g_message ("control_util_show_settings(): Could not show settings"); - - CORBA_exception_free (&ev); -} -#endif - -#define POPUP_READONLY_MASK 0x1 -#define POPUP_NOSELECTION_MASK 0x2 -#define POPUP_NOEMAIL_MASK 0x4 - -static void -do_popup_menu(EAddressbookView *view, GdkEvent *event) -{ - CardAndBook *card_and_book; - GtkMenu *popup; - EPopupMenu *submenu = NULL; - ESelectionModel *selection_model; - gboolean selection = FALSE; - - EPopupMenu menu[] = { - E_POPUP_ITEM (N_("New Contact..."), G_CALLBACK(new_card), POPUP_READONLY_MASK), - E_POPUP_ITEM (N_("New Contact List..."), G_CALLBACK(new_list), POPUP_READONLY_MASK), - E_POPUP_SEPARATOR, -#if 0 - E_POPUP_ITEM (N_("Go to Folder..."), G_CALLBACK (goto_folder), 0), - E_POPUP_ITEM (N_("Import..."), G_CALLBACK (import), POPUP_READONLY_MASK), - E_POPUP_SEPARATOR, - E_POPUP_ITEM (N_("Search for Contacts..."), G_CALLBACK (search), 0), - E_POPUP_ITEM (N_("Addressbook Sources..."), G_CALLBACK (sources), 0), - E_POPUP_SEPARATOR, - E_POPUP_ITEM (N_("Pilot Settings..."), G_CALLBACK (pilot_settings), 0), -#endif - E_POPUP_SEPARATOR, - E_POPUP_ITEM (N_("Save as VCard"), G_CALLBACK(save_as), POPUP_NOSELECTION_MASK), - E_POPUP_ITEM (N_("Forward Contact"), G_CALLBACK(send_as), POPUP_NOSELECTION_MASK), - E_POPUP_ITEM (N_("Send Message to Contact"), G_CALLBACK(send_to), POPUP_NOSELECTION_MASK | POPUP_NOEMAIL_MASK), - E_POPUP_ITEM (N_("Print"), G_CALLBACK(print), POPUP_NOSELECTION_MASK), -#if 0 /* Envelope printing is disabled for Evolution 1.0. */ - E_POPUP_ITEM (N_("Print Envelope"), G_CALLBACK(print_envelope), POPUP_NOSELECTION_MASK), -#endif - E_POPUP_SEPARATOR, - - E_POPUP_ITEM (N_("Copy to folder..."), G_CALLBACK(copy_to_folder), POPUP_NOSELECTION_MASK), - E_POPUP_ITEM (N_("Move to folder..."), G_CALLBACK(move_to_folder), POPUP_READONLY_MASK | POPUP_NOSELECTION_MASK), - E_POPUP_SEPARATOR, - - E_POPUP_ITEM (N_("Cut"), G_CALLBACK (cut), POPUP_READONLY_MASK | POPUP_NOSELECTION_MASK), - E_POPUP_ITEM (N_("Copy"), G_CALLBACK (copy), POPUP_NOSELECTION_MASK), - E_POPUP_ITEM (N_("Paste"), G_CALLBACK (paste), POPUP_READONLY_MASK), - E_POPUP_ITEM (N_("Delete"), G_CALLBACK(delete), POPUP_READONLY_MASK | POPUP_NOSELECTION_MASK), - E_POPUP_SEPARATOR, - -#if 0 - E_POPUP_SUBMENU (N_("Current View"), submenu = gal_view_instance_get_popup_menu (view->view_instance), 0), -#endif - E_POPUP_TERMINATOR - }; - - card_and_book = g_new(CardAndBook, 1); - card_and_book->view = view; - card_and_book->submenu = submenu; - - g_object_ref (card_and_book->view); - - selection_model = card_and_book_get_selection_model (card_and_book); - if (selection_model) - selection = e_selection_model_selected_count (selection_model) > 0; - - popup = e_popup_menu_create (menu, - 0, - (e_addressbook_model_editable (view->model) ? 0 : POPUP_READONLY_MASK) + - (selection ? 0 : POPUP_NOSELECTION_MASK) + - (get_has_email_address (card_and_book) ? 0 : POPUP_NOEMAIL_MASK), - card_and_book); - - g_signal_connect (popup, "selection-done", - G_CALLBACK (free_popup_info), card_and_book); - e_popup_menu (popup, event); - -} - - -/* Minicard view stuff */ - -/* Translators: put here a list of labels you want to see on buttons in - addressbook. You may use any character to separate labels but it must - also be placed at the begining ot the string */ -const char *button_labels = N_(",123,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"); -/* Translators: put here a list of characters that correspond to buttons - in addressbook. You may use any character to separate labels but it - must also be placed at the begining ot the string. - Use lower case letters if possible. */ -const char *button_letters = N_(",0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"); - -typedef struct { - EAddressbookView *view; - GtkWidget *button; - GtkWidget *vbox; - gchar *letters; -} LetterClosure; - -static char ** -e_utf8_split (const char *utf8_str, gunichar delim) -{ - GSList *str_list = NULL, *sl; - int n = 0; - const char *str, *s; - char **str_array; - - g_return_val_if_fail (utf8_str != NULL, NULL); - - str = utf8_str; - while (*str != '\0') { - int len; - char *new_str; - - for (s = str; *s != '\0' && g_utf8_get_char (s) != delim; s = g_utf8_next_char (s)) - ; - len = s - str; - new_str = g_new (char, len + 1); - if (len > 0) { - memcpy (new_str, str, len); - } - new_str[len] = '\0'; - str_list = g_slist_prepend (str_list, new_str); - n++; - if (*s != '\0') { - str = g_utf8_next_char (s); - } else { - str = s; - } - } - - str_array = g_new (char *, n + 1); - str_array[n--] = NULL; - for (sl = str_list; sl != NULL; sl = sl->next) { - str_array[n--] = sl->data; - } - g_slist_free (str_list); - - return str_array; -} - -static void -jump_to_letters (EAddressbookView *view, gchar* l) -{ - char *query; - char *s; - char buf[6 + 1]; - - if (g_unichar_isdigit (g_utf8_get_char(l))) { - const char *letters = _(button_letters); - char **letter_v; - GString *gstr; - char **p; - - letter_v = e_utf8_split (g_utf8_next_char (letters), - g_utf8_get_char (letters)); - g_assert (letter_v != NULL && letter_v[0] != NULL); - gstr = g_string_new ("(not (or "); - for (p = letter_v + 1; *p != NULL; p++) { - for (s = *p; *s != '\0'; s = g_utf8_next_char (s)) { - buf [g_unichar_to_utf8 (g_utf8_get_char(s), buf)] = '\0'; - g_string_sprintfa (gstr, "(beginswith \"file_as\" \"%s\")", buf); - } - } - g_string_append (gstr, "))"); - query = gstr->str; - g_strfreev (letter_v); - g_string_free (gstr, FALSE); - } else { - GString *gstr; - - gstr = g_string_new ("(or "); - - for (s = l; *s != '\0'; s = g_utf8_next_char (s)) { - buf [g_unichar_to_utf8 (g_utf8_get_char(s), buf)] = '\0'; - g_string_sprintfa (gstr, "(beginswith \"file_as\" \"%s\")", buf); - } - - g_string_append (gstr, ")"); - query = gstr->str; - g_string_free (gstr, FALSE); - } - g_object_set (view, - "query", query, - NULL); - g_free (query); -} - -static void -button_toggled(GtkWidget *button, LetterClosure *closure) -{ - EAddressbookView *view = closure->view; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) { - GtkWidget *current = view->current_alphabet_widget; - - view->current_alphabet_widget = NULL; - if (current && current != button) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (current), FALSE); - jump_to_letters (view, closure->letters); - view->current_alphabet_widget = button; - alphabet_state_change (view, g_utf8_get_char(closure->letters)); - } else { - if (view->current_alphabet_widget != NULL && - view->current_alphabet_widget == button) { - view->current_alphabet_widget = NULL; - g_object_set (view, - "query", NULL, - NULL); - alphabet_state_change (view, 0); - } - } -} - -static void -free_closure(gpointer data, GObject *where_object_was) -{ - GtkWidget *button = GTK_WIDGET (where_object_was); - LetterClosure *closure = data; - if (button != NULL && - button == closure->view->current_alphabet_widget) { - closure->view->current_alphabet_widget = NULL; - } - g_free (closure->letters); - g_free (closure); -} - -static GtkWidget * -create_alphabet (EAddressbookView *view) -{ - GtkWidget *widget, *viewport, *vbox; - const char *labels, *letters; - char **label_v, **letter_v; - char **pl, **pc; - gunichar sep; - - widget = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - - viewport = gtk_viewport_new (NULL, NULL); - gtk_container_add (GTK_CONTAINER (widget), viewport); - gtk_container_set_border_width (GTK_CONTAINER (viewport), 4); - gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport), GTK_SHADOW_NONE); - - vbox = gtk_vbox_new (FALSE, 4); - gtk_container_add (GTK_CONTAINER (viewport), vbox); - gtk_widget_set_usize (vbox, 27, 0); - - labels = _(button_labels); - sep = g_utf8_get_char (labels); - label_v = e_utf8_split (g_utf8_next_char (labels), sep); - letters = _(button_letters); - sep = g_utf8_get_char (letters); - letter_v = e_utf8_split (g_utf8_next_char (letters), sep); - g_assert (label_v != NULL && letter_v != NULL); - for (pl = label_v, pc = letter_v; *pl != NULL && *pc != NULL; pl++, pc++) { - GtkWidget *button; - LetterClosure *closure; - char *label; - - label = e_utf8_to_locale_string (*pl); - button = gtk_toggle_button_new_with_label (label); - g_free (label); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - - closure = g_new (LetterClosure, 1); - closure->view = view; - closure->letters = g_strdup (*pc); - closure->button = button; - closure->vbox = vbox; - g_signal_connect(button, "toggled", - G_CALLBACK (button_toggled), closure); - g_object_weak_ref (G_OBJECT (button), free_closure, closure); - - } - g_strfreev (label_v); - g_strfreev (letter_v); - - gtk_widget_show_all (widget); - - return widget; -} - -static void -minicard_selection_change (EMinicardViewWidget *widget, EAddressbookView *view) -{ - command_state_change (view); -} - -static void -minicard_button_press (GtkWidget *widget, GdkEventButton *event, EAddressbookView *view) -{ - d(g_print ("Button %d pressed with event type %d\n", event->button, event->type)); -} - -static void -minicard_right_click (EMinicardView *minicard_view_item, GdkEvent *event, EAddressbookView *view) -{ - do_popup_menu(view, event); -} - -static void -create_minicard_view (EAddressbookView *view) -{ - GtkWidget *scrollframe; - GtkWidget *alphabet; - GtkWidget *minicard_view; - GtkWidget *minicard_hbox; - EAddressbookReflowAdapter *adapter; - - gtk_widget_push_visual (gdk_rgb_get_visual ()); - gtk_widget_push_colormap (gdk_rgb_get_cmap ()); - - minicard_hbox = gtk_hbox_new(FALSE, 0); - - adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(e_addressbook_reflow_adapter_new (view->model)); - minicard_view = e_minicard_view_widget_new(adapter); - - /* A hack */ - g_object_set_data (G_OBJECT (adapter), "view", view); - - g_signal_connect(minicard_view, "selection_change", - G_CALLBACK(minicard_selection_change), view); - - g_signal_connect(minicard_view, "button_press_event", - G_CALLBACK(minicard_button_press), view); - - g_signal_connect(minicard_view, "right_click", - G_CALLBACK(minicard_right_click), view); - - - view->object = G_OBJECT(minicard_view); - view->widget = minicard_hbox; - - scrollframe = e_scroll_frame_new (NULL, NULL); - e_scroll_frame_set_policy (E_SCROLL_FRAME (scrollframe), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - gtk_container_add (GTK_CONTAINER (scrollframe), minicard_view); - - - gtk_box_pack_start(GTK_BOX(minicard_hbox), scrollframe, TRUE, TRUE, 0); - - alphabet = create_alphabet(view); - if (alphabet) { - g_object_ref (alphabet); - gtk_widget_unparent(alphabet); - gtk_box_pack_start(GTK_BOX(minicard_hbox), alphabet, FALSE, FALSE, 0); - g_object_unref (alphabet); - } - - gtk_table_attach(GTK_TABLE(view), minicard_hbox, - 0, 1, - 0, 1, - GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, - 0, 0); - - gtk_widget_show_all( GTK_WIDGET(minicard_hbox) ); - - gtk_widget_pop_visual (); - gtk_widget_pop_colormap (); - - e_reflow_model_changed (E_REFLOW_MODEL (adapter)); - - g_object_unref (adapter); -} - -static void -table_double_click(ETableScrolled *table, gint row, gint col, GdkEvent *event, EAddressbookView *view) -{ - if (E_IS_ADDRESSBOOK_TABLE_ADAPTER(view->object)) { - EAddressbookModel *model = view->model; - ECard *card = e_addressbook_model_get_card(model, row); - EBook *book; - - g_object_get(model, - "book", &book, - NULL); - - g_assert (E_IS_BOOK (book)); - - if (e_card_evolution_list (card)) - e_addressbook_show_contact_list_editor (book, card, FALSE, view->editable); - else - e_addressbook_show_contact_editor (book, card, FALSE, view->editable); - } -} - -static gint -table_right_click(ETableScrolled *table, gint row, gint col, GdkEvent *event, EAddressbookView *view) -{ - do_popup_menu(view, event); - return TRUE; -} - -static gint -table_white_space_event(ETableScrolled *table, GdkEvent *event, EAddressbookView *view) -{ - if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *)event)->button == 3) { - do_popup_menu(view, event); - return TRUE; - } else { - return FALSE; - } -} - -static void -table_selection_change(ETableScrolled *table, EAddressbookView *view) -{ - command_state_change (view); -} - -static void -table_drag_data_get (ETable *table, - int row, - int col, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - gpointer user_data) -{ - EAddressbookView *view = user_data; - - if (!E_IS_ADDRESSBOOK_TABLE_ADAPTER(view->object)) - return; - - switch (info) { - case DND_TARGET_TYPE_VCARD: { - char *value; - - row = e_table_view_to_model_row (table, row); - value = e_card_get_vcard(view->model->data[row]); - - gtk_selection_data_set (selection_data, - selection_data->target, - 8, - value, strlen (value)); - break; - } - } -} - -static void -emit_status_message (EAddressbookView *eav, const gchar *status) -{ - g_signal_emit (eav, - e_addressbook_view_signals [STATUS_MESSAGE], 0, - status); -} - -static void -emit_search_result (EAddressbookView *eav, EBookViewStatus status) -{ - g_signal_emit (eav, - e_addressbook_view_signals [SEARCH_RESULT], 0, - status); -} - -static void -emit_folder_bar_message (EAddressbookView *eav, const gchar *message) -{ - g_signal_emit (eav, - e_addressbook_view_signals [FOLDER_BAR_MESSAGE], 0, - message); -} - -static void -status_message (GtkObject *object, const gchar *status, EAddressbookView *eav) -{ - emit_status_message (eav, status); -} - -static void -search_result (GtkObject *object, EBookViewStatus status, EAddressbookView *eav) -{ - emit_search_result (eav, status); -} - -static void -folder_bar_message (GtkObject *object, const gchar *status, EAddressbookView *eav) -{ - emit_folder_bar_message (eav, status); -} - -static void -stop_state_changed (GtkObject *object, EAddressbookView *eav) -{ - command_state_change (eav); -} - -static void -command_state_change (EAddressbookView *eav) -{ - /* Reffing during emission is unnecessary. Gtk automatically refs during an emission. */ - g_signal_emit (eav, e_addressbook_view_signals [COMMAND_STATE_CHANGE], 0); -} - -static void -alphabet_state_change (EAddressbookView *eav, gunichar letter) -{ - g_signal_emit (eav, e_addressbook_view_signals [ALPHABET_STATE_CHANGE], 0, letter); -} - -static void -backend_died (GtkObject *object, EAddressbookView *eav) -{ - char *message = g_strdup_printf (_("The addressbook backend for\n%s\nhas crashed. " - "You will have to restart Evolution in order " - "to use it again"), - e_book_get_uri (eav->book)); - gnome_error_dialog_parented (message, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (eav)))); - g_free (message); -} - -static void -create_table_view (EAddressbookView *view) -{ - ETableModel *adapter; - ECardSimple *simple; - GtkWidget *table; - - simple = e_card_simple_new(NULL); - - adapter = e_addressbook_table_adapter_new(view->model); - - /* Here we create the table. We give it the three pieces of - the table we've created, the header, the model, and the - initial layout. It does the rest. */ - table = e_table_scrolled_new_from_spec_file (adapter, NULL, EVOLUTION_ETSPECDIR "/e-addressbook-view.etspec", NULL); - - view->object = G_OBJECT(adapter); - view->widget = table; - - g_signal_connect(e_table_scrolled_get_table(E_TABLE_SCROLLED(table)), "double_click", - G_CALLBACK(table_double_click), view); - g_signal_connect(e_table_scrolled_get_table(E_TABLE_SCROLLED(table)), "right_click", - G_CALLBACK(table_right_click), view); - g_signal_connect(e_table_scrolled_get_table(E_TABLE_SCROLLED(table)), "white_space_event", - G_CALLBACK(table_white_space_event), view); - g_signal_connect(e_table_scrolled_get_table(E_TABLE_SCROLLED(table)), "selection_change", - G_CALLBACK(table_selection_change), view); - - /* drag & drop signals */ - e_table_drag_source_set (E_TABLE(E_TABLE_SCROLLED(table)->table), GDK_BUTTON1_MASK, - drag_types, num_drag_types, GDK_ACTION_MOVE); - - g_signal_connect (E_TABLE_SCROLLED(table)->table, - "table_drag_data_get", - G_CALLBACK (table_drag_data_get), - view); - - gtk_table_attach(GTK_TABLE(view), table, - 0, 1, - 0, 1, - GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, - 0, 0); - - gtk_widget_show( GTK_WIDGET(table) ); - - g_object_unref (simple); -} - - -static void -change_view_type (EAddressbookView *view, EAddressbookViewType view_type) -{ - if (view_type == view->view_type) - return; - - if (view->widget) { - gtk_widget_destroy (view->widget); - view->widget = NULL; - } - view->object = NULL; - - switch (view_type) { - case E_ADDRESSBOOK_VIEW_MINICARD: - create_minicard_view (view); - break; - case E_ADDRESSBOOK_VIEW_TABLE: - create_table_view (view); - break; - default: - g_warning ("view_type must be either TABLE or MINICARD\n"); - return; - } - - view->view_type = view_type; - - command_state_change (view); -} - -typedef struct { - GtkWidget *table; - GObject *printable; -} EContactPrintDialogWeakData; - -static void -e_contact_print_destroy(gpointer data, GObject *where_object_was) -{ - EContactPrintDialogWeakData *weak_data = data; - g_object_unref (weak_data->printable); - g_object_unref (weak_data->table); - g_free (weak_data); -} - -static void -e_contact_print_button(GnomeDialog *dialog, gint button, gpointer data) -{ - GnomePrintMaster *master; - GnomePrintContext *pc; - EPrintable *printable = g_object_get_data(G_OBJECT(dialog), "printable"); - GtkWidget *preview; - switch( button ) { - case GNOME_PRINT_DIALOG_RESPONSE_PRINT: - master = gnome_print_master_new_from_config (gnome_print_dialog_get_config ( GNOME_PRINT_DIALOG(dialog) )); - pc = gnome_print_master_get_context( master ); - e_printable_reset(printable); - while (e_printable_data_left(printable)) { - if (gnome_print_gsave(pc) == -1) - /* FIXME */; - if (gnome_print_translate(pc, 72, 72) == -1) - /* FIXME */; - e_printable_print_page(printable, - pc, - 6.5 * 72, - 5 * 72, - TRUE); - if (gnome_print_grestore(pc) == -1) - /* FIXME */; - if (gnome_print_showpage(pc) == -1) - /* FIXME */; - } - gnome_print_master_close(master); - gnome_print_master_print(master); - g_object_unref (master); - gnome_dialog_close(dialog); - break; - case GNOME_PRINT_DIALOG_RESPONSE_PREVIEW: - master = gnome_print_master_new_from_config (gnome_print_dialog_get_config ( GNOME_PRINT_DIALOG(dialog) )); - pc = gnome_print_master_get_context( master ); - e_printable_reset(printable); - while (e_printable_data_left(printable)) { - if (gnome_print_gsave(pc) == -1) - /* FIXME */; - if (gnome_print_translate(pc, 72, 72) == -1) - /* FIXME */; - e_printable_print_page(printable, - pc, - 6.5 * 72, - 9 * 72, - TRUE); - if (gnome_print_grestore(pc) == -1) - /* FIXME */; - if (gnome_print_showpage(pc) == -1) - /* FIXME */; - } - gnome_print_master_close(master); - preview = GTK_WIDGET(gnome_print_master_preview_new(master, "Print Preview")); - gtk_widget_show_all(preview); - g_object_unref (master); - break; - case GNOME_PRINT_DIALOG_RESPONSE_CANCEL: - gnome_dialog_close(dialog); - break; - } -} - -void -e_addressbook_view_setup_menus (EAddressbookView *view, - BonoboUIComponent *uic) -{ - - g_return_if_fail (view != NULL); - g_return_if_fail (E_IS_ADDRESSBOOK_VIEW (view)); - g_return_if_fail (uic != NULL); - g_return_if_fail (BONOBO_IS_UI_COMPONENT (uic)); - - init_collection (); - - view->uic = uic; - - setup_menus (view); -} - -/** - * e_addressbook_view_discard_menus: - * @view: An addressbook view. - * - * Makes an addressbook view discard its GAL view menus and its views instance - * objects. This should be called when the corresponding Bonobo component is - * deactivated. - **/ -void -e_addressbook_view_discard_menus (EAddressbookView *view) -{ - g_return_if_fail (view != NULL); - g_return_if_fail (E_IS_ADDRESSBOOK_VIEW (view)); - g_return_if_fail (view->view_instance); - - if (view->view_menus) { - gal_view_menus_unmerge (view->view_menus, NULL); - - g_object_unref (view->view_menus); - view->view_menus = NULL; - } - - if (view->view_instance) { - g_object_unref (view->view_instance); - view->view_instance = NULL; - } - - view->uic = NULL; -} - -void -e_addressbook_view_print(EAddressbookView *view) -{ - if (view->view_type == E_ADDRESSBOOK_VIEW_MINICARD) { - char *query; - EBook *book; - GtkWidget *print; - - g_object_get (view->model, - "query", &query, - "book", &book, - NULL); - print = e_contact_print_dialog_new(book, query); - g_free(query); - gtk_widget_show_all(print); - } else if (view->view_type == E_ADDRESSBOOK_VIEW_TABLE) { - GtkWidget *dialog; - EPrintable *printable; - ETable *etable; - EContactPrintDialogWeakData *weak_data; - - dialog = gnome_print_dialog_new("Print cards", GNOME_PRINT_DIALOG_RANGE | GNOME_PRINT_DIALOG_COPIES); - gnome_print_dialog_construct_range_any(GNOME_PRINT_DIALOG(dialog), GNOME_PRINT_RANGE_ALL | GNOME_PRINT_RANGE_SELECTION, - NULL, NULL, NULL); - - g_object_get(view->widget, "table", &etable, NULL); - printable = e_table_get_printable(etable); - - g_object_ref (view->widget); - - g_object_set_data (G_OBJECT (dialog), "table", view->widget); - g_object_set_data (G_OBJECT (dialog), "printable", printable); - - g_signal_connect(dialog, - "clicked", G_CALLBACK(e_contact_print_button), NULL); - - weak_data = g_new (EContactPrintDialogWeakData, 1); - - weak_data->table = view->widget; - weak_data->printable = G_OBJECT (printable); - - g_object_weak_ref (G_OBJECT (dialog), e_contact_print_destroy, weak_data); - - gtk_widget_show(dialog); - } -} - -void -e_addressbook_view_print_preview(EAddressbookView *view) -{ - if (view->view_type == E_ADDRESSBOOK_VIEW_MINICARD) { - char *query; - EBook *book; - - g_object_get (view->model, - "query", &query, - "book", &book, - NULL); - e_contact_print_preview(book, query); - g_free(query); - } else if (view->view_type == E_ADDRESSBOOK_VIEW_TABLE) { - EPrintable *printable; - ETable *etable; - GnomePrintMaster *master; - GnomePrintContext *pc; - GnomePrintConfig *config; - GtkWidget *preview; - - g_object_get(view->widget, "table", &etable, NULL); - printable = e_table_get_printable(etable); - - master = gnome_print_master_new(); - config = gnome_print_master_get_config (master); - gnome_print_config_set_int (config, GNOME_PRINT_KEY_NUM_COPIES, 1); - pc = gnome_print_master_get_context( master ); - e_printable_reset(printable); - while (e_printable_data_left(printable)) { - if (gnome_print_gsave(pc) == -1) - /* FIXME */; - if (gnome_print_translate(pc, 72, 72) == -1) - /* FIXME */; - e_printable_print_page(printable, - pc, - 6.5 * 72, - 9 * 72, - TRUE); - if (gnome_print_grestore(pc) == -1) - /* FIXME */; - if (gnome_print_showpage(pc) == -1) - /* FIXME */; - } - gnome_print_master_close(master); - preview = GTK_WIDGET(gnome_print_master_preview_new(master, "Print Preview")); - gtk_widget_show_all(preview); - g_object_unref (master); - g_object_unref (printable); - } -} - -static void -card_deleted_cb (EBook* book, EBookStatus status, gpointer user_data) -{ - if (status != E_BOOK_STATUS_SUCCESS) { - e_addressbook_error_dialog (_("Error removing card"), status); - } -} - -static void -do_remove (int i, gpointer user_data) -{ - EBook *book; - ECard *card; - EAddressbookView *view = user_data; - - g_object_get (view->model, - "book", &book, - NULL); - - card = e_addressbook_model_get_card (view->model, i); - - e_book_remove_card(book, card, card_deleted_cb, view); - - g_object_unref (card); -} - -void -e_addressbook_view_delete_selection(EAddressbookView *view) -{ - ESelectionModel *model = get_selection_model (view); - - g_return_if_fail (model); - - e_selection_model_foreach (model, - do_remove, - view); -} - -static void -invisible_destroyed (gpointer data, GObject *where_object_was) -{ - EAddressbookView *view = data; - view->invisible = NULL; -} - -static void -selection_get (GtkWidget *invisible, - GtkSelectionData *selection_data, - guint info, - guint time_stamp, - EAddressbookView *view) -{ - char *value; - - value = e_card_list_get_vcard(view->clipboard_cards); - - gtk_selection_data_set (selection_data, GDK_SELECTION_TYPE_STRING, - 8, value, strlen (value)); - -} - -static void -selection_clear_event (GtkWidget *invisible, - GdkEventSelection *event, - EAddressbookView *view) -{ - if (view->clipboard_cards) { - g_list_foreach (view->clipboard_cards, (GFunc)g_object_unref, NULL); - g_list_free (view->clipboard_cards); - view->clipboard_cards = NULL; - } -} - -static void -selection_received (GtkWidget *invisible, - GtkSelectionData *selection_data, - guint time, - EAddressbookView *view) -{ - if (selection_data->length < 0 || selection_data->type != GDK_SELECTION_TYPE_STRING) { - return; - } - else { - /* XXX make sure selection_data->data = \0 terminated */ - GList *card_list = e_card_load_cards_from_string_with_default_charset (selection_data->data, "ISO-8859-1"); - GList *l; - - if (!card_list /* it wasn't a vcard list */) - return; - - for (l = card_list; l; l = l->next) { - ECard *card = l->data; - - e_card_merging_book_add_card (view->book, card, NULL /* XXX */, NULL); - } - - g_list_foreach (card_list, (GFunc)g_object_unref, NULL); - g_list_free (card_list); - } -} - -static void -add_to_list (int model_row, gpointer closure) -{ - GList **list = closure; - *list = g_list_prepend (*list, GINT_TO_POINTER (model_row)); -} - -static GList * -get_selected_cards (EAddressbookView *view) -{ - GList *list; - GList *iterator; - ESelectionModel *selection = get_selection_model (view); - - list = NULL; - e_selection_model_foreach (selection, add_to_list, &list); - - for (iterator = list; iterator; iterator = iterator->next) { - iterator->data = e_addressbook_model_card_at (view->model, GPOINTER_TO_INT (iterator->data)); - if (iterator->data) - g_object_ref (iterator->data); - } - list = g_list_reverse (list); - return list; -} - -void -e_addressbook_view_save_as (EAddressbookView *view) -{ - GList *list = get_selected_cards (view); - if (list) - e_contact_list_save_as (_("Save as VCard"), list, NULL); - e_free_object_list(list); -} - -void -e_addressbook_view_view (EAddressbookView *view) -{ - GList *list = get_selected_cards (view); - e_addressbook_show_multiple_cards (view->book, list, view->editable); - e_free_object_list(list); -} - -void -e_addressbook_view_send (EAddressbookView *view) -{ - GList *list = get_selected_cards (view); - if (list) - e_card_list_send (list, E_CARD_DISPOSITION_AS_ATTACHMENT); - e_free_object_list(list); -} - -void -e_addressbook_view_send_to (EAddressbookView *view) -{ - GList *list = get_selected_cards (view); - if (list) - e_card_list_send (list, E_CARD_DISPOSITION_AS_TO); - e_free_object_list(list); -} - -void -e_addressbook_view_cut (EAddressbookView *view) -{ - e_addressbook_view_copy (view); - e_addressbook_view_delete_selection (view); -} - -void -e_addressbook_view_copy (EAddressbookView *view) -{ - view->clipboard_cards = get_selected_cards (view); - - gtk_selection_owner_set (view->invisible, clipboard_atom, GDK_CURRENT_TIME); -} - -void -e_addressbook_view_paste (EAddressbookView *view) -{ - gtk_selection_convert (view->invisible, clipboard_atom, - GDK_SELECTION_TYPE_STRING, - GDK_CURRENT_TIME); -} - -void -e_addressbook_view_select_all (EAddressbookView *view) -{ - ESelectionModel *model = get_selection_model (view); - - g_return_if_fail (model); - - e_selection_model_select_all (model); -} - -void -e_addressbook_view_show_all(EAddressbookView *view) -{ - g_object_set(view, - "query", NULL, - NULL); -} - -void -e_addressbook_view_stop(EAddressbookView *view) -{ - if (view) - e_addressbook_model_stop (view->model); -} - -static void -view_transfer_cards (EAddressbookView *view, gboolean delete_from_source) -{ - EBook *book; - GList *cards; - GtkWindow *parent_window; - - g_object_get(view->model, - "book", &book, - NULL); - cards = get_selected_cards (view); - parent_window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))); - - e_addressbook_transfer_cards (book, cards, delete_from_source, parent_window); -} - -void -e_addressbook_view_copy_to_folder (EAddressbookView *view) -{ - view_transfer_cards (view, FALSE); -} - -void -e_addressbook_view_move_to_folder (EAddressbookView *view) -{ - view_transfer_cards (view, TRUE); -} - - -static gboolean -e_addressbook_view_selection_nonempty (EAddressbookView *view) -{ - ESelectionModel *selection_model; - - selection_model = get_selection_model (view); - if (selection_model == NULL) - return FALSE; - - return e_selection_model_selected_count (selection_model) != 0; -} - -gboolean -e_addressbook_view_can_create (EAddressbookView *view) -{ - return view ? e_addressbook_model_editable (view->model) : FALSE; -} - -gboolean -e_addressbook_view_can_print (EAddressbookView *view) -{ - return view && view->model ? e_addressbook_model_card_count (view->model) : FALSE; -} - -gboolean -e_addressbook_view_can_save_as (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) : FALSE; -} - -gboolean -e_addressbook_view_can_view (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) : FALSE; -} - -gboolean -e_addressbook_view_can_send (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) : FALSE; -} - -gboolean -e_addressbook_view_can_send_to (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) : FALSE; -} - -gboolean -e_addressbook_view_can_delete (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) && e_addressbook_model_editable (view->model) : FALSE; -} - -gboolean -e_addressbook_view_can_cut (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) && e_addressbook_model_editable (view->model) : FALSE; -} - -gboolean -e_addressbook_view_can_copy (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) : FALSE; -} - -gboolean -e_addressbook_view_can_paste (EAddressbookView *view) -{ - return view ? e_addressbook_model_editable (view->model) : FALSE; -} - -gboolean -e_addressbook_view_can_select_all (EAddressbookView *view) -{ - return view ? e_addressbook_model_card_count (view->model) != 0 : FALSE; -} - -gboolean -e_addressbook_view_can_stop (EAddressbookView *view) -{ - return view ? e_addressbook_model_can_stop (view->model) : FALSE; -} - -gboolean -e_addressbook_view_can_copy_to_folder (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) : FALSE; -} - -gboolean -e_addressbook_view_can_move_to_folder (EAddressbookView *view) -{ - return view ? e_addressbook_view_selection_nonempty (view) && e_addressbook_model_editable (view->model) : FALSE; -} diff --git a/addressbook/gui/widgets/e-addressbook-view.etspec b/addressbook/gui/widgets/e-addressbook-view.etspec deleted file mode 100644 index a0a0015d75..0000000000 --- a/addressbook/gui/widgets/e-addressbook-view.etspec +++ /dev/null @@ -1,51 +0,0 @@ -<ETableSpecification click-to-add="true" draw-grid="true" _click-to-add-message="* Click here to add a contact *"> - <ETableColumn model_col= "0" _title="File As" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "1" _title="Full Name" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "2" _title="Email" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "3" _title="Primary Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "4" _title="Assistant Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "5" _title="Business Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "6" _title="Callback Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "7" _title="Company Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "8" _title="Home Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col= "9" _title="Organization" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="10" _title="Business Address" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="11" _title="Home Address" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="12" _title="Mobile Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="13" _title="Car Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="14" _title="Business Fax" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="15" _title="Home Fax" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="16" _title="Business Phone 2" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="17" _title="Home Phone 2" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="18" _title="ISDN" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="19" _title="Other Phone" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="20" _title="Other Fax" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="21" _title="Pager" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="22" _title="Radio" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="23" _title="Telex" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="24" _title="TTY" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="25" _title="Other Address" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="26" _title="Email 2" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="27" _title="Email 3" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="28" _title="Web Site" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="29" _title="Department" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="30" _title="Office" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="31" _title="Title" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="32" _title="Profession" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="33" _title="Manager" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="34" _title="Assistant" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="35" _title="Nickname" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="36" _title="Spouse" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="37" _title="Note" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableColumn model_col="38" _title="Free-busy URL" expansion="1.0" minimum_width="75" resizable="true" cell="string" compare="string"/> - <ETableState> - <column source="0"/> - <column source="1"/> - <column source="5"/> - <column source="2"/> - <column source="3"/> - <grouping> - <leaf column="0" ascending="true"/> - </grouping> - </ETableState> -</ETableSpecification> diff --git a/addressbook/gui/widgets/e-addressbook-view.h b/addressbook/gui/widgets/e-addressbook-view.h deleted file mode 100644 index 0ec5cfabe8..0000000000 --- a/addressbook/gui/widgets/e-addressbook-view.h +++ /dev/null @@ -1,146 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-addressbook-view.h - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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_ADDRESSBOOK_VIEW_H__ -#define __E_ADDRESSBOOK_VIEW_H__ - -#include <gtk/gtktable.h> -#include <bonobo/bonobo-ui-component.h> -#include <gal/menus/gal-view-instance.h> -#include "e-addressbook-model.h" -#include "widgets/menus/gal-view-menus.h" -#include "addressbook/backend/ebook/e-book.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EAddressbookView - A card displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - */ - -#define E_TYPE_ADDRESSBOOK_VIEW (e_addressbook_view_get_type ()) -#define E_ADDRESSBOOK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_ADDRESSBOOK_VIEW, EAddressbookView)) -#define E_ADDRESSBOOK_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_ADDRESSBOOK_VIEW, EAddressbookViewClass)) -#define E_IS_ADDRESSBOOK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_ADDRESSBOOK_VIEW)) -#define E_IS_ADDRESSBOOK_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_ADDRESSBOOK_VIEW)) - -typedef enum { - E_ADDRESSBOOK_VIEW_NONE, /* initialized to this */ - E_ADDRESSBOOK_VIEW_TABLE, - E_ADDRESSBOOK_VIEW_MINICARD -} EAddressbookViewType; - - -typedef struct _EAddressbookView EAddressbookView; -typedef struct _EAddressbookViewClass EAddressbookViewClass; - -struct _EAddressbookView -{ - GtkTable parent; - - /* item specific fields */ - EAddressbookViewType view_type; - - EAddressbookModel *model; - - GtkWidget *invisible; - GList *clipboard_cards; - - EBook *book; - char *query; - guint editable : 1; - - GObject *object; - GtkWidget *widget; - GtkWidget *current_alphabet_widget; - - GtkWidget *vbox; - - /* Menus handler and the view instance */ - GalViewInstance *view_instance; - GalViewMenus *view_menus; - GalView *current_view; - BonoboUIComponent *uic; -}; - -struct _EAddressbookViewClass -{ - GtkTableClass parent_class; - - /* - * Signals - */ - void (*status_message) (EAddressbookView *view, const gchar *message); - void (*search_result) (EAddressbookView *view, EBookViewStatus status); - void (*folder_bar_message) (EAddressbookView *view, const gchar *message); - void (*command_state_change) (EAddressbookView *view); - void (*alphabet_state_change) (EAddressbookView *view, gunichar letter); -}; - -GtkWidget *e_addressbook_view_new (void); -GType e_addressbook_view_get_type (void); - -void e_addressbook_view_setup_menus (EAddressbookView *view, - BonoboUIComponent *uic); - -void e_addressbook_view_discard_menus (EAddressbookView *view); - -void e_addressbook_view_save_as (EAddressbookView *view); -void e_addressbook_view_view (EAddressbookView *view); -void e_addressbook_view_send (EAddressbookView *view); -void e_addressbook_view_send_to (EAddressbookView *view); -void e_addressbook_view_print (EAddressbookView *view); -void e_addressbook_view_print_preview (EAddressbookView *view); -void e_addressbook_view_delete_selection (EAddressbookView *view); -void e_addressbook_view_cut (EAddressbookView *view); -void e_addressbook_view_copy (EAddressbookView *view); -void e_addressbook_view_paste (EAddressbookView *view); -void e_addressbook_view_select_all (EAddressbookView *view); -void e_addressbook_view_show_all (EAddressbookView *view); -void e_addressbook_view_stop (EAddressbookView *view); -void e_addressbook_view_copy_to_folder (EAddressbookView *view); -void e_addressbook_view_move_to_folder (EAddressbookView *view); - -gboolean e_addressbook_view_can_create (EAddressbookView *view); -gboolean e_addressbook_view_can_print (EAddressbookView *view); -gboolean e_addressbook_view_can_save_as (EAddressbookView *view); -gboolean e_addressbook_view_can_view (EAddressbookView *view); -gboolean e_addressbook_view_can_send (EAddressbookView *view); -gboolean e_addressbook_view_can_send_to (EAddressbookView *view); -gboolean e_addressbook_view_can_delete (EAddressbookView *view); -gboolean e_addressbook_view_can_cut (EAddressbookView *view); -gboolean e_addressbook_view_can_copy (EAddressbookView *view); -gboolean e_addressbook_view_can_paste (EAddressbookView *view); -gboolean e_addressbook_view_can_select_all (EAddressbookView *view); -gboolean e_addressbook_view_can_stop (EAddressbookView *view); -gboolean e_addressbook_view_can_copy_to_folder (EAddressbookView *view); -gboolean e_addressbook_view_can_move_to_folder (EAddressbookView *view); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_ADDRESSBOOK_VIEW_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-control.c b/addressbook/gui/widgets/e-minicard-control.c deleted file mode 100644 index 278cfa0120..0000000000 --- a/addressbook/gui/widgets/e-minicard-control.c +++ /dev/null @@ -1,363 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-control.c - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright 1999, 2000, Ximian, Inc. - */ - -#include <config.h> - -#include <gtk/gtk.h> -#include <bonobo/bonobo-generic-factory.h> -#include <bonobo/bonobo-persist.h> -#include <bonobo/bonobo-persist-stream.h> -#include <bonobo/bonobo-stream-client.h> -#include <gal/util/e-util.h> - -#include <addressbook/gui/component/addressbook.h> -#include <addressbook/backend/ebook/e-book.h> -#include <addressbook/backend/ebook/e-book-util.h> -#include <addressbook/backend/ebook/e-card.h> - -#include "e-minicard-control.h" -#include "e-minicard-widget.h" -#include "e-card-merging.h" - -#define MINICARD_CONTROL_ID "OAFIID:GNOME_Evolution_Addressbook_MiniCard_Control" -#define MINICARD_CONTROL_FACTORY_ID "OAFIID:GNOME_Evolution_Addressbook_MiniCard_ControlFactory" - -typedef struct { - EMinicardWidget *minicard; - GList *card_list; - GtkWidget *label; -} EMinicardControl; - -#if 0 -enum { - PROP_RUNNING -} MyArgs; - -#define RUNNING_KEY "Clock::Running" - -static void -get_prop (BonoboPropertyBag *bag, - BonoboArg *arg, - guint arg_id, - CORBA_Environment *ev, - gpointer user_data) -{ - GObject *clock = user_data; - - switch (arg_id) { - - case PROP_RUNNING: - { - gboolean b = GPOINTER_TO_UINT (g_object_get_data (clock, RUNNING_KEY)); - BONOBO_ARG_SET_BOOLEAN (arg, b); - break; - } - - default: - g_warning ("Unhandled arg %d", arg_id); - break; - } -} - -static void -set_prop (BonoboPropertyBag *bag, - const BonoboArg *arg, - guint arg_id, - CORBA_Environment *ev, - gpointer user_data) -{ - GtkClock *clock = user_data; - - switch (arg_id) { - - case PROP_RUNNING: - { - guint i; - - i = BONOBO_ARG_GET_BOOLEAN (arg); - - if (i) - gtk_clock_start (clock); - else - gtk_clock_stop (clock); - - g_object_set_data (clock, RUNNING_KEY, - GUINT_TO_POINTER (i)); - break; - } - - default: - g_warning ("Unhandled arg %d", arg_id); - break; - } -} -#endif - -/* - * Bonobo::PersistStream - * - * These two functions implement the Bonobo::PersistStream load and - * save methods which allow data to be loaded into and out of the - * BonoboObject. - */ -static char * -stream_read (Bonobo_Stream stream) -{ - Bonobo_Stream_iobuf *buffer; - CORBA_Environment ev; - char *data = NULL; - gint length = 0; - - CORBA_exception_init (&ev); - do { -#define READ_CHUNK_SIZE 65536 - Bonobo_Stream_read (stream, READ_CHUNK_SIZE, - &buffer, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - return NULL; - } - - if (buffer->_length <= 0) - break; - - data = g_realloc (data, length + buffer->_length + 1); - - memcpy (data + length, buffer->_buffer, buffer->_length); - - length += buffer->_length; - - CORBA_free (buffer); - } while (1); - - CORBA_free (buffer); - CORBA_exception_free (&ev); - - if (data) - data[length] = '\0'; - else - data = g_strdup(""); - - return data; -} /* stream_read */ - -/* - * This function implements the Bonobo::PersistStream:load method. - */ -static void -pstream_load (BonoboPersistStream *ps, const Bonobo_Stream stream, - Bonobo_Persist_ContentType type, void *data, - CORBA_Environment *ev) -{ - GList *list; - char *vcard; - EMinicardControl *minicard_control = data; - - if (type && g_strcasecmp (type, "text/vCard") != 0 && - g_strcasecmp (type, "text/x-vCard") != 0) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_WrongDataType, NULL); - return; - } - - if ((vcard = stream_read (stream)) == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_FileNotFound, NULL); - return; - } - - e_free_object_list (minicard_control->card_list); - list = e_card_load_cards_from_string_with_default_charset(vcard, "ISO-8859-1"); - g_free(vcard); - minicard_control->card_list = list; - if (list) - g_object_set(minicard_control->minicard, - "card", list->data, - NULL); - if (list && list->next) { - char *message; - int length = g_list_length (list) - 1; - if (length > 1) { - message = g_strdup_printf (_("and %d other cards."), length); - } else { - message = g_strdup_printf (_("and one other card.")); - } - gtk_label_set_text (GTK_LABEL (minicard_control->label), message); - g_free (message); - gtk_widget_show (minicard_control->label); - } else { - gtk_widget_hide (minicard_control->label); - } -} /* pstream_load */ - -/* - * This function implements the Bonobo::PersistStream:save method. - */ -static void -pstream_save (BonoboPersistStream *ps, const Bonobo_Stream stream, - Bonobo_Persist_ContentType type, void *data, - CORBA_Environment *ev) -{ - EMinicardControl *minicard_control = data; - char *vcard; - int length; - - if (type && g_strcasecmp (type, "text/vCard") != 0 && - g_strcasecmp (type, "text/x-vCard") != 0) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_WrongDataType, NULL); - return; - } - - vcard = e_card_list_get_vcard(minicard_control->card_list); - length = strlen (vcard); - bonobo_stream_client_write (stream, vcard, length, ev); - g_free (vcard); -} /* pstream_save */ - -static Bonobo_Persist_ContentTypeList * -pstream_get_content_types (BonoboPersistStream *ps, void *closure, - CORBA_Environment *ev) -{ - return bonobo_persist_generate_content_types (2, "text/vCard", "text/x-vCard"); -} - -static void -book_open_cb (EBook *book, EBookStatus status, gpointer closure) -{ - GList *list = closure; - if (book) { - GList *p; - for (p = list; p; p = p->next) { - e_card_merging_book_add_card(book, p->data, NULL, NULL); - } - g_object_unref (book); - } - e_free_object_list (list); -} - -static void -save_in_addressbook(GtkWidget *button, gpointer data) -{ - EMinicardControl *minicard_control = data; - GList *list, *p; - EBook *book; - - book = e_book_new (); - - list = g_list_copy (minicard_control->card_list); - - for (p = list; p; p = p->next) - g_object_ref (p->data); - - if (!addressbook_load_default_book (book, book_open_cb, list)) { - g_object_unref (book); - book_open_cb (NULL, E_BOOK_STATUS_OTHER_ERROR, list); - } -} - -static void -free_struct (gpointer data, GObject *where_object_was) -{ - EMinicardControl *minicard_control = data; - e_free_object_list (minicard_control->card_list); - g_free (minicard_control); -} - -static BonoboObject * -e_minicard_control_factory (BonoboGenericFactory *Factory, - const char *component_id, - void *closure) -{ -#if 0 - BonoboPropertyBag *pb; -#endif - BonoboControl *control; - BonoboPersistStream *stream; - GtkWidget *minicard; - GtkWidget *button; - GtkWidget *label; - GtkWidget *vbox; - - EMinicardControl *minicard_control = g_new (EMinicardControl, 1); - - - minicard_control->card_list = NULL; - minicard_control->minicard = NULL; - minicard_control->label = NULL; - - /* Create the control. */ - - minicard = e_minicard_widget_new (); - gtk_widget_show (minicard); - minicard_control->minicard = E_MINICARD_WIDGET (minicard); - - /* This is intentionally not shown. */ - label = gtk_label_new (""); - minicard_control->label = label; - - button = gtk_button_new_with_label(_("Save in addressbook")); - g_signal_connect (button, "clicked", - G_CALLBACK (save_in_addressbook), minicard_control); - gtk_widget_show (button); - - vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), minicard, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); - gtk_widget_show (vbox); - - control = bonobo_control_new (vbox); - - g_object_weak_ref (G_OBJECT (control), free_struct, minicard_control); - - stream = bonobo_persist_stream_new (pstream_load, pstream_save, - pstream_get_content_types, - MINICARD_CONTROL_ID, - minicard_control); - -#if 0 - /* Create the properties. */ - pb = bonobo_property_bag_new (get_prop, set_prop, clock); - bonobo_control_set_properties (control, pb); - - bonobo_property_bag_add (pb, "running", PROP_RUNNING, - BONOBO_ARG_BOOLEAN, NULL, - "Whether or not the clock is running", 0); -#endif - - if (stream == NULL) { - bonobo_object_unref (BONOBO_OBJECT (control)); - return NULL; - } - - bonobo_object_add_interface (BONOBO_OBJECT (control), - BONOBO_OBJECT (stream)); - - return BONOBO_OBJECT (control); -} - -void -e_minicard_control_factory_init (void) -{ - static BonoboGenericFactory *factory = NULL; - - if (factory != NULL) - return; - - factory = - bonobo_generic_factory_new ( - MINICARD_CONTROL_FACTORY_ID, - e_minicard_control_factory, NULL); - - if (factory == NULL) - g_error ("I could not register a EMinicard control factory."); -} diff --git a/addressbook/gui/widgets/e-minicard-control.h b/addressbook/gui/widgets/e-minicard-control.h deleted file mode 100644 index 4a0da88435..0000000000 --- a/addressbook/gui/widgets/e-minicard-control.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __E_MINICARD_CONTROL_H__ -#define __E_MINICARD_CONTROL_H__ - -#include <bonobo/bonobo-control.h> - -void e_minicard_control_factory_init (void); - -#endif /* __E_MINICARD_CONTROL_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-label.c b/addressbook/gui/widgets/e-minicard-label.c deleted file mode 100644 index 7fef48a63b..0000000000 --- a/addressbook/gui/widgets/e-minicard-label.c +++ /dev/null @@ -1,510 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-label.c - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 "e-minicard-label.h" - -#include <gtk/gtksignal.h> -#include <libgnomecanvas/gnome-canvas-rect-ellipse.h> -#include <libgnome/gnome-i18n.h> -#include <gal/util/e-util.h> -#include <gal/e-text/e-text.h> -#include <gal/widgets/e-canvas.h> -#include <gal/widgets/e-canvas-utils.h> -#include <gdk/gdkkeysyms.h> - -static void e_minicard_label_init (EMinicardLabel *card); -static void e_minicard_label_class_init (EMinicardLabelClass *klass); -static void e_minicard_label_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void e_minicard_label_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); -static gboolean e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event); -static void e_minicard_label_realize (GnomeCanvasItem *item); -static void e_minicard_label_unrealize (GnomeCanvasItem *item); -static void e_minicard_label_reflow(GnomeCanvasItem *item, int flags); - -static void e_minicard_label_resize_children( EMinicardLabel *e_minicard_label ); - -static GnomeCanvasGroupClass *parent_class = NULL; - -/* The arguments we take */ -enum { - PROP_0, - PROP_WIDTH, - PROP_HEIGHT, - PROP_HAS_FOCUS, - PROP_FIELD, - PROP_FIELDNAME, - PROP_TEXT_MODEL, - PROP_MAX_FIELD_NAME_WIDTH, - PROP_EDITABLE -}; - -GType -e_minicard_label_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EMinicardLabelClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_minicard_label_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EMinicardLabel), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_minicard_label_init, - }; - - type = g_type_register_static (gnome_canvas_group_get_type (), "EMinicardLabel", &info, 0); - } - - return type; -} - -static void -e_minicard_label_class_init (EMinicardLabelClass *klass) -{ - GObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = G_OBJECT_CLASS (klass); - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = g_type_class_peek_parent (klass); - - object_class->set_property = e_minicard_label_set_property; - object_class->get_property = e_minicard_label_get_property; - /* object_class->destroy = e_minicard_label_destroy; */ - - g_object_class_install_property (object_class, PROP_WIDTH, - g_param_spec_double ("width", - _("Width"), - /*_( */"XXX blurb" /*)*/, - 0.0, G_MAXDOUBLE, 10.0, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_HEIGHT, - g_param_spec_double ("height", - _("Height"), - /*_( */"XXX blurb" /*)*/, - 0.0, G_MAXDOUBLE, 10.0, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_HAS_FOCUS, - g_param_spec_boolean ("has_focus", - _("Has Focus"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_FIELD, - g_param_spec_string ("field", - _("Field"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_FIELDNAME, - g_param_spec_string ("fieldname", - _("Field Name"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_TEXT_MODEL, - g_param_spec_object ("text_model", - _("Text Model"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_TEXT_MODEL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_MAX_FIELD_NAME_WIDTH, - g_param_spec_double ("max_field_name_length", - _("Max field name length"), - /*_( */"XXX blurb" /*)*/, - -1.0, G_MAXDOUBLE, -1.0, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_EDITABLE, - g_param_spec_boolean ("editable", - _("Editable"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - /* GnomeCanvasItem method overrides */ - item_class->realize = e_minicard_label_realize; - item_class->unrealize = e_minicard_label_unrealize; - item_class->event = e_minicard_label_event; -} - -static void -e_minicard_label_init (EMinicardLabel *minicard_label) -{ - minicard_label->width = 10; - minicard_label->height = 10; - minicard_label->rect = NULL; - minicard_label->fieldname = NULL; - minicard_label->field = NULL; - - minicard_label->max_field_name_length = -1; - - e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard_label), e_minicard_label_reflow); -} - -static void -e_minicard_label_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -{ - EMinicardLabel *e_minicard_label; - GnomeCanvasItem *item; - - e_minicard_label = E_MINICARD_LABEL (object); - item = GNOME_CANVAS_ITEM (object); - - switch (prop_id){ - case PROP_WIDTH: - e_minicard_label->width = g_value_get_double (value); - e_minicard_label_resize_children(e_minicard_label); - e_canvas_item_request_reflow (item); - break; - case PROP_HAS_FOCUS: - if (e_minicard_label->field && (g_value_get_boolean (value) != E_FOCUS_NONE)) - e_canvas_item_grab_focus(e_minicard_label->field, FALSE); - break; - case PROP_FIELD: - gnome_canvas_item_set( e_minicard_label->field, "text", g_value_get_string (value), NULL ); - break; - case PROP_FIELDNAME: - gnome_canvas_item_set( e_minicard_label->fieldname, "text", g_value_get_string (value), NULL ); - break; - case PROP_TEXT_MODEL: - gnome_canvas_item_set( e_minicard_label->field, "model", g_value_get_object (value), NULL); - break; - case PROP_MAX_FIELD_NAME_WIDTH: - e_minicard_label->max_field_name_length = g_value_get_double (value); - break; - case PROP_EDITABLE: - e_minicard_label->editable = g_value_get_boolean (value); - g_object_set (e_minicard_label->field, "editable", e_minicard_label->editable, NULL); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_label_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - EMinicardLabel *e_minicard_label; - - e_minicard_label = E_MINICARD_LABEL (object); - - switch (prop_id) { - case PROP_WIDTH: - g_value_set_double (value, e_minicard_label->width); - break; - case PROP_HEIGHT: - g_value_set_double (value, e_minicard_label->height); - break; - case PROP_HAS_FOCUS: - g_value_set_boolean (value, e_minicard_label->has_focus ? E_FOCUS_CURRENT : E_FOCUS_NONE); - break; - case PROP_FIELD: - g_object_get_property (G_OBJECT (e_minicard_label->field), - "text", value); - break; - case PROP_FIELDNAME: - g_object_get_property (G_OBJECT (e_minicard_label->fieldname), - "text", value); - break; - case PROP_TEXT_MODEL: - g_object_get_property (G_OBJECT (e_minicard_label->field), - "model", value); - break; - case PROP_MAX_FIELD_NAME_WIDTH: - g_value_set_double (value, e_minicard_label->max_field_name_length); - break; - case PROP_EDITABLE: - g_value_set_boolean (value, e_minicard_label->editable); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_label_realize (GnomeCanvasItem *item) -{ - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->realize) - (* GNOME_CANVAS_ITEM_CLASS( parent_class )->realize) (item); - - e_canvas_item_request_reflow(item); - - if (!item->canvas->aa) - { - } -} - -void -e_minicard_label_construct (GnomeCanvasItem *item) -{ - EMinicardLabel *e_minicard_label; - GnomeCanvasGroup *group; - GdkFont *font; - - font = gtk_style_get_font (gtk_widget_get_style (GTK_WIDGET (item->canvas))); - - e_minicard_label = E_MINICARD_LABEL (item); - group = GNOME_CANVAS_GROUP( item ); - - e_minicard_label->rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) e_minicard_label->width - 1, - "y2", (double) e_minicard_label->height - 1, - "outline_color", NULL, - NULL ); - e_minicard_label->fieldname = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "clip_width", (double) ( e_minicard_label->width / 2 - 4 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font_gdk", font, - "fill_color", "black", - "draw_background", FALSE, - NULL ); - e_canvas_item_move_absolute(e_minicard_label->fieldname, 2, 1); - - e_minicard_label->field = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font_gdk", font, - "fill_color", "black", - "editable", e_minicard_label->editable, - "draw_background", FALSE, - NULL ); - e_canvas_item_move_absolute(e_minicard_label->field, ( e_minicard_label->width / 2 + 2), 1); - - e_canvas_item_request_reflow(item); -} - -static void -e_minicard_label_unrealize (GnomeCanvasItem *item) -{ - EMinicardLabel *e_minicard_label; - - e_minicard_label = E_MINICARD_LABEL (item); - - if (!item->canvas->aa) - { - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->unrealize) - (* GNOME_CANVAS_ITEM_CLASS( parent_class )->unrealize) (item); -} - -static gboolean -e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicardLabel *e_minicard_label; - - e_minicard_label = E_MINICARD_LABEL (item); - - switch( event->type ) - { - case GDK_KEY_PRESS: - if (event->key.keyval == GDK_Escape) { - GnomeCanvasItem *parent; - - e_text_cancel_editing (E_TEXT (e_minicard_label->field)); - - parent = GNOME_CANVAS_ITEM (e_minicard_label)->parent; - if (parent) - e_canvas_item_grab_focus(parent, FALSE); - } - break; - case GDK_FOCUS_CHANGE: - { - GdkEventFocus *focus_event = (GdkEventFocus *) event; - if ( focus_event->in ) - { - gnome_canvas_item_set( e_minicard_label->rect, - "outline_color", "grey50", - "fill_color", "grey90", - NULL ); - e_minicard_label->has_focus = TRUE; - } - else - { - gnome_canvas_item_set( e_minicard_label->rect, - "outline_color", NULL, - "fill_color", NULL, - NULL ); - e_minicard_label->has_focus = FALSE; - } - } - break; - case GDK_BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - case GDK_MOTION_NOTIFY: - case GDK_ENTER_NOTIFY: - case GDK_LEAVE_NOTIFY: { - gboolean return_val; -#if 0 - GnomeCanvasItem *field; - ArtPoint p; - double inv[6], affine[6]; - - field = e_minicard_label->field; - art_affine_identity (affine); - - if (field->xform != NULL) { - if (field->object.flags & GNOME_CANVAS_ITEM_AFFINE_FULL) { - art_affine_multiply (affine, affine, field->xform); - } else { - affine[4] += field->xform[0]; - affine[5] += field->xform[1]; - } - } - - art_affine_invert (inv, affine); - switch(event->type) { - case GDK_MOTION_NOTIFY: - p.x = event->motion.x; - p.y = event->motion.y; - art_affine_point (&p, &p, inv); - event->motion.x = p.x; - event->motion.y = p.y; - break; - case GDK_BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - p.x = event->button.x; - p.y = event->button.y; - art_affine_point (&p, &p, inv); - event->button.x = p.x; - event->button.y = p.y; - break; - case GDK_ENTER_NOTIFY: - case GDK_LEAVE_NOTIFY: - p.x = event->crossing.x; - p.y = event->crossing.y; - art_affine_point (&p, &p, inv); - event->crossing.x = p.x; - event->crossing.y = p.y; - break; - default: - break; - } -#endif - g_signal_emit_by_name(e_minicard_label->field, "event", event, &return_val); - return return_val; - break; - } - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; -} - -static void -e_minicard_label_resize_children(EMinicardLabel *e_minicard_label) -{ - double left_width; - if (e_minicard_label->max_field_name_length != -1 && ((e_minicard_label->width / 2) - 4 > e_minicard_label->max_field_name_length)) - left_width = e_minicard_label->max_field_name_length; - else - left_width = e_minicard_label->width / 2 - 4; - - gnome_canvas_item_set( e_minicard_label->fieldname, - "clip_width", (double) ( left_width ), - NULL ); - gnome_canvas_item_set( e_minicard_label->field, - "clip_width", (double) ( e_minicard_label->width - 8 - left_width ), - NULL ); -} - -static void -e_minicard_label_reflow(GnomeCanvasItem *item, int flags) -{ - EMinicardLabel *e_minicard_label = E_MINICARD_LABEL(item); - - gint old_height; - gdouble text_height; - gdouble left_width; - - old_height = e_minicard_label->height; - - g_object_get(e_minicard_label->fieldname, - "text_height", &text_height, - NULL); - - e_minicard_label->height = text_height; - - - g_object_get(e_minicard_label->field, - "text_height", &text_height, - NULL); - - if (e_minicard_label->height < text_height) - e_minicard_label->height = text_height; - e_minicard_label->height += 3; - - gnome_canvas_item_set( e_minicard_label->rect, - "x2", (double) e_minicard_label->width - 1, - "y2", (double) e_minicard_label->height - 1, - NULL ); - - if (e_minicard_label->max_field_name_length != -1 && ((e_minicard_label->width / 2) - 4 > e_minicard_label->max_field_name_length)) - left_width = e_minicard_label->max_field_name_length; - else - left_width = e_minicard_label->width / 2 - 4; - - e_canvas_item_move_absolute(e_minicard_label->field, left_width + 6, 1); - - if (old_height != e_minicard_label->height) - e_canvas_item_request_parent_reflow(item); -} - -GnomeCanvasItem * -e_minicard_label_new(GnomeCanvasGroup *parent) -{ - GnomeCanvasItem *item = gnome_canvas_item_new(parent, e_minicard_label_get_type(), NULL); - e_minicard_label_construct(item); - return item; -} - diff --git a/addressbook/gui/widgets/e-minicard-label.h b/addressbook/gui/widgets/e-minicard-label.h deleted file mode 100644 index 0fdc48a451..0000000000 --- a/addressbook/gui/widgets/e-minicard-label.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-label.h - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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_MINICARD_LABEL_H__ -#define __E_MINICARD_LABEL_H__ - -#include <glib.h> -#include <libgnomecanvas/gnome-canvas.h> - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardLabel - A label doing focus with non-marching ants. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * width double RW width of the label - * height double R height of the label - * field string RW text in the field label - * fieldname string RW text in the fieldname label - */ - -#define E_TYPE_MINICARD_LABEL (e_minicard_label_get_type ()) -#define E_MINICARD_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_MINICARD_LABEL, EMinicardLabel)) -#define E_MINICARD_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_MINICARD_LABEL, EMiniCardLabelClass)) -#define E_IS_MINICARD_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_MINICARD_LABEL)) -#define E_IS_MINICARD_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_MINICARD_LABEL)) - - -typedef struct _EMinicardLabel EMinicardLabel; -typedef struct _EMinicardLabelClass EMinicardLabelClass; - -struct _EMinicardLabel -{ - GnomeCanvasGroup parent; - - /* item specific fields */ - double width; - double height; - double max_field_name_length; - guint editable : 1; - GnomeCanvasItem *fieldname; - GnomeCanvasItem *field; - GnomeCanvasItem *rect; - - gboolean has_focus; -}; - -struct _EMinicardLabelClass -{ - GnomeCanvasGroupClass parent_class; -}; - - -GType e_minicard_label_get_type (void); -GnomeCanvasItem *e_minicard_label_new(GnomeCanvasGroup *parent); -void e_minicard_label_construct (GnomeCanvasItem *item); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_LABEL_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-view-widget.c b/addressbook/gui/widgets/e-minicard-view-widget.c deleted file mode 100644 index 8113eb3c59..0000000000 --- a/addressbook/gui/widgets/e-minicard-view-widget.c +++ /dev/null @@ -1,407 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-view-widget.c - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 <gtk/gtksignal.h> -#include <gal/widgets/e-canvas-background.h> -#include <gal/widgets/e-canvas.h> -#include <libgnome/gnome-i18n.h> - -#include "e-addressbook-marshal.h" -#include "e-minicard-view-widget.h" - -static void e_minicard_view_widget_init (EMinicardViewWidget *widget); -static void e_minicard_view_widget_class_init (EMinicardViewWidgetClass *klass); -static void e_minicard_view_widget_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void e_minicard_view_widget_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); -static void e_minicard_view_widget_dispose (GObject *object); -static void e_minicard_view_widget_reflow (ECanvas *canvas); -static void e_minicard_view_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void e_minicard_view_widget_realize (GtkWidget *widget); - -static ECanvasClass *parent_class = NULL; - -/* The arguments we take */ -enum { - PROP_0, - PROP_BOOK, - PROP_QUERY, - PROP_EDITABLE, - PROP_COLUMN_WIDTH -}; - -enum { - SELECTION_CHANGE, - COLUMN_WIDTH_CHANGED, - RIGHT_CLICK, - LAST_SIGNAL -}; - -static guint signals [LAST_SIGNAL] = {0, }; - -GType -e_minicard_view_widget_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EMinicardViewWidgetClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_minicard_view_widget_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EMinicardViewWidget), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_minicard_view_widget_init, - }; - - type = g_type_register_static (e_canvas_get_type (), "EMinicardViewWidget", &info, 0); - } - - return type; -} - -static void -e_minicard_view_widget_class_init (EMinicardViewWidgetClass *klass) -{ - GObjectClass *object_class; - GtkWidgetClass *widget_class; - ECanvasClass *canvas_class; - - object_class = (GObjectClass*) klass; - widget_class = GTK_WIDGET_CLASS (klass); - canvas_class = E_CANVAS_CLASS (klass); - - parent_class = gtk_type_class (e_canvas_get_type ()); - - object_class->set_property = e_minicard_view_widget_set_property; - object_class->get_property = e_minicard_view_widget_get_property; - object_class->dispose = e_minicard_view_widget_dispose; - - g_object_class_install_property (object_class, PROP_BOOK, - g_param_spec_object ("book", - _("Book"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_BOOK, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_QUERY, - g_param_spec_string ("query", - _("Query"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_EDITABLE, - g_param_spec_boolean ("editable", - _("Editable"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_COLUMN_WIDTH, - g_param_spec_double ("column_width", - _("Column Width"), - /*_( */"XXX blurb" /*)*/, - 0.0, G_MAXDOUBLE, 150.0, - G_PARAM_READWRITE)); - - signals [SELECTION_CHANGE] = - g_signal_new ("selection_change", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EMinicardViewWidgetClass, selection_change), - NULL, NULL, - e_addressbook_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - signals [COLUMN_WIDTH_CHANGED] = - g_signal_new ("column_width_changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EMinicardViewWidgetClass, column_width_changed), - NULL, NULL, - e_addressbook_marshal_NONE__DOUBLE, - G_TYPE_NONE, 1, G_TYPE_DOUBLE); - - signals [RIGHT_CLICK] = - g_signal_new ("right_click", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EMinicardViewWidgetClass, right_click), - NULL, NULL, - e_addressbook_marshal_INT__POINTER, - G_TYPE_INT, 1, G_TYPE_POINTER); - - widget_class->realize = e_minicard_view_widget_realize; - widget_class->size_allocate = e_minicard_view_widget_size_allocate; - - canvas_class->reflow = e_minicard_view_widget_reflow; - - klass->selection_change = NULL; - klass->column_width_changed = NULL; - klass->right_click = NULL; -} - -static void -e_minicard_view_widget_init (EMinicardViewWidget *view) -{ - view->emv = NULL; - - view->book = NULL; - view->query = NULL; - view->editable = FALSE; - view->column_width = 150; -} - -GtkWidget * -e_minicard_view_widget_new (EAddressbookReflowAdapter *adapter) -{ - EMinicardViewWidget *widget = E_MINICARD_VIEW_WIDGET (gtk_type_new (e_minicard_view_widget_get_type ())); - - widget->adapter = adapter; - g_object_ref (widget->adapter); - - return GTK_WIDGET (widget); -} - -static void -e_minicard_view_widget_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EMinicardViewWidget *emvw; - - emvw = E_MINICARD_VIEW_WIDGET (object); - - switch (prop_id){ - case PROP_BOOK: - if (emvw->book) - g_object_unref (emvw->book); - if (g_value_get_object (value)) { - emvw->book = E_BOOK(g_value_get_object (value)); - if (emvw->book) - g_object_ref(emvw->book); - } else - emvw->book = NULL; - if (emvw->emv) - g_object_set(emvw->emv, - "book", emvw->book, - NULL); - break; - case PROP_QUERY: - emvw->query = g_strdup(g_value_get_string (value)); - if (emvw->emv) - g_object_set(emvw->emv, - "query", emvw->query, - NULL); - break; - case PROP_EDITABLE: - emvw->editable = g_value_get_boolean (value); - if (emvw->emv) - g_object_set (emvw->emv, - "editable", emvw->editable, - NULL); - break; - case PROP_COLUMN_WIDTH: - emvw->column_width = g_value_get_double (value); - if (emvw->emv) { - g_object_set (emvw->emv, - "column_width", emvw->column_width, - NULL); - } - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_view_widget_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EMinicardViewWidget *emvw; - - emvw = E_MINICARD_VIEW_WIDGET (object); - - switch (prop_id) { - case PROP_BOOK: - g_value_set_object (value, emvw->book); - break; - case PROP_QUERY: - g_value_set_string (value, emvw->query); - break; - case PROP_EDITABLE: - g_value_set_boolean (value, emvw->editable); - break; - case PROP_COLUMN_WIDTH: - g_value_set_double (value, emvw->column_width); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_view_widget_dispose (GObject *object) -{ - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(object); - - if (view->book) { - g_object_unref (view->book); - view->book = NULL; - } - if (view->query) { - g_free(view->query); - view->query = NULL; - } - - if (view->adapter) { - g_object_unref (view->adapter); - view->adapter = NULL; - } - - if (G_OBJECT_CLASS(parent_class)->dispose) - G_OBJECT_CLASS(parent_class)->dispose (object); -} - -static void -selection_change (ESelectionModel *esm, EMinicardViewWidget *widget) -{ - g_signal_emit (widget, - signals [SELECTION_CHANGE], 0); -} - -static void -column_width_changed (ESelectionModel *esm, double width, EMinicardViewWidget *widget) -{ - g_signal_emit (widget, - signals [COLUMN_WIDTH_CHANGED], width, 0); -} - -static guint -right_click (EMinicardView *view, GdkEvent *event, EMinicardViewWidget *widget) -{ - guint ret_val; - g_signal_emit (widget, - signals [RIGHT_CLICK], 0, - event, &ret_val); - return ret_val; -} - -static void -e_minicard_view_widget_realize (GtkWidget *widget) -{ - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(widget); - - gnome_canvas_item_new(gnome_canvas_root( GNOME_CANVAS(view) ), - e_canvas_background_get_type(), - "fill_color", "white", - NULL ); - - view->emv = gnome_canvas_item_new( - gnome_canvas_root( GNOME_CANVAS(view) ), - e_minicard_view_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - "adapter", view->adapter, - "column_width", view->column_width, - NULL ); - - g_signal_connect (E_REFLOW(view->emv)->selection, - "selection_changed", - G_CALLBACK (selection_change), view); - g_signal_connect (view->emv, - "column_width_changed", - G_CALLBACK (column_width_changed), view); - g_signal_connect (view->emv, - "right_click", - G_CALLBACK (right_click), view); - - if (GTK_WIDGET_CLASS(parent_class)->realize) - GTK_WIDGET_CLASS(parent_class)->realize (widget); -} - -static void -e_minicard_view_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation) -{ - if (GTK_WIDGET_CLASS(parent_class)->size_allocate) - GTK_WIDGET_CLASS(parent_class)->size_allocate (widget, allocation); - - if (GTK_WIDGET_REALIZED(widget)) { - double width; - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(widget); - - gnome_canvas_item_set( view->emv, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( view->emv, - "minimum_width", (double) allocation->width, - NULL ); - g_object_get(view->emv, - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region (GNOME_CANVAS (view), 0, 0, width - 1, allocation->height - 1); - } -} - -static void -e_minicard_view_widget_reflow(ECanvas *canvas) -{ - double width; - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(canvas); - - if (E_CANVAS_CLASS(parent_class)->reflow) - E_CANVAS_CLASS(parent_class)->reflow (canvas); - - g_object_get(view->emv, - "width", &width, - NULL); - width = MAX(width, GTK_WIDGET(canvas)->allocation.width); - gnome_canvas_set_scroll_region(GNOME_CANVAS(canvas), 0, 0, width - 1, GTK_WIDGET(canvas)->allocation.height - 1); -} - -ESelectionModel * -e_minicard_view_widget_get_selection_model (EMinicardViewWidget *view) -{ - if (view->emv) - return E_SELECTION_MODEL (E_REFLOW (view->emv)->selection); - else - return NULL; -} - -EMinicardView * -e_minicard_view_widget_get_view (EMinicardViewWidget *view) -{ - if (view->emv) - return E_MINICARD_VIEW (view->emv); - else - return NULL; -} diff --git a/addressbook/gui/widgets/e-minicard-view-widget.h b/addressbook/gui/widgets/e-minicard-view-widget.h deleted file mode 100644 index abb6b9c745..0000000000 --- a/addressbook/gui/widgets/e-minicard-view-widget.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-view-widget.h - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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_MINICARD_VIEW_WIDGET_H__ -#define __E_MINICARD_VIEW_WIDGET_H__ - -#include <gal/widgets/e-canvas.h> -#include "addressbook/backend/ebook/e-book.h" -#include "e-minicard-view.h" - -G_BEGIN_DECLS - -#define E_TYPE_MINICARD_VIEW_WIDGET (e_minicard_view_widget_get_type ()) -#define E_MINICARD_VIEW_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_MINICARD_VIEW_WIDGET, EMinicardViewWidget)) -#define E_MINICARD_VIEW_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_MINICARD_VIEW_WIDGET, EMinicardViewWidgetClass)) -#define E_IS_MINICARD_VIEW_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_MINICARD_VIEW_WIDGET)) -#define E_IS_MINICARD_VIEW_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_MINICARD_VIEW_WIDGET)) - - -typedef struct _EMinicardViewWidget EMinicardViewWidget; -typedef struct _EMinicardViewWidgetClass EMinicardViewWidgetClass; - -struct _EMinicardViewWidget -{ - ECanvas parent; - - GnomeCanvasItem *emv; - - EAddressbookReflowAdapter *adapter; - - EBook *book; - char *query; - guint editable : 1; - - double column_width; -}; - -struct _EMinicardViewWidgetClass -{ - ECanvasClass parent_class; - void (*selection_change) (EMinicardViewWidget *emvw); - void (*column_width_changed) (EMinicardViewWidget *emvw, double width); - guint (*right_click) (EMinicardViewWidget *emvw); -}; - - -GType e_minicard_view_widget_get_type (void); -GtkWidget *e_minicard_view_widget_new (EAddressbookReflowAdapter *adapter); - -/* Get parts of the view widget. */ -ESelectionModel *e_minicard_view_widget_get_selection_model (EMinicardViewWidget *view); -EMinicardView *e_minicard_view_widget_get_view (EMinicardViewWidget *view); - -G_END_DECLS - -#endif /* __E_MINICARD_VIEW_WIDGET_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c deleted file mode 100644 index e4c8db0bd1..0000000000 --- a/addressbook/gui/widgets/e-minicard-view.c +++ /dev/null @@ -1,580 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-view.c - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 "e-minicard-view.h" - -#include "e-addressbook-util.h" - -#include "e-addressbook-marshal.h" -#include <gtk/gtkselection.h> -#include <gtk/gtkdnd.h> -#include <gal/widgets/e-canvas.h> -#include <gal/widgets/e-unicode.h> -#include <libgnome/gnome-i18n.h> - -static void e_minicard_view_drag_data_get(GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - EMinicardView *view); - -static EReflowClass *parent_class = NULL; -#define PARENT_TYPE (E_REFLOW_TYPE) - -/* The arguments we take */ -enum { - PROP_0, - PROP_ADAPTER, - PROP_BOOK, - PROP_QUERY, - PROP_EDITABLE -}; - - -enum { - RIGHT_CLICK, - LAST_SIGNAL -}; - -static guint signals [LAST_SIGNAL] = {0, }; - -enum DndTargetType { - DND_TARGET_TYPE_VCARD_LIST, -}; -#define VCARD_LIST_TYPE "text/x-vcard" -static GtkTargetEntry drag_types[] = { - { VCARD_LIST_TYPE, 0, DND_TARGET_TYPE_VCARD_LIST } -}; -static gint num_drag_types = sizeof(drag_types) / sizeof(drag_types[0]); - -static void -e_minicard_view_drag_data_get(GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - EMinicardView *view) -{ - if (!E_IS_MINICARD_VIEW(view)) - return; - - switch (info) { - case DND_TARGET_TYPE_VCARD_LIST: { - char *value; - - value = e_card_list_get_vcard(view->drag_list); - - gtk_selection_data_set (selection_data, - selection_data->target, - 8, - value, strlen (value)); - break; - } - } - - g_list_foreach (view->drag_list, (GFunc)g_object_unref, NULL); - g_list_free (view->drag_list); - view->drag_list = NULL; -} - -static int -e_minicard_view_drag_begin (EAddressbookReflowAdapter *adapter, GdkEvent *event, EMinicardView *view) -{ - GdkDragContext *context; - GtkTargetList *target_list; - GdkDragAction actions = GDK_ACTION_MOVE | GDK_ACTION_COPY; - - view->drag_list = e_minicard_view_get_card_list (view); - - g_print ("dragging %d card(s)\n", g_list_length (view->drag_list)); - - target_list = gtk_target_list_new (drag_types, num_drag_types); - - context = gtk_drag_begin (GTK_WIDGET (GNOME_CANVAS_ITEM (view)->canvas), - target_list, actions, 1/*XXX*/, event); - - if (!view->canvas_drag_data_get_id) - view->canvas_drag_data_get_id = g_signal_connect (GNOME_CANVAS_ITEM (view)->canvas, - "drag_data_get", - G_CALLBACK (e_minicard_view_drag_data_get), - view); - - gtk_drag_set_icon_default (context); - - return TRUE; -} - -static void -set_empty_message (EMinicardView *view) -{ - char *empty_message; - gboolean editable = FALSE; - - if (view->adapter) { - g_object_get (view->adapter, - "editable", &editable, - NULL); - } - - if (editable) - empty_message = _("\n\nThere are no items to show in this view.\n\n" - "Double-click here to create a new Contact."); - else - empty_message = _("\n\nThere are no items to show in this view."); - - g_object_set (view, - "empty_message", empty_message, - NULL); -} - -static void -writable_status_change (EAddressbookModel *model, gboolean writable, EMinicardView *view) -{ - set_empty_message (view); -} - -static void -adapter_changed (EMinicardView *view) -{ - set_empty_message (view); - - g_signal_connect (view->adapter, "drag_begin", - G_CALLBACK (e_minicard_view_drag_begin), view); -} - -static void -e_minicard_view_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EMinicardView *view; - - view = E_MINICARD_VIEW (object); - - switch (prop_id){ - case PROP_ADAPTER: - if (view->adapter) { - if (view->writable_status_id) { - EAddressbookModel *model; - g_object_get (view->adapter, - "model", &model, - NULL); - if (model) { - g_signal_handler_disconnect (model, view->writable_status_id); - } - } - - g_object_unref (view->adapter); - } - view->writable_status_id = 0; - view->adapter = g_value_get_object (value); - g_object_ref (view->adapter); - adapter_changed (view); - g_object_set (view, - "model", view->adapter, - NULL); - if (view->adapter) { - EAddressbookModel *model; - g_object_get (view->adapter, - "model", &model, - NULL); - if (model) { - view->writable_status_id = - g_signal_connect (model, "writable_status", - G_CALLBACK (writable_status_change), view); - } - - } - break; - case PROP_BOOK: - g_object_set (view->adapter, - "book", g_value_get_object (value), - NULL); - set_empty_message (view); - break; - case PROP_QUERY: - g_object_set (view->adapter, - "query", g_value_get_string (value), - NULL); - break; - case PROP_EDITABLE: - g_object_set (view->adapter, - "editable", g_value_get_boolean (value), - NULL); - set_empty_message (view); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_view_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EMinicardView *view; - - view = E_MINICARD_VIEW (object); - - switch (prop_id) { - case PROP_ADAPTER: - g_value_set_object (value, view->adapter); - break; - case PROP_BOOK: - g_object_get_property (G_OBJECT (view->adapter), - "book", value); - break; - case PROP_QUERY: - g_object_get_property (G_OBJECT (view->adapter), - "query", value); - break; - case PROP_EDITABLE: - g_object_get_property (G_OBJECT (view->adapter), - "editable", value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_view_dispose (GObject *object) -{ - EMinicardView *view = E_MINICARD_VIEW(object); - - if (view->canvas_drag_data_get_id) { - g_signal_handler_disconnect (GNOME_CANVAS_ITEM (view)->canvas, - view->canvas_drag_data_get_id); - view->canvas_drag_data_get_id = 0; - } - - if (view->adapter) { - if (view->writable_status_id) { - EAddressbookModel *model; - g_object_get (view->adapter, - "model", &model, - NULL); - if (model) { - g_signal_handler_disconnect (model, view->writable_status_id); - } - } - - g_object_unref (view->adapter); - } - view->writable_status_id = 0; - view->adapter = NULL; - - if (G_OBJECT_CLASS(parent_class)->dispose) - G_OBJECT_CLASS(parent_class)->dispose (object); -} - -static guint -e_minicard_view_right_click (EMinicardView *view, GdkEvent *event) -{ - guint ret_val = 0; - g_signal_emit (view, signals[RIGHT_CLICK], 0, - event, &ret_val); - return ret_val; -} - -static gboolean -e_minicard_view_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicardView *view; - - view = E_MINICARD_VIEW (item); - - switch( event->type ) { - case GDK_2BUTTON_PRESS: - if (((GdkEventButton *)event)->button == 1) { - gboolean editable; - - g_object_get(view->adapter, "editable", &editable, NULL); - - if (editable) { - EBook *book; - g_object_get(view, "book", &book, NULL); - - if (book && E_IS_BOOK (book)) - e_addressbook_show_contact_editor (book, e_card_new(""), TRUE, editable); - } - return TRUE; - } - case GDK_BUTTON_PRESS: - if (event->button.button == 3) { - e_minicard_view_right_click (view, event); - } - break; - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->event) - return GNOME_CANVAS_ITEM_CLASS(parent_class)->event(item, event); - else - return FALSE; -} - -static gint -e_minicard_view_selection_event (EReflow *reflow, GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicardView *view; - int return_val = FALSE; - - view = E_MINICARD_VIEW (reflow); - if (parent_class->selection_event) { - return_val = parent_class->selection_event (reflow, item, event); - } - - switch (event->type) { - case GDK_FOCUS_CHANGE: - if (event->focus_change.in) { - int i; - for (i = 0; i < reflow->count; i++) { - if (reflow->items[i] == item) { - e_selection_model_maybe_do_something(reflow->selection, i, 0, 0); - break; - } - } - } - break; - case GDK_BUTTON_PRESS: - if (event->button.button == 3) { - return_val = e_minicard_view_right_click (view, event); - if (!return_val) - e_selection_model_right_click_up(reflow->selection); - } - break; - default: - break; - } - return return_val; -} - -typedef struct { - EMinicardView *view; - EBookCallback cb; - gpointer closure; -} ViewCbClosure; - -static void -do_remove (int i, gpointer user_data) -{ - EBook *book; - ECard *card; - ViewCbClosure *viewcbclosure = user_data; - EMinicardView *view = viewcbclosure->view; - EBookCallback cb = viewcbclosure->cb; - gpointer closure = viewcbclosure->closure; - - g_object_get (view->adapter, - "book", &book, - NULL); - - card = e_addressbook_reflow_adapter_get_card (view->adapter, i); - - e_book_remove_card(book, card, cb, closure); - - g_object_unref (card); -} - -#if 0 -static int -compare_to_utf_str (EMinicard *card, const char *utf_str) -{ - g_return_val_if_fail(card != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(card), 0); - - if (g_unichar_isdigit (g_utf8_get_char (utf_str))) { - return 1; - } - - if (card->card) { - char *file_as; - g_object_get(card->card, - "file_as", &file_as, - NULL); - if (file_as) - return g_utf8_strcasecmp (file_as, utf_str); - else - return 0; - } else { - return 0; - } -} -#endif - -static void -e_minicard_view_class_init (EMinicardViewClass *klass) -{ - GObjectClass *object_class; - GnomeCanvasItemClass *item_class; - EReflowClass *reflow_class; - - object_class = G_OBJECT_CLASS (klass); - item_class = (GnomeCanvasItemClass *) klass; - reflow_class = (EReflowClass *) klass; - - parent_class = g_type_class_peek_parent (klass); - - object_class->set_property = e_minicard_view_set_property; - object_class->get_property = e_minicard_view_get_property; - object_class->dispose = e_minicard_view_dispose; - - g_object_class_install_property (object_class, PROP_ADAPTER, - g_param_spec_object ("adapter", - _("Adapter"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_ADDRESSBOOK_REFLOW_ADAPTER, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_BOOK, - g_param_spec_object ("book", - _("Book"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_BOOK, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_QUERY, - g_param_spec_string ("query", - _("Query"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_EDITABLE, - g_param_spec_boolean ("editable", - _("Editable"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - signals [RIGHT_CLICK] = - g_signal_new ("right_click", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EMinicardViewClass, right_click), - NULL, NULL, - e_addressbook_marshal_INT__POINTER, - G_TYPE_INT, 1, G_TYPE_POINTER); - - item_class->event = e_minicard_view_event; - - reflow_class->selection_event = e_minicard_view_selection_event; - /* GnomeCanvasItem method overrides */ -} - -static void -e_minicard_view_init (EMinicardView *view) -{ - view->adapter = NULL; - view->canvas_drag_data_get_id = 0; - view->writable_status_id = 0; - - set_empty_message (view); -} - -GType -e_minicard_view_get_type (void) -{ - static GType reflow_type = 0; - - if (!reflow_type) { - static const GTypeInfo reflow_info = { - sizeof (EMinicardViewClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_minicard_view_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EMinicardView), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_minicard_view_init, - }; - - reflow_type = g_type_register_static (PARENT_TYPE, "EMinicardView", &reflow_info, 0); - } - - return reflow_type; -} - -void -e_minicard_view_remove_selection(EMinicardView *view, - EBookCallback cb, - gpointer closure) -{ - ViewCbClosure viewcbclosure; - viewcbclosure.view = view; - viewcbclosure.cb = cb; - viewcbclosure.closure = closure; - - e_selection_model_foreach (E_REFLOW (view)->selection, - do_remove, - &viewcbclosure); -} - -void -e_minicard_view_jump_to_letter (EMinicardView *view, - gunichar letter) -{ -#if 0 - char uft_str[6 + 1]; - - utf_str [g_unichar_to_utf8 (letter, utf_str)] = '\0'; - e_reflow_sorted_jump (E_REFLOW_SORTED (view), - (GCompareFunc) compare_to_utf_str, - utf_str); -#endif -} - -typedef struct { - GList *list; - EAddressbookReflowAdapter *adapter; -} ModelAndList; - -static void -add_to_list (int index, gpointer closure) -{ - ModelAndList *mal = closure; - mal->list = g_list_prepend (mal->list, e_addressbook_reflow_adapter_get_card (mal->adapter, index)); -} - -GList * -e_minicard_view_get_card_list (EMinicardView *view) -{ - ModelAndList mal; - - mal.adapter = view->adapter; - mal.list = NULL; - - e_selection_model_foreach (E_REFLOW (view)->selection, add_to_list, &mal); - - mal.list = g_list_reverse (mal.list); - return mal.list; -} diff --git a/addressbook/gui/widgets/e-minicard-view.h b/addressbook/gui/widgets/e-minicard-view.h deleted file mode 100644 index afd432fd8e..0000000000 --- a/addressbook/gui/widgets/e-minicard-view.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-view.h - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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_MINICARD_VIEW_H__ -#define __E_MINICARD_VIEW_H__ - -#include "e-minicard.h" - -#include <gal/widgets/e-reflow.h> -#include <gal/widgets/e-selection-model-simple.h> -#include "addressbook/backend/ebook/e-book.h" -#include "e-addressbook-reflow-adapter.h" - -G_BEGIN_DECLS - -/* EMinicardView - A canvas item container. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * book EBook RW book to query - * query string RW query string - * - * From EReflowSorted: (you should really know what you're doing if you set these.) - * compare_func GCompareFunc RW compare function - * string_func EReflowStringFunc RW string function - * - * From EReflow: - * minimum_width double RW minimum width of the reflow. width >= minimum_width - * width double R width of the reflow - * height double RW height of the reflow - */ - -#define E_TYPE_MINICARD_VIEW (e_minicard_view_get_type ()) -#define E_MINICARD_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_MINICARD_VIEW, EMinicardView)) -#define E_MINICARD_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_MINICARD_VIEW, EMinicardViewClass)) -#define E_IS_MINICARD_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_MINICARD_VIEW)) -#define E_IS_MINICARD_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_MINICARD_VIEW)) - - -typedef struct _EMinicardView EMinicardView; -typedef struct _EMinicardViewClass EMinicardViewClass; - -struct _EMinicardView -{ - EReflow parent; - - EAddressbookReflowAdapter *adapter; - - /* item specific fields */ - - GList *drag_list; - - guint canvas_drag_data_get_id; - - guint writable_status_id; -}; - -struct _EMinicardViewClass -{ - EReflowClass parent_class; - - void (*right_click) (EMinicardView *view, GdkEvent *event); -}; - -GType e_minicard_view_get_type (void); -void e_minicard_view_remove_selection (EMinicardView *view, - EBookCallback cb, - gpointer closure); -void e_minicard_view_jump_to_letter (EMinicardView *view, - gunichar letter); -GList *e_minicard_view_get_card_list (EMinicardView *view); - - -G_END_DECLS - -#endif /* __E_MINICARD_VIEW_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-widget-test.c b/addressbook/gui/widgets/e-minicard-widget-test.c deleted file mode 100644 index 9a8d27d21c..0000000000 --- a/addressbook/gui/widgets/e-minicard-widget-test.c +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard.c - * - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#define TEST_VCARD \ -"BEGIN:VCARD -" \ -"FN:Nat -" \ -"N:Friedman;Nat;D;Mr. -" \ -"ORG:Ximian, Inc. -" \ -"TITLE:Head Geek -" \ -"ROLE:Programmer/Executive -" \ -"BDAY:1977-08-06 -" \ -"TEL;WORK:617 679 1984 -" \ -"TEL;CELL:123 456 7890 -" \ -"EMAIL;INTERNET:nat@nat.org -" \ -"EMAIL;INTERNET:nat@ximian.com -" \ -"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234; -" \ -"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA -" \ -"END:VCARD -" \ -" -" - -#include "config.h" -#include <gtk/gtkmain.h> -#include <libgnomeui/gnome-app.h> -#include <libgnomeui/gnome-init.h> -#include "e-minicard-widget.h" - -/* This is a horrible thing to do, but it is just a test. */ - -static void destroy_callback(gpointer data, GObject *where_object_was) -{ - exit(0); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey <clahey@umich.edu>", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Widget Test" ), VERSION, - _( "Copyright (C) 2000, Ximian, Inc." ), - authors, - _( "This should test the minicard widget" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *minicard; - ECard *card; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Widget Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Widget Test", NULL); - - minicard = e_minicard_widget_new(); - card = e_card_new(TEST_VCARD); - g_object_set(minicard, - "card", card, - NULL); - - gnome_app_set_contents( GNOME_APP( app ), minicard ); - - /* Connect the signals */ - g_object_weak_ref (app, destroy_callback, app); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/e-minicard-widget.c b/addressbook/gui/widgets/e-minicard-widget.c deleted file mode 100644 index e8f33673c3..0000000000 --- a/addressbook/gui/widgets/e-minicard-widget.c +++ /dev/null @@ -1,264 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-table-field-chooser.c - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 <libgnome/gnome-i18n.h> -#include <libgnomecanvas/gnome-canvas-rect-ellipse.h> -#include "e-minicard-widget.h" -#include "e-minicard.h" - -static void e_minicard_widget_init (EMinicardWidget *card); -static void e_minicard_widget_class_init (EMinicardWidgetClass *klass); -static void e_minicard_widget_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void e_minicard_widget_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); -static void e_minicard_widget_dispose (GObject *object); -static void e_minicard_widget_size_request (GtkWidget *widget, GtkRequisition *requisition); -static void e_minicard_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void e_minicard_widget_reflow (ECanvas *canvas); - -static ECanvasClass *parent_class = NULL; - -/* The arguments we take */ -enum { - PROP_0, - PROP_CARD, -}; - -GType -e_minicard_widget_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EMinicardWidgetClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_minicard_widget_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EMinicardWidget), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_minicard_widget_init, - }; - - type = g_type_register_static (e_canvas_get_type (), "EMinicardWidget", &info, 0); - } - - return type; -} - -static void -e_minicard_widget_class_init (EMinicardWidgetClass *klass) -{ - GObjectClass *object_class; - GtkWidgetClass *widget_class; - ECanvasClass *ecanvas_class; - - object_class = G_OBJECT_CLASS(klass); - widget_class = GTK_WIDGET_CLASS(klass); - ecanvas_class = E_CANVAS_CLASS(klass); - - parent_class = g_type_class_peek_parent (klass); - - object_class->set_property = e_minicard_widget_set_property; - object_class->get_property = e_minicard_widget_get_property; - object_class->dispose = e_minicard_widget_dispose; - - widget_class->size_request = e_minicard_widget_size_request; - widget_class->size_allocate = e_minicard_widget_size_allocate; - - ecanvas_class->reflow = e_minicard_widget_reflow; - - g_object_class_install_property (object_class, PROP_CARD, - g_param_spec_object ("card", - _("Card"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_CARD, - G_PARAM_READWRITE)); -} - -static void -e_minicard_widget_size_request(GtkWidget *widget, GtkRequisition *requisition) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(widget); - g_object_get(emw->item, - "height", &height, - NULL); - if (height <= 0) - height = 1; - widget->requisition.height = height; - widget->requisition.width = 200; - requisition->height = height; - requisition->width = 200; -} - -static void -e_minicard_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(widget); - gnome_canvas_item_set( emw->item, - "width", (double) allocation->width, - NULL ); - g_object_get(emw->item, - "height", &height, - NULL); - height = MAX(height, allocation->height); - gnome_canvas_set_scroll_region(GNOME_CANVAS( emw ), 0, 0, allocation->width - 1, height - 1); - gnome_canvas_item_set( emw->rect, - "x2", (double) allocation->width, - "y2", (double) height, - NULL ); - if (GTK_WIDGET_CLASS(parent_class)->size_allocate) - GTK_WIDGET_CLASS(parent_class)->size_allocate(widget, allocation); -} - -static void e_minicard_widget_reflow(ECanvas *canvas) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(canvas); - g_object_get(emw->item, - "height", &height, - NULL); - - height = MAX(height, GTK_WIDGET(emw)->allocation.height); - - gnome_canvas_set_scroll_region (GNOME_CANVAS(emw), 0, 0, GTK_WIDGET(emw)->allocation.width - 1, height - 1); - gnome_canvas_item_set( emw->rect, - "x2", (double) GTK_WIDGET(emw)->allocation.width, - "y2", (double) height, - NULL ); - - gtk_widget_queue_resize(GTK_WIDGET(canvas)); -} - -static void -e_minicard_widget_init (EMinicardWidget *emw) -{ - emw->rect = gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(emw)), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - - emw->item = gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(emw)), - e_minicard_get_type(), - "width", (double) 100, - NULL ); - -#if PENDING_PORT_WORK - /* XXX this crashes since the canvas has no h/v adjustments. */ - gnome_canvas_set_scroll_region ( GNOME_CANVAS( emw ), - 0, 0, - 100, 100 ); -#endif - emw->card = NULL; -} - -static void -e_minicard_widget_dispose (GObject *object) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - if (emw->card) { - g_object_unref (emw->card); - emw->card = NULL; - } - - if (G_OBJECT_CLASS(parent_class)->dispose) - G_OBJECT_CLASS(parent_class)->dispose(object); -} - -GtkWidget* -e_minicard_widget_new (void) -{ - GtkWidget *widget = GTK_WIDGET (g_object_new (E_TYPE_MINICARD_WIDGET, NULL)); - return widget; -} - -static void -e_minicard_widget_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - gpointer ptr; - - switch (prop_id){ - case PROP_CARD: - ptr = g_value_get_object (value); - e_minicard_widget_set_card (emw, ptr ? E_CARD (ptr) : NULL); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_widget_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - switch (prop_id) { - case PROP_CARD: - if (emw->card) - g_value_set_object (value, emw->card); - else - g_value_set_object (value, NULL); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -void -e_minicard_widget_set_card (EMinicardWidget *emw, ECard *card) -{ - g_return_if_fail (emw && E_IS_MINICARD_WIDGET (emw)); - g_return_if_fail (card == NULL || E_IS_CARD (card)); - - if (card != emw->card) { - - if (emw->card) - g_object_unref (emw->card); - - emw->card = card; - - if (emw->card) - g_object_ref (emw->card); - - if (emw->item) - g_object_set (emw->item, - "card", emw->card, - NULL); - } -} diff --git a/addressbook/gui/widgets/e-minicard-widget.h b/addressbook/gui/widgets/e-minicard-widget.h deleted file mode 100644 index 829ad8f77d..0000000000 --- a/addressbook/gui/widgets/e-minicard-widget.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-widget.h - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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_MINICARD_WIDGET_H__ -#define __E_MINICARD_WIDGET_H__ - -#include <gal/widgets/e-canvas.h> -#include "addressbook/backend/ebook/e-card.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardWidget - A card displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - */ - -#define E_TYPE_MINICARD_WIDGET (e_minicard_widget_get_type ()) -#define E_MINICARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_MINICARD_WIDGET, EMinicardWidget)) -#define E_MINICARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_MINICARD_WIDGET, EMinicardWidgetClass)) -#define E_IS_MINICARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_MINICARD_WIDGET)) -#define E_IS_MINICARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_MINICARD_WIDGET)) - - -typedef struct _EMinicardWidget EMinicardWidget; -typedef struct _EMinicardWidgetClass EMinicardWidgetClass; - -struct _EMinicardWidget -{ - ECanvas parent; - - /* item specific fields */ - GnomeCanvasItem *item; - - GnomeCanvasItem *rect; - ECard *card; -}; - -struct _EMinicardWidgetClass -{ - ECanvasClass parent_class; -}; - - -GtkWidget *e_minicard_widget_new(void); -GType e_minicard_widget_get_type (void); - -void e_minicard_widget_set_card (EMinicardWidget *, ECard *); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_WIDGET_H__ */ diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c deleted file mode 100644 index 6c8c9a630b..0000000000 --- a/addressbook/gui/widgets/e-minicard.c +++ /dev/null @@ -1,1042 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard.c - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 <glib.h> -#include <gtk/gtkdnd.h> -#include <gdk/gdkkeysyms.h> -#include <libgnome/gnome-i18n.h> -#include <libgnomecanvas/gnome-canvas-rect-ellipse.h> -#include <gal/e-text/e-text.h> -#include <gal/util/e-util.h> -#include <gal/widgets/e-canvas-utils.h> -#include <gal/widgets/e-canvas.h> -#include "addressbook/backend/ebook/e-book.h" -#include "e-addressbook-marshal.h" -#include "e-addressbook-util.h" -#include "e-minicard.h" -#include "e-minicard-label.h" -#include "e-minicard-view.h" -#include "e-contact-editor.h" -#include "e-card-merging.h" - -static void e_minicard_init (EMinicard *card); -static void e_minicard_class_init (EMinicardClass *klass); -static void e_minicard_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void e_minicard_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); -static void e_minicard_dispose (GObject *object); -static void e_minicard_finalize (GObject *object); -static gboolean e_minicard_event (GnomeCanvasItem *item, GdkEvent *event); -static void e_minicard_realize (GnomeCanvasItem *item); -static void e_minicard_unrealize (GnomeCanvasItem *item); -static void e_minicard_reflow ( GnomeCanvasItem *item, int flags ); - -static void e_minicard_resize_children( EMinicard *e_minicard ); -static void remodel( EMinicard *e_minicard ); - -static gint e_minicard_drag_begin (EMinicard *minicard, GdkEvent *event); - -static GnomeCanvasGroupClass *parent_class = NULL; - -typedef struct _EMinicardField EMinicardField; - -struct _EMinicardField { - ECardSimpleField field; - GnomeCanvasItem *label; -}; - -#define d(x) - -#define LIST_ICON_FILENAME "contact-list-16.png" - -#define E_MINICARD_FIELD(field) ((EMinicardField *)(field)) - -static void -e_minicard_field_destroy(EMinicardField *field) -{ - gtk_object_destroy(GTK_OBJECT(field->label)); - g_free(field); -} - -/* The arguments we take */ -enum { - PROP_0, - PROP_WIDTH, - PROP_HEIGHT, - PROP_HAS_FOCUS, - PROP_SELECTED, - PROP_HAS_CURSOR, - PROP_EDITABLE, - PROP_CARD -}; - -enum { - SELECTED, - DRAG_BEGIN, - LAST_SIGNAL -}; - -static guint e_minicard_signals [LAST_SIGNAL] = {0, }; - -GType -e_minicard_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (EMinicardClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_minicard_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (EMinicard), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_minicard_init, - }; - - type = g_type_register_static (gnome_canvas_group_get_type (), "EMinicard", &info, 0); - } - - return type; -} - -static void -e_minicard_class_init (EMinicardClass *klass) -{ - GObjectClass *object_class = (GObjectClass*) klass; - GnomeCanvasItemClass *item_class = (GnomeCanvasItemClass *) klass; - - object_class->set_property = e_minicard_set_property; - object_class->get_property = e_minicard_get_property; - object_class->dispose = e_minicard_dispose; - object_class->finalize = e_minicard_finalize; - - parent_class = gtk_type_class (gnome_canvas_group_get_type ()); - - g_object_class_install_property (object_class, PROP_WIDTH, - g_param_spec_double ("width", - _("Width"), - /*_( */"XXX blurb" /*)*/, - 0.0, G_MAXDOUBLE, 10.0, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_HEIGHT, - g_param_spec_double ("height", - _("Height"), - /*_( */"XXX blurb" /*)*/, - 0.0, G_MAXDOUBLE, 10.0, - G_PARAM_READABLE)); - - g_object_class_install_property (object_class, PROP_HAS_FOCUS, - /* XXX should be _enum */ - g_param_spec_int ("has_focus", - _("Has Focus"), - /*_( */"XXX blurb" /*)*/, - E_MINICARD_FOCUS_TYPE_START, E_MINICARD_FOCUS_TYPE_END, - E_MINICARD_FOCUS_TYPE_START, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_SELECTED, - g_param_spec_boolean ("selected", - _("Selected"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_HAS_CURSOR, - g_param_spec_boolean ("has_cursor", - _("Has Cursor"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_EDITABLE, - g_param_spec_boolean ("editable", - _("Editable"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_CARD, - g_param_spec_object ("card", - _("Card"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_CARD, - G_PARAM_READWRITE)); - - e_minicard_signals [SELECTED] = - g_signal_new ("selected", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EMinicardClass, selected), - NULL, NULL, - e_addressbook_marshal_INT__POINTER, - G_TYPE_INT, 1, G_TYPE_POINTER); - - e_minicard_signals [DRAG_BEGIN] = - g_signal_new ("drag_begin", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EMinicardClass, drag_begin), - NULL, NULL, - e_addressbook_marshal_INT__POINTER, - G_TYPE_INT, 1, G_TYPE_POINTER); - - /* GnomeCanvasItem method overrides */ - item_class->realize = e_minicard_realize; - item_class->unrealize = e_minicard_unrealize; - item_class->event = e_minicard_event; - - klass->selected = NULL; -} - -static void -e_minicard_init (EMinicard *minicard) -{ - /* minicard->card = NULL;*/ - minicard->rect = NULL; - minicard->fields = NULL; - minicard->width = 10; - minicard->height = 10; - minicard->has_focus = FALSE; - minicard->selected = FALSE; - minicard->editable = FALSE; - minicard->has_cursor = FALSE; - - minicard->card = NULL; - minicard->simple = e_card_simple_new(NULL); - - minicard->list_icon_pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_IMAGESDIR "/" LIST_ICON_FILENAME, NULL); - minicard->list_icon_size = gdk_pixbuf_get_height (minicard->list_icon_pixbuf); - - minicard->editor = NULL; - - minicard->changed = FALSE; - - e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard), e_minicard_reflow); -} - -static void -set_selected (EMinicard *minicard, gboolean selected) -{ - GtkWidget *canvas = GTK_WIDGET(GNOME_CANVAS_ITEM(minicard)->canvas); - if (selected) { - gnome_canvas_item_set (minicard->rect, - "outline_color_gdk", &canvas->style->bg[GTK_STATE_NORMAL], - NULL); - gnome_canvas_item_set (minicard->header_rect, - "fill_color_gdk", &canvas->style->bg[GTK_STATE_SELECTED], - NULL); - gnome_canvas_item_set (minicard->header_text, - "fill_color_gdk", &canvas->style->text[GTK_STATE_SELECTED], - NULL); - } else { - gnome_canvas_item_set (minicard->rect, - "outline_color", NULL, - NULL); - gnome_canvas_item_set (minicard->header_rect, - "fill_color_gdk", &canvas->style->bg[GTK_STATE_NORMAL], - NULL); - gnome_canvas_item_set (minicard->header_text, - "fill_color_gdk", &canvas->style->fg[GTK_STATE_NORMAL], - NULL); - } - minicard->selected = selected; -} - -static void -set_has_cursor (EMinicard *minicard, gboolean has_cursor) -{ - if (!minicard->has_focus && has_cursor) - e_canvas_item_grab_focus(GNOME_CANVAS_ITEM (minicard), FALSE); - minicard->has_cursor = has_cursor; -} - - -static void -e_minicard_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -{ - GnomeCanvasItem *item; - EMinicard *e_minicard; - GList *l; - - item = GNOME_CANVAS_ITEM (object); - e_minicard = E_MINICARD (object); - - switch (prop_id){ - case PROP_WIDTH: - if (e_minicard->width != g_value_get_double (value)) { - e_minicard->width = g_value_get_double (value); - e_minicard_resize_children(e_minicard); - if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) - e_canvas_item_request_reflow(item); - } - break; - case PROP_HAS_FOCUS: - if (e_minicard->fields) { - if ( g_value_get_int(value) == E_FOCUS_START || - g_value_get_int(value) == E_FOCUS_CURRENT) { - gnome_canvas_item_set(E_MINICARD_FIELD(e_minicard->fields->data)->label, - "has_focus", g_value_get_int (value), - NULL); - } else if ( g_value_get_int (value) == E_FOCUS_END ) { - gnome_canvas_item_set(E_MINICARD_FIELD(g_list_last(e_minicard->fields)->data)->label, - "has_focus", g_value_get_int (value), - NULL); - } - } - else { - if (!e_minicard->has_focus) - e_canvas_item_grab_focus(item, FALSE); - } - break; - case PROP_SELECTED: - if (e_minicard->selected != g_value_get_boolean (value)) - set_selected (e_minicard, g_value_get_boolean (value)); - break; - case PROP_EDITABLE: - e_minicard->editable = g_value_get_boolean (value); - for (l = e_minicard->fields; l; l = l->next) - g_object_set (E_MINICARD_FIELD (l->data)->label, - "editable", e_minicard->editable, - NULL); - break; - case PROP_HAS_CURSOR: - d(g_print("%s: PROP_HAS_CURSOR\n", __FUNCTION__)); - if (e_minicard->has_cursor != g_value_get_boolean (value)) - set_has_cursor (e_minicard, g_value_get_boolean (value)); - break; - case PROP_CARD: - if (e_minicard->card) - g_object_unref (e_minicard->card); - e_minicard->card = E_CARD(g_value_get_object (value)); - if (e_minicard->card) - g_object_ref (e_minicard->card); - g_object_set(e_minicard->simple, - "card", e_minicard->card, - NULL); - remodel(e_minicard); - e_canvas_item_request_reflow(item); - e_minicard->changed = FALSE; - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - EMinicard *e_minicard; - - e_minicard = E_MINICARD (object); - - switch (prop_id) { - case PROP_WIDTH: - g_value_set_double (value, e_minicard->width); - break; - case PROP_HEIGHT: - g_value_set_double (value, e_minicard->height); - break; - case PROP_HAS_FOCUS: - g_value_set_int (value, e_minicard->has_focus ? E_FOCUS_CURRENT : E_FOCUS_NONE); - break; - case PROP_SELECTED: - g_value_set_boolean (value, e_minicard->selected); - break; - case PROP_HAS_CURSOR: - g_value_set_boolean (value, e_minicard->has_cursor); - break; - case PROP_EDITABLE: - g_value_set_boolean (value, e_minicard->editable); - break; - case PROP_CARD: - e_card_simple_sync_card(e_minicard->simple); - g_value_set_object (value, e_minicard->card); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -e_minicard_dispose (GObject *object) -{ - EMinicard *e_minicard; - - g_return_if_fail (object != NULL); - g_return_if_fail (E_IS_MINICARD (object)); - - e_minicard = E_MINICARD (object); - - if (e_minicard->fields) { - g_list_foreach(e_minicard->fields, (GFunc) e_minicard_field_destroy, NULL); - g_list_free(e_minicard->fields); - e_minicard->fields = NULL; - } - - if (e_minicard->list_icon_pixbuf) { - gdk_pixbuf_unref (e_minicard->list_icon_pixbuf); - e_minicard->list_icon_pixbuf = NULL; - } - - if (G_OBJECT_CLASS (parent_class)->dispose) - (* G_OBJECT_CLASS (parent_class)->dispose) (object); -} - - - -static void -e_minicard_finalize (GObject *object) -{ - EMinicard *e_minicard; - - g_return_if_fail (object != NULL); - g_return_if_fail (E_IS_MINICARD (object)); - - e_minicard = E_MINICARD (object); - - if (e_minicard->card) - g_object_unref (e_minicard->card); - if (e_minicard->simple) - g_object_unref (e_minicard->simple); - - if (G_OBJECT_CLASS (parent_class)->finalize) - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - -static void -e_minicard_realize (GnomeCanvasItem *item) -{ - EMinicard *e_minicard; - GnomeCanvasGroup *group; - GtkWidget *canvas; - - e_minicard = E_MINICARD (item); - group = GNOME_CANVAS_GROUP( item ); - canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (item)->canvas); - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) (item); - - e_minicard->rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) e_minicard->width - 1, - "y2", (double) e_minicard->height - 1, - "outline_color", NULL, - NULL ); - - e_minicard->header_rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 2, - "y1", (double) 2, - "x2", (double) e_minicard->width - 3, - "y2", (double) e_minicard->height - 3, - "fill_color_gdk", &canvas->style->bg[GTK_STATE_NORMAL], - NULL ); - - e_minicard->header_text = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "width", (double) ( e_minicard->width - 12 ), - "clip", TRUE, - "use_ellipsis", TRUE, -#if 0 - "font", "fixed-bold-10", -#endif - "fill_color_gdk", &canvas->style->fg[GTK_STATE_NORMAL], - "text", "", - "draw_background", FALSE, - NULL ); - - e_canvas_item_move_absolute(e_minicard->header_text, 6, 6); - - e_minicard->list_icon = - gnome_canvas_item_new ( group, - gnome_canvas_pixbuf_get_type(), - "pixbuf", e_minicard->list_icon_pixbuf, - NULL); - - remodel(e_minicard); - e_canvas_item_request_reflow(item); - - if (!item->canvas->aa) { - } -} - -static void -e_minicard_unrealize (GnomeCanvasItem *item) -{ - EMinicard *e_minicard; - - e_minicard = E_MINICARD (item); - - if (!item->canvas->aa) - { - } - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item); -} - -static void -card_modified_cb (EBook* book, EBookStatus status, gpointer user_data) -{ - d(g_print ("%s: %s(): a card was modified\n", __FILE__, __FUNCTION__)); - if (status != E_BOOK_STATUS_SUCCESS) - e_addressbook_error_dialog (_("Error modifying card"), status); -} - -/* Callback used when the contact editor is closed */ -static void -editor_closed_cb (GtkObject *editor, gpointer data) -{ - EMinicard *minicard = data; - g_object_unref (editor); - minicard->editor = NULL; -} - -static gboolean -e_minicard_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicard *e_minicard; - GtkWidget *canvas; - - e_minicard = E_MINICARD (item); - canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (item)->canvas); - - switch( event->type ) { - case GDK_FOCUS_CHANGE: - { - GdkEventFocus *focus_event = (GdkEventFocus *) event; - d(g_print("%s: GDK_FOCUS_CHANGE: %s\n", __FUNCTION__, focus_event->in?"in":"out")); - if (focus_event->in) { - /* Chris: When EMinicard gets the cursor, if it doesn't have the focus, it should take it. */ - e_minicard->has_focus = TRUE; - if (!e_minicard->selected) { - e_minicard_selected(e_minicard, event); - } - } else { - EBook *book = NULL; - - if (e_minicard->changed) { - - e_card_simple_sync_card(e_minicard->simple); - - if (E_IS_MINICARD_VIEW(GNOME_CANVAS_ITEM(e_minicard)->parent)) { - - g_object_get(GNOME_CANVAS_ITEM(e_minicard)->parent, - "book", &book, - NULL); - - } - - if (book) { - - /* Add the card in the contact editor to our ebook */ - e_card_merging_book_commit_card (book, - e_minicard->card, - card_modified_cb, - NULL); - } else { - remodel(e_minicard); - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_minicard)); - } - e_minicard->changed = FALSE; - } - e_minicard->has_focus = FALSE; - } - } - break; - case GDK_BUTTON_PRESS: { - if (1 <= event->button.button && event->button.button <= 2) { - int ret_val = e_minicard_selected(e_minicard, event); - GdkEventMask mask = ((1 << (4 + event->button.button)) | - GDK_POINTER_MOTION_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK); - - e_canvas_item_grab_focus(item, TRUE); - - if (gnome_canvas_item_grab (GNOME_CANVAS_ITEM (e_minicard), - mask, NULL, event->button.time)) { - return FALSE; - } - gtk_grab_add (GTK_WIDGET (GNOME_CANVAS_ITEM (e_minicard)->canvas)); - e_minicard->button_x = event->button.x; - e_minicard->button_y = event->button.y; - e_minicard->drag_button = event->button.button; - e_minicard->drag_button_down = TRUE; - return ret_val; - } else if (event->button.button == 3) { - int ret_val = e_minicard_selected(e_minicard, event); - if (ret_val != 0) - return ret_val; - } - break; - } - case GDK_BUTTON_RELEASE: - e_minicard_selected(e_minicard, event); - if (e_minicard->drag_button == event->button.button) { - e_minicard->drag_button = 0; - e_minicard->drag_button_down = FALSE; - e_minicard->button_x = -1; - e_minicard->button_y = -1; - - if (GTK_WIDGET_HAS_GRAB (GNOME_CANVAS_ITEM (e_minicard)->canvas)) { - gtk_grab_remove (GTK_WIDGET (GNOME_CANVAS_ITEM (e_minicard)->canvas)); - gnome_canvas_item_ungrab (GNOME_CANVAS_ITEM (e_minicard), event->button.time); - } - } - break; - case GDK_MOTION_NOTIFY: - if (e_minicard->drag_button_down && event->motion.state & GDK_BUTTON1_MASK) { - if (MAX (abs (e_minicard->button_x - event->motion.x), - abs (e_minicard->button_y - event->motion.y)) > 3) { - gint ret_val; - - ret_val = e_minicard_drag_begin(e_minicard, event); - - e_minicard->drag_button_down = FALSE; - - return ret_val; - } - } - break; - case GDK_2BUTTON_PRESS: - if (event->button.button == 1 && E_IS_MINICARD_VIEW(item->parent)) { - if (e_minicard->editor) { - if (e_card_evolution_list (e_minicard->card)) - e_contact_list_editor_raise (E_CONTACT_LIST_EDITOR(e_minicard->editor)); - else - e_contact_editor_raise(E_CONTACT_EDITOR(e_minicard->editor)); - } else { - EBook *book = NULL; - if (E_IS_MINICARD_VIEW(item->parent)) { - g_object_get(item->parent, - "book", &book, - NULL); - } - - if (book != NULL) { - if (e_card_evolution_list (e_minicard->card)) { - EContactListEditor *editor = e_addressbook_show_contact_list_editor (book, e_minicard->card, - FALSE, e_minicard->editable); - e_minicard->editor = G_OBJECT (editor); - } - else { - EContactEditor *editor = e_addressbook_show_contact_editor (book, e_minicard->card, - FALSE, e_minicard->editable); - e_minicard->editor = G_OBJECT (editor); - } - g_object_ref (e_minicard->editor); - - g_signal_connect (e_minicard->editor, "editor_closed", - G_CALLBACK (editor_closed_cb), e_minicard); - - } - } - return TRUE; - } - break; - case GDK_KEY_PRESS: - if (event->key.keyval == GDK_Tab || - event->key.keyval == GDK_KP_Tab || - event->key.keyval == GDK_ISO_Left_Tab) { - GList *list; - for (list = e_minicard->fields; list; list = list->next) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - EFocus has_focus; - g_object_get(item, - "has_focus", &has_focus, - NULL); - if (has_focus != E_FOCUS_NONE) { - if (event->key.state & GDK_SHIFT_MASK) - list = list->prev; - else - list = list->next; - if (list) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - gnome_canvas_item_set(item, - "has_focus", (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START, - NULL); - return 1; - } else { - return 0; - } - } - } - } - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; -} - -static void -e_minicard_resize_children( EMinicard *e_minicard ) -{ - GList *list; - - if (e_minicard->header_text) { - gnome_canvas_item_set( e_minicard->header_text, - "width", ((double) e_minicard->width - 12 - - (e_card_evolution_list (e_minicard->card) ? e_minicard->list_icon_size : 0.0)), - NULL ); - } - if (e_minicard->list_icon) { - e_canvas_item_move_absolute(e_minicard->list_icon, - e_minicard->width - e_minicard->list_icon_size - 3, - 3); - } - for ( list = e_minicard->fields; list; list = g_list_next( list ) ) { - gnome_canvas_item_set( E_MINICARD_FIELD( list->data )->label, - "width", (double) e_minicard->width - 4.0, - NULL ); - } -} - -static void -field_changed (EText *text, EMinicard *e_minicard) -{ - ECardSimpleType type; - char *string; - - type = GPOINTER_TO_INT - (g_object_get_data(G_OBJECT(text), - "EMinicard:field")); - g_object_get(text, - "text", &string, - NULL); - e_card_simple_set(e_minicard->simple, - type, - string); - g_free(string); - e_minicard->changed = TRUE; -} - -static void -field_activated (EText *text, EMinicard *e_minicard) -{ - e_text_stop_editing (text); - e_canvas_item_grab_focus (GNOME_CANVAS_ITEM (e_minicard), FALSE); -} - -static void -add_field (EMinicard *e_minicard, ECardSimpleField field, gdouble left_width) -{ - GnomeCanvasItem *new_item; - GnomeCanvasGroup *group; - ECardSimpleType type; - EMinicardField *minicard_field; - char *name; - char *string; - - group = GNOME_CANVAS_GROUP( e_minicard ); - - type = e_card_simple_type(e_minicard->simple, field); - name = g_strdup_printf("%s:", e_card_simple_get_name(e_minicard->simple, field)); - string = e_card_simple_get(e_minicard->simple, field); - - /* Magically convert embedded XML into an address. */ - if (!strncmp (string, "<?xml", 5)) { - EDestination *dest = e_destination_import (string); - if (dest != NULL) { - gchar *new_string = g_strdup (e_destination_get_address (dest)); - g_free (string); - string = new_string; - g_object_unref (dest); - } - } - - new_item = e_minicard_label_new(group); - gnome_canvas_item_set( new_item, - "width", e_minicard->width - 4.0, - "fieldname", name, - "field", string, - "max_field_name_length", left_width, - "editable", e_minicard->editable, - NULL ); - g_signal_connect(E_MINICARD_LABEL(new_item)->field, - "changed", G_CALLBACK (field_changed), e_minicard); - g_signal_connect(E_MINICARD_LABEL(new_item)->field, - "activate", G_CALLBACK (field_activated), e_minicard); - g_object_set(E_MINICARD_LABEL(new_item)->field, - "allow_newlines", e_card_simple_get_allow_newlines (e_minicard->simple, field), - NULL); - g_object_set_data(G_OBJECT (E_MINICARD_LABEL(new_item)->field), - "EMinicard:field", - GINT_TO_POINTER(field)); - - minicard_field = g_new(EMinicardField, 1); - minicard_field->field = field; - minicard_field->label = new_item; - - e_minicard->fields = g_list_append( e_minicard->fields, minicard_field); - e_canvas_item_move_absolute(new_item, 2, e_minicard->height); - g_free(name); - g_free(string); -} - -static gdouble -get_left_width(EMinicard *e_minicard) -{ - gchar *name; - ECardSimpleField field; - gdouble width = -1; - GdkFont *font; - - font = gtk_style_get_font (gtk_widget_get_style ((GtkWidget *) ((GnomeCanvasItem *) e_minicard)->canvas)); - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { - gdouble this_width; - name = g_strdup_printf("%s:", e_card_simple_get_name(e_minicard->simple, field)); - this_width = gdk_text_width(font, name, strlen(name)); - if (width < this_width) - width = this_width; - g_free(name); - } - return width; -} - -static void -remodel( EMinicard *e_minicard ) -{ - int count = 0; - if ( !(GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED) ) - return; - if (e_minicard->simple) { - ECardSimpleField field; - GList *list; - char *file_as; - gdouble left_width = -1; - - if (e_minicard->header_text) { - file_as = e_card_simple_get(e_minicard->simple, E_CARD_SIMPLE_FIELD_FILE_AS); - gnome_canvas_item_set( e_minicard->header_text, - "text", file_as ? file_as : "", - NULL ); - g_free(file_as); - } - - if (e_minicard->card && e_card_evolution_list (e_minicard->card) ) { - gnome_canvas_item_show (e_minicard->list_icon); - } - else { - gnome_canvas_item_hide (e_minicard->list_icon); - } - - list = e_minicard->fields; - e_minicard->fields = NULL; - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING && count < 5; field++) { - EMinicardField *minicard_field = NULL; - - if (list) - minicard_field = list->data; - if (minicard_field && minicard_field->field == field) { - GList *this_list = list; - char *string; - - string = e_card_simple_get(e_minicard->simple, field); - if (string && *string) { - /* Magically convert embedded XML into an address. */ - if (!strncmp (string, "<?xml", 4)) { - EDestination *dest = e_destination_import (string); - if (dest != NULL) { - gchar *new_string = g_strdup (e_destination_get_address (dest)); - g_free (string); - string = new_string; - g_object_unref (dest); - } - } - - e_minicard->fields = g_list_append(e_minicard->fields, minicard_field); - g_object_set(minicard_field->label, - "field", string, - NULL); - count ++; - } else { - e_minicard_field_destroy(minicard_field); - } - list = g_list_remove_link(list, this_list); - g_list_free_1(this_list); - g_free(string); - } else { - char *string; - if (left_width == -1) { - left_width = get_left_width(e_minicard); - } - - string = e_card_simple_get(e_minicard->simple, field); - if (string && *string) { - add_field(e_minicard, field, left_width); - count++; - } - g_free(string); - } - } - - g_list_foreach(list, (GFunc) e_minicard_field_destroy, NULL); - g_list_free(list); - } -} - -static void -e_minicard_reflow( GnomeCanvasItem *item, int flags ) -{ - EMinicard *e_minicard = E_MINICARD(item); - if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) { - GList *list; - gdouble text_height; - gint old_height; - - old_height = e_minicard->height; - - g_object_get( e_minicard->header_text, - "text_height", &text_height, - NULL ); - - e_minicard->height = text_height + 10.0; - - gnome_canvas_item_set( e_minicard->header_rect, - "y2", text_height + 9.0, - NULL ); - - for(list = e_minicard->fields; list; list = g_list_next(list)) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - g_object_get (item, - "height", &text_height, - NULL); - e_canvas_item_move_absolute(item, 2, e_minicard->height); - e_minicard->height += text_height; - } - e_minicard->height += 2; - - gnome_canvas_item_set( e_minicard->rect, - "y2", (double) e_minicard->height - 1, - NULL ); - - gnome_canvas_item_set( e_minicard->rect, - "x2", (double) e_minicard->width - 1.0, - "y2", (double) e_minicard->height - 1.0, - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "x2", (double) e_minicard->width - 3.0, - NULL ); - - if (old_height != e_minicard->height) - e_canvas_item_request_parent_reflow(item); - } -} - -const char * -e_minicard_get_card_id (EMinicard *minicard) -{ - g_return_val_if_fail(minicard != NULL, NULL); - g_return_val_if_fail(E_IS_MINICARD(minicard), NULL); - - if (minicard->card) { - return e_card_get_id(minicard->card); - } else { - return ""; - } -} - -int -e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2) -{ - g_return_val_if_fail(minicard1 != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(minicard1), 0); - g_return_val_if_fail(minicard2 != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(minicard2), 0); - - if (minicard1->card && minicard2->card) { - char *file_as1, *file_as2; - g_object_get(minicard1->card, - "file_as", &file_as1, - NULL); - g_object_get(minicard2->card, - "file_as", &file_as2, - NULL); - if (file_as1 && file_as2) - return g_utf8_collate(file_as1, file_as2); - if (file_as1) - return -1; - if (file_as2) - return 1; - return strcmp(e_minicard_get_card_id(minicard1), e_minicard_get_card_id(minicard2)); - } else { - return 0; - } -} - -int -e_minicard_selected (EMinicard *minicard, GdkEvent *event) -{ - gint ret_val = 0; - GnomeCanvasItem *item = GNOME_CANVAS_ITEM (minicard); - if (item->parent) { - guint signal_id = g_signal_lookup ("selection_event", G_OBJECT_TYPE (item->parent)); - /* We should probably check the signature here, but I - * don't think it's worth the time required to code - * it. - */ - if (signal_id != 0) { - g_signal_emit(item->parent, - signal_id, 0, - item, event, &ret_val); - } - } - return ret_val; -} - -static gint -e_minicard_drag_begin (EMinicard *minicard, GdkEvent *event) -{ - gint ret_val = 0; - GnomeCanvasItem *parent; - g_signal_emit (minicard, - e_minicard_signals[DRAG_BEGIN], 0, - event, &ret_val); - - parent = GNOME_CANVAS_ITEM (minicard)->parent; - if (parent && E_IS_REFLOW (parent)) { - E_REFLOW (parent)->maybe_in_drag = FALSE; - } - return ret_val; -} diff --git a/addressbook/gui/widgets/e-minicard.h b/addressbook/gui/widgets/e-minicard.h deleted file mode 100644 index d0270e7013..0000000000 --- a/addressbook/gui/widgets/e-minicard.h +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard.h - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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_MINICARD_H__ -#define __E_MINICARD_H__ - -#include <gdk-pixbuf/gdk-pixbuf.h> -#include "addressbook/gui/contact-editor/e-contact-editor.h" -#include "addressbook/backend/ebook/e-card.h" -#include "addressbook/backend/ebook/e-card-simple.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicard - A small card displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * width double RW width of the card - * height double R height of the card - * card ECard* RW Pointer to the ECard - */ - -#define E_TYPE_MINICARD (e_minicard_get_type ()) -#define E_MINICARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_MINICARD, EMinicard)) -#define E_MINICARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_MINICARD, EMinicardClass)) -#define E_IS_MINICARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_MINICARD)) -#define E_IS_MINICARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_MINICARD)) - - -typedef struct _EMinicard EMinicard; -typedef struct _EMinicardClass EMinicardClass; -typedef enum _EMinicardFocusType EMinicardFocusType; - -enum _EMinicardFocusType { - E_MINICARD_FOCUS_TYPE_START, - E_MINICARD_FOCUS_TYPE_END -}; - -struct _EMinicard -{ - GnomeCanvasGroup parent; - - /* item specific fields */ - ECard *card; - ECardSimple *simple; - - GnomeCanvasItem *rect; - GnomeCanvasItem *header_rect; - GnomeCanvasItem *header_text; - GnomeCanvasItem *list_icon; - - GdkPixbuf *list_icon_pixbuf; - double list_icon_size; - - GObject *editor; - - GList *fields; /* Of type EMinicardField */ - guint needs_remodeling : 1; - - guint changed : 1; - - guint selected : 1; - guint has_cursor : 1; - - guint has_focus : 1; - - guint editable : 1; - - guint drag_button_down : 1; - gint drag_button; - - gint button_x; - gint button_y; - - double width; - double height; -}; - -struct _EMinicardClass -{ - GnomeCanvasGroupClass parent_class; - - gint (* selected) (EMinicard *minicard, GdkEvent *event); - gint (* drag_begin) (EMinicard *minicard, GdkEvent *event); -}; - - -GType e_minicard_get_type (void); -const char *e_minicard_get_card_id (EMinicard *minicard); -int e_minicard_compare (EMinicard *minicard1, - EMinicard *minicard2); - -int e_minicard_selected (EMinicard *minicard, - GdkEvent *event); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_H__ */ diff --git a/addressbook/gui/widgets/gal-view-factory-minicard.c b/addressbook/gui/widgets/gal-view-factory-minicard.c deleted file mode 100644 index 9fbff1f774..0000000000 --- a/addressbook/gui/widgets/gal-view-factory-minicard.c +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gal-view-factory-minicard.c: A View Factory - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * (C) 2000, 2001 Ximian, Inc. - */ -#include <config.h> -#include <glib.h> -#include <libgnome/gnome-i18n.h> -#include "gal-view-factory-minicard.h" -#include "gal-view-minicard.h" - -#define PARENT_TYPE GAL_VIEW_FACTORY_TYPE - -static GalViewFactoryClass *gal_view_factory_minicard_parent_class; - -static const char * -gal_view_factory_minicard_get_title (GalViewFactory *factory) -{ - return _("Card View"); -} - -static GalView * -gal_view_factory_minicard_new_view (GalViewFactory *factory, - const char *name) -{ - return gal_view_minicard_new(name); -} - -static const char * -gal_view_factory_minicard_get_type_code (GalViewFactory *factory) -{ - return "minicard"; -} - -static void -gal_view_factory_minicard_class_init (GObjectClass *object_class) -{ - GalViewFactoryClass *view_factory_class = GAL_VIEW_FACTORY_CLASS(object_class); - gal_view_factory_minicard_parent_class = g_type_class_ref (PARENT_TYPE); - - view_factory_class->get_title = gal_view_factory_minicard_get_title; - view_factory_class->new_view = gal_view_factory_minicard_new_view; - view_factory_class->get_type_code = gal_view_factory_minicard_get_type_code; -} - -static void -gal_view_factory_minicard_init (GalViewFactoryMinicard *factory) -{ -} - -/** - * gal_view_minicard_new - * - * A new GalViewFactory for creating Minicard views. Create one of - * these and pass it to GalViewCollection for use. - * - * Returns: The new GalViewFactoryMinicard. - */ -GalViewFactory * -gal_view_factory_minicard_new (void) -{ - return gal_view_factory_minicard_construct (g_object_new (GAL_TYPE_VIEW_FACTORY_MINICARD, NULL)); -} - -/** - * gal_view_minicard_construct - * @factory: The factory to construct - * - * constructs the GalViewFactoryMinicard. To be used by subclasses and - * language bindings. - * - * Returns: The GalViewFactoryMinicard. - */ -GalViewFactory * -gal_view_factory_minicard_construct (GalViewFactoryMinicard *factory) -{ - return GAL_VIEW_FACTORY(factory); -} - -E_MAKE_TYPE(gal_view_factory_minicard, "GalViewFactoryMinicard", GalViewFactoryMinicard, gal_view_factory_minicard_class_init, gal_view_factory_minicard_init, PARENT_TYPE) diff --git a/addressbook/gui/widgets/gal-view-factory-minicard.h b/addressbook/gui/widgets/gal-view-factory-minicard.h deleted file mode 100644 index 02eea99e47..0000000000 --- a/addressbook/gui/widgets/gal-view-factory-minicard.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gal-view-factory-minicard.c: A View Factory - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * (C) 2000, 2001 Ximian, Inc. - */ -#ifndef _GAL_VIEW_FACTORY_MINICARD_H_ -#define _GAL_VIEW_FACTORY_MINICARD_H_ - -#include <gtk/gtkobject.h> -#include <gal/menus/gal-view-factory.h> - -#define GAL_TYPE_VIEW_FACTORY_MINICARD (gal_view_factory_minicard_get_type ()) -#define GAL_VIEW_FACTORY_MINICARD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_TYPE_VIEW_FACTORY_MINICARD, GalViewFactoryMinicard)) -#define GAL_VIEW_FACTORY_MINICARD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_TYPE_VIEW_FACTORY_MINICARD, GalViewFactoryMinicardClass)) -#define GAL_IS_VIEW_FACTORY_MINICARD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_TYPE_VIEW_FACTORY_MINICARD)) -#define GAL_IS_VIEW_FACTORY_MINICARD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_TYPE_VIEW_FACTORY_MINICARD)) - -typedef struct { - GalViewFactory base; -} GalViewFactoryMinicard; - -typedef struct { - GalViewFactoryClass parent_class; -} GalViewFactoryMinicardClass; - -/* Standard functions */ -GType gal_view_factory_minicard_get_type (void); -GalViewFactory *gal_view_factory_minicard_new (void); -GalViewFactory *gal_view_factory_minicard_construct (GalViewFactoryMinicard *factory); - -#endif /* _GAL_VIEW_FACTORY_MINICARD_H_ */ diff --git a/addressbook/gui/widgets/gal-view-minicard.c b/addressbook/gui/widgets/gal-view-minicard.c deleted file mode 100644 index 4265af25ba..0000000000 --- a/addressbook/gui/widgets/gal-view-minicard.c +++ /dev/null @@ -1,220 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gal-view-minicard.c: An Minicard View - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * (C) 2000, 2001 Ximian, Inc. - */ -#include <config.h> -#include "gal-view-minicard.h" -#include <libxml/parser.h> -#include <gal/util/e-xml-utils.h> - -#define PARENT_TYPE gal_view_get_type () -#define d(x) x - -static GalViewClass *gal_view_minicard_parent_class; - -static void -gal_view_minicard_edit (GalView *view) -{ - /* GalViewMinicard *minicard_view = GAL_VIEW_MINICARD(view); */ -} - -static void -gal_view_minicard_load (GalView *view, - const char *filename) -{ - xmlDoc *doc; - doc = xmlParseFile (filename); - if (doc) { - xmlNode *root = xmlDocGetRootElement(doc); - GAL_VIEW_MINICARD (view)->column_width = e_xml_get_double_prop_by_name_with_default (root, "column_width", 150); - xmlFreeDoc(doc); - } -} - -static void -gal_view_minicard_save (GalView *view, - const char *filename) -{ - xmlDoc *doc; - xmlNode *root; - - doc = xmlNewDoc("1.0"); - root = xmlNewNode (NULL, "EMinicardViewState"); - e_xml_set_double_prop_by_name (root, "column_width", GAL_VIEW_MINICARD (view)->column_width); - xmlDocSetRootElement(doc, root); - xmlSaveFile(filename, doc); - xmlFreeDoc(doc); -} - -static const char * -gal_view_minicard_get_title (GalView *view) -{ - return GAL_VIEW_MINICARD(view)->title; -} - -static void -gal_view_minicard_set_title (GalView *view, - const char *title) -{ - g_free(GAL_VIEW_MINICARD(view)->title); - GAL_VIEW_MINICARD(view)->title = g_strdup(title); -} - -static const char * -gal_view_minicard_get_type_code (GalView *view) -{ - return "minicard"; -} - -static GalView * -gal_view_minicard_clone (GalView *view) -{ - GalViewMinicard *gvm, *new; - - gvm = GAL_VIEW_MINICARD(view); - - new = g_object_new (GAL_TYPE_VIEW_MINICARD, NULL); - new->title = g_strdup (gvm->title); - new->column_width = gvm->column_width; - - return GAL_VIEW(new); -} - -static void -gal_view_minicard_dispose (GObject *object) -{ - GalViewMinicard *view = GAL_VIEW_MINICARD(object); - gal_view_minicard_detach (view); - g_free(view->title); -} - -static void -gal_view_minicard_class_init (GObjectClass *object_class) -{ - GalViewClass *gal_view_class = GAL_VIEW_CLASS(object_class); - gal_view_minicard_parent_class = g_type_class_ref (PARENT_TYPE); - - gal_view_class->edit = gal_view_minicard_edit ; - gal_view_class->load = gal_view_minicard_load ; - gal_view_class->save = gal_view_minicard_save ; - gal_view_class->get_title = gal_view_minicard_get_title ; - gal_view_class->set_title = gal_view_minicard_set_title ; - gal_view_class->get_type_code = gal_view_minicard_get_type_code; - gal_view_class->clone = gal_view_minicard_clone ; - - object_class->dispose = gal_view_minicard_dispose ; -} - -static void -gal_view_minicard_init (GalViewMinicard *gvm) -{ - gvm->title = NULL; - gvm->column_width = 150.0; - - gvm->emvw = NULL; - gvm->emvw_column_width_changed_id = 0; -} - -/** - * gal_view_minicard_new - * @title: The name of the new view. - * - * Returns a new GalViewMinicard. This is primarily for use by - * GalViewFactoryMinicard. - * - * Returns: The new GalViewMinicard. - */ -GalView * -gal_view_minicard_new (const gchar *title) -{ - return gal_view_minicard_construct (g_object_new (GAL_TYPE_VIEW_MINICARD, NULL), title); -} - -/** - * gal_view_minicard_construct - * @view: The view to construct. - * @title: The name of the new view. - * - * constructs the GalViewMinicard. To be used by subclasses and - * language bindings. - * - * Returns: The GalViewMinicard. - */ -GalView * -gal_view_minicard_construct (GalViewMinicard *view, - const gchar *title) -{ - view->title = g_strdup(title); - return GAL_VIEW(view); -} - -GType -gal_view_minicard_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (GalViewMinicardClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) gal_view_minicard_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GalViewMinicard), - 0, /* n_preallocs */ - (GInstanceInitFunc) gal_view_minicard_init, - }; - - type = g_type_register_static (PARENT_TYPE, "GalViewMinicard", &info, 0); - } - - return type; -} - -static void -column_width_changed (ETable *table, double width, GalViewMinicard *view) -{ - d(g_print("%s: Old width = %f, New width = %f\n", __FUNCTION__, view->column_width, width)); - if (view->column_width != width) { - view->column_width = width; - gal_view_changed(GAL_VIEW(view)); - } -} - -void -gal_view_minicard_attach (GalViewMinicard *view, EMinicardViewWidget *emvw) -{ - gal_view_minicard_detach (view); - - view->emvw = emvw; - - g_object_ref (view->emvw); - - g_object_set (view->emvw, - "column_width", view->column_width, - NULL); - - view->emvw_column_width_changed_id = - g_signal_connect(view->emvw, "column_width_changed", - G_CALLBACK (column_width_changed), view); -} - -void -gal_view_minicard_detach (GalViewMinicard *view) -{ - if (view->emvw == NULL) - return; - if (view->emvw_column_width_changed_id) { - g_signal_handler_disconnect (view->emvw, - view->emvw_column_width_changed_id); - view->emvw_column_width_changed_id = 0; - } - g_object_unref (view->emvw); - view->emvw = NULL; -} diff --git a/addressbook/gui/widgets/gal-view-minicard.h b/addressbook/gui/widgets/gal-view-minicard.h deleted file mode 100644 index e586012f73..0000000000 --- a/addressbook/gui/widgets/gal-view-minicard.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gal-view-minicard.h: An Minicard View - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * (C) 2000, 2001 Ximian, Inc. - */ -#ifndef _GAL_VIEW_MINICARD_H_ -#define _GAL_VIEW_MINICARD_H_ - -#include <gal/menus/gal-view.h> -#include <e-minicard-view-widget.h> - -#define GAL_TYPE_VIEW_MINICARD (gal_view_minicard_get_type ()) -#define GAL_VIEW_MINICARD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GAL_TYPE_VIEW_MINICARD, GalViewMinicard)) -#define GAL_VIEW_MINICARD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GAL_TYPE_VIEW_MINICARD, GalViewMinicardClass)) -#define GAL_IS_VIEW_MINICARD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GAL_TYPE_VIEW_MINICARD)) -#define GAL_IS_VIEW_MINICARD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GAL_TYPE_VIEW_MINICARD)) - -typedef struct { - GalView base; - - char *title; - double column_width; - - EMinicardViewWidget *emvw; - guint emvw_column_width_changed_id; -} GalViewMinicard; - -typedef struct { - GalViewClass parent_class; -} GalViewMinicardClass; - -/* Standard functions */ -GType gal_view_minicard_get_type (void); -GalView *gal_view_minicard_new (const gchar *title); -GalView *gal_view_minicard_construct (GalViewMinicard *view, - const gchar *title); -void gal_view_minicard_attach (GalViewMinicard *view, - EMinicardViewWidget *emvw); -void gal_view_minicard_detach (GalViewMinicard *view); - -#endif /* _GAL_VIEW_MINICARD_H_ */ diff --git a/addressbook/gui/widgets/test-minicard-label.c b/addressbook/gui/widgets/test-minicard-label.c deleted file mode 100644 index c109497628..0000000000 --- a/addressbook/gui/widgets/test-minicard-label.c +++ /dev/null @@ -1,129 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard-label.c - * - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include <gtk/gtkmain.h> -#include <libgnomeui/gnome-app.h> -#include <libgnomeui/gnome-canvas-rect-ellipse.h> -#include <libgnomeui/gnome-init.h> -#include <gal/widgets/e-canvas.h> -#include "e-minicard-label.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *label; -GnomeCanvasItem *rect; - -static void destroy_callback(gpointer data, GObject *where_object_was) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, allocation->width, allocation->height ); - gnome_canvas_item_set( label, - "width", (double) allocation->width, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( rect, - "x2", (double) allocation->width, - "y2", (double) allocation->height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey <clahey@umich.edu>", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Label Test" ), VERSION, - _( "Copyright (C) 2000, Ximian, Inc." ), - authors, - _( "This should test the minicard label canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -static void button_press_callback( GtkWidget *widget, gpointer data ) -{ - gnome_canvas_item_grab_focus( label ); -} - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Label Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Label Test", NULL); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - label = e_minicard_label_new(gnome_canvas_root( GNOME_CANVAS( canvas ) )); - gnome_canvas_item_set( label, - "width", (double) 100, - "height", (double) 100, - "fieldname", "Full Name:", - "field", "Christopher James Lahey", - NULL ); - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gnome_app_set_contents( GNOME_APP( app ), canvas ); - - - /* Connect the signals */ - g_object_weak_ref (app, destroy_callback, app); - - g_signal_connect( canvas , "size_allocate", - G_CALLBACK ( allocate_callback ), - ( gpointer ) app ); - - g_signal_connect( canvas , "button_press_event", - G_CALLBACK ( button_press_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/test-minicard-view.c b/addressbook/gui/widgets/test-minicard-view.c deleted file mode 100644 index 7abe611711..0000000000 --- a/addressbook/gui/widgets/test-minicard-view.c +++ /dev/null @@ -1,206 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-reflow.c - * - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include <libgnorba/gnorba.h> -#include <e-util/e-canvas.h> -#include "e-minicard-view.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *reflow; -GnomeCanvasItem *rect; -GtkAllocation last_alloc; - -CORBA_Environment ev; -CORBA_ORB orb; - -static void -init_bonobo (int argc, char **argv) -{ - - gnome_CORBA_init_with_popt_table ( - "Reflow Test", VERSION, - &argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); - - orb = gnome_CORBA_ORB (); - - if (bonobo_init (orb, NULL, NULL) == FALSE) - g_error (_("Could not initialize Bonobo")); - -} - -static void destroy_callback(gpointer data, GObject *where_object_was) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - double width; - last_alloc = *allocation; - gnome_canvas_item_set( reflow, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( reflow, - "minimum_width", (double) allocation->width, - NULL ); - g_object_get(reflow, - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, width, allocation->height ); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); -} - -static void resize(GnomeCanvas *canvas, gpointer data) -{ - double width; - g_object_get(reflow, - "width", &width, - NULL); - width = MAX(width, last_alloc.width); - gnome_canvas_set_scroll_region(canvas , 0, 0, width, last_alloc.height ); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) last_alloc.height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey <clahey@umich.edu>", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Reflow Test" ), VERSION, - _( "Copyright (C) 2000, Ximian, Inc." ), - authors, - _( "This should test the reflow canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -static void -book_open_cb (EBook *book, EBookStatus status, gpointer closure) -{ - if (status == E_BOOK_STATUS_SUCCESS) - gnome_canvas_item_set(reflow, - "book", book, - NULL); -} - -static gboolean -ebook_create (gpointer data) -{ - EBook *book; - - book = e_book_new (); - - if (!book) { - printf ("%s: %s(): Couldn't create EBook, bailing.\n", - __FILE__, - __FUNCTION__); - return FALSE; - } - - - if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) { - printf ("error calling load_uri!\n"); - } - - - return FALSE; -} - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - GtkWidget *vbox; - GtkWidget *scrollbar; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - CORBA_exception_init (&ev); - init_bonobo (argc, argv); - - app = gnome_app_new("Reflow Test", NULL); - - vbox = gtk_vbox_new(FALSE, 0); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_minicard_view_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - g_signal_connect( canvas, "reflow", - G_CALLBACK ( resize ), - ( gpointer ) app); - - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gtk_box_pack_start(GTK_BOX(vbox), canvas, TRUE, TRUE, 0); - - scrollbar = gtk_hscrollbar_new(gtk_layout_get_hadjustment(GTK_LAYOUT(canvas))); - - gtk_box_pack_start(GTK_BOX(vbox), scrollbar, FALSE, FALSE, 0); - - gnome_app_set_contents( GNOME_APP( app ), vbox ); - - /* Connect the signals */ - g_object_weak_ref (app, destroy_callback, app); - - g_signal_connect( canvas, "size_allocate", - G_CALLBACK ( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - gdk_window_set_back_pixmap( GTK_LAYOUT(canvas)->bin_window, NULL, FALSE); - - g_idle_add (ebook_create, NULL); - - bonobo_main (); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/test-minicard.c b/addressbook/gui/widgets/test-minicard.c deleted file mode 100644 index 822362d972..0000000000 --- a/addressbook/gui/widgets/test-minicard.c +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard.c - * - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#include "config.h" - -#include <gtk/gtkmain.h> -#include <libgnomeui/gnome-app.h> -#include <libgnomeui/gnome-init.h> -#include <libgnomeui/gnome-canvas-rect-ellipse.h> - -#include "e-minicard.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *card; -GnomeCanvasItem *rect; - -static void destroy_callback(gpointer data, GObject *where_object_was) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, allocation->width, allocation->height ); - gnome_canvas_item_set( card, - "width", (double) allocation->width, - NULL ); - gnome_canvas_item_set( rect, - "x2", (double) allocation->width, - "y2", (double) allocation->height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey <clahey@umich.edu>", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Test" ), VERSION, - _( "Copyright (C) 2000, Ximian, Inc." ), - authors, - _( "This should test the minicard canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - int i; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Test", NULL); - - canvas = gnome_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - for ( i = 0; i < 1; i++ ) - { - card = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_minicard_get_type(), - "width", (double) 100, - NULL ); - } - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gnome_app_set_contents( GNOME_APP( app ), canvas ); - - /* Connect the signals */ - g_object_weak_ref (app, destroy_callback, app); - - g_signal_connect( canvas, "size_allocate", - G_CALLBACK( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/test-reflow.c b/addressbook/gui/widgets/test-reflow.c deleted file mode 100644 index 66f003fe2c..0000000000 --- a/addressbook/gui/widgets/test-reflow.c +++ /dev/null @@ -1,199 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-reflow.c - * - * Copyright (C) 2000 Ximian, Inc. - * Author: Chris Lahey <clahey@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * 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 program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#define TEST_VCARD \ -"BEGIN:VCARD -" \ -"FN:Nat -" \ -"N:Friedman;Nat;D;Mr. -" \ -"TITLE:Head Geek -" \ -"BDAY:1977-08-06 -" \ -"TEL;WORK:617 679 1984 -" \ -"TEL;CELL:123 456 7890 -" \ -"EMAIL;INTERNET:nat@nat.org -" \ -"EMAIL;INTERNET:nat@ximian.com -" \ -"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234; -" \ -"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA -" \ -"END:VCARD -" \ -" -" - - -#include "config.h" - -#include <gtk/gtkmain.h> -#include <gtk/gtkvbox.h> -#include <libgnomeui/gnome-canvas-rect-ellipse.h> -#include <libgnomeui/gnome-init.h> -#include <gal/widgets/e-canvas.h> -#include <gal/widgets/e-reflow.h> -#include <gal/widgets/e-scroll-frame.h> - -#include "e-minicard.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *reflow; -GnomeCanvasItem *rect; -GtkAllocation last_alloc; - -static void destroy_callback(gpointer data, GObject *where_object_was) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - double width; - last_alloc = *allocation; - gnome_canvas_item_set( reflow, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( reflow, - "minimum_width", (double) allocation->width, - NULL ); - g_object_get(reflow, - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, width - 1, allocation->height - 1); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); -} - -static void resize(GnomeCanvas *canvas, gpointer data) -{ - double width; - g_object_get(reflow, - "width", &width, - NULL); - width = MAX(width, last_alloc.width); - gnome_canvas_set_scroll_region(canvas , 0, 0, width - 1, last_alloc.height - 1); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) last_alloc.height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey <clahey@umich.edu>", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Reflow Test" ), VERSION, - _( "Copyright (C) 2000, Ximian, Inc." ), - authors, - _( "This should test the reflow canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - GtkWidget *vbox; - GtkWidget *scrollframe; - int i; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Reflow Test", VERSION, argc, argv); - app = gnome_app_new("Reflow Test", NULL); - - vbox = gtk_vbox_new(FALSE, 0); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_reflow_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - g_signal_connect( canvas, "reflow", - G_CALLBACK ( resize ), - ( gpointer ) app); - for ( i = 0; i < 200; i++ ) - { - GnomeCanvasItem *item; - ECard *card = e_card_new (TEST_VCARD); - item = gnome_canvas_item_new( GNOME_CANVAS_GROUP(reflow), - e_minicard_get_type(), - "card", card, - NULL); - e_reflow_add_item(E_REFLOW(reflow), item, NULL); - } - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - scrollframe = e_scroll_frame_new (gtk_layout_get_hadjustment(GTK_LAYOUT(canvas)), - gtk_layout_get_vadjustment(GTK_LAYOUT(canvas))); - e_scroll_frame_set_policy (E_SCROLL_FRAME (scrollframe), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_NEVER); - - gtk_container_add (GTK_CONTAINER (scrollframe), canvas); - - gnome_app_set_contents( GNOME_APP( app ), scrollframe ); - - /* Connect the signals */ - g_object_weak_ref (app, destroy_callback, app); - - g_signal_connect( canvas, "size_allocate", - G_CALLBACK ( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - gdk_window_set_back_pixmap( GTK_LAYOUT(canvas)->bin_window, NULL, FALSE); - - gtk_main(); - - /* Not reached. */ - return 0; -} |