]> git.saurik.com Git - wxWidgets.git/commitdiff
derive wxComboBox from wxItemContainer (via wxComboBoxBase) in wxGTK (patch 802882)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 20 Sep 2003 16:31:06 +0000 (16:31 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 20 Sep 2003 16:31:06 +0000 (16:31 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23746 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/combobox.h
include/wx/gtk1/combobox.h
include/wx/mac/combobox.h
include/wx/univ/combobox.h
src/gtk/combobox.cpp
src/gtk1/combobox.cpp

index 65938c863628ca4f94319bf3ed06d5f75b36bafc..54f5d30cf7acd16cd3fed3343978e9fd3e6c450b 100644 (file)
@@ -21,7 +21,6 @@
 #if wxUSE_COMBOBOX
 
 #include "wx/object.h"
-#include "wx/control.h"
 
 //-----------------------------------------------------------------------------
 // classes
@@ -40,7 +39,7 @@ extern const wxChar* wxEmptyString;
 // wxComboBox
 //-----------------------------------------------------------------------------
 
-class wxComboBox : public wxControl
+class wxComboBox : public wxControl, public wxComboBoxBase
 {
 public:
     inline wxComboBox() {}
@@ -55,7 +54,9 @@ public:
     {
         Create(parent, id, value, pos, size, n, choices, style, validator, name);
     }
+
     ~wxComboBox();
+
     bool Create(wxWindow *parent, wxWindowID id,
            const wxString& value = wxEmptyString,
            const wxPoint& pos = wxDefaultPosition,
@@ -65,34 +66,17 @@ public:
            const wxValidator& validator = wxDefaultValidator,
            const wxString& name = wxComboBoxNameStr);
 
-    int Append( const wxString &item );
-    int Append( const wxString &item, void* clientData );
-    int Append( const wxString &item, wxClientData* clientData );
-
-    int Insert( const wxString &item, int pos );
-    int Insert( const wxString &item, int pos, void* clientData );
-    int Insert( const wxString &item, int pos, wxClientData* clientData );
-
-    void SetClientData( int n, void* clientData );
-    void* GetClientData( int n ) const;
-    void SetClientObject( int n, wxClientData* clientData );
-    wxClientData* GetClientObject( int n ) const;
-
-    void SetClientObject( wxClientData *data )  { wxControl::SetClientObject( data ); }
-    wxClientData *GetClientObject() const       { return wxControl::GetClientObject(); }
-    void SetClientData( void *data )            { wxControl::SetClientData( data ); }
-    void *GetClientData() const                 { return wxControl::GetClientData(); }
-
     void Clear();
     void Delete( int n );
 
-    int FindString( const wxString &item );
+    virtual int FindString( const wxString &item ) const;
     int GetSelection() const;
     wxString GetString( int n ) const;
     wxString GetStringSelection() const;
-    int GetCount() const { return Number(); }
-    int Number() const;
+    int GetCount() const;
+    int Number() const { return GetCount(); }
     void SetSelection( int n );
+    void Select( int n ) { return SetSelection( n ); }
     void SetStringSelection( const wxString &string );
     void SetString(int n, const wxString &text);
 
@@ -103,11 +87,11 @@ public:
     void Cut();
     void Paste();
     void SetInsertionPoint( long pos );
-    void SetInsertionPointEnd();
+    void SetInsertionPointEnd() { SetInsertionPoint( -1 ); }
     long GetInsertionPoint() const;
     long GetLastPosition() const;
+    void Remove(long from, long to) { Replace(from, to, wxEmptyString); }
     void Replace( long from, long to, const wxString& value );
-    void Remove( long from, long to );
     void SetSelection( long from, long to );
     void SetEditable( bool editable );
 
@@ -125,17 +109,25 @@ public:
 
     void DisableEvents();
     void EnableEvents();
-    int AppendCommon( const wxString &item );
-    int InsertCommon( const wxString &item, int pos );
     GtkWidget* GetConnectWidget();
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
 
+    wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
+
 protected:
+    virtual int DoAppend(const wxString& item);
+    virtual int DoInsert(const wxString& item, int pos);
+
+    virtual void DoSetItemClientData( int n, void* clientData );
+    virtual void* DoGetItemClientData( int n ) const;
+    virtual void DoSetItemClientObject( int n, wxClientData* clientData );
+    virtual wxClientData* DoGetItemClientObject( int n ) const;
+
     virtual wxSize DoGetBestSize() const;
 
 private:
-    DECLARE_DYNAMIC_CLASS(wxComboBox)
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxComboBox)
     DECLARE_EVENT_TABLE()
 };
 
index 65938c863628ca4f94319bf3ed06d5f75b36bafc..54f5d30cf7acd16cd3fed3343978e9fd3e6c450b 100644 (file)
@@ -21,7 +21,6 @@
 #if wxUSE_COMBOBOX
 
 #include "wx/object.h"
-#include "wx/control.h"
 
 //-----------------------------------------------------------------------------
 // classes
@@ -40,7 +39,7 @@ extern const wxChar* wxEmptyString;
 // wxComboBox
 //-----------------------------------------------------------------------------
 
-class wxComboBox : public wxControl
+class wxComboBox : public wxControl, public wxComboBoxBase
 {
 public:
     inline wxComboBox() {}
@@ -55,7 +54,9 @@ public:
     {
         Create(parent, id, value, pos, size, n, choices, style, validator, name);
     }
+
     ~wxComboBox();
+
     bool Create(wxWindow *parent, wxWindowID id,
            const wxString& value = wxEmptyString,
            const wxPoint& pos = wxDefaultPosition,
@@ -65,34 +66,17 @@ public:
            const wxValidator& validator = wxDefaultValidator,
            const wxString& name = wxComboBoxNameStr);
 
-    int Append( const wxString &item );
-    int Append( const wxString &item, void* clientData );
-    int Append( const wxString &item, wxClientData* clientData );
-
-    int Insert( const wxString &item, int pos );
-    int Insert( const wxString &item, int pos, void* clientData );
-    int Insert( const wxString &item, int pos, wxClientData* clientData );
-
-    void SetClientData( int n, void* clientData );
-    void* GetClientData( int n ) const;
-    void SetClientObject( int n, wxClientData* clientData );
-    wxClientData* GetClientObject( int n ) const;
-
-    void SetClientObject( wxClientData *data )  { wxControl::SetClientObject( data ); }
-    wxClientData *GetClientObject() const       { return wxControl::GetClientObject(); }
-    void SetClientData( void *data )            { wxControl::SetClientData( data ); }
-    void *GetClientData() const                 { return wxControl::GetClientData(); }
-
     void Clear();
     void Delete( int n );
 
-    int FindString( const wxString &item );
+    virtual int FindString( const wxString &item ) const;
     int GetSelection() const;
     wxString GetString( int n ) const;
     wxString GetStringSelection() const;
-    int GetCount() const { return Number(); }
-    int Number() const;
+    int GetCount() const;
+    int Number() const { return GetCount(); }
     void SetSelection( int n );
+    void Select( int n ) { return SetSelection( n ); }
     void SetStringSelection( const wxString &string );
     void SetString(int n, const wxString &text);
 
@@ -103,11 +87,11 @@ public:
     void Cut();
     void Paste();
     void SetInsertionPoint( long pos );
-    void SetInsertionPointEnd();
+    void SetInsertionPointEnd() { SetInsertionPoint( -1 ); }
     long GetInsertionPoint() const;
     long GetLastPosition() const;
+    void Remove(long from, long to) { Replace(from, to, wxEmptyString); }
     void Replace( long from, long to, const wxString& value );
-    void Remove( long from, long to );
     void SetSelection( long from, long to );
     void SetEditable( bool editable );
 
@@ -125,17 +109,25 @@ public:
 
     void DisableEvents();
     void EnableEvents();
-    int AppendCommon( const wxString &item );
-    int InsertCommon( const wxString &item, int pos );
     GtkWidget* GetConnectWidget();
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
 
+    wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
+
 protected:
+    virtual int DoAppend(const wxString& item);
+    virtual int DoInsert(const wxString& item, int pos);
+
+    virtual void DoSetItemClientData( int n, void* clientData );
+    virtual void* DoGetItemClientData( int n ) const;
+    virtual void DoSetItemClientObject( int n, wxClientData* clientData );
+    virtual wxClientData* DoGetItemClientObject( int n ) const;
+
     virtual wxSize DoGetBestSize() const;
 
 private:
-    DECLARE_DYNAMIC_CLASS(wxComboBox)
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxComboBox)
     DECLARE_EVENT_TABLE()
 };
 
index fcdba4fef309f1a1680784f7ea87807ed0719bdd..f730beb2c122f11bcc2e4375d16577e82272b31f 100644 (file)
@@ -95,6 +95,8 @@ class WXDLLEXPORT wxComboBox: public wxComboBoxBase , public wxControl
     virtual int GetCount() const { return m_choice->GetCount() ; }
     void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ;
 
+    wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
+
 protected:
     virtual int DoAppend(const wxString& item) ;
     virtual int DoInsert(const wxString& item, int pos) ;
index c92cea953e0972e90295a3c5836f06604bd957d0..28be5a0a2e5f44a22a8cd9d04dd48f2524a39778 100644 (file)
@@ -279,54 +279,7 @@ public:
 
     void SetStringSelection(const wxString& WXUNUSED(s)) {  }
 
-    // we have to redefine these functions here to avoid ambiguities in classes
-    // deriving from us which would arise otherwise because we inherit these
-    // methods (with different signatures) from both wxItemContainer via
-    // wxComboBoxBase (with "int n" parameter) and from wxEvtHandler via
-    // wxControl and wxComboControl (without)
-    //
-    // hopefully, a smart compiler can optimize away these simple inline
-    // wrappers so we don't suffer much from this
-
-    void SetClientData(void *data)
-    {
-        wxControl::SetClientData(data);
-    }
-
-    void *GetClientData() const
-    {
-        return wxControl::GetClientData();
-    }
-
-    void SetClientObject(wxClientData *data)
-    {
-        wxControl::SetClientObject(data);
-    }
-
-    wxClientData *GetClientObject() const
-    {
-        return wxControl::GetClientObject();
-    }
-
-    void SetClientData(int n, void* clientData)
-    {
-        wxItemContainer::SetClientData(n, clientData);
-    }
-
-    void* GetClientData(int n) const
-    {
-        return wxItemContainer::GetClientData(n);
-    }
-
-    void SetClientObject(int n, wxClientData* clientData)
-    {
-        wxItemContainer::SetClientObject(n, clientData);
-    }
-
-    wxClientData* GetClientObject(int n) const
-    {
-        return wxItemContainer::GetClientObject(n);
-    }
+    wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
 
 protected:
     virtual int DoAppend(const wxString& item);
index 60bbf8f50d257559cec9684145b0fcb4d8b4403a..0fb03dc36a270e5cb0e8174c043f94da11e1b032 100644 (file)
@@ -223,7 +223,7 @@ void wxComboBox::SetFocus()
     gtk_widget_grab_focus( m_focusWidget );
 }
 
-int wxComboBox::AppendCommon( const wxString &item )
+int wxComboBox::DoAppend( const wxString &item )
 {
     wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") );
 
@@ -245,36 +245,19 @@ int wxComboBox::AppendCommon( const wxString &item )
 
     gtk_widget_show( list_item );
 
-    EnableEvents();
-
-    return GetCount() - 1;
-}
+    const int count = GetCount();
 
-int wxComboBox::Append( const wxString &item )
-{
+    if ( (int)m_clientDataList.GetCount() < count )
     m_clientDataList.Append( (wxObject*) NULL );
+    if ( (int)m_clientObjectList.GetCount() < count )
     m_clientObjectList.Append( (wxObject*) NULL );
 
-    return AppendCommon( item );
-}
-
-int wxComboBox::Append( const wxString &item, void *clientData )
-{
-    m_clientDataList.Append( (wxObject*) clientData );
-    m_clientObjectList.Append( (wxObject*)NULL );
-
-    return AppendCommon( item );
-}
-
-int wxComboBox::Append( const wxString &item, wxClientData *clientData )
-{
-    m_clientDataList.Append( (wxObject*) NULL );
-    m_clientObjectList.Append( (wxObject*) clientData );
+    EnableEvents();
 
-    return AppendCommon( item );
+    return count - 1;
 }
 
-int wxComboBox::InsertCommon( const wxString &item, int pos )
+int wxComboBox::DoInsert( const wxString &item, int pos )
 {
     wxCHECK_MSG( !(GetWindowStyle() & wxCB_SORT), -1,
                     wxT("can't insert into sorted list"));
@@ -282,10 +265,10 @@ int wxComboBox::InsertCommon( const wxString &item, int pos )
     wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") );
 
     int count = GetCount();
+    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
+
     if (pos == count)
-    {
-        return AppendCommon(item);
-    }
+        return Append(item);
 
     DisableEvents();
 
@@ -308,60 +291,19 @@ int wxComboBox::InsertCommon( const wxString &item, int pos )
 
     gtk_widget_show( list_item );
 
-    EnableEvents();
-
-    return pos;
-}
-
-int wxComboBox::Insert( const wxString &item, int pos )
-{
-    const int count = GetCount();
-    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
-
-    if (pos == count)
-    {
-        return Append(item);
-    }
+    count = GetCount();
 
+    if ( (int)m_clientDataList.GetCount() < count )
     m_clientDataList.Insert( pos, (wxObject*) NULL );
+    if ( (int)m_clientObjectList.GetCount() < count )
     m_clientObjectList.Insert( pos, (wxObject*) NULL );
 
-    return InsertCommon( item, pos );
-}
-
-int wxComboBox::Insert( const wxString &item, int pos, void *clientData )
-{
-    int count = GetCount();
-    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
-
-    if (pos == count)
-    {
-        return Append(item, clientData);
-    }
-
-    m_clientDataList.Insert( pos, (wxObject*) clientData );
-    m_clientObjectList.Insert( pos, (wxObject*)NULL );
-
-    return InsertCommon( item, pos );
-}
-
-int wxComboBox::Insert( const wxString &item, int pos, wxClientData *clientData )
-{
-    int count = GetCount();
-    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
-
-    if (pos == count)
-    {
-        return Append(item, clientData);
-    }
-
-    m_clientDataList.Insert( pos, (wxObject*) NULL );
-    m_clientObjectList.Insert( pos, (wxObject*) clientData );
+    EnableEvents();
 
-    return InsertCommon( item, pos );
+    return pos;
 }
 
-void wxComboBox::SetClientData( int n, void* clientData )
+void wxComboBox::DoSetItemClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
@@ -371,7 +313,7 @@ void wxComboBox::SetClientData( int n, void* clientData )
     node->SetData( (wxObject*) clientData );
 }
 
-void* wxComboBox::GetClientData( int n ) const
+void* wxComboBox::DoGetItemClientData( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid combobox") );
 
@@ -380,7 +322,7 @@ void* wxComboBox::GetClientData( int n ) const
     return node ? node->GetData() : NULL;
 }
 
-void wxComboBox::SetClientObject( int n, wxClientData* clientData )
+void wxComboBox::DoSetItemClientObject( int n, wxClientData* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
@@ -393,7 +335,7 @@ void wxComboBox::SetClientObject( int n, wxClientData* clientData )
     node->SetData( (wxObject*) clientData );
 }
 
-wxClientData* wxComboBox::GetClientObject( int n ) const
+wxClientData* wxComboBox::DoGetItemClientObject( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, wxT("invalid combobox") );
 
@@ -409,7 +351,7 @@ void wxComboBox::Clear()
     DisableEvents();
 
     GtkWidget *list = GTK_COMBO(m_widget)->list;
-    gtk_list_clear_items( GTK_LIST(list), 0, Number() );
+    gtk_list_clear_items( GTK_LIST(list), 0, GetCount() );
 
     wxList::compatibility_iterator node = m_clientObjectList.GetFirst();
     while (node)
@@ -479,7 +421,7 @@ void wxComboBox::SetString(int n, const wxString &text)
     }
 }
 
-int wxComboBox::FindString( const wxString &item )
+int wxComboBox::FindString( const wxString &item ) const
 {
     wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") );
 
@@ -578,7 +520,7 @@ wxString wxComboBox::GetStringSelection() const
     return wxT("");
 }
 
-int wxComboBox::Number() const
+int wxComboBox::GetCount() const
 {
     wxCHECK_MSG( m_widget != NULL, 0, wxT("invalid combobox") );
 
@@ -668,17 +610,13 @@ void wxComboBox::SetInsertionPoint( long pos )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
+    if ( pos == GetLastPosition() )
+        pos = -1;
+
     GtkWidget *entry = GTK_COMBO(m_widget)->entry;
     gtk_entry_set_position( GTK_ENTRY(entry), (int)pos );
 }
 
-void wxComboBox::SetInsertionPointEnd()
-{
-    wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
-
-    SetInsertionPoint( -1 );
-}
-
 long wxComboBox::GetInsertionPoint() const
 {
     return (long) GET_EDITABLE_POS( GTK_COMBO(m_widget)->entry );
@@ -708,14 +646,6 @@ void wxComboBox::Replace( long from, long to, const wxString& value )
 #endif
 }
 
-void wxComboBox::Remove(long from, long to)
-{
-    wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
-
-    GtkWidget *entry = GTK_COMBO(m_widget)->entry;
-    gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
-}
-
 void wxComboBox::SetSelection( long from, long to )
 {
     GtkWidget *entry = GTK_COMBO(m_widget)->entry;
index 60bbf8f50d257559cec9684145b0fcb4d8b4403a..0fb03dc36a270e5cb0e8174c043f94da11e1b032 100644 (file)
@@ -223,7 +223,7 @@ void wxComboBox::SetFocus()
     gtk_widget_grab_focus( m_focusWidget );
 }
 
-int wxComboBox::AppendCommon( const wxString &item )
+int wxComboBox::DoAppend( const wxString &item )
 {
     wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") );
 
@@ -245,36 +245,19 @@ int wxComboBox::AppendCommon( const wxString &item )
 
     gtk_widget_show( list_item );
 
-    EnableEvents();
-
-    return GetCount() - 1;
-}
+    const int count = GetCount();
 
-int wxComboBox::Append( const wxString &item )
-{
+    if ( (int)m_clientDataList.GetCount() < count )
     m_clientDataList.Append( (wxObject*) NULL );
+    if ( (int)m_clientObjectList.GetCount() < count )
     m_clientObjectList.Append( (wxObject*) NULL );
 
-    return AppendCommon( item );
-}
-
-int wxComboBox::Append( const wxString &item, void *clientData )
-{
-    m_clientDataList.Append( (wxObject*) clientData );
-    m_clientObjectList.Append( (wxObject*)NULL );
-
-    return AppendCommon( item );
-}
-
-int wxComboBox::Append( const wxString &item, wxClientData *clientData )
-{
-    m_clientDataList.Append( (wxObject*) NULL );
-    m_clientObjectList.Append( (wxObject*) clientData );
+    EnableEvents();
 
-    return AppendCommon( item );
+    return count - 1;
 }
 
-int wxComboBox::InsertCommon( const wxString &item, int pos )
+int wxComboBox::DoInsert( const wxString &item, int pos )
 {
     wxCHECK_MSG( !(GetWindowStyle() & wxCB_SORT), -1,
                     wxT("can't insert into sorted list"));
@@ -282,10 +265,10 @@ int wxComboBox::InsertCommon( const wxString &item, int pos )
     wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") );
 
     int count = GetCount();
+    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
+
     if (pos == count)
-    {
-        return AppendCommon(item);
-    }
+        return Append(item);
 
     DisableEvents();
 
@@ -308,60 +291,19 @@ int wxComboBox::InsertCommon( const wxString &item, int pos )
 
     gtk_widget_show( list_item );
 
-    EnableEvents();
-
-    return pos;
-}
-
-int wxComboBox::Insert( const wxString &item, int pos )
-{
-    const int count = GetCount();
-    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
-
-    if (pos == count)
-    {
-        return Append(item);
-    }
+    count = GetCount();
 
+    if ( (int)m_clientDataList.GetCount() < count )
     m_clientDataList.Insert( pos, (wxObject*) NULL );
+    if ( (int)m_clientObjectList.GetCount() < count )
     m_clientObjectList.Insert( pos, (wxObject*) NULL );
 
-    return InsertCommon( item, pos );
-}
-
-int wxComboBox::Insert( const wxString &item, int pos, void *clientData )
-{
-    int count = GetCount();
-    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
-
-    if (pos == count)
-    {
-        return Append(item, clientData);
-    }
-
-    m_clientDataList.Insert( pos, (wxObject*) clientData );
-    m_clientObjectList.Insert( pos, (wxObject*)NULL );
-
-    return InsertCommon( item, pos );
-}
-
-int wxComboBox::Insert( const wxString &item, int pos, wxClientData *clientData )
-{
-    int count = GetCount();
-    wxCHECK_MSG( (pos >= 0) && (pos <= count), -1, wxT("invalid index") );
-
-    if (pos == count)
-    {
-        return Append(item, clientData);
-    }
-
-    m_clientDataList.Insert( pos, (wxObject*) NULL );
-    m_clientObjectList.Insert( pos, (wxObject*) clientData );
+    EnableEvents();
 
-    return InsertCommon( item, pos );
+    return pos;
 }
 
-void wxComboBox::SetClientData( int n, void* clientData )
+void wxComboBox::DoSetItemClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
@@ -371,7 +313,7 @@ void wxComboBox::SetClientData( int n, void* clientData )
     node->SetData( (wxObject*) clientData );
 }
 
-void* wxComboBox::GetClientData( int n ) const
+void* wxComboBox::DoGetItemClientData( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid combobox") );
 
@@ -380,7 +322,7 @@ void* wxComboBox::GetClientData( int n ) const
     return node ? node->GetData() : NULL;
 }
 
-void wxComboBox::SetClientObject( int n, wxClientData* clientData )
+void wxComboBox::DoSetItemClientObject( int n, wxClientData* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
@@ -393,7 +335,7 @@ void wxComboBox::SetClientObject( int n, wxClientData* clientData )
     node->SetData( (wxObject*) clientData );
 }
 
-wxClientData* wxComboBox::GetClientObject( int n ) const
+wxClientData* wxComboBox::DoGetItemClientObject( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, wxT("invalid combobox") );
 
@@ -409,7 +351,7 @@ void wxComboBox::Clear()
     DisableEvents();
 
     GtkWidget *list = GTK_COMBO(m_widget)->list;
-    gtk_list_clear_items( GTK_LIST(list), 0, Number() );
+    gtk_list_clear_items( GTK_LIST(list), 0, GetCount() );
 
     wxList::compatibility_iterator node = m_clientObjectList.GetFirst();
     while (node)
@@ -479,7 +421,7 @@ void wxComboBox::SetString(int n, const wxString &text)
     }
 }
 
-int wxComboBox::FindString( const wxString &item )
+int wxComboBox::FindString( const wxString &item ) const
 {
     wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") );
 
@@ -578,7 +520,7 @@ wxString wxComboBox::GetStringSelection() const
     return wxT("");
 }
 
-int wxComboBox::Number() const
+int wxComboBox::GetCount() const
 {
     wxCHECK_MSG( m_widget != NULL, 0, wxT("invalid combobox") );
 
@@ -668,17 +610,13 @@ void wxComboBox::SetInsertionPoint( long pos )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
+    if ( pos == GetLastPosition() )
+        pos = -1;
+
     GtkWidget *entry = GTK_COMBO(m_widget)->entry;
     gtk_entry_set_position( GTK_ENTRY(entry), (int)pos );
 }
 
-void wxComboBox::SetInsertionPointEnd()
-{
-    wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
-
-    SetInsertionPoint( -1 );
-}
-
 long wxComboBox::GetInsertionPoint() const
 {
     return (long) GET_EDITABLE_POS( GTK_COMBO(m_widget)->entry );
@@ -708,14 +646,6 @@ void wxComboBox::Replace( long from, long to, const wxString& value )
 #endif
 }
 
-void wxComboBox::Remove(long from, long to)
-{
-    wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
-
-    GtkWidget *entry = GTK_COMBO(m_widget)->entry;
-    gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
-}
-
 void wxComboBox::SetSelection( long from, long to )
 {
     GtkWidget *entry = GTK_COMBO(m_widget)->entry;