]> git.saurik.com Git - wxWidgets.git/blame - samples/controls/controls.cpp
A couple of identifiers at global level moved to the .cpp file from .h where
[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
RR
164{
165 // Create the main frame window
655822f3
VZ
166 MyFrame *frame = new MyFrame((wxFrame *) NULL,
167 "Controls wxWindows App",
168 50, 50, 530, 420);
169
1c005ff7 170 // Give it an icon
e52f60e6
RR
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
e52f60e6 174 frame->SetIcon( wxICON(mondrian) );
1c005ff7
RR
175
176 wxMenu *file_menu = new wxMenu;
1c005ff7
RR
177 file_menu->Append(MINIMAL_ABOUT, "&About");
178 file_menu->Append(MINIMAL_QUIT, "E&xit");
16f6dfd8 179
1c005ff7
RR
180 wxMenuBar *menu_bar = new wxMenuBar;
181 menu_bar->Append(file_menu, "&File");
16f6dfd8
VZ
182
183#if wxUSE_TOOLTIPS
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");
191#endif // wxUSE_TOOLTIPS
192
1c005ff7
RR
193 frame->SetMenuBar(menu_bar);
194
195 frame->Show(TRUE);
655822f3 196
1c005ff7
RR
197 SetTopWindow(frame);
198
199 return TRUE;
200}
201
6085b116
VZ
202//----------------------------------------------------------------------
203// MyTextCtrl
204//----------------------------------------------------------------------
205
206BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
5fb9fcfc 207 EVT_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"
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());
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)
cb43b372 304 EVT_SIZE ( MyPanel::OnSize)
655822f3 305 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
cb43b372 306 EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
5b077d48 307 EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
cb43b372
RR
308 EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
309 EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
310 EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
311 EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
312 EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
313 EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
314 EVT_CHECKBOX (ID_LISTBOX_ENABLE, MyPanel::OnListBoxButtons)
315 EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
316 EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
317 EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
318 EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
319 EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
320 EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
321 EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
322 EVT_CHECKBOX (ID_CHOICE_ENABLE, MyPanel::OnChoiceButtons)
b1170810 323 EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
cb43b372
RR
324 EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
325 EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
326 EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
327 EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
328 EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
329 EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
330 EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
331 EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
332 EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
333 EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
334 EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
335 EVT_CHECKBOX (ID_RADIOBOX_ENABLE, MyPanel::OnRadioButtons)
336 EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
7bce6aec 337 EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
e380f72b 338 EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
b527aac5
RR
339 EVT_BUTTON (ID_PASTE_TEXT, MyPanel::OnPasteFromClipboard)
340 EVT_BUTTON (ID_COPY_TEXT, MyPanel::OnCopyToClipboard)
d59051dd
VZ
341 EVT_BUTTON (ID_MOVE_END_ZONE, MyPanel::OnMoveToEndOfText)
342 EVT_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 )
f5d01a1c
VZ
346 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
347 m_text(NULL), m_notebook(NULL)
1c005ff7 348{
5b077d48 349// SetBackgroundColour("cadet blue");
a81258be 350
1c005ff7 351 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
5b077d48 352// m_text->SetBackgroundColour("wheat");
655822f3 353
53b28675 354 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
655822f3 355
53010e52 356 wxString choices[] =
1c005ff7
RR
357 {
358 "This",
c67d8618
RR
359 "is one of my",
360 "really",
e8435fa3 361 "wonderful",
9838df2c 362 "examples."
1c005ff7 363 };
655822f3 364
4fabb575 365#ifdef USE_XPM
73c700fd 366 // image ids
2cb21a45
VZ
367 enum
368 {
58614078 369 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
2cb21a45 370 };
655822f3 371
fc54776e 372 // fill the image list
2cb21a45 373 wxImageList *imagelist = new wxImageList(32, 32);
4fabb575 374
35178437
RR
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 ));
73c700fd
VZ
381 m_notebook->SetImageList(imagelist);
382#elif defined(__WXMSW__)
383 // load images from resources
384 enum
385 {
386 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
387 };
8eab4bae 388 wxImageList *imagelist = new wxImageList(16, 16, FALSE, Image_Max);
73c700fd
VZ
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
4fabb575
JS
405 m_notebook->SetImageList(imagelist);
406#else
407
408// No images for now
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
291a8f20 419 wxButton *button = (wxButton*) NULL; /* who did this ? */
58614078 420 wxPanel *panel = (wxPanel*) NULL;
9838df2c 421
58614078 422 panel = new wxPanel(m_notebook);
c67d8618 423 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 5, choices );
b8653fbf 424#if wxUSE_TOOLTIPS
b1170810 425 m_listbox->SetToolTip( "This is a list box" );
16f6dfd8 426#endif // wxUSE_TOOLTIPS
9f3362c4 427
d3904ceb
RR
428 (void)new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
429 (void)new wxButton( panel, ID_LISTBOX_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
f96aa4d9 430 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
d3904ceb 431 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
30f82ea4 432 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
a81258be 433 button = new wxButton( panel, ID_LISTBOX_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
b8653fbf 434#if wxUSE_TOOLTIPS
b1170810 435 button->SetToolTip( "Press here to set italic font" );
16f6dfd8 436#endif // wxUSE_TOOLTIPS
b1170810 437
ae0bdb01 438 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
8bf45ed1 439 m_checkbox->SetValue(FALSE);
b8653fbf 440#if wxUSE_TOOLTIPS
b1170810 441 m_checkbox->SetToolTip( "Click here to disable the listbox" );
16f6dfd8 442#endif // wxUSE_TOOLTIPS
acbd13a3 443 m_notebook->AddPage(panel, "wxListBox", TRUE, Image_List);
655822f3 444
4bf58c62 445 panel = new wxPanel(m_notebook);
c67d8618 446 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
d3904ceb
RR
447 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
448 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
449 (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
450 (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
2f6407b9 451 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
d3904ceb
RR
452 (void)new wxButton( panel, ID_CHOICE_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
453 (void)new wxCheckBox( panel, ID_CHOICE_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
2cb21a45 454 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
655822f3 455
4bf58c62 456 panel = new wxPanel(m_notebook);
c67d8618 457 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices );
d3904ceb
RR
458 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
459 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
460 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
461 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
2f6407b9 462 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
d3904ceb
RR
463 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
464 (void)new wxCheckBox( panel, ID_COMBO_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
2cb21a45 465 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
655822f3 466
f96aa4d9 467 panel = new wxPanel(m_notebook);
c46554be 468 m_textentry = new MyTextCtrl( panel, -1, "Some text.", wxPoint(10,10), wxSize(320,28),
1f916a19
JS
469 //0);
470 wxTE_PROCESS_ENTER);
c46554be 471 (*m_textentry) << " Appended.";
5fb9fcfc 472 m_textentry->SetInsertionPoint(0);
c46554be 473 m_textentry->WriteText( "Prepended. " );
5fb9fcfc 474
c46554be 475 m_multitext = new MyTextCtrl( panel, ID_TEXT, "Some text.", wxPoint(10,50), wxSize(320,70),
9f3362c4 476 wxTE_MULTILINE );
c46554be
RR
477 (*m_multitext) << " Appended.";
478 m_multitext->SetInsertionPoint(0);
479 m_multitext->WriteText( "Prepended. " );
480 m_multitext->AppendText( "\nPress function keys to test different \nwxTextCtrl functions." );
16f6dfd8 481
291a8f20
RR
482 new MyTextCtrl( panel, -1, "This one is with wxTE_PROCESS_TAB style.",
483 wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE | wxTE_PROCESS_TAB);
16f6dfd8
VZ
484#if wxUSE_TOOLTIPS
485 m_multitext->AppendText( "\nThis ctrl has a tooltip. " );
486 m_multitext->SetToolTip("Press F1 here.");
487#endif // wxUSE_TOOLTIPS
9f3362c4 488
2748d251
RR
489 (void)new wxStaticBox( panel, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
490 (void)new wxButton( panel, ID_MOVE_END_ENTRY, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
491 (void)new wxButton( panel, ID_MOVE_END_ZONE, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
492 (void)new wxStaticBox( panel, -1, "wx&Clipboard", wxPoint(345,110), wxSize(160,100) );
493 (void)new wxButton( panel, ID_COPY_TEXT, "C&opy line 1", wxPoint(375,130), wxSize(110,30) );
341c92a8
VZ
494 (new wxButton( panel, ID_PASTE_TEXT, "&Paste text", wxPoint(375,170), wxSize(110,30) ))
495 ->SetDefault();
2748d251 496 m_notebook->AddPage( panel, "wxTextCtrl" , FALSE, Image_Text );
655822f3 497
e5403d7c
RR
498 wxString choices2[] =
499 {
500 "Wonderful",
501 "examples.",
502 };
655822f3 503
47908e25 504 panel = new wxPanel(m_notebook);
9f3362c4 505 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), 2, choices2, 1, wxRA_SPECIFY_ROWS );
291a8f20 506 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), 5, choices, 1, wxRA_SPECIFY_COLS );
d3904ceb
RR
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) );
b527aac5 509 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
b527aac5 510 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
e5403d7c 511 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
f5d29b39
RR
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) );
2cb21a45 515 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
655822f3 516
c67d8618 517 panel = new wxPanel(m_notebook);
58614078 518 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
9838df2c 519 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
7bce6aec 520 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1) );
7bce6aec 521 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
9838df2c
JS
522#ifdef __WXMOTIF__
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 );
529#else
655822f3
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"
7bce6aec
RR
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",
9838df2c 537 wxPoint(208,25),
291a8f20 538 wxSize(250, 110)
a93109d5 539 );
9838df2c 540#endif
e380f72b 541 m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) );
e380f72b 542 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
655822f3 543 m_spinbutton->SetRange(0,100);
58614078 544 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
1c005ff7
RR
545}
546
b527aac5
RR
547void MyPanel::OnPasteFromClipboard( wxCommandEvent &WXUNUSED(event) )
548{
8e0080ee
JS
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.
552
553#if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
8b53e5a2
RR
554 if (!wxTheClipboard->Open())
555 {
b8653fbf 556 *m_text << "Error opening the clipboard.\n";
655822f3 557
8b53e5a2
RR
558 return;
559 }
560 else
561 {
b8653fbf 562 *m_text << "Successfully opened the clipboard.\n";
8b53e5a2
RR
563 }
564
75ce0581 565 wxTextDataObject data;
655822f3 566
b8653fbf 567 if (wxTheClipboard->IsSupported( data.GetFormat() ))
8b53e5a2 568 {
b8653fbf 569 *m_text << "Clipboard supports requested format.\n";
16f6dfd8 570
b8653fbf 571 if (wxTheClipboard->GetData( &data ))
75ce0581 572 {
b8653fbf 573 *m_text << "Successfully retrieved data from the clipboard.\n";
75ce0581
RR
574 *m_multitext << data.GetText() << "\n";
575 }
576 else
577 {
b8653fbf 578 *m_text << "Error getting data from the clipboard.\n";
75ce0581 579 }
8b53e5a2
RR
580 }
581 else
582 {
b8653fbf 583 *m_text << "Clipboard doesn't support requested format.\n";
8b53e5a2 584 }
655822f3 585
8b53e5a2 586 wxTheClipboard->Close();
655822f3 587
b8653fbf 588 *m_text << "Closed the clipboard.\n";
341c92a8 589#else
b8653fbf 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
3069ac4e
RR
597 wxString text( m_multitext->GetLineText(0) );
598
b8653fbf
VZ
599 if (text.IsEmpty())
600 {
601 *m_text << "No text to copy.\n";
602
603 return;
604 }
655822f3 605
8b53e5a2
RR
606 if (!wxTheClipboard->Open())
607 {
b8653fbf 608 *m_text << "Error opening the clipboard.\n";
655822f3 609
8b53e5a2
RR
610 return;
611 }
612 else
613 {
b8653fbf 614 *m_text << "Successfully opened the clipboard.\n";
8b53e5a2 615 }
3069ac4e 616
0d2a2b60 617 wxTextDataObject *data = new wxTextDataObject( text );
0d2a2b60 618
75ce0581 619 if (!wxTheClipboard->SetData( data ))
8b53e5a2 620 {
b8653fbf 621 *m_text << "Error while copying to the clipboard.\n";
8b53e5a2
RR
622 }
623 else
624 {
b8653fbf 625 *m_text << "Successfully copied data to the clipboard.\n";
8b53e5a2
RR
626 }
627
628 wxTheClipboard->Close();
655822f3 629
b8653fbf
VZ
630 *m_text << "Closed the clipboard.\n";
631#else
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{
650 int x = 0;
651 int y = 0;
652 GetClientSize( &x, &y );
655822f3 653
2f6407b9
RR
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{
660 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
661}
662
1c005ff7
RR
663void MyPanel::OnListBox( wxCommandEvent &event )
664{
5fb9fcfc
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{
5fb9fcfc
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{
679 switch (event.GetId())
680 {
d3904ceb
RR
681 case ID_LISTBOX_ENABLE:
682 {
5fb9fcfc 683 m_text->AppendText("Checkbox clicked.\n");
301cd871 684 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
b8653fbf 685#if wxUSE_TOOLTIPS
301cd871
RR
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
655822f3 691 m_listbox->Enable( event.GetInt() == 0 );
d3904ceb
RR
692 break;
693 }
47908e25
RR
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 }
30f82ea4
RR
714 case ID_LISTBOX_DELETE:
715 {
716 int idx = m_listbox->GetSelection();
717 m_listbox->Delete( idx );
718 break;
719 }
868a2826
RR
720 case ID_LISTBOX_FONT:
721 {
722 m_listbox->SetFont( *wxITALIC_FONT );
ae0bdb01 723 m_checkbox->SetFont( *wxITALIC_FONT );
868a2826
RR
724 break;
725 }
47908e25
RR
726 }
727}
728
729void MyPanel::OnChoice( wxCommandEvent &event )
730{
5fb9fcfc
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{
738 switch (event.GetId())
739 {
d3904ceb
RR
740 case ID_CHOICE_ENABLE:
741 {
655822f3 742 m_choice->Enable( event.GetInt() == 0 );
d3904ceb
RR
743 break;
744 }
47908e25
RR
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 }
2f6407b9
RR
765 case ID_CHOICE_DELETE:
766 {
767 int idx = m_choice->GetSelection();
768 m_choice->Delete( idx );
769 break;
770 }
868a2826
RR
771 case ID_CHOICE_FONT:
772 {
773 m_choice->SetFont( *wxITALIC_FONT );
774 break;
775 }
47908e25
RR
776 }
777}
778
779void MyPanel::OnCombo( wxCommandEvent &event )
780{
5fb9fcfc
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{
47908e25
RR
788 switch (event.GetId())
789 {
d3904ceb
RR
790 case ID_COMBO_ENABLE:
791 {
655822f3 792 m_combo->Enable( event.GetInt() == 0 );
d3904ceb
RR
793 break;
794 }
47908e25
RR
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 }
2f6407b9
RR
815 case ID_COMBO_DELETE:
816 {
817 int idx = m_combo->GetSelection();
818 m_combo->Delete( idx );
819 break;
820 }
868a2826
RR
821 case ID_COMBO_FONT:
822 {
823 m_combo->SetFont( *wxITALIC_FONT );
824 break;
825 }
47908e25
RR
826 }
827}
828
829void MyPanel::OnRadio( wxCommandEvent &event )
830{
5fb9fcfc
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{
838 switch (event.GetId())
839 {
d3904ceb
RR
840 case ID_RADIOBOX_ENABLE:
841 {
655822f3 842 m_radio->Enable( event.GetInt() == 0 );
d3904ceb
RR
843 break;
844 }
47908e25
RR
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 }
868a2826
RR
855 case ID_RADIOBOX_FONT:
856 {
857 m_radio->SetFont( *wxITALIC_FONT );
858 break;
859 }
47908e25 860 }
1c005ff7
RR
861}
862
868a2826
RR
863void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
864{
865 m_fontButton->SetFont( *wxITALIC_FONT );
866 m_text->SetFont( *wxITALIC_FONT );
867}
868
7bce6aec
RR
869void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
870{
871 m_gauge->SetValue( m_slider->GetValue() );
872}
873
e380f72b
RR
874void MyPanel::OnSpinUpdate( wxSpinEvent &event )
875{
876 wxString value;
877 value.sprintf( "%d", (int)event.GetPosition() );
878 m_spintext->SetValue( value );
879}
880
2cb21a45
VZ
881MyPanel::~MyPanel()
882{
883 delete m_notebook->GetImageList();
884}
885
1c005ff7
RR
886//----------------------------------------------------------------------
887// MyFrame
888//----------------------------------------------------------------------
889
890BEGIN_EVENT_TABLE(MyFrame, wxFrame)
891 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
892 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
16f6dfd8
VZ
893#if wxUSE_TOOLTIPS
894 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
895 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
896#endif // wxUSE_TOOLTIPS
5fb9fcfc 897 EVT_SIZE(MyFrame::OnSize)
9f3362c4 898 EVT_IDLE(MyFrame::OnIdle)
1c005ff7
RR
899END_EVENT_TABLE()
900
9f3362c4
VZ
901MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
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{
911 Close(TRUE);
912}
913
914void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
915{
916 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
917 dialog.ShowModal();
918}
9f3362c4 919
16f6dfd8
VZ
920#if wxUSE_TOOLTIPS
921void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
922{
923 static long s_delay = 5000;
924
925 wxString delay;
926 delay.Printf("%ld", s_delay);
927
928 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
929 "Set tooltip delay",
930 delay,
931 this);
932 if ( !delay )
933 return; // cancelled
934
935 sscanf(delay, "%ld", &s_delay);
936
937 wxToolTip::SetDelay(s_delay);
938
939 wxLogStatus(this, "Tooltip delay set to %ld milliseconds", s_delay);
940}
941
942void MyFrame::OnToggleTooltips(wxCommandEvent& event)
943{
944 static bool s_enabled = TRUE;
945
946 s_enabled = !s_enabled;
947
948 wxToolTip::Enable(s_enabled);
949
950 wxLogStatus(this, "Tooltips %sabled", s_enabled ? "en" : "dis");
951}
952#endif // tooltips
953
5fb9fcfc
VZ
954void MyFrame::OnSize( wxSizeEvent& event )
955{
956 wxString msg;
957 msg.Printf("%dx%d", event.GetSize().x, event.GetSize().y);
958 SetStatusText(msg, 1);
959
960 event.Skip();
961}
962
9f3362c4
VZ
963void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
964{
965 // track the window which has the focus in the status bar
966 static wxWindow *s_windowFocus = (wxWindow *)NULL;
967 wxWindow *focus = wxWindow::FindFocus();
968 if ( focus && (focus != s_windowFocus) )
969 {
970 s_windowFocus = focus;
971
972 wxString msg;
973 msg.Printf("Focus: wxWindow = %p"
974#ifdef __WXMSW__
975 ", HWND = %08x"
976#endif // wxMSW
977 , s_windowFocus
978#ifdef __WXMSW__
979 , s_windowFocus->GetHWND()
980#endif // wxMSW
981 );
982
983 SetStatusText(msg);
984 }
341c92a8 985}