]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/widgets/combobox.cpp
don't preselect the first item if the array with the initial selections is empty...
[wxWidgets.git] / samples / widgets / combobox.cpp
index f37c4721a5316059fc2bc515d3ee3bd3489b7fdc..6938293e618804fc62a50f89d2fd148c60e30a40 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Program:     wxWindows Widgets Sample
+// Program:     wxWidgets Widgets Sample
 // Name:        combobox.cpp
 // Purpose:     Part of the widgets sample showing wxComboBox
 // Author:      Vadim Zeitlin
@@ -30,6 +30,7 @@
 #ifndef WX_PRECOMP
     #include "wx/log.h"
 
+    #include "wx/bitmap.h"
     #include "wx/button.h"
     #include "wx/checkbox.h"
     #include "wx/combobox.h"
@@ -53,6 +54,8 @@ enum
 {
     ComboPage_Reset = 100,
     ComboPage_CurText,
+    ComboPage_Insert,
+    ComboPage_InsertText,
     ComboPage_Add,
     ComboPage_AddText,
     ComboPage_AddSeveral,
@@ -90,6 +93,7 @@ protected:
     void OnButtonDelete(wxCommandEvent& event);
     void OnButtonDeleteSel(wxCommandEvent& event);
     void OnButtonClear(wxCommandEvent& event);
+    void OnButtonInsert(wxCommandEvent &event);
     void OnButtonAdd(wxCommandEvent& event);
     void OnButtonAddSeveral(wxCommandEvent& event);
     void OnButtonAddMany(wxCommandEvent& event);
@@ -101,6 +105,7 @@ protected:
 
     void OnUpdateUICurText(wxUpdateUIEvent& event);
 
+    void OnUpdateUIInsert(wxUpdateUIEvent& event);
     void OnUpdateUIAddSeveral(wxUpdateUIEvent& event);
     void OnUpdateUIClearButton(wxUpdateUIEvent& event);
     void OnUpdateUIDeleteButton(wxUpdateUIEvent& event);
@@ -128,7 +133,8 @@ protected:
     wxSizer *m_sizerCombo;
 
     // the text entries for "Add/change string" and "Delete" buttons
-    wxTextCtrl *m_textAdd,
+    wxTextCtrl *m_textInsert,
+               *m_textAdd,
                *m_textChange,
                *m_textDelete;
 
@@ -147,16 +153,19 @@ BEGIN_EVENT_TABLE(ComboboxWidgetsPage, WidgetsPage)
     EVT_BUTTON(ComboPage_Delete, ComboboxWidgetsPage::OnButtonDelete)
     EVT_BUTTON(ComboPage_DeleteSel, ComboboxWidgetsPage::OnButtonDeleteSel)
     EVT_BUTTON(ComboPage_Clear, ComboboxWidgetsPage::OnButtonClear)
+    EVT_BUTTON(ComboPage_Insert, ComboboxWidgetsPage::OnButtonInsert)
     EVT_BUTTON(ComboPage_Add, ComboboxWidgetsPage::OnButtonAdd)
     EVT_BUTTON(ComboPage_AddSeveral, ComboboxWidgetsPage::OnButtonAddSeveral)
     EVT_BUTTON(ComboPage_AddMany, ComboboxWidgetsPage::OnButtonAddMany)
 
+    EVT_TEXT_ENTER(ComboPage_InsertText, ComboboxWidgetsPage::OnButtonInsert)
     EVT_TEXT_ENTER(ComboPage_AddText, ComboboxWidgetsPage::OnButtonAdd)
     EVT_TEXT_ENTER(ComboPage_DeleteText, ComboboxWidgetsPage::OnButtonDelete)
 
     EVT_UPDATE_UI(ComboPage_CurText, ComboboxWidgetsPage::OnUpdateUICurText)
 
     EVT_UPDATE_UI(ComboPage_Reset, ComboboxWidgetsPage::OnUpdateUIResetButton)
+    EVT_UPDATE_UI(ComboPage_Insert, ComboboxWidgetsPage::OnUpdateUIInsert)
     EVT_UPDATE_UI(ComboPage_AddSeveral, ComboboxWidgetsPage::OnUpdateUIAddSeveral)
     EVT_UPDATE_UI(ComboPage_Clear, ComboboxWidgetsPage::OnUpdateUIClearButton)
     EVT_UPDATE_UI(ComboPage_DeleteText, ComboboxWidgetsPage::OnUpdateUIClearButton)
@@ -167,9 +176,10 @@ BEGIN_EVENT_TABLE(ComboboxWidgetsPage, WidgetsPage)
 
     EVT_COMBOBOX(ComboPage_Combo, ComboboxWidgetsPage::OnComboBox)
     EVT_TEXT(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
+    EVT_TEXT_ENTER(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
 
-    EVT_CHECKBOX(-1, ComboboxWidgetsPage::OnCheckOrRadioBox)
-    EVT_RADIOBOX(-1, ComboboxWidgetsPage::OnCheckOrRadioBox)
+    EVT_CHECKBOX(wxID_ANY, ComboboxWidgetsPage::OnCheckOrRadioBox)
+    EVT_RADIOBOX(wxID_ANY, ComboboxWidgetsPage::OnCheckOrRadioBox)
 END_EVENT_TABLE()
 
 // ============================================================================
@@ -200,7 +210,7 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
     wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 
     // left pane
-    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
+    wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set style"));
 
     // should be in sync with ComboKind_XXX values
     static const wxString kinds[] =
@@ -210,7 +220,7 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
         _T("drop down"),
     };
 
-    m_radioKind = new wxRadioBox(this, -1, _T("Combobox &kind:"),
+    m_radioKind = new wxRadioBox(this, wxID_ANY, _T("Combobox &kind:"),
                                  wxDefaultPosition, wxDefaultSize,
                                  WXSIZEOF(kinds), kinds,
                                  1, wxRA_SPECIFY_COLS);
@@ -227,7 +237,8 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
     sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 
     // middle pane
-    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change combobox contents"));
+    wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY,
+        _T("&Change combobox contents"));
     wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 
     wxSizer *sizerRow;
@@ -236,20 +247,26 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
     sizerRow = CreateSizerWithTextAndLabel(_T("Current selection"),
                                            ComboPage_CurText,
                                            &text);
-    text->SetEditable(FALSE);
+    text->SetEditable(false);
 
     sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 
+    sizerRow = CreateSizerWithTextAndButton(ComboPage_Insert,
+                                            _T("&Insert this string"),
+                                            ComboPage_InsertText,
+                                            &m_textInsert);
+    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
+
     sizerRow = CreateSizerWithTextAndButton(ComboPage_Add,
                                             _T("&Add this string"),
                                             ComboPage_AddText,
                                             &m_textAdd);
     sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 
-    btn = new wxButton(this, ComboPage_AddSeveral, _T("&Insert a few strings"));
+    btn = new wxButton(this, ComboPage_AddSeveral, _T("&Append a few strings"));
     sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 
-    btn = new wxButton(this, ComboPage_AddMany, _T("Add &many strings"));
+    btn = new wxButton(this, ComboPage_AddMany, _T("Append &many strings"));
     sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 
     sizerRow = CreateSizerWithTextAndButton(ComboPage_Change,
@@ -272,7 +289,7 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
 
     // right pane
     wxSizer *sizerRight = new wxBoxSizer(wxVERTICAL);
-    m_combobox = new wxComboBox(this, ComboPage_Combo, _T(""),
+    m_combobox = new wxComboBox(this, ComboPage_Combo, wxEmptyString,
                                 wxDefaultPosition, wxDefaultSize,
                                 0, NULL,
                                 0);
@@ -288,7 +305,6 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
     // final initializations
     Reset();
 
-    SetAutoLayout(TRUE);
     SetSizer(sizerTop);
 
     sizerTop->Fit(this);
@@ -300,8 +316,8 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
 
 void ComboboxWidgetsPage::Reset()
 {
-    m_chkSort->SetValue(FALSE);
-    m_chkReadonly->SetValue(FALSE);
+    m_chkSort->SetValue(false);
+    m_chkReadonly->SetValue(false);
 }
 
 void ComboboxWidgetsPage::CreateCombo()
@@ -340,11 +356,11 @@ void ComboboxWidgetsPage::CreateCombo()
             items.Add(m_combobox->GetString(n));
         }
 
-        m_sizerCombo->Remove(m_combobox);
+        m_sizerCombo->Detach( m_combobox );
         delete m_combobox;
     }
 
-    m_combobox = new wxComboBox(this, ComboPage_Combo, _T(""),
+    m_combobox = new wxComboBox(this, ComboPage_Combo, wxEmptyString,
                                 wxDefaultPosition, wxDefaultSize,
                                 0, NULL,
                                 flags);
@@ -404,12 +420,27 @@ void ComboboxWidgetsPage::OnButtonDeleteSel(wxCommandEvent& WXUNUSED(event))
     }
 }
 
-void ComboboxWidgetsPage::OnButtonClear(wxCommandEvent& event)
+void ComboboxWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
 {
     m_combobox->Clear();
 }
 
-void ComboboxWidgetsPage::OnButtonAdd(wxCommandEvent& event)
+void ComboboxWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event))
+{
+    static unsigned int s_item = 0;
+
+    wxString s = m_textInsert->GetValue();
+    if ( !m_textInsert->IsModified() )
+    {
+        // update the default string
+        m_textInsert->SetValue(wxString::Format(_T("test item %u"), ++s_item));
+    }
+
+    if (m_combobox->GetSelection() >= 0)
+        m_combobox->Insert(s, m_combobox->GetSelection());
+}
+
+void ComboboxWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event))
 {
     static unsigned int s_item = 0;
 
@@ -432,7 +463,7 @@ void ComboboxWidgetsPage::OnButtonAddMany(wxCommandEvent& WXUNUSED(event))
     }
 }
 
-void ComboboxWidgetsPage::OnButtonAddSeveral(wxCommandEvent& event)
+void ComboboxWidgetsPage::OnButtonAddSeveral(wxCommandEvent& WXUNUSED(event))
 {
     m_combobox->Append(_T("First"));
     m_combobox->Append(_T("another one"));
@@ -451,6 +482,17 @@ void ComboboxWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
         event.Enable( m_chkSort->GetValue() || m_chkReadonly->GetValue() );
 }
 
+void ComboboxWidgetsPage::OnUpdateUIInsert(wxUpdateUIEvent& event)
+{
+    if (m_combobox)
+    {
+        bool enable = !(m_combobox->GetWindowStyle() & wxCB_SORT) &&
+                       (m_combobox->GetSelection() >= 0);
+
+        event.Enable(enable);
+    }
+}
+
 void ComboboxWidgetsPage::OnUpdateUIDeleteButton(wxUpdateUIEvent& event)
 {
     if (m_combobox)
@@ -489,6 +531,9 @@ void ComboboxWidgetsPage::OnComboText(wxCommandEvent& event)
     wxASSERT_MSG( s == m_combobox->GetValue(),
                   _T("event and combobox values should be the same") );
 
+    if (event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER)
+        wxLogMessage(_T("Combobox enter pressed (now '%s')"), s.c_str());
+    else
     wxLogMessage(_T("Combobox text changed (now '%s')"), s.c_str());
 }
 
@@ -500,7 +545,7 @@ void ComboboxWidgetsPage::OnComboBox(wxCommandEvent& event)
     wxLogMessage(_T("Combobox item %ld selected"), sel);
 }
 
-void ComboboxWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
+void ComboboxWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
 {
     CreateCombo();
 }