1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Types wxWindows sample
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "typetest.h"
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
29 #include "wx/variant.h"
30 #include "wx/mimetype.h"
34 #if defined(__WXGTK__) || defined(__WXMOTIF__)
35 #include "mondrian.xpm"
38 #include "wx/ioswrap.h"
46 #include "wx/wfstream.h"
47 #include "wx/datstrm.h"
48 #include "wx/txtstrm.h"
50 // Create a new application object
53 IMPLEMENT_DYNAMIC_CLASS (MyApp
, wxApp
)
55 BEGIN_EVENT_TABLE(MyApp
, wxApp
)
56 EVT_MENU(TYPES_DATE
, MyApp
::DoDateDemo
)
57 EVT_MENU(TYPES_TIME
, MyApp
::DoTimeDemo
)
58 EVT_MENU(TYPES_VARIANT
, MyApp
::DoVariantDemo
)
59 EVT_MENU(TYPES_BYTEORDER
, MyApp
::DoByteOrderDemo
)
61 EVT_MENU(TYPES_UNICODE
, MyApp
::DoUnicodeDemo
)
63 EVT_MENU(TYPES_STREAM
, MyApp
::DoStreamDemo
)
64 EVT_MENU(TYPES_STREAM2
, MyApp
::DoStreamDemo2
)
65 EVT_MENU(TYPES_STREAM3
, MyApp
::DoStreamDemo3
)
66 EVT_MENU(TYPES_MIME
, MyApp
::DoMIMEDemo
)
71 // Create the main frame window
72 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
, "wxWindows Types Demo",
73 wxPoint(50, 50), wxSize(450, 340));
76 frame
->SetIcon(wxICON(mondrian
));
79 wxMenu
*file_menu
= new wxMenu
;
81 file_menu
->Append(TYPES_ABOUT
, "&About");
82 file_menu
->AppendSeparator();
83 file_menu
->Append(TYPES_QUIT
, "E&xit\tAlt-X");
85 wxMenu
*test_menu
= new wxMenu
;
86 test_menu
->Append(TYPES_DATE
, "&Date test");
87 test_menu
->Append(TYPES_TIME
, "&Time test");
88 test_menu
->Append(TYPES_VARIANT
, "&Variant test");
89 test_menu
->Append(TYPES_BYTEORDER
, "&Byteorder test");
91 test_menu
->Append(TYPES_UNICODE
, "&Unicode test");
93 test_menu
->Append(TYPES_STREAM
, "&Stream test");
94 test_menu
->Append(TYPES_STREAM2
, "&Stream seek test");
95 test_menu
->Append(TYPES_STREAM3
, "&Stream error test");
96 test_menu
->AppendSeparator();
97 test_menu
->Append(TYPES_MIME
, "&MIME database test");
99 wxMenuBar
*menu_bar
= new wxMenuBar
;
100 menu_bar
->Append(file_menu
, "&File");
101 menu_bar
->Append(test_menu
, "&Tests");
102 frame
->SetMenuBar(menu_bar
);
104 m_textCtrl
= new wxTextCtrl(frame
, -1, "", wxPoint(0, 0), wxDefaultSize
, wxTE_MULTILINE
);
114 void MyApp
::DoStreamDemo(wxCommandEvent
& WXUNUSED(event
))
116 wxTextCtrl
& textCtrl
= * GetTextCtrl();
119 textCtrl
<< _T("\nTest fstream vs. wxFileStream:\n\n");
121 textCtrl
.WriteText( "Writing to ofstream and wxFileOutputStream:\n" );
123 ofstream
std_file_output( "test_std.dat" );
124 wxFileOutputStream
file_output( "test_wx.dat" );
125 wxBufferedOutputStream
buf_output( file_output
);
126 wxTextOutputStream
text_output( buf_output
);
129 signed int si
= 0xFFFFFFFF;
130 tmp
.Printf( _T("Signed int: %d\n"), si
);
131 textCtrl
.WriteText( tmp
);
132 text_output
<< si
<< "\n";
133 std_file_output
<< si
<< "\n";
135 unsigned int ui
= 0xFFFFFFFF;
136 tmp
.Printf( _T("Unsigned int: %u\n"), ui
);
137 textCtrl
.WriteText( tmp
);
138 text_output
<< ui
<< "\n";
139 std_file_output
<< ui
<< "\n";
141 double d
= 2.01234567890123456789;
142 tmp
.Printf( _T("Double: %f\n"), d
);
143 textCtrl
.WriteText( tmp
);
144 text_output
<< d
<< "\n";
145 std_file_output
<< d
<< "\n";
147 float f
= (float)0.00001;
148 tmp
.Printf( _T("Float: %f\n"), f
);
149 textCtrl
.WriteText( tmp
);
150 text_output
<< f
<< "\n";
151 std_file_output
<< f
<< "\n";
153 wxString
str( _T("Hello!") );
154 tmp
.Printf( _T("String: %s\n"), str
.c_str() );
155 textCtrl
.WriteText( tmp
);
156 text_output
<< str
<< "\n";
157 std_file_output
<< str
.c_str() << "\n";
159 textCtrl
.WriteText( "\nReading from ifstream:\n" );
161 ifstream
std_file_input( "test_std.dat" );
163 std_file_input
>> si
;
164 tmp
.Printf( _T("Signed int: %d\n"), si
);
165 textCtrl
.WriteText( tmp
);
167 std_file_input
>> ui
;
168 tmp
.Printf( _T("Unsigned int: %u\n"), ui
);
169 textCtrl
.WriteText( tmp
);
172 tmp
.Printf( _T("Double: %f\n"), d
);
173 textCtrl
.WriteText( tmp
);
176 tmp
.Printf( _T("Float: %f\n"), f
);
177 textCtrl
.WriteText( tmp
);
179 std_file_input
>> str
;
180 tmp
.Printf( _T("String: %s\n"), str
.c_str() );
181 textCtrl
.WriteText( tmp
);
183 textCtrl
.WriteText( "\nReading from wxFileInputStream:\n" );
187 wxFileInputStream
file_input( "test_wx.dat" );
188 wxBufferedInputStream
buf_input( file_input
);
189 wxTextInputStream
text_input( buf_input
);
192 tmp
.Printf( _T("Signed int: %d\n"), si
);
193 textCtrl
.WriteText( tmp
);
196 tmp
.Printf( _T("Unsigned int: %u\n"), ui
);
197 textCtrl
.WriteText( tmp
);
200 tmp
.Printf( _T("Double: %f\n"), d
);
201 textCtrl
.WriteText( tmp
);
204 tmp
.Printf( _T("Float: %f\n"), f
);
205 textCtrl
.WriteText( tmp
);
208 tmp
.Printf( _T("String: %s\n"), str
.c_str() );
209 textCtrl
.WriteText( tmp
);
212 textCtrl
<< "\nTest for wxDataStream:\n\n";
214 textCtrl
.WriteText( "Writing to wxDataOutputStream:\n" );
216 file_output
.SeekO( 0 );
217 wxDataOutputStream
data_output( buf_output
);
219 wxInt16 i16
= (short)0xFFFF;
220 tmp
.Printf( _T("Signed int16: %d\n"), (int)i16
);
221 textCtrl
.WriteText( tmp
);
222 data_output
.Write16( i16
);
224 wxUint16 ui16
= 0xFFFF;
225 tmp
.Printf( _T("Unsigned int16: %u\n"), (unsigned int) ui16
);
226 textCtrl
.WriteText( tmp
);
227 data_output
.Write16( ui16
);
229 d
= 2.01234567890123456789;
230 tmp
.Printf( _T("Double: %f\n"), d
);
231 textCtrl
.WriteText( tmp
);
232 data_output
.WriteDouble( d
);
235 tmp
.Printf( _T("String: %s\n"), str
.c_str() );
236 textCtrl
.WriteText( tmp
);
237 data_output
.WriteString( str
);
241 textCtrl
.WriteText( "\nReading from wxDataInputStream:\n" );
243 file_input
.SeekI( 0 );
244 wxDataInputStream
data_input( buf_input
);
246 i16
= data_input
.Read16();
247 tmp
.Printf( _T("Signed int16: %d\n"), (int)i16
);
248 textCtrl
.WriteText( tmp
);
250 ui16
= data_input
.Read16();
251 tmp
.Printf( _T("Unsigned int16: %u\n"), (unsigned int) ui16
);
252 textCtrl
.WriteText( tmp
);
254 d
= data_input
.ReadDouble();
255 tmp
.Printf( _T("Double: %f\n"), d
);
256 textCtrl
.WriteText( tmp
);
258 str
= data_input
.ReadString();
259 tmp
.Printf( _T("String: %s\n"), str
.c_str() );
260 textCtrl
.WriteText( tmp
);
263 void MyApp
::DoStreamDemo2(wxCommandEvent
& WXUNUSED(event
))
265 wxTextCtrl
& textCtrl
= * GetTextCtrl();
268 textCtrl
<< _T("\nTesting wxBufferedStream:\n\n");
272 textCtrl
.WriteText( "Writing number 0 to 9 to buffered wxFileOutputStream:\n\n" );
274 wxFileOutputStream
file_output( "test_wx.dat" );
275 wxBufferedOutputStream
buf_output( file_output
);
276 for (ch
= 0; ch
< 10; ch
++)
277 buf_output
.Write( &ch
, 1 );
280 wxFileInputStream
file_input( "test_wx.dat" );
281 for (ch2
= 0; ch2
< 10; ch2
++)
283 file_input
.Read( &ch
, 1 );
284 textCtrl
.WriteText( (char)(ch
+ '0') );
286 textCtrl
.WriteText( "\n\n\n" );
288 textCtrl
.WriteText( "Writing number 0 to 9 to buffered wxFileOutputStream, then\n" );
289 textCtrl
.WriteText( "seeking back to #3 and writing 3:\n\n" );
291 wxFileOutputStream
file_output2( "test_wx2.dat" );
292 wxBufferedOutputStream
buf_output2( file_output2
);
293 for (ch
= 0; ch
< 10; ch
++)
294 buf_output2
.Write( &ch
, 1 );
295 buf_output2
.SeekO( 3 );
297 buf_output2
.Write( &ch
, 1 );
300 wxFileInputStream
file_input2( "test_wx2.dat" );
301 for (ch2
= 0; ch2
< 10; ch2
++)
303 file_input2
.Read( &ch
, 1 );
304 textCtrl
.WriteText( (char)(ch
+ '0') );
306 textCtrl
.WriteText( "\n\n\n" );
308 // now append 2000 bytes to file (bigger than buffer)
309 buf_output2
.SeekO( 0, wxFromEnd
);
311 for (int i
= 0; i
< 2000; i
++)
312 buf_output2
.Write( &ch
, 1 );
315 textCtrl
.WriteText( "Reading number 0 to 9 from buffered wxFileInputStream, then\n" );
316 textCtrl
.WriteText( "seeking back to #3 and reading 3:\n\n" );
318 wxFileInputStream
file_input3( "test_wx2.dat" );
319 wxBufferedInputStream
buf_input3( file_input3
);
320 for (ch2
= 0; ch2
< 10; ch2
++)
322 buf_input3
.Read( &ch
, 1 );
323 textCtrl
.WriteText( (char)(ch
+ '0') );
325 for (int j
= 0; j
< 2000; j
++)
326 buf_input3
.Read( &ch
, 1 );
327 textCtrl
.WriteText( "\n" );
328 buf_input3
.SeekI( 3 );
329 buf_input3
.Read( &ch
, 1 );
330 textCtrl
.WriteText( (char)(ch
+ '0') );
331 textCtrl
.WriteText( "\n\n\n" );
335 void MyApp
::DoStreamDemo3(wxCommandEvent
& WXUNUSED(event
))
337 wxTextCtrl
& textCtrl
= * GetTextCtrl();
340 textCtrl
<< "\nTesting wxFileInputStream's and wxFFileInputStream's error handling:\n\n";
344 textCtrl
.WriteText( "Writing number 0 to 9 to wxFileOutputStream:\n\n" );
346 wxFileOutputStream
file_output( "test_wx.dat" );
347 for (ch
= 0; ch
< 10; ch
++)
348 file_output
.Write( &ch
, 1 );
350 // Testing wxFileInputStream
352 textCtrl
.WriteText( "Reading 0 to 10 to wxFileInputStream:\n\n" );
354 wxFileInputStream
file_input( "test_wx.dat" );
355 for (ch2
= 0; ch2
< 11; ch2
++)
357 file_input
.Read( &ch
, 1 );
358 textCtrl
.WriteText( "Value read: " );
359 textCtrl
.WriteText( (char)(ch
+ '0') );
360 textCtrl
.WriteText( "; stream.LastError() returns: " );
361 switch (file_input
.LastError())
363 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
364 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
365 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
366 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
367 default: textCtrl
.WriteText( "Huh?\n" ); break;
370 textCtrl
.WriteText( "\n" );
372 textCtrl
.WriteText( "Seeking to 0; stream.LastError() returns: " );
373 file_input
.SeekI( 0 );
374 switch (file_input
.LastError())
376 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
377 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
378 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
379 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
380 default: textCtrl
.WriteText( "Huh?\n" ); break;
382 textCtrl
.WriteText( "\n" );
384 file_input
.Read( &ch
, 1 );
385 textCtrl
.WriteText( "Value read: " );
386 textCtrl
.WriteText( (char)(ch
+ '0') );
387 textCtrl
.WriteText( "; stream.LastError() returns: " );
388 switch (file_input
.LastError())
390 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
391 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
392 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
393 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
394 default: textCtrl
.WriteText( "Huh?\n" ); break;
396 textCtrl
.WriteText( "\n\n" );
399 // Testing wxFFileInputStream
401 textCtrl
.WriteText( "Reading 0 to 10 to wxFFileInputStream:\n\n" );
403 wxFFileInputStream
ffile_input( "test_wx.dat" );
404 for (ch2
= 0; ch2
< 11; ch2
++)
406 ffile_input
.Read( &ch
, 1 );
407 textCtrl
.WriteText( "Value read: " );
408 textCtrl
.WriteText( (char)(ch
+ '0') );
409 textCtrl
.WriteText( "; stream.LastError() returns: " );
410 switch (ffile_input
.LastError())
412 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
413 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
414 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
415 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
416 default: textCtrl
.WriteText( "Huh?\n" ); break;
419 textCtrl
.WriteText( "\n" );
421 textCtrl
.WriteText( "Seeking to 0; stream.LastError() returns: " );
422 ffile_input
.SeekI( 0 );
423 switch (ffile_input
.LastError())
425 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
426 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
427 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
428 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
429 default: textCtrl
.WriteText( "Huh?\n" ); break;
431 textCtrl
.WriteText( "\n" );
433 ffile_input
.Read( &ch
, 1 );
434 textCtrl
.WriteText( "Value read: " );
435 textCtrl
.WriteText( (char)(ch
+ '0') );
436 textCtrl
.WriteText( "; stream.LastError() returns: " );
437 switch (ffile_input
.LastError())
439 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
440 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
441 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
442 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
443 default: textCtrl
.WriteText( "Huh?\n" ); break;
445 textCtrl
.WriteText( "\n\n" );
447 // Testing wxFFileInputStream
449 textCtrl
.WriteText( "Reading 0 to 10 to buffered wxFFileInputStream:\n\n" );
451 wxFFileInputStream
ffile_input2( "test_wx.dat" );
452 wxBufferedInputStream
buf_input( ffile_input2
);
453 for (ch2
= 0; ch2
< 11; ch2
++)
455 buf_input
.Read( &ch
, 1 );
456 textCtrl
.WriteText( "Value read: " );
457 textCtrl
.WriteText( (char)(ch
+ '0') );
458 textCtrl
.WriteText( "; stream.LastError() returns: " );
459 switch (buf_input
.LastError())
461 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
462 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
463 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
464 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
465 default: textCtrl
.WriteText( "Huh?\n" ); break;
468 textCtrl
.WriteText( "\n" );
470 textCtrl
.WriteText( "Seeking to 0; stream.LastError() returns: " );
471 buf_input
.SeekI( 0 );
472 switch (buf_input
.LastError())
474 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
475 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
476 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
477 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
478 default: textCtrl
.WriteText( "Huh?\n" ); break;
480 textCtrl
.WriteText( "\n" );
482 buf_input
.Read( &ch
, 1 );
483 textCtrl
.WriteText( "Value read: " );
484 textCtrl
.WriteText( (char)(ch
+ '0') );
485 textCtrl
.WriteText( "; stream.LastError() returns: " );
486 switch (buf_input
.LastError())
488 case wxSTREAM_NOERROR
: textCtrl
.WriteText( "wxSTREAM_NOERROR\n" ); break;
489 case wxSTREAM_EOF
: textCtrl
.WriteText( "wxSTREAM_EOF\n" ); break;
490 case wxSTREAM_READ_ERROR
: textCtrl
.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
491 case wxSTREAM_WRITE_ERROR
: textCtrl
.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
492 default: textCtrl
.WriteText( "Huh?\n" ); break;
498 void MyApp
::DoUnicodeDemo(wxCommandEvent
& WXUNUSED(event
))
500 wxTextCtrl
& textCtrl
= * GetTextCtrl();
503 textCtrl
<< "\nTest wchar_t to char (Unicode to ANSI/Multibyte) converions:";
506 str
= _T("Robert Röbling\n");
508 printf( "\n\nConversion with wxConvLocal:\n" );
509 wxConvCurrent
= &wxConvLocal
;
510 printf( (const char*) str
.mbc_str() );
512 printf( "\n\nConversion with wxConvGdk:\n" );
513 wxConvCurrent
= &wxConvGdk
;
514 printf( (const char*) str
.mbc_str() );
516 printf( "\n\nConversion with wxConvLibc:\n" );
517 wxConvCurrent
= &wxConvLibc
;
518 printf( (const char*) str
.mbc_str() );
523 void MyApp
::DoMIMEDemo(wxCommandEvent
& WXUNUSED(event
))
525 static wxString s_defaultExt
= "xyz";
527 wxString ext
= wxGetTextFromUser("Enter a file extension: ",
528 "MIME database test",
534 // init MIME database if not done yet
535 if ( !m_mimeDatabase
)
537 m_mimeDatabase
= new wxMimeTypesManager
;
539 static const wxFileTypeInfo fallbacks
[] =
541 wxFileTypeInfo("application/xyz",
544 "The one and only XYZ format file",
546 wxFileTypeInfo("text/html",
548 "lynx -dump %s | lpr",
549 "HTML document (from fallback)",
550 "htm", "html", NULL
),
552 // must terminate the table with this!
556 m_mimeDatabase
->AddFallbacks(fallbacks
);
559 wxTextCtrl
& textCtrl
= * GetTextCtrl();
561 wxFileType
*filetype
= m_mimeDatabase
->GetFileTypeFromExtension(ext
);
564 textCtrl
<< "Unknown extension '" << ext
<< "'\n";
568 wxString type
, desc
, open
;
569 filetype
->GetMimeType(&type
);
570 filetype
->GetDescription(&desc
);
572 wxString filename
= "filename";
573 filename
<< "." << ext
;
574 wxFileType
::MessageParameters
params(filename
, type
);
575 filetype
->GetOpenCommand(&open
, params
);
577 textCtrl
<< "MIME information about extension '" << ext
<< "'\n"
578 << "\tMIME type: " << ( !type ?
"unknown"
579 : type
.c_str() ) << '\n'
580 << "\tDescription: " << ( !desc ?
"" : desc
.c_str() )
582 << "\tCommand to open: " << ( !open ?
"no" : open
.c_str() )
588 //else: cancelled by user
591 void MyApp
::DoByteOrderDemo(wxCommandEvent
& WXUNUSED(event
))
593 wxTextCtrl
& textCtrl
= * GetTextCtrl();
596 textCtrl
<< "\nTest byte order macros:\n\n";
598 if (wxBYTE_ORDER
== wxLITTLE_ENDIAN
)
599 textCtrl
<< "This is a little endian system.\n\n";
601 textCtrl
<< "This is a big endian system.\n\n";
605 wxInt32 var
= 0xF1F2F3F4;
607 text
.Printf( _T("Value of wxInt32 is now: %#x.\n\n"), var
);
608 textCtrl
.WriteText( text
);
611 text
.Printf( _T("Value of swapped wxInt32 is: %#x.\n\n"), wxINT32_SWAP_ALWAYS( var
) );
612 textCtrl
.WriteText( text
);
615 text
.Printf( _T("Value of wxInt32 swapped on little endian is: %#x.\n\n"), wxINT32_SWAP_ON_LE( var
) );
616 textCtrl
.WriteText( text
);
619 text
.Printf( _T("Value of wxInt32 swapped on big endian is: %#x.\n\n"), wxINT32_SWAP_ON_BE( var
) );
620 textCtrl
.WriteText( text
);
623 void MyApp
::DoTimeDemo(wxCommandEvent
& WXUNUSED(event
))
625 wxTextCtrl
& textCtrl
= * GetTextCtrl();
628 textCtrl
<< "\nTest class wxTime:\n";
630 textCtrl
<< "It is now " << (wxString
) now
<< "\n";
633 void MyApp
::DoDateDemo(wxCommandEvent
& WXUNUSED(event
))
635 wxTextCtrl
& textCtrl
= * GetTextCtrl();
638 textCtrl
<< "\nTest class wxDate" << "\n";
640 // Various versions of the constructors
641 // and various output
643 wxDate
x(10,20,1962);
645 textCtrl
<< x
.FormatDate(wxFULL
) << " (full)\n";
647 // constuctor with a string, just printing the day of the week
648 wxDate
y("8/8/1988");
650 textCtrl
<< y
.FormatDate(wxDAY
) << " (just day)\n";
652 // constructor with a julian
653 wxDate
z( 2450000L );
654 textCtrl
<< z
.FormatDate(wxFULL
) << " (full)\n";
656 // using date addition and subtraction
658 textCtrl
<< a
.FormatDate(wxFULL
) << " (full)\n";
660 textCtrl
<< a
.FormatDate(wxEUROPEAN
) << " (European)\n";
662 // Using subtraction of two date objects
663 wxDate a1
= wxString("7/13/1991");
665 textCtrl
<< (a1
-a2
) << "\n";
666 textCtrl
<< (a2
+=10) << "\n";
669 textCtrl
<< "Tomorrow= " << a1
.FormatDate(wxFULL
) << "\n";
671 wxDate
tmpDate1("08/01/1991");
672 wxDate
tmpDate2("07/14/1991");
673 textCtrl
<< "a1 (7-14-91) < 8-01-91 ? ==> " << ((a1
< tmpDate1
) ?
"TRUE" : "FALSE") << "\n";
674 textCtrl
<< "a1 (7-14-91) > 8-01-91 ? ==> " << ((a1
> tmpDate1
) ?
"TRUE" : "FALSE") << "\n";
675 textCtrl
<< "a1 (7-14-91)== 7-14-91 ? ==> " << ((a1
==tmpDate2
) ?
"TRUE" : "FALSE") << "\n";
678 textCtrl
<< "a1 (7-14-91)== a3 (7-14-91) ? ==> " << ((a1
==a3
) ?
"TRUE" : "FALSE") << "\n";
680 textCtrl
<< "a1 (7-14-91)== a4 (7-15-91) ? ==> " << ((a1
==++a4
) ?
"TRUE" : "FALSE") << "\n";
682 wxDate a5
= wxString("today");
683 textCtrl
<< "Today is: " << a5
<< "\n";
685 textCtrl
<< "Today (a4) is: " << a4
<< "\n";
687 textCtrl
<< "Today + 4 is: " << (a4
+=4) << "\n";
689 textCtrl
<< "Today - 4 is: " << (a4
-=4) << "\n";
691 textCtrl
<< "=========== Leap Year Test ===========\n";
693 textCtrl
<< a1
.FormatDate(wxFULL
) << " " << ((a1
.IsLeapYear()) ?
"Leap" : "non-Leap");
694 textCtrl
<< " " << "day of year: " << a1
.GetDayOfYear() << "\n";
697 textCtrl
<< a1
.FormatDate(wxFULL
) << " " << ((a1
.IsLeapYear()) ?
"Leap" : "non-Leap");
698 textCtrl
<< " " << "day of year: " << a1
.GetDayOfYear() << "\n";
700 textCtrl
<< "================== string assignment test ====================\n";
701 wxString date_string
=a1
;
702 textCtrl
<< "a1 as a string (s/b 2/16/1993) ==> " << date_string
<< "\n";
704 textCtrl
<< "================== SetFormat test ============================\n";
705 a1
.SetFormat(wxFULL
);
706 textCtrl
<< "a1 (s/b FULL format) ==> " << a1
<< "\n";
707 a1
.SetFormat(wxEUROPEAN
);
708 textCtrl
<< "a1 (s/b EUROPEAN format) ==> " << a1
<< "\n";
710 textCtrl
<< "================== SetOption test ============================\n";
711 textCtrl
<< "Date abbreviation ON\n";
713 a1
.SetOption(wxDATE_ABBR
);
714 a1
.SetFormat(wxMONTH
);
715 textCtrl
<< "a1 (s/b MONTH format) ==> " << a1
<< "\n";
717 textCtrl
<< "a1 (s/b DAY format) ==> " << a1
<< "\n";
718 a1
.SetFormat(wxFULL
);
719 textCtrl
<< "a1 (s/b FULL format) ==> " << a1
<< "\n";
720 a1
.SetFormat(wxEUROPEAN
);
721 textCtrl
<< "a1 (s/b EUROPEAN format) ==> " << a1
<< "\n";
722 textCtrl
<< "Century suppression ON\n";
723 a1
.SetOption(wxNO_CENTURY
);
725 textCtrl
<< "a1 (s/b MDY format) ==> " << a1
<< "\n";
726 textCtrl
<< "Century suppression OFF\n";
727 a1
.SetOption(wxNO_CENTURY
,FALSE
);
728 textCtrl
<< "a1 (s/b MDY format) ==> " << a1
<< "\n";
729 textCtrl
<< "Century suppression ON\n";
730 a1
.SetOption(wxNO_CENTURY
);
731 textCtrl
<< "a1 (s/b MDY format) ==> " << a1
<< "\n";
732 a1
.SetFormat(wxFULL
);
733 textCtrl
<< "a1 (s/b FULL format) ==> " << a1
<< "\n";
735 textCtrl
<< "\n=============== Version 4.0 Enhancement Test =================\n";
737 wxDate
v4("11/26/1966");
738 textCtrl
<< "\n---------- Set Stuff -----------\n";
739 textCtrl
<< "First, 'Set' to today..." << "\n";
740 textCtrl
<< "Before 'Set' => " << v4
<< "\n";
741 textCtrl
<< "After 'Set' => " << v4
.Set() << "\n\n";
743 textCtrl
<< "Set to 11/26/66 => " << v4
.Set(11,26,1966) << "\n";
744 textCtrl
<< "Current Julian => " << v4
.GetJulianDate() << "\n";
745 textCtrl
<< "Set to Julian 2450000L => " << v4
.Set(2450000L) << "\n";
746 textCtrl
<< "See! => " << v4
.GetJulianDate() << "\n";
748 textCtrl
<< "---------- Add Stuff -----------\n";
749 textCtrl
<< "Start => " << v4
<< "\n";
750 textCtrl
<< "Add 4 Weeks => " << v4
.AddWeeks(4) << "\n";
751 textCtrl
<< "Sub 1 Month => " << v4
.AddMonths(-1) << "\n";
752 textCtrl
<< "Add 2 Years => " << v4
.AddYears(2) << "\n";
754 textCtrl
<< "---------- Misc Stuff -----------\n";
755 textCtrl
<< "The date aboves' day of the month is => " << v4
.GetDay() << "\n";
756 textCtrl
<< "There are " << v4
.GetDaysInMonth() << " days in this month.\n";
757 textCtrl
<< "The first day of this month lands on " << v4
.GetFirstDayOfMonth() << "\n";
758 textCtrl
<< "This day happens to be " << v4
.GetDayOfWeekName() << "\n";
759 textCtrl
<< "the " << v4
.GetDayOfWeek() << " day of the week," << "\n";
760 textCtrl
<< "on the " << v4
.GetWeekOfYear() << " week of the year," << "\n";
761 textCtrl
<< "on the " << v4
.GetWeekOfMonth() << " week of the month, " << "\n";
762 textCtrl
<< "(which is " << v4
.GetMonthName() << ")\n";
763 textCtrl
<< "the "<< v4
.GetMonth() << "th month in the year.\n";
764 textCtrl
<< "The year alone is " << v4
.GetYear() << "\n";
766 textCtrl
<< "---------- First and Last Stuff -----------\n";
768 textCtrl
<< "The first date of this month is " << v4
.GetMonthStart() << "\n";
769 textCtrl
<< "The last date of this month is " << v4
.GetMonthEnd() << "\n";
770 textCtrl
<< "The first date of this year is " << v4
.GetYearStart() << "\n";
771 textCtrl
<< "The last date of this year is " << v4
.GetYearEnd() << "\n";
774 void MyApp
::DoVariantDemo(wxCommandEvent
& WXUNUSED(event
) )
776 wxTextCtrl
& textCtrl
= * GetTextCtrl();
778 wxVariant var1
= "String value";
779 textCtrl
<< "var1 = " << var1
.MakeString() << "\n";
782 wxString str
= var1
.MakeString();
785 textCtrl
<< "var1 = " << var1
.GetReal() << "\n";
787 // Implicit conversion
791 textCtrl
<< "var1 = " << var1
.GetLong() << "\n";
793 // Implicit conversion
796 // suppress compile warnings about unused variables
802 wxStringList stringList
;
803 stringList
.Add(_T("one")); stringList
.Add(_T("two")); stringList
.Add(_T("three"));
805 textCtrl
<< "var1 = " << var1
.MakeString() << "\n";
808 var1
.Append(wxVariant(1.2345));
809 var1
.Append(wxVariant("hello"));
810 var1
.Append(wxVariant(54321L));
812 textCtrl
<< "var1 = " << var1
.MakeString() << "\n";
814 size_t n
= var1
.GetCount();
816 for (i
= (size_t) 0; i
< n
; i
++)
818 textCtrl
<< "var1[" << (int) i
<< "] (type " << var1
[i
].GetType() << ") = " << var1
[i
].MakeString() << "\n";
822 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
823 EVT_MENU(TYPES_QUIT
, MyFrame
::OnQuit
)
824 EVT_MENU(TYPES_ABOUT
, MyFrame
::OnAbout
)
827 // My frame constructor
828 MyFrame
::MyFrame(wxFrame
*parent
, const wxString
& title
,
829 const wxPoint
& pos
, const wxSize
& size
):
830 wxFrame(parent
, -1, title
, pos
, size
)
833 void MyFrame
::OnQuit(wxCommandEvent
& WXUNUSED(event
) )
838 void MyFrame
::OnAbout(wxCommandEvent
& WXUNUSED(event
) )
840 wxMessageDialog
dialog(this, "Tests various wxWindows types",
841 "About Types", wxYES_NO
|wxCANCEL
);