]> git.saurik.com Git - wxWidgets.git/blob - samples/html/printing/printing.cpp
Land the rest of the changes made by a rebake after r59067.
[wxWidgets.git] / samples / html / printing / printing.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: printing.cpp
3 // Purpose: wxHtml sample: wxHtmlEasyPrinting test
4 // Author: ?
5 // Modified by:
6 // Created: ?
7 // RCS-ID: $Id$
8 // Copyright: (c) wxWidgets team
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12
13 // For compilers that support precompilation, includes "wx/wx.h".
14 #include "wx/wxprec.h"
15
16 #ifdef __BORLANDC__
17 #pragma hdrstop
18 #endif
19
20 // for all others, include the necessary headers (this file is usually all you
21 // need because it includes almost all "standard" wxWidgets headers
22 #ifndef WX_PRECOMP
23 #include "wx/wx.h"
24 #endif
25
26 #include "wx/image.h"
27 #include "wx/html/htmlwin.h"
28 #include "wx/html/htmprint.h"
29
30 #ifndef __WXMSW__
31 #include "../../sample.xpm"
32 #endif
33
34
35 // ----------------------------------------------------------------------------
36 // private classes
37 // ----------------------------------------------------------------------------
38
39 // Define a new application type, each program should derive a class from wxApp
40 class MyApp : public wxApp
41 {
42 public:
43 // override base class virtuals
44 // ----------------------------
45
46 // this one is called on application startup and is a good place for the app
47 // initialization (doing it here and not in the ctor allows to have an error
48 // return: if OnInit() returns false, the application terminates)
49
50 virtual bool OnInit();
51 };
52
53 // Define a new frame type: this is going to be our main frame
54 class MyFrame : public wxFrame
55 {
56 public:
57 // ctor and dtor
58
59 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
60 virtual ~MyFrame();
61
62 // event handlers (these functions should _not_ be virtual)
63 void OnQuit(wxCommandEvent& event);
64 void OnAbout(wxCommandEvent& event);
65
66 void OnPageSetup(wxCommandEvent& event);
67 void OnPrint(wxCommandEvent& event);
68 void OnPreview(wxCommandEvent& event);
69 void OnOpen(wxCommandEvent& event);
70
71 void OnPrintSmall(wxCommandEvent& event);
72 void OnPrintNormal(wxCommandEvent& event);
73 void OnPrintHuge(wxCommandEvent& event);
74
75
76 private:
77 wxHtmlWindow *m_Html;
78 wxHtmlEasyPrinting *m_Prn;
79 wxString m_Name;
80
81 // any class wishing to process wxWidgets events must use this macro
82 DECLARE_EVENT_TABLE()
83 };
84
85 // ----------------------------------------------------------------------------
86 // constants
87 // ----------------------------------------------------------------------------
88
89 // IDs for the controls and the menu commands
90 enum
91 {
92 // menu items
93 Minimal_Quit = 1,
94 Minimal_Print,
95 Minimal_Preview,
96 Minimal_PageSetup,
97 Minimal_Open,
98 Minimal_PrintSmall,
99 Minimal_PrintNormal,
100 Minimal_PrintHuge
101
102 };
103
104 // ----------------------------------------------------------------------------
105 // event tables and other macros for wxWidgets
106 // ----------------------------------------------------------------------------
107
108 // the event tables connect the wxWidgets events with the functions (event
109 // handlers) which process them. It can be also done at run-time, but for the
110 // simple menu events like this the static method is much simpler.
111 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
112 EVT_MENU(Minimal_Quit, MyFrame::OnQuit)
113 EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
114 EVT_MENU(Minimal_Print, MyFrame::OnPrint)
115 EVT_MENU(Minimal_Preview, MyFrame::OnPreview)
116 EVT_MENU(Minimal_PageSetup, MyFrame::OnPageSetup)
117 EVT_MENU(Minimal_Open, MyFrame::OnOpen)
118 EVT_MENU(Minimal_PrintSmall, MyFrame::OnPrintSmall)
119 EVT_MENU(Minimal_PrintNormal, MyFrame::OnPrintNormal)
120 EVT_MENU(Minimal_PrintHuge, MyFrame::OnPrintHuge)
121 END_EVENT_TABLE()
122
123 // Create a new application object: this macro will allow wxWidgets to create
124 // the application object during program execution (it's better than using a
125 // static object for many reasons) and also declares the accessor function
126 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
127 // not wxApp)
128 IMPLEMENT_APP(MyApp)
129
130 // ============================================================================
131 // implementation
132 // ============================================================================
133
134 // ----------------------------------------------------------------------------
135 // the application class
136 // ----------------------------------------------------------------------------
137 // `Main program' equivalent: the program execution "starts" here
138
139 bool MyApp::OnInit()
140 {
141 if ( !wxApp::OnInit() )
142 return false;
143
144 #if wxUSE_LIBPNG
145 wxImage::AddHandler(new wxPNGHandler);
146 #endif
147 #if wxUSE_LIBJPEG
148 wxImage::AddHandler(new wxJPEGHandler);
149 #endif
150 #if wxUSE_GIF
151 wxImage::AddHandler(new wxGIFHandler);
152 #endif
153
154 MyFrame *frame = new MyFrame(_("Printing test"),
155 wxDefaultPosition, wxSize(640, 480));
156
157 // Show it and tell the application that it's our main window
158 // @@@ what does it do exactly, in fact? is it necessary here?
159 frame->Show(true);
160 SetTopWindow(frame);
161
162
163 // success: wxApp::OnRun() will be called which will enter the main message
164 // loop and the application will run. If we returned false here, the
165 // application would exit immediately.
166 return true;
167 }
168
169 // ----------------------------------------------------------------------------
170 // main frame
171 // ----------------------------------------------------------------------------
172
173
174 // frame constructor
175 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
176 : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size)
177 {
178 SetIcon(wxICON(sample));
179
180 // create a menu bar
181 wxMenu *menuFile = new wxMenu;
182 menuFile->Append(Minimal_Open, _("Open...\tCtrl-O"));
183 menuFile->AppendSeparator();
184 menuFile->Append(Minimal_PageSetup, _("Page Setup"));
185 menuFile->Append(Minimal_Print, _("Print..."));
186 menuFile->Append(Minimal_Preview, _("Preview..."));
187 menuFile->AppendSeparator();
188 menuFile->Append(wxID_ABOUT, _("&About"));
189 menuFile->AppendSeparator();
190 menuFile->Append(Minimal_Quit, _("&Exit"));
191
192 wxMenu *testFile = new wxMenu;
193 testFile->Append(Minimal_PrintSmall, _("Small Printer Fonts"));
194 testFile->Append(Minimal_PrintNormal, _("Normal Printer Fonts"));
195 testFile->Append(Minimal_PrintHuge, _("Huge Printer Fonts"));
196
197 // now append the freshly created menu to the menu bar...
198 wxMenuBar *menuBar = new wxMenuBar;
199 menuBar->Append(menuFile, _("&File"));
200 menuBar->Append(testFile, _("&Test"));
201
202 // ... and attach this menu bar to the frame
203 SetMenuBar(menuBar);
204
205 #if wxUSE_STATUSBAR
206 CreateStatusBar(1);
207 #endif // wxUSE_STATUSBAR
208
209 m_Html = new wxHtmlWindow(this);
210 m_Html -> SetRelatedFrame(this, _("HTML : %s"));
211 #if wxUSE_STATUSBAR
212 m_Html -> SetRelatedStatusBar(0);
213 #endif // wxUSE_STATUSBAR
214 m_Name = wxT("test.htm");
215 m_Html -> LoadPage(m_Name);
216
217 m_Prn = new wxHtmlEasyPrinting(_("Easy Printing Demo"), this);
218 m_Prn -> SetHeader(m_Name + wxT("(@PAGENUM@/@PAGESCNT@)<hr>"), wxPAGE_ALL);
219
220 // To specify where the AFM files are kept on Unix,
221 // you may wish to do something like this
222 // m_Prn->GetPrintData()->SetFontMetricPath(wxT("/home/julians/afm"));
223 }
224
225 // frame destructor
226 MyFrame::~MyFrame()
227 {
228 delete m_Prn;
229 m_Prn = (wxHtmlEasyPrinting *) NULL;
230 }
231
232
233 // event handlers
234
235 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
236 {
237 // true is to force the frame to close
238 Close(true);
239 }
240
241
242 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
243 {
244 wxMessageBox(_("HTML printing sample\n\n(c) Vaclav Slavik, 1999"));
245 }
246
247
248 void MyFrame::OnPageSetup(wxCommandEvent& WXUNUSED(event))
249 {
250 m_Prn -> PageSetup();
251 }
252
253
254 void MyFrame::OnPrint(wxCommandEvent& WXUNUSED(event))
255 {
256 m_Prn -> PrintFile(m_Name);
257 }
258
259
260 void MyFrame::OnPreview(wxCommandEvent& WXUNUSED(event))
261 {
262 m_Prn -> PreviewFile(m_Name);
263 }
264
265
266 void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
267 {
268 wxFileDialog dialog(this, _("Open HTML page"), wxT(""), wxT(""), wxT("*.htm"), 0);
269
270 if (dialog.ShowModal() == wxID_OK)
271 {
272 m_Name = dialog.GetPath();
273 m_Html -> LoadPage(m_Name);
274 m_Prn -> SetHeader(m_Name + wxT("(@PAGENUM@/@PAGESCNT@)<hr>"), wxPAGE_ALL);
275 }
276 }
277
278
279 void MyFrame::OnPrintSmall(wxCommandEvent& WXUNUSED(event))
280 {
281 m_Prn->SetStandardFonts(8);
282 }
283
284 void MyFrame::OnPrintNormal(wxCommandEvent& WXUNUSED(event))
285 {
286 m_Prn->SetStandardFonts(12);
287 }
288
289 void MyFrame::OnPrintHuge(wxCommandEvent& WXUNUSED(event))
290 {
291 m_Prn->SetStandardFonts(28);
292 }