From e7aa9bb7c0381c735cecba13abc7cb2b3c077c66 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Thu, 9 Aug 2012 15:52:15 +0000 Subject: [PATCH] Show progress of printing in wxMSW. Add the number of the page being printed as well as the total to the wxMSW printing progress window. Improved the layout and fixed some i18n issues in the process. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72308 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/prntbase.h | 6 ++++++ src/common/prntbase.cpp | 37 ++++++++++++++++++++++++++++--------- src/msw/printwin.cpp | 10 ++++++---- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/include/wx/prntbase.h b/include/wx/prntbase.h index 8ae728d004..3faa87fab6 100644 --- a/include/wx/prntbase.h +++ b/include/wx/prntbase.h @@ -41,6 +41,7 @@ class WXDLLIMPEXP_FWD_CORE wxPrintFactory; class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase; class WXDLLIMPEXP_FWD_CORE wxPrintPreview; class WXDLLIMPEXP_FWD_CORE wxPrintAbortDialog; +class WXDLLIMPEXP_FWD_CORE wxStaticText; class wxPrintPageMaxCtrl; class wxPrintPageTextCtrl; @@ -740,9 +741,14 @@ public: long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("dialog")); + void SetProgress(int currentPage, int totalPages, + int currentCopy, int totalCopies); + void OnCancel(wxCommandEvent& event); private: + wxStaticText *m_progress; + DECLARE_EVENT_TABLE() wxDECLARE_NO_COPY_CLASS(wxPrintAbortDialog); }; diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp index 02e37fb34e..c1467b1d83 100644 --- a/src/common/prntbase.cpp +++ b/src/common/prntbase.cpp @@ -518,15 +518,34 @@ wxPrintAbortDialog::wxPrintAbortDialog(wxWindow *parent, const wxString& name) : wxDialog(parent, wxID_ANY, _("Printing"), pos, size, style, name) { - wxBoxSizer *button_sizer = new wxBoxSizer(wxVERTICAL); - button_sizer->Add(new wxStaticText(this, wxID_ANY, _("Please wait while printing\n") + documentTitle), 0, wxALL, 10 ); - button_sizer->Add(new wxButton(this, wxID_CANCEL, wxT("Cancel") ), 0, wxALL | wxALIGN_CENTER, 10); - - SetAutoLayout(true); - SetSizer(button_sizer); - - button_sizer->Fit(this); - button_sizer->SetSizeHints(this); + wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); + mainSizer->Add(new wxStaticText(this, wxID_ANY, _("Please wait while printing...")), + wxSizerFlags().Expand().DoubleBorder()); + + wxFlexGridSizer *gridSizer = new wxFlexGridSizer(2, wxSize(20, 0)); + gridSizer->Add(new wxStaticText(this, wxID_ANY, _("Document:"))); + gridSizer->AddGrowableCol(1); + gridSizer->Add(new wxStaticText(this, wxID_ANY, documentTitle)); + gridSizer->Add(new wxStaticText(this, wxID_ANY, _("Progress:"))); + m_progress = new wxStaticText(this, wxID_ANY, _("Preparing")); + m_progress->SetMinSize(wxSize(250, -1)); + gridSizer->Add(m_progress); + mainSizer->Add(gridSizer, wxSizerFlags().Expand().DoubleBorder(wxLEFT | wxRIGHT)); + + mainSizer->Add(CreateStdDialogButtonSizer(wxCANCEL), + wxSizerFlags().Expand().DoubleBorder()); + + SetSizerAndFit(mainSizer); +} + +void wxPrintAbortDialog::SetProgress(int currentPage, int totalPages, + int currentCopy, int totalCopies) +{ + wxString text; + text.Printf(_("Printing page %d of %d"), currentPage, totalPages); + if ( totalCopies > 1 ) + text += wxString::Format(_(" (copy %d of %d)"), currentCopy, totalCopies); + m_progress->SetLabel(text); } void wxPrintAbortDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) diff --git a/src/msw/printwin.cpp b/src/msw/printwin.cpp index 3648192fc8..0c8a2ed652 100644 --- a/src/msw/printwin.cpp +++ b/src/msw/printwin.cpp @@ -196,10 +196,8 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt maxPageNum = m_printDialogData.GetToPage(); } - int copyCount; - for ( copyCount = 1; - copyCount <= m_printDialogData.GetNoCopies(); - copyCount++ ) + const int maxCopyCount = m_printDialogData.GetNoCopies(); + for ( int copyCount = 1; copyCount <= maxCopyCount; copyCount++ ) { if ( !printout->OnBeginDocument(minPageNum, maxPageNum) ) { @@ -219,6 +217,10 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt pn <= maxPageNum && printout->HasPage(pn); pn++ ) { + win->SetProgress(pn - minPageNum + 1, + maxPageNum - minPageNum + 1, + copyCount, maxCopyCount); + if ( sm_abortIt ) { sm_lastError = wxPRINTER_CANCELLED; -- 2.45.2