]> git.saurik.com Git - wxWidgets.git/blame - samples/widgets/combobox.cpp
Add extra border below the buttons in the generic log dialog.
[wxWidgets.git] / samples / widgets / combobox.cpp
CommitLineData
32b8ec41 1/////////////////////////////////////////////////////////////////////////////
be5a51fb 2// Program: wxWidgets Widgets Sample
32b8ec41
VZ
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
526954c5 9// Licence: wxWindows licence
32b8ec41
VZ
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
3379ed37
VZ
27#if wxUSE_COMBOBOX
28
32b8ec41
VZ
29// for all others, include the necessary headers
30#ifndef WX_PRECOMP
31 #include "wx/log.h"
32
3bb70c40 33 #include "wx/bitmap.h"
32b8ec41
VZ
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
a236aa20 44#include "itemcontainer.h"
32b8ec41 45#include "widgets.h"
32b8ec41
VZ
46#include "icons/combobox.xpm"
47
48// ----------------------------------------------------------------------------
49// constants
50// ----------------------------------------------------------------------------
51
52// control ids
53enum
54{
f0fa4312 55 ComboPage_Reset = wxID_HIGHEST,
d1d1f817
VZ
56 ComboPage_Popup,
57 ComboPage_Dismiss,
90576c50 58 ComboPage_SetCurrent,
32b8ec41 59 ComboPage_CurText,
9849a944 60 ComboPage_InsertionPointText,
243dbf1a
VZ
61 ComboPage_Insert,
62 ComboPage_InsertText,
32b8ec41
VZ
63 ComboPage_Add,
64 ComboPage_AddText,
dfb4176a
VZ
65 ComboPage_SetFirst,
66 ComboPage_SetFirstText,
32b8ec41
VZ
67 ComboPage_AddSeveral,
68 ComboPage_AddMany,
69 ComboPage_Clear,
70 ComboPage_Change,
71 ComboPage_ChangeText,
72 ComboPage_Delete,
73 ComboPage_DeleteText,
74 ComboPage_DeleteSel,
21dd7c5b
RR
75 ComboPage_SetValue,
76 ComboPage_SetValueText,
a236aa20
VZ
77 ComboPage_Combo,
78 ComboPage_ContainerTests
32b8ec41
VZ
79};
80
81// kinds of comboboxes
82enum
83{
84 ComboKind_Default,
85 ComboKind_Simple,
86 ComboKind_DropDown
87};
88
89// ----------------------------------------------------------------------------
90// ComboboxWidgetsPage
91// ----------------------------------------------------------------------------
92
a236aa20 93class ComboboxWidgetsPage : public ItemContainerWidgetsPage
32b8ec41
VZ
94{
95public:
f2fdc4d5 96 ComboboxWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist);
32b8ec41 97
195df7a7 98 virtual wxControl *GetWidget() const { return m_combobox; }
6a8d7937 99 virtual wxTextEntryBase *GetTextEntry() const { return m_combobox; }
a236aa20 100 virtual wxItemContainer* GetContainer() const { return m_combobox; }
1301e228 101 virtual void RecreateWidget() { CreateCombo(); }
195df7a7 102
453535a7
WS
103 // lazy creation of the content
104 virtual void CreateContent();
105
32b8ec41
VZ
106protected:
107 // event handlers
108 void OnButtonReset(wxCommandEvent& event);
d1d1f817
VZ
109 void OnButtonPopup(wxCommandEvent&) { m_combobox->Popup(); }
110 void OnButtonDismiss(wxCommandEvent&) { m_combobox->Dismiss(); }
32b8ec41
VZ
111 void OnButtonChange(wxCommandEvent& event);
112 void OnButtonDelete(wxCommandEvent& event);
113 void OnButtonDeleteSel(wxCommandEvent& event);
114 void OnButtonClear(wxCommandEvent& event);
243dbf1a 115 void OnButtonInsert(wxCommandEvent &event);
32b8ec41 116 void OnButtonAdd(wxCommandEvent& event);
dfb4176a 117 void OnButtonSetFirst(wxCommandEvent& event);
32b8ec41
VZ
118 void OnButtonAddSeveral(wxCommandEvent& event);
119 void OnButtonAddMany(wxCommandEvent& event);
21dd7c5b 120 void OnButtonSetValue(wxCommandEvent& event);
90576c50 121 void OnButtonSetCurrent(wxCommandEvent& event);
32b8ec41 122
8933fbc6
VZ
123 void OnDropdown(wxCommandEvent& event);
124 void OnCloseup(wxCommandEvent& event);
32b8ec41
VZ
125 void OnComboBox(wxCommandEvent& event);
126 void OnComboText(wxCommandEvent& event);
127
128 void OnCheckOrRadioBox(wxCommandEvent& event);
129
9849a944 130 void OnUpdateUIInsertionPointText(wxUpdateUIEvent& event);
32b8ec41 131
243dbf1a 132 void OnUpdateUIInsert(wxUpdateUIEvent& event);
32b8ec41
VZ
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);
90576c50 138 void OnUpdateUISetCurrent(wxUpdateUIEvent& event);
32b8ec41
VZ
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,
5f6475c1
VZ
154 *m_chkReadonly,
155 *m_chkFilename;
32b8ec41
VZ
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
243dbf1a
VZ
162 wxTextCtrl *m_textInsert,
163 *m_textAdd,
dfb4176a 164 *m_textSetFirst,
32b8ec41 165 *m_textChange,
21dd7c5b 166 *m_textSetValue,
90576c50
VZ
167 *m_textDelete,
168 *m_textCur;
32b8ec41
VZ
169
170private:
5e173f35
GD
171 DECLARE_EVENT_TABLE()
172 DECLARE_WIDGETS_PAGE(ComboboxWidgetsPage)
32b8ec41
VZ
173};
174
175// ----------------------------------------------------------------------------
176// event tables
177// ----------------------------------------------------------------------------
178
179BEGIN_EVENT_TABLE(ComboboxWidgetsPage, WidgetsPage)
180 EVT_BUTTON(ComboPage_Reset, ComboboxWidgetsPage::OnButtonReset)
d1d1f817
VZ
181 EVT_BUTTON(ComboPage_Popup, ComboboxWidgetsPage::OnButtonPopup)
182 EVT_BUTTON(ComboPage_Dismiss, ComboboxWidgetsPage::OnButtonDismiss)
32b8ec41
VZ
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)
243dbf1a 187 EVT_BUTTON(ComboPage_Insert, ComboboxWidgetsPage::OnButtonInsert)
32b8ec41 188 EVT_BUTTON(ComboPage_Add, ComboboxWidgetsPage::OnButtonAdd)
dfb4176a 189 EVT_BUTTON(ComboPage_SetFirst, ComboboxWidgetsPage::OnButtonSetFirst)
32b8ec41
VZ
190 EVT_BUTTON(ComboPage_AddSeveral, ComboboxWidgetsPage::OnButtonAddSeveral)
191 EVT_BUTTON(ComboPage_AddMany, ComboboxWidgetsPage::OnButtonAddMany)
21dd7c5b 192 EVT_BUTTON(ComboPage_SetValue, ComboboxWidgetsPage::OnButtonSetValue)
90576c50 193 EVT_BUTTON(ComboPage_SetCurrent, ComboboxWidgetsPage::OnButtonSetCurrent)
a236aa20 194 EVT_BUTTON(ComboPage_ContainerTests, ItemContainerWidgetsPage::OnButtonTestItemContainer)
32b8ec41 195
243dbf1a 196 EVT_TEXT_ENTER(ComboPage_InsertText, ComboboxWidgetsPage::OnButtonInsert)
32b8ec41
VZ
197 EVT_TEXT_ENTER(ComboPage_AddText, ComboboxWidgetsPage::OnButtonAdd)
198 EVT_TEXT_ENTER(ComboPage_DeleteText, ComboboxWidgetsPage::OnButtonDelete)
199
9849a944 200 EVT_UPDATE_UI(ComboPage_InsertionPointText, ComboboxWidgetsPage::OnUpdateUIInsertionPointText)
32b8ec41
VZ
201
202 EVT_UPDATE_UI(ComboPage_Reset, ComboboxWidgetsPage::OnUpdateUIResetButton)
243dbf1a 203 EVT_UPDATE_UI(ComboPage_Insert, ComboboxWidgetsPage::OnUpdateUIInsert)
32b8ec41
VZ
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)
90576c50 211 EVT_UPDATE_UI(ComboPage_SetCurrent, ComboboxWidgetsPage::OnUpdateUISetCurrent)
32b8ec41
VZ
212
213 EVT_COMBOBOX(ComboPage_Combo, ComboboxWidgetsPage::OnComboBox)
8933fbc6
VZ
214 EVT_COMBOBOX_DROPDOWN(ComboPage_Combo, ComboboxWidgetsPage::OnDropdown)
215 EVT_COMBOBOX_CLOSEUP(ComboPage_Combo, ComboboxWidgetsPage::OnCloseup)
32b8ec41 216 EVT_TEXT(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
243dbf1a 217 EVT_TEXT_ENTER(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
32b8ec41 218
206d3a16
JS
219 EVT_CHECKBOX(wxID_ANY, ComboboxWidgetsPage::OnCheckOrRadioBox)
220 EVT_RADIOBOX(wxID_ANY, ComboboxWidgetsPage::OnCheckOrRadioBox)
32b8ec41
VZ
221END_EVENT_TABLE()
222
223// ============================================================================
224// implementation
225// ============================================================================
226
f0fa4312
WS
227#if defined(__WXUNIVERSAL__)
228 #define FAMILY_CTRLS UNIVERSAL_CTRLS
229#else
230 #define FAMILY_CTRLS NATIVE_CTRLS
231#endif
232
9a83f860 233IMPLEMENT_WIDGETS_PAGE(ComboboxWidgetsPage, wxT("Combobox"),
f0fa4312 234 FAMILY_CTRLS | WITH_ITEMS_CTRLS | COMBO_CTRLS
f2fdc4d5 235 );
32b8ec41 236
f2fdc4d5 237ComboboxWidgetsPage::ComboboxWidgetsPage(WidgetsBookCtrl *book,
61c083e7 238 wxImageList *imaglist)
a236aa20 239 : ItemContainerWidgetsPage(book, imaglist, combobox_xpm)
32b8ec41 240{
32b8ec41
VZ
241 // init everything
242 m_chkSort =
5f6475c1
VZ
243 m_chkReadonly =
244 m_chkFilename = (wxCheckBox *)NULL;
32b8ec41
VZ
245
246 m_combobox = (wxComboBox *)NULL;
247 m_sizerCombo = (wxSizer *)NULL;
453535a7 248}
32b8ec41 249
453535a7
WS
250void ComboboxWidgetsPage::CreateContent()
251{
32b8ec41
VZ
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
d1d1f817 260 // upper left pane
32b8ec41
VZ
261
262 // should be in sync with ComboKind_XXX values
263 static const wxString kinds[] =
264 {
9a83f860
VZ
265 wxT("default"),
266 wxT("simple"),
267 wxT("drop down"),
32b8ec41
VZ
268 };
269
9a83f860 270 m_radioKind = new wxRadioBox(this, wxID_ANY, wxT("Combobox &kind:"),
32b8ec41
VZ
271 wxDefaultPosition, wxDefaultSize,
272 WXSIZEOF(kinds), kinds,
273 1, wxRA_SPECIFY_COLS);
274
d1d1f817 275 wxSizer *sizerLeftTop = new wxStaticBoxSizer(wxVERTICAL, this, "&Set style");
32b8ec41 276
d1d1f817
VZ
277 m_chkSort = CreateCheckBoxAndAddToSizer(sizerLeftTop, wxT("&Sort items"));
278 m_chkReadonly = CreateCheckBoxAndAddToSizer(sizerLeftTop, wxT("&Read only"));
279 m_chkFilename = CreateCheckBoxAndAddToSizer(sizerLeftTop, wxT("&File name"));
55b43eaa 280 m_chkFilename->Disable(); // not implemented yet
32b8ec41 281
d1d1f817
VZ
282 sizerLeftTop->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
283 sizerLeftTop->Add(m_radioKind, 0, wxGROW | wxALL, 5);
32b8ec41 284
9a83f860 285 wxButton *btn = new wxButton(this, ComboPage_Reset, wxT("&Reset"));
d1d1f817
VZ
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);
32b8ec41
VZ
300
301 // middle pane
206d3a16 302 wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY,
9a83f860 303 wxT("&Change combobox contents"));
32b8ec41
VZ
304 wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
305
306 wxSizer *sizerRow;
307
90576c50 308 sizerRow = CreateSizerWithTextAndButton(ComboPage_SetCurrent,
9a83f860 309 wxT("Current &selection"),
90576c50
VZ
310 ComboPage_CurText,
311 &m_textCur);
32b8ec41
VZ
312
313 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
314
90576c50 315 wxTextCtrl *text;
9a83f860 316 sizerRow = CreateSizerWithTextAndLabel(wxT("Insertion Point"),
9849a944
VZ
317 ComboPage_InsertionPointText,
318 &text);
319 text->SetEditable(false);
320
321 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
322
243dbf1a 323 sizerRow = CreateSizerWithTextAndButton(ComboPage_Insert,
9a83f860 324 wxT("&Insert this string"),
243dbf1a
VZ
325 ComboPage_InsertText,
326 &m_textInsert);
327 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
328
32b8ec41 329 sizerRow = CreateSizerWithTextAndButton(ComboPage_Add,
9a83f860 330 wxT("&Add this string"),
32b8ec41
VZ
331 ComboPage_AddText,
332 &m_textAdd);
333 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
334
dfb4176a
VZ
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
9a83f860 341 btn = new wxButton(this, ComboPage_AddSeveral, wxT("&Append a few strings"));
32b8ec41
VZ
342 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
343
9a83f860 344 btn = new wxButton(this, ComboPage_AddMany, wxT("Append &many strings"));
32b8ec41
VZ
345 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
346
347 sizerRow = CreateSizerWithTextAndButton(ComboPage_Change,
9a83f860 348 wxT("C&hange current"),
32b8ec41
VZ
349 ComboPage_ChangeText,
350 &m_textChange);
351 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
352
353 sizerRow = CreateSizerWithTextAndButton(ComboPage_Delete,
9a83f860 354 wxT("&Delete this item"),
32b8ec41
VZ
355 ComboPage_DeleteText,
356 &m_textDelete);
357 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
358
9a83f860 359 btn = new wxButton(this, ComboPage_DeleteSel, wxT("Delete &selection"));
32b8ec41
VZ
360 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
361
9a83f860 362 btn = new wxButton(this, ComboPage_Clear, wxT("&Clear"));
32b8ec41
VZ
363 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
364
21dd7c5b 365 sizerRow = CreateSizerWithTextAndButton(ComboPage_SetValue,
9a83f860 366 wxT("SetValue"),
21dd7c5b
RR
367 ComboPage_SetValueText,
368 &m_textSetValue);
369 sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
370
9a83f860 371 btn = new wxButton(this, ComboPage_ContainerTests, wxT("Run &tests"));
a236aa20
VZ
372 sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
373
21dd7c5b
RR
374
375
32b8ec41
VZ
376 // right pane
377 wxSizer *sizerRight = new wxBoxSizer(wxVERTICAL);
206d3a16 378 m_combobox = new wxComboBox(this, ComboPage_Combo, wxEmptyString,
32b8ec41
VZ
379 wxDefaultPosition, wxDefaultSize,
380 0, NULL,
381 0);
6f002df4 382 sizerRight->Add(m_combobox, 0, wxGROW | wxALL, 5);
7b127900 383 sizerRight->SetMinSize(150, 0);
32b8ec41
VZ
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
32b8ec41 394 SetSizer(sizerTop);
32b8ec41
VZ
395}
396
397// ----------------------------------------------------------------------------
398// operations
399// ----------------------------------------------------------------------------
400
401void ComboboxWidgetsPage::Reset()
402{
206d3a16
JS
403 m_chkSort->SetValue(false);
404 m_chkReadonly->SetValue(false);
5f6475c1 405 m_chkFilename->SetValue(false);
32b8ec41
VZ
406}
407
408void ComboboxWidgetsPage::CreateCombo()
409{
1301e228 410 int flags = ms_defaultFlags;
32b8ec41
VZ
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:
9a83f860 420 wxFAIL_MSG( wxT("unknown combo kind") );
32b8ec41
VZ
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 {
aa61d352
VZ
438 unsigned int count = m_combobox->GetCount();
439 for ( unsigned int n = 0; n < count; n++ )
32b8ec41
VZ
440 {
441 items.Add(m_combobox->GetString(n));
442 }
443
12a3f227 444 m_sizerCombo->Detach( m_combobox );
32b8ec41
VZ
445 delete m_combobox;
446 }
447
206d3a16 448 m_combobox = new wxComboBox(this, ComboPage_Combo, wxEmptyString,
32b8ec41
VZ
449 wxDefaultPosition, wxDefaultSize,
450 0, NULL,
451 flags);
452
55b43eaa
VZ
453#if 0
454 if ( m_chkFilename->GetValue() )
455 ;
456#endif // TODO
457
aa61d352
VZ
458 unsigned int count = items.GetCount();
459 for ( unsigned int n = 0; n < count; n++ )
32b8ec41
VZ
460 {
461 m_combobox->Append(items[n]);
462 }
463
dd740d86 464 m_sizerCombo->Add(m_combobox, 0, wxGROW | wxALL, 5);
32b8ec41
VZ
465 m_sizerCombo->Layout();
466}
467
468// ----------------------------------------------------------------------------
469// event handlers
470// ----------------------------------------------------------------------------
471
472void ComboboxWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
473{
474 Reset();
475
476 CreateCombo();
477}
478
479void ComboboxWidgetsPage::OnButtonChange(wxCommandEvent& WXUNUSED(event))
480{
481 int sel = m_combobox->GetSelection();
453535a7 482 if ( sel != wxNOT_FOUND )
32b8ec41 483 {
32b8ec41 484 m_combobox->SetString(sel, m_textChange->GetValue());
32b8ec41
VZ
485 }
486}
487
488void ComboboxWidgetsPage::OnButtonDelete(wxCommandEvent& WXUNUSED(event))
489{
490 unsigned long n;
491 if ( !m_textDelete->GetValue().ToULong(&n) ||
aa61d352 492 (n >= m_combobox->GetCount()) )
32b8ec41
VZ
493 {
494 return;
495 }
496
497 m_combobox->Delete(n);
498}
499
500void ComboboxWidgetsPage::OnButtonDeleteSel(wxCommandEvent& WXUNUSED(event))
501{
502 int sel = m_combobox->GetSelection();
aa61d352 503 if ( sel != wxNOT_FOUND )
32b8ec41
VZ
504 {
505 m_combobox->Delete(sel);
506 }
507}
508
21dd7c5b
RR
509void ComboboxWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event))
510{
511 wxString value = m_textSetValue->GetValue();
512 m_combobox->SetValue( value );
513}
514
c02e5a31 515void ComboboxWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
32b8ec41
VZ
516{
517 m_combobox->Clear();
518}
519
c02e5a31 520void ComboboxWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event))
243dbf1a
VZ
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
9a83f860 528 m_textInsert->SetValue(wxString::Format(wxT("test item %u"), ++s_item));
243dbf1a
VZ
529 }
530
531 if (m_combobox->GetSelection() >= 0)
532 m_combobox->Insert(s, m_combobox->GetSelection());
533}
534
c02e5a31 535void ComboboxWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event))
32b8ec41 536{
0c61716c 537 static unsigned int s_item = 0;
32b8ec41
VZ
538
539 wxString s = m_textAdd->GetValue();
540 if ( !m_textAdd->IsModified() )
541 {
542 // update the default string
9a83f860 543 m_textAdd->SetValue(wxString::Format(wxT("test item %u"), ++s_item));
32b8ec41
VZ
544 }
545
546 m_combobox->Append(s);
547}
548
dfb4176a
VZ
549void 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
32b8ec41
VZ
560void ComboboxWidgetsPage::OnButtonAddMany(wxCommandEvent& WXUNUSED(event))
561{
562 // "many" means 1000 here
0c61716c 563 for ( unsigned int n = 0; n < 1000; n++ )
32b8ec41 564 {
9a83f860 565 m_combobox->Append(wxString::Format(wxT("item #%u"), n));
32b8ec41
VZ
566 }
567}
568
90576c50
VZ
569void 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
c02e5a31 578void ComboboxWidgetsPage::OnButtonAddSeveral(wxCommandEvent& WXUNUSED(event))
32b8ec41 579{
9a83f860
VZ
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"));
32b8ec41
VZ
583}
584
9849a944
VZ
585void ComboboxWidgetsPage::OnUpdateUIInsertionPointText(wxUpdateUIEvent& event)
586{
587 if (m_combobox)
9a83f860 588 event.SetText( wxString::Format(wxT("%ld"), m_combobox->GetInsertionPoint()) );
9849a944
VZ
589}
590
32b8ec41
VZ
591void ComboboxWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
592{
5f6475c1
VZ
593 event.Enable( m_chkSort->GetValue() ||
594 m_chkReadonly->GetValue() ||
595 m_chkFilename->GetValue() );
32b8ec41
VZ
596}
597
243dbf1a
VZ
598void 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
32b8ec41
VZ
609void ComboboxWidgetsPage::OnUpdateUIDeleteButton(wxUpdateUIEvent& event)
610{
e640f823
JS
611 if (m_combobox)
612 {
613 unsigned long n;
614 event.Enable(m_textDelete->GetValue().ToULong(&n) &&
2f6c54eb 615 (n < (unsigned)m_combobox->GetCount()));
e640f823 616 }
32b8ec41
VZ
617}
618
619void ComboboxWidgetsPage::OnUpdateUIDeleteSelButton(wxUpdateUIEvent& event)
620{
e640f823 621 if (m_combobox)
453535a7 622 event.Enable(m_combobox->GetSelection() != wxNOT_FOUND);
32b8ec41
VZ
623}
624
625void ComboboxWidgetsPage::OnUpdateUIClearButton(wxUpdateUIEvent& event)
626{
e640f823
JS
627 if (m_combobox)
628 event.Enable(m_combobox->GetCount() != 0);
32b8ec41
VZ
629}
630
631void ComboboxWidgetsPage::OnUpdateUIAddSeveral(wxUpdateUIEvent& event)
632{
e640f823
JS
633 if (m_combobox)
634 event.Enable(!(m_combobox->GetWindowStyle() & wxCB_SORT));
32b8ec41
VZ
635}
636
90576c50
VZ
637void 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
32b8ec41
VZ
645void ComboboxWidgetsPage::OnComboText(wxCommandEvent& event)
646{
e640f823 647 if (!m_combobox)
2f6c54eb
VZ
648 return;
649
32b8ec41
VZ
650 wxString s = event.GetString();
651
652 wxASSERT_MSG( s == m_combobox->GetValue(),
9a83f860 653 wxT("event and combobox values should be the same") );
32b8ec41 654
243dbf1a 655 if (event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER)
43b2d5e7 656 {
9a83f860 657 wxLogMessage(wxT("Combobox enter pressed (now '%s')"), s.c_str());
43b2d5e7 658 }
243dbf1a 659 else
43b2d5e7 660 {
9a83f860 661 wxLogMessage(wxT("Combobox text changed (now '%s')"), s.c_str());
43b2d5e7 662 }
32b8ec41
VZ
663}
664
665void ComboboxWidgetsPage::OnComboBox(wxCommandEvent& event)
666{
aec18ff7 667 long sel = event.GetInt();
9a83f860 668 const wxString selstr = wxString::Format(wxT("%ld"), sel);
90576c50
VZ
669 m_textDelete->SetValue(selstr);
670 m_textCur->SetValue(selstr);
32b8ec41 671
9a83f860 672 wxLogMessage(wxT("Combobox item %ld selected"), sel);
bfd84575 673
9a83f860 674 wxLogMessage(wxT("Combobox GetValue(): %s"), m_combobox->GetValue().c_str() );
32b8ec41
VZ
675}
676
c02e5a31 677void ComboboxWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
32b8ec41
VZ
678{
679 CreateCombo();
680}
681
8933fbc6
VZ
682void ComboboxWidgetsPage::OnDropdown(wxCommandEvent& WXUNUSED(event))
683{
9a83f860 684 wxLogMessage(wxT("Combobox dropped down"));
8933fbc6
VZ
685}
686
687void ComboboxWidgetsPage::OnCloseup(wxCommandEvent& WXUNUSED(event))
688{
9a83f860 689 wxLogMessage(wxT("Combobox closed up"));
8933fbc6
VZ
690}
691
d21866cb 692#endif // wxUSE_COMBOBOX