aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog12
-rw-r--r--addressbook/gui/component/addressbook.c14
-rw-r--r--addressbook/gui/widgets/e-addressbook-view.c51
-rw-r--r--addressbook/gui/widgets/e-addressbook-view.h1
-rw-r--r--addressbook/printing/e-contact-print.c46
-rw-r--r--addressbook/printing/e-contact-print.h1
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);