]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/combobox.cpp
Fix scrolling bug where client size was reported wrong
[wxWidgets.git] / src / univ / combobox.cpp
index b884e8482df2c350215059a129aa38f6ddb59697..28ae78ee6d4f6d545a0af13498fc1be5da241cd9 100644 (file)
 #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
@@ -54,7 +67,7 @@ class wxComboListBox : public wxListBox, public wxComboPopup
 {
 public:
     // ctor and dtor
-    wxComboListBox(wxComboControlBase *combo);
+    wxComboListBox();
     virtual ~wxComboListBox();
 
     // implement wxComboPopup methods
@@ -90,7 +103,7 @@ BEGIN_EVENT_TABLE(wxComboListBox, wxListBox)
     EVT_LEFT_UP(wxComboListBox::OnLeftUp)
 END_EVENT_TABLE()
 
-IMPLEMENT_DYNAMIC_CLASS2(wxComboBox, wxControl, wxComboControl)
+IMPLEMENT_DYNAMIC_CLASS2(wxComboBox, wxControl, wxComboCtrl)
 
 // ============================================================================
 // implementation
@@ -100,9 +113,7 @@ IMPLEMENT_DYNAMIC_CLASS2(wxComboBox, wxControl, wxComboControl)
 // wxComboListBox
 // ----------------------------------------------------------------------------
 
-wxComboListBox::wxComboListBox(wxComboControlBase *combo)
-              : wxListBox(),
-                wxComboPopup(combo)
+wxComboListBox::wxComboListBox() : wxListBox(), wxComboPopup()
 {
 }
 
@@ -133,28 +144,12 @@ wxString wxComboListBox::GetStringValue() const
 void wxComboListBox::SetStringValue(const wxString& value)
 {
     if ( !value.empty() )
-        wxListBox::SetStringSelection(value);
+    {
+               if (FindString(value) != wxNOT_FOUND)
+               wxListBox::SetStringSelection(value);
+       }
     else
         wxListBox::SetSelection(-1);
-
-    /*
-    // PRE-GLOBAL WXCOMBOCONTROL CODE:
-
-    // FindItem() would just find the current item for an empty string (it
-    // always matches), but we want to show the first one in such case
-    if ( value.empty() )
-    {
-        if ( GetCount() > 0 )
-        {
-            wxListBox::SetSelection(0);
-        }
-        //else: empty listbox - nothing to do
-    }
-    else if ( !FindItem(value) )
-    {
-        // no match att all
-    }
-    */
 }
 
 void wxComboListBox::OnPopup()
@@ -170,7 +165,7 @@ bool wxComboListBox::PerformAction(const wxControlAction& action,
     {
         // we don't let the listbox handle this as instead of just using the
         // single key presses, as usual, we use the text ctrl value as prefix
-        // and this is done by wxComboControl itself
+        // and this is done by wxComboCtrl itself
         return true;
     }
 
@@ -253,13 +248,13 @@ bool wxComboBox::Create(wxWindow *parent,
                         const wxValidator& validator,
                         const wxString& name)
 {
-    if ( !wxComboControl::Create(parent, id, value, pos, size, style,
+    if ( !wxComboCtrl::Create(parent, id, value, pos, size, style,
                                  validator, name) )
     {
         return false;
     }
 
-    wxComboListBox *combolbox = new wxComboListBox(this);
+    wxComboListBox *combolbox = new wxComboListBox();
     SetPopupControl(combolbox);
 
     m_lbox = combolbox;
@@ -278,12 +273,12 @@ wxComboBox::~wxComboBox()
 
 wxString wxComboBox::GetValue() const
 {
-    return wxComboControl::GetValue();
+    return wxComboCtrl::GetValue();
 }
 
 void wxComboBox::SetValue(const wxString& value)
 {
-    wxComboControl::SetValue(value);
+    wxComboCtrl::SetValue(value);
 }
 
 void wxComboBox::Copy()
@@ -548,5 +543,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