From 350fde81677a44e5203a38c833e5175c3b649de2 Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Sun, 28 May 2000 04:26:30 +0000 Subject: Added double click to open contact editor. 2000-05-25 Christopher James Lahey * gui/component/addressbook.c, gui/component/e-addressbook-model.c, gui/component/e-addressbook-model.h: Added double click to open contact editor. svn path=/trunk/; revision=3239 --- addressbook/gui/component/addressbook.c | 60 +++++++++++++++++++++++++ addressbook/gui/component/e-addressbook-model.c | 15 +++++++ addressbook/gui/component/e-addressbook-model.h | 4 ++ 3 files changed, 79 insertions(+) (limited to 'addressbook/gui/component') 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 @@ -93,6 +93,13 @@ card_added_cb (EBook* book, EBookStatus status, const char *id, g_print ("%s: %s(): a card was added\n", __FILE__, __FUNCTION__); } +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) { @@ -718,6 +725,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) { @@ -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_ */ -- cgit v1.2.3