X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e81e3883b9dcfbc57ac66dc2ab8b9da443b8561a..c1099d92544fb97cb230248e50cf0c81a2633cdd:/include/wx/prntbase.h diff --git a/include/wx/prntbase.h b/include/wx/prntbase.h index 05a2284cf3..031f638afa 100644 --- a/include/wx/prntbase.h +++ b/include/wx/prntbase.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: prntbase.h +// Name: wx/prntbase.h // Purpose: Base classes for printing framework // Author: Julian Smart // Modified by: @@ -12,10 +12,6 @@ #ifndef _WX_PRNTBASEH__ #define _WX_PRNTBASEH__ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "prntbase.h" -#endif - #include "wx/defs.h" #if wxUSE_PRINTING_ARCHITECTURE @@ -26,18 +22,23 @@ #include "wx/scrolwin.h" #include "wx/dialog.h" #include "wx/frame.h" - -class WXDLLEXPORT wxDC; -class WXDLLEXPORT wxButton; -class WXDLLEXPORT wxChoice; -class WXDLLEXPORT wxPrintout; -class WXDLLEXPORT wxPrinterBase; -class WXDLLEXPORT wxPrintDialog; -class WXDLLEXPORT wxPrintPreviewBase; -class WXDLLEXPORT wxPreviewCanvas; -class WXDLLEXPORT wxPreviewControlBar; -class WXDLLEXPORT wxPreviewFrame; -class WXDLLEXPORT wxPrintFactory; +#include "wx/dc.h" + +class WXDLLIMPEXP_FWD_CORE wxDC; +class WXDLLIMPEXP_FWD_CORE wxButton; +class WXDLLIMPEXP_FWD_CORE wxChoice; +class WXDLLIMPEXP_FWD_CORE wxPrintout; +class WXDLLIMPEXP_FWD_CORE wxPrinterBase; +class WXDLLIMPEXP_FWD_CORE wxPrintDialogBase; +class WXDLLIMPEXP_FWD_CORE wxPrintDialog; +class WXDLLIMPEXP_FWD_CORE wxPageSetupDialogBase; +class WXDLLIMPEXP_FWD_CORE wxPageSetupDialog; +class WXDLLIMPEXP_FWD_CORE wxPrintPreviewBase; +class WXDLLIMPEXP_FWD_CORE wxPreviewCanvas; +class WXDLLIMPEXP_FWD_CORE wxPreviewControlBar; +class WXDLLIMPEXP_FWD_CORE wxPreviewFrame; +class WXDLLIMPEXP_FWD_CORE wxPrintFactory; +class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase; //---------------------------------------------------------------------------- // error consts @@ -54,43 +55,107 @@ enum wxPrinterError // wxPrintFactory //---------------------------------------------------------------------------- -class WXDLLEXPORT wxPrintFactory +class WXDLLIMPEXP_CORE wxPrintFactory { public: wxPrintFactory() {} virtual ~wxPrintFactory() {} - - virtual bool HasPageSetupDialog() = 0; - virtual bool HasPrintSetupDialog() = 0; - + virtual wxPrinterBase *CreatePrinter( wxPrintDialogData* data ) = 0; - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, - wxPrintout *printout = NULL, + + virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, + wxPrintout *printout = NULL, wxPrintDialogData *data = NULL ) = 0; - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, - wxPrintout *printout, + virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, + wxPrintout *printout, wxPrintData *data ) = 0; - + + virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, + wxPrintDialogData *data = NULL ) = 0; + virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, + wxPrintData *data ) = 0; + + virtual wxPageSetupDialogBase *CreatePageSetupDialog( wxWindow *parent, + wxPageSetupDialogData * data = NULL ) = 0; + + virtual wxDCImpl* CreatePrinterDCImpl( wxPrinterDC *owner, const wxPrintData& data ) = 0; + + // What to do and what to show in the wxPrintDialog + // a) Use the generic print setup dialog or a native one? + virtual bool HasPrintSetupDialog() = 0; + virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data ) = 0; + // b) Provide the "print to file" option ourselves or via print setup? + virtual bool HasOwnPrintToFile() = 0; + // c) Show current printer + virtual bool HasPrinterLine() = 0; + virtual wxString CreatePrinterLine() = 0; + // d) Show Status line for current printer? + virtual bool HasStatusLine() = 0; + virtual wxString CreateStatusLine() = 0; + + + virtual wxPrintNativeDataBase *CreatePrintNativeData() = 0; + static void SetPrintFactory( wxPrintFactory *factory ); static wxPrintFactory *GetFactory(); +private: static wxPrintFactory *m_factory; }; -class WXDLLEXPORT wxNativePrintFactory: public wxPrintFactory +class WXDLLIMPEXP_CORE wxNativePrintFactory: public wxPrintFactory { public: - virtual bool HasPageSetupDialog() - { return true; } - virtual bool HasPrintSetupDialog() - { return true; } - virtual wxPrinterBase *CreatePrinter( wxPrintDialogData *data ); - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, - wxPrintout *printout = NULL, + + virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, + wxPrintout *printout = NULL, wxPrintDialogData *data = NULL ); - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, + virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, wxPrintout *printout, wxPrintData *data ); + + virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, + wxPrintDialogData *data = NULL ); + virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, + wxPrintData *data ); + + virtual wxPageSetupDialogBase *CreatePageSetupDialog( wxWindow *parent, + wxPageSetupDialogData * data = NULL ); + + virtual wxDCImpl* CreatePrinterDCImpl( wxPrinterDC *owner, const wxPrintData& data ); + + virtual bool HasPrintSetupDialog(); + virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data ); + virtual bool HasOwnPrintToFile(); + virtual bool HasPrinterLine(); + virtual wxString CreatePrinterLine(); + virtual bool HasStatusLine(); + virtual wxString CreateStatusLine(); + + virtual wxPrintNativeDataBase *CreatePrintNativeData(); +}; + +//---------------------------------------------------------------------------- +// wxPrintNativeDataBase +//---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxPrintNativeDataBase: public wxObject +{ +public: + wxPrintNativeDataBase(); + virtual ~wxPrintNativeDataBase() {} + + virtual bool TransferTo( wxPrintData &data ) = 0; + virtual bool TransferFrom( const wxPrintData &data ) = 0; + + virtual bool Ok() const { return IsOk(); } + virtual bool IsOk() const = 0; + + int m_ref; + +private: + DECLARE_CLASS(wxPrintNativeDataBase) + DECLARE_NO_COPY_CLASS(wxPrintNativeDataBase) }; //---------------------------------------------------------------------------- @@ -101,17 +166,16 @@ public: * Represents the printer: manages printing a wxPrintout object */ -class WXDLLEXPORT wxPrinterBase: public wxObject +class WXDLLIMPEXP_CORE wxPrinterBase: public wxObject { public: - wxPrinterBase(wxPrintDialogData *data = (wxPrintDialogData *) NULL); + wxPrinterBase(wxPrintDialogData *data = NULL); virtual ~wxPrinterBase(); virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout); virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message); - wxPrintDialogData& GetPrintDialogData() const - { return (wxPrintDialogData&) m_printDialogData; } + virtual wxPrintDialogData& GetPrintDialogData() const; bool GetAbort() const { return sm_abortIt; } static wxPrinterError GetLastError() { return sm_lastError; } @@ -142,10 +206,10 @@ private: // wxPrinter //---------------------------------------------------------------------------- -class WXDLLEXPORT wxPrinter: public wxPrinterBase +class WXDLLIMPEXP_CORE wxPrinter: public wxPrinterBase { public: - wxPrinter(wxPrintDialogData *data = (wxPrintDialogData *) NULL); + wxPrinter(wxPrintDialogData *data = NULL); virtual ~wxPrinter(); virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout); @@ -155,9 +219,11 @@ public: virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = true); virtual wxDC* PrintDialog(wxWindow *parent); + virtual wxPrintDialogData& GetPrintDialogData() const; + protected: wxPrinterBase *m_pimpl; - + private: DECLARE_CLASS(wxPrinter) DECLARE_NO_COPY_CLASS(wxPrinter) @@ -174,7 +240,7 @@ private: * object for previewing. */ -class WXDLLEXPORT wxPrintout: public wxObject +class WXDLLIMPEXP_CORE wxPrintout: public wxObject { public: wxPrintout(const wxString& title = wxT("Printout")); @@ -196,16 +262,37 @@ public: wxDC *GetDC() const { return m_printoutDC; } void SetDC(wxDC *dc) { m_printoutDC = dc; } + + void FitThisSizeToPaper(const wxSize& imageSize); + void FitThisSizeToPage(const wxSize& imageSize); + void FitThisSizeToPageMargins(const wxSize& imageSize, const wxPageSetupDialogData& pageSetupData); + void MapScreenSizeToPaper(); + void MapScreenSizeToPage(); + void MapScreenSizeToPageMargins(const wxPageSetupDialogData& pageSetupData); + void MapScreenSizeToDevice(); + + wxRect GetLogicalPaperRect() const; + wxRect GetLogicalPageRect() const; + wxRect GetLogicalPageMarginsRect(const wxPageSetupDialogData& pageSetupData) const; + + void SetLogicalOrigin(wxCoord x, wxCoord y); + void OffsetLogicalOrigin(wxCoord xoff, wxCoord yoff); + void SetPageSizePixels(int w, int h) { m_pageWidthPixels = w; m_pageHeightPixels = h; } void GetPageSizePixels(int *w, int *h) const { *w = m_pageWidthPixels; *h = m_pageHeightPixels; } void SetPageSizeMM(int w, int h) { m_pageWidthMM = w; m_pageHeightMM = h; } void GetPageSizeMM(int *w, int *h) const { *w = m_pageWidthMM; *h = m_pageHeightMM; } void SetPPIScreen(int x, int y) { m_PPIScreenX = x; m_PPIScreenY = y; } + void SetPPIScreen(const wxSize& ppi) { SetPPIScreen(ppi.x, ppi.y); } void GetPPIScreen(int *x, int *y) const { *x = m_PPIScreenX; *y = m_PPIScreenY; } void SetPPIPrinter(int x, int y) { m_PPIPrinterX = x; m_PPIPrinterY = y; } + void SetPPIPrinter(const wxSize& ppi) { SetPPIPrinter(ppi.x, ppi.y); } void GetPPIPrinter(int *x, int *y) const { *x = m_PPIPrinterX; *y = m_PPIPrinterY; } + void SetPaperRectPixels(const wxRect& paperRectPixels) { m_paperRectPixels = paperRectPixels; } + wxRect GetPaperRectPixels() const { return m_paperRectPixels; } + virtual bool IsPreview() const { return m_isPreview; } virtual void SetIsPreview(bool p) { m_isPreview = p; } @@ -225,6 +312,8 @@ private: int m_PPIPrinterX; int m_PPIPrinterY; + wxRect m_paperRectPixels; + bool m_isPreview; private: @@ -232,12 +321,15 @@ private: DECLARE_NO_COPY_CLASS(wxPrintout) }; +//---------------------------------------------------------------------------- +// wxPreviewCanvas +//---------------------------------------------------------------------------- + /* - * wxPreviewCanvas * Canvas upon which a preview is drawn. */ -class WXDLLEXPORT wxPreviewCanvas: public wxScrolledWindow +class WXDLLIMPEXP_CORE wxPreviewCanvas: public wxScrolledWindow { public: wxPreviewCanvas(wxPrintPreviewBase *preview, @@ -246,15 +338,21 @@ public: const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("canvas")); - ~wxPreviewCanvas(); + virtual ~wxPreviewCanvas(); + + void SetPreview(wxPrintPreviewBase *preview) { m_printPreview = preview; } void OnPaint(wxPaintEvent& event); void OnChar(wxKeyEvent &event); - // Responds to colour changes void OnSysColourChanged(wxSysColourChangedEvent& event); private: +#if wxUSE_MOUSEWHEEL + void OnMouseWheel(wxMouseEvent& event); +#endif // wxUSE_MOUSEWHEEL + void OnIdle(wxIdleEvent& event); + wxPrintPreviewBase* m_printPreview; DECLARE_CLASS(wxPreviewCanvas) @@ -262,12 +360,15 @@ private: DECLARE_NO_COPY_CLASS(wxPreviewCanvas) }; +//---------------------------------------------------------------------------- +// wxPreviewFrame +//---------------------------------------------------------------------------- + /* - * wxPreviewFrame * Default frame for showing preview. */ -class WXDLLEXPORT wxPreviewFrame: public wxFrame +class WXDLLIMPEXP_CORE wxPreviewFrame: public wxFrame { public: wxPreviewFrame(wxPrintPreviewBase *preview, @@ -275,9 +376,9 @@ public: const wxString& title = wxT("Print Preview"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxT("frame")); - ~wxPreviewFrame(); + long style = wxDEFAULT_FRAME_STYLE | wxFRAME_FLOAT_ON_PARENT, + const wxString& name = wxFrameNameStr); + virtual ~wxPreviewFrame(); void OnCloseWindow(wxCloseEvent& event); virtual void Initialize(); @@ -293,13 +394,18 @@ protected: wxWindowDisabler* m_windowDisabler; private: - DECLARE_CLASS(wxPreviewFrame) + void OnChar(wxKeyEvent& event); + DECLARE_EVENT_TABLE() + DECLARE_CLASS(wxPreviewFrame) DECLARE_NO_COPY_CLASS(wxPreviewFrame) }; +//---------------------------------------------------------------------------- +// wxPreviewControlBar +//---------------------------------------------------------------------------- + /* - * wxPreviewControlBar * A panel with buttons for controlling a print preview. * The programmer may wish to use other means for controlling * the print preview. @@ -313,8 +419,8 @@ private: #define wxPREVIEW_LAST 32 #define wxPREVIEW_GOTO 64 -#define wxPREVIEW_DEFAULT wxPREVIEW_PREVIOUS|wxPREVIEW_NEXT|wxPREVIEW_ZOOM\ - |wxPREVIEW_FIRST|wxPREVIEW_GOTO|wxPREVIEW_LAST +#define wxPREVIEW_DEFAULT (wxPREVIEW_PREVIOUS|wxPREVIEW_NEXT|wxPREVIEW_ZOOM\ + |wxPREVIEW_FIRST|wxPREVIEW_GOTO|wxPREVIEW_LAST) // Ids for controls #define wxID_PREVIEW_CLOSE 1 @@ -326,7 +432,7 @@ private: #define wxID_PREVIEW_LAST 7 #define wxID_PREVIEW_GOTO 8 -class WXDLLEXPORT wxPreviewControlBar: public wxPanel +class WXDLLIMPEXP_CORE wxPreviewControlBar: public wxPanel { DECLARE_CLASS(wxPreviewControlBar) @@ -338,7 +444,7 @@ public: const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxT("panel")); - ~wxPreviewControlBar(); + virtual ~wxPreviewControlBar(); virtual void CreateButtons(); virtual void SetZoomControl(int zoom); @@ -387,12 +493,12 @@ private: * Programmer creates an object of this class to preview a wxPrintout. */ -class WXDLLEXPORT wxPrintPreviewBase: public wxObject +class WXDLLIMPEXP_CORE wxPrintPreviewBase: public wxObject { public: wxPrintPreviewBase(wxPrintout *printout, - wxPrintout *printoutForPrinting = (wxPrintout *) NULL, - wxPrintDialogData *data = (wxPrintDialogData *) NULL); + wxPrintout *printoutForPrinting = NULL, + wxPrintDialogData *data = NULL); wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintData *data); @@ -411,9 +517,17 @@ public: virtual wxFrame *GetFrame() const; virtual wxPreviewCanvas *GetCanvas() const; + // This is a helper routine, used by the next 4 routines. + + virtual void CalcRects(wxPreviewCanvas *canvas, wxRect& printableAreaRect, wxRect& paperRect); + // The preview canvas should call this from OnPaint virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc); + // Updates rendered page by calling RenderPage() if needed, returns true + // if there was some change. Preview canvas should call it at idle time + virtual bool UpdatePageRendering(); + // This draws a blank page onto the preview canvas virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc); @@ -428,11 +542,12 @@ public: virtual int GetZoom() const; virtual wxPrintDialogData& GetPrintDialogData(); - + virtual int GetMaxPage() const; virtual int GetMinPage() const; - virtual bool Ok() const; + virtual bool Ok() const { return IsOk(); } + virtual bool IsOk() const; virtual void SetOk(bool ok); /////////////////////////////////////////////////////////////////////////// @@ -448,16 +563,26 @@ public: // the currently selected printer. virtual void DetermineScaling() = 0; +protected: + // helpers for RenderPage(): + virtual bool RenderPageIntoDC(wxDC& dc, int pageNum); + // renders preview into m_previewBitmap + virtual bool RenderPageIntoBitmap(wxBitmap& bmp, int pageNum); + + void InvalidatePreviewBitmap(); + protected: wxPrintDialogData m_printDialogData; wxPreviewCanvas* m_previewCanvas; wxFrame* m_previewFrame; wxBitmap* m_previewBitmap; + bool m_previewFailed; wxPrintout* m_previewPrintout; wxPrintout* m_printPrintout; int m_currentPage; int m_currentZoom; - float m_previewScale; + float m_previewScaleX; + float m_previewScaleY; int m_topMargin; int m_leftMargin; int m_pageWidth; @@ -479,12 +604,12 @@ private: // wxPrintPreview //---------------------------------------------------------------------------- -class WXDLLEXPORT wxPrintPreview: public wxPrintPreviewBase +class WXDLLIMPEXP_CORE wxPrintPreview: public wxPrintPreviewBase { public: wxPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting = (wxPrintout *) NULL, - wxPrintDialogData *data = (wxPrintDialogData *) NULL); + wxPrintout *printoutForPrinting = NULL, + wxPrintDialogData *data = NULL); wxPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintData *data); @@ -501,22 +626,25 @@ public: virtual wxFrame *GetFrame() const; virtual wxPreviewCanvas *GetCanvas() const; virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc); + virtual bool UpdatePageRendering(); virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc); virtual void AdjustScrollbars(wxPreviewCanvas *canvas); virtual bool RenderPage(int pageNum); virtual void SetZoom(int percent); + virtual int GetZoom() const; virtual bool Print(bool interactive); virtual void DetermineScaling(); - + virtual wxPrintDialogData& GetPrintDialogData(); - + virtual int GetMaxPage() const; virtual int GetMinPage() const; - virtual bool Ok() const; + virtual bool Ok() const { return IsOk(); } + virtual bool IsOk() const; virtual void SetOk(bool ok); - + private: wxPrintPreviewBase *m_pimpl; @@ -529,7 +657,7 @@ private: // wxPrintAbortDialog //---------------------------------------------------------------------------- -class WXDLLEXPORT wxPrintAbortDialog: public wxDialog +class WXDLLIMPEXP_CORE wxPrintAbortDialog: public wxDialog { public: wxPrintAbortDialog(wxWindow *parent,