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