diff options
author | David Tardon <dtardon@redhat.com> | 2011-11-23 09:25:11 +0100 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2011-12-05 15:11:47 +0100 |
commit | 9624e340a20a256e00db173427abb871b2631a39 (patch) | |
tree | 56a1ab02b4f61409035d3c3cc4bdf66878d80435 /vcl/unx | |
parent | d723e7b119fa9a4377e80f2e21ce728ed8603188 (diff) |
add support for printing n copies
Diffstat (limited to 'vcl/unx')
-rw-r--r-- | vcl/unx/gtk/gdi/salprn-gtk.cxx | 95 |
1 files changed, 80 insertions, 15 deletions
diff --git a/vcl/unx/gtk/gdi/salprn-gtk.cxx b/vcl/unx/gtk/gdi/salprn-gtk.cxx index c4371765d498..72b22c3769e8 100644 --- a/vcl/unx/gtk/gdi/salprn-gtk.cxx +++ b/vcl/unx/gtk/gdi/salprn-gtk.cxx @@ -29,6 +29,7 @@ #include "unx/gtk/gtkprn.hxx" +#include "vcl/configsettings.hxx" #include "vcl/print.hxx" #include "vcl/unohelp.hxx" @@ -112,6 +113,9 @@ private: void impl_initCustomTab(); void impl_initPrintRange(); + void impl_readFromSettings(); + void impl_storeToSettings() const; + private: GtkWidget* m_pDialog; vcl::PrinterController& m_rController; @@ -166,32 +170,31 @@ GtkSalPrinter::impl_doJob( const rtl::OUString& i_rJobName, const rtl::OUString& i_rAppName, ImplJobSetup* const io_pSetupData, - const bool i_bCollate, const int i_nCopies, + const int i_nCopies, + const bool i_bCollate, vcl::PrinterController& io_rController) { io_rController.setJobState(view::PrintableState_JOB_STARTED); io_rController.jobStarted(); - const bool bRet = PspSalPrinter::StartJob(i_pFileName, - i_rJobName, i_rAppName, i_nCopies, i_bCollate, true, io_pSetupData); + const bool bJobStarted( + PspSalPrinter::StartJob(i_pFileName, i_rJobName, i_rAppName, + i_nCopies, i_bCollate, true, io_pSetupData)) + ; - if (bRet) + if (bJobStarted) { io_rController.createProgressDialog(); - int nPages = io_rController.getFilteredPageCount(); -// int nRepeatCount = nCopies; - int nRepeatCount = 1; - for (int nIteration = 0; nIteration != nRepeatCount; nIteration++) + const int nPages(io_rController.getFilteredPageCount()); + for (int nPage(0); nPage != nPages; ++nPage) { - for (int nPage = 0; nPage != nPages; nPage++) - { - if (nPage == nPages-1 && nIteration == nRepeatCount-1) - io_rController.setLastPage(sal_True); - io_rController.printFilteredPage(nPage); - } + if (nPage == nPages - 1) + io_rController.setLastPage(sal_True); + io_rController.printFilteredPage(nPage); } io_rController.setJobState(view::PrintableState_JOB_COMPLETED); } - return bRet; + + return bJobStarted; } @@ -353,6 +356,7 @@ GtkPrintDialog::GtkPrintDialog(vcl::PrinterController& io_rController) impl_initDialog(); impl_initCustomTab(); impl_initPrintRange(); + impl_readFromSettings(); } @@ -785,6 +789,7 @@ GtkPrintDialog::run() } } gtk_widget_hide(m_pDialog); + impl_storeToSettings(); return bDoJob; } @@ -982,6 +987,66 @@ GtkPrintDialog::~GtkPrintDialog() } +void +GtkPrintDialog::impl_readFromSettings() +{ + vcl::SettingsConfigItem* const pItem(vcl::SettingsConfigItem::get()); + GtkPrintSettings* const pSettings(getSettings()); + + const rtl::OUString aPrintDialogStr(RTL_CONSTASCII_USTRINGPARAM("PrintDialog")); + const rtl::OUString aCopyCount(pItem->getValue(aPrintDialogStr, + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CopyCount")))); + const rtl::OUString aCollate(pItem->getValue(aPrintDialogStr, + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Collate")))); + + bool bChanged(false); + + const gint nOldCopyCount(gtk_print_settings_get_n_copies(pSettings)); + const sal_Int32 nCopyCount(aCopyCount.toInt32()); + if (nCopyCount > 0 && nOldCopyCount != nCopyCount) + { + bChanged = true; + gtk_print_settings_set_n_copies(pSettings, sal::static_int_cast<gint>(nCopyCount)); + } + + const gboolean bOldCollate(gtk_print_settings_get_collate(pSettings)); + const bool bCollate(aCollate.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("true"))); + if (bOldCollate != bCollate) + { + bChanged = true; + gtk_print_settings_set_collate(pSettings, bCollate); + } + // TODO: wth was this var. meant for? + (void) bChanged; + + gtk_print_unix_dialog_set_settings(GTK_PRINT_UNIX_DIALOG(m_pDialog), pSettings); + g_object_unref(G_OBJECT(pSettings)); +} + + +void +GtkPrintDialog::impl_storeToSettings() +const +{ + vcl::SettingsConfigItem* const pItem(vcl::SettingsConfigItem::get()); + GtkPrintSettings* const pSettings(getSettings()); + + const rtl::OUString aPrintDialogStr(RTL_CONSTASCII_USTRINGPARAM("PrintDialog")); + pItem->setValue(aPrintDialogStr, + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CopyCount")), + rtl::OUString::valueOf(gtk_print_settings_get_n_copies(pSettings))); + pItem->setValue(aPrintDialogStr, + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Collate")), + gtk_print_settings_get_collate(pSettings) + ? rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("true")) + : rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("false"))) + ; + // pItem->setValue(aPrintDialog, rtl::OUString::createFromAscii("ToFile"), ); + g_object_unref(G_OBJECT(pSettings)); + pItem->Commit(); +} + + sal_uLong GtkSalInfoPrinter::GetCapabilities( const ImplJobSetup* const i_pSetupData, |