// Author: Julian Smart
// Modified by:
// Created: 04/01/98
-// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
{
}
-wxWindow *wxPrinterBase::CreateAbortWindow(wxWindow *parent, wxPrintout * printout)
+wxPrintAbortDialog *wxPrinterBase::CreateAbortWindow(wxWindow *parent, wxPrintout * printout)
{
- wxPrintAbortDialog *dialog = new wxPrintAbortDialog(parent, _("Printing ") , wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
-
- wxBoxSizer *button_sizer = new wxBoxSizer( wxVERTICAL );
- button_sizer->Add( new wxStaticText(dialog, wxID_ANY, _("Please wait while printing\n") + printout->GetTitle() ), 0, wxALL, 10 );
- button_sizer->Add( new wxButton( dialog, wxID_CANCEL, wxT("Cancel") ), 0, wxALL | wxALIGN_CENTER, 10 );
-
- dialog->SetAutoLayout( true );
- dialog->SetSizer( button_sizer );
-
- button_sizer->Fit(dialog);
- button_sizer->SetSizeHints (dialog) ;
-
- return dialog;
+ return new wxPrintAbortDialog(parent, printout->GetTitle());
}
void wxPrinterBase::ReportError(wxWindow *parent, wxPrintout *WXUNUSED(printout), const wxString& message)
delete m_pimpl;
}
-wxWindow *wxPrinter::CreateAbortWindow(wxWindow *parent, wxPrintout *printout)
+wxPrintAbortDialog *wxPrinter::CreateAbortWindow(wxWindow *parent, wxPrintout *printout)
{
return m_pimpl->CreateAbortWindow( parent, printout );
}
EVT_BUTTON(wxID_CANCEL, wxPrintAbortDialog::OnCancel)
END_EVENT_TABLE()
+wxPrintAbortDialog::wxPrintAbortDialog(wxWindow *parent,
+ const wxString& documentTitle,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxString& name)
+ : wxDialog(parent, wxID_ANY, _("Printing"), pos, size, style, name)
+{
+ 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))
{
+ wxCHECK_RET( wxPrinterBase::sm_abortWindow != NULL, "OnCancel called twice" );
+
wxPrinterBase::sm_abortIt = true;
- wxPrinterBase::sm_abortWindow->Show(false);
- wxPrinterBase::sm_abortWindow->Close(true);
wxPrinterBase::sm_abortWindow->Destroy();
wxPrinterBase::sm_abortWindow = NULL;
}
Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(wxPrintPageTextCtrl::OnKillFocus));
- Connect(wxEVT_COMMAND_TEXT_ENTER,
+ Connect(wxEVT_TEXT_ENTER,
wxCommandEventHandler(wxPrintPageTextCtrl::OnTextEnter));
}
m_controlBar = NULL;
m_previewCanvas = NULL;
m_windowDisabler = NULL;
+ m_modalityKind = wxPreviewFrame_NonModal;
// Give the application icon
#ifdef __WXMSW__
wxPreviewFrame::~wxPreviewFrame()
{
-}
-
-void wxPreviewFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
-{
- if (m_windowDisabler)
- delete m_windowDisabler;
-
- // Need to delete the printout and the print preview
wxPrintout *printout = m_printPreview->GetPrintout();
if (printout)
{
}
m_previewCanvas->SetPreview(NULL);
- wxDELETE(m_printPreview);
+ delete m_printPreview;
+}
+
+void wxPreviewFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
+{
+ // Reenable any windows we disabled by undoing whatever we did in our
+ // Initialize().
+ switch ( m_modalityKind )
+ {
+ case wxPreviewFrame_AppModal:
+ delete m_windowDisabler;
+ m_windowDisabler = NULL;
+ break;
+
+ case wxPreviewFrame_WindowModal:
+ if ( GetParent() )
+ GetParent()->Enable();
+ break;
+
+ case wxPreviewFrame_NonModal:
+ break;
+ }
Destroy();
}
-void wxPreviewFrame::Initialize()
+void wxPreviewFrame::InitializeWithModality(wxPreviewFrameModalityKind kind)
{
#if wxUSE_STATUSBAR
CreateStatusBar();
SetAutoLayout( true );
SetSizer( item0 );
- m_windowDisabler = new wxWindowDisabler(this);
+ m_modalityKind = kind;
+ switch ( m_modalityKind )
+ {
+ case wxPreviewFrame_AppModal:
+ // Disable everything.
+ m_windowDisabler = new wxWindowDisabler( this );
+ break;
+
+ case wxPreviewFrame_WindowModal:
+ // Disable our parent if we have one.
+ if ( GetParent() )
+ GetParent()->Disable();
+ break;
+
+ case wxPreviewFrame_NonModal:
+ // Nothing to do, we don't need to disable any windows.
+ break;
+ }
+
+ if ( m_modalityKind != wxPreviewFrame_NonModal )
+ {
+ // Behave like modal dialogs, don't show in taskbar. This implies
+ // removing the minimize box, because minimizing windows without
+ // taskbar entry is confusing.
+ SetWindowStyle((GetWindowStyle() & ~wxMINIMIZE_BOX) | wxFRAME_NO_TASKBAR);
+ }
Layout();
{
m_previewBitmap = new wxBitmap(pageRect.width, pageRect.height);
- if (!m_previewBitmap || !m_previewBitmap->Ok())
+ if (!m_previewBitmap || !m_previewBitmap->IsOk())
{
InvalidatePreviewBitmap();
wxMessageBox(_("Sorry, not enough memory to create a preview."), _("Print Preview Failure"), wxOK);
bool wxPrintPreview::IsOk() const
{
- return m_pimpl->Ok();
+ return m_pimpl->IsOk();
}
void wxPrintPreview::SetOk(bool ok)