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