diff options
Diffstat (limited to 'addressbook/gui')
-rw-r--r-- | addressbook/gui/component/addressbook.c | 60 | ||||
-rw-r--r-- | addressbook/gui/component/e-addressbook-model.c | 15 | ||||
-rw-r--r-- | addressbook/gui/component/e-addressbook-model.h | 4 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.c | 15 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.h | 4 |
5 files changed, 98 insertions, 0 deletions
diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index 61a07db87c..dab940d088 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -94,6 +94,13 @@ card_added_cb (EBook* book, EBookStatus status, const char *id, } static void +card_modified_cb (EBook* book, EBookStatus status, + gpointer user_data) +{ + g_print ("%s: %s(): a card was modified\n", __FILE__, __FUNCTION__); +} + +static void new_contact_cb (BonoboUIHandler *uih, void *user_data, const char *path) { gint result; @@ -719,6 +726,56 @@ teardown_table_view (AddressbookView *view) } static void +table_double_click(ETable *table, gint row, AddressbookView *view) +{ + ECard *card = e_addressbook_model_get_card(E_ADDRESSBOOK_MODEL(view->model), row); + gint result; + GtkWidget* contact_editor; + EBook *book; + GtkWidget* dlg = gnome_dialog_new ("Contact Editor", "Save", "Cancel", NULL); + + contact_editor = e_contact_editor_new(card); + gtk_object_unref(GTK_OBJECT(card)); + + gtk_window_set_policy(GTK_WINDOW(dlg), FALSE, TRUE, FALSE); + + gtk_object_get(GTK_OBJECT(view->model), + "book", &book, + NULL); + + g_assert (E_IS_BOOK (book)); + + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dlg)->vbox), + contact_editor, TRUE, TRUE, 0); + + gtk_widget_show (contact_editor); + gtk_widget_show (dlg); + + gnome_dialog_close_hides (GNOME_DIALOG (dlg), TRUE); + result = gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); + + + /* If the user clicks "okay"...*/ + if (result == 0) { + ECard *card; + g_assert (contact_editor); + g_assert (GTK_IS_OBJECT (contact_editor)); + gtk_object_get(GTK_OBJECT(contact_editor), + "card", &card, + NULL); + + /* Add the card in the contact editor to our ebook */ + e_book_commit_card ( + book, + card, + card_modified_cb, + NULL); + } + + gnome_dialog_close(GNOME_DIALOG (dlg)); +} + +static void create_table_view (AddressbookView *view, char *initial_query) { ECell *cell_left_just; @@ -765,6 +822,9 @@ create_table_view (AddressbookView *view, char *initial_query) initial layout. It does the rest. */ view->table = e_table_new (e_table_header, E_TABLE_MODEL(view->model), SPEC); + gtk_signal_connect(GTK_OBJECT(view->table), "double_click", + GTK_SIGNAL_FUNC(table_double_click), view); + gtk_box_pack_start(GTK_BOX(view->vbox), view->table, TRUE, TRUE, 0); gtk_widget_show_all( GTK_WIDGET(view->table) ); diff --git a/addressbook/gui/component/e-addressbook-model.c b/addressbook/gui/component/e-addressbook-model.c index 598f6786cf..5d71757b60 100644 --- a/addressbook/gui/component/e-addressbook-model.c +++ b/addressbook/gui/component/e-addressbook-model.c @@ -284,6 +284,21 @@ get_view(EAddressbookModel *model) return FALSE; } +ECard * +e_addressbook_model_get_card(EAddressbookModel *model, + int row) +{ + if (model->data && row < model->data_count) { + ECard *card; + gtk_object_get(GTK_OBJECT(model->data[row]), + "card", &card, + NULL); + gtk_object_ref(GTK_OBJECT(card)); + return card; + } + return NULL; +} + static void e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) { diff --git a/addressbook/gui/component/e-addressbook-model.h b/addressbook/gui/component/e-addressbook-model.h index a428b076a9..bff9a21d00 100644 --- a/addressbook/gui/component/e-addressbook-model.h +++ b/addressbook/gui/component/e-addressbook-model.h @@ -45,4 +45,8 @@ typedef struct { GtkType e_addressbook_model_get_type (void); ETableModel *e_addressbook_model_new (void); +/* Returns object with ref count of 1. */ +ECard *e_addressbook_model_get_card(EAddressbookModel *model, + int row); + #endif /* _E_ADDRESSBOOK_MODEL_H_ */ diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c index 598f6786cf..5d71757b60 100644 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ b/addressbook/gui/widgets/e-addressbook-model.c @@ -284,6 +284,21 @@ get_view(EAddressbookModel *model) return FALSE; } +ECard * +e_addressbook_model_get_card(EAddressbookModel *model, + int row) +{ + if (model->data && row < model->data_count) { + ECard *card; + gtk_object_get(GTK_OBJECT(model->data[row]), + "card", &card, + NULL); + gtk_object_ref(GTK_OBJECT(card)); + return card; + } + return NULL; +} + static void e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) { diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h index a428b076a9..bff9a21d00 100644 --- a/addressbook/gui/widgets/e-addressbook-model.h +++ b/addressbook/gui/widgets/e-addressbook-model.h @@ -45,4 +45,8 @@ typedef struct { GtkType e_addressbook_model_get_type (void); ETableModel *e_addressbook_model_new (void); +/* Returns object with ref count of 1. */ +ECard *e_addressbook_model_get_card(EAddressbookModel *model, + int row); + #endif /* _E_ADDRESSBOOK_MODEL_H_ */ |