]> git.saurik.com Git - wxWidgets.git/blob - samples/controls/controls.cpp
588bc7527c30040e1ca8bfb894201faa2cb190f7
[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 #include "wx/clipbrd.h"
31 #include "wx/tooltip.h"
32
33 #if defined(__WXGTK__) || defined(__WXMOTIF__)
34 #define USE_XPM
35 #endif
36
37 #ifdef USE_XPM
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"
45 #endif
46
47 //----------------------------------------------------------------------
48 // class definitions
49 //----------------------------------------------------------------------
50
51 class MyApp: public wxApp
52 {
53 public:
54 bool OnInit(void);
55 };
56
57 // a text ctrl which allows to call different wxTextCtrl functions
58 // interactively by pressing function keys in it
59 class MyTextCtrl : public wxTextCtrl
60 {
61 public:
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
68 private:
69 DECLARE_EVENT_TABLE()
70 };
71
72 class MyPanel: public wxPanel
73 {
74 public:
75
76 MyPanel(wxFrame *frame, int x, int y, int w, int h);
77 virtual ~MyPanel();
78
79 void OnSize( wxSizeEvent& event );
80 void OnListBox( wxCommandEvent &event );
81 void OnListBoxDoubleClick( wxCommandEvent &event );
82 void OnListBoxButtons( wxCommandEvent &event );
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 );
89 void OnSetFont( wxCommandEvent &event );
90 void OnPageChanged( wxNotebookEvent &event );
91 void OnSliderUpdate( wxCommandEvent &event );
92 void OnSpinUpdate( wxSpinEvent &event );
93 void OnPasteFromClipboard( wxCommandEvent &event );
94 void OnCopyToClipboard( wxCommandEvent &event );
95 void OnMoveToEndOfText( wxCommandEvent &event );
96 void OnMoveToEndOfEntry( wxCommandEvent &event );
97
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;
107 MyTextCtrl *m_multitext;
108 MyTextCtrl *m_textentry;
109 wxCheckBox *m_checkbox;
110
111 wxTextCtrl *m_text;
112 wxNotebook *m_notebook;
113
114 DECLARE_EVENT_TABLE()
115 };
116
117 class MyFrame: public wxFrame
118 {
119 public:
120
121 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
122
123 public:
124
125 void OnQuit(wxCommandEvent& event);
126 void OnAbout(wxCommandEvent& event);
127 void OnIdle( wxIdleEvent& event );
128
129 DECLARE_EVENT_TABLE()
130 };
131
132 //----------------------------------------------------------------------
133 // main()
134 //----------------------------------------------------------------------
135
136 IMPLEMENT_APP(MyApp)
137
138 //----------------------------------------------------------------------
139 // MyApp
140 //----------------------------------------------------------------------
141
142 const int MINIMAL_QUIT = 100;
143 const int MINIMAL_TEXT = 101;
144 const int MINIMAL_ABOUT = 102;
145
146 bool MyApp::OnInit(void)
147 {
148 // Create the main frame window
149 MyFrame *frame = new MyFrame((wxFrame *) NULL,
150 "Controls wxWindows App",
151 50, 50, 530, 420);
152
153 // Give it an icon
154 // The wxICON() macros loads an icon from a resource under Windows
155 // and uses an #included XPM image under GTK+ and Motif
156
157 frame->SetIcon( wxICON(mondrian) );
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);
168
169 SetTopWindow(frame);
170
171 return TRUE;
172 }
173
174 //----------------------------------------------------------------------
175 // MyTextCtrl
176 //----------------------------------------------------------------------
177
178 BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
179 EVT_CHAR(MyTextCtrl::OnChar)
180 END_EVENT_TABLE()
181
182 void 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
220 //----------------------------------------------------------------------
221 // MyPanel
222 //----------------------------------------------------------------------
223
224 const int ID_NOTEBOOK = 1000;
225
226 const int ID_LISTBOX = 130;
227 const int ID_LISTBOX_SEL_NUM = 131;
228 const int ID_LISTBOX_SEL_STR = 132;
229 const int ID_LISTBOX_CLEAR = 133;
230 const int ID_LISTBOX_APPEND = 134;
231 const int ID_LISTBOX_DELETE = 135;
232 const int ID_LISTBOX_FONT = 136;
233 const int ID_LISTBOX_ENABLE = 137;
234
235 const int ID_CHOICE = 120;
236 const int ID_CHOICE_SEL_NUM = 121;
237 const int ID_CHOICE_SEL_STR = 122;
238 const int ID_CHOICE_CLEAR = 123;
239 const int ID_CHOICE_APPEND = 124;
240 const int ID_CHOICE_DELETE = 125;
241 const int ID_CHOICE_FONT = 126;
242 const int ID_CHOICE_ENABLE = 127;
243
244 const int ID_COMBO = 140;
245 const int ID_COMBO_SEL_NUM = 141;
246 const int ID_COMBO_SEL_STR = 142;
247 const int ID_COMBO_CLEAR = 143;
248 const int ID_COMBO_APPEND = 144;
249 const int ID_COMBO_DELETE = 145;
250 const int ID_COMBO_FONT = 146;
251 const int ID_COMBO_ENABLE = 147;
252
253 const int ID_TEXT = 150;
254 const int ID_PASTE_TEXT = 151;
255 const int ID_COPY_TEXT = 152;
256 const int ID_MOVE_END_ENTRY = 153;
257 const int ID_MOVE_END_ZONE = 154;
258
259 const int ID_RADIOBOX = 160;
260 const int ID_RADIOBOX_SEL_NUM = 161;
261 const int ID_RADIOBOX_SEL_STR = 162;
262 const int ID_RADIOBOX_FONT = 163;
263 const int ID_RADIOBOX_ENABLE = 164;
264
265 const int ID_RADIOBUTTON_1 = 166;
266 const int ID_RADIOBUTTON_2 = 167;
267
268 const int ID_SET_FONT = 170;
269
270 const int ID_GAUGE = 180;
271 const int ID_SLIDER = 181;
272
273 const int ID_SPIN = 182;
274
275 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
276 EVT_SIZE ( MyPanel::OnSize)
277 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
278 EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
279 EVT_LISTBOX_DCLICK(ID_LISTBOX, MyPanel::OnListBoxDoubleClick)
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)
295 EVT_COMBOBOX (ID_COMBO, MyPanel::OnCombo)
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)
309 EVT_SLIDER (ID_SLIDER, MyPanel::OnSliderUpdate)
310 EVT_SPIN (ID_SPIN, MyPanel::OnSpinUpdate)
311 EVT_BUTTON (ID_PASTE_TEXT, MyPanel::OnPasteFromClipboard)
312 EVT_BUTTON (ID_COPY_TEXT, MyPanel::OnCopyToClipboard)
313 EVT_BUTTON (ID_MOVE_END_ZONE, MyPanel::OnMoveToEndOfText)
314 EVT_BUTTON (ID_MOVE_END_ENTRY, MyPanel::OnMoveToEndOfEntry)
315 END_EVENT_TABLE()
316
317 MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) :
318 wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) )
319 {
320 // SetBackgroundColour("cadet blue");
321
322 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
323 // m_text->SetBackgroundColour("wheat");
324
325 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
326
327 wxString choices[] =
328 {
329 "This",
330 "is one of my",
331 "really",
332 "wonderful",
333 "examples."
334 };
335
336 #ifdef USE_XPM
337 // image ids
338 enum
339 {
340 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max
341 };
342
343 // fill the image list
344 wxImageList *imagelist = new wxImageList(32, 32);
345
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 ));
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
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
388 #endif
389
390 wxButton *button = (wxButton*) NULL; /* who did this ? */
391 wxPanel *panel = (wxPanel*) NULL;
392
393 panel = new wxPanel(m_notebook);
394 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 5, choices );
395 m_listbox->SetToolTip( "This is a list box" );
396
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) );
399 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );
400 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
401 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
402 button = new wxButton( panel, ID_LISTBOX_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
403 button->SetToolTip( "Press here to set italic font" );
404
405 m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, "Disable", wxPoint(20,130), wxSize(140,30) );
406 m_checkbox->SetValue(FALSE);
407 m_checkbox->SetToolTip( "Click here to disable the listbox" );
408 m_notebook->AddPage(panel, "wxList", TRUE, Image_List);
409
410 panel = new wxPanel(m_notebook);
411 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 5, choices );
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) );
416 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
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) );
419 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
420
421 panel = new wxPanel(m_notebook);
422 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(120,-1), 5, choices );
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) );
427 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
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) );
430 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
431
432 panel = new wxPanel(m_notebook);
433 m_textentry = new MyTextCtrl( panel, -1, "Write text here.", wxPoint(10,10), wxSize(320,28),
434 wxTE_PROCESS_ENTER);
435 (*m_textentry) << " More text.";
436 m_multitext = new MyTextCtrl( panel, ID_TEXT, "And here.", wxPoint(10,50), wxSize(320,70),
437 wxTE_MULTILINE );
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);
441
442 (void)new wxStaticBox( panel, -1, "&Move cursor to the end of:",
443 wxPoint(345, 0), wxSize(160, 100) );
444 (void)new wxButton(panel, ID_MOVE_END_ENTRY, "Text &entry",
445 wxPoint(370, 20), wxSize(110, 30));
446 (void)new wxButton(panel, ID_MOVE_END_ZONE, "Text &zone",
447 wxPoint(370, 60), wxSize(110, 30));
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) );
451 m_notebook->AddPage(panel, "wxTextCtrl" , FALSE, Image_Text);
452
453 wxString choices2[] =
454 {
455 "Wonderful",
456 "examples.",
457 };
458
459 panel = new wxPanel(m_notebook);
460 (void)new wxRadioBox( panel, ID_RADIOBOX, "That", wxPoint(10,160), wxSize(-1,-1), 2, choices2, 1, wxRA_SPECIFY_ROWS );
461 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), 5, choices, 1, wxRA_SPECIFY_COLS );
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) );
464 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
465 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
466 (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
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) );
470 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
471
472 panel = new wxPanel(m_notebook);
473 (void)new wxStaticBox( panel, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
474 m_gauge = new wxGauge( panel, -1, 200, wxPoint(18,50), wxSize(155, 30) );
475 m_slider = new wxSlider( panel, ID_SLIDER, 0, 0, 200, wxPoint(18,90), wxSize(155,-1) );
476 (void)new wxStaticBox( panel, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
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
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"
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",
492 wxPoint(208,25),
493 wxSize(250, 110)
494 );
495 #endif
496 m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) );
497 m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
498 m_spinbutton->SetRange(0,100);
499 m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge);
500 }
501
502 void MyPanel::OnPasteFromClipboard( wxCommandEvent &WXUNUSED(event) )
503 {
504 #ifdef __WXGTK__
505
506 if (!wxTheClipboard->Open())
507 {
508 *m_text << "Error opening the clipboard." << "\n";
509
510 return;
511 }
512 else
513 {
514 *m_text << "Successfully opened the clipboard." << "\n";
515 }
516
517 wxTextDataObject data;
518
519 if (wxTheClipboard->IsSupported( data ))
520 {
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 }
532 }
533 else
534 {
535 *m_text << "Clipboard doesn't support requested format." << "\n";
536 }
537
538 wxTheClipboard->Close();
539
540 *m_text << "Closed the clipboard." << "\n";
541
542 #endif
543 }
544
545 void MyPanel::OnCopyToClipboard( wxCommandEvent &WXUNUSED(event) )
546 {
547 #ifdef __WXGTK__
548
549 wxString text( m_multitext->GetLineText(0) );
550
551 if (text.IsEmpty()) return;
552
553 if (!wxTheClipboard->Open())
554 {
555 *m_text << "Error opening the clipboard." << "\n";
556
557 return;
558 }
559 else
560 {
561 *m_text << "Successfully opened the clipboard." << "\n";
562 }
563
564 wxTextDataObject *data = new wxTextDataObject( text );
565
566 if (!wxTheClipboard->SetData( data ))
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();
576
577 *m_text << "Closed the clipboard." << "\n";
578
579 #endif
580 }
581
582 void MyPanel::OnMoveToEndOfText( wxCommandEvent &event )
583 {
584 m_multitext->SetInsertionPointEnd();
585 m_multitext->SetFocus();
586 }
587
588 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent &event )
589 {
590 m_textentry->SetInsertionPointEnd();
591 m_textentry->SetFocus();
592 }
593
594 void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
595 {
596 int x = 0;
597 int y = 0;
598 GetClientSize( &x, &y );
599
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 );
602 }
603
604 void MyPanel::OnPageChanged( wxNotebookEvent &event )
605 {
606 *m_text << "Notebook selection is " << event.GetSelection() << "\n";
607 }
608
609 void MyPanel::OnListBox( wxCommandEvent &event )
610 {
611 m_text->WriteText( "ListBox selection string is: " );
612 m_text->WriteText( event.GetString() );
613 m_text->WriteText( "\n" );
614 }
615
616 void 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
623 void MyPanel::OnListBoxButtons( wxCommandEvent &event )
624 {
625 switch (event.GetId())
626 {
627 case ID_LISTBOX_ENABLE:
628 {
629 m_text->WriteText("Checkbox clicked.\n");
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" );
635 m_listbox->Enable( event.GetInt() == 0 );
636 break;
637 }
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 }
658 case ID_LISTBOX_DELETE:
659 {
660 int idx = m_listbox->GetSelection();
661 m_listbox->Delete( idx );
662 break;
663 }
664 case ID_LISTBOX_FONT:
665 {
666 m_listbox->SetFont( *wxITALIC_FONT );
667 m_checkbox->SetFont( *wxITALIC_FONT );
668 break;
669 }
670 }
671 }
672
673 void 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
680 void MyPanel::OnChoiceButtons( wxCommandEvent &event )
681 {
682 switch (event.GetId())
683 {
684 case ID_CHOICE_ENABLE:
685 {
686 m_choice->Enable( event.GetInt() == 0 );
687 break;
688 }
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 }
709 case ID_CHOICE_DELETE:
710 {
711 int idx = m_choice->GetSelection();
712 m_choice->Delete( idx );
713 break;
714 }
715 case ID_CHOICE_FONT:
716 {
717 m_choice->SetFont( *wxITALIC_FONT );
718 break;
719 }
720 }
721 }
722
723 void 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
730 void MyPanel::OnComboButtons( wxCommandEvent &event )
731 {
732 switch (event.GetId())
733 {
734 case ID_COMBO_ENABLE:
735 {
736 m_combo->Enable( event.GetInt() == 0 );
737 break;
738 }
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 }
759 case ID_COMBO_DELETE:
760 {
761 int idx = m_combo->GetSelection();
762 m_combo->Delete( idx );
763 break;
764 }
765 case ID_COMBO_FONT:
766 {
767 m_combo->SetFont( *wxITALIC_FONT );
768 break;
769 }
770 }
771 }
772
773 void 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
780 void MyPanel::OnRadioButtons( wxCommandEvent &event )
781 {
782 switch (event.GetId())
783 {
784 case ID_RADIOBOX_ENABLE:
785 {
786 m_radio->Enable( event.GetInt() == 0 );
787 break;
788 }
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 }
799 case ID_RADIOBOX_FONT:
800 {
801 m_radio->SetFont( *wxITALIC_FONT );
802 break;
803 }
804 }
805 }
806
807 void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
808 {
809 m_fontButton->SetFont( *wxITALIC_FONT );
810 m_text->SetFont( *wxITALIC_FONT );
811 }
812
813 void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
814 {
815 m_gauge->SetValue( m_slider->GetValue() );
816 }
817
818 void MyPanel::OnSpinUpdate( wxSpinEvent &event )
819 {
820 wxString value;
821 value.sprintf( "%d", (int)event.GetPosition() );
822 m_spintext->SetValue( value );
823 }
824
825 MyPanel::~MyPanel()
826 {
827 delete m_notebook->GetImageList();
828 }
829
830 //----------------------------------------------------------------------
831 // MyFrame
832 //----------------------------------------------------------------------
833
834 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
835 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
836 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
837 EVT_IDLE(MyFrame::OnIdle)
838 END_EVENT_TABLE()
839
840 MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
841 : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
842 {
843 CreateStatusBar();
844
845 (void)new MyPanel( this, 10, 10, 300, 100 );
846 }
847
848 void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
849 {
850 Close(TRUE);
851 }
852
853 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
854 {
855 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
856 dialog.ShowModal();
857 }
858
859 void 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 }