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
This commit is contained in:
Václav Slavík
2012-08-09 15:52:15 +00:00
parent 84cabd361b
commit e7aa9bb7c0
3 changed files with 38 additions and 11 deletions

View File

@@ -41,6 +41,7 @@ class WXDLLIMPEXP_FWD_CORE wxPrintFactory;
class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase; class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase;
class WXDLLIMPEXP_FWD_CORE wxPrintPreview; class WXDLLIMPEXP_FWD_CORE wxPrintPreview;
class WXDLLIMPEXP_FWD_CORE wxPrintAbortDialog; class WXDLLIMPEXP_FWD_CORE wxPrintAbortDialog;
class WXDLLIMPEXP_FWD_CORE wxStaticText;
class wxPrintPageMaxCtrl; class wxPrintPageMaxCtrl;
class wxPrintPageTextCtrl; class wxPrintPageTextCtrl;
@@ -740,9 +741,14 @@ public:
long style = wxDEFAULT_DIALOG_STYLE, long style = wxDEFAULT_DIALOG_STYLE,
const wxString& name = wxT("dialog")); const wxString& name = wxT("dialog"));
void SetProgress(int currentPage, int totalPages,
int currentCopy, int totalCopies);
void OnCancel(wxCommandEvent& event); void OnCancel(wxCommandEvent& event);
private: private:
wxStaticText *m_progress;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
wxDECLARE_NO_COPY_CLASS(wxPrintAbortDialog); wxDECLARE_NO_COPY_CLASS(wxPrintAbortDialog);
}; };

View File

@@ -518,15 +518,34 @@ wxPrintAbortDialog::wxPrintAbortDialog(wxWindow *parent,
const wxString& name) const wxString& name)
: wxDialog(parent, wxID_ANY, _("Printing"), pos, size, style, name) : wxDialog(parent, wxID_ANY, _("Printing"), pos, size, style, name)
{ {
wxBoxSizer *button_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
button_sizer->Add(new wxStaticText(this, wxID_ANY, _("Please wait while printing\n") + documentTitle), 0, wxALL, 10 ); mainSizer->Add(new wxStaticText(this, wxID_ANY, _("Please wait while printing...")),
button_sizer->Add(new wxButton(this, wxID_CANCEL, wxT("Cancel") ), 0, wxALL | wxALIGN_CENTER, 10); wxSizerFlags().Expand().DoubleBorder());
SetAutoLayout(true); wxFlexGridSizer *gridSizer = new wxFlexGridSizer(2, wxSize(20, 0));
SetSizer(button_sizer); 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); mainSizer->Add(CreateStdDialogButtonSizer(wxCANCEL),
button_sizer->SetSizeHints(this); 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)) void wxPrintAbortDialog::OnCancel(wxCommandEvent& WXUNUSED(event))

View File

@@ -196,10 +196,8 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
maxPageNum = m_printDialogData.GetToPage(); maxPageNum = m_printDialogData.GetToPage();
} }
int copyCount; const int maxCopyCount = m_printDialogData.GetNoCopies();
for ( copyCount = 1; for ( int copyCount = 1; copyCount <= maxCopyCount; copyCount++ )
copyCount <= m_printDialogData.GetNoCopies();
copyCount++ )
{ {
if ( !printout->OnBeginDocument(minPageNum, maxPageNum) ) if ( !printout->OnBeginDocument(minPageNum, maxPageNum) )
{ {
@@ -219,6 +217,10 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
pn <= maxPageNum && printout->HasPage(pn); pn <= maxPageNum && printout->HasPage(pn);
pn++ ) pn++ )
{ {
win->SetProgress(pn - minPageNum + 1,
maxPageNum - minPageNum + 1,
copyCount, maxCopyCount);
if ( sm_abortIt ) if ( sm_abortIt )
{ {
sm_lastError = wxPRINTER_CANCELLED; sm_lastError = wxPRINTER_CANCELLED;