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