1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/richtext/richtextprint.h 3 // Purpose: Rich text printing classes 4 // Author: Julian Smart 5 // Created: 2006-10-23 6 // RCS-ID: $Id: richtextprint.h 55146 2008-08-21 16:07:54Z JS $ 7 // Copyright: (c) Julian Smart 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _WX_RICHTEXTPRINT_H_ 12 #define _WX_RICHTEXTPRINT_H_ 13 14 #include "wx/defs.h" 15 16 #if wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE 17 18 #include "wx/richtext/richtextbuffer.h" 19 20 #include "wx/print.h" 21 #include "wx/printdlg.h" 22 23 #define wxRICHTEXT_PRINT_MAX_PAGES 99999 24 25 // Header/footer page identifiers 26 enum wxRichTextOddEvenPage { 27 wxRICHTEXT_PAGE_ODD, 28 wxRICHTEXT_PAGE_EVEN, 29 wxRICHTEXT_PAGE_ALL 30 }; 31 32 // Header/footer text locations 33 enum wxRichTextPageLocation { 34 wxRICHTEXT_PAGE_LEFT, 35 wxRICHTEXT_PAGE_CENTRE, 36 wxRICHTEXT_PAGE_RIGHT 37 }; 38 39 /*! 40 * Header/footer data 41 */ 42 43 class WXDLLIMPEXP_RICHTEXT wxRichTextHeaderFooterData: public wxObject 44 { 45 public: wxRichTextHeaderFooterData()46 wxRichTextHeaderFooterData() { Init(); } wxRichTextHeaderFooterData(const wxRichTextHeaderFooterData & data)47 wxRichTextHeaderFooterData(const wxRichTextHeaderFooterData& data): wxObject() { Copy(data); } 48 49 /// Initialise Init()50 void Init() { m_headerMargin = 20; m_footerMargin = 20; m_showOnFirstPage = true; } 51 52 /// Copy 53 void Copy(const wxRichTextHeaderFooterData& data); 54 55 /// Assignment 56 void operator= (const wxRichTextHeaderFooterData& data) { Copy(data); } 57 58 /// Set/get header text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT 59 void SetHeaderText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); 60 wxString GetHeaderText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; 61 62 /// Set/get footer text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT 63 void SetFooterText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); 64 wxString GetFooterText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; 65 66 /// Set/get text 67 void SetText(const wxString& text, int headerFooter, wxRichTextOddEvenPage page, wxRichTextPageLocation location); 68 wxString GetText(int headerFooter, wxRichTextOddEvenPage page, wxRichTextPageLocation location) const; 69 70 /// Set/get margins between text and header or footer, in tenths of a millimeter SetMargins(int headerMargin,int footerMargin)71 void SetMargins(int headerMargin, int footerMargin) { m_headerMargin = headerMargin; m_footerMargin = footerMargin; } GetHeaderMargin()72 int GetHeaderMargin() const { return m_headerMargin; } GetFooterMargin()73 int GetFooterMargin() const { return m_footerMargin; } 74 75 /// Set/get whether to show header or footer on first page SetShowOnFirstPage(bool showOnFirstPage)76 void SetShowOnFirstPage(bool showOnFirstPage) { m_showOnFirstPage = showOnFirstPage; } GetShowOnFirstPage()77 bool GetShowOnFirstPage() const { return m_showOnFirstPage; } 78 79 /// Clear all text 80 void Clear(); 81 82 /// Set/get font SetFont(const wxFont & font)83 void SetFont(const wxFont& font) { m_font = font; } GetFont()84 const wxFont& GetFont() const { return m_font; } 85 86 /// Set/get colour SetTextColour(const wxColour & col)87 void SetTextColour(const wxColour& col) { m_colour = col; } GetTextColour()88 const wxColour& GetTextColour() const { return m_colour; } 89 90 DECLARE_CLASS(wxRichTextHeaderFooterData) 91 92 private: 93 94 // Strings for left, centre, right, top, bottom, odd, even 95 wxString m_text[12]; 96 wxFont m_font; 97 wxColour m_colour; 98 int m_headerMargin; 99 int m_footerMargin; 100 bool m_showOnFirstPage; 101 }; 102 103 /*! 104 * wxRichTextPrintout 105 */ 106 107 class WXDLLIMPEXP_RICHTEXT wxRichTextPrintout : public wxPrintout 108 { 109 public: 110 wxRichTextPrintout(const wxString& title = wxT("Printout")); 111 virtual ~wxRichTextPrintout(); 112 113 /// The buffer to print SetRichTextBuffer(wxRichTextBuffer * buffer)114 void SetRichTextBuffer(wxRichTextBuffer* buffer) { m_richTextBuffer = buffer; } GetRichTextBuffer()115 wxRichTextBuffer* GetRichTextBuffer() const { return m_richTextBuffer; } 116 117 /// Set/get header/footer data SetHeaderFooterData(const wxRichTextHeaderFooterData & data)118 void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; } GetHeaderFooterData()119 const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; } 120 121 /// Sets margins in 10ths of millimetre. Defaults to 1 inch for margins. 122 void SetMargins(int top = 254, int bottom = 254, int left = 254, int right = 254); 123 124 /// Calculate scaling and rectangles, setting the device context scaling 125 void CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& headerRect, wxRect& footerRect); 126 127 // wxPrintout virtual functions 128 virtual bool OnPrintPage(int page); 129 virtual bool HasPage(int page); 130 virtual void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo); 131 virtual bool OnBeginDocument(int startPage, int endPage); 132 virtual void OnPreparePrinting(); 133 134 private: 135 136 /// Renders one page into dc 137 void RenderPage(wxDC *dc, int page); 138 139 /// Substitute keywords 140 static bool SubstituteKeywords(wxString& str, const wxString& title, int pageNum, int pageCount); 141 142 private: 143 144 wxRichTextBuffer* m_richTextBuffer; 145 int m_numPages; 146 wxArrayInt m_pageBreaksStart; 147 wxArrayInt m_pageBreaksEnd; 148 int m_marginLeft, m_marginTop, m_marginRight, m_marginBottom; 149 150 wxRichTextHeaderFooterData m_headerFooterData; 151 152 DECLARE_NO_COPY_CLASS(wxRichTextPrintout) 153 }; 154 155 /* 156 *! wxRichTextPrinting 157 * A simple interface to perform wxRichTextBuffer printing. 158 */ 159 160 class WXDLLIMPEXP_RICHTEXT wxRichTextPrinting : public wxObject 161 { 162 public: 163 wxRichTextPrinting(const wxString& name = wxT("Printing"), wxWindow *parentWindow = NULL); 164 virtual ~wxRichTextPrinting(); 165 166 /// Preview the file or buffer 167 bool PreviewFile(const wxString& richTextFile); 168 bool PreviewBuffer(const wxRichTextBuffer& buffer); 169 170 /// Print the file or buffer 171 bool PrintFile(const wxString& richTextFile); 172 bool PrintBuffer(const wxRichTextBuffer& buffer); 173 174 /// Shows page setup dialog 175 void PageSetup(); 176 177 /// Set/get header/footer data SetHeaderFooterData(const wxRichTextHeaderFooterData & data)178 void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; } GetHeaderFooterData()179 const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; } 180 181 /// Set/get header text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT 182 void SetHeaderText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); 183 wxString GetHeaderText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; 184 185 /// Set/get footer text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT 186 void SetFooterText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); 187 wxString GetFooterText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; 188 189 /// Show header/footer on first page, or not SetShowOnFirstPage(bool show)190 void SetShowOnFirstPage(bool show) { m_headerFooterData.SetShowOnFirstPage(show); } 191 192 /// Set the font SetHeaderFooterFont(const wxFont & font)193 void SetHeaderFooterFont(const wxFont& font) { m_headerFooterData.SetFont(font); } 194 195 /// Set the colour SetHeaderFooterTextColour(const wxColour & font)196 void SetHeaderFooterTextColour(const wxColour& font) { m_headerFooterData.SetTextColour(font); } 197 198 /// Get print and page setup data 199 wxPrintData *GetPrintData(); GetPageSetupData()200 wxPageSetupDialogData *GetPageSetupData() { return m_pageSetupData; } 201 202 /// Set print and page setup data 203 void SetPrintData(const wxPrintData& printData); 204 void SetPageSetupData(const wxPageSetupData& pageSetupData); 205 206 /// Set the rich text buffer pointer, deleting the existing object if present 207 void SetRichTextBufferPreview(wxRichTextBuffer* buf); GetRichTextBufferPreview()208 wxRichTextBuffer* GetRichTextBufferPreview() const { return m_richTextBufferPreview; } 209 210 void SetRichTextBufferPrinting(wxRichTextBuffer* buf); GetRichTextBufferPrinting()211 wxRichTextBuffer* GetRichTextBufferPrinting() const { return m_richTextBufferPrinting; } 212 213 /// Set/get the parent window SetParentWindow(wxWindow * parent)214 void SetParentWindow(wxWindow* parent) { m_parentWindow = parent; } GetParentWindow()215 wxWindow* GetParentWindow() const { return m_parentWindow; } 216 217 /// Set/get the title SetTitle(const wxString & title)218 void SetTitle(const wxString& title) { m_title = title; } GetTitle()219 const wxString& GetTitle() const { return m_title; } 220 221 /// Set/get the preview rect SetPreviewRect(const wxRect & rect)222 void SetPreviewRect(const wxRect& rect) { m_previewRect = rect; } GetPreviewRect()223 const wxRect& GetPreviewRect() const { return m_previewRect; } 224 225 protected: 226 virtual wxRichTextPrintout *CreatePrintout(); 227 virtual bool DoPreview(wxRichTextPrintout *printout1, wxRichTextPrintout *printout2); 228 virtual bool DoPrint(wxRichTextPrintout *printout); 229 230 private: 231 wxPrintData* m_printData; 232 wxPageSetupDialogData* m_pageSetupData; 233 234 wxRichTextHeaderFooterData m_headerFooterData; 235 wxString m_title; 236 wxWindow* m_parentWindow; 237 wxRichTextBuffer* m_richTextBufferPreview; 238 wxRichTextBuffer* m_richTextBufferPrinting; 239 wxRect m_previewRect; 240 241 DECLARE_NO_COPY_CLASS(wxRichTextPrinting) 242 }; 243 244 #endif // wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE 245 246 #endif // _WX_RICHTEXTPRINT_H_ 247 248