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); + wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); + mainSizer->Add(new wxStaticText(this, wxID_ANY, _("Please wait while printing...")), + wxSizerFlags().Expand().DoubleBorder()); - SetAutoLayout(true); - SetSizer(button_sizer); + 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)); - button_sizer->Fit(this); - button_sizer->SetSizeHints(this); + 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;