diff options
author | Christopher James Lahey <clahey@helixcode.com> | 2000-04-09 06:10:47 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2000-04-09 06:10:47 +0800 |
commit | 58e7df4e0376d1248ced78659d27d61adc1434b9 (patch) | |
tree | edda4073e9e79d89b8bb9a34498049259998718d /widgets/e-minicard/e-minicard-view.c | |
parent | 6beb74f53508f0f92ad5ed0fe7e823b6a5be76f3 (diff) | |
download | gsoc2013-evolution-58e7df4e0376d1248ced78659d27d61adc1434b9.tar gsoc2013-evolution-58e7df4e0376d1248ced78659d27d61adc1434b9.tar.gz gsoc2013-evolution-58e7df4e0376d1248ced78659d27d61adc1434b9.tar.bz2 gsoc2013-evolution-58e7df4e0376d1248ced78659d27d61adc1434b9.tar.lz gsoc2013-evolution-58e7df4e0376d1248ced78659d27d61adc1434b9.tar.xz gsoc2013-evolution-58e7df4e0376d1248ced78659d27d61adc1434b9.tar.zst gsoc2013-evolution-58e7df4e0376d1248ced78659d27d61adc1434b9.zip |
pixmap_DATA isn't defined so don't use it as a variable.
2000-04-08 Christopher James Lahey <clahey@helixcode.com>
* art/Makefile.am: pixmap_DATA isn't defined so don't use it as a variable.
* addressbook/gui/component/,
addressbook/gui/component/.cvsignore, addressbook/gui/Makefile.am,
addressbook/gui/component/addressbook-factory.c,
addressbook/gui/component/addressbook.c,
addressbook/gui/component/addressbook.gnorba,
addressbook/gui/component/addressbook.h: New directory to proivde
the component for contact management. Simply uses an e-minicard-view.
* addressbook/gui/minicard/e-minicard-view.c,
addressbook/gui/minicard/e-minicard-view.h: New subclass of
e-reflow-sorted that takes an EBook and uses it to compute the
card data to display.
* addressbook/gui/minicard/e-minicard.c,
addressbook/gui/minicard/e-minicard.h: This now backends to a
ECard instead of a ETableModel.
* addressbook/gui/minicard/e-reflow.c,
addressbook/gui/minicard/e-reflow.h: This now has a virtualized
add method.
* addressbook/gui/minicard/e-reflow-sorted.c,
addressbook/gui/minicard/e-reflow-sorted.h: New subclass of
e-reflow that allows the data to be sorted on the fly.
* addressbook/gui/minicard/test-minicard-view.c: New test to test
the new minicard view.
* addressbook/gui/minicard/test-reflow.c: Uses the new ECard
backend of the e-minicard.
* addressbook/gui/minicard/.cvsignore,
addressbook/gui/minicard/Makefile.am: Added new test. Fixed
dependencies. Added new files.
* addressbook/gui/, addressbook/gui/Makefile.am,
addressbook/gui/.cvsignore: New directory for addressbook gui
bits. Added subdirectories. Created an initial .cvsignore.
* addressbook/Makefile.am (SUBDIRS): Removed demo and added gui.
* addressbook/backend/pas/pas-backend-file.c: Added code to do
notification on bookviews when changes in the backend are made.
* addressbook/backend/pas/pas-book-view.c,
addressbook/backend/pas/pas-book-view.h: Added helper functions to
notify the view about the addition or modification of a single
card. Fixed a mistaken extra free.
* addressbook/backend/ebook/e-card-list-iterator.h: Fixed
incorrect parent class.
* addressbook/backend/ebook/test-client.c: Made this accept an
optional parameter that specifies the vcard to add.
* configure.in: Replaced widgets/e-minicard/Makefile and
addressbook/demo/Makefile with addressbook/gui/minicard/Makefile
and addressbook/gui/component/Makefile respectively.
* widgets/Makefile.am: Removed e-minicard since it's being moved
to addressbook/gui/minicard.
* widgets/e-text/e-text.c: Fixed the border width around tooltips
and made the main tooltip area yellow.
From camel/ChangeLog:
2000-04-08 Christopher James Lahey <clahey@helixcode.com>
* providers/smtp/.cvsignore: Added a .cvsignore file.
From calendar/ChangeLog:
2000-04-08 Christopher James Lahey <clahey@helixcode.com>
* gui/Makefile.am: Removed linking with libetable and libeminicard
since they weren't being used.
svn path=/trunk/; revision=2343
Diffstat (limited to 'widgets/e-minicard/e-minicard-view.c')
-rw-r--r-- | widgets/e-minicard/e-minicard-view.c | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/widgets/e-minicard/e-minicard-view.c b/widgets/e-minicard/e-minicard-view.c new file mode 100644 index 0000000000..6e7b432a8e --- /dev/null +++ b/widgets/e-minicard/e-minicard-view.c @@ -0,0 +1,239 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * e-minicard-view.c + * Copyright (C) 2000 Helix Code, Inc. + * Author: Chris Lahey <clahey@helixcode.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <config.h> +#include <gnome.h> +#include "e-minicard-view.h" +#include "e-minicard.h" +static void e_minicard_view_init (EMinicardView *reflow); +static void e_minicard_view_class_init (EMinicardViewClass *klass); +static void e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); +static void e_minicard_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_minicard_view_destroy (GtkObject *object); + +#define E_MINICARD_VIEW_DIVIDER_WIDTH 2 +#define E_MINICARD_VIEW_BORDER_WIDTH 7 +#define E_MINICARD_VIEW_FULL_GUTTER (E_MINICARD_VIEW_DIVIDER_WIDTH + E_MINICARD_VIEW_BORDER_WIDTH * 2) + +static EReflowSortedClass *parent_class = NULL; + +/* The arguments we take */ +enum { + ARG_0, + ARG_BOOK +}; + +GtkType +e_minicard_view_get_type (void) +{ + static GtkType reflow_type = 0; + + if (!reflow_type) + { + static const GtkTypeInfo reflow_info = + { + "EMinicardView", + sizeof (EMinicardView), + sizeof (EMinicardViewClass), + (GtkClassInitFunc) e_minicard_view_class_init, + (GtkObjectInitFunc) e_minicard_view_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, + }; + + reflow_type = gtk_type_unique (e_reflow_sorted_get_type (), &reflow_info); + } + + return reflow_type; +} + +static void +e_minicard_view_class_init (EMinicardViewClass *klass) +{ + GtkObjectClass *object_class; + GnomeCanvasItemClass *item_class; + + object_class = (GtkObjectClass*) klass; + item_class = (GnomeCanvasItemClass *) klass; + + parent_class = gtk_type_class (e_reflow_sorted_get_type ()); + +gtk_object_add_arg_type ("EMinicardView::book", GTK_TYPE_OBJECT, + GTK_ARG_READWRITE, ARG_BOOK); + + object_class->set_arg = e_minicard_view_set_arg; + object_class->get_arg = e_minicard_view_get_arg; + object_class->destroy = e_minicard_view_destroy; + + /* GnomeCanvasItem method overrides */ +} + +static void +e_minicard_view_init (EMinicardView *view) +{ + view->book = NULL; + view->book_view = NULL; + view->get_view_idle = 0; + view->create_card_id = 0; + view->remove_card_id = 0; + view->modify_card_id = 0; + + E_REFLOW_SORTED(view)->compare_func = (GCompareFunc) e_minicard_compare; + E_REFLOW_SORTED(view)->string_func = (EReflowStringFunc) e_minicard_get_card_id; +} + +static void +create_card(EBookView *book_view, const GList *cards, EMinicardView *view) +{ + for (; cards; cards = g_list_next(cards)) { + GnomeCanvasItem *item = gnome_canvas_item_new(GNOME_CANVAS_GROUP(view), + e_minicard_get_type(), + "card", cards->data, + NULL); + e_reflow_add_item(E_REFLOW(view), item); + } +} + +static void +modify_card(EBookView *book_view, const GList *cards, EMinicardView *view) +{ + for (; cards; cards = g_list_next(cards)) { + GnomeCanvasItem *item = gnome_canvas_item_new(GNOME_CANVAS_GROUP(view), + e_minicard_get_type(), + "card", cards->data, + NULL); + e_reflow_sorted_replace_item(E_REFLOW_SORTED(view), item); + } +} + +static void +remove_card(EBookView *book_view, const char *id, EMinicardView *view) +{ + e_reflow_sorted_remove_item(E_REFLOW_SORTED(view), id); +} + +static void +book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure) +{ + EMinicardView *view = closure; + if (view->book_view && view->create_card_id) + gtk_signal_disconnect(GTK_OBJECT (view->book_view), + view->create_card_id); + if (view->book_view && view->remove_card_id) + gtk_signal_disconnect(GTK_OBJECT (view->book_view), + view->remove_card_id); + if (view->book_view && view->modify_card_id) + gtk_signal_disconnect(GTK_OBJECT (view->book_view), + view->modify_card_id); + if (view->book_view) + gtk_object_unref(GTK_OBJECT(view->book_view)); + view->book_view = book_view; + if (view->book_view) + gtk_object_ref(GTK_OBJECT(view->book_view)); + view->create_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), + "card_added", + GTK_SIGNAL_FUNC(create_card), + view); + view->remove_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), + "card_removed", + GTK_SIGNAL_FUNC(remove_card), + view); + view->modify_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), + "card_changed", + GTK_SIGNAL_FUNC(modify_card), + view); + g_list_foreach(E_REFLOW(view)->items, (GFunc) gtk_object_destroy, NULL); + g_list_free(E_REFLOW(view)->items); +} + +static gboolean +get_view(EMinicardView *view) +{ + E_REFLOW(view)->items = NULL; + e_book_get_book_view(view->book, "", book_view_loaded, view); + + view->get_view_idle = 0; + return FALSE; +} + +static void +e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) +{ + GnomeCanvasItem *item; + EMinicardView *view; + + item = GNOME_CANVAS_ITEM (o); + view = E_MINICARD_VIEW (o); + + switch (arg_id){ + case ARG_BOOK: + if (view->book) + gtk_object_unref(GTK_OBJECT(view->book)); + view->book = E_BOOK(GTK_VALUE_OBJECT (*arg)); + if (view->book) { + gtk_object_ref(GTK_OBJECT(view->book)); + if (view->get_view_idle == 0) + g_idle_add((GSourceFunc)get_view, view); + } + break; + } +} + +static void +e_minicard_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + EMinicardView *e_minicard_view; + + e_minicard_view = E_MINICARD_VIEW (object); + + switch (arg_id) { + case ARG_BOOK: + GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_minicard_view->book); + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +static void +e_minicard_view_destroy (GtkObject *object) +{ + EMinicardView *view = E_MINICARD_VIEW(object); + + if (view->get_view_idle) + g_source_remove(view->get_view_idle); + if (view->book) + gtk_object_unref(GTK_OBJECT(view->book)); + if (view->book_view && view->create_card_id) + gtk_signal_disconnect(GTK_OBJECT (view->book_view), + view->create_card_id); + if (view->book_view && view->remove_card_id) + gtk_signal_disconnect(GTK_OBJECT (view->book_view), + view->remove_card_id); + if (view->book_view && view->modify_card_id) + gtk_signal_disconnect(GTK_OBJECT (view->book_view), + view->modify_card_id); + if (view->book_view) + gtk_object_unref(GTK_OBJECT(view->book_view)); +} |