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