]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
SetCursor() doesn't set cursor for children of the window any more
[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);
6085b116
VZ
74
75private:
76 DECLARE_EVENT_TABLE()
77};
78
1c005ff7
RR
79class MyPanel: public wxPanel
80{
b8653fbf 81public:
1c005ff7 82 MyPanel(wxFrame *frame, int x, int y, int w, int h);
2cb21a45 83 virtual ~MyPanel();
16f6dfd8 84
1c005ff7
RR
85 void OnSize( wxSizeEvent& event );
86 void OnListBox( wxCommandEvent &event );
5b077d48 87 void OnListBoxDoubleClick( wxCommandEvent &event );
1c005ff7 88 void OnListBoxButtons( wxCommandEvent &event );
47908e25
RR
89 void OnChoice( wxCommandEvent &event );
90 void OnChoiceButtons( wxCommandEvent &event );
91 void OnCombo( wxCommandEvent &event );
92 void OnComboButtons( wxCommandEvent &event );
93 void OnRadio( wxCommandEvent &event );
94 void OnRadioButtons( wxCommandEvent &event );
868a2826 95 void OnSetFont( wxCommandEvent &event );
cb43b372 96 void OnPageChanged( wxNotebookEvent &event );
7bce6aec 97 void OnSliderUpdate( wxCommandEvent &event );
e380f72b 98 void OnSpinUpdate( wxSpinEvent &event );
b527aac5
RR
99 void OnPasteFromClipboard( wxCommandEvent &event );
100 void OnCopyToClipboard( wxCommandEvent &event );
d59051dd
VZ
101 void OnMoveToEndOfText( wxCommandEvent &event );
102 void OnMoveToEndOfEntry( wxCommandEvent &event );
16f6dfd8 103
e380f72b
RR
104 wxListBox *m_listbox;
105 wxChoice *m_choice;
106 wxComboBox *m_combo;
107 wxRadioBox *m_radio;
108 wxGauge *m_gauge;
109 wxSlider *m_slider;
110 wxButton *m_fontButton;
111 wxSpinButton *m_spinbutton;
112 wxTextCtrl *m_spintext;
6085b116
VZ
113 MyTextCtrl *m_multitext;
114 MyTextCtrl *m_textentry;
ae0bdb01 115 wxCheckBox *m_checkbox;
16f6dfd8 116
e380f72b 117 wxTextCtrl *m_text;
655822f3
VZ
118 wxNotebook *m_notebook;
119
b8653fbf
VZ
120private:
121 DECLARE_EVENT_TABLE()
1c005ff7
RR
122};
123
124class MyFrame: public wxFrame
125{
b8653fbf 126public:
1c005ff7 127 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
655822f3 128
1c005ff7
RR
129 void OnQuit(wxCommandEvent& event);
130 void OnAbout(wxCommandEvent& event);
16f6dfd8
VZ
131#if wxUSE_TOOLTIPS
132 void OnSetTooltipDelay(wxCommandEvent& event);
133 void OnToggleTooltips(wxCommandEvent& event);
134#endif // wxUSE_TOOLTIPS
9f3362c4 135 void OnIdle( wxIdleEvent& event );
5fb9fcfc 136 void OnSize( wxSizeEvent& event );
655822f3 137
b8653fbf
VZ
138private:
139 DECLARE_EVENT_TABLE()
1c005ff7
RR
140};
141
142//----------------------------------------------------------------------
143// main()
144//----------------------------------------------------------------------
145
d59051dd 146IMPLEMENT_APP(MyApp)
1c005ff7
RR
147
148//----------------------------------------------------------------------
149// MyApp
150//----------------------------------------------------------------------
151
16f6dfd8
VZ
152enum
153{
154 MINIMAL_QUIT = 100,
155 MINIMAL_TEXT,
156 MINIMAL_ABOUT,
157
158 // tooltip menu
159 MINIMAL_SET_TOOLTIP_DELAY = 200,
160 MINIMAL_ENABLE_TOOLTIPS
161};
1c005ff7 162
b8653fbf 163bool MyApp::OnInit()
1c005ff7 164{
ec9f7884
VZ
165 // Create the main frame window
166 MyFrame *frame = new MyFrame((wxFrame *) NULL,
167 "Controls wxWindows App",
168 50, 50, 530, 420);
655822f3 169
ec9f7884
VZ
170 // Give it an icon
171 // The wxICON() macros loads an icon from a resource under Windows
172 // and uses an #included XPM image under GTK+ and Motif
655822f3 173
ec9f7884 174 frame->SetIcon( wxICON(mondrian) );
1c005ff7 175
ec9f7884
VZ
176 wxMenu *file_menu = new wxMenu;
177 file_menu->Append(MINIMAL_ABOUT, "&About");
178 file_menu->Append(MINIMAL_QUIT, "E&xit");
16f6dfd8 179
ec9f7884
VZ
180 wxMenuBar *menu_bar = new wxMenuBar;
181 menu_bar->Append(file_menu, "&File");
16f6dfd8
VZ
182
183#if wxUSE_TOOLTIPS
ec9f7884
VZ
184 wxMenu *tooltip_menu = new wxMenu;
185 tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay");
186 tooltip_menu->AppendSeparator();
187 tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips",
188 "enable/disable tooltips", TRUE);
189 tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
190 menu_bar->Append(tooltip_menu, "&Tooltips");
16f6dfd8
VZ
191#endif // wxUSE_TOOLTIPS
192
ec9f7884 193 frame->SetMenuBar(menu_bar);
1c005ff7 194
ec9f7884 195 frame->Show(TRUE);
655822f3 196
ec9f7884 197 SetTopWindow(frame);
1c005ff7 198
ec9f7884 199 return TRUE;
1c005ff7
RR
200}
201
6085b116
VZ
202//----------------------------------------------------------------------
203// MyTextCtrl
204//----------------------------------------------------------------------
205
206BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
ec9f7884 207EVT_KEY_DOWN(MyTextCtrl::OnKeyDown)
6085b116
VZ
208END_EVENT_TABLE()
209
5fb9fcfc 210void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
6085b116
VZ
211{
212 switch ( event.KeyCode() )
213 {
214 case WXK_F1:
215 // show current position and text length
216 {
217 long line, column, pos = GetInsertionPoint();
218 PositionToXY(pos, &column, &line);
219
220 wxLogMessage("Current position: %ld\n"
ec9f7884
VZ
221 "Current line, column: (%ld, %ld)\n"
222 "Number of lines: %ld\n"
223 "Current line length: %ld\n"
224 "Total text length: %ld",
225 pos,
226 line, column,
227 GetNumberOfLines(),
228 GetLineLength(line),
229 GetLastPosition());
6085b116
VZ
230 }
231 break;
232
233 case WXK_F2:
234 // go to the end
235 SetInsertionPointEnd();
236 break;
237
238 case WXK_F3:
239 // go to position 10
240 SetInsertionPoint(10);
241 break;
242
243 default:
244 event.Skip();
245 }
246}
247
1c005ff7
RR
248//----------------------------------------------------------------------
249// MyPanel
250//----------------------------------------------------------------------
251
4fabb575 252const int ID_NOTEBOOK = 1000;
1c005ff7 253
4fabb575
JS
254const int ID_LISTBOX = 130;
255const int ID_LISTBOX_SEL_NUM = 131;
256const int ID_LISTBOX_SEL_STR = 132;
257const int ID_LISTBOX_CLEAR = 133;
258const int ID_LISTBOX_APPEND = 134;
259const int ID_LISTBOX_DELETE = 135;
260const int ID_LISTBOX_FONT = 136;
261const int ID_LISTBOX_ENABLE = 137;
1c005ff7 262
4fabb575
JS
263const int ID_CHOICE = 120;
264const int ID_CHOICE_SEL_NUM = 121;
265const int ID_CHOICE_SEL_STR = 122;
266const int ID_CHOICE_CLEAR = 123;
267const int ID_CHOICE_APPEND = 124;
268const int ID_CHOICE_DELETE = 125;
269const int ID_CHOICE_FONT = 126;
270const int ID_CHOICE_ENABLE = 127;
53010e52 271
4fabb575
JS
272const int ID_COMBO = 140;
273const int ID_COMBO_SEL_NUM = 141;
274const int ID_COMBO_SEL_STR = 142;
275const int ID_COMBO_CLEAR = 143;
276const int ID_COMBO_APPEND = 144;
277const int ID_COMBO_DELETE = 145;
278const int ID_COMBO_FONT = 146;
279const int ID_COMBO_ENABLE = 147;
53010e52 280
4fabb575 281const int ID_TEXT = 150;
b527aac5
RR
282const int ID_PASTE_TEXT = 151;
283const int ID_COPY_TEXT = 152;
d59051dd
VZ
284const int ID_MOVE_END_ENTRY = 153;
285const int ID_MOVE_END_ZONE = 154;
219f895a 286
4fabb575
JS
287const int ID_RADIOBOX = 160;
288const int ID_RADIOBOX_SEL_NUM = 161;
289const int ID_RADIOBOX_SEL_STR = 162;
290const int ID_RADIOBOX_FONT = 163;
291const int ID_RADIOBOX_ENABLE = 164;
868a2826 292
f5d29b39
RR
293const int ID_RADIOBUTTON_1 = 166;
294const int ID_RADIOBUTTON_2 = 167;
295
4fabb575 296const int ID_SET_FONT = 170;
47908e25 297
4fabb575
JS
298const int ID_GAUGE = 180;
299const int ID_SLIDER = 181;
58614078 300
4fabb575 301const int ID_SPIN = 182;
e380f72b 302
1c005ff7 303BEGIN_EVENT_TABLE(MyPanel, wxPanel)
ec9f7884
VZ
304EVT_SIZE ( MyPanel::OnSize)
305EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
306EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
307EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
308EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
309EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
310EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
311EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
312EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
313EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
314EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
315EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
316EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
317EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
318EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
319EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
320EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
321EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
322EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
323EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
324EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
325EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
326EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
327EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
328EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
329EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
330EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
331EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
332EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
333EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
334EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
335EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
336EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
337EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
338EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
339EVT_BUTTON (ID_PASTE_TEXT, MyPanel::OnPasteFromClipboard)
340EVT_BUTTON (ID_COPY_TEXT, MyPanel::OnCopyToClipboard)
341EVT_BUTTON (ID_MOVE_END_ZONE, MyPanel::OnMoveToEndOfText)
342EVT_BUTTON (ID_MOVE_END_ENTRY, MyPanel::OnMoveToEndOfEntry)
1c005ff7
RR
343END_EVENT_TABLE()
344
5fb9fcfc 345MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
ec9f7884
VZ
346: wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
347m_text(NULL), m_notebook(NULL)
1c005ff7 348{
ec9f7884 349 // SetBackgroundColour("cadet blue");
a81258be 350
ec9f7884
VZ
351 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
352 // m_text->SetBackgroundColour("wheat");
655822f3 353
ec9f7884 354 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
655822f3 355
ec9f7884
VZ
356 wxString choices[] =
357 {
358 "This",
359 "is one of my",
360 "really",
361 "wonderful",
362 "examples."
363 };
655822f3 364
4fabb575 365#ifdef USE_XPM
ec9f7884
VZ
366 // image ids
367 enum
368 {
369 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
370 };
371
372 // fill the image list
373 wxImageList *imagelist = new wxImageList(32, 32);
374
375 imagelist-> Add( wxBitmap( list_xpm ));
376 imagelist-> Add( wxBitmap( choice_xpm ));
377 imagelist-> Add( wxBitmap( combo_xpm ));
378 imagelist-> Add( wxBitmap( text_xpm ));
379 imagelist-> Add( wxBitmap( radio_xpm ));
380 imagelist-> Add( wxBitmap( gauge_xpm ));
381 m_notebook->SetImageList(imagelist);
73c700fd 382#elif defined(__WXMSW__)
ec9f7884
VZ
383 // load images from resources
384 enum
385 {
386 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
387 };
388 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
389
390 static const char *s_iconNames[Image_Max] =
391 {
392 "list", "choice", "combo", "text", "radio", "gauge"
393 };
394
395 for ( size_t n = 0; n < Image_Max; n++ )
396 {
397 wxBitmap bmp(s_iconNames[n]);
398 if ( !bmp.Ok() || (imagelist->Add(bmp) == -1) )
399 {
400 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
401 s_iconNames[n], n);
402 }
403 }
404
405 m_notebook->SetImageList(imagelist);
4fabb575
JS
406#else
407
ec9f7884 408 // No images for now
4fabb575
JS
409#define Image_List -1
410#define Image_Choice -1
411#define Image_Combo -1
412#define Image_Text -1
413#define Image_Radio -1
414#define Image_Gauge -1
415#define Image_Max -1
416
fc54776e 417#endif
2cb21a45 418
ec9f7884
VZ
419 wxButton *button = (wxButton*) NULL; /* who did this ? */
420 wxPanel *panel = (wxPanel*) NULL;
9838df2c 421
ec9f7884
VZ
422 panel = new wxPanel(m_notebook);
423 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 5, choices );
424 m_listbox->SetCursor(*wxCROSS_CURSOR);
b8653fbf 425#if wxUSE_TOOLTIPS
ec9f7884 426 m_listbox->SetToolTip( "This is a list box" );
16f6dfd8 427#endif // wxUSE_TOOLTIPS
9f3362c4 428
ec9f7884
VZ
429 (void)new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
430 (void)new wxButton( panel, ID_LISTBOX_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
431 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
432 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
433 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
434 button = new wxButton( panel, ID_LISTBOX_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
b8653fbf 435#if wxUSE_TOOLTIPS
ec9f7884 436 button->SetToolTip( "Press here to set italic font" );
16f6dfd8 437#endif // wxUSE_TOOLTIPS
b1170810 438
ec9f7884
VZ
439 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
440 m_checkbox->SetValue(FALSE);
b8653fbf 441#if wxUSE_TOOLTIPS
ec9f7884 442 m_checkbox->SetToolTip( "Click here to disable the listbox" );
16f6dfd8 443#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
444 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
445
446 panel = new wxPanel(m_notebook);
447 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
448 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
449 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
450 (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
451 (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
452 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
453 (void)new wxButton( panel, ID_CHOICE_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
454 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
455 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
456
457 panel = new wxPanel(m_notebook);
458 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices );
459 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
460 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
461 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
462 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
463 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
464 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
465 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
466 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
467
468 panel = new wxPanel(m_notebook);
469 m_textentry = new MyTextCtrl( panel, -1, "Some text.", wxPoint(10,10), wxSize(320,28), //0);
470 wxTE_PROCESS_ENTER);
471 (*m_textentry) << " Appended.";
472 m_textentry->SetInsertionPoint(0);
473 m_textentry->WriteText( "Prepended. " );
474
475 m_multitext = new MyTextCtrl( panel, ID_TEXT, "Some text.", wxPoint(10,50), wxSize(320,70), wxTE_MULTILINE );
476 (*m_multitext) << " Appended.";
477 m_multitext->SetInsertionPoint(0);
478 m_multitext->WriteText( "Prepended. " );
479 m_multitext->AppendText( "\nPress function keys to test different wxTextCtrl functions." );
480
481 (*m_multitext) << "\nDoes it have cross cursor?";
482 m_multitext->SetCursor(*wxCROSS_CURSOR);
483
484 new MyTextCtrl( panel, -1, "This one is with wxTE_PROCESS_TAB style.", wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE | wxTE_PROCESS_TAB);
16f6dfd8 485#if wxUSE_TOOLTIPS
ec9f7884
VZ
486 m_multitext->AppendText( "\nThis ctrl has a tooltip. " );
487 m_multitext->SetToolTip("Press F1 here.");
16f6dfd8 488#endif // wxUSE_TOOLTIPS
9f3362c4 489
ec9f7884
VZ
490 (void)new wxStaticBox( panel, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
491 (void)new wxButton( panel, ID_MOVE_END_ENTRY, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
492 (void)new wxButton( panel, ID_MOVE_END_ZONE, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
493 (void)new wxStaticBox( panel, -1, "wx&Clipboard", wxPoint(345,100), wxSize(160,100) );
494 (void)new wxButton( panel, ID_COPY_TEXT, "C&opy line 1", wxPoint(370,120), wxSize(110,30) );
495 (void)new wxButton( panel, ID_PASTE_TEXT, "&Paste text", wxPoint(370,160), wxSize(110,30) );
496 m_notebook->AddPage( panel, "wxTextCtrl" , FALSE, Image_Text );
497
498 wxString choices2[] =
499 {
500 "Wonderful",
501 "examples.",
502 };
503
504 panel = new wxPanel(m_notebook);
505 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), 2, choices2, 1, wxRA_SPECIFY_ROWS );
506 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), 5, choices, 1, wxRA_SPECIFY_COLS );
507 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
508 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
509 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
510 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
511 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
512 wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
513 rb->SetValue( FALSE );
514 (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
515 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
516
517 panel = new wxPanel(m_notebook);
518 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
519 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
520 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1) );
521 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
9838df2c 522#ifdef __WXMOTIF__
ec9f7884
VZ
523 // No wrapping text in wxStaticText yet :-(
524 (void)new wxStaticText( panel, -1,
525 "Drag the slider!",
526 wxPoint(208,30),
527 wxSize(210, -1)
528 );
9838df2c 529#else
ec9f7884
VZ
530 (void)new wxStaticText( panel, -1,
531 "In order see the gauge (aka progress bar)\n"
532 "control do something you have to drag the\n"
533 "handle of the slider to the right.\n"
534 "\n"
535 "This is also supposed to demonstrate how\n"
536 "to use static controls.\n",
537 wxPoint(208,25),
538 wxSize(250, 110)
539 );
9838df2c 540#endif
ec9f7884
VZ
541 m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) );
542 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
543 m_spinbutton->SetRange(0,100);
544 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
1c005ff7
RR
545}
546
b527aac5
RR
547void MyPanel::OnPasteFromClipboard( wxCommandEvent &WXUNUSED(event) )
548{
ec9f7884
VZ
549 // We test for wxUSE_DRAG_AND_DROP also, because data objects
550 // may not be implemented for compilers that can't cope with the OLE
551 // parts in wxUSE_DRAG_AND_DROP.
8e0080ee
JS
552
553#if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
ec9f7884
VZ
554 if (!wxTheClipboard->Open())
555 {
556 *m_text << "Error opening the clipboard.\n";
557
558 return;
559 }
560 else
561 {
562 *m_text << "Successfully opened the clipboard.\n";
563 }
564
565 wxTextDataObject data;
566
567 if (wxTheClipboard->IsSupported( data.GetFormat() ))
568 {
569 *m_text << "Clipboard supports requested format.\n";
570
571 if (wxTheClipboard->GetData( &data ))
572 {
573 *m_text << "Successfully retrieved data from the clipboard.\n";
574 *m_multitext << data.GetText() << "\n";
575 }
576 else
577 {
578 *m_text << "Error getting data from the clipboard.\n";
579 }
580 }
581 else
582 {
583 *m_text << "Clipboard doesn't support requested format.\n";
584 }
585
586 wxTheClipboard->Close();
587
588 *m_text << "Closed the clipboard.\n";
341c92a8 589#else
ec9f7884 590 wxLogError("Your version of wxWindows is compiled without clipboard support.");
b527aac5
RR
591#endif
592}
593
594void MyPanel::OnCopyToClipboard( wxCommandEvent &WXUNUSED(event) )
595{
8e0080ee 596#if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
ec9f7884 597 wxString text( m_multitext->GetLineText(0) );
3069ac4e 598
ec9f7884
VZ
599 if (text.IsEmpty())
600 {
601 *m_text << "No text to copy.\n";
b8653fbf 602
ec9f7884
VZ
603 return;
604 }
655822f3 605
ec9f7884
VZ
606 if (!wxTheClipboard->Open())
607 {
608 *m_text << "Error opening the clipboard.\n";
655822f3 609
ec9f7884
VZ
610 return;
611 }
612 else
613 {
614 *m_text << "Successfully opened the clipboard.\n";
615 }
3069ac4e 616
ec9f7884 617 wxTextDataObject *data = new wxTextDataObject( text );
0d2a2b60 618
ec9f7884
VZ
619 if (!wxTheClipboard->SetData( data ))
620 {
621 *m_text << "Error while copying to the clipboard.\n";
622 }
623 else
624 {
625 *m_text << "Successfully copied data to the clipboard.\n";
626 }
8b53e5a2 627
ec9f7884 628 wxTheClipboard->Close();
655822f3 629
ec9f7884 630 *m_text << "Closed the clipboard.\n";
b8653fbf 631#else
ec9f7884 632 wxLogError("Your version of wxWindows is compiled without clipboard support.");
3069ac4e 633#endif
b527aac5
RR
634}
635
d59051dd
VZ
636void MyPanel::OnMoveToEndOfText( wxCommandEvent &event )
637{
638 m_multitext->SetInsertionPointEnd();
639 m_multitext->SetFocus();
640}
641
642void MyPanel::OnMoveToEndOfEntry( wxCommandEvent &event )
643{
644 m_textentry->SetInsertionPointEnd();
645 m_textentry->SetFocus();
646}
647
1c005ff7
RR
648void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
649{
ec9f7884
VZ
650 int x = 0;
651 int y = 0;
652 GetClientSize( &x, &y );
655822f3 653
ec9f7884
VZ
654 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
655 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
1c005ff7
RR
656}
657
cb43b372
RR
658void MyPanel::OnPageChanged( wxNotebookEvent &event )
659{
ec9f7884 660 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
cb43b372
RR
661}
662
1c005ff7
RR
663void MyPanel::OnListBox( wxCommandEvent &event )
664{
ec9f7884
VZ
665 m_text->AppendText( "ListBox selection string is: " );
666 m_text->AppendText( event.GetString() );
667 m_text->AppendText( "\n" );
1c005ff7
RR
668}
669
5b077d48
RR
670void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
671{
ec9f7884
VZ
672 m_text->AppendText( "ListBox double click string is: " );
673 m_text->AppendText( event.GetString() );
674 m_text->AppendText( "\n" );
5b077d48
RR
675}
676
47908e25
RR
677void MyPanel::OnListBoxButtons( wxCommandEvent &event )
678{
ec9f7884 679 switch (event.GetId())
d3904ceb 680 {
ec9f7884
VZ
681 case ID_LISTBOX_ENABLE:
682 {
683 m_text->AppendText("Checkbox clicked.\n");
684 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
b8653fbf 685#if wxUSE_TOOLTIPS
ec9f7884
VZ
686 if (event.GetInt())
687 cb->SetToolTip( "Click to enable listbox" );
688 else
689 cb->SetToolTip( "Click to disable listbox" );
16f6dfd8 690#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
691 m_listbox->Enable( event.GetInt() == 0 );
692 break;
693 }
694 case ID_LISTBOX_SEL_NUM:
695 {
696 m_listbox->SetSelection( 2 );
697 break;
698 }
699 case ID_LISTBOX_SEL_STR:
700 {
701 m_listbox->SetStringSelection( "This" );
702 break;
703 }
704 case ID_LISTBOX_CLEAR:
705 {
706 m_listbox->Clear();
707 break;
708 }
709 case ID_LISTBOX_APPEND:
710 {
711 m_listbox->Append( "Hi!" );
712 break;
713 }
714 case ID_LISTBOX_DELETE:
715 {
716 int idx = m_listbox->GetSelection();
717 m_listbox->Delete( idx );
718 break;
719 }
720 case ID_LISTBOX_FONT:
721 {
722 m_listbox->SetFont( *wxITALIC_FONT );
723 m_checkbox->SetFont( *wxITALIC_FONT );
724 break;
725 }
868a2826 726 }
47908e25
RR
727}
728
729void MyPanel::OnChoice( wxCommandEvent &event )
730{
ec9f7884
VZ
731 m_text->AppendText( "Choice selection string is: " );
732 m_text->AppendText( event.GetString() );
733 m_text->AppendText( "\n" );
47908e25
RR
734}
735
736void MyPanel::OnChoiceButtons( wxCommandEvent &event )
737{
ec9f7884 738 switch (event.GetId())
47908e25 739 {
ec9f7884
VZ
740 case ID_CHOICE_ENABLE:
741 {
742 m_choice->Enable( event.GetInt() == 0 );
743 break;
744 }
745 case ID_CHOICE_SEL_NUM:
746 {
747 m_choice->SetSelection( 2 );
748 break;
749 }
750 case ID_CHOICE_SEL_STR:
751 {
752 m_choice->SetStringSelection( "This" );
753 break;
754 }
755 case ID_CHOICE_CLEAR:
756 {
757 m_choice->Clear();
758 break;
759 }
760 case ID_CHOICE_APPEND:
761 {
762 m_choice->Append( "Hi!" );
763 break;
764 }
765 case ID_CHOICE_DELETE:
766 {
767 int idx = m_choice->GetSelection();
768 m_choice->Delete( idx );
769 break;
770 }
771 case ID_CHOICE_FONT:
772 {
773 m_choice->SetFont( *wxITALIC_FONT );
774 break;
775 }
868a2826 776 }
47908e25
RR
777}
778
779void MyPanel::OnCombo( wxCommandEvent &event )
780{
ec9f7884
VZ
781 m_text->AppendText( "ComboBox selection string is: " );
782 m_text->AppendText( event.GetString() );
783 m_text->AppendText( "\n" );
47908e25
RR
784}
785
786void MyPanel::OnComboButtons( wxCommandEvent &event )
1c005ff7 787{
ec9f7884 788 switch (event.GetId())
2f6407b9 789 {
ec9f7884
VZ
790 case ID_COMBO_ENABLE:
791 {
792 m_combo->Enable( event.GetInt() == 0 );
793 break;
794 }
795 case ID_COMBO_SEL_NUM:
796 {
797 m_combo->SetSelection( 2 );
798 break;
799 }
800 case ID_COMBO_SEL_STR:
801 {
802 m_combo->SetStringSelection( "This" );
803 break;
804 }
805 case ID_COMBO_CLEAR:
806 {
807 m_combo->Clear();
808 break;
809 }
810 case ID_COMBO_APPEND:
811 {
812 m_combo->Append( "Hi!" );
813 break;
814 }
815 case ID_COMBO_DELETE:
816 {
817 int idx = m_combo->GetSelection();
818 m_combo->Delete( idx );
819 break;
820 }
821 case ID_COMBO_FONT:
822 {
823 m_combo->SetFont( *wxITALIC_FONT );
824 break;
825 }
868a2826 826 }
47908e25
RR
827}
828
829void MyPanel::OnRadio( wxCommandEvent &event )
830{
ec9f7884
VZ
831 m_text->AppendText( "RadioBox selection string is: " );
832 m_text->AppendText( event.GetString() );
833 m_text->AppendText( "\n" );
47908e25
RR
834}
835
836void MyPanel::OnRadioButtons( wxCommandEvent &event )
837{
ec9f7884 838 switch (event.GetId())
d3904ceb 839 {
ec9f7884
VZ
840 case ID_RADIOBOX_ENABLE:
841 {
842 m_radio->Enable( event.GetInt() == 0 );
843 break;
844 }
845 case ID_RADIOBOX_SEL_NUM:
846 {
847 m_radio->SetSelection( 2 );
848 break;
849 }
850 case ID_RADIOBOX_SEL_STR:
851 {
852 m_radio->SetStringSelection( "This" );
853 break;
854 }
855 case ID_RADIOBOX_FONT:
856 {
857 m_radio->SetFont( *wxITALIC_FONT );
858 break;
859 }
868a2826 860 }
1c005ff7
RR
861}
862
868a2826
RR
863void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
864{
ec9f7884
VZ
865 m_fontButton->SetFont( *wxITALIC_FONT );
866 m_text->SetFont( *wxITALIC_FONT );
868a2826
RR
867}
868
7bce6aec
RR
869void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
870{
ec9f7884 871 m_gauge->SetValue( m_slider->GetValue() );
7bce6aec
RR
872}
873
e380f72b
RR
874void MyPanel::OnSpinUpdate( wxSpinEvent &event )
875{
ec9f7884
VZ
876 wxString value;
877 value.sprintf( "%d", (int)event.GetPosition() );
878 m_spintext->SetValue( value );
e380f72b
RR
879}
880
2cb21a45
VZ
881MyPanel::~MyPanel()
882{
ec9f7884 883 delete m_notebook->GetImageList();
2cb21a45
VZ
884}
885
1c005ff7
RR
886//----------------------------------------------------------------------
887// MyFrame
888//----------------------------------------------------------------------
889
890BEGIN_EVENT_TABLE(MyFrame, wxFrame)
ec9f7884
VZ
891EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
892EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
16f6dfd8 893#if wxUSE_TOOLTIPS
ec9f7884
VZ
894EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
895EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
16f6dfd8 896#endif // wxUSE_TOOLTIPS
ec9f7884
VZ
897EVT_SIZE(MyFrame::OnSize)
898EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
899END_EVENT_TABLE()
900
9f3362c4 901MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
ec9f7884 902: wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
1c005ff7 903{
5fb9fcfc 904 CreateStatusBar(2);
9f3362c4
VZ
905
906 (void)new MyPanel( this, 10, 10, 300, 100 );
1c005ff7
RR
907}
908
909void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
910{
ec9f7884 911 Close(TRUE);
1c005ff7
RR
912}
913
914void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
915{
ec9f7884
VZ
916 wxBeginBusyCursor();
917
918 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
919 dialog.ShowModal();
920
921 wxEndBusyCursor();
1c005ff7 922}
9f3362c4 923
16f6dfd8
VZ
924#if wxUSE_TOOLTIPS
925void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
926{
927 static long s_delay = 5000;
928
929 wxString delay;
930 delay.Printf("%ld", s_delay);
931
932 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
ec9f7884
VZ
933 "Set tooltip delay",
934 delay,
935 this);
16f6dfd8
VZ
936 if ( !delay )
937 return; // cancelled
938
939 sscanf(delay, "%ld", &s_delay);
940
941 wxToolTip::SetDelay(s_delay);
942
943 wxLogStatus(this, "Tooltip delay set to %ld milliseconds", s_delay);
944}
945
946void MyFrame::OnToggleTooltips(wxCommandEvent& event)
947{
948 static bool s_enabled = TRUE;
949
950 s_enabled = !s_enabled;
951
952 wxToolTip::Enable(s_enabled);
953
954 wxLogStatus(this, "Tooltips %sabled", s_enabled ? "en" : "dis");
955}
956#endif // tooltips
957
5fb9fcfc
VZ
958void MyFrame::OnSize( wxSizeEvent& event )
959{
960 wxString msg;
961 msg.Printf("%dx%d", event.GetSize().x, event.GetSize().y);
962 SetStatusText(msg, 1);
963
964 event.Skip();
965}
966
9f3362c4
VZ
967void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
968{
969 // track the window which has the focus in the status bar
970 static wxWindow *s_windowFocus = (wxWindow *)NULL;
971 wxWindow *focus = wxWindow::FindFocus();
972 if ( focus && (focus != s_windowFocus) )
973 {
974 s_windowFocus = focus;
975
976 wxString msg;
977 msg.Printf("Focus: wxWindow = %p"
978#ifdef __WXMSW__
ec9f7884 979 ", HWND = %08x"
9f3362c4 980#endif // wxMSW
ec9f7884 981 , s_windowFocus
9f3362c4 982#ifdef __WXMSW__
ec9f7884 983 , s_windowFocus->GetHWND()
9f3362c4
VZ
984#endif // wxMSW
985 );
986
987 SetStatusText(msg);
988 }
341c92a8 989}