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