]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
Small cursor improvements
[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
1c005ff7
RR
54//----------------------------------------------------------------------
55// class definitions
56//----------------------------------------------------------------------
57
58class MyApp: public wxApp
655822f3 59{
b8653fbf
VZ
60public:
61 bool OnInit();
1c005ff7
RR
62};
63
6085b116
VZ
64// a text ctrl which allows to call different wxTextCtrl functions
65// interactively by pressing function keys in it
66class MyTextCtrl : public wxTextCtrl
67{
68public:
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
5fb9fcfc 73 void OnKeyDown(wxKeyEvent& event);
0a772322 74 void OnKeyUp(wxKeyEvent& event);
14531b30 75 void OnChar(wxKeyEvent& event);
6085b116
VZ
76
77private:
0a772322
VZ
78 static inline char GetChar(bool on, char c) { return on ? c : '-'; }
79 void LogEvent(const char *name, wxKeyEvent& event) const;
80
6085b116
VZ
81 DECLARE_EVENT_TABLE()
82};
83
1c005ff7
RR
84class MyPanel: public wxPanel
85{
b8653fbf 86public:
1c005ff7 87 MyPanel(wxFrame *frame, int x, int y, int w, int h);
2cb21a45 88 virtual ~MyPanel();
16f6dfd8 89
1c005ff7
RR
90 void OnSize( wxSizeEvent& event );
91 void OnListBox( wxCommandEvent &event );
5b077d48 92 void OnListBoxDoubleClick( wxCommandEvent &event );
1c005ff7 93 void OnListBoxButtons( wxCommandEvent &event );
47908e25
RR
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 );
868a2826 100 void OnSetFont( wxCommandEvent &event );
cb43b372 101 void OnPageChanged( wxNotebookEvent &event );
4d0f3cd6 102 void OnPageChanging( wxNotebookEvent &event );
7bce6aec 103 void OnSliderUpdate( wxCommandEvent &event );
2a47d3c1 104#ifndef __WIN16__
e380f72b 105 void OnSpinUpdate( wxSpinEvent &event );
2a47d3c1 106#endif
b527aac5
RR
107 void OnPasteFromClipboard( wxCommandEvent &event );
108 void OnCopyToClipboard( wxCommandEvent &event );
d59051dd
VZ
109 void OnMoveToEndOfText( wxCommandEvent &event );
110 void OnMoveToEndOfEntry( wxCommandEvent &event );
16f6dfd8 111
e380f72b
RR
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;
2a47d3c1 119#ifndef __WIN16__
e380f72b 120 wxSpinButton *m_spinbutton;
2a47d3c1 121#endif
e380f72b 122 wxTextCtrl *m_spintext;
6085b116
VZ
123 MyTextCtrl *m_multitext;
124 MyTextCtrl *m_textentry;
ae0bdb01 125 wxCheckBox *m_checkbox;
16f6dfd8 126
e380f72b 127 wxTextCtrl *m_text;
655822f3
VZ
128 wxNotebook *m_notebook;
129
b8653fbf
VZ
130private:
131 DECLARE_EVENT_TABLE()
1c005ff7
RR
132};
133
134class MyFrame: public wxFrame
135{
b8653fbf 136public:
1c005ff7 137 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
655822f3 138
1c005ff7
RR
139 void OnQuit(wxCommandEvent& event);
140 void OnAbout(wxCommandEvent& event);
16f6dfd8
VZ
141#if wxUSE_TOOLTIPS
142 void OnSetTooltipDelay(wxCommandEvent& event);
143 void OnToggleTooltips(wxCommandEvent& event);
144#endif // wxUSE_TOOLTIPS
9f3362c4 145 void OnIdle( wxIdleEvent& event );
5fb9fcfc 146 void OnSize( wxSizeEvent& event );
655822f3 147
b8653fbf
VZ
148private:
149 DECLARE_EVENT_TABLE()
1c005ff7
RR
150};
151
152//----------------------------------------------------------------------
153// main()
154//----------------------------------------------------------------------
155
d59051dd 156IMPLEMENT_APP(MyApp)
1c005ff7
RR
157
158//----------------------------------------------------------------------
159// MyApp
160//----------------------------------------------------------------------
161
16f6dfd8
VZ
162enum
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};
1c005ff7 172
b8653fbf 173bool MyApp::OnInit()
1c005ff7 174{
ec9f7884
VZ
175 // Create the main frame window
176 MyFrame *frame = new MyFrame((wxFrame *) NULL,
177 "Controls wxWindows App",
178 50, 50, 530, 420);
655822f3 179
ec9f7884
VZ
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
655822f3 183
ec9f7884 184 frame->SetIcon( wxICON(mondrian) );
1c005ff7 185
ec9f7884 186 wxMenu *file_menu = new wxMenu;
6bc8a1c8
RR
187 file_menu->Append(MINIMAL_ABOUT, "&About\tF1");
188 file_menu->Append(MINIMAL_QUIT, "E&xit\tAlt-X", "Quit controls sample");
16f6dfd8 189
ba0730de 190 wxMenuBar *menu_bar = new wxMenuBar( wxMB_DOCKABLE );
ec9f7884 191 menu_bar->Append(file_menu, "&File");
16f6dfd8
VZ
192
193#if wxUSE_TOOLTIPS
ec9f7884 194 wxMenu *tooltip_menu = new wxMenu;
6bc8a1c8 195 tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
ec9f7884 196 tooltip_menu->AppendSeparator();
6bc8a1c8 197 tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips\tCrtl-T",
ec9f7884
VZ
198 "enable/disable tooltips", TRUE);
199 tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
200 menu_bar->Append(tooltip_menu, "&Tooltips");
16f6dfd8
VZ
201#endif // wxUSE_TOOLTIPS
202
ec9f7884 203 frame->SetMenuBar(menu_bar);
1c005ff7 204
ec9f7884 205 frame->Show(TRUE);
9018abe3 206 frame->SetCursor(wxCursor(wxCURSOR_HAND));
655822f3 207
ec9f7884 208 SetTopWindow(frame);
1c005ff7 209
ec9f7884 210 return TRUE;
1c005ff7
RR
211}
212
6085b116
VZ
213//----------------------------------------------------------------------
214// MyTextCtrl
215//----------------------------------------------------------------------
216
217BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
14531b30 218 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown)
0a772322 219 EVT_KEY_UP(MyTextCtrl::OnKeyUp)
14531b30 220 EVT_CHAR(MyTextCtrl::OnChar)
6085b116
VZ
221END_EVENT_TABLE()
222
0a772322 223void MyTextCtrl::LogEvent(const char *name, wxKeyEvent& event) const
14531b30 224{
0a772322
VZ
225 wxString key;
226 long keycode = event.KeyCode();
fac2987b 227 if ( isprint((int)keycode) )
0a772322 228 key.Printf("'%c'", (char)keycode);
14531b30
VZ
229 else
230 {
0a772322
VZ
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;
0a772322
VZ
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 }
14531b30 337 }
0a772322
VZ
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
349void MyTextCtrl::OnChar(wxKeyEvent& event)
350{
351 LogEvent("Char", event);
352
353 event.Skip();
354}
355
356void MyTextCtrl::OnKeyUp(wxKeyEvent& event)
357{
358 LogEvent("Key up", event);
14531b30
VZ
359
360 event.Skip();
361}
362
5fb9fcfc 363void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
6085b116
VZ
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
f70d5829 373 wxLogMessage( _T("Current position: %ld\n"
ec9f7884
VZ
374 "Current line, column: (%ld, %ld)\n"
375 "Number of lines: %ld\n"
376 "Current line length: %ld\n"
f70d5829 377 "Total text length: %ld"),
ec9f7884
VZ
378 pos,
379 line, column,
380 GetNumberOfLines(),
381 GetLineLength(line),
382 GetLastPosition());
6085b116
VZ
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;
6085b116 395 }
0a772322
VZ
396
397 LogEvent("Key down", event);
398
399 event.Skip();
6085b116
VZ
400}
401
1c005ff7
RR
402//----------------------------------------------------------------------
403// MyPanel
404//----------------------------------------------------------------------
405
4fabb575 406const int ID_NOTEBOOK = 1000;
1c005ff7 407
4fabb575
JS
408const int ID_LISTBOX = 130;
409const int ID_LISTBOX_SEL_NUM = 131;
410const int ID_LISTBOX_SEL_STR = 132;
411const int ID_LISTBOX_CLEAR = 133;
412const int ID_LISTBOX_APPEND = 134;
413const int ID_LISTBOX_DELETE = 135;
414const int ID_LISTBOX_FONT = 136;
415const int ID_LISTBOX_ENABLE = 137;
1c005ff7 416
4fabb575
JS
417const int ID_CHOICE = 120;
418const int ID_CHOICE_SEL_NUM = 121;
419const int ID_CHOICE_SEL_STR = 122;
420const int ID_CHOICE_CLEAR = 123;
421const int ID_CHOICE_APPEND = 124;
422const int ID_CHOICE_DELETE = 125;
423const int ID_CHOICE_FONT = 126;
424const int ID_CHOICE_ENABLE = 127;
53010e52 425
4fabb575
JS
426const int ID_COMBO = 140;
427const int ID_COMBO_SEL_NUM = 141;
428const int ID_COMBO_SEL_STR = 142;
429const int ID_COMBO_CLEAR = 143;
430const int ID_COMBO_APPEND = 144;
431const int ID_COMBO_DELETE = 145;
432const int ID_COMBO_FONT = 146;
433const int ID_COMBO_ENABLE = 147;
53010e52 434
4fabb575 435const int ID_TEXT = 150;
b527aac5
RR
436const int ID_PASTE_TEXT = 151;
437const int ID_COPY_TEXT = 152;
d59051dd
VZ
438const int ID_MOVE_END_ENTRY = 153;
439const int ID_MOVE_END_ZONE = 154;
219f895a 440
4fabb575
JS
441const int ID_RADIOBOX = 160;
442const int ID_RADIOBOX_SEL_NUM = 161;
443const int ID_RADIOBOX_SEL_STR = 162;
444const int ID_RADIOBOX_FONT = 163;
445const int ID_RADIOBOX_ENABLE = 164;
868a2826 446
f5d29b39
RR
447const int ID_RADIOBUTTON_1 = 166;
448const int ID_RADIOBUTTON_2 = 167;
449
4fabb575 450const int ID_SET_FONT = 170;
47908e25 451
4fabb575
JS
452const int ID_GAUGE = 180;
453const int ID_SLIDER = 181;
58614078 454
4fabb575 455const int ID_SPIN = 182;
e380f72b 456
1c005ff7 457BEGIN_EVENT_TABLE(MyPanel, wxPanel)
ec9f7884 458EVT_SIZE ( MyPanel::OnSize)
4d0f3cd6 459EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyPanel::OnPageChanging)
ec9f7884
VZ
460EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
461EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
462EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
463EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
464EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
465EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
466EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
467EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
468EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
469EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
470EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
471EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
472EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
473EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
474EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
475EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
476EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
477EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
478EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
479EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
480EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
481EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
482EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
483EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
484EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
485EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
486EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
487EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
488EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
489EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
490EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
491EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
492EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
2a47d3c1 493#ifndef __WIN16__
ec9f7884 494EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
2a47d3c1 495#endif
ec9f7884
VZ
496EVT_BUTTON (ID_PASTE_TEXT, MyPanel::OnPasteFromClipboard)
497EVT_BUTTON (ID_COPY_TEXT, MyPanel::OnCopyToClipboard)
498EVT_BUTTON (ID_MOVE_END_ZONE, MyPanel::OnMoveToEndOfText)
499EVT_BUTTON (ID_MOVE_END_ENTRY, MyPanel::OnMoveToEndOfEntry)
1c005ff7
RR
500END_EVENT_TABLE()
501
5fb9fcfc 502MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
0a772322
VZ
503 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
504 m_text(NULL), m_notebook(NULL)
1c005ff7 505{
ec9f7884 506 // SetBackgroundColour("cadet blue");
a81258be 507
ec9f7884
VZ
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");
655822f3 510
4d0f3cd6 511 delete wxLog::SetActiveTarget(new wxLogStderr);
0a772322 512
ec9f7884 513 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
655822f3 514
ec9f7884
VZ
515 wxString choices[] =
516 {
517 "This",
518 "is one of my",
519 "really",
520 "wonderful",
521 "examples."
522 };
655822f3 523
4fabb575 524#ifdef USE_XPM
ec9f7884
VZ
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);
73c700fd 541#elif defined(__WXMSW__)
ec9f7884
VZ
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);
4fabb575
JS
565#else
566
ec9f7884 567 // No images for now
4fabb575
JS
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
fc54776e 576#endif
2cb21a45 577
ec9f7884
VZ
578 wxButton *button = (wxButton*) NULL; /* who did this ? */
579 wxPanel *panel = (wxPanel*) NULL;
9838df2c 580
ec9f7884 581 panel = new wxPanel(m_notebook);
034be888 582 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 5, choices, wxLB_ALWAYS_SB );
ec9f7884 583 m_listbox->SetCursor(*wxCROSS_CURSOR);
b8653fbf 584#if wxUSE_TOOLTIPS
ec9f7884 585 m_listbox->SetToolTip( "This is a list box" );
16f6dfd8 586#endif // wxUSE_TOOLTIPS
9f3362c4 587
ec9f7884
VZ
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) );
034be888 593 button = new wxButton( panel, ID_LISTBOX_FONT, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
b8653fbf 594#if wxUSE_TOOLTIPS
ec9f7884 595 button->SetToolTip( "Press here to set italic font" );
16f6dfd8 596#endif // wxUSE_TOOLTIPS
b1170810 597
0a772322 598 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "&Disable", wxPoint(20,130), wxSize(-1, -1), wxALIGN_RIGHT );
ec9f7884 599 m_checkbox->SetValue(FALSE);
b8653fbf 600#if wxUSE_TOOLTIPS
ec9f7884 601 m_checkbox->SetToolTip( "Click here to disable the listbox" );
16f6dfd8 602#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
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 );
2b07d713 607 m_choice->SetBackgroundColour( "red" );
ec9f7884
VZ
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);
a260fe6a 618 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices, wxCB_READONLY );
ec9f7884
VZ
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. " );
ab46dc18 639 m_multitext->AppendText( "\nPress function keys for test different tests." );
ec9f7884
VZ
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);
16f6dfd8 645#if wxUSE_TOOLTIPS
ec9f7884
VZ
646 m_multitext->AppendText( "\nThis ctrl has a tooltip. " );
647 m_multitext->SetToolTip("Press F1 here.");
16f6dfd8 648#endif // wxUSE_TOOLTIPS
9f3362c4 649
ec9f7884
VZ
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 {
17867d61 660 "First", "Second",
0a772322 661 /* "Third",
17867d61
RR
662 "Fourth", "Fifth", "Sixth",
663 "Seventh", "Eighth", "Nineth", "Tenth" */
ec9f7884
VZ
664 };
665
666 panel = new wxPanel(m_notebook);
9018abe3
VZ
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 );
ec9f7884
VZ
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) );
858b5bdd 682 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS );
ec9f7884 683 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
9838df2c 684#ifdef __WXMOTIF__
ec9f7884
VZ
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 );
9838df2c 691#else
ec9f7884
VZ
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 );
9838df2c 702#endif
ec9f7884 703 m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) );
2a47d3c1 704#ifndef __WIN16__
ec9f7884 705 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
6380910c
VZ
706 m_spinbutton->SetRange(-10,30);
707 m_spinbutton->SetValue(-5);
2a47d3c1 708#endif
ec9f7884 709 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
1c005ff7
RR
710}
711
b527aac5
RR
712void MyPanel::OnPasteFromClipboard( wxCommandEvent &WXUNUSED(event) )
713{
ec9f7884
VZ
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.
8e0080ee
JS
717
718#if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
ec9f7884
VZ
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";
341c92a8 754#else
ec9f7884 755 wxLogError("Your version of wxWindows is compiled without clipboard support.");
b527aac5
RR
756#endif
757}
758
759void MyPanel::OnCopyToClipboard( wxCommandEvent &WXUNUSED(event) )
760{
8e0080ee 761#if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
ec9f7884 762 wxString text( m_multitext->GetLineText(0) );
3069ac4e 763
ec9f7884
VZ
764 if (text.IsEmpty())
765 {
766 *m_text << "No text to copy.\n";
b8653fbf 767
ec9f7884
VZ
768 return;
769 }
655822f3 770
ec9f7884
VZ
771 if (!wxTheClipboard->Open())
772 {
773 *m_text << "Error opening the clipboard.\n";
655822f3 774
ec9f7884
VZ
775 return;
776 }
777 else
778 {
779 *m_text << "Successfully opened the clipboard.\n";
780 }
3069ac4e 781
ec9f7884 782 wxTextDataObject *data = new wxTextDataObject( text );
0d2a2b60 783
ec9f7884
VZ
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 }
8b53e5a2 792
ec9f7884 793 wxTheClipboard->Close();
655822f3 794
ec9f7884 795 *m_text << "Closed the clipboard.\n";
b8653fbf 796#else
ec9f7884 797 wxLogError("Your version of wxWindows is compiled without clipboard support.");
3069ac4e 798#endif
b527aac5
RR
799}
800
d59051dd
VZ
801void MyPanel::OnMoveToEndOfText( wxCommandEvent &event )
802{
803 m_multitext->SetInsertionPointEnd();
804 m_multitext->SetFocus();
805}
806
807void MyPanel::OnMoveToEndOfEntry( wxCommandEvent &event )
808{
809 m_textentry->SetInsertionPointEnd();
810 m_textentry->SetFocus();
811}
812
1c005ff7
RR
813void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
814{
ec9f7884
VZ
815 int x = 0;
816 int y = 0;
817 GetClientSize( &x, &y );
655822f3 818
ec9f7884
VZ
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 );
1c005ff7
RR
821}
822
4d0f3cd6
VZ
823void 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
cb43b372
RR
843void MyPanel::OnPageChanged( wxNotebookEvent &event )
844{
ec9f7884 845 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
cb43b372
RR
846}
847
1c005ff7
RR
848void MyPanel::OnListBox( wxCommandEvent &event )
849{
19da4326 850 m_text->AppendText( "ListBox event selection string is: " );
ec9f7884
VZ
851 m_text->AppendText( event.GetString() );
852 m_text->AppendText( "\n" );
19da4326
RR
853 m_text->AppendText( "ListBox control selection string is: " );
854 m_text->AppendText( m_listbox->GetStringSelection() );
855 m_text->AppendText( "\n" );
1c005ff7
RR
856}
857
5b077d48
RR
858void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
859{
ec9f7884
VZ
860 m_text->AppendText( "ListBox double click string is: " );
861 m_text->AppendText( event.GetString() );
862 m_text->AppendText( "\n" );
5b077d48
RR
863}
864
47908e25
RR
865void MyPanel::OnListBoxButtons( wxCommandEvent &event )
866{
ec9f7884 867 switch (event.GetId())
d3904ceb 868 {
ec9f7884
VZ
869 case ID_LISTBOX_ENABLE:
870 {
871 m_text->AppendText("Checkbox clicked.\n");
872 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
b8653fbf 873#if wxUSE_TOOLTIPS
ec9f7884
VZ
874 if (event.GetInt())
875 cb->SetToolTip( "Click to enable listbox" );
876 else
877 cb->SetToolTip( "Click to disable listbox" );
16f6dfd8 878#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
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 }
868a2826 914 }
47908e25
RR
915}
916
917void MyPanel::OnChoice( wxCommandEvent &event )
918{
19da4326 919 m_text->AppendText( "Choice event selection string is: " );
ec9f7884
VZ
920 m_text->AppendText( event.GetString() );
921 m_text->AppendText( "\n" );
19da4326
RR
922 m_text->AppendText( "Choice control selection string is: " );
923 m_text->AppendText( m_choice->GetStringSelection() );
924 m_text->AppendText( "\n" );
47908e25
RR
925}
926
927void MyPanel::OnChoiceButtons( wxCommandEvent &event )
928{
ec9f7884 929 switch (event.GetId())
47908e25 930 {
ec9f7884
VZ
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 }
868a2826 967 }
47908e25
RR
968}
969
970void MyPanel::OnCombo( wxCommandEvent &event )
971{
19da4326 972 m_text->AppendText( "ComboBox event selection string is: " );
ec9f7884
VZ
973 m_text->AppendText( event.GetString() );
974 m_text->AppendText( "\n" );
19da4326
RR
975 m_text->AppendText( "ComboBox control selection string is: " );
976 m_text->AppendText( m_combo->GetStringSelection() );
977 m_text->AppendText( "\n" );
47908e25
RR
978}
979
980void MyPanel::OnComboButtons( wxCommandEvent &event )
1c005ff7 981{
ec9f7884 982 switch (event.GetId())
2f6407b9 983 {
ec9f7884
VZ
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 }
868a2826 1020 }
47908e25
RR
1021}
1022
1023void MyPanel::OnRadio( wxCommandEvent &event )
1024{
ec9f7884
VZ
1025 m_text->AppendText( "RadioBox selection string is: " );
1026 m_text->AppendText( event.GetString() );
1027 m_text->AppendText( "\n" );
47908e25
RR
1028}
1029
1030void MyPanel::OnRadioButtons( wxCommandEvent &event )
1031{
ec9f7884 1032 switch (event.GetId())
d3904ceb 1033 {
ec9f7884
VZ
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 }
868a2826 1054 }
1c005ff7
RR
1055}
1056
868a2826
RR
1057void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
1058{
ec9f7884
VZ
1059 m_fontButton->SetFont( *wxITALIC_FONT );
1060 m_text->SetFont( *wxITALIC_FONT );
868a2826
RR
1061}
1062
7bce6aec
RR
1063void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
1064{
ec9f7884 1065 m_gauge->SetValue( m_slider->GetValue() );
7bce6aec
RR
1066}
1067
2a47d3c1 1068#ifndef __WIN16__
e380f72b
RR
1069void MyPanel::OnSpinUpdate( wxSpinEvent &event )
1070{
ec9f7884 1071 wxString value;
f70d5829 1072 value.Printf( _T("%d"), event.GetPosition() );
ec9f7884 1073 m_spintext->SetValue( value );
6380910c 1074
f70d5829 1075 value.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
6380910c
VZ
1076 m_spinbutton->GetMin(), m_spinbutton->GetMax(),
1077 m_spinbutton->GetValue());
1078
1079 m_text->AppendText(value);
e380f72b 1080}
2a47d3c1 1081#endif
e380f72b 1082
2cb21a45
VZ
1083MyPanel::~MyPanel()
1084{
ec9f7884 1085 delete m_notebook->GetImageList();
2cb21a45
VZ
1086}
1087
1c005ff7
RR
1088//----------------------------------------------------------------------
1089// MyFrame
1090//----------------------------------------------------------------------
1091
1092BEGIN_EVENT_TABLE(MyFrame, wxFrame)
ec9f7884
VZ
1093EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
1094EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
16f6dfd8 1095#if wxUSE_TOOLTIPS
ec9f7884
VZ
1096EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
1097EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
16f6dfd8 1098#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
1099EVT_SIZE(MyFrame::OnSize)
1100EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
1101END_EVENT_TABLE()
1102
9f3362c4 1103MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
ec9f7884 1104: wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
1c005ff7 1105{
5fb9fcfc 1106 CreateStatusBar(2);
9f3362c4
VZ
1107
1108 (void)new MyPanel( this, 10, 10, 300, 100 );
1c005ff7
RR
1109}
1110
1111void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
1112{
ec9f7884 1113 Close(TRUE);
1c005ff7
RR
1114}
1115
1116void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
1117{
ec9f7884
VZ
1118 wxBeginBusyCursor();
1119
1120 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
1121 dialog.ShowModal();
1122
1123 wxEndBusyCursor();
1c005ff7 1124}
9f3362c4 1125
16f6dfd8
VZ
1126#if wxUSE_TOOLTIPS
1127void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
1128{
1129 static long s_delay = 5000;
1130
1131 wxString delay;
f70d5829 1132 delay.Printf( _T("%ld"), s_delay);
16f6dfd8
VZ
1133
1134 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
ec9f7884
VZ
1135 "Set tooltip delay",
1136 delay,
1137 this);
16f6dfd8
VZ
1138 if ( !delay )
1139 return; // cancelled
1140
f70d5829 1141 wxSscanf(delay, _T("%ld"), &s_delay);
16f6dfd8
VZ
1142
1143 wxToolTip::SetDelay(s_delay);
1144
f70d5829 1145 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
16f6dfd8
VZ
1146}
1147
1148void MyFrame::OnToggleTooltips(wxCommandEvent& event)
1149{
1150 static bool s_enabled = TRUE;
1151
1152 s_enabled = !s_enabled;
1153
1154 wxToolTip::Enable(s_enabled);
1155
f70d5829 1156 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
16f6dfd8
VZ
1157}
1158#endif // tooltips
1159
5fb9fcfc
VZ
1160void MyFrame::OnSize( wxSizeEvent& event )
1161{
1162 wxString msg;
f70d5829 1163 msg.Printf( _("%dx%d"), event.GetSize().x, event.GetSize().y);
5fb9fcfc
VZ
1164 SetStatusText(msg, 1);
1165
1166 event.Skip();
1167}
1168
9f3362c4
VZ
1169void 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;
f70d5829 1179 msg.Printf(
9f3362c4 1180#ifdef __WXMSW__
f70d5829
RR
1181 _T("Focus: wxWindow = %p, HWND = %08x"),
1182#else
1183 _T("Focus: wxWindow = %p"),
1184#endif
1185 s_windowFocus
9f3362c4 1186#ifdef __WXMSW__
ec9f7884 1187 , s_windowFocus->GetHWND()
f70d5829 1188#endif
9f3362c4
VZ
1189 );
1190
1191 SetStatusText(msg);
1192 }
341c92a8 1193}