]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/prntbase.h
create the DIBs in correct (and not down up) line order
[wxWidgets.git] / include / wx / prntbase.h
index 9bd3aeb0c1e7cc0c2c328d7b4baf434d448d413e..8525fb46894fa2b51f5c34bed5c75c0a15579660 100644 (file)
@@ -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(__APPLE__)
+    #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,37 +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)
-
 public:
-  wxPrinterBase(wxPrintData *data = (wxPrintData *) NULL);
-  ~wxPrinterBase();
+    wxPrinterBase(wxPrintDialogData *data = (wxPrintDialogData *) NULL);
+    virtual ~wxPrinterBase();
+
+    virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout);
+    virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message);
 
-  virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout);
-  virtual void ReportError(wxWindow *parent, wxPrintout *printout, char *message);
-  inline wxPrintData& GetPrintData() { return m_printData; };
-  inline bool GetAbort() { return sm_abortIt; }
+    wxPrintDialogData& GetPrintDialogData() const
+        { return (wxPrintDialogData&) m_printDialogData; }
+    bool GetAbort() const { return sm_abortIt; }
+    
+    static wxPrinterError GetLastError() { return sm_lastError; }
 
-  ///////////////////////////////////////////////////////////////////////////
-  // OVERRIDES
+    ///////////////////////////////////////////////////////////////////////////
+    // OVERRIDES
 
-  virtual bool Setup(wxWindow *parent) = 0;
-  virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE) = 0;
-  virtual bool PrintDialog(wxWindow *parent) = 0;
+    virtual bool Setup(wxWindow *parent) = 0;
+    virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE) = 0;
+    virtual wxDC* PrintDialog(wxWindow *parent) = 0;
 
 protected:
-  wxPrintData           m_printData;
-  wxPrintout*           m_currentPrintout;
+    wxPrintDialogData     m_printDialogData;
+    wxPrintout*           m_currentPrintout;
+    
+    static wxPrinterError sm_lastError;
+    
 public:
-  static wxWindow*      sm_abortWindow;
-  static bool           sm_abortIt;
+    static wxWindow*      sm_abortWindow;
+    static bool           sm_abortIt;
 
+private:
+    DECLARE_CLASS(wxPrinterBase)
+    DECLARE_NO_COPY_CLASS(wxPrinterBase)
 };
 
 /*
@@ -75,87 +95,92 @@ public:
  * 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 = "Printout");
-  ~wxPrintout();
+    wxPrintout(const wxString& title = wxT("Printout"));
+    virtual ~wxPrintout();
 
-  virtual bool OnBeginDocument(int startPage, int endPage);
-  virtual void OnEndDocument();
-  virtual void OnBeginPrinting();
-  virtual void OnEndPrinting();
+    virtual bool OnBeginDocument(int startPage, int endPage);
+    virtual void OnEndDocument();
+    virtual void OnBeginPrinting();
+    virtual void OnEndPrinting();
 
-  // Guaranteed to be before any other functions are called
-  inline virtual void OnPreparePrinting() { }
+    // Guaranteed to be before any other functions are called
+    virtual void OnPreparePrinting() { }
 
-  virtual bool HasPage(int page);
-  virtual bool OnPrintPage(int page) = 0;
-  virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
+    virtual bool HasPage(int page);
+    virtual bool OnPrintPage(int page) = 0;
+    virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
 
-  inline virtual wxString GetTitle() { return m_printoutTitle; }
+    virtual wxString GetTitle() const { return m_printoutTitle; }
 
-  inline wxDC *GetDC() { return m_printoutDC; }
-  inline void SetDC(wxDC *dc) { m_printoutDC = dc; }
-  inline void SetPageSizePixels(int w, int  h) { m_pageWidthPixels = w; m_pageHeightPixels = h; }
-  inline void GetPageSizePixels(int *w, int  *h) { *w = m_pageWidthPixels; *h = m_pageHeightPixels; }
-  inline void SetPageSizeMM(int w, int  h) { m_pageWidthMM = w; m_pageHeightMM = h; }
-  inline void GetPageSizeMM(int *w, int  *h) { *w = m_pageWidthMM; *h = m_pageHeightMM; }
+    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; }
 
-  inline void SetPPIScreen(int x, int y) { m_PPIScreenX = x; m_PPIScreenY = y; }
-  inline void GetPPIScreen(int *x, int *y) { *x = m_PPIScreenX; *y = m_PPIScreenY; }
-  inline void SetPPIPrinter(int x, int y) { m_PPIPrinterX = x; m_PPIPrinterY = y; }
-  inline void GetPPIPrinter(int *x, int *y) { *x = m_PPIPrinterX; *y = m_PPIPrinterY; }
+    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; }
 
-  inline virtual bool IsPreview() { return m_isPreview; }
+    virtual bool IsPreview() const { return m_isPreview; }
 
-  inline virtual void SetIsPreview(bool p) { m_isPreview = p; }
+    virtual void SetIsPreview(bool p) { m_isPreview = p; }
 
 private:
-   wxString         m_printoutTitle;
-   wxDC*            m_printoutDC;
+    wxString         m_printoutTitle;
+    wxDC*            m_printoutDC;
+
+    int              m_pageWidthPixels;
+    int              m_pageHeightPixels;
 
-   int              m_pageWidthPixels;
-   int              m_pageHeightPixels;
+    int              m_pageWidthMM;
+    int              m_pageHeightMM;
 
-   int              m_pageWidthMM;
-   int              m_pageHeightMM;
+    int              m_PPIScreenX;
+    int              m_PPIScreenY;
+    int              m_PPIPrinterX;
+    int              m_PPIPrinterY;
 
-   int              m_PPIScreenX;
-   int              m_PPIScreenY;
-   int              m_PPIPrinterX;
-   int              m_PPIPrinterY;
+    bool             m_isPreview;
 
-   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)
-
 public:
-  wxPreviewCanvas(wxPrintPreviewBase *preview, wxWindow *parent,
-    const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
-    long style = 0, const wxString& name = "canvas");
-  ~wxPreviewCanvas();
+    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 OnPaint(wxPaintEvent& event);
 
-  // Responds to colour changes
-  void OnSysColourChanged(wxSysColourChangedEvent& event);
+    // Responds to colour changes
+    void OnSysColourChanged(wxSysColourChangedEvent& event);
 
 private:
-  wxPrintPreviewBase*       m_printPreview;
+    wxPrintPreviewBase* m_printPreview;
 
-DECLARE_EVENT_TABLE()
+    DECLARE_CLASS(wxPreviewCanvas)
+    DECLARE_EVENT_TABLE()
+    DECLARE_NO_COPY_CLASS(wxPreviewCanvas)
 };
 
 /*
@@ -165,23 +190,29 @@ DECLARE_EVENT_TABLE()
 
 class WXDLLEXPORT wxPreviewFrame: public wxFrame
 {
-  DECLARE_CLASS(wxPreviewFrame)
-
 public:
-  wxPreviewFrame(wxPrintPreviewBase *preview, wxFrame *parent, const wxString& title = "Print Preview",
-    const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
-    long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame");
-  ~wxPreviewFrame();
-
-  bool OnClose();
-  virtual void Initialize();
-  virtual void CreateCanvas();
-  virtual void CreateControlBar();
-
+    wxPreviewFrame(wxPrintPreviewBase *preview,
+                   wxFrame *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();
 protected:
-  wxWindow*             m_previewCanvas;
-  wxPreviewControlBar*  m_controlBar;
-  wxPrintPreviewBase*   m_printPreview;
+    wxWindow*             m_previewCanvas;
+    wxPreviewControlBar*  m_controlBar;
+    wxPrintPreviewBase*   m_printPreview;
+
+private:
+    DECLARE_CLASS(wxPreviewFrame)
+    DECLARE_EVENT_TABLE()
+    DECLARE_NO_COPY_CLASS(wxPreviewFrame)
 };
 
 /*
@@ -195,8 +226,12 @@ protected:
 #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
@@ -204,119 +239,151 @@ protected:
 #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)
+    DECLARE_CLASS(wxPreviewControlBar)
 
 public:
-  wxPreviewControlBar(wxPrintPreviewBase *preview, long buttons,
-    wxWindow *parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
-    long style = 0, const wxString& name = "panel");
-  ~wxPreviewControlBar();
-
-  virtual void CreateButtons();
-  virtual void SetZoomControl(int zoom);
-  virtual int GetZoomControl();
-  inline virtual wxPrintPreviewBase *GetPrintPreview() const { return m_printPreview; }
-
-  void OnPrint(wxCommandEvent& event);
-  void OnWindowClose(wxCommandEvent& event);
-  void OnNext(wxCommandEvent& event);
-  void OnPrevious(wxCommandEvent& event);
-  void OnZoom(wxCommandEvent& event);
-  void OnPaint(wxPaintEvent& event);
+    wxPreviewControlBar(wxPrintPreviewBase *preview,
+                        long buttons,
+                        wxWindow *parent,
+                        const wxPoint& pos = wxDefaultPosition,
+                        const wxSize& size = wxDefaultSize,
+                        long style = 0,
+                        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 OnPrint(wxCommandEvent& event);
+    void OnWindowClose(wxCommandEvent& event);
+    void OnNext();
+    void OnPrevious();
+    void OnFirst();
+    void OnLast();
+    void OnGoto();
+    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 OnChar(wxKeyEvent &event);
+    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;
-  long                  m_buttonFlags;
-
-DECLARE_EVENT_TABLE()
+    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)
+    DECLARE_CLASS(wxPrintPreviewBase)
 
 public:
-  wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printoutForPrinting = (wxPrintout *) NULL, wxPrintData *data = (wxPrintData *) NULL);
-  ~wxPrintPreviewBase();
+    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);
-  inline int GetCurrentPage() const { return m_currentPage; };
+    virtual bool SetCurrentPage(int pageNum);
+    int GetCurrentPage() const { return m_currentPage; };
 
-  inline void SetPrintout(wxPrintout *printout) { m_previewPrintout = printout; };
-  inline wxPrintout *GetPrintout() const { return m_previewPrintout; };
-  inline wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; };
+    void SetPrintout(wxPrintout *printout) { m_previewPrintout = printout; };
+    wxPrintout *GetPrintout() const { return m_previewPrintout; };
+    wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; };
 
-  inline void SetFrame(wxFrame *frame) { m_previewFrame = frame; };
-  inline void SetCanvas(wxWindow *canvas) { m_previewCanvas = canvas; };
+    void SetFrame(wxFrame *frame) { m_previewFrame = frame; };
+    void SetCanvas(wxWindow *canvas) { m_previewCanvas = canvas; };
 
-  inline virtual wxFrame *GetFrame() const { return m_previewFrame; }
-  inline virtual wxWindow *GetCanvas() const { return m_previewCanvas; }
+    virtual wxFrame *GetFrame() const { return m_previewFrame; }
+    virtual wxWindow *GetCanvas() const { return m_previewCanvas; }
 
-  // The preview canvas should call this from OnPaint
-  virtual bool PaintPage(wxWindow *canvas, wxDC& dc);
+    // 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 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);
+    // This is called by wxPrintPreview to render a page into a wxMemoryDC.
+    virtual bool RenderPage(int pageNum);
 
-  inline wxPrintData& GetPrintData() { return m_printData; }
+    wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; }
 
-  virtual void SetZoom(int percent);
-  inline int GetZoom() const { return m_currentZoom; };
+    virtual void SetZoom(int percent);
+    int GetZoom() const { return m_currentZoom; };
 
-  inline int GetMaxPage() const { return m_maxPage; }
-  inline int GetMinPage() const { return m_minPage; }
+    int GetMaxPage() const { return m_maxPage; }
+    int GetMinPage() const { return m_minPage; }
 
-  inline bool Ok() const { return m_isOk; }
-  inline void SetOk(bool ok) { m_isOk = ok; }
+    bool Ok() const { return m_isOk; }
+    void SetOk(bool ok) { m_isOk = ok; }
 
-  ///////////////////////////////////////////////////////////////////////////
-  // OVERRIDES
+    ///////////////////////////////////////////////////////////////////////////
+    // 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;
+    // 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;
+    // 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:
-  wxPrintData       m_printData;
-  wxWindow*         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;
- protected:
-  bool              m_isOk;
+    wxPrintDialogData m_printDialogData;
+    wxWindow*         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)
 };
 
 /*
@@ -326,17 +393,23 @@ protected:
 class WXDLLEXPORT wxPrintAbortDialog: public wxDialog
 {
 public:
-  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)
-  {
-  }
+    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)
+        {
+        }
+
+    void OnCancel(wxCommandEvent& event);
 
-  void OnCancel(wxCommandEvent& event);
-
-  DECLARE_EVENT_TABLE()
+private:
+    DECLARE_EVENT_TABLE()
 };
 
+#endif // wxUSE_PRINTING_ARCHITECTURE
+
 #endif
     // _WX_PRNTBASEH__