1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/richtext/richtextprint.h
3 // Purpose: Rich text printing classes
4 // Author: Julian Smart
7 // Copyright: (c) Julian Smart
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_RICHTEXTPRINT_H_
12 #define _WX_RICHTEXTPRINT_H_
16 #if wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE
18 #include "wx/richtext/richtextbuffer.h"
21 #include "wx/printdlg.h"
23 #define wxRICHTEXT_PRINT_MAX_PAGES 99999
25 // Header/footer page identifiers
26 enum wxRichTextOddEvenPage
{
32 // Header/footer text locations
33 enum wxRichTextPageLocation
{
35 wxRICHTEXT_PAGE_CENTRE
,
43 class WXDLLIMPEXP_RICHTEXT wxRichTextHeaderFooterData
: public wxObject
46 wxRichTextHeaderFooterData() { Init(); }
47 wxRichTextHeaderFooterData(const wxRichTextHeaderFooterData
& data
): wxObject() { Copy(data
); }
50 void Init() { m_headerMargin
= 20; m_footerMargin
= 20; m_showOnFirstPage
= true; }
53 void Copy(const wxRichTextHeaderFooterData
& data
);
56 void operator= (const wxRichTextHeaderFooterData
& data
) { Copy(data
); }
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;
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;
67 void SetText(const wxString
& text
, int headerFooter
, wxRichTextOddEvenPage page
, wxRichTextPageLocation location
);
68 wxString
GetText(int headerFooter
, wxRichTextOddEvenPage page
, wxRichTextPageLocation location
) const;
70 /// Set/get margins between text and header or footer, in tenths of a millimeter
71 void SetMargins(int headerMargin
, int footerMargin
) { m_headerMargin
= headerMargin
; m_footerMargin
= footerMargin
; }
72 int GetHeaderMargin() const { return m_headerMargin
; }
73 int GetFooterMargin() const { return m_footerMargin
; }
75 /// Set/get whether to show header or footer on first page
76 void SetShowOnFirstPage(bool showOnFirstPage
) { m_showOnFirstPage
= showOnFirstPage
; }
77 bool GetShowOnFirstPage() const { return m_showOnFirstPage
; }
83 void SetFont(const wxFont
& font
) { m_font
= font
; }
84 const wxFont
& GetFont() const { return m_font
; }
87 void SetTextColour(const wxColour
& col
) { m_colour
= col
; }
88 const wxColour
& GetTextColour() const { return m_colour
; }
90 DECLARE_CLASS(wxRichTextHeaderFooterData
)
94 // Strings for left, centre, right, top, bottom, odd, even
100 bool m_showOnFirstPage
;
107 class WXDLLIMPEXP_RICHTEXT wxRichTextPrintout
: public wxPrintout
110 wxRichTextPrintout(const wxString
& title
= _("Printout"));
111 virtual ~wxRichTextPrintout();
113 /// The buffer to print
114 void SetRichTextBuffer(wxRichTextBuffer
* buffer
) { m_richTextBuffer
= buffer
; }
115 wxRichTextBuffer
* GetRichTextBuffer() const { return m_richTextBuffer
; }
117 /// Set/get header/footer data
118 void SetHeaderFooterData(const wxRichTextHeaderFooterData
& data
) { m_headerFooterData
= data
; }
119 const wxRichTextHeaderFooterData
& GetHeaderFooterData() const { return m_headerFooterData
; }
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);
124 /// Calculate scaling and rectangles, setting the device context scaling
125 void CalculateScaling(wxDC
* dc
, wxRect
& textRect
, wxRect
& headerRect
, wxRect
& footerRect
);
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();
136 /// Renders one page into dc
137 void RenderPage(wxDC
*dc
, int page
);
139 /// Substitute keywords
140 static bool SubstituteKeywords(wxString
& str
, const wxString
& title
, int pageNum
, int pageCount
);
144 wxRichTextBuffer
* m_richTextBuffer
;
146 wxArrayInt m_pageBreaksStart
;
147 wxArrayInt m_pageBreaksEnd
;
148 wxArrayInt m_pageYOffsets
;
149 int m_marginLeft
, m_marginTop
, m_marginRight
, m_marginBottom
;
151 wxRichTextHeaderFooterData m_headerFooterData
;
153 wxDECLARE_NO_COPY_CLASS(wxRichTextPrintout
);
157 *! wxRichTextPrinting
158 * A simple interface to perform wxRichTextBuffer printing.
161 class WXDLLIMPEXP_RICHTEXT wxRichTextPrinting
: public wxObject
164 wxRichTextPrinting(const wxString
& name
= _("Printing"), wxWindow
*parentWindow
= NULL
);
165 virtual ~wxRichTextPrinting();
167 /// Preview the file or buffer
168 bool PreviewFile(const wxString
& richTextFile
);
169 bool PreviewBuffer(const wxRichTextBuffer
& buffer
);
171 /// Print the file or buffer
172 bool PrintFile(const wxString
& richTextFile
, bool showPrintDialog
= true);
173 bool PrintBuffer(const wxRichTextBuffer
& buffer
, bool showPrintDialog
= true);
175 /// Shows page setup dialog
178 /// Set/get header/footer data
179 void SetHeaderFooterData(const wxRichTextHeaderFooterData
& data
) { m_headerFooterData
= data
; }
180 const wxRichTextHeaderFooterData
& GetHeaderFooterData() const { return m_headerFooterData
; }
182 /// Set/get header text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT
183 void SetHeaderText(const wxString
& text
, wxRichTextOddEvenPage page
= wxRICHTEXT_PAGE_ALL
, wxRichTextPageLocation location
= wxRICHTEXT_PAGE_CENTRE
);
184 wxString
GetHeaderText(wxRichTextOddEvenPage page
= wxRICHTEXT_PAGE_EVEN
, wxRichTextPageLocation location
= wxRICHTEXT_PAGE_CENTRE
) const;
186 /// Set/get footer text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT
187 void SetFooterText(const wxString
& text
, wxRichTextOddEvenPage page
= wxRICHTEXT_PAGE_ALL
, wxRichTextPageLocation location
= wxRICHTEXT_PAGE_CENTRE
);
188 wxString
GetFooterText(wxRichTextOddEvenPage page
= wxRICHTEXT_PAGE_EVEN
, wxRichTextPageLocation location
= wxRICHTEXT_PAGE_CENTRE
) const;
190 /// Show header/footer on first page, or not
191 void SetShowOnFirstPage(bool show
) { m_headerFooterData
.SetShowOnFirstPage(show
); }
194 void SetHeaderFooterFont(const wxFont
& font
) { m_headerFooterData
.SetFont(font
); }
197 void SetHeaderFooterTextColour(const wxColour
& font
) { m_headerFooterData
.SetTextColour(font
); }
199 /// Get print and page setup data
200 wxPrintData
*GetPrintData();
201 wxPageSetupDialogData
*GetPageSetupData() { return m_pageSetupData
; }
203 /// Set print and page setup data
204 void SetPrintData(const wxPrintData
& printData
);
205 void SetPageSetupData(const wxPageSetupDialogData
& pageSetupData
);
207 /// Set the rich text buffer pointer, deleting the existing object if present
208 void SetRichTextBufferPreview(wxRichTextBuffer
* buf
);
209 wxRichTextBuffer
* GetRichTextBufferPreview() const { return m_richTextBufferPreview
; }
211 void SetRichTextBufferPrinting(wxRichTextBuffer
* buf
);
212 wxRichTextBuffer
* GetRichTextBufferPrinting() const { return m_richTextBufferPrinting
; }
214 /// Set/get the parent window
215 void SetParentWindow(wxWindow
* parent
) { m_parentWindow
= parent
; }
216 wxWindow
* GetParentWindow() const { return m_parentWindow
; }
218 /// Set/get the title
219 void SetTitle(const wxString
& title
) { m_title
= title
; }
220 const wxString
& GetTitle() const { return m_title
; }
222 /// Set/get the preview rect
223 void SetPreviewRect(const wxRect
& rect
) { m_previewRect
= rect
; }
224 const wxRect
& GetPreviewRect() const { return m_previewRect
; }
227 virtual wxRichTextPrintout
*CreatePrintout();
228 virtual bool DoPreview(wxRichTextPrintout
*printout1
, wxRichTextPrintout
*printout2
);
229 virtual bool DoPrint(wxRichTextPrintout
*printout
, bool showPrintDialog
);
232 wxPrintData
* m_printData
;
233 wxPageSetupDialogData
* m_pageSetupData
;
235 wxRichTextHeaderFooterData m_headerFooterData
;
237 wxWindow
* m_parentWindow
;
238 wxRichTextBuffer
* m_richTextBufferPreview
;
239 wxRichTextBuffer
* m_richTextBufferPrinting
;
240 wxRect m_previewRect
;
242 wxDECLARE_NO_COPY_CLASS(wxRichTextPrinting
);
245 #endif // wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE
247 #endif // _WX_RICHTEXTPRINT_H_