diff options
-rw-r--r-- | addressbook/ChangeLog | 12 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.c | 14 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.c | 51 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.h | 1 | ||||
-rw-r--r-- | addressbook/printing/e-contact-print.c | 46 | ||||
-rw-r--r-- | addressbook/printing/e-contact-print.h | 1 |
6 files changed, 121 insertions, 4 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 9e45da5e5c..ba25fe1b55 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,15 @@ +2001-09-21 Christopher James Lahey <clahey@ximian.com> + + * gui/component/addressbook.c (print_preview_cb): Hooked up print + preview button. + + * gui/widgets/e-addressbook-view.c, + gui/widgets/e-addressbook-view.h + (e_addressbook_view_print_preview): Added this function. + + * printing/e-contact-print.c, printing/e-contact-print.h + (e_contact_print_preview): Added this function. + 2001-09-19 Jon Trowbridge <trow@ximian.com> * backend/ebook/e-destination.c (name_and_email_simple_query_cb): diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index cd5ba138a8..028a866909 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -130,6 +130,13 @@ print_cb (BonoboUIComponent *uih, void *user_data, const char *path) } static void +print_preview_cb (BonoboUIComponent *uih, void *user_data, const char *path) +{ + AddressbookView *view = (AddressbookView *) user_data; + e_addressbook_view_print_preview(view->view); +} + +static void stop_loading_cb (BonoboUIComponent *uih, void *user_data, const char *path) { AddressbookView *view = (AddressbookView *) user_data; @@ -204,6 +211,12 @@ update_command_state (EAddressbookView *eav, AddressbookView *view) "sensitive", e_addressbook_view_can_print (view->view) ? "1" : "0", NULL); + /* Print Contact */ + bonobo_ui_component_set_prop (uic, + "/commands/ContactsPrintPreview", + "sensitive", + e_addressbook_view_can_print (view->view) ? "1" : "0", NULL); + /* Delete Contact */ bonobo_ui_component_set_prop (uic, "/commands/ContactDelete", @@ -253,6 +266,7 @@ change_view_type (AddressbookView *view, EAddressbookViewType view_type) 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 ("ToolSearch", search_cb), diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index 50ae8d2d0e..095f1dbf48 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -1200,7 +1200,6 @@ get_selection_model (EAddressbookView *view) return E_SELECTION_MODEL(E_TABLE_SCROLLED(view->widget)->table->selection); } - void e_addressbook_view_print(EAddressbookView *view) { @@ -1241,6 +1240,56 @@ e_addressbook_view_print(EAddressbookView *view) } } +void +e_addressbook_view_print_preview(EAddressbookView *view) +{ + if (view->view_type == E_ADDRESSBOOK_VIEW_MINICARD) { + char *query; + EBook *book; + + gtk_object_get (GTK_OBJECT(view->model), + "query", &query, + "book", &book, + NULL); + e_contact_print_preview(book, query); + g_free(query); + } else if (view->view_type == E_ADDRESSBOOK_VIEW_TABLE) { + EPrintable *printable; + ETable *etable; + GnomePrintMaster *master; + GnomePrintContext *pc; + GtkWidget *preview; + + gtk_object_get(GTK_OBJECT(view->widget), "table", &etable, NULL); + printable = e_table_get_printable(etable); + + master = gnome_print_master_new(); + gnome_print_master_set_copies (master, 1, FALSE); + 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, 72, 72) == -1) + /* FIXME */; + e_printable_print_page(printable, + pc, + 6.5 * 72, + 9 * 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)); + gtk_object_unref(GTK_OBJECT(printable)); + } +} + static void card_deleted_cb (EBook* book, EBookStatus status, gpointer user_data) { diff --git a/addressbook/gui/widgets/e-addressbook-view.h b/addressbook/gui/widgets/e-addressbook-view.h index 621f26bb2a..c2fe0588b4 100644 --- a/addressbook/gui/widgets/e-addressbook-view.h +++ b/addressbook/gui/widgets/e-addressbook-view.h @@ -106,6 +106,7 @@ void e_addressbook_view_save_as (EAddressbookView *view); void e_addressbook_view_send (EAddressbookView *view); void e_addressbook_view_send_to (EAddressbookView *view); void e_addressbook_view_print (EAddressbookView *view); +void e_addressbook_view_print_preview (EAddressbookView *view); void e_addressbook_view_delete_selection (EAddressbookView *view); void e_addressbook_view_cut (EAddressbookView *view); void e_addressbook_view_copy (EAddressbookView *view); diff --git a/addressbook/printing/e-contact-print.c b/addressbook/printing/e-contact-print.c index d1a0324f6d..c4118e0dbf 100644 --- a/addressbook/printing/e-contact-print.c +++ b/addressbook/printing/e-contact-print.c @@ -425,7 +425,7 @@ e_contact_get_card_size(ECardSimple *simple, EContactPrintContext *ctxt) height += gnome_font_get_size (ctxt->style->headings_font) * .2; - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { + for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING; field++) { char *string; string = e_card_simple_get(simple, field); if (string && *string) { @@ -471,7 +471,7 @@ e_contact_print_card (ECardSimple *simple, EContactPrintContext *ctxt) ctxt->y -= gnome_font_get_size (ctxt->style->headings_font) * .2; - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { + for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING; field++) { char *string; string = e_card_simple_get(simple, field); if (string && *string) { @@ -654,7 +654,7 @@ e_contact_get_phone_list_size(ECardSimple *simple, EContactPrintContext *ctxt) height += gnome_font_get_size (ctxt->style->headings_font) * .2; - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { + for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING; field++) { char *string; string = e_card_simple_get(simple, field); if (string && *string) { @@ -1104,6 +1104,46 @@ e_contact_print_dialog_new(EBook *book, char *query) return dialog; } +void +e_contact_print_preview(EBook *book, char *query) +{ + EContactPrintContext *ctxt = g_new(EContactPrintContext, 1); + EContactPrintStyle *style = g_new(EContactPrintStyle, 1); + GnomePrintMaster *master; + GnomePrintContext *pc; + gdouble font_size; + + master = gnome_print_master_new(); + gnome_print_master_set_copies (master, 1, FALSE); + pc = gnome_print_master_get_context (master); + e_contact_build_style (style); + + ctxt->x = 0; + ctxt->y = 0; + ctxt->column = 0; + ctxt->style = style; + ctxt->master = master; + ctxt->first_section = TRUE; + ctxt->first_char_on_page = 'A' - 1; + ctxt->type = GNOME_PRINT_PREVIEW; + + font_size = 72 * ctxt->style->page_height / 27.0 / 2.0; + ctxt->letter_heading_font = gnome_font_new(gnome_font_get_name(ctxt->style->headings_font), gnome_font_get_size (ctxt->style->headings_font) * 1.5); + ctxt->letter_tab_font = gnome_font_new(gnome_font_get_name(ctxt->style->headings_font), font_size); + + ctxt->pc = GNOME_PRINT_CONTEXT(gnome_print_multipage_new_from_sizes(pc, + 72 * style->paper_width, + 72 * style->paper_height, + 72 * style->page_width, + 72 * style->page_height)); + + ctxt->book = book; + ctxt->query = g_strdup(query); + ctxt->cards = NULL; + gtk_object_ref(GTK_OBJECT(book)); + e_contact_do_print(book, ctxt->query, ctxt); +} + GtkWidget * e_contact_print_card_dialog_new(ECard *card) { diff --git a/addressbook/printing/e-contact-print.h b/addressbook/printing/e-contact-print.h index b4060c64ab..9918248b3a 100644 --- a/addressbook/printing/e-contact-print.h +++ b/addressbook/printing/e-contact-print.h @@ -30,6 +30,7 @@ #include "e-contact-print-types.h" GtkWidget *e_contact_print_dialog_new(EBook *book, char *query); +void e_contact_print_preview(EBook *book, char *query); GtkWidget *e_contact_print_card_dialog_new(ECard *card); GtkWidget *e_contact_print_card_list_dialog_new(GList *list); |