/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "prntbase.h"
+ #pragma implementation "prntbase.h"
+ #pragma implementation "printdlg.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/prntbase.h"
#include "wx/dcprint.h"
#include "wx/printdlg.h"
+#include "wx/print.h"
#include "wx/module.h"
#include <stdlib.h>
#include <string.h>
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+#include "wx/msw/printdlg.h"
+#elif defined(__WXMAC__)
+#include "wx/mac/printdlg.h"
+#else
+#include "wx/generic/prntdlgg.h"
+#endif
+
#ifdef __WXMSW__
#include "wx/msw/private.h"
#include <commdlg.h>
#endif
#endif // __WXMSW__
-IMPLEMENT_CLASS(wxPrinterBase, wxObject)
-IMPLEMENT_ABSTRACT_CLASS(wxPrintout, wxObject)
-IMPLEMENT_CLASS(wxPreviewCanvas, wxWindow)
-IMPLEMENT_CLASS(wxPreviewControlBar, wxWindow)
-IMPLEMENT_CLASS(wxPreviewFrame, wxFrame)
-IMPLEMENT_CLASS(wxPrintPreviewBase, wxObject)
+//----------------------------------------------------------------------------
+// wxPrintFactory
+//----------------------------------------------------------------------------
-BEGIN_EVENT_TABLE(wxPrintAbortDialog, wxDialog)
- EVT_BUTTON(wxID_CANCEL, wxPrintAbortDialog::OnCancel)
-END_EVENT_TABLE()
+wxPrintFactory *wxPrintFactory::m_factory = NULL;
-BEGIN_EVENT_TABLE(wxPreviewCanvas, wxScrolledWindow)
- EVT_PAINT(wxPreviewCanvas::OnPaint)
- EVT_CHAR(wxPreviewCanvas::OnChar)
- EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged)
-END_EVENT_TABLE()
+void wxPrintFactory::SetPrintFactory( wxPrintFactory *factory )
+{
+ if (wxPrintFactory::m_factory)
+ delete wxPrintFactory::m_factory;
-/*
-* Printer
-*/
+ wxPrintFactory::m_factory = factory;
+}
+
+wxPrintFactory *wxPrintFactory::GetFactory()
+{
+ if (!wxPrintFactory::m_factory)
+ wxPrintFactory::m_factory = new wxNativePrintFactory;
+
+ return wxPrintFactory::m_factory;
+}
+
+//----------------------------------------------------------------------------
+// wxNativePrintFactory
+//----------------------------------------------------------------------------
+
+wxPrinterBase *wxNativePrintFactory::CreatePrinter( wxPrintDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrinter( data );
+#elif defined(__WXMAC__)
+ return new wxMacPrinter( data );
+#elif defined(__WXPM__)
+ return new wxOS2Printer( data );
+#else
+ return new wxPostScriptPrinter( data );
+#endif
+};
+
+wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview,
+ wxPrintout *printout, wxPrintDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintPreview( preview, printout, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintPreview( preview, printout, data );
+#elif defined(__WXPM__)
+ return new wxOS2PrintPreview( preview, printout, data );
+#else
+ return new wxPostScriptPrintPreview( preview, printout, data );
+#endif
+}
+
+wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview,
+ wxPrintout *printout, wxPrintData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintPreview( preview, printout, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintPreview( preview, printout, data );
+#elif defined(__WXPM__)
+ return new wxOS2PrintPreview( preview, printout, data );
+#else
+ return new wxPostScriptPrintPreview( preview, printout, data );
+#endif
+}
+
+wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
+ wxPrintDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintDialog( parent, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintDialog( parent, data );
+#else
+ return new wxGenericPrintDialog( parent, data );
+#endif
+}
+
+wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
+ wxPrintData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintDialog( parent, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintDialog( parent, data );
+#else
+ return new wxGenericPrintDialog( parent, data );
+#endif
+}
+
+wxPageSetupDialogBase *wxNativePrintFactory::CreatePageSetupDialog( wxWindow *parent,
+ wxPageSetupDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPageSetupDialog( parent, data );
+#elif defined(__WXMAC__)
+ return new wxMacPageSetupDialog( parent, data );
+#else
+ return new wxGenericPageSetupDialog( parent, data );
+#endif
+}
+
+bool wxNativePrintFactory::HasPrintSetupDialog()
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return false;
+#elif defined(__WXMAC__)
+ return false;
+#else
+ // Only here do we need to provide the print setup
+ // dialog ourselves, the other platforms either have
+ // none, don't make it accessible or let you configure
+ // the printer from the wxPrintDialog anyway.
+ return true;
+#endif
+
+}
+
+wxDialog *wxNativePrintFactory::CreatePrintSetupDialog( wxWindow *parent,
+ wxPrintData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ wxUnusedVar(parent);
+ wxUnusedVar(data);
+ return NULL;
+#elif defined(__WXMAC__)
+ wxUnusedVar(parent);
+ wxUnusedVar(data);
+ return NULL;
+#else
+ // Only here do we need to provide the print setup
+ // dialog ourselves, the other platforms either have
+ // none, don't make it accessible or let you configure
+ // the printer from the wxPrintDialog anyway.
+ return new wxGenericPrintSetupDialog( parent, data );
+#endif
+}
+
+bool wxNativePrintFactory::HasOwnPrintToFile()
+{
+ // Only relevant for PostScript and here the
+ // setup dialog provides no "print to file"
+ // option. In the GNOME setup dialog, the
+ // setup dialog has its own print to file.
+ return false;
+}
+
+bool wxNativePrintFactory::HasPrinterLine()
+{
+ // Only relevant for PostScript for now
+ return true;
+}
+
+wxString wxNativePrintFactory::CreatePrinterLine()
+{
+ // Only relevant for PostScript for now
+
+ // We should query "lpstat -d" here
+ return _("Generic PostScript");
+}
+
+bool wxNativePrintFactory::HasStatusLine()
+{
+ // Only relevant for PostScript for now
+ return true;
+}
+
+wxString wxNativePrintFactory::CreateStatusLine()
+{
+ // Only relevant for PostScript for now
+
+ // We should query "lpstat -r" or "lpstat -p" here
+ return _("Ready");
+}
+
+wxPrintNativeDataBase *wxNativePrintFactory::CreatePrintNativeData()
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintNativeData;
+#elif defined(__WXMAC__)
+ return new wxMacPrintNativeData;
+#else
+ return new wxPostScriptPrintNativeData;
+#endif
+}
+
+//----------------------------------------------------------------------------
+// wxPrintNativeDataBase
+//----------------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPrintNativeDataBase, wxObject)
+
+wxPrintNativeDataBase::wxPrintNativeDataBase()
+{
+ m_ref = 1;
+}
+
+//----------------------------------------------------------------------------
+// wxPrintFactoryModule
+//----------------------------------------------------------------------------
+
+class wxPrintFactoryModule: public wxModule
+{
+public:
+ wxPrintFactoryModule() {}
+ bool OnInit() { return true; }
+ void OnExit() { wxPrintFactory::SetPrintFactory( NULL ); }
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxPrintFactoryModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxPrintFactoryModule, wxModule)
+
+//----------------------------------------------------------------------------
+// wxPrinterBase
+//----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPrinterBase, wxObject)
wxPrinterBase::wxPrinterBase(wxPrintDialogData *data)
{
{
}
-void wxPrintAbortDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
-{
- wxPrinterBase::sm_abortIt = true;
- wxPrinterBase::sm_abortWindow->Show(false);
- wxPrinterBase::sm_abortWindow->Close(true);
- wxPrinterBase::sm_abortWindow = (wxWindow *) NULL;
-}
-
wxWindow *wxPrinterBase::CreateAbortWindow(wxWindow *parent, wxPrintout * printout)
{
wxPrintAbortDialog *dialog = new wxPrintAbortDialog(parent, _("Printing ") , wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
wxMessageBox(message, _("Printing Error"), wxOK, parent);
}
-/*
-* Printout class
-*/
+wxPrintDialogData& wxPrinterBase::GetPrintDialogData() const
+{
+ return (wxPrintDialogData&) m_printDialogData;
+}
+
+//----------------------------------------------------------------------------
+// wxPrinter
+//----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPrinter, wxPrinterBase)
+
+wxPrinter::wxPrinter(wxPrintDialogData *data)
+{
+ m_pimpl = wxPrintFactory::GetFactory()->CreatePrinter( data );
+}
+
+wxPrinter::~wxPrinter()
+{
+ delete m_pimpl;
+}
+
+wxWindow *wxPrinter::CreateAbortWindow(wxWindow *parent, wxPrintout *printout)
+{
+ return m_pimpl->CreateAbortWindow( parent, printout );
+}
+
+void wxPrinter::ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message)
+{
+ m_pimpl->ReportError( parent, printout, message );
+}
+
+bool wxPrinter::Setup(wxWindow *parent)
+{
+ return m_pimpl->Setup( parent );
+}
+
+bool wxPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
+{
+ return m_pimpl->Print( parent, printout, prompt );
+}
+
+wxDC* wxPrinter::PrintDialog(wxWindow *parent)
+{
+ return m_pimpl->PrintDialog( parent );
+}
+
+wxPrintDialogData& wxPrinter::GetPrintDialogData() const
+{
+ return m_pimpl->GetPrintDialogData();
+}
+
+// ---------------------------------------------------------------------------
+// wxPrintDialogBase: the dialog for printing.
+// ---------------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPrintDialogBase, wxDialog)
+
+wxPrintDialogBase::wxPrintDialogBase(wxWindow *parent,
+ wxWindowID id,
+ const wxString &title,
+ const wxPoint &pos,
+ const wxSize &size,
+ long style)
+ : wxDialog( parent, id, title.empty() ? wxString(_("Print")) : title,
+ pos, size, style )
+{
+}
+
+// ---------------------------------------------------------------------------
+// wxPrintDialog: the dialog for printing
+// ---------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPrintDialog, wxObject)
+
+wxPrintDialog::wxPrintDialog(wxWindow *parent, wxPrintDialogData* data)
+{
+ m_pimpl = wxPrintFactory::GetFactory()->CreatePrintDialog( parent, data );
+}
+
+wxPrintDialog::wxPrintDialog(wxWindow *parent, wxPrintData* data)
+{
+ m_pimpl = wxPrintFactory::GetFactory()->CreatePrintDialog( parent, data );
+}
+
+wxPrintDialog::~wxPrintDialog()
+{
+ delete m_pimpl;
+}
+
+int wxPrintDialog::ShowModal()
+{
+ return m_pimpl->ShowModal();
+}
+
+wxPrintDialogData& wxPrintDialog::GetPrintDialogData()
+{
+ return m_pimpl->GetPrintDialogData();
+}
+
+wxPrintData& wxPrintDialog::GetPrintData()
+{
+ return m_pimpl->GetPrintData();
+}
+
+wxDC *wxPrintDialog::GetPrintDC()
+{
+ return m_pimpl->GetPrintDC();
+}
+
+// ---------------------------------------------------------------------------
+// wxPageSetupDialogBase: the page setup dialog
+// ---------------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPageSetupDialogBase, wxDialog)
+
+wxPageSetupDialogBase::wxPageSetupDialogBase(wxWindow *parent,
+ wxWindowID id,
+ const wxString &title,
+ const wxPoint &pos,
+ const wxSize &size,
+ long style)
+ : wxDialog( parent, id, title.empty() ? wxString(_("Page setup")) : title,
+ pos, size, style )
+{
+}
+
+// ---------------------------------------------------------------------------
+// wxPageSetupDialog: the page setup dialog
+// ---------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPageSetupDialog, wxObject)
+
+wxPageSetupDialog::wxPageSetupDialog(wxWindow *parent, wxPageSetupDialogData *data )
+{
+ m_pimpl = wxPrintFactory::GetFactory()->CreatePageSetupDialog( parent, data );
+}
+
+wxPageSetupDialog::~wxPageSetupDialog()
+{
+ delete m_pimpl;
+}
+
+int wxPageSetupDialog::ShowModal()
+{
+ return m_pimpl->ShowModal();
+}
+
+wxPageSetupDialogData& wxPageSetupDialog::GetPageSetupDialogData()
+{
+ return m_pimpl->GetPageSetupDialogData();
+}
+
+// old name
+wxPageSetupDialogData& wxPageSetupDialog::GetPageSetupData()
+{
+ return m_pimpl->GetPageSetupDialogData();
+}
+
+//----------------------------------------------------------------------------
+// wxPrintAbortDialog
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(wxPrintAbortDialog, wxDialog)
+ EVT_BUTTON(wxID_CANCEL, wxPrintAbortDialog::OnCancel)
+END_EVENT_TABLE()
+
+void wxPrintAbortDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
+{
+ wxPrinterBase::sm_abortIt = true;
+ wxPrinterBase::sm_abortWindow->Show(false);
+ wxPrinterBase::sm_abortWindow->Close(true);
+ wxPrinterBase::sm_abortWindow = (wxWindow *) NULL;
+}
+
+//----------------------------------------------------------------------------
+// wxPrintout
+//----------------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPrintout, wxObject)
wxPrintout::wxPrintout(const wxString& title)
{
*toPage = 1;
}
-/*
-* Preview canvas
-*/
+//----------------------------------------------------------------------------
+// wxPreviewCanvas
+//----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPreviewCanvas, wxWindow)
+
+BEGIN_EVENT_TABLE(wxPreviewCanvas, wxScrolledWindow)
+ EVT_PAINT(wxPreviewCanvas::OnPaint)
+ EVT_CHAR(wxPreviewCanvas::OnChar)
+ EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged)
+END_EVENT_TABLE()
// VZ: the current code doesn't refresh properly without
// wxFULL_REPAINT_ON_RESIZE, this must be fixed as otherwise we have
}
}
-/*
-* Preview control bar
-*/
+//----------------------------------------------------------------------------
+// wxPreviewControlBar
+//----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPreviewControlBar, wxWindow)
BEGIN_EVENT_TABLE(wxPreviewControlBar, wxPanel)
EVT_BUTTON(wxID_PREVIEW_CLOSE, wxPreviewControlBar::OnWindowClose)
* Preview frame
*/
+IMPLEMENT_CLASS(wxPreviewFrame, wxFrame)
+
BEGIN_EVENT_TABLE(wxPreviewFrame, wxFrame)
EVT_CLOSE(wxPreviewFrame::OnCloseWindow)
END_EVENT_TABLE()
* Print preview
*/
+IMPLEMENT_CLASS(wxPrintPreviewBase, wxObject)
+
wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintData *data)
return true;
}
+int wxPrintPreviewBase::GetCurrentPage() const
+ { return m_currentPage; };
+void wxPrintPreviewBase::SetPrintout(wxPrintout *printout)
+ { m_previewPrintout = printout; };
+wxPrintout *wxPrintPreviewBase::GetPrintout() const
+ { return m_previewPrintout; };
+wxPrintout *wxPrintPreviewBase::GetPrintoutForPrinting() const
+ { return m_printPrintout; };
+void wxPrintPreviewBase::SetFrame(wxFrame *frame)
+ { m_previewFrame = frame; };
+void wxPrintPreviewBase::SetCanvas(wxPreviewCanvas *canvas)
+ { m_previewCanvas = canvas; };
+wxFrame *wxPrintPreviewBase::GetFrame() const
+ { return m_previewFrame; }
+wxPreviewCanvas *wxPrintPreviewBase::GetCanvas() const
+ { return m_previewCanvas; }
+
bool wxPrintPreviewBase::PaintPage(wxPreviewCanvas *canvas, wxDC& dc)
{
DrawBlankPage(canvas, dc);
}
}
+wxPrintDialogData& wxPrintPreviewBase::GetPrintDialogData()
+{
+ return m_printDialogData;
+}
+
+int wxPrintPreviewBase::GetZoom() const
+{ return m_currentZoom; }
+int wxPrintPreviewBase::GetMaxPage() const
+{ return m_maxPage; }
+int wxPrintPreviewBase::GetMinPage() const
+{ return m_minPage; }
+bool wxPrintPreviewBase::Ok() const
+{ return m_isOk; }
+void wxPrintPreviewBase::SetOk(bool ok)
+{ m_isOk = ok; }
+//----------------------------------------------------------------------------
+// wxPrintPreview
+//----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPrintPreview, wxPrintPreviewBase)
+
+wxPrintPreview::wxPrintPreview(wxPrintout *printout,
+ wxPrintout *printoutForPrinting,
+ wxPrintDialogData *data) :
+ wxPrintPreviewBase( printout, printoutForPrinting, data )
+{
+ m_pimpl = wxPrintFactory::GetFactory()->
+ CreatePrintPreview( printout, printoutForPrinting, data );
+}
+
+wxPrintPreview::wxPrintPreview(wxPrintout *printout,
+ wxPrintout *printoutForPrinting,
+ wxPrintData *data ) :
+ wxPrintPreviewBase( printout, printoutForPrinting, data )
+{
+ m_pimpl = wxPrintFactory::GetFactory()->
+ CreatePrintPreview( printout, printoutForPrinting, data );
+}
+
+wxPrintPreview::~wxPrintPreview()
+{
+ delete m_pimpl;
+
+ // don't delete twice
+ m_printPrintout = NULL;
+ m_previewPrintout = NULL;
+ m_previewBitmap = NULL;
+}
+
+bool wxPrintPreview::SetCurrentPage(int pageNum)
+{
+ return m_pimpl->SetCurrentPage( pageNum );
+}
+
+int wxPrintPreview::GetCurrentPage() const
+{
+ return m_pimpl->GetCurrentPage();
+}
+
+void wxPrintPreview::SetPrintout(wxPrintout *printout)
+{
+ m_pimpl->SetPrintout( printout );
+}
+
+wxPrintout *wxPrintPreview::GetPrintout() const
+{
+ return m_pimpl->GetPrintout();
+}
+
+wxPrintout *wxPrintPreview::GetPrintoutForPrinting() const
+{
+ return m_pimpl->GetPrintoutForPrinting();
+}
+
+void wxPrintPreview::SetFrame(wxFrame *frame)
+{
+ m_pimpl->SetFrame( frame );
+}
+
+void wxPrintPreview::SetCanvas(wxPreviewCanvas *canvas)
+{
+ m_pimpl->SetCanvas( canvas );
+}
+
+wxFrame *wxPrintPreview::GetFrame() const
+{
+ return m_pimpl->GetFrame();
+}
+
+wxPreviewCanvas *wxPrintPreview::GetCanvas() const
+{
+ return m_pimpl->GetCanvas();
+}
+
+bool wxPrintPreview::PaintPage(wxPreviewCanvas *canvas, wxDC& dc)
+{
+ return m_pimpl->PaintPage( canvas, dc );
+}
+
+bool wxPrintPreview::DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc)
+{
+ return m_pimpl->DrawBlankPage( canvas, dc );
+}
+
+void wxPrintPreview::AdjustScrollbars(wxPreviewCanvas *canvas)
+{
+ m_pimpl->AdjustScrollbars( canvas );
+}
+
+bool wxPrintPreview::RenderPage(int pageNum)
+{
+ return m_pimpl->RenderPage( pageNum );
+}
+
+void wxPrintPreview::SetZoom(int percent)
+{
+ m_pimpl->SetZoom( percent );
+}
+
+wxPrintDialogData& wxPrintPreview::GetPrintDialogData()
+{
+ return m_pimpl->GetPrintDialogData();
+}
+
+int wxPrintPreview::GetMaxPage() const
+{
+ return m_pimpl->GetMaxPage();
+}
+
+int wxPrintPreview::GetMinPage() const
+{
+ return m_pimpl->GetMinPage();
+}
+
+bool wxPrintPreview::Ok() const
+{
+ return m_pimpl->Ok();
+}
+
+void wxPrintPreview::SetOk(bool ok)
+{
+ m_pimpl->SetOk( ok );
+}
+
+bool wxPrintPreview::Print(bool interactive)
+{
+ return m_pimpl->Print( interactive );
+}
+
+void wxPrintPreview::DetermineScaling()
+{
+ m_pimpl->DetermineScaling();
+}
+
+
#endif // wxUSE_PRINTING_ARCHITECTURE