X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/34138703c3997ce676a1e713d9ff9eb020640da7..85f138db83939ce7c59a942aaecca7fa98168db3:/include/wx/prntbase.h diff --git a/include/wx/prntbase.h b/include/wx/prntbase.h index be72e1d0f2..bc8df5fed0 100644 --- a/include/wx/prntbase.h +++ b/include/wx/prntbase.h @@ -5,18 +5,21 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows licence +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_PRNTBASEH__ #define _WX_PRNTBASEH__ -#ifdef __GNUG__ -#pragma interface "prntbase.h" +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) + #pragma interface "prntbase.h" #endif #include "wx/defs.h" + +#if wxUSE_PRINTING_ARCHITECTURE + #include "wx/event.h" #include "wx/cmndata.h" #include "wx/panel.h" @@ -35,35 +38,54 @@ class WXDLLEXPORT wxPreviewCanvas; class WXDLLEXPORT wxPreviewControlBar; class WXDLLEXPORT wxPreviewFrame; + +enum wxPrinterError +{ + wxPRINTER_NO_ERROR = 0, + wxPRINTER_CANCELLED, + wxPRINTER_ERROR +}; + + /* * Represents the printer: manages printing a wxPrintout object */ - + class WXDLLEXPORT wxPrinterBase: public wxObject { - DECLARE_CLASS(wxPrinterBase) - - protected: - wxPrintData printData; - wxPrintout *currentPrintout; - public: - static wxWindow *abortWindow; - static bool abortIt; - - wxPrinterBase(wxPrintData *data = NULL); - ~wxPrinterBase(void); - - virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout); - virtual void ReportError(wxWindow *parent, wxPrintout *printout, char *message); - inline wxPrintData& GetPrintData(void) { return printData; }; - inline bool GetAbort(void) { return abortIt; } - - /////////////////////////////////////////////////////////////////////////// - // OVERRIDES +public: + wxPrinterBase(wxPrintDialogData *data = (wxPrintDialogData *) 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; } + 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 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; - virtual bool Setup(wxWindow *parent) = 0; - virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE) = 0; - virtual bool PrintDialog(wxWindow *parent) = 0; +private: + DECLARE_CLASS(wxPrinterBase) + DECLARE_NO_COPY_CLASS(wxPrinterBase) }; /* @@ -73,85 +95,93 @@ class WXDLLEXPORT wxPrinterBase: public wxObject * and passes it to a wxPrinter object for printing, or a wxPrintPreview * object for previewing. */ - + class WXDLLEXPORT wxPrintout: public wxObject { - DECLARE_ABSTRACT_CLASS(wxPrintout) +public: + wxPrintout(const wxString& title = wxT("Printout")); + virtual ~wxPrintout(); - private: - char *printoutTitle; - wxDC *printoutDC; + virtual bool OnBeginDocument(int startPage, int endPage); + virtual void OnEndDocument(); + virtual void OnBeginPrinting(); + virtual void OnEndPrinting(); - int pageWidthPixels; - int pageHeightPixels; + // Guaranteed to be before any other functions are called + virtual void OnPreparePrinting() { } - int pageWidthMM; - int pageHeightMM; + virtual bool HasPage(int page); + virtual bool OnPrintPage(int page) = 0; + virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo); - int PPIScreenX; - int PPIScreenY; - int PPIPrinterX; - int PPIPrinterY; + virtual wxString GetTitle() const { return m_printoutTitle; } - bool isPreview; - public: - wxPrintout(const char *title = "Printout"); - ~wxPrintout(void); + wxDC *GetDC() const { return m_printoutDC; } + void SetDC(wxDC *dc) { m_printoutDC = dc; } + 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; } - virtual bool OnBeginDocument(int startPage, int endPage); - virtual void OnEndDocument(void); - virtual void OnBeginPrinting(void); - virtual void OnEndPrinting(void); + void SetPPIScreen(int x, int y) { m_PPIScreenX = x; m_PPIScreenY = 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 GetPPIPrinter(int *x, int *y) const { *x = m_PPIPrinterX; *y = m_PPIPrinterY; } - // Guaranteed to be before any other functions are called - inline virtual void OnPreparePrinting(void) { } + virtual bool IsPreview() const { return m_isPreview; } - virtual bool HasPage(int page); - virtual bool OnPrintPage(int page) = 0; - virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo); + virtual void SetIsPreview(bool p) { m_isPreview = p; } - inline virtual char *GetTitle(void) { return printoutTitle; } +private: + wxString m_printoutTitle; + wxDC* m_printoutDC; - inline wxDC *GetDC(void) { return printoutDC; } - inline void SetDC(wxDC *dc) { printoutDC = dc; } - inline void SetPageSizePixels(int w, int h) { pageWidthPixels = w; pageHeightPixels = h; } - inline void GetPageSizePixels(int *w, int *h) { *w = pageWidthPixels; *h = pageHeightPixels; } - inline void SetPageSizeMM(int w, int h) { pageWidthMM = w; pageHeightMM = h; } - inline void GetPageSizeMM(int *w, int *h) { *w = pageWidthMM; *h = pageHeightMM; } + int m_pageWidthPixels; + int m_pageHeightPixels; - inline void SetPPIScreen(int x, int y) { PPIScreenX = x; PPIScreenY = y; } - inline void GetPPIScreen(int *x, int *y) { *x = PPIScreenX; *y = PPIScreenY; } - inline void SetPPIPrinter(int x, int y) { PPIPrinterX = x; PPIPrinterY = y; } - inline void GetPPIPrinter(int *x, int *y) { *x = PPIPrinterX; *y = PPIPrinterY; } + int m_pageWidthMM; + int m_pageHeightMM; - inline virtual bool IsPreview(void) { return isPreview; } + int m_PPIScreenX; + int m_PPIScreenY; + int m_PPIPrinterX; + int m_PPIPrinterY; - inline virtual void SetIsPreview(bool p) { isPreview = p; } + bool m_isPreview; + +private: + DECLARE_ABSTRACT_CLASS(wxPrintout) + DECLARE_NO_COPY_CLASS(wxPrintout) }; /* * wxPreviewCanvas * Canvas upon which a preview is drawn. */ - + class WXDLLEXPORT wxPreviewCanvas: public wxScrolledWindow { - DECLARE_CLASS(wxPreviewCanvas) - - private: - wxPrintPreviewBase *printPreview; - public: - wxPreviewCanvas(wxPrintPreviewBase *preview, wxWindow *parent, - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, const wxString& name = "canvas"); - ~wxPreviewCanvas(void); - - void OnPaint(wxPaintEvent& event); - - // Responds to colour changes - void OnSysColourChanged(wxSysColourChangedEvent& event); - -DECLARE_EVENT_TABLE() +public: + wxPreviewCanvas(wxPrintPreviewBase *preview, + wxWindow *parent, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxT("canvas")); + ~wxPreviewCanvas(); + + void OnPaint(wxPaintEvent& event); + void OnChar(wxKeyEvent &event); + + // Responds to colour changes + void OnSysColourChanged(wxSysColourChangedEvent& event); + +private: + wxPrintPreviewBase* m_printPreview; + + DECLARE_CLASS(wxPreviewCanvas) + DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxPreviewCanvas) }; /* @@ -161,22 +191,33 @@ DECLARE_EVENT_TABLE() class WXDLLEXPORT wxPreviewFrame: public wxFrame { - DECLARE_CLASS(wxPreviewFrame) - - protected: - wxWindow *previewCanvas; - wxPreviewControlBar *controlBar; - wxPrintPreviewBase *printPreview; - public: - wxPreviewFrame(wxPrintPreviewBase *preview, wxFrame *parent, const wxString& title = "Print Preview", - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME, const wxString& name = "frame"); - ~wxPreviewFrame(void); - - bool OnClose(void); - virtual void Initialize(void); - virtual void CreateCanvas(void); - virtual void CreateControlBar(void); +public: + wxPreviewFrame(wxPrintPreviewBase *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 = wxT("frame")); + ~wxPreviewFrame(); + + void OnCloseWindow(wxCloseEvent& event); + virtual void Initialize(); + virtual void CreateCanvas(); + virtual void CreateControlBar(); + + inline wxPreviewControlBar* GetControlBar() const { return m_controlBar; } + +protected: + wxPreviewCanvas* m_previewCanvas; + wxPreviewControlBar* m_controlBar; + wxPrintPreviewBase* m_printPreview; + wxWindowDisabler* m_windowDisabler; + +private: + DECLARE_CLASS(wxPreviewFrame) + DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxPreviewFrame) }; /* @@ -190,8 +231,12 @@ class WXDLLEXPORT wxPreviewFrame: public wxFrame #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 @@ -199,118 +244,154 @@ class WXDLLEXPORT wxPreviewFrame: public wxFrame #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 { - DECLARE_CLASS(wxPreviewControlBar) - - protected: - wxPrintPreviewBase *printPreview; - wxButton *closeButton; - wxButton *nextPageButton; - wxButton *previousPageButton; - wxButton *printButton; - wxChoice *zoomControl; - static wxFont *buttonFont; - long buttonFlags; - public: - wxPreviewControlBar(wxPrintPreviewBase *preview, long buttons, - wxWindow *parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, const wxString& name = "panel"); - ~wxPreviewControlBar(void); - - virtual void CreateButtons(void); - virtual void SetZoomControl(int zoom); - virtual int GetZoomControl(void); - inline virtual wxPrintPreviewBase *GetPrintPreview(void) { return printPreview; } - - void OnPrint(wxCommandEvent& event); - void OnClose(wxCommandEvent& event); - void OnNext(wxCommandEvent& event); - void OnPrevious(wxCommandEvent& event); - void OnZoom(wxCommandEvent& event); - void OnPaint(wxPaintEvent& event); - -DECLARE_EVENT_TABLE() + DECLARE_CLASS(wxPreviewControlBar) + +public: + wxPreviewControlBar(wxPrintPreviewBase *preview, + long buttons, + wxWindow *parent, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL, + const wxString& name = wxT("panel")); + ~wxPreviewControlBar(); + + virtual void CreateButtons(); + virtual void SetZoomControl(int zoom); + virtual int GetZoomControl(); + virtual wxPrintPreviewBase *GetPrintPreview() const + { return m_printPreview; } + + void OnWindowClose(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); + +protected: + wxPrintPreviewBase* m_printPreview; + wxButton* m_closeButton; + wxButton* m_nextPageButton; + 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) }; /* * wxPrintPreview * Programmer creates an object of this class to preview a wxPrintout. */ - + class WXDLLEXPORT wxPrintPreviewBase: public wxObject { - DECLARE_CLASS(wxPrintPreviewBase) - - protected: - wxPrintData printData; - wxWindow *previewCanvas; - wxFrame *previewFrame; - wxBitmap *previewBitmap; - wxPrintout *previewPrintout; - wxPrintout *printPrintout; - int currentPage; - int currentZoom; - float previewScale; - int topMargin; - int leftMargin; - int pageWidth; - int pageHeight; - int minPage; - int maxPage; - protected: - bool isOk; - public: - wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printoutForPrinting = NULL, wxPrintData *data = NULL); - ~wxPrintPreviewBase(void); - - virtual bool SetCurrentPage(int pageNum); - inline int GetCurrentPage(void) { return currentPage; }; - - inline void SetPrintout(wxPrintout *printout) { previewPrintout = printout; }; - inline wxPrintout *GetPrintout(void) { return previewPrintout; }; - inline wxPrintout *GetPrintoutForPrinting(void) { return printPrintout; }; - - inline void SetFrame(wxFrame *frame) { previewFrame = frame; }; - inline void SetCanvas(wxWindow *canvas) { previewCanvas = canvas; }; - - inline virtual wxFrame *GetFrame(void) { return previewFrame; } - inline virtual wxWindow *GetCanvas(void) { return previewCanvas; } - - // The preview canvas should call this from OnPaint - virtual bool PaintPage(wxWindow *canvas, wxDC& dc); - - // This draws a blank page onto the preview canvas - virtual bool DrawBlankPage(wxWindow *canvas, wxDC& dc); - - // This is called by wxPrintPreview to render a page into - // a wxMemoryDC. - virtual bool RenderPage(int pageNum); - - inline wxPrintData& GetPrintData(void) { return printData; } - - virtual void SetZoom(int percent); - int GetZoom(void) { return currentZoom; }; - - inline int GetMaxPage(void) { return maxPage; } - inline int GetMinPage(void) { return minPage; } - - inline bool Ok(void) { return isOk; } - inline void SetOk(bool ok) { isOk = ok; } - - /////////////////////////////////////////////////////////////////////////// - // OVERRIDES - - // If we own a wxPrintout that can be used for printing, this - // will invoke the actual printing procedure. Called - // by the wxPreviewControlBar. - virtual bool Print(bool interactive) = 0; - - // Calculate scaling that needs to be done to get roughly - // the right scaling for the screen pretending to be - // the currently selected printer. - virtual void DetermineScaling(void) = 0; + DECLARE_CLASS(wxPrintPreviewBase) + +public: + wxPrintPreviewBase(wxPrintout *printout, + wxPrintout *printoutForPrinting = (wxPrintout *) NULL, + wxPrintDialogData *data = (wxPrintDialogData *) NULL); + wxPrintPreviewBase(wxPrintout *printout, + wxPrintout *printoutForPrinting, + wxPrintData *data); + virtual ~wxPrintPreviewBase(); + + virtual bool SetCurrentPage(int pageNum); + int GetCurrentPage() const { return m_currentPage; }; + + void SetPrintout(wxPrintout *printout) { m_previewPrintout = printout; }; + wxPrintout *GetPrintout() const { return m_previewPrintout; }; + wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; }; + + void SetFrame(wxFrame *frame) { m_previewFrame = frame; }; + void SetCanvas(wxPreviewCanvas *canvas) { m_previewCanvas = canvas; }; + + virtual wxFrame *GetFrame() const { return m_previewFrame; } + virtual wxPreviewCanvas *GetCanvas() const { return m_previewCanvas; } + + // The preview canvas should call this from OnPaint + virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc); + + // This draws a blank page onto the preview canvas + 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; }; + + int GetMaxPage() const { return m_maxPage; } + int GetMinPage() const { return m_minPage; } + + bool Ok() const { return m_isOk; } + void SetOk(bool ok) { m_isOk = ok; } + + /////////////////////////////////////////////////////////////////////////// + // OVERRIDES + + // If we own a wxPrintout that can be used for printing, this + // will invoke the actual printing procedure. Called + // by the wxPreviewControlBar. + virtual bool Print(bool interactive) = 0; + + // Calculate scaling that needs to be done to get roughly + // the right scaling for the screen pretending to be + // the currently selected printer. + virtual void DetermineScaling() = 0; + +protected: + wxPrintDialogData m_printDialogData; + wxPreviewCanvas* m_previewCanvas; + wxFrame* m_previewFrame; + wxBitmap* m_previewBitmap; + wxPrintout* m_previewPrintout; + wxPrintout* m_printPrintout; + int m_currentPage; + int m_currentZoom; + float m_previewScale; + int m_topMargin; + int m_leftMargin; + int m_pageWidth; + int m_pageHeight; + int m_minPage; + int m_maxPage; + + bool m_isOk; + bool m_printingPrepared; // Called OnPreparePrinting? + +private: + void Init(wxPrintout *printout, wxPrintout *printoutForPrinting); + + DECLARE_NO_COPY_CLASS(wxPrintPreviewBase) }; /* @@ -320,17 +401,24 @@ class WXDLLEXPORT wxPrintPreviewBase: public wxObject class WXDLLEXPORT wxPrintAbortDialog: public wxDialog { public: - void OnCancel(wxCommandEvent& event); + wxPrintAbortDialog(wxWindow *parent, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxT("dialog")) + : wxDialog(parent, -1, title, pos, size, style, name) + { + } - wxPrintAbortDialog(wxWindow *parent, - const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, const wxString& name = "dialog"): - wxDialog(parent, -1, title, pos, size, style, name) - { - } + void OnCancel(wxCommandEvent& event); - DECLARE_EVENT_TABLE() +private: + DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxPrintAbortDialog) }; +#endif // wxUSE_PRINTING_ARCHITECTURE + #endif // _WX_PRNTBASEH__