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