home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / include / wx / prntbase.h < prev    next >
C/C++ Source or Header  |  2002-08-31  |  13KB  |  410 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        prntbase.h
  3. // Purpose:     Base classes for printing framework
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     01/02/97
  7. // RCS-ID:      $Id: prntbase.h,v 1.22 2002/08/31 11:29:11 GD Exp $
  8. // Copyright:   (c) Julian Smart and Markus Holzem
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef _WX_PRNTBASEH__
  13. #define _WX_PRNTBASEH__
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16.     #pragma interface "prntbase.h"
  17. #endif
  18.  
  19. #include "wx/defs.h"
  20.  
  21. #if wxUSE_PRINTING_ARCHITECTURE
  22.  
  23. #include "wx/event.h"
  24. #include "wx/cmndata.h"
  25. #include "wx/panel.h"
  26. #include "wx/scrolwin.h"
  27. #include "wx/dialog.h"
  28. #include "wx/frame.h"
  29.  
  30. class WXDLLEXPORT wxDC;
  31. class WXDLLEXPORT wxButton;
  32. class WXDLLEXPORT wxChoice;
  33. class WXDLLEXPORT wxPrintout;
  34. class WXDLLEXPORT wxPrinterBase;
  35. class WXDLLEXPORT wxPrintDialog;
  36. class WXDLLEXPORT wxPrintPreviewBase;
  37. class WXDLLEXPORT wxPreviewCanvas;
  38. class WXDLLEXPORT wxPreviewControlBar;
  39. class WXDLLEXPORT wxPreviewFrame;
  40.  
  41.  
  42. enum wxPrinterError
  43. {
  44.     wxPRINTER_NO_ERROR = 0,
  45.     wxPRINTER_CANCELLED,
  46.     wxPRINTER_ERROR
  47. };
  48.  
  49.  
  50. /*
  51.  * Represents the printer: manages printing a wxPrintout object
  52.  */
  53.  
  54. class WXDLLEXPORT wxPrinterBase: public wxObject
  55. {
  56.     DECLARE_CLASS(wxPrinterBase)
  57.  
  58. public:
  59.     wxPrinterBase(wxPrintDialogData *data = (wxPrintDialogData *) NULL);
  60.     virtual ~wxPrinterBase();
  61.  
  62.     virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout);
  63.     virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message);
  64.  
  65.     wxPrintDialogData& GetPrintDialogData() const
  66.         { return (wxPrintDialogData&) m_printDialogData; }
  67.     bool GetAbort() const { return sm_abortIt; }
  68.     
  69.     static wxPrinterError GetLastError() { return sm_lastError; }
  70.  
  71.     ///////////////////////////////////////////////////////////////////////////
  72.     // OVERRIDES
  73.  
  74.     virtual bool Setup(wxWindow *parent) = 0;
  75.     virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE) = 0;
  76.     virtual wxDC* PrintDialog(wxWindow *parent) = 0;
  77.  
  78. protected:
  79.     wxPrintDialogData     m_printDialogData;
  80.     wxPrintout*           m_currentPrintout;
  81.     
  82.     static wxPrinterError sm_lastError;
  83.     
  84. public:
  85.     static wxWindow*      sm_abortWindow;
  86.     static bool           sm_abortIt;
  87.  
  88. };
  89.  
  90. /*
  91.  * wxPrintout
  92.  * Represents an object via which a document may be printed.
  93.  * The programmer derives from this, overrides (at least) OnPrintPage,
  94.  * and passes it to a wxPrinter object for printing, or a wxPrintPreview
  95.  * object for previewing.
  96.  */
  97.  
  98. class WXDLLEXPORT wxPrintout: public wxObject
  99. {
  100. DECLARE_ABSTRACT_CLASS(wxPrintout)
  101.  
  102. public:
  103.     wxPrintout(const wxString& title = "Printout");
  104.     virtual ~wxPrintout();
  105.  
  106.     virtual bool OnBeginDocument(int startPage, int endPage);
  107.     virtual void OnEndDocument();
  108.     virtual void OnBeginPrinting();
  109.     virtual void OnEndPrinting();
  110.  
  111.     // Guaranteed to be before any other functions are called
  112.     virtual void OnPreparePrinting() { }
  113.  
  114.     virtual bool HasPage(int page);
  115.     virtual bool OnPrintPage(int page) = 0;
  116.     virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
  117.  
  118.     virtual wxString GetTitle() const { return m_printoutTitle; }
  119.  
  120.     wxDC *GetDC() const { return m_printoutDC; }
  121.     void SetDC(wxDC *dc) { m_printoutDC = dc; }
  122.     void SetPageSizePixels(int w, int  h) { m_pageWidthPixels = w; m_pageHeightPixels = h; }
  123.     void GetPageSizePixels(int *w, int  *h) const { *w = m_pageWidthPixels; *h = m_pageHeightPixels; }
  124.     void SetPageSizeMM(int w, int  h) { m_pageWidthMM = w; m_pageHeightMM = h; }
  125.     void GetPageSizeMM(int *w, int  *h) const { *w = m_pageWidthMM; *h = m_pageHeightMM; }
  126.  
  127.     void SetPPIScreen(int x, int y) { m_PPIScreenX = x; m_PPIScreenY = y; }
  128.     void GetPPIScreen(int *x, int *y) const { *x = m_PPIScreenX; *y = m_PPIScreenY; }
  129.     void SetPPIPrinter(int x, int y) { m_PPIPrinterX = x; m_PPIPrinterY = y; }
  130.     void GetPPIPrinter(int *x, int *y) const { *x = m_PPIPrinterX; *y = m_PPIPrinterY; }
  131.  
  132.     virtual bool IsPreview() const { return m_isPreview; }
  133.  
  134.     virtual void SetIsPreview(bool p) { m_isPreview = p; }
  135.  
  136. private:
  137.     wxString         m_printoutTitle;
  138.     wxDC*            m_printoutDC;
  139.  
  140.     int              m_pageWidthPixels;
  141.     int              m_pageHeightPixels;
  142.  
  143.     int              m_pageWidthMM;
  144.     int              m_pageHeightMM;
  145.  
  146.     int              m_PPIScreenX;
  147.     int              m_PPIScreenY;
  148.     int              m_PPIPrinterX;
  149.     int              m_PPIPrinterY;
  150.  
  151.     bool             m_isPreview;
  152. };
  153.  
  154. /*
  155.  * wxPreviewCanvas
  156.  * Canvas upon which a preview is drawn.
  157.  */
  158.  
  159. class WXDLLEXPORT wxPreviewCanvas: public wxScrolledWindow
  160. {
  161.     DECLARE_CLASS(wxPreviewCanvas)
  162.  
  163. public:
  164.     wxPreviewCanvas(wxPrintPreviewBase *preview,
  165.                     wxWindow *parent,
  166.                     const wxPoint& pos = wxDefaultPosition,
  167.                     const wxSize& size = wxDefaultSize,
  168.                     long style = 0,
  169.                     const wxString& name = "canvas");
  170.     ~wxPreviewCanvas();
  171.  
  172.     void OnPaint(wxPaintEvent& event);
  173.  
  174.     // Responds to colour changes
  175.     void OnSysColourChanged(wxSysColourChangedEvent& event);
  176.  
  177. private:
  178.     wxPrintPreviewBase* m_printPreview;
  179.  
  180.     DECLARE_EVENT_TABLE()
  181. };
  182.  
  183. /*
  184.  * wxPreviewFrame
  185.  * Default frame for showing preview.
  186.  */
  187.  
  188. class WXDLLEXPORT wxPreviewFrame: public wxFrame
  189. {
  190.     DECLARE_CLASS(wxPreviewFrame)
  191.  
  192. public:
  193.     wxPreviewFrame(wxPrintPreviewBase *preview,
  194.                    wxFrame *parent,
  195.                    const wxString& title = "Print Preview",
  196.                    const wxPoint& pos = wxDefaultPosition,
  197.                    const wxSize& size = wxDefaultSize,
  198.                    long style = wxDEFAULT_FRAME_STYLE,
  199.                    const wxString& name = "frame");
  200.     ~wxPreviewFrame();
  201.  
  202.     void OnCloseWindow(wxCloseEvent& event);
  203.     virtual void Initialize();
  204.     virtual void CreateCanvas();
  205.     virtual void CreateControlBar();
  206. protected:
  207.     wxWindow*             m_previewCanvas;
  208.     wxPreviewControlBar*  m_controlBar;
  209.     wxPrintPreviewBase*   m_printPreview;
  210.  
  211. private:
  212.     DECLARE_EVENT_TABLE()
  213. };
  214.  
  215. /*
  216.  * wxPreviewControlBar
  217.  * A panel with buttons for controlling a print preview.
  218.  * The programmer may wish to use other means for controlling
  219.  * the print preview.
  220.  */
  221.  
  222. #define wxPREVIEW_PRINT        1
  223. #define wxPREVIEW_PREVIOUS     2
  224. #define wxPREVIEW_NEXT         4
  225. #define wxPREVIEW_ZOOM         8
  226. #define wxPREVIEW_FIRST       16
  227. #define wxPREVIEW_LAST        32
  228. #define wxPREVIEW_GOTO        64
  229.  
  230. #define wxPREVIEW_DEFAULT  wxPREVIEW_PREVIOUS|wxPREVIEW_NEXT|wxPREVIEW_ZOOM\
  231.                           |wxPREVIEW_FIRST|wxPREVIEW_GOTO|wxPREVIEW_LAST
  232.  
  233. // Ids for controls
  234. #define wxID_PREVIEW_CLOSE      1
  235. #define wxID_PREVIEW_NEXT       2
  236. #define wxID_PREVIEW_PREVIOUS   3
  237. #define wxID_PREVIEW_PRINT      4
  238. #define wxID_PREVIEW_ZOOM       5
  239. #define wxID_PREVIEW_FIRST      6
  240. #define wxID_PREVIEW_LAST       7
  241. #define wxID_PREVIEW_GOTO       8
  242.  
  243. class WXDLLEXPORT wxPreviewControlBar: public wxPanel
  244. {
  245.     DECLARE_CLASS(wxPreviewControlBar)
  246.  
  247. public:
  248.     wxPreviewControlBar(wxPrintPreviewBase *preview,
  249.                         long buttons,
  250.                         wxWindow *parent,
  251.                         const wxPoint& pos = wxDefaultPosition,
  252.                         const wxSize& size = wxDefaultSize,
  253.                         long style = 0,
  254.                         const wxString& name = "panel");
  255.     ~wxPreviewControlBar();
  256.  
  257.     virtual void CreateButtons();
  258.     virtual void SetZoomControl(int zoom);
  259.     virtual int GetZoomControl();
  260.     virtual wxPrintPreviewBase *GetPrintPreview() const
  261.         { return m_printPreview; }
  262.  
  263.     void OnPrint(wxCommandEvent& event);
  264.     void OnWindowClose(wxCommandEvent& event);
  265.     void OnNext();
  266.     void OnPrevious();
  267.     void OnFirst();
  268.     void OnLast();
  269.     void OnGoto();
  270.     void OnNextButton(wxCommandEvent & WXUNUSED(event)) { OnNext(); }
  271.     void OnPreviousButton(wxCommandEvent & WXUNUSED(event)) { OnPrevious(); }
  272.     void OnFirstButton(wxCommandEvent & WXUNUSED(event)) { OnFirst(); }
  273.     void OnLastButton(wxCommandEvent & WXUNUSED(event)) { OnLast(); }
  274.     void OnGotoButton(wxCommandEvent & WXUNUSED(event)) { OnGoto(); }
  275.     void OnChar(wxKeyEvent &event);
  276.     void OnZoom(wxCommandEvent& event);
  277.     void OnPaint(wxPaintEvent& event);
  278.  
  279. protected:
  280.     wxPrintPreviewBase*   m_printPreview;
  281.     wxButton*             m_closeButton;
  282.     wxButton*             m_nextPageButton;
  283.     wxButton*             m_previousPageButton;
  284.     wxButton*             m_printButton;
  285.     wxChoice*             m_zoomControl;
  286.     wxButton*             m_firstPageButton;
  287.     wxButton*             m_lastPageButton;
  288.     wxButton*             m_gotoPageButton;
  289.     long                  m_buttonFlags;
  290.  
  291. private:
  292.     DECLARE_EVENT_TABLE()
  293. };
  294.  
  295. /*
  296.  * wxPrintPreview
  297.  * Programmer creates an object of this class to preview a wxPrintout.
  298.  */
  299.  
  300. class WXDLLEXPORT wxPrintPreviewBase: public wxObject
  301. {
  302.     DECLARE_CLASS(wxPrintPreviewBase)
  303.  
  304. public:
  305.     wxPrintPreviewBase(wxPrintout *printout,
  306.                        wxPrintout *printoutForPrinting = (wxPrintout *) NULL,
  307.                        wxPrintDialogData *data = (wxPrintDialogData *) NULL);
  308.     wxPrintPreviewBase(wxPrintout *printout,
  309.                        wxPrintout *printoutForPrinting,
  310.                        wxPrintData *data);
  311.     virtual ~wxPrintPreviewBase();
  312.  
  313.     virtual bool SetCurrentPage(int pageNum);
  314.     int GetCurrentPage() const { return m_currentPage; };
  315.  
  316.     void SetPrintout(wxPrintout *printout) { m_previewPrintout = printout; };
  317.     wxPrintout *GetPrintout() const { return m_previewPrintout; };
  318.     wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; };
  319.  
  320.     void SetFrame(wxFrame *frame) { m_previewFrame = frame; };
  321.     void SetCanvas(wxWindow *canvas) { m_previewCanvas = canvas; };
  322.  
  323.     virtual wxFrame *GetFrame() const { return m_previewFrame; }
  324.     virtual wxWindow *GetCanvas() const { return m_previewCanvas; }
  325.  
  326.     // The preview canvas should call this from OnPaint
  327.     virtual bool PaintPage(wxWindow *canvas, wxDC& dc);
  328.  
  329.     // This draws a blank page onto the preview canvas
  330.     virtual bool DrawBlankPage(wxWindow *canvas, wxDC& dc);
  331.  
  332.     // This is called by wxPrintPreview to render a page into a wxMemoryDC.
  333.     virtual bool RenderPage(int pageNum);
  334.  
  335.     wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; }
  336.  
  337.     virtual void SetZoom(int percent);
  338.     int GetZoom() const { return m_currentZoom; };
  339.  
  340.     int GetMaxPage() const { return m_maxPage; }
  341.     int GetMinPage() const { return m_minPage; }
  342.  
  343.     bool Ok() const { return m_isOk; }
  344.     void SetOk(bool ok) { m_isOk = ok; }
  345.  
  346.     ///////////////////////////////////////////////////////////////////////////
  347.     // OVERRIDES
  348.  
  349.     // If we own a wxPrintout that can be used for printing, this
  350.     // will invoke the actual printing procedure. Called
  351.     // by the wxPreviewControlBar.
  352.     virtual bool Print(bool interactive) = 0;
  353.  
  354.     // Calculate scaling that needs to be done to get roughly
  355.     // the right scaling for the screen pretending to be
  356.     // the currently selected printer.
  357.     virtual void DetermineScaling() = 0;
  358.  
  359. protected:
  360.     wxPrintDialogData m_printDialogData;
  361.     wxWindow*         m_previewCanvas;
  362.     wxFrame*          m_previewFrame;
  363.     wxBitmap*         m_previewBitmap;
  364.     wxPrintout*       m_previewPrintout;
  365.     wxPrintout*       m_printPrintout;
  366.     int               m_currentPage;
  367.     int               m_currentZoom;
  368.     float             m_previewScale;
  369.     int               m_topMargin;
  370.     int               m_leftMargin;
  371.     int               m_pageWidth;
  372.     int               m_pageHeight;
  373.     int               m_minPage;
  374.     int               m_maxPage;
  375.  
  376.     bool              m_isOk;
  377.     bool              m_printingPrepared; // Called OnPreparePrinting?
  378.  
  379. private:
  380.     void Init(wxPrintout *printout, wxPrintout *printoutForPrinting);
  381. };
  382.  
  383. /*
  384.  * Abort dialog
  385.  */
  386.  
  387. class WXDLLEXPORT wxPrintAbortDialog: public wxDialog
  388. {
  389. public:
  390.     wxPrintAbortDialog(wxWindow *parent,
  391.                        const wxString& title,
  392.                        const wxPoint& pos = wxDefaultPosition,
  393.                        const wxSize& size = wxDefaultSize,
  394.                        long style = 0,
  395.                        const wxString& name = "dialog")
  396.         : wxDialog(parent, -1, title, pos, size, style, name)
  397.         {
  398.         }
  399.  
  400.     void OnCancel(wxCommandEvent& event);
  401.  
  402. private:
  403.     DECLARE_EVENT_TABLE()
  404. };
  405.  
  406. #endif // wxUSE_PRINTING_ARCHITECTURE
  407.  
  408. #endif
  409.     // _WX_PRNTBASEH__
  410.