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