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