]> git.saurik.com Git - wxWidgets.git/blob - samples/controls/controls.cpp
3a6139014e291ea0681c98214365ec88a06b8f91
[wxWidgets.git] / samples / controls / controls.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: controls.cpp
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
5 // Modified by:
6 // RCS-ID: $Id$
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifdef __GNUG__
12 #pragma implementation "controls.h"
13 #endif
14
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
17
18 #ifdef __BORLANDC__
19 #pragma hdrstop
20 #endif
21
22 #ifndef WX_PRECOMP
23 #include "wx/wx.h"
24 #endif
25
26 #include "wx/spinbutt.h"
27 #include "wx/notebook.h"
28 #include "wx/imaglist.h"
29 #include "wx/spinbutt.h"
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
39
40 #if defined(__WXGTK__) || defined(__WXMOTIF__)
41 #define USE_XPM
42 #endif
43
44 #ifdef USE_XPM
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"
52 #endif
53
54 //----------------------------------------------------------------------
55 // class definitions
56 //----------------------------------------------------------------------
57
58 class MyApp: public wxApp
59 {
60 public:
61 bool OnInit();
62 };
63
64 // a text ctrl which allows to call different wxTextCtrl functions
65 // interactively by pressing function keys in it
66 class MyTextCtrl : public wxTextCtrl
67 {
68 public:
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
73 void OnKeyDown(wxKeyEvent& event);
74
75 private:
76 DECLARE_EVENT_TABLE()
77 };
78
79 class MyPanel: public wxPanel
80 {
81 public:
82 MyPanel(wxFrame *frame, int x, int y, int w, int h);
83 virtual ~MyPanel();
84
85 void OnSize( wxSizeEvent& event );
86 void OnListBox( wxCommandEvent &event );
87 void OnListBoxDoubleClick( wxCommandEvent &event );
88 void OnListBoxButtons( wxCommandEvent &event );
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 );
95 void OnSetFont( wxCommandEvent &event );
96 void OnPageChanged( wxNotebookEvent &event );
97 void OnSliderUpdate( wxCommandEvent &event );
98 void OnSpinUpdate( wxSpinEvent &event );
99 void OnPasteFromClipboard( wxCommandEvent &event );
100 void OnCopyToClipboard( wxCommandEvent &event );
101 void OnMoveToEndOfText( wxCommandEvent &event );
102 void OnMoveToEndOfEntry( wxCommandEvent &event );
103
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;
113 MyTextCtrl *m_multitext;
114 MyTextCtrl *m_textentry;
115 wxCheckBox *m_checkbox;
116
117 wxTextCtrl *m_text;
118 wxNotebook *m_notebook;
119
120 private:
121 DECLARE_EVENT_TABLE()
122 };
123
124 class MyFrame: public wxFrame
125 {
126 public:
127 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
128
129 void OnQuit(wxCommandEvent& event);
130 void OnAbout(wxCommandEvent& event);
131 #if wxUSE_TOOLTIPS
132 void OnSetTooltipDelay(wxCommandEvent& event);
133 void OnToggleTooltips(wxCommandEvent& event);
134 #endif // wxUSE_TOOLTIPS
135 void OnIdle( wxIdleEvent& event );
136 void OnSize( wxSizeEvent& event );
137
138 private:
139 DECLARE_EVENT_TABLE()
140 };
141
142 //----------------------------------------------------------------------
143 // main()
144 //----------------------------------------------------------------------
145
146 IMPLEMENT_APP(MyApp)
147
148 //----------------------------------------------------------------------
149 // MyApp
150 //----------------------------------------------------------------------
151
152 enum
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 };
162
163 bool MyApp::OnInit()
164 {
165 // Create the main frame window
166 MyFrame *frame = new MyFrame((wxFrame *) NULL,
167 "Controls wxWindows App",
168 50, 50, 530, 420);
169
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
173
174 frame->SetIcon( wxICON(mondrian) );
175
176 wxMenu *file_menu = new wxMenu;
177 file_menu->Append(MINIMAL_ABOUT, "&About");
178 file_menu->Append(MINIMAL_QUIT, "E&xit");
179
180 wxMenuBar *menu_bar = new wxMenuBar;
181 menu_bar->Append(file_menu, "&File");
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
193 frame->SetMenuBar(menu_bar);
194
195 frame->Show(TRUE);
196
197 SetTopWindow(frame);
198
199 return TRUE;
200 }
201
202 //----------------------------------------------------------------------
203 // MyTextCtrl
204 //----------------------------------------------------------------------
205
206 BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
207 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown)
208 END_EVENT_TABLE()
209
210 void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
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
248 //----------------------------------------------------------------------
249 // MyPanel
250 //----------------------------------------------------------------------
251
252 const int ID_NOTEBOOK = 1000;
253
254 const int ID_LISTBOX = 130;
255 const int ID_LISTBOX_SEL_NUM = 131;
256 const int ID_LISTBOX_SEL_STR = 132;
257 const int ID_LISTBOX_CLEAR = 133;
258 const int ID_LISTBOX_APPEND = 134;
259 const int ID_LISTBOX_DELETE = 135;
260 const int ID_LISTBOX_FONT = 136;
261 const int ID_LISTBOX_ENABLE = 137;
262
263 const int ID_CHOICE = 120;
264 const int ID_CHOICE_SEL_NUM = 121;
265 const int ID_CHOICE_SEL_STR = 122;
266 const int ID_CHOICE_CLEAR = 123;
267 const int ID_CHOICE_APPEND = 124;
268 const int ID_CHOICE_DELETE = 125;
269 const int ID_CHOICE_FONT = 126;
270 const int ID_CHOICE_ENABLE = 127;
271
272 const int ID_COMBO = 140;
273 const int ID_COMBO_SEL_NUM = 141;
274 const int ID_COMBO_SEL_STR = 142;
275 const int ID_COMBO_CLEAR = 143;
276 const int ID_COMBO_APPEND = 144;
277 const int ID_COMBO_DELETE = 145;
278 const int ID_COMBO_FONT = 146;
279 const int ID_COMBO_ENABLE = 147;
280
281 const int ID_TEXT = 150;
282 const int ID_PASTE_TEXT = 151;
283 const int ID_COPY_TEXT = 152;
284 const int ID_MOVE_END_ENTRY = 153;
285 const int ID_MOVE_END_ZONE = 154;
286
287 const int ID_RADIOBOX = 160;
288 const int ID_RADIOBOX_SEL_NUM = 161;
289 const int ID_RADIOBOX_SEL_STR = 162;
290 const int ID_RADIOBOX_FONT = 163;
291 const int ID_RADIOBOX_ENABLE = 164;
292
293 const int ID_RADIOBUTTON_1 = 166;
294 const int ID_RADIOBUTTON_2 = 167;
295
296 const int ID_SET_FONT = 170;
297
298 const int ID_GAUGE = 180;
299 const int ID_SLIDER = 181;
300
301 const int ID_SPIN = 182;
302
303 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
304 EVT_SIZE ( MyPanel::OnSize)
305 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
306 EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
307 EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
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)
323 EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
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)
337 EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
338 EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
339 EVT_BUTTON (ID_PASTE_TEXT, MyPanel::OnPasteFromClipboard)
340 EVT_BUTTON (ID_COPY_TEXT, MyPanel::OnCopyToClipboard)
341 EVT_BUTTON (ID_MOVE_END_ZONE, MyPanel::OnMoveToEndOfText)
342 EVT_BUTTON (ID_MOVE_END_ENTRY, MyPanel::OnMoveToEndOfEntry)
343 END_EVENT_TABLE()
344
345 MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
346 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) ),
347 m_text(NULL), m_notebook(NULL)
348 {
349 // SetBackgroundColour("cadet blue");
350
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");
353
354 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
355
356 wxString choices[] =
357 {
358 "This",
359 "is one of my",
360 "really",
361 "wonderful",
362 "examples."
363 };
364
365 #ifdef USE_XPM
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);
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 };
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);
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
417 #endif
418
419 wxButton *button = (wxButton*) NULL; /* who did this ? */
420 wxPanel *panel = (wxPanel*) NULL;
421
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);
425 #if wxUSE_TOOLTIPS
426 m_listbox->SetToolTip( "This is a list box" );
427 #endif // wxUSE_TOOLTIPS
428
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) );
435 #if wxUSE_TOOLTIPS
436 button->SetToolTip( "Press here to set italic font" );
437 #endif // wxUSE_TOOLTIPS
438
439 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
440 m_checkbox->SetValue(FALSE);
441 #if wxUSE_TOOLTIPS
442 m_checkbox->SetToolTip( "Click here to disable the listbox" );
443 #endif // wxUSE_TOOLTIPS
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);
485 #if wxUSE_TOOLTIPS
486 m_multitext->AppendText( "\nThis ctrl has a tooltip. " );
487 m_multitext->SetToolTip("Press F1 here.");
488 #endif // wxUSE_TOOLTIPS
489
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) );
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
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 );
540 #endif
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);
545 }
546
547 void MyPanel::OnPasteFromClipboard( wxCommandEvent &WXUNUSED(event) )
548 {
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
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";
589 #else
590 wxLogError("Your version of wxWindows is compiled without clipboard support.");
591 #endif
592 }
593
594 void MyPanel::OnCopyToClipboard( wxCommandEvent &WXUNUSED(event) )
595 {
596 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
597 wxString text( m_multitext->GetLineText(0) );
598
599 if (text.IsEmpty())
600 {
601 *m_text << "No text to copy.\n";
602
603 return;
604 }
605
606 if (!wxTheClipboard->Open())
607 {
608 *m_text << "Error opening the clipboard.\n";
609
610 return;
611 }
612 else
613 {
614 *m_text << "Successfully opened the clipboard.\n";
615 }
616
617 wxTextDataObject *data = new wxTextDataObject( text );
618
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 }
627
628 wxTheClipboard->Close();
629
630 *m_text << "Closed the clipboard.\n";
631 #else
632 wxLogError("Your version of wxWindows is compiled without clipboard support.");
633 #endif
634 }
635
636 void MyPanel::OnMoveToEndOfText( wxCommandEvent &event )
637 {
638 m_multitext->SetInsertionPointEnd();
639 m_multitext->SetFocus();
640 }
641
642 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent &event )
643 {
644 m_textentry->SetInsertionPointEnd();
645 m_textentry->SetFocus();
646 }
647
648 void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
649 {
650 int x = 0;
651 int y = 0;
652 GetClientSize( &x, &y );
653
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 );
656 }
657
658 void MyPanel::OnPageChanged( wxNotebookEvent &event )
659 {
660 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
661 }
662
663 void MyPanel::OnListBox( wxCommandEvent &event )
664 {
665 m_text->AppendText( "ListBox selection string is: " );
666 m_text->AppendText( event.GetString() );
667 m_text->AppendText( "\n" );
668 }
669
670 void MyPanel::OnListBoxDoubleClick( wxCommandEvent &event )
671 {
672 m_text->AppendText( "ListBox double click string is: " );
673 m_text->AppendText( event.GetString() );
674 m_text->AppendText( "\n" );
675 }
676
677 void MyPanel::OnListBoxButtons( wxCommandEvent &event )
678 {
679 switch (event.GetId())
680 {
681 case ID_LISTBOX_ENABLE:
682 {
683 m_text->AppendText("Checkbox clicked.\n");
684 wxCheckBox *cb = (wxCheckBox*)event.GetEventObject();
685 #if wxUSE_TOOLTIPS
686 if (event.GetInt())
687 cb->SetToolTip( "Click to enable listbox" );
688 else
689 cb->SetToolTip( "Click to disable listbox" );
690 #endif // wxUSE_TOOLTIPS
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 }
726 }
727 }
728
729 void MyPanel::OnChoice( wxCommandEvent &event )
730 {
731 m_text->AppendText( "Choice selection string is: " );
732 m_text->AppendText( event.GetString() );
733 m_text->AppendText( "\n" );
734 }
735
736 void MyPanel::OnChoiceButtons( wxCommandEvent &event )
737 {
738 switch (event.GetId())
739 {
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 }
776 }
777 }
778
779 void MyPanel::OnCombo( wxCommandEvent &event )
780 {
781 m_text->AppendText( "ComboBox selection string is: " );
782 m_text->AppendText( event.GetString() );
783 m_text->AppendText( "\n" );
784 }
785
786 void MyPanel::OnComboButtons( wxCommandEvent &event )
787 {
788 switch (event.GetId())
789 {
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 }
826 }
827 }
828
829 void MyPanel::OnRadio( wxCommandEvent &event )
830 {
831 m_text->AppendText( "RadioBox selection string is: " );
832 m_text->AppendText( event.GetString() );
833 m_text->AppendText( "\n" );
834 }
835
836 void MyPanel::OnRadioButtons( wxCommandEvent &event )
837 {
838 switch (event.GetId())
839 {
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 }
860 }
861 }
862
863 void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
864 {
865 m_fontButton->SetFont( *wxITALIC_FONT );
866 m_text->SetFont( *wxITALIC_FONT );
867 }
868
869 void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
870 {
871 m_gauge->SetValue( m_slider->GetValue() );
872 }
873
874 void MyPanel::OnSpinUpdate( wxSpinEvent &event )
875 {
876 wxString value;
877 value.sprintf( "%d", (int)event.GetPosition() );
878 m_spintext->SetValue( value );
879 }
880
881 MyPanel::~MyPanel()
882 {
883 delete m_notebook->GetImageList();
884 }
885
886 //----------------------------------------------------------------------
887 // MyFrame
888 //----------------------------------------------------------------------
889
890 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
891 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
892 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
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
897 EVT_SIZE(MyFrame::OnSize)
898 EVT_IDLE(MyFrame::OnIdle)
899 END_EVENT_TABLE()
900
901 MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
902 : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
903 {
904 CreateStatusBar(2);
905
906 (void)new MyPanel( this, 10, 10, 300, 100 );
907 }
908
909 void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
910 {
911 Close(TRUE);
912 }
913
914 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
915 {
916 wxBeginBusyCursor();
917
918 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
919 dialog.ShowModal();
920
921 wxEndBusyCursor();
922 }
923
924 #if wxUSE_TOOLTIPS
925 void 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)",
933 "Set tooltip delay",
934 delay,
935 this);
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
946 void 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
958 void 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
967 void 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__
979 ", HWND = %08x"
980 #endif // wxMSW
981 , s_windowFocus
982 #ifdef __WXMSW__
983 , s_windowFocus->GetHWND()
984 #endif // wxMSW
985 );
986
987 SetStatusText(msg);
988 }
989 }