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