X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e81e3883b9dcfbc57ac66dc2ab8b9da443b8561a..0d1c8f39baaaeb7a7f757091209eab471ef5dbc4:/src/common/prntbase.cpp diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp index 1721afcb10..800ba84670 100644 --- a/src/common/prntbase.cpp +++ b/src/common/prntbase.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: prntbase.cpp +// Name: src/common/prntbase.cpp // Purpose: Printing framework base class implementation // Author: Julian Smart // Modified by: @@ -9,39 +9,34 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "prntbase.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif -#include "wx/defs.h" - #if wxUSE_PRINTING_ARCHITECTURE +#include "wx/dcprint.h" + #ifndef WX_PRECOMP -#include "wx/utils.h" -#include "wx/dc.h" -#include "wx/app.h" -#include "wx/msgdlg.h" -#include "wx/layout.h" -#include "wx/choice.h" -#include "wx/button.h" -#include "wx/settings.h" -#include "wx/dcmemory.h" -#include "wx/stattext.h" -#include "wx/intl.h" -#include "wx/textdlg.h" -#include "wx/sizer.h" + #include "wx/utils.h" + #include "wx/dc.h" + #include "wx/app.h" + #include "wx/msgdlg.h" + #include "wx/layout.h" + #include "wx/choice.h" + #include "wx/button.h" + #include "wx/settings.h" + #include "wx/dcmemory.h" + #include "wx/stattext.h" + #include "wx/intl.h" + #include "wx/textdlg.h" + #include "wx/sizer.h" #endif // !WX_PRECOMP #include "wx/prntbase.h" -#include "wx/dcprint.h" #include "wx/printdlg.h" #include "wx/print.h" #include "wx/module.h" @@ -49,35 +44,40 @@ #include #include -#ifdef __WXMSW__ - #include "wx/msw/private.h" - #include +#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) +#include "wx/msw/printdlg.h" +#elif defined(__WXMAC__) +#include "wx/mac/printdlg.h" +#include "wx/mac/private/print.h" +#else +#include "wx/generic/prntdlgg.h" +#endif +#ifdef __WXMSW__ + #include "wx/msw/wrapcdlg.h" #ifndef __WIN32__ #include #endif #endif // __WXMSW__ -IMPLEMENT_CLASS(wxPrintPreviewBase, wxObject) - //---------------------------------------------------------------------------- // wxPrintFactory //---------------------------------------------------------------------------- wxPrintFactory *wxPrintFactory::m_factory = NULL; - + void wxPrintFactory::SetPrintFactory( wxPrintFactory *factory ) -{ - if (wxPrintFactory::m_factory) +{ + if (wxPrintFactory::m_factory) delete wxPrintFactory::m_factory; - - wxPrintFactory::m_factory = factory; + + wxPrintFactory::m_factory = factory; } wxPrintFactory *wxPrintFactory::GetFactory() { if (!wxPrintFactory::m_factory) - wxPrintFactory::m_factory = new wxNativePrintFactory; + wxPrintFactory::m_factory = new wxNativePrintFactory; return wxPrintFactory::m_factory; } @@ -87,40 +87,194 @@ wxPrintFactory *wxPrintFactory::GetFactory() //---------------------------------------------------------------------------- wxPrinterBase *wxNativePrintFactory::CreatePrinter( wxPrintDialogData *data ) -{ -#if defined(__WXMSW__) +{ +#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, +wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview, wxPrintout *printout, wxPrintDialogData *data ) { -#if defined(__WXMSW__) +#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, +wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview, wxPrintout *printout, wxPrintData *data ) { -#if defined(__WXMSW__) +#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 wxMacCarbonPrintData; +#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 //---------------------------------------------------------------------------- @@ -167,6 +321,11 @@ void wxPrinterBase::ReportError(wxWindow *parent, wxPrintout *WXUNUSED(printout) wxMessageBox(message, _("Printing Error"), wxOK, parent); } +wxPrintDialogData& wxPrinterBase::GetPrintDialogData() const +{ + return (wxPrintDialogData&) m_printDialogData; +} + //---------------------------------------------------------------------------- // wxPrinter //---------------------------------------------------------------------------- @@ -208,6 +367,118 @@ 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 //---------------------------------------------------------------------------- @@ -290,6 +561,9 @@ BEGIN_EVENT_TABLE(wxPreviewCanvas, wxScrolledWindow) EVT_PAINT(wxPreviewCanvas::OnPaint) EVT_CHAR(wxPreviewCanvas::OnChar) EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged) +#if wxUSE_MOUSEWHEEL + EVT_MOUSEWHEEL(wxPreviewCanvas::OnMouseWheel) +#endif END_EVENT_TABLE() // VZ: the current code doesn't refresh properly without @@ -379,9 +653,9 @@ void wxPreviewCanvas::OnChar(wxKeyEvent &event) switch(event.GetKeyCode()) { - case WXK_NEXT: + case WXK_PAGEDOWN: controlBar->OnNext(); break; - case WXK_PRIOR: + case WXK_PAGEUP: controlBar->OnPrevious(); break; case WXK_HOME: controlBar->OnFirst(); break; @@ -392,6 +666,50 @@ void wxPreviewCanvas::OnChar(wxKeyEvent &event) } } +#if wxUSE_MOUSEWHEEL + +void wxPreviewCanvas::OnMouseWheel(wxMouseEvent& event) +{ + wxPreviewControlBar * + controlBar = wxStaticCast(GetParent(), wxPreviewFrame)->GetControlBar(); + + if ( controlBar ) + { + if ( event.ControlDown() && event.GetWheelRotation() != 0 ) + { + int currentZoom = controlBar->GetZoomControl(); + + int delta; + if ( currentZoom < 100 ) + delta = 5; + else if ( currentZoom <= 120 ) + delta = 10; + else + delta = 50; + + if ( event.GetWheelRotation() > 0 ) + delta = -delta; + + int newZoom = currentZoom + delta; + if ( newZoom < 10 ) + newZoom = 10; + if ( newZoom > 200 ) + newZoom = 200; + if ( newZoom != currentZoom ) + { + controlBar->SetZoomControl(newZoom); + m_printPreview->SetZoom(newZoom); + Refresh(); + } + return; + } + } + + event.Skip(); +} + +#endif // wxUSE_MOUSEWHEEL + //---------------------------------------------------------------------------- // wxPreviewControlBar //---------------------------------------------------------------------------- @@ -728,7 +1046,7 @@ void wxPreviewFrame::CreateControlBar() if (m_printPreview->GetPrintoutForPrinting()) buttons |= wxPREVIEW_PRINT; - m_controlBar = new wxPreviewControlBar(m_printPreview, buttons, this, wxPoint(0, 0), wxSize(400, 40)); + m_controlBar = new wxPreviewControlBar(m_printPreview, buttons, this, wxPoint(0,0), wxSize(400, 40)); m_controlBar->CreateButtons(); } @@ -736,6 +1054,8 @@ void wxPreviewFrame::CreateControlBar() * Print preview */ +IMPLEMENT_CLASS(wxPrintPreviewBase, wxObject) + wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintData *data) @@ -814,21 +1134,21 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum) 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 +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 +wxPreviewCanvas *wxPrintPreviewBase::GetCanvas() const { return m_previewCanvas; } bool wxPrintPreviewBase::PaintPage(wxPreviewCanvas *canvas, wxDC& dc) @@ -1038,20 +1358,20 @@ void wxPrintPreviewBase::SetZoom(int percent) } } -wxPrintDialogData& wxPrintPreviewBase::GetPrintDialogData() -{ +wxPrintDialogData& wxPrintPreviewBase::GetPrintDialogData() +{ return m_printDialogData; } -int wxPrintPreviewBase::GetZoom() const +int wxPrintPreviewBase::GetZoom() const { return m_currentZoom; } -int wxPrintPreviewBase::GetMaxPage() const +int wxPrintPreviewBase::GetMaxPage() const { return m_maxPage; } -int wxPrintPreviewBase::GetMinPage() const +int wxPrintPreviewBase::GetMinPage() const { return m_minPage; } -bool wxPrintPreviewBase::Ok() const +bool wxPrintPreviewBase::Ok() const { return m_isOk; } -void wxPrintPreviewBase::SetOk(bool ok) +void wxPrintPreviewBase::SetOk(bool ok) { m_isOk = ok; } //---------------------------------------------------------------------------- // wxPrintPreview @@ -1080,7 +1400,7 @@ wxPrintPreview::wxPrintPreview(wxPrintout *printout, wxPrintPreview::~wxPrintPreview() { delete m_pimpl; - + // don't delete twice m_printPrintout = NULL; m_previewPrintout = NULL; @@ -1092,43 +1412,43 @@ bool wxPrintPreview::SetCurrentPage(int pageNum) return m_pimpl->SetCurrentPage( pageNum ); } -int wxPrintPreview::GetCurrentPage() const -{ +int wxPrintPreview::GetCurrentPage() const +{ return m_pimpl->GetCurrentPage(); } -void wxPrintPreview::SetPrintout(wxPrintout *printout) -{ +void wxPrintPreview::SetPrintout(wxPrintout *printout) +{ m_pimpl->SetPrintout( printout ); } -wxPrintout *wxPrintPreview::GetPrintout() const -{ +wxPrintout *wxPrintPreview::GetPrintout() const +{ return m_pimpl->GetPrintout(); } -wxPrintout *wxPrintPreview::GetPrintoutForPrinting() const -{ +wxPrintout *wxPrintPreview::GetPrintoutForPrinting() const +{ return m_pimpl->GetPrintoutForPrinting(); } -void wxPrintPreview::SetFrame(wxFrame *frame) -{ +void wxPrintPreview::SetFrame(wxFrame *frame) +{ m_pimpl->SetFrame( frame ); } -void wxPrintPreview::SetCanvas(wxPreviewCanvas *canvas) -{ +void wxPrintPreview::SetCanvas(wxPreviewCanvas *canvas) +{ m_pimpl->SetCanvas( canvas ); } -wxFrame *wxPrintPreview::GetFrame() const +wxFrame *wxPrintPreview::GetFrame() const { return m_pimpl->GetFrame(); } -wxPreviewCanvas *wxPrintPreview::GetCanvas() const -{ +wxPreviewCanvas *wxPrintPreview::GetCanvas() const +{ return m_pimpl->GetCanvas(); } @@ -1192,5 +1512,4 @@ void wxPrintPreview::DetermineScaling() m_pimpl->DetermineScaling(); } - #endif // wxUSE_PRINTING_ARCHITECTURE