aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/widgets/e-minicard-view.c
diff options
context:
space:
mode:
authorChris Toshok <toshok@ximian.com>2001-05-16 13:17:09 +0800
committerChris Toshok <toshok@src.gnome.org>2001-05-16 13:17:09 +0800
commit934524b95cb86abae6b1457ff5d4853fb702cb87 (patch)
tree53789a427758341d31dd24ec9afcd6ed3d1d2951 /addressbook/gui/widgets/e-minicard-view.c
parentad6072f81f19f15cc5d6078f56039de99700a986 (diff)
downloadgsoc2013-evolution-934524b95cb86abae6b1457ff5d4853fb702cb87.tar
gsoc2013-evolution-934524b95cb86abae6b1457ff5d4853fb702cb87.tar.gz
gsoc2013-evolution-934524b95cb86abae6b1457ff5d4853fb702cb87.tar.bz2
gsoc2013-evolution-934524b95cb86abae6b1457ff5d4853fb702cb87.tar.lz
gsoc2013-evolution-934524b95cb86abae6b1457ff5d4853fb702cb87.tar.xz
gsoc2013-evolution-934524b95cb86abae6b1457ff5d4853fb702cb87.tar.zst
gsoc2013-evolution-934524b95cb86abae6b1457ff5d4853fb702cb87.zip
MinicardViewModel -> ReflowAdapter name change. (get_card_list): same.
2001-05-15 Chris Toshok <toshok@ximian.com> * gui/widgets/e-minicard-view.c (add_to_list): MinicardViewModel -> ReflowAdapter name change. (get_card_list): same. (e_minicard_view_drag_begin): same. (supported_fields_cb): model -> adapter. (adapter_changed): hook up signals and set the empty message on our adapter. (e_minicard_view_set_arg): add support for "adapter", and set model -> adapter. (e_minicard_view_get_arg): same. (disconnect_signals): no more status_message. (do_remove): track to use adapter. (e_minicard_view_class_init): add adapter arg, and remove status_message. (e_minicard_view_init): all the code here is in adapter_changed now. * gui/widgets/e-minicard-view.h (struct _EMinicardView): EMinicardViewModel -> EAddressbookReflowAdapter. (struct _EMinicardViewClass): get rid of status_message. * gui/widgets/e-minicard-view-widget.c (e_minicard_view_widget_class_init): remove the status_message signal. (e_minicard_view_widget_new): take the adapter as our argument, and store it away for when we create the view. (e_minicard_view_widget_realize): when we create the view just set the adapter field on it. also, don't connect to status_message. * gui/widgets/e-minicard-view-widget.h (struct _EMinicardViewWidget): add our adapter here, so we can pass it into the view when we create it. (struct _EMinicardViewWidgetClass): remove status_message. * gui/widgets/e-addressbook-view.c (status_message): new function, no more propagating status messages! (e_addressbook_view_init): create our model and conenct to its status_message signal. (book_writable_cb): set "editable" on the model, not our object. (e_addressbook_view_set_arg): same, but with "book" and "query" as well. (create_minicard_view): create our reflow adapter and pass it to the minicard view widget. also, call e_reflow_model_changed so it'll pick up any already present cards. (table_double_click): ADDRESSBOOK_MODEL -> TABLE_ADAPTER. (get_card_list_1): remove the cast, since we don't need it any longer. (table_right_click): ADDRESSBOOK_MODEL -> TABLE_ADAPTER. (table_drag_data_get): same. (create_table_view): create the table adapter, and use it as our ETableModel. (change_view_type): remove the status_message hook up and setting of query/book/editable. (e_addressbook_view_stop): just call e_addressbook_model_stop here instead of switching on the view type. * gui/widgets/e-addressbook-view.h (struct _EAddressbookView): add our EAddressbookModel. * gui/widgets/Makefile.am (libeminicard_a_SOURCES): add the adapter files, and remove e-minicard-view-model.[ch]. * gui/widgets/e-minicard-view-model.[ch]: removed. * gui/widgets/e-addressbook-table-adapter.c: new file. * gui/widgets/e-addressbook-table-adapter.h: new file. * gui/widgets/e-addressbook-reflow-adapter.c: new file. * gui/widgets/e-addressbook-reflow-adapter.h: new file. * gui/widgets/e-addressbook-model.c: rework this class to now subclass from ETableModel anymore. It not subclasses from GtkObject, and we use table and reflow adapters to get at the data. * gui/widgets/e-addressbook-model.h: same. svn path=/trunk/; revision=9837
Diffstat (limited to 'addressbook/gui/widgets/e-minicard-view.c')
-rw-r--r--addressbook/gui/widgets/e-minicard-view.c145
1 files changed, 64 insertions, 81 deletions
diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c
index 3a89978756..d8b3c73d9a 100644
--- a/addressbook/gui/widgets/e-minicard-view.c
+++ b/addressbook/gui/widgets/e-minicard-view.c
@@ -33,6 +33,7 @@
#include <libgnome/gnome-i18n.h>
static void canvas_destroy (GtkObject *object, EMinicardView *view);
+
static void e_minicard_view_drag_data_get(GtkWidget *widget,
GdkDragContext *context,
GtkSelectionData *selection_data,
@@ -46,16 +47,12 @@ static EReflowClass *parent_class = NULL;
/* The arguments we take */
enum {
ARG_0,
+ ARG_ADAPTER,
ARG_BOOK,
ARG_QUERY,
ARG_EDITABLE
};
-enum {
- STATUS_MESSAGE,
- LAST_SIGNAL
-};
-
enum DndTargetType {
DND_TARGET_TYPE_VCARD_LIST,
};
@@ -65,8 +62,6 @@ static GtkTargetEntry drag_types[] = {
};
static gint num_drag_types = sizeof(drag_types) / sizeof(drag_types[0]);
-static guint e_minicard_view_signals [LAST_SIGNAL] = {0, };
-
static void
e_minicard_view_drag_data_get(GtkWidget *widget,
GdkDragContext *context,
@@ -99,22 +94,22 @@ e_minicard_view_drag_data_get(GtkWidget *widget,
typedef struct {
GList *list;
- EMinicardViewModel *model;
+ EAddressbookReflowAdapter *adapter;
} ModelAndList;
static void
add_to_list (int index, gpointer closure)
{
ModelAndList *mal = closure;
- mal->list = g_list_prepend (mal->list, e_minicard_view_model_get_card (mal->model, index));
+ mal->list = g_list_prepend (mal->list, e_addressbook_reflow_adapter_get_card (mal->adapter, index));
}
static GList *
-get_card_list (EMinicardViewModel *model, ESelectionModel *selection)
+get_card_list (EAddressbookReflowAdapter *adapter, ESelectionModel *selection)
{
ModelAndList mal;
- mal.model = model;
+ mal.adapter = adapter;
mal.list = NULL;
e_selection_model_foreach (selection, add_to_list, &mal);
@@ -124,13 +119,13 @@ get_card_list (EMinicardViewModel *model, ESelectionModel *selection)
}
static int
-e_minicard_view_drag_begin (EMinicardViewModel *model, GdkEvent *event, EMinicardView *view)
+e_minicard_view_drag_begin (EAddressbookReflowAdapter *adapter, GdkEvent *event, EMinicardView *view)
{
GdkDragContext *context;
GtkTargetList *target_list;
GdkDragAction actions = GDK_ACTION_MOVE;
- view->drag_list = get_card_list (model, E_REFLOW (view)->selection);
+ view->drag_list = get_card_list (adapter, E_REFLOW (view)->selection);
g_print ("dragging %d card(s)\n", g_list_length (view->drag_list));
@@ -150,18 +145,6 @@ e_minicard_view_drag_begin (EMinicardViewModel *model, GdkEvent *event, EMinicar
return TRUE;
}
-#if 0
-static void
-status_message (EBookView *book_view,
- char* status,
- EMinicardView *view)
-{
- gtk_signal_emit (GTK_OBJECT (view),
- e_minicard_view_signals [STATUS_MESSAGE],
- status);
-}
-#endif
-
static void
card_added_cb (EBook* book, EBookStatus status, const char *id,
gpointer user_data)
@@ -211,7 +194,7 @@ supported_fields_cb (EBook *book, EBookStatus status, EList *fields, EMinicardVi
card = e_card_new("");
- gtk_object_get (GTK_OBJECT (view->model),
+ gtk_object_get (GTK_OBJECT (view->adapter),
"editable", &editable,
NULL);
@@ -228,6 +211,25 @@ supported_fields_cb (EBook *book, EBookStatus status, EList *fields, EMinicardVi
}
static void
+adapter_changed (EMinicardView *view)
+{
+ char *empty_message;
+
+ view->canvas_drag_data_get_id = 0;
+
+ empty_message = e_utf8_from_locale_string(_("\n\nThere are no items to show in this view\n\n"
+ "Double-click here to create a new Contact."));
+ gtk_object_set (GTK_OBJECT(view),
+ "empty_message", empty_message,
+ NULL);
+
+ gtk_signal_connect (GTK_OBJECT (view->adapter), "drag_begin",
+ GTK_SIGNAL_FUNC (e_minicard_view_drag_begin), view);
+
+ g_free (empty_message);
+}
+
+static void
e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
{
GnomeCanvasItem *item;
@@ -237,18 +239,28 @@ e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
view = E_MINICARD_VIEW (o);
switch (arg_id){
+ case ARG_ADAPTER:
+ if (view->adapter)
+ gtk_object_unref (GTK_OBJECT(view->adapter));
+ view->adapter = GTK_VALUE_POINTER (*arg);
+ gtk_object_ref (GTK_OBJECT (view->adapter));
+ adapter_changed (view);
+ gtk_object_set (GTK_OBJECT (view),
+ "model", view->adapter,
+ NULL);
+ break;
case ARG_BOOK:
- gtk_object_set (GTK_OBJECT (view->model),
+ gtk_object_set (GTK_OBJECT (view->adapter),
"book", GTK_VALUE_OBJECT (*arg),
NULL);
break;
case ARG_QUERY:
- gtk_object_set (GTK_OBJECT (view->model),
+ gtk_object_set (GTK_OBJECT (view->adapter),
"query", GTK_VALUE_STRING (*arg),
NULL);
break;
case ARG_EDITABLE:
- gtk_object_set (GTK_OBJECT (view->model),
+ gtk_object_set (GTK_OBJECT (view->adapter),
"editable", GTK_VALUE_BOOL (*arg),
NULL);
break;
@@ -263,19 +275,21 @@ e_minicard_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
view = E_MINICARD_VIEW (object);
switch (arg_id) {
+ case ARG_ADAPTER:
+ GTK_VALUE_POINTER (*arg) = view->adapter;
+ break;
case ARG_BOOK:
- gtk_object_get (GTK_OBJECT (view->model),
+ gtk_object_get (GTK_OBJECT (view->adapter),
"book", &GTK_VALUE_OBJECT (*arg),
NULL);
break;
- break;
case ARG_QUERY:
- gtk_object_get (GTK_OBJECT (view->model),
+ gtk_object_get (GTK_OBJECT (view->adapter),
"query", &GTK_VALUE_STRING (*arg),
NULL);
break;
case ARG_EDITABLE:
- gtk_object_get (GTK_OBJECT (view->model),
+ gtk_object_get (GTK_OBJECT (view->adapter),
"editable", &GTK_VALUE_BOOL (*arg),
NULL);
break;
@@ -291,7 +305,7 @@ e_minicard_view_destroy (GtkObject *object)
EMinicardView *view = E_MINICARD_VIEW(object);
- gtk_object_unref (GTK_OBJECT (view->model));
+ gtk_object_unref (GTK_OBJECT (view->adapter));
GTK_OBJECT_CLASS(parent_class)->destroy (object);
}
@@ -341,7 +355,7 @@ e_minicard_view_selection_event (EReflow *reflow, GnomeCanvasItem *item, GdkEven
switch (event->type) {
case GDK_BUTTON_PRESS:
if (event->button.button == 3) {
- return_val = e_minicard_view_model_right_click (view->model, event, reflow->selection);
+ return_val = e_addressbook_reflow_adapter_right_click (view->adapter, event, reflow->selection);
}
break;
default:
@@ -353,15 +367,10 @@ e_minicard_view_selection_event (EReflow *reflow, GnomeCanvasItem *item, GdkEven
static void
disconnect_signals(EMinicardView *view)
{
- if (view->model && view->status_message_id)
- gtk_signal_disconnect(GTK_OBJECT (view->model),
- view->status_message_id);
-
if (view->canvas_drag_data_get_id)
gtk_signal_disconnect(GTK_OBJECT (GNOME_CANVAS_ITEM (view)->canvas),
- view->status_message_id);
+ view->canvas_drag_data_get_id);
- view->status_message_id = 0;
view->canvas_drag_data_get_id = 0;
}
@@ -382,15 +391,22 @@ typedef struct {
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;
- gtk_object_get(GTK_OBJECT(view->model->data[i]),
- "card", &card,
- NULL);
- e_book_remove_card(view->model->book, card, cb, closure);
+
+ gtk_object_get (GTK_OBJECT(view->adapter),
+ "book", &book,
+ NULL);
+
+ card = e_addressbook_reflow_adapter_get_card (view->adapter, i);
+
+ e_book_remove_card(book, card, cb, closure);
+
+ gtk_object_unref (GTK_OBJECT (card));
}
void
@@ -446,14 +462,6 @@ e_minicard_view_jump_to_letter (EMinicardView *view,
#endif
}
-void
-e_minicard_view_stop (EMinicardView *view)
-{
- e_minicard_view_model_stop (view->model);
- disconnect_signals(view);
-}
-
-
static void
e_minicard_view_class_init (EMinicardViewClass *klass)
{
@@ -467,6 +475,8 @@ e_minicard_view_class_init (EMinicardViewClass *klass)
parent_class = gtk_type_class (PARENT_TYPE);
+ gtk_object_add_arg_type ("EMinicardView::adapter", GTK_TYPE_OBJECT,
+ GTK_ARG_READWRITE, ARG_ADAPTER);
gtk_object_add_arg_type ("EMinicardView::book", GTK_TYPE_OBJECT,
GTK_ARG_READWRITE, ARG_BOOK);
gtk_object_add_arg_type ("EMinicardView::query", GTK_TYPE_STRING,
@@ -474,16 +484,6 @@ e_minicard_view_class_init (EMinicardViewClass *klass)
gtk_object_add_arg_type ("EMinicardView::editable", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_EDITABLE);
- e_minicard_view_signals [STATUS_MESSAGE] =
- gtk_signal_new ("status_message",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (EMinicardViewClass, status_message),
- gtk_marshal_NONE__POINTER,
- GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
-
- gtk_object_class_add_signals (object_class, e_minicard_view_signals, LAST_SIGNAL);
-
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;
@@ -497,24 +497,7 @@ e_minicard_view_class_init (EMinicardViewClass *klass)
static void
e_minicard_view_init (EMinicardView *view)
{
- char *empty_message;
-
- view->model = E_MINICARD_VIEW_MODEL(e_minicard_view_model_new());
-
- view->canvas_drag_data_get_id = 0;
- view->status_message_id = 0;
-
- empty_message = e_utf8_from_locale_string(_("\n\nThere are no items to show in this view\n\n"
- "Double-click here to create a new Contact."));
- gtk_object_set (GTK_OBJECT(view),
- "empty_message", empty_message,
- "model", view->model,
- NULL);
-
- gtk_signal_connect (GTK_OBJECT (view->model), "drag_begin",
- GTK_SIGNAL_FUNC (e_minicard_view_drag_begin), view);
-
- g_free (empty_message);
+ view->adapter = NULL;
}
GtkType