From 934524b95cb86abae6b1457ff5d4853fb702cb87 Mon Sep 17 00:00:00 2001 From: Chris Toshok Date: Wed, 16 May 2001 05:17:09 +0000 Subject: MinicardViewModel -> ReflowAdapter name change. (get_card_list): same. 2001-05-15 Chris Toshok * 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 --- addressbook/gui/widgets/e-minicard-view.c | 145 +++++++++++++----------------- 1 file changed, 64 insertions(+), 81 deletions(-) (limited to 'addressbook/gui/widgets/e-minicard-view.c') 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 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); @@ -227,6 +210,25 @@ supported_fields_cb (EBook *book, EBookStatus status, EList *fields, EMinicardVi gtk_object_sink(GTK_OBJECT(card)); } +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) { @@ -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", >K_VALUE_OBJECT (*arg), NULL); break; - break; case ARG_QUERY: - gtk_object_get (GTK_OBJECT (view->model), + gtk_object_get (GTK_OBJECT (view->adapter), "query", >K_VALUE_STRING (*arg), NULL); break; case ARG_EDITABLE: - gtk_object_get (GTK_OBJECT (view->model), + gtk_object_get (GTK_OBJECT (view->adapter), "editable", >K_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 -- cgit v1.2.3