diff options
Diffstat (limited to 'addressbook')
-rw-r--r-- | addressbook/ChangeLog | 7 | ||||
-rw-r--r-- | addressbook/contact-editor/e-contact-editor.c | 6 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.c | 107 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor.c | 6 |
4 files changed, 119 insertions, 7 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 6e7786d6fc..45a11057b2 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,10 @@ +2000-06-10 Christopher James Lahey <clahey@helixcode.com> + + * contact-editor/e-contact-editor.c: Do e_card_simple_sync and + extract_info more often. + + * gui/component/addressbook.c: Added table printing code. + 2000-06-09 Ettore Perazzoli <ettore@helixcode.com> * gui/component/addressbook-component.c (factory_fn): Pass NULL diff --git a/addressbook/contact-editor/e-contact-editor.c b/addressbook/contact-editor/e-contact-editor.c index 1b7bf6b202..17a6c52119 100644 --- a/addressbook/contact-editor/e-contact-editor.c +++ b/addressbook/contact-editor/e-contact-editor.c @@ -506,8 +506,8 @@ categories_clicked(GtkWidget *button, EContactEditor *editor) static void save_card (EContactEditor *ce) { - e_card_simple_sync_card (ce->simple); extract_info (ce); + e_card_simple_sync_card (ce->simple); if (ce->is_new_card) gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[ADD_CARD], @@ -564,6 +564,10 @@ file_save_as_cb (GtkWidget *widget, gpointer data) ECard *card; ce = E_CONTACT_EDITOR (data); + + extract_info (ce); + e_card_simple_sync_card (ce->simple); + card = ce->card; e_contact_save_as("Save as VCard", card); } diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index 3026aa4811..805a11f574 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -29,6 +29,10 @@ #include "e-contact-editor.h" #include "e-contact-save-as.h" #include "e-ldap-server-dialog.h" +#include <libgnomeprint/gnome-print.h> +#include <libgnomeprint/gnome-print-dialog.h> +#include <libgnomeprint/gnome-print-master.h> +#include <libgnomeprint/gnome-print-master-preview.h> #include <addressbook/printing/e-contact-print.h> @@ -85,7 +89,7 @@ control_deactivate (BonoboControl *control, BonoboUIHandler *uih) static void do_nothing_cb (BonoboUIHandler *uih, void *user_data, const char *path) { - printf ("Yow! I am called back!\n"); + g_print ("Yow! I am called back!\n"); } static void @@ -301,13 +305,106 @@ delete_contact_cb (BonoboUIHandler *uih, void *user_data, const char *path) } static void +e_contact_print_destroy(GnomeDialog *dialog, gpointer data) +{ + ETable *table = gtk_object_get_data(GTK_OBJECT(dialog), "table"); + EPrintable *printable = gtk_object_get_data(GTK_OBJECT(dialog), "printable"); + gtk_object_unref(GTK_OBJECT(printable)); + gtk_object_unref(GTK_OBJECT(table)); +} + +static void +e_contact_print_button(GnomeDialog *dialog, gint button, gpointer data) +{ + GnomePrintMaster *master; + GnomePrintContext *pc; + EPrintable *printable = gtk_object_get_data(GTK_OBJECT(dialog), "printable"); + GtkWidget *preview; + switch( button ) { + case GNOME_PRINT_PRINT: + master = gnome_print_master_new_from_dialog( GNOME_PRINT_DIALOG(dialog) ); + pc = gnome_print_master_get_context( master ); + e_printable_reset(printable); + while (e_printable_data_left(printable)) { + if (gnome_print_gsave(pc) == -1) + /* FIXME */; + if (gnome_print_translate(pc, .5 * 72, .5 * 72) == -1) + /* FIXME */; + e_printable_print_page(printable, + pc, + 7.5 * 72, + 10.5 * 72, + TRUE); + if (gnome_print_grestore(pc) == -1) + /* FIXME */; + if (gnome_print_showpage(pc) == -1) + /* FIXME */; + } + gnome_print_master_close(master); + gnome_print_master_print(master); + gtk_object_unref(GTK_OBJECT(master)); + gnome_dialog_close(dialog); + break; + case GNOME_PRINT_PREVIEW: + master = gnome_print_master_new_from_dialog( GNOME_PRINT_DIALOG(dialog) ); + pc = gnome_print_master_get_context( master ); + e_printable_reset(printable); + while (e_printable_data_left(printable)) { + if (gnome_print_gsave(pc) == -1) + /* FIXME */; + if (gnome_print_translate(pc, .5 * 72, .5 * 72) == -1) + /* FIXME */; + e_printable_print_page(printable, + pc, + 7.5 * 72, + 10.5 * 72, + TRUE); + if (gnome_print_grestore(pc) == -1) + /* FIXME */; + if (gnome_print_showpage(pc) == -1) + /* FIXME */; + } + gnome_print_master_close(master); + preview = GTK_WIDGET(gnome_print_master_preview_new(master, "Print Preview")); + gtk_widget_show_all(preview); + gtk_object_unref(GTK_OBJECT(master)); + break; + case GNOME_PRINT_CANCEL: + gnome_dialog_close(dialog); + break; + } +} + +static void print_cb (BonoboUIHandler *uih, void *user_data, const char *path) { AddressbookView *view = (AddressbookView *) user_data; - char *query = get_query(view); - GtkWidget *print = e_contact_print_dialog_new(view->book, query); - g_free(query); - gtk_widget_show_all(print); + if (view->view) { + char *query = get_query(view); + GtkWidget *print = e_contact_print_dialog_new(view->book, query); + g_free(query); + gtk_widget_show_all(print); + } else { + GtkWidget *dialog; + EPrintable *printable; + + dialog = gnome_print_dialog_new("Print cards", GNOME_PRINT_DIALOG_RANGE | GNOME_PRINT_DIALOG_COPIES); + gnome_print_dialog_construct_range_any(GNOME_PRINT_DIALOG(dialog), GNOME_PRINT_RANGE_ALL | GNOME_PRINT_RANGE_SELECTION, + NULL, NULL, NULL); + + printable = e_table_get_printable(E_TABLE(view->table)); + + gtk_object_ref(GTK_OBJECT(view->table)); + + gtk_object_set_data(GTK_OBJECT(dialog), "table", view->table); + gtk_object_set_data(GTK_OBJECT(dialog), "printable", printable); + + gtk_signal_connect(GTK_OBJECT(dialog), + "clicked", GTK_SIGNAL_FUNC(e_contact_print_button), NULL); + gtk_signal_connect(GTK_OBJECT(dialog), + "destroy", GTK_SIGNAL_FUNC(e_contact_print_destroy), NULL); + gtk_widget_show(dialog); + } } static GnomeUIInfo gnome_toolbar [] = { diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index 1b7bf6b202..17a6c52119 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -506,8 +506,8 @@ categories_clicked(GtkWidget *button, EContactEditor *editor) static void save_card (EContactEditor *ce) { - e_card_simple_sync_card (ce->simple); extract_info (ce); + e_card_simple_sync_card (ce->simple); if (ce->is_new_card) gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[ADD_CARD], @@ -564,6 +564,10 @@ file_save_as_cb (GtkWidget *widget, gpointer data) ECard *card; ce = E_CONTACT_EDITOR (data); + + extract_info (ce); + e_card_simple_sync_card (ce->simple); + card = ce->card; e_contact_save_as("Save as VCard", card); } |