]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/prntbase.h
added wxEncodingToCodepage() and implemented it properly (using in32 API instead...
[wxWidgets.git] / include / wx / prntbase.h
index 5ca67e1a6d92ea6cf896af53042d0ffd74594f56..d51919bab1191c61397e1a69fcb8beadf065ef27 100644 (file)
@@ -6,17 +6,20 @@
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_PRNTBASEH__
 #define _WX_PRNTBASEH__
 
 #ifdef __GNUG__
-#pragma interface "prntbase.h"
+    #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,53 @@ 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)
+    DECLARE_CLASS(wxPrinterBase)
 
- protected:
-  wxPrintData printData;
-  wxPrintout *currentPrintout;
- public:
-  static  wxWindow *abortWindow;
-  static  bool abortIt;
-
-  wxPrinterBase(wxPrintData *data = (wxPrintData *) 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;
 };
 
 /*
@@ -73,85 +94,90 @@ 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)
+DECLARE_ABSTRACT_CLASS(wxPrintout)
 
- private:
-   char *printoutTitle;
-   wxDC *printoutDC;
+public:
+    wxPrintout(const wxString& title = "Printout");
+    virtual ~wxPrintout();
 
-   int pageWidthPixels;
-   int pageHeightPixels;
+    virtual bool OnBeginDocument(int startPage, int endPage);
+    virtual void OnEndDocument();
+    virtual void OnBeginPrinting();
+    virtual void OnEndPrinting();
 
-   int pageWidthMM;
-   int pageHeightMM;
+    // Guaranteed to be before any other functions are called
+    virtual void OnPreparePrinting() { }
 
-   int PPIScreenX;
-   int PPIScreenY;
-   int PPIPrinterX;
-   int PPIPrinterY;
+    virtual bool HasPage(int page);
+    virtual bool OnPrintPage(int page) = 0;
+    virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
 
-   bool isPreview;
- public:
-  wxPrintout(const char *title = "Printout");
-  ~wxPrintout(void);
+    virtual wxString GetTitle() const { return m_printoutTitle; }
 
-  virtual bool OnBeginDocument(int startPage, int endPage);
-  virtual void OnEndDocument(void);
-  virtual void OnBeginPrinting(void);
-  virtual void OnEndPrinting(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; }
 
-  // Guaranteed to be before any other functions are called
-  inline virtual void OnPreparePrinting(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; }
 
-  virtual bool HasPage(int page);
-  virtual bool OnPrintPage(int page) = 0;
-  virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
+    virtual bool IsPreview() const { return m_isPreview; }
 
-  inline virtual char *GetTitle(void) { return printoutTitle; }
+    virtual void SetIsPreview(bool p) { m_isPreview = p; }
 
-  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; }
+private:
+    wxString         m_printoutTitle;
+    wxDC*            m_printoutDC;
 
-  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_pageWidthPixels;
+    int              m_pageHeightPixels;
 
-  inline virtual bool IsPreview(void) { return isPreview; }
+    int              m_pageWidthMM;
+    int              m_pageHeightMM;
 
-  inline virtual void SetIsPreview(bool p) { isPreview = p; }
+    int              m_PPIScreenX;
+    int              m_PPIScreenY;
+    int              m_PPIPrinterX;
+    int              m_PPIPrinterY;
+
+    bool             m_isPreview;
 };
 
 /*
  * wxPreviewCanvas
  * Canvas upon which a preview is drawn.
  */
+
 class WXDLLEXPORT wxPreviewCanvas: public wxScrolledWindow
 {
-  DECLARE_CLASS(wxPreviewCanvas)
+    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();
 
- 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);
 
-  void OnPaint(wxPaintEvent& event);
+    // Responds to colour changes
+    void OnSysColourChanged(wxSysColourChangedEvent& event);
 
-  // Responds to colour changes
-  void OnSysColourChanged(wxSysColourChangedEvent& event);
+private:
+    wxPrintPreviewBase* m_printPreview;
 
-DECLARE_EVENT_TABLE()
+    DECLARE_EVENT_TABLE()
 };
 
 /*
@@ -161,22 +187,29 @@ 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);
+    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();
+
+    void OnCloseWindow(wxCloseEvent& event);
+    virtual void Initialize();
+    virtual void CreateCanvas();
+    virtual void CreateControlBar();
+protected:
+    wxWindow*             m_previewCanvas;
+    wxPreviewControlBar*  m_controlBar;
+    wxPrintPreviewBase*   m_printPreview;
+
+private:
+    DECLARE_EVENT_TABLE()
 };
 
 /*
@@ -202,115 +235,133 @@ class WXDLLEXPORT wxPreviewFrame: public wxFrame
 
 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 = 0,
+                        const wxString& name = "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 OnNextButton(wxCommandEvent & WXUNUSED(event)) { OnNext(); }
+    void OnPreviousButton(wxCommandEvent & WXUNUSED(event)) { OnPrevious(); }
+    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;
+
+private:
+    DECLARE_EVENT_TABLE()
 };
 
 /*
  * 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 = (wxPrintout *) NULL, wxPrintData *data = (wxPrintData *) 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(wxWindow *canvas) { m_previewCanvas = canvas; };
+
+    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);
+
+    // 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);
+
+    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;
+    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);
 };
 
 /*
@@ -320,17 +371,23 @@ 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 = "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()
 };
 
+#endif // wxUSE_PRINTING_ARCHITECTURE
+
 #endif
     // _WX_PRNTBASEH__