X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/615a96e37dd349bfee9b5b4e758d56a1a501ad97..0286d08d1453506f9ff9a830d58b3b35817d0b14:/src/univ/combobox.cpp diff --git a/src/univ/combobox.cpp b/src/univ/combobox.cpp index 4c011c1a7e..f347cfe1b9 100644 --- a/src/univ/combobox.cpp +++ b/src/univ/combobox.cpp @@ -44,6 +44,19 @@ #include "wx/univ/inphand.h" #include "wx/univ/theme.h" +// ---------------------------------------------------------------------------- +// wxStdComboBoxInputHandler: allows the user to open/close the combo from kbd +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxStdComboBoxInputHandler : public wxStdInputHandler +{ +public: + wxStdComboBoxInputHandler(wxInputHandler *inphand); + + virtual bool HandleKey(wxInputConsumer *consumer, + const wxKeyEvent& event, + bool pressed); +}; // ---------------------------------------------------------------------------- // wxComboListBox is a listbox modified to be used as a popup window in a @@ -109,8 +122,8 @@ bool wxComboListBox::Create(wxWindow* parent) if ( !wxListBox::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, - wxBORDER_SIMPLE | wxLB_INT_HEIGHT | - m_combo->GetWindowStyle() & wxCB_SORT ? wxLB_SORT : 0) ) + wxBORDER_SIMPLE | + ( m_combo->GetWindowStyle() & wxCB_SORT ? wxLB_SORT : 0 ) ) ) return false; // we don't react to the mouse events outside the window at all @@ -132,9 +145,9 @@ void wxComboListBox::SetStringValue(const wxString& value) { if ( !value.empty() ) { - if (FindString(value) != wxNOT_FOUND) - wxListBox::SetStringSelection(value); - } + if (FindString(value) != wxNOT_FOUND) + wxListBox::SetStringSelection(value); + } else wxListBox::SetSelection(-1); } @@ -373,10 +386,15 @@ int wxComboBox::FindString(const wxString& s, bool bCase) const void wxComboBox::SetSelection(int n) { - wxCHECK_RET( IsValid(n), _T("invalid index in wxComboBox::Select") ); + wxCHECK_RET( (n == wxNOT_FOUND || IsValid(n)), _T("invalid index in wxComboBox::Select") ); GetLBox()->SetSelection(n); - if ( GetTextCtrl() ) GetTextCtrl()->SetValue(GetLBox()->GetString(n)); + + wxString str; + if ( n != wxNOT_FOUND ) + str = GetLBox()->GetString(n); + + SetText(str); } int wxComboBox::GetSelection() const @@ -530,5 +548,12 @@ bool wxStdComboBoxInputHandler::HandleKey(wxInputConsumer *consumer, return wxStdInputHandler::HandleKey(consumer, event, pressed); } +/* static */ +wxInputHandler *wxComboBox::GetStdInputHandler(wxInputHandler *handlerDef) +{ + static wxStdComboBoxInputHandler s_handler(handlerDef); + + return &s_handler; +} #endif // wxUSE_COMBOBOX