]> git.saurik.com Git - wxWidgets.git/blob - samples/controls/controls.cpp
385a294f95e3fd44df84bb272e6f6eac1392fa47
[wxWidgets.git] / samples / controls / controls.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: minimal.cpp
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
5 // Modified by:
6 // RCS-ID: $Id$
7 // Copyright: (c) Robert Roebling, Julian Smart and Markus Holzem
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifdef __GNUG__
12 #pragma implementation "minimal.cpp"
13 #pragma interface "minimal.cpp"
14 #endif
15
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
18
19 #ifdef __BORLANDC__
20 #pragma hdrstop
21 #endif
22
23 #ifndef WX_PRECOMP
24 #include "wx/wx.h"
25 #endif
26
27 #include "wx/notebook.h"
28 #include "wx/imaglist.h"
29
30 #ifdef __WXGTK__
31 #include "mondrian.xpm"
32 #endif
33
34 //----------------------------------------------------------------------
35 // class definitions
36 //----------------------------------------------------------------------
37
38 class MyApp: public wxApp
39 {
40 public:
41 bool OnInit(void);
42 };
43
44 class MyPanel: public wxPanel
45 {
46 public:
47
48 MyPanel(wxFrame *frame, int x, int y, int w, int h);
49 virtual ~MyPanel();
50
51 void OnSize( wxSizeEvent& event );
52 void OnListBox( wxCommandEvent &event );
53 void OnListBoxButtons( wxCommandEvent &event );
54 void OnChoice( wxCommandEvent &event );
55 void OnChoiceButtons( wxCommandEvent &event );
56 void OnCombo( wxCommandEvent &event );
57 void OnComboButtons( wxCommandEvent &event );
58 void OnRadio( wxCommandEvent &event );
59 void OnRadioButtons( wxCommandEvent &event );
60 void OnSetFont( wxCommandEvent &event );
61
62 wxListBox *m_listbox;
63 wxChoice *m_choice;
64 wxComboBox *m_combo;
65 wxRadioBox *m_radio;
66 wxButton *m_fontButton;
67
68 wxTextCtrl *m_text;
69 wxNotebook *m_notebook;
70
71 DECLARE_EVENT_TABLE()
72 };
73
74 class MyFrame: public wxFrame
75 {
76 public:
77
78 MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
79
80 public:
81
82 void OnQuit(wxCommandEvent& event);
83 void OnAbout(wxCommandEvent& event);
84 bool OnClose(void) { return TRUE; }
85
86 DECLARE_EVENT_TABLE()
87 };
88
89 //----------------------------------------------------------------------
90 // main()
91 //----------------------------------------------------------------------
92
93 IMPLEMENT_APP (MyApp)
94
95 //----------------------------------------------------------------------
96 // MyApp
97 //----------------------------------------------------------------------
98
99 const int MINIMAL_QUIT = 100;
100 const int MINIMAL_TEXT = 101;
101 const int MINIMAL_ABOUT = 102;
102
103 bool MyApp::OnInit(void)
104 {
105 // Create the main frame window
106 MyFrame *frame = new MyFrame((wxFrame *) NULL, (char *) "Controls wxWindows App", 50, 50, 500, 420 );
107
108 // Give it an icon
109 #ifdef __WXMSW__
110 frame->SetIcon(wxIcon("mondrian"));
111 #else
112 frame->SetIcon(wxIcon( mondrian_xpm ));
113 #endif
114
115 wxMenu *file_menu = new wxMenu;
116
117 file_menu->Append(MINIMAL_ABOUT, "&About");
118 file_menu->Append(MINIMAL_QUIT, "E&xit");
119 wxMenuBar *menu_bar = new wxMenuBar;
120 menu_bar->Append(file_menu, "&File");
121 frame->SetMenuBar(menu_bar);
122
123 frame->Show(TRUE);
124
125 SetTopWindow(frame);
126
127 return TRUE;
128 }
129
130 //----------------------------------------------------------------------
131 // MyPanel
132 //----------------------------------------------------------------------
133
134 const ID_NOTEBOOK = 1000;
135
136 const ID_LISTBOX = 130;
137 const ID_LISTBOX_SEL_NUM = 131;
138 const ID_LISTBOX_SEL_STR = 132;
139 const ID_LISTBOX_CLEAR = 133;
140 const ID_LISTBOX_APPEND = 134;
141 const ID_LISTBOX_DELETE = 135;
142 const ID_LISTBOX_FONT = 136;
143
144 const ID_CHOICE = 120;
145 const ID_CHOICE_SEL_NUM = 121;
146 const ID_CHOICE_SEL_STR = 122;
147 const ID_CHOICE_CLEAR = 123;
148 const ID_CHOICE_APPEND = 124;
149 const ID_CHOICE_DELETE = 125;
150 const ID_CHOICE_FONT = 126;
151
152 const ID_COMBO = 140;
153 const ID_COMBO_SEL_NUM = 141;
154 const ID_COMBO_SEL_STR = 142;
155 const ID_COMBO_CLEAR = 143;
156 const ID_COMBO_APPEND = 144;
157 const ID_COMBO_DELETE = 145;
158 const ID_COMBO_FONT = 146;
159
160 const ID_TEXT = 150;
161
162 const ID_RADIOBOX = 160;
163 const ID_RADIOBOX_SEL_NUM = 161;
164 const ID_RADIOBOX_SEL_STR = 162;
165 const ID_RADIOBOX_FONT = 163;
166
167 const ID_SET_FONT = 170;
168
169 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
170 EVT_SIZE ( MyPanel::OnSize)
171 EVT_LISTBOX (ID_LISTBOX, MyPanel::OnListBox)
172 EVT_BUTTON (ID_LISTBOX_SEL_NUM, MyPanel::OnListBoxButtons)
173 EVT_BUTTON (ID_LISTBOX_SEL_STR, MyPanel::OnListBoxButtons)
174 EVT_BUTTON (ID_LISTBOX_CLEAR, MyPanel::OnListBoxButtons)
175 EVT_BUTTON (ID_LISTBOX_APPEND, MyPanel::OnListBoxButtons)
176 EVT_BUTTON (ID_LISTBOX_DELETE, MyPanel::OnListBoxButtons)
177 EVT_BUTTON (ID_LISTBOX_FONT, MyPanel::OnListBoxButtons)
178 EVT_CHOICE (ID_CHOICE, MyPanel::OnChoice)
179 EVT_BUTTON (ID_CHOICE_SEL_NUM, MyPanel::OnChoiceButtons)
180 EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons)
181 EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons)
182 EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons)
183 EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons)
184 EVT_BUTTON (ID_CHOICE_FONT, MyPanel::OnChoiceButtons)
185 EVT_CHOICE (ID_COMBO, MyPanel::OnCombo)
186 EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons)
187 EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons)
188 EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons)
189 EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons)
190 EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons)
191 EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
192 EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
193 EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
194 EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
195 EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
196 EVT_BUTTON (ID_SET_FONT, MyPanel::OnSetFont)
197 END_EVENT_TABLE()
198
199 MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) :
200 wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) )
201 {
202 m_text = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE );
203
204 m_notebook = new wxNotebook( this, ID_NOTEBOOK, wxPoint(0,0), wxSize(200,150) );
205
206 wxString choices[] =
207 {
208 "This",
209 "is a",
210 "wonderful",
211 "example.",
212 };
213
214 // image ids and names
215 enum
216 {
217 Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Max
218 };
219
220 const char *aIconNames[] =
221 {
222 "list.xpm", "choice.xpm", "combo.xpm", "text.xpm", "radio.xpm"
223 };
224
225 wxASSERT( WXSIZEOF(aIconNames) == Image_Max ); // keep in sync
226
227 // fill the image list
228 #ifdef __WXMSW__
229 wxString strIconDir = "icons/";
230 #else
231 wxString strIconDir = "../icons/";
232 #endif
233
234 wxImageList *imagelist = new wxImageList(32, 32);
235 for ( size_t n = 0; n < Image_Max; n++ )
236 {
237 imagelist->Add(wxBitmap(strIconDir + aIconNames[n]));
238 }
239
240 m_notebook->SetImageList(imagelist);
241
242 wxPanel *panel = new wxPanel(m_notebook);
243 m_listbox = new wxListBox( panel, ID_LISTBOX, wxPoint(10,10), wxSize(120,70), 4, choices );
244 (void)new wxButton( panel, ID_LISTBOX_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(100,30) );
245 (void)new wxButton( panel, ID_LISTBOX_SEL_STR, "Select 'This'", wxPoint(300,30), wxSize(100,30) );
246 (void)new wxButton( panel, ID_LISTBOX_CLEAR, "Clear", wxPoint(180,80), wxSize(100,30) );
247 (void)new wxButton( panel, ID_LISTBOX_APPEND, "Append 'Hi!'", wxPoint(300,80), wxSize(100,30) );
248 (void)new wxButton( panel, ID_LISTBOX_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
249 (void)new wxButton( panel, ID_LISTBOX_FONT, "Set Italic font", wxPoint(180,180), wxSize(140,30) );
250 m_notebook->AddPage(panel, "wxList", FALSE, Image_List);
251
252 panel = new wxPanel(m_notebook);
253 m_choice = new wxChoice( panel, ID_CHOICE, wxPoint(10,10), wxSize(120,-1), 4, choices );
254 (void)new wxButton( panel, ID_CHOICE_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(100,30) );
255 (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(300,30), wxSize(100,30) );
256 (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(100,30) );
257 (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(300,80), wxSize(100,30) );
258 (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
259 (void)new wxButton( panel, ID_CHOICE_FONT, "Set Italic font", wxPoint(180,180), wxSize(140,30) );
260 m_notebook->AddPage(panel, "wxChoice", FALSE, Image_Choice);
261
262 panel = new wxPanel(m_notebook);
263 m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(10,10), wxSize(170,-1), 4, choices );
264 (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(100,30) );
265 (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(300,30), wxSize(100,30) );
266 (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(100,30) );
267 (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(300,80), wxSize(100,30) );
268 (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
269 (void)new wxButton( panel, ID_COMBO_FONT, "Set Italic font", wxPoint(180,180), wxSize(140,30) );
270 m_notebook->AddPage(panel, "wxComboBox", FALSE, Image_Combo);
271
272 wxTextCtrl *text = new wxTextCtrl( m_notebook, ID_TEXT, "Write text here.", wxPoint(10,10), wxSize(120,100), wxTE_MULTILINE );
273 m_notebook->AddPage(text, "wxTextCtrl" , FALSE, Image_Text);
274
275 panel = new wxPanel(m_notebook);
276 m_radio = new wxRadioBox( panel, ID_RADIOBOX, "This", wxPoint(10,10), wxSize(-1,-1), 4, choices );
277 (void)new wxButton( panel, ID_RADIOBOX_SEL_NUM, "Select #2", wxPoint(200,30), wxSize(100,30) );
278 (void)new wxButton( panel, ID_RADIOBOX_SEL_STR, "Select 'This'", wxPoint(200,80), wxSize(100,30) );
279 (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(200,130), wxSize(160,30) );
280 m_fontButton = new wxButton( panel, ID_SET_FONT, "Set more Italic font", wxPoint(200,180), wxSize(160,30) );
281 m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
282 }
283
284 void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) )
285 {
286 int x = 0;
287 int y = 0;
288 GetClientSize( &x, &y );
289
290 if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 );
291 if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 );
292 }
293
294 void MyPanel::OnListBox( wxCommandEvent &event )
295 {
296 m_text->WriteText( "ListBox selection string is: " );
297 m_text->WriteText( event.GetString() );
298 m_text->WriteText( "\n" );
299 }
300
301 void MyPanel::OnListBoxButtons( wxCommandEvent &event )
302 {
303 switch (event.GetId())
304 {
305 case ID_LISTBOX_SEL_NUM:
306 {
307 m_listbox->SetSelection( 2 );
308 break;
309 }
310 case ID_LISTBOX_SEL_STR:
311 {
312 m_listbox->SetStringSelection( "This" );
313 break;
314 }
315 case ID_LISTBOX_CLEAR:
316 {
317 m_listbox->Clear();
318 break;
319 }
320 case ID_LISTBOX_APPEND:
321 {
322 m_listbox->Append( "Hi!" );
323 break;
324 }
325 case ID_LISTBOX_DELETE:
326 {
327 int idx = m_listbox->GetSelection();
328 m_listbox->Delete( idx );
329 break;
330 }
331 case ID_LISTBOX_FONT:
332 {
333 m_listbox->SetFont( *wxITALIC_FONT );
334 break;
335 }
336 }
337 }
338
339 void MyPanel::OnChoice( wxCommandEvent &event )
340 {
341 m_text->WriteText( "Choice selection string is: " );
342 m_text->WriteText( event.GetString() );
343 m_text->WriteText( "\n" );
344 }
345
346 void MyPanel::OnChoiceButtons( wxCommandEvent &event )
347 {
348 switch (event.GetId())
349 {
350 case ID_CHOICE_SEL_NUM:
351 {
352 m_choice->SetSelection( 2 );
353 break;
354 }
355 case ID_CHOICE_SEL_STR:
356 {
357 m_choice->SetStringSelection( "This" );
358 break;
359 }
360 case ID_CHOICE_CLEAR:
361 {
362 m_choice->Clear();
363 break;
364 }
365 case ID_CHOICE_APPEND:
366 {
367 m_choice->Append( "Hi!" );
368 break;
369 }
370 case ID_CHOICE_DELETE:
371 {
372 int idx = m_choice->GetSelection();
373 m_choice->Delete( idx );
374 break;
375 }
376 case ID_CHOICE_FONT:
377 {
378 m_choice->SetFont( *wxITALIC_FONT );
379 break;
380 }
381 }
382 }
383
384 void MyPanel::OnCombo( wxCommandEvent &event )
385 {
386 m_text->WriteText( "ComboBox selection string is: " );
387 m_text->WriteText( event.GetString() );
388 m_text->WriteText( "\n" );
389 }
390
391 void MyPanel::OnComboButtons( wxCommandEvent &event )
392 {
393 switch (event.GetId())
394 {
395 case ID_COMBO_SEL_NUM:
396 {
397 m_combo->SetSelection( 2 );
398 break;
399 }
400 case ID_COMBO_SEL_STR:
401 {
402 m_combo->SetStringSelection( "This" );
403 break;
404 }
405 case ID_COMBO_CLEAR:
406 {
407 m_combo->Clear();
408 break;
409 }
410 case ID_COMBO_APPEND:
411 {
412 m_combo->Append( "Hi!" );
413 break;
414 }
415 case ID_COMBO_DELETE:
416 {
417 int idx = m_combo->GetSelection();
418 m_combo->Delete( idx );
419 break;
420 }
421 case ID_COMBO_FONT:
422 {
423 m_combo->SetFont( *wxITALIC_FONT );
424 break;
425 }
426 }
427 }
428
429 void MyPanel::OnRadio( wxCommandEvent &event )
430 {
431 m_text->WriteText( "RadioBox selection string is: " );
432 m_text->WriteText( event.GetString() );
433 m_text->WriteText( "\n" );
434 }
435
436 void MyPanel::OnRadioButtons( wxCommandEvent &event )
437 {
438 switch (event.GetId())
439 {
440 case ID_RADIOBOX_SEL_NUM:
441 {
442 m_radio->SetSelection( 2 );
443 break;
444 }
445 case ID_RADIOBOX_SEL_STR:
446 {
447 m_radio->SetStringSelection( "This" );
448 break;
449 }
450 case ID_RADIOBOX_FONT:
451 {
452 m_radio->SetFont( *wxITALIC_FONT );
453 break;
454 }
455 }
456 }
457
458 void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
459 {
460 m_fontButton->SetFont( *wxITALIC_FONT );
461 m_text->SetFont( *wxITALIC_FONT );
462 }
463
464 MyPanel::~MyPanel()
465 {
466 delete m_notebook->GetImageList();
467 }
468
469 //----------------------------------------------------------------------
470 // MyFrame
471 //----------------------------------------------------------------------
472
473 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
474 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
475 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
476 END_EVENT_TABLE()
477
478 MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h):
479 wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
480 {
481 (void)new MyPanel( this, 10, 10, 300, 100 );
482 }
483
484 void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
485 {
486 Close(TRUE);
487 }
488
489 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
490 {
491 wxMessageDialog dialog(this, "This is a control sample", "About Controls", wxOK );
492 dialog.ShowModal();
493 }