]> git.saurik.com Git - wxWidgets.git/blob - samples/controls/controls.cpp
17375966c0b8769dfdc878ad5e98d05c91e7f962
[wxWidgets.git] / samples / controls / controls.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: controls.cpp
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
5 // Modified by:
6 // RCS-ID: $Id$
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifdef __GNUG__
12 #pragma implementation "controls.h"
13 #endif
14
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
17
18 #ifdef __BORLANDC__
19 #pragma hdrstop
20 #endif
21
22 #ifndef WX_PRECOMP
23 #include "wx/wx.h"
24 #endif
25
26 #include "wx/spinbutt.h"
27 #include "wx/notebook.h"
28 #include "wx/imaglist.h"
29 #include "wx/spinbutt.h"
30
31 #if wxUSE_CLIPBOARD
32 #include "wx/dataobj.h"
33 #include "wx/clipbrd.h"
34 #endif
35
36 #if wxUSE_TOOLTIPS
37 #include "wx/tooltip.h"
38 #endif
39
40 #if defined(__WXGTK__) || defined(__WXMOTIF__)
41 #define USE_XPM
42 #endif
43
44 #ifdef USE_XPM
45 #include "mondrian.xpm"
46 #include "icons/choice.xpm"
47 #include "icons/combo.xpm"
48 #include "icons/list.xpm"
49 #include "icons/radio.xpm"
50 #include "icons/text.xpm"
51 #include "icons/gauge.xpm"
52 #endif
53
54 //----------------------------------------------------------------------
55 // class definitions
56 //----------------------------------------------------------------------
57
58 class MyApp: public wxApp
59 {
60 public:
61 bool OnInit();
62 };
63
64 // a text ctrl which allows to call different wxTextCtrl functions
65 // interactively by pressing function keys in it
66 class MyTextCtrl : public wxTextCtrl
67 {
68 public:
69 MyTextCtrl(wxWindow *parent, wxWindowID id, const wxString &value,
70 const wxPoint &pos, const wxSize &size, int style = 0)
71 : wxTextCtrl(parent, id, value, pos, size, style) { }
72
73 void OnKeyDown(wxKeyEvent& event);
74 void OnKeyUp(wxKeyEvent& event);
75 void OnChar(wxKeyEvent& event);
76
77 private:
78 static inline char GetChar(bool on, char c) { return on ? c : '-'; }
79 void LogEvent(const char *name, wxKeyEvent& event) const;
80
81 DECLARE_EVENT_TABLE()
82 };
83
84 class MyPanel: public wxPanel
85 {
86 public:
87 MyPanel(wxFrame *frame, int x, int y, int w, int h);
88 virtual ~MyPanel();
89
90 void OnSize( wxSizeEvent& event );
91 void OnListBox( wxCommandEvent &event );
92 void OnListBoxDoubleClick( wxCommandEvent &event );
93 void OnListBoxButtons( wxCommandEvent &event );
94 void OnChoice( wxCommandEvent &event );
95 void OnChoiceButtons( wxCommandEvent &event );
96 void OnCombo( wxCommandEvent &event );
97 void OnComboButtons( wxCommandEvent &event );
98 void OnRadio( wxCommandEvent &event );
99 void OnRadioButtons( wxCommandEvent &event );
100 void OnSetFont( wxCommandEvent &event );
101 void OnPageChanged( wxNotebookEvent &event );
102 void OnPageChanging( wxNotebookEvent &event );
103 void OnSliderUpdate( wxCommandEvent &event );
104 #ifndef __WIN16__
105 void OnSpinUpdate( wxSpinEvent &event );
106 #endif
107 void OnPasteFromClipboard( wxCommandEvent &event );
108 void OnCopyToClipboard( wxCommandEvent &event );
109 void OnMoveToEndOfText( wxCommandEvent &event );
110 void OnMoveToEndOfEntry( wxCommandEvent &event );
111
112 wxListBox *m_listbox;
113 wxChoice *m_choice;
114 wxComboBox *m_combo;
115 wxRadioBox *m_radio;
116 wxGauge *m_gauge;
117 wxSlider *m_slider;
118 wxButton *m_fontButton;
119 #ifndef __WIN16__
120 wxSpinButton *m_spinbutton;
121 #endif
122 wxTextCtrl *m_spintext;
123 MyTextCtrl *m_multitext;
124 MyTextCtrl *m_textentry;
125 wxCheckBox *m_checkbox;
126
127 wxTextCtrl *m_text;
128 wxNotebook *m_notebook;
129
130 private:
131 DECLARE_EVENT_TABLE()
132 };
133
134 class MyFrame: public wxFrame
135 {
136 public:
137 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
138
139 void OnQuit(wxCommandEvent& event);
140 void OnAbout(wxCommandEvent& event);
141 #if wxUSE_TOOLTIPS
142 void OnSetTooltipDelay(wxCommandEvent& event);
143 void OnToggleTooltips(wxCommandEvent& event);
144 #endif // wxUSE_TOOLTIPS
145 void OnIdle( wxIdleEvent& event );
146 void OnSize( wxSizeEvent& event );
147
148 private:
149 DECLARE_EVENT_TABLE()
150 };
151
152 //----------------------------------------------------------------------
153 // main()
154 //----------------------------------------------------------------------
155
156 IMPLEMENT_APP(MyApp)
157
158 //----------------------------------------------------------------------
159 // MyApp
160 //----------------------------------------------------------------------
161
162 enum
163 {
164 MINIMAL_QUIT = 100,
165 MINIMAL_TEXT,
166 MINIMAL_ABOUT,
167
168 // tooltip menu
169 MINIMAL_SET_TOOLTIP_DELAY = 200,
170 MINIMAL_ENABLE_TOOLTIPS
171 };
172
173 bool MyApp::OnInit()
174 {
175 // Create the main frame window
176 MyFrame *frame = new MyFrame((wxFrame *) NULL,
177 "Controls wxWindows App",
178 50, 50, 530, 420);
179
180 // Give it an icon
181 // The wxICON() macros loads an icon from a resource under Windows
182 // and uses an #included XPM image under GTK+ and Motif
183
184 frame->SetIcon( wxICON(mondrian) );
185
186 wxMenu *file_menu = new wxMenu;
187 file_menu->Append(MINIMAL_ABOUT, "&About\tF1");
188 file_menu->Append(MINIMAL_QUIT, "E&xit\tAlt-X", "Quit controls sample");
189
190 wxMenuBar *menu_bar = new wxMenuBar( wxMB_DOCKABLE );
191 menu_bar->Append(file_menu, "&File");
192
193 #if wxUSE_TOOLTIPS
194 wxMenu *tooltip_menu = new wxMenu;
195 tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
196 tooltip_menu->AppendSeparator();
197 tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips\tCrtl-T",
198 "enable/disable tooltips", TRUE);
199 tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
200 menu_bar->Append(tooltip_menu, "&Tooltips");
201 #endif // wxUSE_TOOLTIPS
202
203 frame->SetMenuBar(menu_bar);
204
205 frame->Show(TRUE);
206 frame->SetCursor(wxCursor(wxCURSOR_HAND));
207
208 SetTopWindow(frame);
209
210 return TRUE;
211 }
212
213 //----------------------------------------------------------------------
214 // MyTextCtrl
215 //----------------------------------------------------------------------
216
217 BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
218 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown)
219 EVT_KEY_UP(MyTextCtrl::OnKeyUp)
220 EVT_CHAR(MyTextCtrl::OnChar)
221 END_EVENT_TABLE()
222
223 void MyTextCtrl::LogEvent(const char *name, wxKeyEvent& event) const
224 {
225 wxString key;
226 long keycode = event.KeyCode();
227 if ( isprint((int)keycode) )
228 key.Printf("'%c'", (char)keycode);
229 else
230 {
231 switch ( keycode )
232 {
233 case WXK_BACK: key = "BACK"; break;
234 case WXK_TAB: key = "TAB"; break;
235 case WXK_RETURN: key = "RETURN"; break;
236 case WXK_ESCAPE: key = "ESCAPE"; break;
237 case WXK_SPACE: key = "SPACE"; break;
238 case WXK_DELETE: key = "DELETE"; break;
239 case WXK_START: key = "START"; break;
240 case WXK_LBUTTON: key = "LBUTTON"; break;
241 case WXK_RBUTTON: key = "RBUTTON"; break;
242 case WXK_CANCEL: key = "CANCEL"; break;
243 case WXK_MBUTTON: key = "MBUTTON"; break;
244 case WXK_CLEAR: key = "CLEAR"; break;
245 case WXK_SHIFT: key = "SHIFT"; break;
246 case WXK_CONTROL: key = "CONTROL"; break;
247 case WXK_MENU: key = "MENU"; break;
248 case WXK_PAUSE: key = "PAUSE"; break;
249 case WXK_CAPITAL: key = "CAPITAL"; break;
250 case WXK_PRIOR: key = "PRIOR"; break;
251 case WXK_NEXT: key = "NEXT"; break;
252 case WXK_END: key = "END"; break;
253 case WXK_HOME: key = "HOME"; break;
254 case WXK_LEFT: key = "LEFT"; break;
255 case WXK_UP: key = "UP"; break;
256 case WXK_RIGHT: key = "RIGHT"; break;
257 case WXK_DOWN: key = "DOWN"; break;
258 case WXK_SELECT: key = "SELECT"; break;
259 case WXK_PRINT: key = "PRINT"; break;
260 case WXK_EXECUTE: key = "EXECUTE"; break;
261 case WXK_SNAPSHOT: key = "SNAPSHOT"; break;
262 case WXK_INSERT: key = "INSERT"; break;
263 case WXK_HELP: key = "HELP"; break;
264 case WXK_NUMPAD0: key = "NUMPAD0"; break;
265 case WXK_NUMPAD1: key = "NUMPAD1"; break;
266 case WXK_NUMPAD2: key = "NUMPAD2"; break;
267 case WXK_NUMPAD3: key = "NUMPAD3"; break;
268 case WXK_NUMPAD4: key = "NUMPAD4"; break;
269 case WXK_NUMPAD5: key = "NUMPAD5"; break;
270 case WXK_NUMPAD6: key = "NUMPAD6"; break;
271 case WXK_NUMPAD7: key = "NUMPAD7"; break;
272 case WXK_NUMPAD8: key = "NUMPAD8"; break;
273 case WXK_NUMPAD9: key = "NUMPAD9"; break;
274 case WXK_MULTIPLY: key = "MULTIPLY"; break;
275 case WXK_ADD: key = "ADD"; break;
276 case WXK_SEPARATOR: key = "SEPARATOR"; break;
277 case WXK_SUBTRACT: key = "SUBTRACT"; break;
278 case WXK_DECIMAL: key = "DECIMAL"; break;
279 case WXK_DIVIDE: key = "DIVIDE"; break;
280 case WXK_F1: key = "F1"; break;
281 case WXK_F2: key = "F2"; break;
282 case WXK_F3: key = "F3"; break;
283 case WXK_F4: key = "F4"; break;
284 case WXK_F5: key = "F5"; break;
285 case WXK_F6: key = "F6"; break;
286 case WXK_F7: key = "F7"; break;
287 case WXK_F8: key = "F8"; break;
288 case WXK_F9: key = "F9"; break;
289 case WXK_F10: key = "F10"; break;
290 case WXK_F11: key = "F11"; break;
291 case WXK_F12: key = "F12"; break;
292 case WXK_F13: key = "F13"; break;
293 case WXK_F14: key = "F14"; break;
294 case WXK_F15: key = "F15"; break;
295 case WXK_F16: key = "F16"; break;
296 case WXK_F17: key = "F17"; break;
297 case WXK_F18: key = "F18"; break;
298 case WXK_F19: key = "F19"; break;
299 case WXK_F20: key = "F20"; break;
300 case WXK_F21: key = "F21"; break;
301 case WXK_F22: key = "F22"; break;
302 case WXK_F23: key = "F23"; break;
303 case WXK_F24: key = "F24"; break;
304 case WXK_NUMLOCK: key = "NUMLOCK"; break;
305 case WXK_SCROLL: key = "SCROLL"; break;
306 case WXK_PAGEUP: key = "PAGEUP"; break;
307 case WXK_PAGEDOWN: key = "PAGEDOWN"; break;
308 case WXK_NUMPAD_SPACE: key = "NUMPAD_SPACE"; break;
309 case WXK_NUMPAD_TAB: key = "NUMPAD_TAB"; break;
310 case WXK_NUMPAD_ENTER: key = "NUMPAD_ENTER"; break;
311 case WXK_NUMPAD_F1: key = "NUMPAD_F1"; break;
312 case WXK_NUMPAD_F2: key = "NUMPAD_F2"; break;
313 case WXK_NUMPAD_F3: key = "NUMPAD_F3"; break;
314 case WXK_NUMPAD_F4: key = "NUMPAD_F4"; break;
315 case WXK_NUMPAD_HOME: key = "NUMPAD_HOME"; break;
316 case WXK_NUMPAD_LEFT: key = "NUMPAD_LEFT"; break;
317 case WXK_NUMPAD_UP: key = "NUMPAD_UP"; break;
318 case WXK_NUMPAD_RIGHT: key = "NUMPAD_RIGHT"; break;
319 case WXK_NUMPAD_DOWN: key = "NUMPAD_DOWN"; break;
320 case WXK_NUMPAD_PRIOR: key = "NUMPAD_PRIOR"; break;
321 case WXK_NUMPAD_PAGEUP: key = "NUMPAD_PAGEUP"; break;
322 case WXK_NUMPAD_PAGEDOWN: key = "NUMPAD_PAGEDOWN"; break;
323 case WXK_NUMPAD_END: key = "NUMPAD_END"; break;
324 case WXK_NUMPAD_BEGIN: key = "NUMPAD_BEGIN"; break;
325 case WXK_NUMPAD_INSERT: key = "NUMPAD_INSERT"; break;
326 case WXK_NUMPAD_DELETE: key = "NUMPAD_DELETE"; break;
327 case WXK_NUMPAD_EQUAL: key = "NUMPAD_EQUAL"; break;
328 case WXK_NUMPAD_MULTIPLY: key = "NUMPAD_MULTIPLY"; break;
329 case WXK_NUMPAD_ADD: key = "NUMPAD_ADD"; break;
330 case WXK_NUMPAD_SEPARATOR: key = "NUMPAD_SEPARATOR"; break;
331 case WXK_NUMPAD_SUBTRACT: key = "NUMPAD_SUBTRACT"; break;
332 case WXK_NUMPAD_DECIMAL: key = "NUMPAD_DECIMAL"; break;
333
334 default:
335 key.Printf("unknown (%ld)", keycode);
336 }
337 }
338
339 wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
340 name,
341 key.c_str(),
342 GetChar(event.ControlDown(), 'C'),
343 GetChar(event.AltDown(), 'A'),
344 GetChar(event.ShiftDown(), 'S'),
345 GetChar(event.MetaDown(), 'M'));
346
347 }
348
349 void MyTextCtrl::OnChar(wxKeyEvent& event)
350 {
351 LogEvent("Char", event);
352
353 event.Skip();
354 }
355
356 void MyTextCtrl::OnKeyUp(wxKeyEvent& event)
357 {
358 LogEvent("Key up", event);
359
360 event.Skip();
361 }
362
363 void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
364 {
365 switch ( event.KeyCode() )
366 {
367 case WXK_F1:
368 // show current position and text length
369 {
370 long line, column, pos = GetInsertionPoint();
371 PositionToXY(pos, &column, &line);
372
373 wxLogMessage( _T("Current position: %ld\n"
374 "Current line, column: (%ld, %ld)\n"
375 "Number of lines: %ld\n"
376 "Current line length: %ld\n"
377 "Total text length: %ld"),
378 pos,
379 line, column,
380 GetNumberOfLines(),
381 GetLineLength(line),
382 GetLastPosition());
383 }
384 break;
385
386 case WXK_F2:
387 // go to the end
388 SetInsertionPointEnd();
389 break;
390
391 case WXK_F3:
392 // go to position 10
393 SetInsertionPoint(10);
394 break;
395 }
396
397 LogEvent("Key down", event);
398
399 event.Skip();
400 }
401
402 //----------------------------------------------------------------------
403 // MyPanel
404 //----------------------------------------------------------------------
405
406 const int ID_NOTEBOOK = 1000;
407
408 const int ID_LISTBOX = 130;
409 const int ID_LISTBOX_SEL_NUM = 131;
410 const int ID_LISTBOX_SEL_STR = 132;
411 const int ID_LISTBOX_CLEAR = 133;
412 const int ID_LISTBOX_APPEND = 134;
413 const int ID_LISTBOX_DELETE = 135;
414 const int ID_LISTBOX_FONT = 136;
415 const int ID_LISTBOX_ENABLE = 137;
416
417 const int ID_CHOICE = 120;
418 const int ID_CHOICE_SEL_NUM = 121;
419 const int ID_CHOICE_SEL_STR = 122;
420 const int ID_CHOICE_CLEAR = 123;
421 const int ID_CHOICE_APPEND = 124;
422 const int ID_CHOICE_DELETE = 125;
423 const int ID_CHOICE_FONT = 126;
424 const int ID_CHOICE_ENABLE = 127;
425
426 const int ID_COMBO = 140;
427 const int ID_COMBO_SEL_NUM = 141;
428 const int ID_COMBO_SEL_STR = 142;
429 const int ID_COMBO_CLEAR = 143;
430 const int ID_COMBO_APPEND = 144;
431 const int ID_COMBO_DELETE = 145;
432 const int ID_COMBO_FONT = 146;
433 const int ID_COMBO_ENABLE = 147;
434
435 const int ID_TEXT = 150;
436 const int ID_PASTE_TEXT = 151;
437 const int ID_COPY_TEXT = 152;
438 const int ID_MOVE_END_ENTRY = 153;
439 const int ID_MOVE_END_ZONE = 154;
440
441 const int ID_RADIOBOX = 160;
442 const int ID_RADIOBOX_SEL_NUM = 161;
443 const int ID_RADIOBOX_SEL_STR = 162;
444 const int ID_RADIOBOX_FONT = 163;
445 const int ID_RADIOBOX_ENABLE = 164;
446
447 const int ID_RADIOBUTTON_1 = 166;
448 const int ID_RADIOBUTTON_2 = 167;
449
450 const int ID_SET_FONT = 170;
451
452 const int ID_GAUGE = 180;
453 const int ID_SLIDER = 181;
454
455 const int ID_SPIN = 182;
456
457 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
458 EVT_SIZE ( MyPanel::OnSize)
459 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
460 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
461 EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
462 EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
463 EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
464 EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
465 EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
466 EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
467 EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
468 EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
469 EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
470 EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
471 EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
472 EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
473 EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
474 EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
475 EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
476 EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
477 EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
478 EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
479 EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
480 EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
481 EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
482 EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
483 EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
484 EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
485 EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
486 EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
487 EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
488 EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
489 EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
490 EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
491 EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
492 EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
493 #ifndef __WIN16__
494 EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
495 #endif
496 EVT_BUTTON (ID_PASTE_TEXT, MyPanel::OnPasteFromClipboard)
497 EVT_BUTTON (ID_COPY_TEXT, MyPanel::OnCopyToClipboard)
498 EVT_BUTTON (ID_MOVE_END_ZONE, MyPanel::OnMoveToEndOfText)
499 EVT_BUTTON (ID_MOVE_END_ENTRY, MyPanel::OnMoveToEndOfEntry)
500 END_EVENT_TABLE()
501
502 MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
503 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
504 m_text(NULL), m_notebook(NULL)
505 {
506 // SetBackgroundColour("cadet blue");
507
508 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
509 // m_text->SetBackgroundColour("wheat");
510
511 delete wxLog::SetActiveTarget(new wxLogStderr);
512
513 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
514
515 wxString choices[] =
516 {
517 "This",
518 "is one of my",
519 "really",
520 "wonderful",
521 "examples."
522 };
523
524 #ifdef USE_XPM
525 // image ids
526 enum
527 {
528 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
529 };
530
531 // fill the image list
532 wxImageList *imagelist = new wxImageList(32, 32);
533
534 imagelist-> Add( wxBitmap( list_xpm ));
535 imagelist-> Add( wxBitmap( choice_xpm ));
536 imagelist-> Add( wxBitmap( combo_xpm ));
537 imagelist-> Add( wxBitmap( text_xpm ));
538 imagelist-> Add( wxBitmap( radio_xpm ));
539 imagelist-> Add( wxBitmap( gauge_xpm ));
540 m_notebook->SetImageList(imagelist);
541 #elif defined(__WXMSW__)
542 // load images from resources
543 enum
544 {
545 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
546 };
547 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
548
549 static const char *s_iconNames[Image_Max] =
550 {
551 "list", "choice", "combo", "text", "radio", "gauge"
552 };
553
554 for ( size_t n = 0; n < Image_Max; n++ )
555 {
556 wxBitmap bmp(s_iconNames[n]);
557 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
558 {
559 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
560 s_iconNames[n], n);
561 }
562 }
563
564 m_notebook->SetImageList(imagelist);
565 #else
566
567 // No images for now
568 #define Image_List -1
569 #define Image_Choice -1
570 #define Image_Combo -1
571 #define Image_Text -1
572 #define Image_Radio -1
573 #define Image_Gauge -1
574 #define Image_Max -1
575
576 #endif
577
578 wxButton *button = (wxButton*) NULL; /* who did this ? */
579 wxPanel *panel = (wxPanel*) NULL;
580
581 panel = new wxPanel(m_notebook);
582 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 5, choices, wxLB_ALWAYS_SB );
583 m_listbox->SetCursor(*wxCROSS_CURSOR);
584 #if wxUSE_TOOLTIPS
585 m_listbox->SetToolTip( "This is a list box" );
586 #endif // wxUSE_TOOLTIPS
587
588 (void)new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
589 (void)new wxButton( panel, ID_LISTBOX_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
590 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
591 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
592 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
593 button = new wxButton( panel, ID_LISTBOX_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
594 #if wxUSE_TOOLTIPS
595 button->SetToolTip( "Press here to set italic font" );
596 #endif // wxUSE_TOOLTIPS
597
598 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,130), wxSize(-1, -1), wxALIGN_RIGHT );
599 m_checkbox->SetValue(FALSE);
600 #if wxUSE_TOOLTIPS
601 m_checkbox->SetToolTip( "Click here to disable the listbox" );
602 #endif // wxUSE_TOOLTIPS
603 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
604
605 panel = new wxPanel(m_notebook);
606 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
607 m_choice->SetBackgroundColour( "red" );
608 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
609 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
610 (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
611 (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
612 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
613 (void)new wxButton( panel, ID_CHOICE_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
614 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
615 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
616
617 panel = new wxPanel(m_notebook);
618 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices, wxCB_READONLY );
619 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
620 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
621 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
622 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
623 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
624 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
625 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
626 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
627
628 panel = new wxPanel(m_notebook);
629 m_textentry = new MyTextCtrl( panel, -1, "Some text.", wxPoint(10,10), wxSize(320,28), //0);
630 wxTE_PROCESS_ENTER);
631 (*m_textentry) << " Appended.";
632 m_textentry->SetInsertionPoint(0);
633 m_textentry->WriteText( "Prepended. " );
634
635 m_multitext = new MyTextCtrl( panel, ID_TEXT, "Some text.", wxPoint(10,50), wxSize(320,70), wxTE_MULTILINE );
636 (*m_multitext) << " Appended.";
637 m_multitext->SetInsertionPoint(0);
638 m_multitext->WriteText( "Prepended. " );
639 m_multitext->AppendText( "\nPress function keys for test different tests." );
640
641 (*m_multitext) << "\nDoes it have cross cursor?";
642 m_multitext->SetCursor(*wxCROSS_CURSOR);
643
644 new MyTextCtrl( panel, -1, "This one is with wxTE_PROCESS_TAB style.", wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE | wxTE_PROCESS_TAB);
645 #if wxUSE_TOOLTIPS
646 m_multitext->AppendText( "\nThis ctrl has a tooltip. " );
647 m_multitext->SetToolTip("Press F1 here.");
648 #endif // wxUSE_TOOLTIPS
649
650 (void)new wxStaticBox( panel, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
651 (void)new wxButton( panel, ID_MOVE_END_ENTRY, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
652 (void)new wxButton( panel, ID_MOVE_END_ZONE, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
653 (void)new wxStaticBox( panel, -1, "wx&Clipboard", wxPoint(345,100), wxSize(160,100) );
654 (void)new wxButton( panel, ID_COPY_TEXT, "C&opy line 1", wxPoint(370,120), wxSize(110,30) );
655 (void)new wxButton( panel, ID_PASTE_TEXT, "&Paste text", wxPoint(370,160), wxSize(110,30) );
656 m_notebook->AddPage( panel, "wxTextCtrl" , FALSE, Image_Text );
657
658 wxString choices2[] =
659 {
660 "First", "Second",
661 /* "Third",
662 "Fourth", "Fifth", "Sixth",
663 "Seventh", "Eighth", "Nineth", "Tenth" */
664 };
665
666 panel = new wxPanel(m_notebook);
667 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
668 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
669 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
670 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
671 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
672 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
673 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
674 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
675 rb->SetValue( FALSE );
676 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
677 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
678
679 panel = new wxPanel(m_notebook);
680 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
681 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
682 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS );
683 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
684 #ifdef __WXMOTIF__
685 // No wrapping text in wxStaticText yet :-(
686 (void)new wxStaticText( panel, -1,
687 "Drag the slider!",
688 wxPoint(208,30),
689 wxSize(210, -1)
690 );
691 #else
692 (void)new wxStaticText( panel, -1,
693 "In order see the gauge (aka progress bar)\n"
694 "control do something you have to drag the\n"
695 "handle of the slider to the right.\n"
696 "\n"
697 "This is also supposed to demonstrate how\n"
698 "to use static controls.\n",
699 wxPoint(208,25),
700 wxSize(250, 110)
701 );
702 #endif
703 m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) );
704 #ifndef __WIN16__
705 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
706 m_spinbutton->SetRange(-10,30);
707 m_spinbutton->SetValue(-5);
708 #endif
709 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
710 }
711
712 void MyPanel::OnPasteFromClipboard( wxCommandEvent &WXUNUSED(event) )
713 {
714 // We test for wxUSE_DRAG_AND_DROP also, because data objects
715 // may not be implemented for compilers that can't cope with the OLE
716 // parts in wxUSE_DRAG_AND_DROP.
717
718 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
719 if (!wxTheClipboard->Open())
720 {
721 *m_text << "Error opening the clipboard.\n";
722
723 return;
724 }
725 else
726 {
727 *m_text << "Successfully opened the clipboard.\n";
728 }
729
730 wxTextDataObject data;
731
732 if (wxTheClipboard->IsSupported( data.GetFormat() ))
733 {
734 *m_text << "Clipboard supports requested format.\n";
735
736 if (wxTheClipboard->GetData( &data ))
737 {
738 *m_text << "Successfully retrieved data from the clipboard.\n";
739 *m_multitext << data.GetText() << "\n";
740 }
741 else
742 {
743 *m_text << "Error getting data from the clipboard.\n";
744 }
745 }
746 else
747 {
748 *m_text << "Clipboard doesn't support requested format.\n";
749 }
750
751 wxTheClipboard->Close();
752
753 *m_text << "Closed the clipboard.\n";
754 #else
755 wxLogError("Your version of wxWindows is compiled without clipboard support.");
756 #endif
757 }
758
759 void MyPanel::OnCopyToClipboard( wxCommandEvent &WXUNUSED(event) )
760 {
761 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
762 wxString text( m_multitext->GetLineText(0) );
763
764 if (text.IsEmpty())
765 {
766 *m_text << "No text to copy.\n";
767
768 return;
769 }
770
771 if (!wxTheClipboard->Open())
772 {
773 *m_text << "Error opening the clipboard.\n";
774
775 return;
776 }
777 else
778 {
779 *m_text << "Successfully opened the clipboard.\n";
780 }
781
782 wxTextDataObject *data = new wxTextDataObject( text );
783
784 if (!wxTheClipboard->SetData( data ))
785 {
786 *m_text << "Error while copying to the clipboard.\n";
787 }
788 else
789 {
790 *m_text << "Successfully copied data to the clipboard.\n";
791 }
792
793 wxTheClipboard->Close();
794
795 *m_text << "Closed the clipboard.\n";
796 #else
797 wxLogError("Your version of wxWindows is compiled without clipboard support.");
798 #endif
799 }
800
801 void MyPanel::OnMoveToEndOfText( wxCommandEvent &event )
802 {
803 m_multitext->SetInsertionPointEnd();
804 m_multitext->SetFocus();
805 }
806
807 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent &event )
808 {
809 m_textentry->SetInsertionPointEnd();
810 m_textentry->SetFocus();
811 }
812
813 void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
814 {
815 int x = 0;
816 int y = 0;
817 GetClientSize( &x, &y );
818
819 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
820 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
821 }
822
823 void MyPanel::OnPageChanging( wxNotebookEvent &event )
824 {
825 int selNew = event.GetSelection(),
826 selOld = event.GetOldSelection();
827 if ( selOld == 2 && selNew == 4 )
828 {
829 wxMessageBox("This demonstrates how a program may prevent the "
830 "page change from taking place - the current page will "
831 "stay the third one", "Conntrol sample",
832 wxICON_INFORMATION | wxOK);
833
834 event.Veto();
835 }
836 else
837 {
838 *m_text << "Notebook selection is being changed from "
839 << selOld << " to " << selNew << "\n";
840 }
841 }
842
843 void MyPanel::OnPageChanged( wxNotebookEvent &event )
844 {
845 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
846 }
847
848 void MyPanel::OnListBox( wxCommandEvent &event )
849 {
850 m_text->AppendText( "ListBox event selection string is: " );
851 m_text->AppendText( event.GetString() );
852 m_text->AppendText( "\n" );
853 m_text->AppendText( "ListBox control selection string is: " );
854 m_text->AppendText( m_listbox->GetStringSelection() );
855 m_text->AppendText( "\n" );
856 }
857
858 void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
859 {
860 m_text->AppendText( "ListBox double click string is: " );
861 m_text->AppendText( event.GetString() );
862 m_text->AppendText( "\n" );
863 }
864
865 void MyPanel::OnListBoxButtons( wxCommandEvent &event )
866 {
867 switch (event.GetId())
868 {
869 case ID_LISTBOX_ENABLE:
870 {
871 m_text->AppendText("Checkbox clicked.\n");
872 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
873 #if wxUSE_TOOLTIPS
874 if (event.GetInt())
875 cb->SetToolTip( "Click to enable listbox" );
876 else
877 cb->SetToolTip( "Click to disable listbox" );
878 #endif // wxUSE_TOOLTIPS
879 m_listbox->Enable( event.GetInt() == 0 );
880 break;
881 }
882 case ID_LISTBOX_SEL_NUM:
883 {
884 m_listbox->SetSelection( 2 );
885 break;
886 }
887 case ID_LISTBOX_SEL_STR:
888 {
889 m_listbox->SetStringSelection( "This" );
890 break;
891 }
892 case ID_LISTBOX_CLEAR:
893 {
894 m_listbox->Clear();
895 break;
896 }
897 case ID_LISTBOX_APPEND:
898 {
899 m_listbox->Append( "Hi!" );
900 break;
901 }
902 case ID_LISTBOX_DELETE:
903 {
904 int idx = m_listbox->GetSelection();
905 m_listbox->Delete( idx );
906 break;
907 }
908 case ID_LISTBOX_FONT:
909 {
910 m_listbox->SetFont( *wxITALIC_FONT );
911 m_checkbox->SetFont( *wxITALIC_FONT );
912 break;
913 }
914 }
915 }
916
917 void MyPanel::OnChoice( wxCommandEvent &event )
918 {
919 m_text->AppendText( "Choice event selection string is: " );
920 m_text->AppendText( event.GetString() );
921 m_text->AppendText( "\n" );
922 m_text->AppendText( "Choice control selection string is: " );
923 m_text->AppendText( m_choice->GetStringSelection() );
924 m_text->AppendText( "\n" );
925 }
926
927 void MyPanel::OnChoiceButtons( wxCommandEvent &event )
928 {
929 switch (event.GetId())
930 {
931 case ID_CHOICE_ENABLE:
932 {
933 m_choice->Enable( event.GetInt() == 0 );
934 break;
935 }
936 case ID_CHOICE_SEL_NUM:
937 {
938 m_choice->SetSelection( 2 );
939 break;
940 }
941 case ID_CHOICE_SEL_STR:
942 {
943 m_choice->SetStringSelection( "This" );
944 break;
945 }
946 case ID_CHOICE_CLEAR:
947 {
948 m_choice->Clear();
949 break;
950 }
951 case ID_CHOICE_APPEND:
952 {
953 m_choice->Append( "Hi!" );
954 break;
955 }
956 case ID_CHOICE_DELETE:
957 {
958 int idx = m_choice->GetSelection();
959 m_choice->Delete( idx );
960 break;
961 }
962 case ID_CHOICE_FONT:
963 {
964 m_choice->SetFont( *wxITALIC_FONT );
965 break;
966 }
967 }
968 }
969
970 void MyPanel::OnCombo( wxCommandEvent &event )
971 {
972 m_text->AppendText( "ComboBox event selection string is: " );
973 m_text->AppendText( event.GetString() );
974 m_text->AppendText( "\n" );
975 m_text->AppendText( "ComboBox control selection string is: " );
976 m_text->AppendText( m_combo->GetStringSelection() );
977 m_text->AppendText( "\n" );
978 }
979
980 void MyPanel::OnComboButtons( wxCommandEvent &event )
981 {
982 switch (event.GetId())
983 {
984 case ID_COMBO_ENABLE:
985 {
986 m_combo->Enable( event.GetInt() == 0 );
987 break;
988 }
989 case ID_COMBO_SEL_NUM:
990 {
991 m_combo->SetSelection( 2 );
992 break;
993 }
994 case ID_COMBO_SEL_STR:
995 {
996 m_combo->SetStringSelection( "This" );
997 break;
998 }
999 case ID_COMBO_CLEAR:
1000 {
1001 m_combo->Clear();
1002 break;
1003 }
1004 case ID_COMBO_APPEND:
1005 {
1006 m_combo->Append( "Hi!" );
1007 break;
1008 }
1009 case ID_COMBO_DELETE:
1010 {
1011 int idx = m_combo->GetSelection();
1012 m_combo->Delete( idx );
1013 break;
1014 }
1015 case ID_COMBO_FONT:
1016 {
1017 m_combo->SetFont( *wxITALIC_FONT );
1018 break;
1019 }
1020 }
1021 }
1022
1023 void MyPanel::OnRadio( wxCommandEvent &event )
1024 {
1025 m_text->AppendText( "RadioBox selection string is: " );
1026 m_text->AppendText( event.GetString() );
1027 m_text->AppendText( "\n" );
1028 }
1029
1030 void MyPanel::OnRadioButtons( wxCommandEvent &event )
1031 {
1032 switch (event.GetId())
1033 {
1034 case ID_RADIOBOX_ENABLE:
1035 {
1036 m_radio->Enable( event.GetInt() == 0 );
1037 break;
1038 }
1039 case ID_RADIOBOX_SEL_NUM:
1040 {
1041 m_radio->SetSelection( 2 );
1042 break;
1043 }
1044 case ID_RADIOBOX_SEL_STR:
1045 {
1046 m_radio->SetStringSelection( "This" );
1047 break;
1048 }
1049 case ID_RADIOBOX_FONT:
1050 {
1051 m_radio->SetFont( *wxITALIC_FONT );
1052 break;
1053 }
1054 }
1055 }
1056
1057 void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
1058 {
1059 m_fontButton->SetFont( *wxITALIC_FONT );
1060 m_text->SetFont( *wxITALIC_FONT );
1061 }
1062
1063 void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
1064 {
1065 m_gauge->SetValue( m_slider->GetValue() );
1066 }
1067
1068 #ifndef __WIN16__
1069 void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1070 {
1071 wxString value;
1072 value.Printf( _T("%d"), event.GetPosition() );
1073 m_spintext->SetValue( value );
1074
1075 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1076 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1077 m_spinbutton->GetValue());
1078
1079 m_text->AppendText(value);
1080 }
1081 #endif
1082
1083 MyPanel::~MyPanel()
1084 {
1085 delete m_notebook->GetImageList();
1086 }
1087
1088 //----------------------------------------------------------------------
1089 // MyFrame
1090 //----------------------------------------------------------------------
1091
1092 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
1093 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
1094 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
1095 #if wxUSE_TOOLTIPS
1096 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1097 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
1098 #endif // wxUSE_TOOLTIPS
1099 EVT_SIZE(MyFrame::OnSize)
1100 EVT_IDLE(MyFrame::OnIdle)
1101 END_EVENT_TABLE()
1102
1103 MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
1104 : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
1105 {
1106 CreateStatusBar(2);
1107
1108 (void)new MyPanel( this, 10, 10, 300, 100 );
1109 }
1110
1111 void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1112 {
1113 Close(TRUE);
1114 }
1115
1116 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1117 {
1118 wxBeginBusyCursor();
1119
1120 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
1121 dialog.ShowModal();
1122
1123 wxEndBusyCursor();
1124 }
1125
1126 #if wxUSE_TOOLTIPS
1127 void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
1128 {
1129 static long s_delay = 5000;
1130
1131 wxString delay;
1132 delay.Printf( _T("%ld"), s_delay);
1133
1134 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
1135 "Set tooltip delay",
1136 delay,
1137 this);
1138 if ( !delay )
1139 return; // cancelled
1140
1141 wxSscanf(delay, _T("%ld"), &s_delay);
1142
1143 wxToolTip::SetDelay(s_delay);
1144
1145 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
1146 }
1147
1148 void MyFrame::OnToggleTooltips(wxCommandEvent& event)
1149 {
1150 static bool s_enabled = TRUE;
1151
1152 s_enabled = !s_enabled;
1153
1154 wxToolTip::Enable(s_enabled);
1155
1156 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
1157 }
1158 #endif // tooltips
1159
1160 void MyFrame::OnSize( wxSizeEvent& event )
1161 {
1162 wxString msg;
1163 msg.Printf( _("%dx%d"), event.GetSize().x, event.GetSize().y);
1164 SetStatusText(msg, 1);
1165
1166 event.Skip();
1167 }
1168
1169 void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
1170 {
1171 // track the window which has the focus in the status bar
1172 static wxWindow *s_windowFocus = (wxWindow *)NULL;
1173 wxWindow *focus = wxWindow::FindFocus();
1174 if ( focus && (focus != s_windowFocus) )
1175 {
1176 s_windowFocus = focus;
1177
1178 wxString msg;
1179 msg.Printf(
1180 #ifdef __WXMSW__
1181 _T("Focus: wxWindow = %p, HWND = %08x"),
1182 #else
1183 _T("Focus: wxWindow = %p"),
1184 #endif
1185 s_windowFocus
1186 #ifdef __WXMSW__
1187 , s_windowFocus->GetHWND()
1188 #endif
1189 );
1190
1191 SetStatusText(msg);
1192 }
1193 }