]> git.saurik.com Git - wxWidgets.git/blame - include/wx/richtext/richtextprint.h
Implement support for wxRIBBON_PANEL_EXT_BUTTON wxRibbonPanel style.
[wxWidgets.git] / include / wx / richtext / richtextprint.h
CommitLineData
44219ff0
JS
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$
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
26enum wxRichTextOddEvenPage {
27 wxRICHTEXT_PAGE_ODD,
28 wxRICHTEXT_PAGE_EVEN,
6df6e35a 29 wxRICHTEXT_PAGE_ALL
44219ff0
JS
30};
31
32// Header/footer text locations
33enum wxRichTextPageLocation {
34 wxRICHTEXT_PAGE_LEFT,
35 wxRICHTEXT_PAGE_CENTRE,
36 wxRICHTEXT_PAGE_RIGHT
37};
38
39/*!
40 * Header/footer data
41 */
42
43class WXDLLIMPEXP_RICHTEXT wxRichTextHeaderFooterData: public wxObject
44{
45public:
46 wxRichTextHeaderFooterData() { Init(); }
6a817343 47 wxRichTextHeaderFooterData(const wxRichTextHeaderFooterData& data): wxObject() { Copy(data); }
44219ff0
JS
48
49 /// Initialise
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
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; }
74
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; }
78
79 /// Clear all text
80 void Clear();
81
82 /// Set/get font
83 void SetFont(const wxFont& font) { m_font = font; }
84 const wxFont& GetFont() const { return m_font; }
85
86 /// Set/get colour
87 void SetTextColour(const wxColour& col) { m_colour = col; }
88 const wxColour& GetTextColour() const { return m_colour; }
89
90 DECLARE_CLASS(wxRichTextHeaderFooterData)
91
92private:
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
107class WXDLLIMPEXP_RICHTEXT wxRichTextPrintout : public wxPrintout
108{
109public:
8a95db34 110 wxRichTextPrintout(const wxString& title = _("Printout"));
44219ff0
JS
111 virtual ~wxRichTextPrintout();
112
113 /// The buffer to print
114 void SetRichTextBuffer(wxRichTextBuffer* buffer) { m_richTextBuffer = buffer; }
115 wxRichTextBuffer* GetRichTextBuffer() const { return m_richTextBuffer; }
116
117 /// Set/get header/footer data
118 void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; }
119 const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; }
120
121 /// Sets margins in 10ths of millimetre. Defaults to 1 inch for margins.
afb0d55c 122 void SetMargins(int top = 254, int bottom = 254, int left = 254, int right = 254);
44219ff0
JS
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
134private:
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
142private:
143
144 wxRichTextBuffer* m_richTextBuffer;
145 int m_numPages;
146 wxArrayInt m_pageBreaksStart;
147 wxArrayInt m_pageBreaksEnd;
603f702b 148 wxArrayInt m_pageYOffsets;
44219ff0
JS
149 int m_marginLeft, m_marginTop, m_marginRight, m_marginBottom;
150
151 wxRichTextHeaderFooterData m_headerFooterData;
152
c0c133e1 153 wxDECLARE_NO_COPY_CLASS(wxRichTextPrintout);
44219ff0
JS
154};
155
156/*
157 *! wxRichTextPrinting
158 * A simple interface to perform wxRichTextBuffer printing.
159 */
160
161class WXDLLIMPEXP_RICHTEXT wxRichTextPrinting : public wxObject
162{
163public:
8a95db34 164 wxRichTextPrinting(const wxString& name = _("Printing"), wxWindow *parentWindow = NULL);
44219ff0
JS
165 virtual ~wxRichTextPrinting();
166
167 /// Preview the file or buffer
168 bool PreviewFile(const wxString& richTextFile);
169 bool PreviewBuffer(const wxRichTextBuffer& buffer);
170
171 /// Print the file or buffer
148d83b5
JS
172 bool PrintFile(const wxString& richTextFile, bool showPrintDialog = true);
173 bool PrintBuffer(const wxRichTextBuffer& buffer, bool showPrintDialog = true);
44219ff0
JS
174
175 /// Shows page setup dialog
176 void PageSetup();
177
178 /// Set/get header/footer data
179 void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; }
180 const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; }
181
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;
185
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;
189
190 /// Show header/footer on first page, or not
c81c3d2d 191 void SetShowOnFirstPage(bool show) { m_headerFooterData.SetShowOnFirstPage(show); }
44219ff0 192
8871035d
JS
193 /// Set the font
194 void SetHeaderFooterFont(const wxFont& font) { m_headerFooterData.SetFont(font); }
195
196 /// Set the colour
197 void SetHeaderFooterTextColour(const wxColour& font) { m_headerFooterData.SetTextColour(font); }
198
44219ff0
JS
199 /// Get print and page setup data
200 wxPrintData *GetPrintData();
201 wxPageSetupDialogData *GetPageSetupData() { return m_pageSetupData; }
202
5c0a71a2
JS
203 /// Set print and page setup data
204 void SetPrintData(const wxPrintData& printData);
7193abfb 205 void SetPageSetupData(const wxPageSetupDialogData& pageSetupData);
5c0a71a2 206
44219ff0
JS
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; }
210
211 void SetRichTextBufferPrinting(wxRichTextBuffer* buf);
212 wxRichTextBuffer* GetRichTextBufferPrinting() const { return m_richTextBufferPrinting; }
213
214 /// Set/get the parent window
215 void SetParentWindow(wxWindow* parent) { m_parentWindow = parent; }
216 wxWindow* GetParentWindow() const { return m_parentWindow; }
217
218 /// Set/get the title
219 void SetTitle(const wxString& title) { m_title = title; }
220 const wxString& GetTitle() const { return m_title; }
221
222 /// Set/get the preview rect
223 void SetPreviewRect(const wxRect& rect) { m_previewRect = rect; }
224 const wxRect& GetPreviewRect() const { return m_previewRect; }
225
226protected:
227 virtual wxRichTextPrintout *CreatePrintout();
228 virtual bool DoPreview(wxRichTextPrintout *printout1, wxRichTextPrintout *printout2);
148d83b5 229 virtual bool DoPrint(wxRichTextPrintout *printout, bool showPrintDialog);
44219ff0
JS
230
231private:
232 wxPrintData* m_printData;
233 wxPageSetupDialogData* m_pageSetupData;
234
235 wxRichTextHeaderFooterData m_headerFooterData;
236 wxString m_title;
237 wxWindow* m_parentWindow;
238 wxRichTextBuffer* m_richTextBufferPreview;
239 wxRichTextBuffer* m_richTextBufferPrinting;
240 wxRect m_previewRect;
241
c0c133e1 242 wxDECLARE_NO_COPY_CLASS(wxRichTextPrinting);
44219ff0
JS
243};
244
245#endif // wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE
246
247#endif // _WX_RICHTEXTPRINT_H_
248