#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
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
void wxComboListBox::SetStringValue(const wxString& value)
{
- if ( !value.empty() && (FindString(value) != wxNOT_FOUND) )
- wxListBox::SetStringSelection(value);
+ if ( !value.empty() )
+ {
+ if (FindString(value) != wxNOT_FOUND)
+ wxListBox::SetStringSelection(value);
+ }
else
wxListBox::SetSelection(-1);
}
// wxComboBox methods forwarded to wxListBox
// ----------------------------------------------------------------------------
-void wxComboBox::Clear()
+void wxComboBox::DoClear()
{
GetLBox()->Clear();
if ( GetTextCtrl() ) GetTextCtrl()->SetValue(wxEmptyString);
}
-void wxComboBox::Delete(unsigned int n)
+void wxComboBox::DoDeleteOneItem(unsigned int n)
{
wxCHECK_RET( IsValid(n), _T("invalid index in wxComboBox::Delete") );
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
#endif
}
-int wxComboBox::DoAppend(const wxString& item)
+int wxComboBox::DoInsertItems(const wxArrayStringsAdapter & items,
+ unsigned int pos,
+ void **clientData, wxClientDataType type)
{
- return GetLBox()->Append(item);
-}
-
-int wxComboBox::DoInsert(const wxString& item, unsigned int pos)
-{
- wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
- wxCHECK_MSG(IsValidInsert(pos), -1, wxT("invalid index"));
-
- if (pos == GetCount())
- return DoAppend(item);
-
- GetLBox()->Insert(item, pos);
- return pos;
+ return GetLBox()->DoInsertItems(items, pos, clientData, type);
}
void wxComboBox::DoSetItemClientData(unsigned int n, void* clientData)
return GetLBox()->GetClientData(n);
}
-void wxComboBox::DoSetItemClientObject(unsigned int n, wxClientData* clientData)
-{
- GetLBox()->SetClientObject(n, clientData);
-}
-
-wxClientData* wxComboBox::DoGetItemClientObject(unsigned int n) const
-{
- return GetLBox()->GetClientObject(n);
-}
-
bool wxComboBox::IsEditable() const
{
return GetTextCtrl() != NULL && (!HasFlag(wxCB_READONLY) || GetTextCtrl()->IsEditable() );
return wxStdInputHandler::HandleKey(consumer, event, pressed);
}
+/* static */
+wxInputHandler *wxComboBox::GetStdInputHandler(wxInputHandler *handlerDef)
+{
+ static wxStdComboBoxInputHandler s_handler(handlerDef);
+
+ return &s_handler;
+}
#endif // wxUSE_COMBOBOX