]> git.saurik.com Git - wxWidgets.git/blob - samples/widgets/combobox.cpp
e2073ba98e5259a106946337d508e8b0ac1900d6
[wxWidgets.git] / samples / widgets / combobox.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Program: wxWidgets Widgets Sample
3 // Name: combobox.cpp
4 // Purpose: Part of the widgets sample showing wxComboBox
5 // Author: Vadim Zeitlin
6 // Created: 27.03.01
7 // Id: $Id$
8 // Copyright: (c) 2001 Vadim Zeitlin
9 // License: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // declarations
14 // ============================================================================
15
16 // ----------------------------------------------------------------------------
17 // headers
18 // ----------------------------------------------------------------------------
19
20 // for compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
22
23 #ifdef __BORLANDC__
24 #pragma hdrstop
25 #endif
26
27 #if wxUSE_COMBOBOX
28
29 // for all others, include the necessary headers
30 #ifndef WX_PRECOMP
31 #include "wx/log.h"
32
33 #include "wx/bitmap.h"
34 #include "wx/button.h"
35 #include "wx/checkbox.h"
36 #include "wx/combobox.h"
37 #include "wx/radiobox.h"
38 #include "wx/statbox.h"
39 #include "wx/textctrl.h"
40 #endif
41
42 #include "wx/sizer.h"
43
44 #include "itemcontainer.h"
45 #include "widgets.h"
46 #include "icons/combobox.xpm"
47
48 // ----------------------------------------------------------------------------
49 // constants
50 // ----------------------------------------------------------------------------
51
52 // control ids
53 enum
54 {
55 ComboPage_Reset = wxID_HIGHEST,
56 ComboPage_SetCurrent,
57 ComboPage_CurText,
58 ComboPage_InsertionPointText,
59 ComboPage_Insert,
60 ComboPage_InsertText,
61 ComboPage_Add,
62 ComboPage_AddText,
63 ComboPage_AddSeveral,
64 ComboPage_AddMany,
65 ComboPage_Clear,
66 ComboPage_Change,
67 ComboPage_ChangeText,
68 ComboPage_Delete,
69 ComboPage_DeleteText,
70 ComboPage_DeleteSel,
71 ComboPage_SetValue,
72 ComboPage_SetValueText,
73 ComboPage_Combo,
74 ComboPage_ContainerTests
75 };
76
77 // kinds of comboboxes
78 enum
79 {
80 ComboKind_Default,
81 ComboKind_Simple,
82 ComboKind_DropDown
83 };
84
85 // ----------------------------------------------------------------------------
86 // ComboboxWidgetsPage
87 // ----------------------------------------------------------------------------
88
89 class ComboboxWidgetsPage : public ItemContainerWidgetsPage
90 {
91 public:
92 ComboboxWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist);
93
94 virtual wxControl *GetWidget() const { return m_combobox; }
95 virtual wxTextEntryBase *GetTextEntry() const { return m_combobox; }
96 virtual wxItemContainer* GetContainer() const { return m_combobox; }
97 virtual void RecreateWidget() { CreateCombo(); }
98
99 // lazy creation of the content
100 virtual void CreateContent();
101
102 protected:
103 // event handlers
104 void OnButtonReset(wxCommandEvent& event);
105 void OnButtonChange(wxCommandEvent& event);
106 void OnButtonDelete(wxCommandEvent& event);
107 void OnButtonDeleteSel(wxCommandEvent& event);
108 void OnButtonClear(wxCommandEvent& event);
109 void OnButtonInsert(wxCommandEvent &event);
110 void OnButtonAdd(wxCommandEvent& event);
111 void OnButtonAddSeveral(wxCommandEvent& event);
112 void OnButtonAddMany(wxCommandEvent& event);
113 void OnButtonSetValue(wxCommandEvent& event);
114 void OnButtonSetCurrent(wxCommandEvent& event);
115
116 void OnDropdown(wxCommandEvent& event);
117 void OnCloseup(wxCommandEvent& event);
118 void OnComboBox(wxCommandEvent& event);
119 void OnComboText(wxCommandEvent& event);
120
121 void OnCheckOrRadioBox(wxCommandEvent& event);
122
123 void OnUpdateUIInsertionPointText(wxUpdateUIEvent& event);
124
125 void OnUpdateUIInsert(wxUpdateUIEvent& event);
126 void OnUpdateUIAddSeveral(wxUpdateUIEvent& event);
127 void OnUpdateUIClearButton(wxUpdateUIEvent& event);
128 void OnUpdateUIDeleteButton(wxUpdateUIEvent& event);
129 void OnUpdateUIDeleteSelButton(wxUpdateUIEvent& event);
130 void OnUpdateUIResetButton(wxUpdateUIEvent& event);
131 void OnUpdateUISetCurrent(wxUpdateUIEvent& event);
132
133 // reset the combobox parameters
134 void Reset();
135
136 // (re)create the combobox
137 void CreateCombo();
138
139 // the controls
140 // ------------
141
142 // the sel mode radiobox
143 wxRadioBox *m_radioKind;
144
145 // the checkboxes for styles
146 wxCheckBox *m_chkSort,
147 *m_chkReadonly,
148 *m_chkFilename;
149
150 // the combobox itself and the sizer it is in
151 wxComboBox *m_combobox;
152 wxSizer *m_sizerCombo;
153
154 // the text entries for "Add/change string" and "Delete" buttons
155 wxTextCtrl *m_textInsert,
156 *m_textAdd,
157 *m_textChange,
158 *m_textSetValue,
159 *m_textDelete,
160 *m_textCur;
161
162 private:
163 DECLARE_EVENT_TABLE()
164 DECLARE_WIDGETS_PAGE(ComboboxWidgetsPage)
165 };
166
167 // ----------------------------------------------------------------------------
168 // event tables
169 // ----------------------------------------------------------------------------
170
171 BEGIN_EVENT_TABLE(ComboboxWidgetsPage, WidgetsPage)
172 EVT_BUTTON(ComboPage_Reset, ComboboxWidgetsPage::OnButtonReset)
173 EVT_BUTTON(ComboPage_Change, ComboboxWidgetsPage::OnButtonChange)
174 EVT_BUTTON(ComboPage_Delete, ComboboxWidgetsPage::OnButtonDelete)
175 EVT_BUTTON(ComboPage_DeleteSel, ComboboxWidgetsPage::OnButtonDeleteSel)
176 EVT_BUTTON(ComboPage_Clear, ComboboxWidgetsPage::OnButtonClear)
177 EVT_BUTTON(ComboPage_Insert, ComboboxWidgetsPage::OnButtonInsert)
178 EVT_BUTTON(ComboPage_Add, ComboboxWidgetsPage::OnButtonAdd)
179 EVT_BUTTON(ComboPage_AddSeveral, ComboboxWidgetsPage::OnButtonAddSeveral)
180 EVT_BUTTON(ComboPage_AddMany, ComboboxWidgetsPage::OnButtonAddMany)
181 EVT_BUTTON(ComboPage_SetValue, ComboboxWidgetsPage::OnButtonSetValue)
182 EVT_BUTTON(ComboPage_SetCurrent, ComboboxWidgetsPage::OnButtonSetCurrent)
183 EVT_BUTTON(ComboPage_ContainerTests, ItemContainerWidgetsPage::OnButtonTestItemContainer)
184
185 EVT_TEXT_ENTER(ComboPage_InsertText, ComboboxWidgetsPage::OnButtonInsert)
186 EVT_TEXT_ENTER(ComboPage_AddText, ComboboxWidgetsPage::OnButtonAdd)
187 EVT_TEXT_ENTER(ComboPage_DeleteText, ComboboxWidgetsPage::OnButtonDelete)
188
189 EVT_UPDATE_UI(ComboPage_InsertionPointText, ComboboxWidgetsPage::OnUpdateUIInsertionPointText)
190
191 EVT_UPDATE_UI(ComboPage_Reset, ComboboxWidgetsPage::OnUpdateUIResetButton)
192 EVT_UPDATE_UI(ComboPage_Insert, ComboboxWidgetsPage::OnUpdateUIInsert)
193 EVT_UPDATE_UI(ComboPage_AddSeveral, ComboboxWidgetsPage::OnUpdateUIAddSeveral)
194 EVT_UPDATE_UI(ComboPage_Clear, ComboboxWidgetsPage::OnUpdateUIClearButton)
195 EVT_UPDATE_UI(ComboPage_DeleteText, ComboboxWidgetsPage::OnUpdateUIClearButton)
196 EVT_UPDATE_UI(ComboPage_Delete, ComboboxWidgetsPage::OnUpdateUIDeleteButton)
197 EVT_UPDATE_UI(ComboPage_Change, ComboboxWidgetsPage::OnUpdateUIDeleteSelButton)
198 EVT_UPDATE_UI(ComboPage_ChangeText, ComboboxWidgetsPage::OnUpdateUIDeleteSelButton)
199 EVT_UPDATE_UI(ComboPage_DeleteSel, ComboboxWidgetsPage::OnUpdateUIDeleteSelButton)
200 EVT_UPDATE_UI(ComboPage_SetCurrent, ComboboxWidgetsPage::OnUpdateUISetCurrent)
201
202 EVT_COMBOBOX(ComboPage_Combo, ComboboxWidgetsPage::OnComboBox)
203 EVT_COMBOBOX_DROPDOWN(ComboPage_Combo, ComboboxWidgetsPage::OnDropdown)
204 EVT_COMBOBOX_CLOSEUP(ComboPage_Combo, ComboboxWidgetsPage::OnCloseup)
205 EVT_TEXT(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
206 EVT_TEXT_ENTER(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
207
208 EVT_CHECKBOX(wxID_ANY, ComboboxWidgetsPage::OnCheckOrRadioBox)
209 EVT_RADIOBOX(wxID_ANY, ComboboxWidgetsPage::OnCheckOrRadioBox)
210 END_EVENT_TABLE()
211
212 // ============================================================================
213 // implementation
214 // ============================================================================
215
216 #if defined(__WXUNIVERSAL__)
217 #define FAMILY_CTRLS UNIVERSAL_CTRLS
218 #else
219 #define FAMILY_CTRLS NATIVE_CTRLS
220 #endif
221
222 IMPLEMENT_WIDGETS_PAGE(ComboboxWidgetsPage, wxT("Combobox"),
223 FAMILY_CTRLS | WITH_ITEMS_CTRLS | COMBO_CTRLS
224 );
225
226 ComboboxWidgetsPage::ComboboxWidgetsPage(WidgetsBookCtrl *book,
227 wxImageList *imaglist)
228 : ItemContainerWidgetsPage(book, imaglist, combobox_xpm)
229 {
230 // init everything
231 m_chkSort =
232 m_chkReadonly =
233 m_chkFilename = (wxCheckBox *)NULL;
234
235 m_combobox = (wxComboBox *)NULL;
236 m_sizerCombo = (wxSizer *)NULL;
237 }
238
239 void ComboboxWidgetsPage::CreateContent()
240 {
241 /*
242 What we create here is a frame having 3 panes: style pane is the
243 leftmost one, in the middle the pane with buttons allowing to perform
244 miscellaneous combobox operations and the pane containing the combobox
245 itself to the right
246 */
247 wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
248
249 // left pane
250 wxStaticBox *box = new wxStaticBox(this, wxID_ANY, wxT("&Set style"));
251
252 // should be in sync with ComboKind_XXX values
253 static const wxString kinds[] =
254 {
255 wxT("default"),
256 wxT("simple"),
257 wxT("drop down"),
258 };
259
260 m_radioKind = new wxRadioBox(this, wxID_ANY, wxT("Combobox &kind:"),
261 wxDefaultPosition, wxDefaultSize,
262 WXSIZEOF(kinds), kinds,
263 1, wxRA_SPECIFY_COLS);
264
265 wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
266
267 m_chkSort = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("&Sort items"));
268 m_chkReadonly = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("&Read only"));
269 m_chkFilename = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("&File name"));
270 m_chkFilename->Disable(); // not implemented yet
271
272 sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
273 sizerLeft->Add(m_radioKind, 0, wxGROW | wxALL, 5);
274
275 wxButton *btn = new wxButton(this, ComboPage_Reset, wxT("&Reset"));
276 sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
277
278 // middle pane
279 wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY,
280 wxT("&Change combobox contents"));
281 wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
282
283 wxSizer *sizerRow;
284
285 sizerRow = CreateSizerWithTextAndButton(ComboPage_SetCurrent,
286 wxT("Current &selection"),
287 ComboPage_CurText,
288 &m_textCur);
289
290 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
291
292 wxTextCtrl *text;
293 sizerRow = CreateSizerWithTextAndLabel(wxT("Insertion Point"),
294 ComboPage_InsertionPointText,
295 &text);
296 text->SetEditable(false);
297
298 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
299
300 sizerRow = CreateSizerWithTextAndButton(ComboPage_Insert,
301 wxT("&Insert this string"),
302 ComboPage_InsertText,
303 &m_textInsert);
304 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
305
306 sizerRow = CreateSizerWithTextAndButton(ComboPage_Add,
307 wxT("&Add this string"),
308 ComboPage_AddText,
309 &m_textAdd);
310 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
311
312 btn = new wxButton(this, ComboPage_AddSeveral, wxT("&Append a few strings"));
313 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
314
315 btn = new wxButton(this, ComboPage_AddMany, wxT("Append &many strings"));
316 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
317
318 sizerRow = CreateSizerWithTextAndButton(ComboPage_Change,
319 wxT("C&hange current"),
320 ComboPage_ChangeText,
321 &m_textChange);
322 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
323
324 sizerRow = CreateSizerWithTextAndButton(ComboPage_Delete,
325 wxT("&Delete this item"),
326 ComboPage_DeleteText,
327 &m_textDelete);
328 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
329
330 btn = new wxButton(this, ComboPage_DeleteSel, wxT("Delete &selection"));
331 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
332
333 btn = new wxButton(this, ComboPage_Clear, wxT("&Clear"));
334 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
335
336 sizerRow = CreateSizerWithTextAndButton(ComboPage_SetValue,
337 wxT("SetValue"),
338 ComboPage_SetValueText,
339 &m_textSetValue);
340 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
341
342 btn = new wxButton(this, ComboPage_ContainerTests, wxT("Run &tests"));
343 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
344
345
346
347 // right pane
348 wxSizer *sizerRight = new wxBoxSizer(wxVERTICAL);
349 m_combobox = new wxComboBox(this, ComboPage_Combo, wxEmptyString,
350 wxDefaultPosition, wxDefaultSize,
351 0, NULL,
352 0);
353 sizerRight->Add(m_combobox, 0, wxGROW | wxALL, 5);
354 sizerRight->SetMinSize(150, 0);
355 m_sizerCombo = sizerRight; // save it to modify it later
356
357 // the 3 panes panes compose the window
358 sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
359 sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
360 sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
361
362 // final initializations
363 Reset();
364
365 SetSizer(sizerTop);
366 }
367
368 // ----------------------------------------------------------------------------
369 // operations
370 // ----------------------------------------------------------------------------
371
372 void ComboboxWidgetsPage::Reset()
373 {
374 m_chkSort->SetValue(false);
375 m_chkReadonly->SetValue(false);
376 m_chkFilename->SetValue(false);
377 }
378
379 void ComboboxWidgetsPage::CreateCombo()
380 {
381 int flags = ms_defaultFlags;
382
383 if ( m_chkSort->GetValue() )
384 flags |= wxCB_SORT;
385 if ( m_chkReadonly->GetValue() )
386 flags |= wxCB_READONLY;
387
388 switch ( m_radioKind->GetSelection() )
389 {
390 default:
391 wxFAIL_MSG( wxT("unknown combo kind") );
392 // fall through
393
394 case ComboKind_Default:
395 break;
396
397 case ComboKind_Simple:
398 flags |= wxCB_SIMPLE;
399 break;
400
401 case ComboKind_DropDown:
402 flags = wxCB_DROPDOWN;
403 break;
404 }
405
406 wxArrayString items;
407 if ( m_combobox )
408 {
409 unsigned int count = m_combobox->GetCount();
410 for ( unsigned int n = 0; n < count; n++ )
411 {
412 items.Add(m_combobox->GetString(n));
413 }
414
415 m_sizerCombo->Detach( m_combobox );
416 delete m_combobox;
417 }
418
419 m_combobox = new wxComboBox(this, ComboPage_Combo, wxEmptyString,
420 wxDefaultPosition, wxDefaultSize,
421 0, NULL,
422 flags);
423
424 #if 0
425 if ( m_chkFilename->GetValue() )
426 ;
427 #endif // TODO
428
429 unsigned int count = items.GetCount();
430 for ( unsigned int n = 0; n < count; n++ )
431 {
432 m_combobox->Append(items[n]);
433 }
434
435 m_sizerCombo->Add(m_combobox, 0, wxGROW | wxALL, 5);
436 m_sizerCombo->Layout();
437 }
438
439 // ----------------------------------------------------------------------------
440 // event handlers
441 // ----------------------------------------------------------------------------
442
443 void ComboboxWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
444 {
445 Reset();
446
447 CreateCombo();
448 }
449
450 void ComboboxWidgetsPage::OnButtonChange(wxCommandEvent& WXUNUSED(event))
451 {
452 int sel = m_combobox->GetSelection();
453 if ( sel != wxNOT_FOUND )
454 {
455 #ifndef __WXGTK__
456 m_combobox->SetString(sel, m_textChange->GetValue());
457 #else
458 wxLogMessage(wxT("Not implemented in wxGTK"));
459 #endif
460 }
461 }
462
463 void ComboboxWidgetsPage::OnButtonDelete(wxCommandEvent& WXUNUSED(event))
464 {
465 unsigned long n;
466 if ( !m_textDelete->GetValue().ToULong(&n) ||
467 (n >= m_combobox->GetCount()) )
468 {
469 return;
470 }
471
472 m_combobox->Delete(n);
473 }
474
475 void ComboboxWidgetsPage::OnButtonDeleteSel(wxCommandEvent& WXUNUSED(event))
476 {
477 int sel = m_combobox->GetSelection();
478 if ( sel != wxNOT_FOUND )
479 {
480 m_combobox->Delete(sel);
481 }
482 }
483
484 void ComboboxWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event))
485 {
486 wxString value = m_textSetValue->GetValue();
487 m_combobox->SetValue( value );
488 }
489
490 void ComboboxWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
491 {
492 m_combobox->Clear();
493 }
494
495 void ComboboxWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event))
496 {
497 static unsigned int s_item = 0;
498
499 wxString s = m_textInsert->GetValue();
500 if ( !m_textInsert->IsModified() )
501 {
502 // update the default string
503 m_textInsert->SetValue(wxString::Format(wxT("test item %u"), ++s_item));
504 }
505
506 if (m_combobox->GetSelection() >= 0)
507 m_combobox->Insert(s, m_combobox->GetSelection());
508 }
509
510 void ComboboxWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event))
511 {
512 static unsigned int s_item = 0;
513
514 wxString s = m_textAdd->GetValue();
515 if ( !m_textAdd->IsModified() )
516 {
517 // update the default string
518 m_textAdd->SetValue(wxString::Format(wxT("test item %u"), ++s_item));
519 }
520
521 m_combobox->Append(s);
522 }
523
524 void ComboboxWidgetsPage::OnButtonAddMany(wxCommandEvent& WXUNUSED(event))
525 {
526 // "many" means 1000 here
527 for ( unsigned int n = 0; n < 1000; n++ )
528 {
529 m_combobox->Append(wxString::Format(wxT("item #%u"), n));
530 }
531 }
532
533 void ComboboxWidgetsPage::OnButtonSetCurrent(wxCommandEvent& WXUNUSED(event))
534 {
535 long n;
536 if ( !m_textCur->GetValue().ToLong(&n) )
537 return;
538
539 m_combobox->SetSelection(n);
540 }
541
542 void ComboboxWidgetsPage::OnButtonAddSeveral(wxCommandEvent& WXUNUSED(event))
543 {
544 m_combobox->Append(wxT("First"));
545 m_combobox->Append(wxT("another one"));
546 m_combobox->Append(wxT("and the last (very very very very very very very very very very long) one"));
547 }
548
549 void ComboboxWidgetsPage::OnUpdateUIInsertionPointText(wxUpdateUIEvent& event)
550 {
551 if (m_combobox)
552 event.SetText( wxString::Format(wxT("%ld"), m_combobox->GetInsertionPoint()) );
553 }
554
555 void ComboboxWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
556 {
557 event.Enable( m_chkSort->GetValue() ||
558 m_chkReadonly->GetValue() ||
559 m_chkFilename->GetValue() );
560 }
561
562 void ComboboxWidgetsPage::OnUpdateUIInsert(wxUpdateUIEvent& event)
563 {
564 if (m_combobox)
565 {
566 bool enable = !(m_combobox->GetWindowStyle() & wxCB_SORT) &&
567 (m_combobox->GetSelection() >= 0);
568
569 event.Enable(enable);
570 }
571 }
572
573 void ComboboxWidgetsPage::OnUpdateUIDeleteButton(wxUpdateUIEvent& event)
574 {
575 if (m_combobox)
576 {
577 unsigned long n;
578 event.Enable(m_textDelete->GetValue().ToULong(&n) &&
579 (n < (unsigned)m_combobox->GetCount()));
580 }
581 }
582
583 void ComboboxWidgetsPage::OnUpdateUIDeleteSelButton(wxUpdateUIEvent& event)
584 {
585 if (m_combobox)
586 event.Enable(m_combobox->GetSelection() != wxNOT_FOUND);
587 }
588
589 void ComboboxWidgetsPage::OnUpdateUIClearButton(wxUpdateUIEvent& event)
590 {
591 if (m_combobox)
592 event.Enable(m_combobox->GetCount() != 0);
593 }
594
595 void ComboboxWidgetsPage::OnUpdateUIAddSeveral(wxUpdateUIEvent& event)
596 {
597 if (m_combobox)
598 event.Enable(!(m_combobox->GetWindowStyle() & wxCB_SORT));
599 }
600
601 void ComboboxWidgetsPage::OnUpdateUISetCurrent(wxUpdateUIEvent& event)
602 {
603 long n;
604 event.Enable( m_textCur->GetValue().ToLong(&n) &&
605 (n == wxNOT_FOUND ||
606 (n >= 0 && (unsigned)n < m_combobox->GetCount())) );
607 }
608
609 void ComboboxWidgetsPage::OnComboText(wxCommandEvent& event)
610 {
611 if (!m_combobox)
612 return;
613
614 wxString s = event.GetString();
615
616 wxASSERT_MSG( s == m_combobox->GetValue(),
617 wxT("event and combobox values should be the same") );
618
619 if (event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER)
620 {
621 wxLogMessage(wxT("Combobox enter pressed (now '%s')"), s.c_str());
622 }
623 else
624 {
625 wxLogMessage(wxT("Combobox text changed (now '%s')"), s.c_str());
626 }
627 }
628
629 void ComboboxWidgetsPage::OnComboBox(wxCommandEvent& event)
630 {
631 long sel = event.GetInt();
632 const wxString selstr = wxString::Format(wxT("%ld"), sel);
633 m_textDelete->SetValue(selstr);
634 m_textCur->SetValue(selstr);
635
636 wxLogMessage(wxT("Combobox item %ld selected"), sel);
637
638 wxLogMessage(wxT("Combobox GetValue(): %s"), m_combobox->GetValue().c_str() );
639 }
640
641 void ComboboxWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
642 {
643 CreateCombo();
644 }
645
646 void ComboboxWidgetsPage::OnDropdown(wxCommandEvent& WXUNUSED(event))
647 {
648 wxLogMessage(wxT("Combobox dropped down"));
649 }
650
651 void ComboboxWidgetsPage::OnCloseup(wxCommandEvent& WXUNUSED(event))
652 {
653 wxLogMessage(wxT("Combobox closed up"));
654 }
655
656 #endif // wxUSE_COMBOBOX