diff options
Diffstat (limited to 'addressbook/gui')
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.c | 36 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.h | 18 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.c | 14 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view-widget.c | 34 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view-widget.h | 5 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view.c | 36 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view.h | 7 |
7 files changed, 143 insertions, 7 deletions
diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c index 35c8dda745..c40c21f3bb 100644 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ b/addressbook/gui/widgets/e-addressbook-model.c @@ -32,6 +32,13 @@ enum { ARG_EDITABLE, }; +enum { + STATUS_MESSAGE, + LAST_SIGNAL +}; + +static guint e_addressbook_model_signals [LAST_SIGNAL] = {0, }; + static void remove_book_view(EAddressbookModel *model) { @@ -44,10 +51,14 @@ remove_book_view(EAddressbookModel *model) if (model->book_view && model->modify_card_id) gtk_signal_disconnect(GTK_OBJECT (model->book_view), model->modify_card_id); + if (model->book_view && model->status_message_id) + gtk_signal_disconnect(GTK_OBJECT (model->book_view), + model->status_message_id); model->create_card_id = 0; model->remove_card_id = 0; model->modify_card_id = 0; + model->status_message_id = 0; if (model->book_view) gtk_object_unref(GTK_OBJECT(model->book_view)); @@ -236,6 +247,16 @@ modify_card(EBookView *book_view, } static void +status_message (EBookView *book_view, + char* status, + EAddressbookModel *model) +{ + gtk_signal_emit (GTK_OBJECT (model), + e_addressbook_model_signals [STATUS_MESSAGE], + status); +} + +static void e_addressbook_model_class_init (GtkObjectClass *object_class) { ETableModelClass *model_class = (ETableModelClass *) object_class; @@ -252,6 +273,16 @@ e_addressbook_model_class_init (GtkObjectClass *object_class) GTK_ARG_READWRITE, ARG_QUERY); gtk_object_add_arg_type ("EAddressbookModel::editable", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_EDITABLE); + + e_addressbook_model_signals [STATUS_MESSAGE] = + gtk_signal_new ("status_message", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EAddressbookModelClass, status_message), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + + gtk_object_class_add_signals (object_class, e_addressbook_model_signals, LAST_SIGNAL); model_class->column_count = addressbook_col_count; model_class->row_count = addressbook_row_count; @@ -277,6 +308,7 @@ e_addressbook_model_init (GtkObject *object) model->create_card_id = 0; model->remove_card_id = 0; model->modify_card_id = 0; + model->status_message_id = 0; model->data = NULL; model->data_count = 0; model->editable = TRUE; @@ -304,6 +336,10 @@ book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointe "card_changed", GTK_SIGNAL_FUNC(modify_card), model); + model->status_message_id = gtk_signal_connect(GTK_OBJECT(model->book_view), + "status_message", + GTK_SIGNAL_FUNC(status_message), + model); for ( i = 0; i < model->data_count; i++ ) { gtk_object_unref(GTK_OBJECT(model->data[i])); diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h index 860fb641ac..79a606b314 100644 --- a/addressbook/gui/widgets/e-addressbook-model.h +++ b/addressbook/gui/widgets/e-addressbook-model.h @@ -20,7 +20,10 @@ 3 Phone */ -typedef struct { +typedef struct _EAddressbookModel EAddressbookModel; +typedef struct _EAddressbookModelClass EAddressbookModelClass; + +struct _EAddressbookModel { ETableModel parent; /* item specific fields */ @@ -33,16 +36,21 @@ typedef struct { ECardSimple **data; int data_count; - int create_card_id, remove_card_id, modify_card_id; + int create_card_id, remove_card_id, modify_card_id, status_message_id; guint editable : 1; guint first_get_view : 1; -} EAddressbookModel; +}; -typedef struct { +struct _EAddressbookModelClass { ETableModelClass parent_class; -} EAddressbookModelClass; + + /* + * Signals + */ + void (*status_message) (EAddressbookModel *model, const gchar *message); +}; GtkType e_addressbook_model_get_type (void); diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index 816c83ca36..416b1e71e6 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -152,8 +152,9 @@ e_addressbook_view_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) switch (arg_id){ case ARG_BOOK: - if (eav->book) + if (eav->book) { gtk_object_unref(GTK_OBJECT(eav->book)); + } if (GTK_VALUE_OBJECT(*arg)) { eav->book = E_BOOK(GTK_VALUE_OBJECT(*arg)); gtk_object_ref(GTK_OBJECT(eav->book)); @@ -534,6 +535,12 @@ table_right_click(ETableScrolled *table, gint row, gint col, GdkEvent *event, EA return FALSE; } +static void +status_message (GtkObject *object, const gchar *message, EAddressbookView *eav) +{ + printf ("status = %s\n", message); +} + #define SPEC "<?xml version=\"1.0\"?> \ <ETableSpecification click-to-add=\"true\" draw-grid=\"true\" _click-to-add-message=\"* Click here to add a contact *\"> \ <ETableColumn model_col= \"0\" _title=\"Name\" expansion=\"1.0\" minimum_width=\"20\" resizable=\"true\" cell=\"string\" compare=\"string\"/> \ @@ -641,6 +648,11 @@ change_view_type (EAddressbookView *view, EAddressbookViewType view_type) view->view_type = view_type; + gtk_signal_connect (view->object, + "status_message", + GTK_SIGNAL_FUNC (status_message), + view); + gtk_object_set(view->object, "query", view->query, "book", view->book, diff --git a/addressbook/gui/widgets/e-minicard-view-widget.c b/addressbook/gui/widgets/e-minicard-view-widget.c index c6809bf1d0..fbbcd6cf00 100644 --- a/addressbook/gui/widgets/e-minicard-view-widget.c +++ b/addressbook/gui/widgets/e-minicard-view-widget.c @@ -42,6 +42,14 @@ enum { ARG_QUERY }; +enum { + STATUS_MESSAGE, + LAST_SIGNAL +}; + +static guint e_minicard_view_widget_signals [LAST_SIGNAL] = {0, }; + + GtkType e_minicard_view_widget_get_type (void) { @@ -85,6 +93,16 @@ e_minicard_view_widget_class_init (EMinicardViewWidgetClass *klass) gtk_object_add_arg_type ("EMinicardViewWidget::query", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_QUERY); + e_minicard_view_widget_signals [STATUS_MESSAGE] = + gtk_signal_new ("status_message", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EMinicardViewWidgetClass, status_message), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + + gtk_object_class_add_signals (object_class, e_minicard_view_widget_signals, LAST_SIGNAL); + object_class->set_arg = e_minicard_view_widget_set_arg; object_class->get_arg = e_minicard_view_widget_get_arg; object_class->destroy = e_minicard_view_widget_destroy; @@ -176,6 +194,16 @@ e_minicard_view_widget_destroy (GtkObject *object) } static void +status_message (EMinicardView *mini_view, + char* status, + EMinicardViewWidget *view) +{ + gtk_signal_emit (GTK_OBJECT (view), + e_minicard_view_widget_signals [STATUS_MESSAGE], + status); +} + +static void e_minicard_view_widget_realize (GtkWidget *widget) { EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(widget); @@ -196,6 +224,12 @@ e_minicard_view_widget_realize (GtkWidget *widget) "height", (double) 100, "minimum_width", (double) 100, NULL ); + + gtk_signal_connect(GTK_OBJECT(view->emv), + "status_message", + GTK_SIGNAL_FUNC(status_message), + view); + gtk_object_set(GTK_OBJECT(view->emv), "book", view->book, "query", view->query, diff --git a/addressbook/gui/widgets/e-minicard-view-widget.h b/addressbook/gui/widgets/e-minicard-view-widget.h index cf20c9a4df..0deb920ffa 100644 --- a/addressbook/gui/widgets/e-minicard-view-widget.h +++ b/addressbook/gui/widgets/e-minicard-view-widget.h @@ -55,6 +55,11 @@ struct _EMinicardViewWidget struct _EMinicardViewWidgetClass { ECanvasClass parent_class; + + /* + * Signals + */ + void (*status_message) (EMinicardView *mini_view, const gchar *message); }; GtkType e_minicard_view_widget_get_type (void); diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c index 7169e41542..d3f08b71ab 100644 --- a/addressbook/gui/widgets/e-minicard-view.c +++ b/addressbook/gui/widgets/e-minicard-view.c @@ -44,6 +44,13 @@ enum { ARG_QUERY }; +enum { + STATUS_MESSAGE, + LAST_SIGNAL +}; + +static guint e_minicard_view_signals [LAST_SIGNAL] = {0, }; + GtkType e_minicard_view_get_type (void) { @@ -84,6 +91,16 @@ e_minicard_view_class_init (EMinicardViewClass *klass) GTK_ARG_READWRITE, ARG_BOOK); gtk_object_add_arg_type ("EMinicardView::query", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_QUERY); + + 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; @@ -104,6 +121,7 @@ e_minicard_view_init (EMinicardView *view) view->create_card_id = 0; view->remove_card_id = 0; view->modify_card_id = 0; + view->status_message_id = 0; view->canvas_destroy_id = 0; view->first_get_view = TRUE; @@ -145,6 +163,16 @@ modify_card(EBookView *book_view, const GList *cards, EMinicardView *view) } static void +status_message (EBookView *book_view, + char* status, + EMinicardView *view) +{ + gtk_signal_emit (GTK_OBJECT (view), + e_minicard_view_signals [STATUS_MESSAGE], + status); +} + +static void remove_card(EBookView *book_view, const char *id, EMinicardView *view) { e_reflow_sorted_remove_item(E_REFLOW_SORTED(view), id); @@ -181,6 +209,10 @@ book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointe "card_changed", GTK_SIGNAL_FUNC(modify_card), view); + view->status_message_id = gtk_signal_connect(GTK_OBJECT(view->book_view), + "status_message", + GTK_SIGNAL_FUNC(status_message), + view); g_list_foreach(E_REFLOW(view)->items, (GFunc) gtk_object_unref, NULL); g_list_foreach(E_REFLOW(view)->items, (GFunc) gtk_object_destroy, NULL); @@ -373,10 +405,14 @@ disconnect_signals(EMinicardView *view) if (view->book_view && view->modify_card_id) gtk_signal_disconnect(GTK_OBJECT (view->book_view), view->modify_card_id); + if (view->book_view && view->status_message_id) + gtk_signal_disconnect(GTK_OBJECT (view->book_view), + view->status_message_id); view->create_card_id = 0; view->remove_card_id = 0; view->modify_card_id = 0; + view->status_message_id = 0; } static void diff --git a/addressbook/gui/widgets/e-minicard-view.h b/addressbook/gui/widgets/e-minicard-view.h index e4c1be870a..804290d427 100644 --- a/addressbook/gui/widgets/e-minicard-view.h +++ b/addressbook/gui/widgets/e-minicard-view.h @@ -72,7 +72,7 @@ struct _EMinicardView int canvas_destroy_id; - int create_card_id, remove_card_id, modify_card_id; + int create_card_id, remove_card_id, modify_card_id, status_message_id; guint first_get_view : 1; }; @@ -80,6 +80,11 @@ struct _EMinicardView struct _EMinicardViewClass { EReflowSortedClass parent_class; + + /* + * Signals + */ + void (*status_message) (EMinicardView *mini_view, const gchar *message); }; GtkType e_minicard_view_get_type (void); |