X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d427503c3696486ef84cd0e5081884ccd8d6b434..d7a80cf5cd3cd199ad7b3c08293676a393207f41:/include/wx/prntbase.h diff --git a/include/wx/prntbase.h b/include/wx/prntbase.h index 98e4ce8f0a..d8eb3c27a1 100644 --- a/include/wx/prntbase.h +++ b/include/wx/prntbase.h @@ -1,21 +1,17 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: prntbase.h +// Name: wx/prntbase.h // Purpose: Base classes for printing framework // Author: Julian Smart // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem +// Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_PRNTBASEH__ #define _WX_PRNTBASEH__ -#ifdef __GNUG__ - #pragma interface "prntbase.h" -#endif - #include "wx/defs.h" #if wxUSE_PRINTING_ARCHITECTURE @@ -32,11 +28,138 @@ class WXDLLEXPORT wxButton; class WXDLLEXPORT wxChoice; class WXDLLEXPORT wxPrintout; class WXDLLEXPORT wxPrinterBase; +class WXDLLEXPORT wxPrintDialogBase; class WXDLLEXPORT wxPrintDialog; +class WXDLLEXPORT wxPageSetupDialogBase; +class WXDLLEXPORT wxPageSetupDialog; class WXDLLEXPORT wxPrintPreviewBase; class WXDLLEXPORT wxPreviewCanvas; class WXDLLEXPORT wxPreviewControlBar; class WXDLLEXPORT wxPreviewFrame; +class WXDLLEXPORT wxPrintFactory; +class WXDLLEXPORT wxPrintNativeDataBase; + +//---------------------------------------------------------------------------- +// error consts +//---------------------------------------------------------------------------- + +enum wxPrinterError +{ + wxPRINTER_NO_ERROR = 0, + wxPRINTER_CANCELLED, + wxPRINTER_ERROR +}; + +//---------------------------------------------------------------------------- +// wxPrintFactory +//---------------------------------------------------------------------------- + +class WXDLLEXPORT wxPrintFactory +{ +public: + wxPrintFactory() {} + virtual ~wxPrintFactory() {} + + virtual wxPrinterBase *CreatePrinter( wxPrintDialogData* data ) = 0; + + virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, + wxPrintout *printout = NULL, + wxPrintDialogData *data = NULL ) = 0; + 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 wxDC* CreatePrinterDC( 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 +{ +public: + virtual wxPrinterBase *CreatePrinter( wxPrintDialogData *data ); + + virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, + wxPrintout *printout = NULL, + wxPrintDialogData *data = NULL ); + 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 wxDC* CreatePrinterDC( 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 WXDLLEXPORT 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) +}; + +//---------------------------------------------------------------------------- +// wxPrinterBase +//---------------------------------------------------------------------------- /* * Represents the printer: manages printing a wxPrintout object @@ -44,37 +167,72 @@ class WXDLLEXPORT wxPreviewFrame; class WXDLLEXPORT wxPrinterBase: public wxObject { - DECLARE_CLASS(wxPrinterBase) - public: wxPrinterBase(wxPrintDialogData *data = (wxPrintDialogData *) NULL); virtual ~wxPrinterBase(); virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout); - virtual void ReportError(wxWindow *parent, wxPrintout *printout, char *message); + 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; } + /////////////////////////////////////////////////////////////////////////// // OVERRIDES virtual bool Setup(wxWindow *parent) = 0; - virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE) = 0; + virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = true) = 0; virtual wxDC* PrintDialog(wxWindow *parent) = 0; protected: wxPrintDialogData m_printDialogData; wxPrintout* m_currentPrintout; + + static wxPrinterError sm_lastError; + public: static wxWindow* sm_abortWindow; static bool sm_abortIt; +private: + DECLARE_CLASS(wxPrinterBase) + DECLARE_NO_COPY_CLASS(wxPrinterBase) +}; + +//---------------------------------------------------------------------------- +// wxPrinter +//---------------------------------------------------------------------------- + +class WXDLLEXPORT wxPrinter: public wxPrinterBase +{ +public: + wxPrinter(wxPrintDialogData *data = (wxPrintDialogData *) NULL); + virtual ~wxPrinter(); + + virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout); + virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message); + + virtual bool Setup(wxWindow *parent); + 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) }; +//---------------------------------------------------------------------------- +// wxPrintout +//---------------------------------------------------------------------------- + /* - * wxPrintout * Represents an object via which a document may be printed. * The programmer derives from this, overrides (at least) OnPrintPage, * and passes it to a wxPrinter object for printing, or a wxPrintPreview @@ -83,10 +241,8 @@ public: class WXDLLEXPORT wxPrintout: public wxObject { -DECLARE_ABSTRACT_CLASS(wxPrintout) - public: - wxPrintout(const wxString& title = "Printout"); + wxPrintout(const wxString& title = wxT("Printout")); virtual ~wxPrintout(); virtual bool OnBeginDocument(int startPage, int endPage); @@ -105,6 +261,22 @@ 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; } @@ -115,6 +287,9 @@ public: void SetPPIPrinter(int x, int y) { m_PPIPrinterX = x; m_PPIPrinterY = 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; } @@ -134,73 +309,95 @@ private: int m_PPIPrinterX; int m_PPIPrinterY; + wxRect m_paperRectPixels; + bool m_isPreview; + +private: + DECLARE_ABSTRACT_CLASS(wxPrintout) + DECLARE_NO_COPY_CLASS(wxPrintout) }; +//---------------------------------------------------------------------------- +// wxPreviewCanvas +//---------------------------------------------------------------------------- + /* - * wxPreviewCanvas * Canvas upon which a preview is drawn. */ class WXDLLEXPORT wxPreviewCanvas: public wxScrolledWindow { - DECLARE_CLASS(wxPreviewCanvas) - public: wxPreviewCanvas(wxPrintPreviewBase *preview, wxWindow *parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = "canvas"); - ~wxPreviewCanvas(); + const wxString& name = wxT("canvas")); + virtual ~wxPreviewCanvas(); 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 + wxPrintPreviewBase* m_printPreview; + DECLARE_CLASS(wxPreviewCanvas) DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxPreviewCanvas) }; +//---------------------------------------------------------------------------- +// wxPreviewFrame +//---------------------------------------------------------------------------- + /* - * wxPreviewFrame * Default frame for showing preview. */ class WXDLLEXPORT wxPreviewFrame: public wxFrame { - DECLARE_CLASS(wxPreviewFrame) - public: wxPreviewFrame(wxPrintPreviewBase *preview, - wxFrame *parent, - const wxString& title = "Print Preview", + wxWindow *parent, + const wxString& title = wxT("Print Preview"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = "frame"); - ~wxPreviewFrame(); + const wxString& name = wxT("frame")); + virtual ~wxPreviewFrame(); void OnCloseWindow(wxCloseEvent& event); virtual void Initialize(); virtual void CreateCanvas(); virtual void CreateControlBar(); + inline wxPreviewControlBar* GetControlBar() const { return m_controlBar; } + protected: - wxWindow* m_previewCanvas; + wxPreviewCanvas* m_previewCanvas; wxPreviewControlBar* m_controlBar; wxPrintPreviewBase* m_printPreview; + wxWindowDisabler* m_windowDisabler; private: + DECLARE_CLASS(wxPreviewFrame) DECLARE_EVENT_TABLE() + 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. @@ -210,8 +407,12 @@ private: #define wxPREVIEW_PREVIOUS 2 #define wxPREVIEW_NEXT 4 #define wxPREVIEW_ZOOM 8 +#define wxPREVIEW_FIRST 16 +#define wxPREVIEW_LAST 32 +#define wxPREVIEW_GOTO 64 -#define wxPREVIEW_DEFAULT wxPREVIEW_PREVIOUS|wxPREVIEW_NEXT|wxPREVIEW_ZOOM +#define wxPREVIEW_DEFAULT (wxPREVIEW_PREVIOUS|wxPREVIEW_NEXT|wxPREVIEW_ZOOM\ + |wxPREVIEW_FIRST|wxPREVIEW_GOTO|wxPREVIEW_LAST) // Ids for controls #define wxID_PREVIEW_CLOSE 1 @@ -219,6 +420,9 @@ private: #define wxID_PREVIEW_PREVIOUS 3 #define wxID_PREVIEW_PRINT 4 #define wxID_PREVIEW_ZOOM 5 +#define wxID_PREVIEW_FIRST 6 +#define wxID_PREVIEW_LAST 7 +#define wxID_PREVIEW_GOTO 8 class WXDLLEXPORT wxPreviewControlBar: public wxPanel { @@ -230,9 +434,9 @@ public: wxWindow *parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = "panel"); - ~wxPreviewControlBar(); + long style = wxTAB_TRAVERSAL, + const wxString& name = wxT("panel")); + virtual ~wxPreviewControlBar(); virtual void CreateButtons(); virtual void SetZoomControl(int zoom); @@ -240,10 +444,19 @@ public: virtual wxPrintPreviewBase *GetPrintPreview() const { return m_printPreview; } - void OnPrint(wxCommandEvent& event); void OnWindowClose(wxCommandEvent& event); - void OnNext(wxCommandEvent& event); - void OnPrevious(wxCommandEvent& event); + void OnNext(); + void OnPrevious(); + void OnFirst(); + void OnLast(); + void OnGoto(); + void OnPrint(); + void OnPrintButton(wxCommandEvent& WXUNUSED(event)) { OnPrint(); } + void OnNextButton(wxCommandEvent & WXUNUSED(event)) { OnNext(); } + void OnPreviousButton(wxCommandEvent & WXUNUSED(event)) { OnPrevious(); } + void OnFirstButton(wxCommandEvent & WXUNUSED(event)) { OnFirst(); } + void OnLastButton(wxCommandEvent & WXUNUSED(event)) { OnLast(); } + void OnGotoButton(wxCommandEvent & WXUNUSED(event)) { OnGoto(); } void OnZoom(wxCommandEvent& event); void OnPaint(wxPaintEvent& event); @@ -254,21 +467,26 @@ protected: wxButton* m_previousPageButton; wxButton* m_printButton; wxChoice* m_zoomControl; + wxButton* m_firstPageButton; + wxButton* m_lastPageButton; + wxButton* m_gotoPageButton; long m_buttonFlags; private: DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxPreviewControlBar) }; +//---------------------------------------------------------------------------- +// wxPrintPreviewBase +//---------------------------------------------------------------------------- + /* - * wxPrintPreview * Programmer creates an object of this class to preview a wxPrintout. */ class WXDLLEXPORT wxPrintPreviewBase: public wxObject { - DECLARE_CLASS(wxPrintPreviewBase) - public: wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printoutForPrinting = (wxPrintout *) NULL, @@ -279,37 +497,46 @@ public: virtual ~wxPrintPreviewBase(); virtual bool SetCurrentPage(int pageNum); - int GetCurrentPage() const { return m_currentPage; }; + virtual int GetCurrentPage() const; + + virtual void SetPrintout(wxPrintout *printout); + virtual wxPrintout *GetPrintout() const; + virtual wxPrintout *GetPrintoutForPrinting() const; - void SetPrintout(wxPrintout *printout) { m_previewPrintout = printout; }; - wxPrintout *GetPrintout() const { return m_previewPrintout; }; - wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; }; + virtual void SetFrame(wxFrame *frame); + virtual void SetCanvas(wxPreviewCanvas *canvas); - void SetFrame(wxFrame *frame) { m_previewFrame = frame; }; - void SetCanvas(wxWindow *canvas) { m_previewCanvas = canvas; }; + virtual wxFrame *GetFrame() const; + virtual wxPreviewCanvas *GetCanvas() const; - virtual wxFrame *GetFrame() const { return m_previewFrame; } - virtual wxWindow *GetCanvas() const { return m_previewCanvas; } + // 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(wxWindow *canvas, wxDC& dc); + virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc); // This draws a blank page onto the preview canvas - virtual bool DrawBlankPage(wxWindow *canvas, wxDC& dc); + virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc); + + // Adjusts the scrollbars for the current scale + virtual void AdjustScrollbars(wxPreviewCanvas *canvas); // This is called by wxPrintPreview to render a page into a wxMemoryDC. virtual bool RenderPage(int pageNum); - wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; } virtual void SetZoom(int percent); - int GetZoom() const { return m_currentZoom; }; + virtual int GetZoom() const; + + virtual wxPrintDialogData& GetPrintDialogData(); - int GetMaxPage() const { return m_maxPage; } - int GetMinPage() const { return m_minPage; } + virtual int GetMaxPage() const; + virtual int GetMinPage() const; - bool Ok() const { return m_isOk; } - void SetOk(bool ok) { m_isOk = ok; } + virtual bool Ok() const { return IsOk(); } + virtual bool IsOk() const; + virtual void SetOk(bool ok); /////////////////////////////////////////////////////////////////////////// // OVERRIDES @@ -326,14 +553,15 @@ public: protected: wxPrintDialogData m_printDialogData; - wxWindow* m_previewCanvas; + wxPreviewCanvas* m_previewCanvas; wxFrame* m_previewFrame; wxBitmap* m_previewBitmap; 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; @@ -342,14 +570,70 @@ protected: int m_maxPage; bool m_isOk; + bool m_printingPrepared; // Called OnPreparePrinting? private: void Init(wxPrintout *printout, wxPrintout *printoutForPrinting); + + DECLARE_NO_COPY_CLASS(wxPrintPreviewBase) + DECLARE_CLASS(wxPrintPreviewBase) }; -/* - * Abort dialog - */ +//---------------------------------------------------------------------------- +// wxPrintPreview +//---------------------------------------------------------------------------- + +class WXDLLEXPORT wxPrintPreview: public wxPrintPreviewBase +{ +public: + wxPrintPreview(wxPrintout *printout, + wxPrintout *printoutForPrinting = (wxPrintout *) NULL, + wxPrintDialogData *data = (wxPrintDialogData *) NULL); + wxPrintPreview(wxPrintout *printout, + wxPrintout *printoutForPrinting, + wxPrintData *data); + virtual ~wxPrintPreview(); + + virtual bool SetCurrentPage(int pageNum); + virtual int GetCurrentPage() const; + virtual void SetPrintout(wxPrintout *printout); + virtual wxPrintout *GetPrintout() const; + virtual wxPrintout *GetPrintoutForPrinting() const; + virtual void SetFrame(wxFrame *frame); + virtual void SetCanvas(wxPreviewCanvas *canvas); + + virtual wxFrame *GetFrame() const; + virtual wxPreviewCanvas *GetCanvas() const; + virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc); + 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 { return IsOk(); } + virtual bool IsOk() const; + virtual void SetOk(bool ok); + +private: + wxPrintPreviewBase *m_pimpl; + +private: + DECLARE_CLASS(wxPrintPreview) + DECLARE_NO_COPY_CLASS(wxPrintPreview) +}; + +//---------------------------------------------------------------------------- +// wxPrintAbortDialog +//---------------------------------------------------------------------------- class WXDLLEXPORT wxPrintAbortDialog: public wxDialog { @@ -359,8 +643,8 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = "dialog") - : wxDialog(parent, -1, title, pos, size, style, name) + const wxString& name = wxT("dialog")) + : wxDialog(parent, wxID_ANY, title, pos, size, style, name) { } @@ -368,6 +652,7 @@ public: private: DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxPrintAbortDialog) }; #endif // wxUSE_PRINTING_ARCHITECTURE