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