Remove all lines containing cvs/svn "$Id$" keyword.
[wxWidgets.git] / samples / typetest / typetest.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: typetest.cpp
3 // Purpose: Types wxWidgets sample
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 04/01/98
7 // Copyright: (c) Julian Smart
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 // For compilers that support precompilation, includes "wx/wx.h".
12 #include "wx/wxprec.h"
13
14 #ifdef __BORLANDC__
15 #pragma hdrstop
16 #endif
17
18 #ifndef WX_PRECOMP
19 #include "wx/wx.h"
20 #endif
21
22 #include "wx/variant.h"
23 #include "wx/mimetype.h"
24
25 #include "typetest.h"
26
27 #ifndef wxHAS_IMAGES_IN_RESOURCES
28 #include "../sample.xpm"
29 #endif
30
31 #ifdef new
32 #undef new
33 #endif
34
35 #include "wx/ioswrap.h"
36
37 #if wxUSE_IOSTREAMH
38 #include <fstream.h>
39 #else
40 #include <fstream>
41 #endif
42
43 #include "wx/wfstream.h"
44 #include "wx/datstrm.h"
45 #include "wx/txtstrm.h"
46 #include "wx/mstream.h"
47
48 // Create a new application object
49 IMPLEMENT_APP (MyApp)
50
51 IMPLEMENT_DYNAMIC_CLASS (MyApp, wxApp)
52
53 BEGIN_EVENT_TABLE(MyApp, wxApp)
54 EVT_MENU(TYPES_VARIANT, MyApp::DoVariantDemo)
55 EVT_MENU(TYPES_BYTEORDER, MyApp::DoByteOrderDemo)
56 #if wxUSE_UNICODE
57 EVT_MENU(TYPES_UNICODE, MyApp::DoUnicodeDemo)
58 #endif // wxUSE_UNICODE
59 EVT_MENU(TYPES_STREAM, MyApp::DoStreamDemo)
60 EVT_MENU(TYPES_STREAM2, MyApp::DoStreamDemo2)
61 EVT_MENU(TYPES_STREAM3, MyApp::DoStreamDemo3)
62 EVT_MENU(TYPES_STREAM4, MyApp::DoStreamDemo4)
63 EVT_MENU(TYPES_STREAM5, MyApp::DoStreamDemo5)
64 EVT_MENU(TYPES_STREAM6, MyApp::DoStreamDemo6)
65 EVT_MENU(TYPES_STREAM7, MyApp::DoStreamDemo7)
66 EVT_MENU(TYPES_MIME, MyApp::DoMIMEDemo)
67 END_EVENT_TABLE()
68
69 wxString file_name = wxT("test_wx.dat");
70 wxString file_name2 = wxString(wxT("test_wx2.dat"));
71
72 bool MyApp::OnInit()
73 {
74 if ( !wxApp::OnInit() )
75 return false;
76
77 // Create the main frame window
78 MyFrame *frame = new MyFrame((wxFrame *) NULL, wxT("wxWidgets Types Demo"),
79 wxPoint(50, 50), wxSize(450, 340));
80
81 // Give it an icon
82 frame->SetIcon(wxICON(sample));
83
84 // Make a menubar
85 wxMenu *file_menu = new wxMenu;
86
87 file_menu->Append(TYPES_ABOUT, wxT("&About"));
88 file_menu->AppendSeparator();
89 file_menu->Append(TYPES_QUIT, wxT("E&xit\tAlt-X"));
90
91 wxMenu *test_menu = new wxMenu;
92 test_menu->Append(TYPES_VARIANT, wxT("&Variant test"));
93 test_menu->Append(TYPES_BYTEORDER, wxT("&Byteorder test"));
94 #if wxUSE_UNICODE
95 test_menu->Append(TYPES_UNICODE, wxT("&Unicode test"));
96 #endif // wxUSE_UNICODE
97 test_menu->Append(TYPES_STREAM, wxT("&Stream test"));
98 test_menu->Append(TYPES_STREAM2, wxT("&Stream seek test"));
99 test_menu->Append(TYPES_STREAM3, wxT("&Stream error test"));
100 test_menu->Append(TYPES_STREAM4, wxT("&Stream buffer test"));
101 test_menu->Append(TYPES_STREAM5, wxT("&Stream peek test"));
102 test_menu->Append(TYPES_STREAM6, wxT("&Stream ungetch test"));
103 test_menu->Append(TYPES_STREAM7, wxT("&Stream ungetch test for a buffered stream"));
104 test_menu->AppendSeparator();
105 test_menu->Append(TYPES_MIME, wxT("&MIME database test"));
106
107 wxMenuBar *menu_bar = new wxMenuBar;
108 menu_bar->Append(file_menu, wxT("&File"));
109 menu_bar->Append(test_menu, wxT("&Tests"));
110 frame->SetMenuBar(menu_bar);
111
112 m_textCtrl = new wxTextCtrl(frame, wxID_ANY, wxEmptyString,
113 wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
114
115 // Show the frame
116 frame->Show(true);
117
118 return true;
119 }
120
121 void MyApp::DoStreamDemo(wxCommandEvent& WXUNUSED(event))
122 {
123 wxTextCtrl& textCtrl = * GetTextCtrl();
124
125 textCtrl.Clear();
126 textCtrl << wxT("\nTest fstream vs. wxFileStream:\n\n");
127
128 textCtrl.WriteText( wxT("Writing to ofstream and wxFileOutputStream:\n") );
129
130 wxSTD ofstream std_file_output( "test_std.dat" );
131 wxFileOutputStream file_output( file_name );
132 wxBufferedOutputStream buf_output( file_output );
133 wxTextOutputStream text_output( buf_output );
134
135 wxString tmp;
136 signed int si = 0xFFFFFFFF;
137 tmp.Printf( wxT("Signed int: %d\n"), si );
138 textCtrl.WriteText( tmp );
139 text_output << si << wxT("\n");
140 std_file_output << si << "\n";
141
142 unsigned int ui = 0xFFFFFFFF;
143 tmp.Printf( wxT("Unsigned int: %u\n"), ui );
144 textCtrl.WriteText( tmp );
145 text_output << ui << wxT("\n");
146 std_file_output << ui << "\n";
147
148 double d = 2.01234567890123456789;
149 tmp.Printf( wxT("Double: %f\n"), d );
150 textCtrl.WriteText( tmp );
151 text_output << d << wxT("\n");
152 std_file_output << d << "\n";
153
154 float f = (float)0.00001;
155 tmp.Printf( wxT("Float: %f\n"), f );
156 textCtrl.WriteText( tmp );
157 text_output << f << wxT("\n");
158 std_file_output << f << "\n";
159
160 wxString str( wxT("Hello!") );
161 tmp.Printf( wxT("String: %s\n"), str.c_str() );
162 textCtrl.WriteText( tmp );
163 text_output << str << wxT("\n");
164 std_file_output << str.ToAscii() << "\n";
165
166 std_file_output.close();
167
168 textCtrl.WriteText( wxT("\nReading from ifstream:\n") );
169
170 wxSTD ifstream std_file_input( "test_std.dat" );
171
172 std_file_input >> si;
173 tmp.Printf( wxT("Signed int: %d\n"), si );
174 textCtrl.WriteText( tmp );
175
176 std_file_input >> ui;
177 tmp.Printf( wxT("Unsigned int: %u\n"), ui );
178 textCtrl.WriteText( tmp );
179
180 std_file_input >> d;
181 tmp.Printf( wxT("Double: %f\n"), d );
182 textCtrl.WriteText( tmp );
183
184 std_file_input >> f;
185 tmp.Printf( wxT("Float: %f\n"), f );
186 textCtrl.WriteText( tmp );
187
188 char std_buf[200];
189 std_file_input >> std_buf;
190 str = wxString::FromAscii(std_buf);
191 tmp.Printf( wxT("String: %s\n"), str.c_str() );
192 textCtrl.WriteText( tmp );
193
194 textCtrl.WriteText( wxT("\nReading from wxFileInputStream:\n") );
195
196 buf_output.Sync();
197
198 wxFileInputStream file_input( file_name );
199 wxBufferedInputStream buf_input( file_input );
200 wxTextInputStream text_input( file_input );
201
202 text_input >> si;
203 tmp.Printf( wxT("Signed int: %d\n"), si );
204 textCtrl.WriteText( tmp );
205
206 text_input >> ui;
207 tmp.Printf( wxT("Unsigned int: %u\n"), ui );
208 textCtrl.WriteText( tmp );
209
210 text_input >> d;
211 tmp.Printf( wxT("Double: %f\n"), d );
212 textCtrl.WriteText( tmp );
213
214 text_input >> f;
215 tmp.Printf( wxT("Float: %f\n"), f );
216 textCtrl.WriteText( tmp );
217
218 text_input >> str;
219 tmp.Printf( wxT("String: %s\n"), str.c_str() );
220 textCtrl.WriteText( tmp );
221
222
223
224 textCtrl << wxT("\nTest for wxDataStream:\n\n");
225
226 textCtrl.WriteText( wxT("Writing to wxDataOutputStream:\n") );
227
228 file_output.SeekO( 0 );
229 wxDataOutputStream data_output( buf_output );
230
231 wxInt16 i16 = (unsigned short)0xFFFF;
232 tmp.Printf( wxT("Signed int16: %d\n"), (int)i16 );
233 textCtrl.WriteText( tmp );
234 data_output.Write16( i16 );
235
236 wxUint16 ui16 = 0xFFFF;
237 tmp.Printf( wxT("Unsigned int16: %u\n"), (unsigned int) ui16 );
238 textCtrl.WriteText( tmp );
239 data_output.Write16( ui16 );
240
241 d = 2.01234567890123456789;
242 tmp.Printf( wxT("Double: %f\n"), d );
243 textCtrl.WriteText( tmp );
244 data_output.WriteDouble( d );
245
246 str = wxT("Hello!");
247 tmp.Printf( wxT("String: %s\n"), str.c_str() );
248 textCtrl.WriteText( tmp );
249 data_output.WriteString( str );
250
251 buf_output.Sync();
252
253 textCtrl.WriteText( wxT("\nReading from wxDataInputStream:\n") );
254
255 file_input.SeekI( 0 );
256 wxDataInputStream data_input( buf_input );
257
258 i16 = data_input.Read16();
259 tmp.Printf( wxT("Signed int16: %d\n"), (int)i16 );
260 textCtrl.WriteText( tmp );
261
262 ui16 = data_input.Read16();
263 tmp.Printf( wxT("Unsigned int16: %u\n"), (unsigned int) ui16 );
264 textCtrl.WriteText( tmp );
265
266 d = data_input.ReadDouble();
267 tmp.Printf( wxT("Double: %f\n"), d );
268 textCtrl.WriteText( tmp );
269
270 str = data_input.ReadString();
271 tmp.Printf( wxT("String: %s\n"), str.c_str() );
272 textCtrl.WriteText( tmp );
273 }
274
275 void MyApp::DoStreamDemo2(wxCommandEvent& WXUNUSED(event))
276 {
277 wxTextCtrl& textCtrl = * GetTextCtrl();
278
279 textCtrl.Clear();
280 textCtrl << wxT("\nTesting wxBufferedStream:\n\n");
281
282 char ch,ch2;
283
284 textCtrl.WriteText( wxT("Writing number 0 to 9 to buffered wxFileOutputStream:\n\n") );
285
286 wxFileOutputStream file_output( file_name );
287 wxBufferedOutputStream buf_output( file_output );
288 for (ch = 0; ch < 10; ch++)
289 buf_output.Write( &ch, 1 );
290 buf_output.Sync();
291
292 wxFileInputStream file_input( file_name );
293 for (ch2 = 0; ch2 < 10; ch2++)
294 {
295 file_input.Read( &ch, 1 );
296 textCtrl.WriteText( (wxChar)(ch + wxT('0')) );
297 }
298 textCtrl.WriteText( wxT("\n\n\n") );
299
300 textCtrl.WriteText( wxT("Writing number 0 to 9 to buffered wxFileOutputStream, then\n") );
301 textCtrl.WriteText( wxT("seeking back to #3 and writing 0:\n\n") );
302
303 wxFileOutputStream file_output2( file_name2 );
304 wxBufferedOutputStream buf_output2( file_output2 );
305 for (ch = 0; ch < 10; ch++)
306 buf_output2.Write( &ch, 1 );
307 buf_output2.SeekO( 3 );
308 ch = 0;
309 buf_output2.Write( &ch, 1 );
310 buf_output2.Sync();
311
312 wxFileInputStream file_input2( file_name2 );
313 for (ch2 = 0; ch2 < 10; ch2++)
314 {
315 file_input2.Read( &ch, 1 );
316 textCtrl.WriteText( (wxChar)(ch + wxT('0')) );
317 }
318 textCtrl.WriteText( wxT("\n\n\n") );
319
320 // now append 2000 bytes to file (bigger than buffer)
321 buf_output2.SeekO( 0, wxFromEnd );
322 ch = 1;
323 for (int i = 0; i < 2000; i++)
324 buf_output2.Write( &ch, 1 );
325 buf_output2.Sync();
326
327 textCtrl.WriteText( wxT("Reading number 0 to 9 from buffered wxFileInputStream, then\n") );
328 textCtrl.WriteText( wxT("seeking back to #3 and reading the 0:\n\n") );
329
330 wxFileInputStream file_input3( file_name2 );
331 wxBufferedInputStream buf_input3( file_input3 );
332 for (ch2 = 0; ch2 < 10; ch2++)
333 {
334 buf_input3.Read( &ch, 1 );
335 textCtrl.WriteText( (wxChar)(ch + wxT('0')) );
336 }
337 for (int j = 0; j < 2000; j++)
338 buf_input3.Read( &ch, 1 );
339 textCtrl.WriteText( wxT("\n") );
340 buf_input3.SeekI( 3 );
341 buf_input3.Read( &ch, 1 );
342 textCtrl.WriteText( (wxChar)(ch + wxT('0')) );
343 textCtrl.WriteText( wxT("\n\n\n") );
344
345 }
346
347 void MyApp::DoStreamDemo3(wxCommandEvent& WXUNUSED(event))
348 {
349 wxTextCtrl& textCtrl = * GetTextCtrl();
350
351 textCtrl.Clear();
352 textCtrl << wxT("\nTesting wxFileInputStream's and wxFFileInputStream's error handling:\n\n");
353
354 char ch,ch2;
355
356 textCtrl.WriteText( wxT("Writing number 0 to 9 to wxFileOutputStream:\n\n") );
357
358 wxFileOutputStream file_output( file_name );
359 for (ch = 0; ch < 10; ch++)
360 file_output.Write( &ch, 1 );
361
362 // Testing wxFileInputStream
363
364 textCtrl.WriteText( wxT("Reading 0 to 10 to wxFileInputStream:\n\n") );
365
366 wxFileInputStream file_input( file_name );
367 for (ch2 = 0; ch2 < 11; ch2++)
368 {
369 file_input.Read( &ch, 1 );
370 textCtrl.WriteText( wxT("Value read: ") );
371 textCtrl.WriteText( (wxChar)(ch + '0') );
372 textCtrl.WriteText( wxT("; stream.GetLastError() returns: ") );
373 switch (file_input.GetLastError())
374 {
375 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
376 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
377 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
378 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
379 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
380 }
381 }
382 textCtrl.WriteText( wxT("\n") );
383
384 textCtrl.WriteText( wxT("Seeking to 0; stream.GetLastError() returns: ") );
385 file_input.SeekI( 0 );
386 switch (file_input.GetLastError())
387 {
388 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
389 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
390 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
391 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
392 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
393 }
394 textCtrl.WriteText( wxT("\n") );
395
396 file_input.Read( &ch, 1 );
397 textCtrl.WriteText( wxT("Value read: ") );
398 textCtrl.WriteText( (wxChar)(ch + wxT('0')) );
399 textCtrl.WriteText( wxT("; stream.GetLastError() returns: ") );
400 switch (file_input.GetLastError())
401 {
402 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
403 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
404 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
405 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
406 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
407 }
408 textCtrl.WriteText( wxT("\n\n") );
409
410
411 // Testing wxFFileInputStream
412
413 textCtrl.WriteText( wxT("Reading 0 to 10 to wxFFileInputStream:\n\n") );
414
415 wxFFileInputStream ffile_input( file_name );
416 for (ch2 = 0; ch2 < 11; ch2++)
417 {
418 ffile_input.Read( &ch, 1 );
419 textCtrl.WriteText( wxT("Value read: ") );
420 textCtrl.WriteText( (wxChar)(ch + '0') );
421 textCtrl.WriteText( wxT("; stream.GetLastError() returns: ") );
422 switch (ffile_input.GetLastError())
423 {
424 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
425 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
426 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
427 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
428 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
429 }
430 }
431 textCtrl.WriteText( wxT("\n") );
432
433 textCtrl.WriteText( wxT("Seeking to 0; stream.GetLastError() returns: ") );
434 ffile_input.SeekI( 0 );
435 switch (ffile_input.GetLastError())
436 {
437 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
438 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
439 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
440 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
441 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
442 }
443 textCtrl.WriteText( wxT("\n") );
444
445 ffile_input.Read( &ch, 1 );
446 textCtrl.WriteText( wxT("Value read: ") );
447 textCtrl.WriteText( (wxChar)(ch + '0') );
448 textCtrl.WriteText( wxT("; stream.GetLastError() returns: ") );
449 switch (ffile_input.GetLastError())
450 {
451 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
452 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
453 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
454 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
455 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
456 }
457 textCtrl.WriteText( wxT("\n\n") );
458
459 // Testing wxFFileInputStream
460
461 textCtrl.WriteText( wxT("Reading 0 to 10 to buffered wxFFileInputStream:\n\n") );
462
463 wxFFileInputStream ffile_input2( file_name );
464 wxBufferedInputStream buf_input( ffile_input2 );
465 for (ch2 = 0; ch2 < 11; ch2++)
466 {
467 buf_input.Read( &ch, 1 );
468 textCtrl.WriteText( wxT("Value read: ") );
469 textCtrl.WriteText( (wxChar)(ch + '0') );
470 textCtrl.WriteText( wxT("; stream.GetLastError() returns: ") );
471 switch (buf_input.GetLastError())
472 {
473 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
474 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
475 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
476 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
477 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
478 }
479 }
480 textCtrl.WriteText( wxT("\n") );
481
482 textCtrl.WriteText( wxT("Seeking to 0; stream.GetLastError() returns: ") );
483 buf_input.SeekI( 0 );
484 switch (buf_input.GetLastError())
485 {
486 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
487 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
488 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
489 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
490 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
491 }
492 textCtrl.WriteText( wxT("\n") );
493
494 buf_input.Read( &ch, 1 );
495 textCtrl.WriteText( wxT("Value read: ") );
496 textCtrl.WriteText( (wxChar)(ch + '0') );
497 textCtrl.WriteText( wxT("; stream.GetLastError() returns: ") );
498 switch (buf_input.GetLastError())
499 {
500 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
501 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
502 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
503 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
504 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
505 }
506 }
507
508 void MyApp::DoStreamDemo4(wxCommandEvent& WXUNUSED(event))
509 {
510 wxTextCtrl& textCtrl = * GetTextCtrl();
511
512 wxString msg;
513
514 textCtrl.Clear();
515 textCtrl << wxT("\nTesting wxStreamBuffer:\n\n");
516
517 // bigger than buffer
518 textCtrl.WriteText( wxT("Writing 2000x 1 to wxFileOutputStream.\n\n") );
519
520 wxFileOutputStream file_output( file_name );
521 for (int i = 0; i < 2000; i++)
522 {
523 char ch = 1;
524 file_output.Write( &ch, 1 );
525 }
526
527 textCtrl.WriteText( wxT("Opening with a buffered wxFileInputStream:\n\n") );
528
529 wxFileInputStream file_input( file_name );
530 wxBufferedInputStream buf_input( file_input );
531
532 textCtrl.WriteText( wxT("wxBufferedInputStream.GetLastError() returns: ") );
533 switch (buf_input.GetLastError())
534 {
535 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
536 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
537 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
538 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
539 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
540 }
541 msg.Printf( wxT("wxBufferedInputStream.LastRead() returns: %d\n"), (int)buf_input.LastRead() );
542 textCtrl.WriteText( msg );
543 msg.Printf( wxT("wxBufferedInputStream.TellI() returns: %d\n"), (int)buf_input.TellI() );
544 textCtrl.WriteText( msg );
545 textCtrl.WriteText( wxT("\n\n") );
546
547
548 textCtrl.WriteText( wxT("Seeking to position 300:\n\n") );
549
550 buf_input.SeekI( 300 );
551
552 textCtrl.WriteText( wxT("wxBufferedInputStream.GetLastError() returns: ") );
553 switch (buf_input.GetLastError())
554 {
555 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
556 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
557 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
558 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
559 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
560 }
561 msg.Printf( wxT("wxBufferedInputStream.LastRead() returns: %d\n"), (int)buf_input.LastRead() );
562 textCtrl.WriteText( msg );
563 msg.Printf( wxT("wxBufferedInputStream.TellI() returns: %d\n"), (int)buf_input.TellI() );
564 textCtrl.WriteText( msg );
565 textCtrl.WriteText( wxT("\n\n") );
566
567
568 char buf[2000];
569
570 textCtrl.WriteText( wxT("Reading 500 bytes:\n\n") );
571
572 buf_input.Read( buf, 500 );
573
574 textCtrl.WriteText( wxT("wxBufferedInputStream.GetLastError() returns: ") );
575 switch (buf_input.GetLastError())
576 {
577 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
578 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
579 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
580 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
581 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
582 }
583 msg.Printf( wxT("wxBufferedInputStream.LastRead() returns: %d\n"), (int)buf_input.LastRead() );
584 textCtrl.WriteText( msg );
585 msg.Printf( wxT("wxBufferedInputStream.TellI() returns: %d\n"), (int)buf_input.TellI() );
586 textCtrl.WriteText( msg );
587 textCtrl.WriteText( wxT("\n\n") );
588
589 textCtrl.WriteText( wxT("Reading another 500 bytes:\n\n") );
590
591 buf_input.Read( buf, 500 );
592
593 textCtrl.WriteText( wxT("wxBufferedInputStream.GetLastError() returns: ") );
594 switch (buf_input.GetLastError())
595 {
596 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
597 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
598 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
599 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
600 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
601 }
602 msg.Printf( wxT("wxBufferedInputStream.LastRead() returns: %d\n"), (int)buf_input.LastRead() );
603 textCtrl.WriteText( msg );
604 msg.Printf( wxT("wxBufferedInputStream.TellI() returns: %d\n"), (int)buf_input.TellI() );
605 textCtrl.WriteText( msg );
606 textCtrl.WriteText( wxT("\n\n") );
607
608 textCtrl.WriteText( wxT("Reading another 500 bytes:\n\n") );
609
610 buf_input.Read( buf, 500 );
611
612 textCtrl.WriteText( wxT("wxBufferedInputStream.GetLastError() returns: ") );
613 switch (buf_input.GetLastError())
614 {
615 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
616 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
617 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
618 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
619 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
620 }
621 msg.Printf( wxT("wxBufferedInputStream.LastRead() returns: %d\n"), (int)buf_input.LastRead() );
622 textCtrl.WriteText( msg );
623 msg.Printf( wxT("wxBufferedInputStream.TellI() returns: %d\n"), (int)buf_input.TellI() );
624 textCtrl.WriteText( msg );
625 textCtrl.WriteText( wxT("\n\n") );
626
627 textCtrl.WriteText( wxT("Reading another 500 bytes:\n\n") );
628
629 buf_input.Read( buf, 500 );
630
631 textCtrl.WriteText( wxT("wxBufferedInputStream.GetLastError() returns: ") );
632 switch (buf_input.GetLastError())
633 {
634 case wxSTREAM_NO_ERROR: textCtrl.WriteText( wxT("wxSTREAM_NO_ERROR\n") ); break;
635 case wxSTREAM_EOF: textCtrl.WriteText( wxT("wxSTREAM_EOF\n") ); break;
636 case wxSTREAM_READ_ERROR: textCtrl.WriteText( wxT("wxSTREAM_READ_ERROR\n") ); break;
637 case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( wxT("wxSTREAM_WRITE_ERROR\n") ); break;
638 default: textCtrl.WriteText( wxT("Huh?\n") ); break;
639 }
640 msg.Printf( wxT("wxBufferedInputStream.LastRead() returns: %d\n"), (int)buf_input.LastRead() );
641 textCtrl.WriteText( msg );
642 msg.Printf( wxT("wxBufferedInputStream.TellI() returns: %d\n"), (int)buf_input.TellI() );
643 textCtrl.WriteText( msg );
644 textCtrl.WriteText( wxT("\n\n") );
645 }
646
647 void MyApp::DoStreamDemo5(wxCommandEvent& WXUNUSED(event))
648 {
649 wxTextCtrl& textCtrl = * GetTextCtrl();
650
651 textCtrl.Clear();
652 textCtrl << wxT("\nTesting wxFileInputStream's Peek():\n\n");
653
654 char ch;
655 wxString str;
656
657 textCtrl.WriteText( wxT("Writing number 0 to 9 to wxFileOutputStream:\n\n") );
658
659 wxFileOutputStream file_output( file_name );
660 for (ch = 0; ch < 10; ch++)
661 file_output.Write( &ch, 1 );
662
663 file_output.Sync();
664
665 wxFileInputStream file_input( file_name );
666
667 ch = file_input.Peek();
668 str.Printf( wxT("First char peeked: %d\n"), (int) ch );
669 textCtrl.WriteText( str );
670
671 ch = file_input.GetC();
672 str.Printf( wxT("First char read: %d\n"), (int) ch );
673 textCtrl.WriteText( str );
674
675 ch = file_input.Peek();
676 str.Printf( wxT("Second char peeked: %d\n"), (int) ch );
677 textCtrl.WriteText( str );
678
679 ch = file_input.GetC();
680 str.Printf( wxT("Second char read: %d\n"), (int) ch );
681 textCtrl.WriteText( str );
682
683 ch = file_input.Peek();
684 str.Printf( wxT("Third char peeked: %d\n"), (int) ch );
685 textCtrl.WriteText( str );
686
687 ch = file_input.GetC();
688 str.Printf( wxT("Third char read: %d\n"), (int) ch );
689 textCtrl.WriteText( str );
690
691
692 textCtrl << wxT("\n\n\nTesting wxMemoryInputStream's Peek():\n\n");
693
694 char buf[] = { 0,1,2,3,4,5,6,7,8,9,10 };
695 wxMemoryInputStream input( buf, 10 );
696
697 ch = input.Peek();
698 str.Printf( wxT("First char peeked: %d\n"), (int) ch );
699 textCtrl.WriteText( str );
700
701 ch = input.GetC();
702 str.Printf( wxT("First char read: %d\n"), (int) ch );
703 textCtrl.WriteText( str );
704
705 ch = input.Peek();
706 str.Printf( wxT("Second char peeked: %d\n"), (int) ch );
707 textCtrl.WriteText( str );
708
709 ch = input.GetC();
710 str.Printf( wxT("Second char read: %d\n"), (int) ch );
711 textCtrl.WriteText( str );
712
713 ch = input.Peek();
714 str.Printf( wxT("Third char peeked: %d\n"), (int) ch );
715 textCtrl.WriteText( str );
716
717 ch = input.GetC();
718 str.Printf( wxT("Third char read: %d\n"), (int) ch );
719 textCtrl.WriteText( str );
720 }
721
722 void MyApp::DoStreamDemo6(wxCommandEvent& WXUNUSED(event))
723 {
724 wxTextCtrl& textCtrl = * GetTextCtrl();
725
726 textCtrl.Clear();
727 textCtrl.WriteText( wxT("\nTesting Ungetch():\n\n") );
728
729 char ch = 0;
730 wxString str;
731
732 textCtrl.WriteText( wxT("Writing number 0 to 9 to wxFileOutputStream...\n\n") );
733
734 wxFileOutputStream file_output( file_name );
735 for (ch = 0; ch < 10; ch++)
736 file_output.Write( &ch, 1 );
737
738 file_output.Sync();
739
740 textCtrl.WriteText( wxT("Reading char from wxFileInputStream:\n\n") );
741
742 wxFileInputStream file_input( file_name );
743
744 ch = file_input.GetC();
745 size_t pos = (size_t)file_input.TellI();
746 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
747 textCtrl.WriteText( str );
748
749 textCtrl.WriteText( wxT("Reading another char from wxFileInputStream:\n\n") );
750
751 ch = file_input.GetC();
752 pos = (size_t)file_input.TellI();
753 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
754 textCtrl.WriteText( str );
755
756 textCtrl.WriteText( wxT("Reading yet another char from wxFileInputStream:\n\n") );
757
758 ch = file_input.GetC();
759 pos = (size_t)file_input.TellI();
760 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
761 textCtrl.WriteText( str );
762
763 textCtrl.WriteText( wxT("Now calling Ungetch( 5 ) from wxFileInputStream...\n\n") );
764
765 file_input.Ungetch( 5 );
766 pos = (size_t)file_input.TellI();
767 str.Printf( wxT("Now at position %d\n\n"), (int) pos );
768 textCtrl.WriteText( str );
769
770 textCtrl.WriteText( wxT("Reading char from wxFileInputStream:\n\n") );
771
772 ch = file_input.GetC();
773 pos = (size_t)file_input.TellI();
774 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
775 textCtrl.WriteText( str );
776
777 textCtrl.WriteText( wxT("Reading another char from wxFileInputStream:\n\n") );
778
779 ch = file_input.GetC();
780 pos = (size_t)file_input.TellI();
781 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
782 textCtrl.WriteText( str );
783
784 textCtrl.WriteText( wxT("Now calling Ungetch( 5 ) from wxFileInputStream again...\n\n") );
785
786 file_input.Ungetch( 5 );
787 pos = (size_t)file_input.TellI();
788 str.Printf( wxT("Now at position %d\n\n"), (int) pos );
789 textCtrl.WriteText( str );
790
791 textCtrl.WriteText( wxT("Seeking to pos 3 in wxFileInputStream. This invalidates the writeback buffer.\n\n") );
792
793 file_input.SeekI( 3 );
794
795 ch = file_input.GetC();
796 pos = (size_t)file_input.TellI();
797 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
798 textCtrl.WriteText( str );
799 }
800
801 void MyApp::DoStreamDemo7(wxCommandEvent& WXUNUSED(event))
802 {
803 wxTextCtrl& textCtrl = * GetTextCtrl();
804
805 textCtrl.Clear();
806 textCtrl.WriteText( wxT("\nTesting Ungetch() in buffered input stream:\n\n") );
807
808 char ch = 0;
809 wxString str;
810
811 textCtrl.WriteText( wxT("Writing number 0 to 9 to wxFileOutputStream...\n\n") );
812
813 wxFileOutputStream file_output( file_name );
814 for (ch = 0; ch < 10; ch++)
815 file_output.Write( &ch, 1 );
816
817 file_output.Sync();
818
819 textCtrl.WriteText( wxT("Reading char from wxBufferedInputStream via wxFileInputStream:\n\n") );
820
821 wxFileInputStream file_input( file_name );
822 wxBufferedInputStream buf_input( file_input );
823
824 ch = buf_input.GetC();
825 size_t pos = (size_t)buf_input.TellI();
826 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
827 textCtrl.WriteText( str );
828
829 textCtrl.WriteText( wxT("Reading another char from wxBufferedInputStream:\n\n") );
830
831 ch = buf_input.GetC();
832 pos = (size_t)buf_input.TellI();
833 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
834 textCtrl.WriteText( str );
835
836 textCtrl.WriteText( wxT("Reading yet another char from wxBufferedInputStream:\n\n") );
837
838 ch = buf_input.GetC();
839 pos = (size_t)buf_input.TellI();
840 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
841 textCtrl.WriteText( str );
842
843 textCtrl.WriteText( wxT("Now calling Ungetch( 5 ) from wxBufferedInputStream...\n\n") );
844
845 buf_input.Ungetch( 5 );
846 pos = (size_t)buf_input.TellI();
847 str.Printf( wxT("Now at position %d\n\n"), (int) pos );
848 textCtrl.WriteText( str );
849
850 textCtrl.WriteText( wxT("Reading char from wxBufferedInputStream:\n\n") );
851
852 ch = buf_input.GetC();
853 pos = (size_t)buf_input.TellI();
854 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
855 textCtrl.WriteText( str );
856
857 textCtrl.WriteText( wxT("Reading another char from wxBufferedInputStream:\n\n") );
858
859 ch = buf_input.GetC();
860 pos = (size_t)buf_input.TellI();
861 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
862 textCtrl.WriteText( str );
863
864 textCtrl.WriteText( wxT("Now calling Ungetch( 5 ) from wxBufferedInputStream again...\n\n") );
865
866 buf_input.Ungetch( 5 );
867 pos = (size_t)buf_input.TellI();
868 str.Printf( wxT("Now at position %d\n\n"), (int) pos );
869 textCtrl.WriteText( str );
870
871 textCtrl.WriteText( wxT("Seeking to pos 3 in wxBufferedInputStream. This invalidates the writeback buffer.\n\n") );
872
873 buf_input.SeekI( 3 );
874
875 ch = buf_input.GetC();
876 pos = (size_t)buf_input.TellI();
877 str.Printf( wxT("Read char: %d. Now at position %d\n\n"), (int) ch, (int) pos );
878 textCtrl.WriteText( str );
879 }
880
881 #if wxUSE_UNICODE
882 void MyApp::DoUnicodeDemo(wxCommandEvent& WXUNUSED(event))
883 {
884 wxTextCtrl& textCtrl = * GetTextCtrl();
885
886 textCtrl.Clear();
887 textCtrl << wxT("\nTest wchar_t to char (Unicode to ANSI/Multibyte) converions:");
888
889 wxString str;
890 str = wxT("Robert R\366bling\n");
891
892 printf( "\n\nConversion with wxConvLocal:\n" );
893 wxConvCurrent = &wxConvLocal;
894 puts( str.mbc_str() );
895 printf( "\n\nConversion with wxConvLibc:\n" );
896 wxConvCurrent = &wxConvLibc;
897 puts( str.mbc_str() );
898
899 }
900 #endif
901
902 void MyApp::DoMIMEDemo(wxCommandEvent& WXUNUSED(event))
903 {
904 static wxString s_defaultExt = wxT("xyz");
905
906 wxString ext = wxGetTextFromUser(wxT("Enter a file extension: "),
907 wxT("MIME database test"),
908 s_defaultExt);
909 if ( !!ext )
910 {
911 s_defaultExt = ext;
912
913 // init MIME database if not done yet
914 if ( !m_mimeDatabase )
915 {
916 m_mimeDatabase = new wxMimeTypesManager;
917
918 static const wxFileTypeInfo fallbacks[] =
919 {
920 wxFileTypeInfo(wxT("application/xyz"),
921 wxT("XyZ %s"),
922 wxT("XyZ -p %s"),
923 wxT("The one and only XYZ format file"),
924 wxT("xyz"), wxT("123"), wxNullPtr),
925 wxFileTypeInfo(wxT("text/html"),
926 wxT("lynx %s"),
927 wxT("lynx -dump %s | lpr"),
928 wxT("HTML document (from fallback)"),
929 wxT("htm"), wxT("html"), wxNullPtr),
930
931 // must terminate the table with this!
932 wxFileTypeInfo()
933 };
934
935 m_mimeDatabase->AddFallbacks(fallbacks);
936 }
937
938 wxTextCtrl& textCtrl = * GetTextCtrl();
939
940 wxFileType *filetype = m_mimeDatabase->GetFileTypeFromExtension(ext);
941 if ( !filetype )
942 {
943 textCtrl << wxT("Unknown extension '") << ext << wxT("'\n");
944 }
945 else
946 {
947 wxString type, desc, open;
948 filetype->GetMimeType(&type);
949 filetype->GetDescription(&desc);
950
951 wxString filename = wxT("filename");
952 filename << wxT(".") << ext;
953 wxFileType::MessageParameters params(filename, type);
954 filetype->GetOpenCommand(&open, params);
955
956 textCtrl << wxT("MIME information about extension '") << ext << wxT('\n')
957 << wxT("\tMIME type: ") << ( !type ? wxString("unknown") : type ) << wxT('\n')
958 << wxT("\tDescription: ") << ( !desc ? wxString(wxEmptyString) : desc )
959 << wxT('\n')
960 << wxT("\tCommand to open: ") << ( !open ? wxString("no") : open )
961 << wxT('\n');
962
963 delete filetype;
964 }
965 }
966 //else: cancelled by user
967 }
968
969 void MyApp::DoByteOrderDemo(wxCommandEvent& WXUNUSED(event))
970 {
971 wxTextCtrl& textCtrl = * GetTextCtrl();
972
973 textCtrl.Clear();
974 textCtrl << wxT("\nTest byte order macros:\n\n");
975
976 #if wxBYTE_ORDER == wxLITTLE_ENDIAN
977 textCtrl << wxT("This is a little endian system.\n\n");
978 #else
979 textCtrl << wxT("This is a big endian system.\n\n");
980 #endif
981
982 wxString text;
983
984 wxInt32 var = 0xF1F2F3F4;
985 text = wxEmptyString;
986 text.Printf( wxT("Value of wxInt32 is now: %#x.\n\n"), var );
987 textCtrl.WriteText( text );
988
989 text = wxEmptyString;
990 text.Printf( wxT("Value of swapped wxInt32 is: %#x.\n\n"), wxINT32_SWAP_ALWAYS( var ) );
991 textCtrl.WriteText( text );
992
993 text = wxEmptyString;
994 text.Printf( wxT("Value of wxInt32 swapped on little endian is: %#x.\n\n"), wxINT32_SWAP_ON_LE( var ) );
995 textCtrl.WriteText( text );
996
997 text = wxEmptyString;
998 text.Printf( wxT("Value of wxInt32 swapped on big endian is: %#x.\n\n"), wxINT32_SWAP_ON_BE( var ) );
999 textCtrl.WriteText( text );
1000 }
1001
1002 void MyApp::DoVariantDemo(wxCommandEvent& WXUNUSED(event) )
1003 {
1004 wxTextCtrl& textCtrl = * GetTextCtrl();
1005
1006 wxVariant var1 = wxT("String value");
1007 textCtrl << wxT("var1 = ") << var1.MakeString() << wxT("\n");
1008
1009 // Conversion
1010 wxString str = var1.MakeString();
1011
1012 var1 = 123.456;
1013 textCtrl << wxT("var1 = ") << var1.GetReal() << wxT("\n");
1014
1015 // Implicit conversion
1016 double v = var1;
1017
1018 var1 = 9876L;
1019 textCtrl << wxT("var1 = ") << var1.GetLong() << wxT("\n");
1020
1021 // Implicit conversion
1022 long l = var1;
1023
1024 // suppress compile warnings about unused variables
1025 wxUnusedVar(l);
1026 wxUnusedVar(v);
1027
1028 wxArrayString stringArray;
1029 stringArray.Add(wxT("one")); stringArray.Add(wxT("two")); stringArray.Add(wxT("three"));
1030 var1 = stringArray;
1031 textCtrl << wxT("var1 = ") << var1.MakeString() << wxT("\n");
1032
1033 var1.ClearList();
1034 var1.Append(wxVariant(1.2345));
1035 var1.Append(wxVariant(wxT("hello")));
1036 var1.Append(wxVariant(54321L));
1037
1038 textCtrl << wxT("var1 = ") << var1.MakeString() << wxT("\n");
1039
1040 size_t n = var1.GetCount();
1041 size_t i;
1042 for (i = (size_t) 0; i < n; i++)
1043 {
1044 textCtrl << wxT("var1[") << (int) i << wxT("] (type ") << var1[i].GetType() << wxT(") = ") << var1[i].MakeString() << wxT("\n");
1045 }
1046
1047 var1 = wxVariant(new wxFont(wxSystemSettings::GetFont(wxSYS_OEM_FIXED_FONT)));
1048 textCtrl << wxT("var1 = (wxfont)\"");
1049 wxFont* font = wxGetVariantCast(var1,wxFont);
1050 if (font)
1051 {
1052 textCtrl << font->GetNativeFontInfoDesc() << wxT("\"\n");
1053 }
1054 else
1055 {
1056 textCtrl << wxT("(null)\"\n");
1057 }
1058 }
1059
1060 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
1061 EVT_MENU(TYPES_QUIT, MyFrame::OnQuit)
1062 EVT_MENU(TYPES_ABOUT, MyFrame::OnAbout)
1063 END_EVENT_TABLE()
1064
1065 // My frame constructor
1066 MyFrame::MyFrame(wxFrame *parent, const wxString& title,
1067 const wxPoint& pos, const wxSize& size)
1068 : wxFrame(parent, wxID_ANY, title, pos, size)
1069 {}
1070
1071 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
1072 {
1073 Close(true);
1074 }
1075
1076 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
1077 {
1078 wxMessageDialog dialog(this, wxT("Tests various wxWidgets types"),
1079 wxT("About Types"), wxYES_NO|wxCANCEL);
1080
1081 dialog.ShowModal();
1082 }
1083
1084