diff options
Diffstat (limited to 'addressbook/gui')
-rw-r--r-- | addressbook/gui/component/addressbook.c | 13 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-reflow-adapter.c | 33 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-util.c | 76 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-util.h | 23 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.c | 21 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.h | 2 |
6 files changed, 133 insertions, 35 deletions
diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index 38d44727ed..93c3bdf246 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -115,6 +115,14 @@ save_contact_cb (BonoboUIComponent *uih, void *user_data, const char *path) } static void +view_contact_cb (BonoboUIComponent *uih, void *user_data, const char *path) +{ + AddressbookView *view = (AddressbookView *) user_data; + if (view->view) + e_addressbook_view_view(view->view); +} + +static void config_cb (BonoboUIComponent *uih, void *user_data, const char *path) { addressbook_config (NULL /* XXX */); @@ -243,6 +251,10 @@ update_command_state (EAddressbookView *eav, AddressbookView *view) "/commands/ContactsSaveAsVCard", "sensitive", e_addressbook_view_can_save_as (view->view) ? "1" : "0", NULL); + bonobo_ui_component_set_prop (uic, + "/commands/ContactsView", + "sensitive", + e_addressbook_view_can_view (view->view) ? "1" : "0", NULL); /* Print Contact */ bonobo_ui_component_set_prop (uic, @@ -311,6 +323,7 @@ static BonoboUIVerb verbs [] = { BONOBO_UI_UNSAFE_VERB ("ContactsPrint", print_cb), BONOBO_UI_UNSAFE_VERB ("ContactsPrintPreview", print_preview_cb), BONOBO_UI_UNSAFE_VERB ("ContactsSaveAsVCard", save_contact_cb), + BONOBO_UI_UNSAFE_VERB ("ContactsView", view_contact_cb), BONOBO_UI_UNSAFE_VERB ("ToolSearch", search_cb), BONOBO_UI_UNSAFE_VERB ("AddressbookConfig", config_cb), diff --git a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c b/addressbook/gui/widgets/e-addressbook-reflow-adapter.c index 8c4507a5e3..06be8543c7 100644 --- a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c +++ b/addressbook/gui/widgets/e-addressbook-reflow-adapter.c @@ -125,6 +125,7 @@ get_card_list (ModelAndSelection *mns) for (iterator = list; iterator; iterator = iterator->next) { iterator->data = e_addressbook_model_card_at (priv->model, GPOINTER_TO_INT (iterator->data)); + gtk_object_ref (GTK_OBJECT (iterator->data)); } list = g_list_reverse (list); return list; @@ -138,7 +139,7 @@ save_as (GtkWidget *widget, ModelAndSelection *mns) list = get_card_list (mns); if (list) e_contact_list_save_as (_("Save as VCard"), list); - g_list_free (list); + e_free_object_list (list); model_and_selection_free (mns); } @@ -150,7 +151,7 @@ send_as (GtkWidget *widget, ModelAndSelection *mns) list = get_card_list (mns); if (list) e_card_list_send (list, E_CARD_DISPOSITION_AS_ATTACHMENT); - g_list_free (list); + e_free_object_list (list); model_and_selection_free (mns); } @@ -162,7 +163,7 @@ send_to (GtkWidget *widget, ModelAndSelection *mns) list = get_card_list (mns); if (list) e_card_list_send (list, E_CARD_DISPOSITION_AS_TO); - g_list_free (list); + e_free_object_list (list); model_and_selection_free (mns); } @@ -174,7 +175,7 @@ print (GtkWidget *widget, ModelAndSelection *mns) list = get_card_list (mns); if (list) gtk_widget_show (e_contact_print_card_list_dialog_new (list)); - g_list_free (list); + e_free_object_list (list); model_and_selection_free (mns); } @@ -187,7 +188,7 @@ print_envelope (GtkWidget *widget, ModelAndSelection *mns) list = get_card_list (mns); if (list) gtk_widget_show (e_contact_print_envelope_list_dialog_new (list)); - g_list_free (list); + e_free_object_list (list); model_and_selection_free (mns); } #endif @@ -248,7 +249,7 @@ delete (GtkWidget *widget, ModelAndSelection *mns) } } - g_list_free (list); + e_free_object_list (list); model_and_selection_free (mns); } @@ -257,27 +258,13 @@ open_card (GtkWidget *widget, ModelAndSelection *mns) { EAddressbookReflowAdapterPrivate *priv = mns->adapter->priv; GList *list; + EBook *book = e_addressbook_model_get_ebook(priv->model); list = get_card_list (mns); - if (list) { - GList *iterator; - EBook *book = e_addressbook_model_get_ebook(priv->model); - - for (iterator = list; iterator; iterator = iterator->next) { - ECard *card = iterator->data; - if (e_card_evolution_list (card)) { - e_addressbook_show_contact_list_editor (book, card, - FALSE, e_addressbook_model_editable (priv->model)); - } - else { - e_addressbook_show_contact_editor (book, card, - FALSE, e_addressbook_model_editable (priv->model)); - } - } - } + e_addressbook_show_multiple_cards (book, list, e_addressbook_model_editable (priv->model)); - g_list_free (list); + e_free_object_list (list); model_and_selection_free (mns); } diff --git a/addressbook/gui/widgets/e-addressbook-util.c b/addressbook/gui/widgets/e-addressbook-util.c index fa29b61bba..c53e16a45c 100644 --- a/addressbook/gui/widgets/e-addressbook-util.c +++ b/addressbook/gui/widgets/e-addressbook-util.c @@ -146,3 +146,79 @@ e_addressbook_show_contact_list_editor (EBook *book, ECard *card, return ce; } + +typedef struct { + EBook *book; + GList *list; + gboolean editable; +} BookAndList; + +static void +view_cards (EBook *book, GList *list, gboolean editable) +{ + for (; list; list = list->next) { + ECard *card = list->data; + if (e_card_evolution_list (card)) + e_addressbook_show_contact_list_editor (book, card, FALSE, editable); + else + e_addressbook_show_contact_editor (book, card, FALSE, editable); + } +} + +static void +view_question_clicked (GtkObject *object, int button, BookAndList *bnl) +{ + GnomeDialog *dialog = GNOME_DIALOG (object); + switch (button) { + case 0: + view_cards (bnl->book, bnl->list, bnl->editable); + break; + } + gnome_dialog_close(dialog); +} + +static void +view_question_destroyed (GtkObject *object, GList *list) +{ + gtk_main_quit(); +} + +void +e_addressbook_show_multiple_cards (EBook *book, + GList *list, + gboolean editable) +{ + if (list) { + int length = g_list_length (list); + if (length > 5) { + char *string; + GtkWidget *dialog; + BookAndList bnl; + + bnl.book = book; + bnl.list = list; + bnl.editable = editable; + + dialog = gnome_dialog_new (_("Display Cards?"), + _("Display Cards"), + GNOME_STOCK_BUTTON_CANCEL, + NULL); + + string = g_strdup_printf (_("You have requested that %d cards be cards. This will cause %d new windows to be\n" + "displayed on your screen. Do you really want to display all of these cards?"), length, length); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), gtk_label_new (string), FALSE, FALSE, 0); + g_free (string); + + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", + GTK_SIGNAL_FUNC (view_question_destroyed), &bnl); + gtk_signal_connect (GTK_OBJECT (dialog), "clicked", + GTK_SIGNAL_FUNC (view_question_clicked), &bnl); + + gtk_widget_show_all (dialog); + + gtk_main(); + } else { + view_cards (book, list, editable); + } + } +} diff --git a/addressbook/gui/widgets/e-addressbook-util.h b/addressbook/gui/widgets/e-addressbook-util.h index 3eff236654..3fa28a542d 100644 --- a/addressbook/gui/widgets/e-addressbook-util.h +++ b/addressbook/gui/widgets/e-addressbook-util.h @@ -29,15 +29,20 @@ extern "C" { #pragma } #endif /* __cplusplus */ -void e_addressbook_error_dialog (const gchar *msg, - EBookStatus status); -gint e_addressbook_prompt_save_dialog (GtkWindow *parent); -EContactEditor* e_addressbook_show_contact_editor (EBook *book, ECard *card, - gboolean is_new_card, - gboolean editable); -EContactListEditor * e_addressbook_show_contact_list_editor (EBook *book, ECard *card, - gboolean is_new_card, - gboolean editable); +void e_addressbook_error_dialog (const gchar *msg, + EBookStatus status); +gint e_addressbook_prompt_save_dialog (GtkWindow *parent); +EContactEditor *e_addressbook_show_contact_editor (EBook *book, + ECard *card, + gboolean is_new_card, + gboolean editable); +EContactListEditor *e_addressbook_show_contact_list_editor (EBook *book, + ECard *card, + gboolean is_new_card, + gboolean editable); +void e_addressbook_show_multiple_cards (EBook *book, + GList *list, + gboolean editable); #ifdef __cplusplus } diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index a421400f3c..74e804f767 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -36,6 +36,7 @@ #include <gal/util/e-unicode-i18n.h> #include <gal/unicode/gunicode.h> #include <libgnomeui/gnome-dialog-util.h> +#include <libgnomeui/gnome-stock.h> #include <libgnomeprint/gnome-print.h> #include <libgnomeprint/gnome-print-dialog.h> @@ -1513,7 +1514,15 @@ e_addressbook_view_save_as (EAddressbookView *view) GList *list = get_selected_cards (view); if (list) e_contact_list_save_as (_("Save as VCard"), list); - g_list_free (list); + e_free_object_list(list); +} + +void +e_addressbook_view_view (EAddressbookView *view) +{ + GList *list = get_selected_cards (view); + e_addressbook_show_multiple_cards (view->book, list, view->editable); + e_free_object_list(list); } void @@ -1522,7 +1531,7 @@ e_addressbook_view_send (EAddressbookView *view) GList *list = get_selected_cards (view); if (list) e_card_list_send (list, E_CARD_DISPOSITION_AS_ATTACHMENT); - g_list_free (list); + e_free_object_list(list); } void @@ -1531,7 +1540,7 @@ e_addressbook_view_send_to (EAddressbookView *view) GList *list = get_selected_cards (view); if (list) e_card_list_send (list, E_CARD_DISPOSITION_AS_TO); - g_list_free (list); + e_free_object_list(list); } void @@ -1612,6 +1621,12 @@ e_addressbook_view_can_save_as (EAddressbookView *view) return view ? e_addressbook_view_selection_nonempty (view) : FALSE; } +gboolean +e_addressbook_view_can_view (EAddressbookView *view) +{ + return view ? e_addressbook_view_selection_nonempty (view) : FALSE; +} + gboolean e_addressbook_view_can_send (EAddressbookView *view) { diff --git a/addressbook/gui/widgets/e-addressbook-view.h b/addressbook/gui/widgets/e-addressbook-view.h index d338bd9797..9c9ccce8da 100644 --- a/addressbook/gui/widgets/e-addressbook-view.h +++ b/addressbook/gui/widgets/e-addressbook-view.h @@ -105,6 +105,7 @@ void e_addressbook_view_setup_menus (EAddressbookView *view, void e_addressbook_view_discard_menus (EAddressbookView *view); void e_addressbook_view_save_as (EAddressbookView *view); +void e_addressbook_view_view (EAddressbookView *view); void e_addressbook_view_send (EAddressbookView *view); void e_addressbook_view_send_to (EAddressbookView *view); void e_addressbook_view_print (EAddressbookView *view); @@ -120,6 +121,7 @@ void e_addressbook_view_stop (EAddressbookView *view); gboolean e_addressbook_view_can_create (EAddressbookView *view); gboolean e_addressbook_view_can_print (EAddressbookView *view); gboolean e_addressbook_view_can_save_as (EAddressbookView *view); +gboolean e_addressbook_view_can_view (EAddressbookView *view); gboolean e_addressbook_view_can_send (EAddressbookView *view); gboolean e_addressbook_view_can_send_to (EAddressbookView *view); gboolean e_addressbook_view_can_delete (EAddressbookView *view); |