From e70119b293ab8a26bdea4a56407bb0f41f1e43aa Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Thu, 26 Jul 2007 14:53:17 +0000 Subject: Use capabilities to know which options should be offered by the print 2007-07-26 Carlos Garcia Campos * backend/dvi/dvi-document.c: (dvi_document_file_exporter_begin), (dvi_document_file_exporter_do_page), (dvi_document_file_exporter_get_capabilities), (dvi_document_file_exporter_iface_init): * backend/ps/ps-document.c: (ps_document_file_exporter_begin), (ps_document_file_exporter_do_page), (ps_document_file_exporter_get_capabilities), (ps_document_file_exporter_iface_init): * backend/djvu/djvu-document.c: (djvu_document_file_exporter_begin), (djvu_document_file_exporter_end), (djvu_document_file_exporter_get_capabilities), (djvu_document_file_exporter_iface_init): * backend/tiff/tiff-document.c: (tiff_document_file_exporter_begin), (tiff_document_file_exporter_get_capabilities), (tiff_document_document_file_exporter_iface_init): * backend/pdf/ev-poppler.cc: (pdf_document_file_exporter_begin), (pdf_document_file_exporter_do_page), (pdf_document_file_exporter_get_capabilities), (pdf_document_file_exporter_iface_init): * libdocument/ev-file-exporter.[ch]: (ev_file_exporter_begin), (ev_file_exporter_get_capabilities): * shell/ev-print-job.c: (ev_print_job_use_print_dialog_settings), (idle_print_handler), (ev_print_job_print): * shell/ev-jobs.c: (ev_job_print_run): * shell/ev-window.c: (ev_window_print_send), (ev_window_print_range): Use capabilities to know which options should be offered by the print dialog depending on the document backend. svn path=/trunk/; revision=2580 --- (limited to 'backend') diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c index 88c6bc8..9b4ba82 100644 --- a/backend/djvu/djvu-document.c +++ b/backend/djvu/djvu-document.c @@ -441,30 +441,17 @@ djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface) } /* EvFileExporterIface */ -static gboolean -djvu_document_file_exporter_format_supported (EvFileExporter *exporter, - EvFileExporterFormat format) -{ - return (format == EV_FILE_FORMAT_PS); // only exporting to PS is implemented. -} - static void -djvu_document_file_exporter_begin (EvFileExporter *exporter, - EvFileExporterFormat format, - const char *filename, /* for storing the temp ps file */ - int first_page, - int last_page, - double width, - double height, - gboolean duplex) +djvu_document_file_exporter_begin (EvFileExporter *exporter, + EvFileExporterContext *fc) { DjvuDocument *djvu_document = DJVU_DOCUMENT (exporter); if (djvu_document->ps_filename) g_free (djvu_document->ps_filename); - djvu_document->ps_filename = g_strdup(filename); + djvu_document->ps_filename = g_strdup (fc->filename); - g_string_assign(djvu_document->opts, "-page="); + g_string_assign (djvu_document->opts, "-page="); } static void @@ -473,7 +460,7 @@ djvu_document_file_exporter_do_page (EvFileExporter *exporter, { DjvuDocument *djvu_document = DJVU_DOCUMENT (exporter); - g_string_append_printf(djvu_document->opts, "%d,", (rc->page) + 1); + g_string_append_printf (djvu_document->opts, "%d,", (rc->page) + 1); } static void @@ -484,29 +471,39 @@ djvu_document_file_exporter_end (EvFileExporter *exporter) DjvuDocument *djvu_document = DJVU_DOCUMENT (exporter); - FILE *fn = fopen(djvu_document->ps_filename, "w"); + FILE *fn = fopen (djvu_document->ps_filename, "w"); if (fn == NULL) { - g_warning(_("Cannot open file ā€œ%sā€."), djvu_document->ps_filename); + g_warning ("Cannot open file ā€œ%sā€.", djvu_document->ps_filename); return; } d_optv[0] = djvu_document->opts->str; ddjvu_job_t * job = ddjvu_document_print(djvu_document->d_document, fn, d_optc, d_optv); - while (!ddjvu_job_done(job) ) { + while (!ddjvu_job_done(job)) { djvu_handle_events (djvu_document, TRUE); } fclose(fn); } +static EvFileExporterCapabilities +djvu_document_file_exporter_get_capabilities (EvFileExporter *exporter) +{ + return EV_FILE_EXPORTER_CAN_PAGE_SET | + EV_FILE_EXPORTER_CAN_COPIES | + EV_FILE_EXPORTER_CAN_COLLATE | + EV_FILE_EXPORTER_CAN_REVERSE | + EV_FILE_EXPORTER_CAN_GENERATE_PS; +} + static void djvu_document_file_exporter_iface_init (EvFileExporterIface *iface) { - iface->format_supported = djvu_document_file_exporter_format_supported; iface->begin = djvu_document_file_exporter_begin; iface->do_page = djvu_document_file_exporter_do_page; iface->end = djvu_document_file_exporter_end; + iface->get_capabilities = djvu_document_file_exporter_get_capabilities; } static void diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c index c85e4f5..b6f8325 100644 --- a/backend/dvi/dvi-document.c +++ b/backend/dvi/dvi-document.c @@ -362,28 +362,15 @@ dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface) } /* EvFileExporterIface */ -static gboolean -dvi_document_file_exporter_format_supported (EvFileExporter *exporter, - EvFileExporterFormat format) -{ - return (format == EV_FILE_FORMAT_PDF); /* only exporting to PDF is implemented. */ -} - static void -dvi_document_file_exporter_begin (EvFileExporter *exporter, - EvFileExporterFormat format, - const char *filename, /* for storing the temp pdf file */ - int first_page, - int last_page, - double width, - double height, - gboolean duplex) +dvi_document_file_exporter_begin (EvFileExporter *exporter, + EvFileExporterContext *fc) { DviDocument *dvi_document = DVI_DOCUMENT(exporter); if (dvi_document->exporter_filename) g_free (dvi_document->exporter_filename); - dvi_document->exporter_filename = g_strdup(filename); + dvi_document->exporter_filename = g_strdup(fc->filename); if (dvi_document->exporter_opts) { g_string_free (dvi_document->exporter_opts, TRUE); @@ -392,7 +379,8 @@ dvi_document_file_exporter_begin (EvFileExporter *exporter, } static void -dvi_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc) +dvi_document_file_exporter_do_page (EvFileExporter *exporter, + EvRenderContext *rc) { DviDocument *dvi_document = DVI_DOCUMENT(exporter); @@ -423,22 +411,32 @@ dvi_document_file_exporter_end (EvFileExporter *exporter) g_free(command_line); if (success == FALSE) { - g_warning (_("Error: %s"), err->message); + g_warning ("Error: %s", err->message); } else if (exit_stat != 0) { - g_warning (_("Error: dvipdfm exited with non-zero status.")); + g_warning ("Error: dvipdfm exited with non-zero status."); } if (err) g_error_free(err); } +static EvFileExporterCapabilities +dvi_document_file_exporter_get_capabilities (EvFileExporter *exporter) +{ + return EV_FILE_EXPORTER_CAN_PAGE_SET | + EV_FILE_EXPORTER_CAN_COPIES | + EV_FILE_EXPORTER_CAN_COLLATE | + EV_FILE_EXPORTER_CAN_REVERSE | + EV_FILE_EXPORTER_CAN_GENERATE_PDF; +} + static void dvi_document_file_exporter_iface_init (EvFileExporterIface *iface) { - iface->format_supported = dvi_document_file_exporter_format_supported; iface->begin = dvi_document_file_exporter_begin; iface->do_page = dvi_document_file_exporter_do_page; iface->end = dvi_document_file_exporter_end; + iface->get_capabilities = dvi_document_file_exporter_get_capabilities; } #define RGB2ULONG(r,g,b) ((0xFF<<24)|(r<<16)|(g<<8)|(b)) diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index f96fdd4..4b6b114 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -1506,17 +1506,6 @@ pdf_document_find_iface_init (EvDocumentFindIface *iface) iface->cancel = pdf_document_find_cancel; } -static const gboolean supported_formats[] = { - TRUE, /* EV_FILE_FORMAT_PS */ -#ifdef HAVE_CAIRO_PDF -#ifdef HAVE_POPPLER_PAGE_RENDER - TRUE, /* EV_FILE_FORMAT_PDF */ -#else - FALSE, /* EV_FILE_FORMAT_PDF */ -#endif -#endif -}; - static void pdf_print_context_free (PdfPrintContext *ctx) { @@ -1536,22 +1525,9 @@ pdf_print_context_free (PdfPrintContext *ctx) g_free (ctx); } -static gboolean -pdf_document_file_exporter_format_supported (EvFileExporter *exporter, - EvFileExporterFormat format) -{ - return supported_formats[format]; -} - static void -pdf_document_file_exporter_begin (EvFileExporter *exporter, - EvFileExporterFormat format, - const char *filename, - int first_page, - int last_page, - double width, - double height, - gboolean duplex) +pdf_document_file_exporter_begin (EvFileExporter *exporter, + EvFileExporterContext *fc) { PdfDocument *pdf_document = PDF_DOCUMENT (exporter); PdfPrintContext *ctx; @@ -1560,22 +1536,22 @@ pdf_document_file_exporter_begin (EvFileExporter *exporter, pdf_print_context_free (pdf_document->print_ctx); pdf_document->print_ctx = g_new0 (PdfPrintContext, 1); ctx = pdf_document->print_ctx; - ctx->format = format; + ctx->format = fc->format; - switch (format) { + switch (fc->format) { case EV_FILE_FORMAT_PS: ctx->ps_file = poppler_ps_file_new (pdf_document->document, - filename, first_page, - last_page - first_page + 1); - poppler_ps_file_set_paper_size (ctx->ps_file, width, height); - poppler_ps_file_set_duplex (ctx->ps_file, duplex); + fc->filename, fc->first_page, + fc->last_page - fc->first_page + 1); + poppler_ps_file_set_paper_size (ctx->ps_file, fc->paper_width, fc->paper_height); + poppler_ps_file_set_duplex (ctx->ps_file, fc->duplex); break; case EV_FILE_FORMAT_PDF: { #ifdef HAVE_CAIRO_PDF cairo_surface_t *surface; - surface = cairo_pdf_surface_create (filename, width, height); + surface = cairo_pdf_surface_create (fc->filename, fc->paper_width, fc->paper_height); ctx->pdf_cairo = cairo_create (surface); cairo_surface_destroy (surface); #endif @@ -1587,7 +1563,8 @@ pdf_document_file_exporter_begin (EvFileExporter *exporter, } static void -pdf_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc) +pdf_document_file_exporter_do_page (EvFileExporter *exporter, + EvRenderContext *rc) { PdfDocument *pdf_document = PDF_DOCUMENT (exporter); PdfPrintContext *ctx = pdf_document->print_ctx; @@ -1629,13 +1606,30 @@ pdf_document_file_exporter_end (EvFileExporter *exporter) pdf_document->print_ctx = NULL; } +static EvFileExporterCapabilities +pdf_document_file_exporter_get_capabilities (EvFileExporter *exporter) +{ + return (EvFileExporterCapabilities) ( + EV_FILE_EXPORTER_CAN_PAGE_SET | + EV_FILE_EXPORTER_CAN_COPIES | + EV_FILE_EXPORTER_CAN_COLLATE | + EV_FILE_EXPORTER_CAN_REVERSE | + EV_FILE_EXPORTER_CAN_SCALE | +#ifdef HAVE_CAIRO_PDF +#ifdef HAVE_POPPLER_PAGE_RENDER + EV_FILE_EXPORTER_CAN_GENERATE_PDF | +#endif +#endif + EV_FILE_EXPORTER_CAN_GENERATE_PS); +} + static void pdf_document_file_exporter_iface_init (EvFileExporterIface *iface) { - iface->format_supported = pdf_document_file_exporter_format_supported; iface->begin = pdf_document_file_exporter_begin; iface->do_page = pdf_document_file_exporter_do_page; iface->end = pdf_document_file_exporter_end; + iface->get_capabilities = pdf_document_file_exporter_get_capabilities; } static void diff --git a/backend/ps/ps-document.c b/backend/ps/ps-document.c index 0931fb9..5e63687 100644 --- a/backend/ps/ps-document.c +++ b/backend/ps/ps-document.c @@ -598,22 +598,9 @@ ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface) } /* EvFileExporterIface */ -static gboolean -ps_document_file_exporter_format_supported (EvFileExporter *exporter, - EvFileExporterFormat format) -{ - return (format == EV_FILE_FORMAT_PS); -} - static void -ps_document_file_exporter_begin (EvFileExporter *exporter, - EvFileExporterFormat format, - const char *filename, - int first_page, - int last_page, - double width, - double height, - gboolean duplex) +ps_document_file_exporter_begin (EvFileExporter *exporter, + EvFileExporterContext *fc) { PSDocument *document = PS_DOCUMENT (exporter); @@ -623,11 +610,12 @@ ps_document_file_exporter_begin (EvFileExporter *exporter, document->ps_export_pagelist = g_new0 (int, document->doc->numpages); } - document->ps_export_filename = g_strdup (filename); + document->ps_export_filename = g_strdup (fc->filename); } static void -ps_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc) +ps_document_file_exporter_do_page (EvFileExporter *exporter, + EvRenderContext *rc) { PSDocument *document = PS_DOCUMENT (exporter); @@ -653,11 +641,18 @@ ps_document_file_exporter_end (EvFileExporter *exporter) } } +static EvFileExporterCapabilities +ps_document_file_exporter_get_capabilities (EvFileExporter *exporter) +{ + return EV_FILE_EXPORTER_CAN_PAGE_SET | + EV_FILE_EXPORTER_CAN_GENERATE_PS; +} + static void ps_document_file_exporter_iface_init (EvFileExporterIface *iface) { - iface->format_supported = ps_document_file_exporter_format_supported; iface->begin = ps_document_file_exporter_begin; iface->do_page = ps_document_file_exporter_do_page; iface->end = ps_document_file_exporter_end; + iface->get_capabilities = ps_document_file_exporter_get_capabilities; } diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c index 8247c2a..59748d7 100644 --- a/backend/tiff/tiff-document.c +++ b/backend/tiff/tiff-document.c @@ -450,27 +450,13 @@ tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface) } /* postscript exporter implementation */ - -static gboolean -tiff_document_file_exporter_format_supported (EvFileExporter *exporter, - EvFileExporterFormat format) -{ - return (format == EV_FILE_FORMAT_PS); -} - static void -tiff_document_file_exporter_begin (EvFileExporter *exporter, - EvFileExporterFormat format, - const char *filename, - int first_page, - int last_page, - double width, - double height, - gboolean duplex) +tiff_document_file_exporter_begin (EvFileExporter *exporter, + EvFileExporterContext *fc) { TiffDocument *document = TIFF_DOCUMENT (exporter); - document->ps_export_ctx = tiff2ps_context_new(filename); + document->ps_export_ctx = tiff2ps_context_new(fc->filename); } static void @@ -496,13 +482,23 @@ tiff_document_file_exporter_end (EvFileExporter *exporter) tiff2ps_context_finalize(document->ps_export_ctx); } +static EvFileExporterCapabilities +tiff_document_file_exporter_get_capabilities (EvFileExporter *exporter) +{ + return EV_FILE_EXPORTER_CAN_PAGE_SET | + EV_FILE_EXPORTER_CAN_COPIES | + EV_FILE_EXPORTER_CAN_COLLATE | + EV_FILE_EXPORTER_CAN_REVERSE | + EV_FILE_EXPORTER_CAN_GENERATE_PS; +} + static void tiff_document_document_file_exporter_iface_init (EvFileExporterIface *iface) { - iface->format_supported = tiff_document_file_exporter_format_supported; iface->begin = tiff_document_file_exporter_begin; iface->do_page = tiff_document_file_exporter_do_page; iface->end = tiff_document_file_exporter_end; + iface->get_capabilities = tiff_document_file_exporter_get_capabilities; } static void -- cgit v0.9.1