]> git.saurik.com Git - wxWidgets.git/commitdiff
Insert() patch from John Labenski
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 9 May 2003 12:58:28 +0000 (12:58 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 9 May 2003 12:58:28 +0000 (12:58 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20564 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

27 files changed:
docs/latex/wx/ctrlsub.tex
include/wx/ctrlsub.h
include/wx/gtk/choice.h
include/wx/gtk/combobox.h
include/wx/gtk1/choice.h
include/wx/gtk1/combobox.h
include/wx/listbox.h
include/wx/mac/choice.h
include/wx/motif/choice.h
include/wx/motif/combobox.h
include/wx/msw/choice.h
include/wx/os2/choice.h
include/wx/univ/combobox.h
samples/widgets/combobox.cpp
src/common/ctrlsub.cpp
src/gtk/choice.cpp
src/gtk/combobox.cpp
src/gtk1/choice.cpp
src/gtk1/combobox.cpp
src/mac/carbon/choice.cpp
src/mac/choice.cpp
src/motif/choice.cpp
src/motif/combobox.cpp
src/motif/combobox_native.cpp
src/msw/choice.cpp
src/os2/choice.cpp
src/univ/combobox.cpp

index 55d6c1ac361361be2e83576354b856b23af50d8a..80e9c90e603dfa09d0a9bd84a46961166d8ed42c 100644 (file)
@@ -1,4 +1,4 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Name:        ctrlsub.tex
 %% Purpose:     wxControlWithItems documentation
 %% Author:      Vadim Zeitlin
 %% Name:        ctrlsub.tex
 %% Purpose:     wxControlWithItems documentation
 %% Author:      Vadim Zeitlin
@@ -7,7 +7,7 @@
 %% RCS-ID:      $Id$
 %% Copyright:   (c) 2003 Vadim Zeitlin
 %% License:     wxWindows license
 %% RCS-ID:      $Id$
 %% Copyright:   (c) 2003 Vadim Zeitlin
 %% License:     wxWindows license
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \section{\class{wxControlWithItems}}\label{wxcontrolwithitems}
 
 
 \section{\class{wxControlWithItems}}\label{wxcontrolwithitems}
 
@@ -218,6 +218,35 @@ selected.
 \helpref{GetSelection}{wxcontrolwithitemsgetselection}
 
 
 \helpref{GetSelection}{wxcontrolwithitemsgetselection}
 
 
+\membersection{wxControlWithItems::Insert}\label{wxcontrolwithitemsinsert}
+
+\func{int}{Insert}{\param{const wxString\& }{ item}, \param{int }{pos}}
+
+Inserts the item into the list before pos.
+Not valid for {\tt wxLB\_SORT} or {\tt wxCB\_SORT} styles, use Append instead.
+
+\func{int}{Insert}{\param{const wxString\& }{ item}, \param{int }{pos}, \param{void *}{clientData}}
+
+\func{int}{Insert}{\param{const wxString\& }{ item}, \param{int }{pos}, \param{wxClientData *}{clientData}}
+
+Inserts the item into the list before pos, associating the given, typed or
+untyped, client data pointer with the item.
+Not valid for {\tt wxLB\_SORT} or {\tt wxCB\_SORT} styles, use Append instead.
+
+\wxheading{Parameters}
+
+\docparam{item}{String to add.}
+
+\docparam{pos}{Position to insert item before, zero based.}
+
+\docparam{clientData}{Client data to associate with the item.}
+
+\wxheading{Return value}
+
+The return value is the index of the newly inserted item. If the insertion failed
+for some reason, -1 is returned.
+
+
 \membersection{wxControlWithItems::IsEmpty}\label{wxcontrolwithitemsisempty}
 
 \constfunc{bool}{IsEmpty}{\void}
 \membersection{wxControlWithItems::IsEmpty}\label{wxcontrolwithitemsisempty}
 
 \constfunc{bool}{IsEmpty}{\void}
index 4052e56e87907b8ac7e818773e25189c78526133..20c3e5b5a409fc078ff3eb4aae4c894b1497ea3b 100644 (file)
@@ -47,6 +47,11 @@ public:
     // append several items at once to the control
     void Append(const wxArrayString& strings);
 
     // append several items at once to the control
     void Append(const wxArrayString& strings);
 
+    int Insert(const wxString& item, int pos)
+        { return DoInsert(item, pos); }
+    int Insert(const wxString& item, int pos, void *clientData);
+    int Insert(const wxString& item, int pos, wxClientData *clientData);
+
     // deleting items
     // --------------
 
     // deleting items
     // --------------
 
@@ -94,6 +99,7 @@ public:
 
 protected:
     virtual int DoAppend(const wxString& item) = 0;
 
 protected:
     virtual int DoAppend(const wxString& item) = 0;
+    virtual int DoInsert(const wxString& item, int pos) = 0;
 
     virtual void DoSetItemClientData(int n, void* clientData) = 0;
     virtual void* DoGetItemClientData(int n) const = 0;
 
     virtual void DoSetItemClientData(int n, void* clientData) = 0;
     virtual void* DoGetItemClientData(int n) const = 0;
index 6acce9a5deda489c9ea56d7fedca689addf1bd93..5f550d732a5f31bab5d10f6b45b4d984253625dc 100644 (file)
@@ -60,6 +60,7 @@ protected:
 
     void ApplyWidgetStyle();
     virtual int DoAppend(const wxString& item);
 
     void ApplyWidgetStyle();
     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 DoSetItemClientData( int n, void* clientData );
     virtual void* DoGetItemClientData( int n ) const;
@@ -70,7 +71,7 @@ protected:
 
 private:
     // common part of Create() and DoAppend()
 
 private:
     // common part of Create() and DoAppend()
-    size_t GtkAppendHelper(GtkWidget *menu, const wxString& item);
+    int GtkAddHelper(GtkWidget *menu, int pos, const wxString& item);
 
     // this array is only used for controls with wxCB_SORT style, so only
     // allocate it if it's needed (hence using pointer)
 
     // this array is only used for controls with wxCB_SORT style, so only
     // allocate it if it's needed (hence using pointer)
index 63304d121f313a9bb958c9289ac7a68e81a4c286..84e9e2be49ebc034b47df450bf0195c4518c9c4a 100644 (file)
@@ -69,6 +69,10 @@ public:
     void Append( const wxString &item, void* clientData );
     void Append( const wxString &item, wxClientData* clientData );
   
     void Append( const wxString &item, void* clientData );
     void Append( const wxString &item, wxClientData* clientData );
   
+    void Insert( const wxString &item, int pos );
+    void Insert( const wxString &item, int pos, void* clientData );
+    void Insert( const wxString &item, int pos, wxClientData* clientData );
+  
     void SetClientData( int n, void* clientData );
     void* GetClientData( int n );
     void SetClientObject( int n, wxClientData* clientData );
     void SetClientData( int n, void* clientData );
     void* GetClientData( int n );
     void SetClientObject( int n, wxClientData* clientData );
@@ -122,6 +126,7 @@ public:
     void DisableEvents();
     void EnableEvents();
     void AppendCommon( const wxString &item );
     void DisableEvents();
     void EnableEvents();
     void AppendCommon( const wxString &item );
+    void InsertCommon( const wxString &item, int pos );
     GtkWidget* GetConnectWidget();
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
     GtkWidget* GetConnectWidget();
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
index 6acce9a5deda489c9ea56d7fedca689addf1bd93..5f550d732a5f31bab5d10f6b45b4d984253625dc 100644 (file)
@@ -60,6 +60,7 @@ protected:
 
     void ApplyWidgetStyle();
     virtual int DoAppend(const wxString& item);
 
     void ApplyWidgetStyle();
     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 DoSetItemClientData( int n, void* clientData );
     virtual void* DoGetItemClientData( int n ) const;
@@ -70,7 +71,7 @@ protected:
 
 private:
     // common part of Create() and DoAppend()
 
 private:
     // common part of Create() and DoAppend()
-    size_t GtkAppendHelper(GtkWidget *menu, const wxString& item);
+    int GtkAddHelper(GtkWidget *menu, int pos, const wxString& item);
 
     // this array is only used for controls with wxCB_SORT style, so only
     // allocate it if it's needed (hence using pointer)
 
     // this array is only used for controls with wxCB_SORT style, so only
     // allocate it if it's needed (hence using pointer)
index 63304d121f313a9bb958c9289ac7a68e81a4c286..84e9e2be49ebc034b47df450bf0195c4518c9c4a 100644 (file)
@@ -69,6 +69,10 @@ public:
     void Append( const wxString &item, void* clientData );
     void Append( const wxString &item, wxClientData* clientData );
   
     void Append( const wxString &item, void* clientData );
     void Append( const wxString &item, wxClientData* clientData );
   
+    void Insert( const wxString &item, int pos );
+    void Insert( const wxString &item, int pos, void* clientData );
+    void Insert( const wxString &item, int pos, wxClientData* clientData );
+  
     void SetClientData( int n, void* clientData );
     void* GetClientData( int n );
     void SetClientObject( int n, wxClientData* clientData );
     void SetClientData( int n, void* clientData );
     void* GetClientData( int n );
     void SetClientObject( int n, wxClientData* clientData );
@@ -122,6 +126,7 @@ public:
     void DisableEvents();
     void EnableEvents();
     void AppendCommon( const wxString &item );
     void DisableEvents();
     void EnableEvents();
     void AppendCommon( const wxString &item );
+    void InsertCommon( const wxString &item, int pos );
     GtkWidget* GetConnectWidget();
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
     GtkWidget* GetConnectWidget();
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
index 4e56164b3d119b5b7a9cb7f8dbc267b3605856ad..1c8c397b24bb94d2f8ab59d9102cef37e5450930 100644 (file)
@@ -109,8 +109,8 @@ public:
 protected:
     // NB: due to wxGTK implementation details, DoInsert() is implemented
     //     using DoInsertItems() and not the other way round
 protected:
     // NB: due to wxGTK implementation details, DoInsert() is implemented
     //     using DoInsertItems() and not the other way round
-    void DoInsert(const wxString& item, int pos)
-        { InsertItems(1, &item, pos); }
+    virtual int DoInsert(const wxString& item, int pos)
+        { InsertItems(1, &item, pos); return pos; }
 
     // to be implemented in derived classes
     virtual void DoInsertItems(const wxArrayString& items, int pos) = 0;
 
     // to be implemented in derived classes
     virtual void DoInsertItems(const wxArrayString& items, int pos) = 0;
index 86419c148b36c350846828a7600a87657c454750..d22ca43d6852cb596328c47b1565a5cd61c67a8a 100644 (file)
@@ -57,6 +57,7 @@ public:
 
   // implement base class pure virtuals
   virtual int DoAppend(const wxString& item);
 
   // implement base class pure virtuals
   virtual int DoAppend(const wxString& item);
+  virtual int DoInsert(const wxString& item, int pos);
   virtual void Delete(int n);
   virtual void Clear();
 
   virtual void Delete(int n);
   virtual void Clear();
 
index a2d019541823db6cab2923b5fcbe91075b5d321d..a0a51e42e35f92bd63512d6bb1b1dbbc637152e8 100644 (file)
@@ -55,6 +55,7 @@ public:
     // implementation of wxControlWithItems
     virtual int GetCount() const;
     virtual int DoAppend(const wxString& item);
     // implementation of wxControlWithItems
     virtual int GetCount() const;
     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 void DoSetItemClientData(int n, void* clientData);
     virtual void* DoGetItemClientData(int n) const;
     virtual void DoSetItemClientObject(int n, wxClientData* clientData);
index 20681ffb4f864e6672ddeb672a2dad91cff972c3..84389e24c5a9692b599e4237bcf444165f9aa782 100644 (file)
@@ -55,6 +55,7 @@ public:
     
     // implementation of wxControlWithItems
     virtual int DoAppend(const wxString& item);
     
     // implementation of wxControlWithItems
     virtual int DoAppend(const wxString& item);
+    virtual int DoInsert(const wxString& item, int pos);
     virtual void Delete(int n);
     virtual void Clear();
     virtual int GetSelection() const ;
     virtual void Delete(int n);
     virtual void Clear();
     virtual int GetSelection() const ;
index fdc9fef5b89486be739b20527f0cb60676b72625..9ca576cd7c9c58ae0b9247aa0c7638098ca2f33e 100644 (file)
@@ -52,6 +52,7 @@ public:
 
     // implement base class pure virtuals
     virtual int DoAppend(const wxString& item);
 
     // implement base class pure virtuals
     virtual int DoAppend(const wxString& item);
+    virtual int DoInsert(const wxString& item, int pos);
     virtual void Delete(int n);
     virtual void Clear();
 
     virtual void Delete(int n);
     virtual void Clear();
 
index 098c7117522bfec9617ee2cb7b45c92bcbe76592..9c4e0f47a554ff3bb4d64202d4e7a6158581cdcd 100644 (file)
@@ -59,6 +59,7 @@ public:
     // Implement base class virtuals
     //
     virtual int      DoAppend(const wxString& rsItem);
     // Implement base class virtuals
     //
     virtual int      DoAppend(const wxString& rsItem);
+    virtual int      DoInsert(const wxString& rsItem, int pos);
     virtual void     Delete(int n);
     virtual void     Clear(void);
 
     virtual void     Delete(int n);
     virtual void     Clear(void);
 
index 2bb7faccb63963b77e70adee1f7b46493f0c9135..5ef092afbd47564991b3b69bf93f880189411a77 100644 (file)
@@ -330,6 +330,7 @@ public:
 
 protected:
     virtual int DoAppend(const wxString& item);
 
 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 void DoSetItemClientData(int n, void* clientData);
     virtual void* DoGetItemClientData(int n) const;
     virtual void DoSetItemClientObject(int n, wxClientData* clientData);
index d41699167e9d7d2e2698d7a8f7521899d1c7738b..0fb153f66705c4d4914609b2054360f2cbbc4ae1 100644 (file)
@@ -54,6 +54,8 @@ enum
 {
     ComboPage_Reset = 100,
     ComboPage_CurText,
 {
     ComboPage_Reset = 100,
     ComboPage_CurText,
+    ComboPage_Insert,
+    ComboPage_InsertText,
     ComboPage_Add,
     ComboPage_AddText,
     ComboPage_AddSeveral,
     ComboPage_Add,
     ComboPage_AddText,
     ComboPage_AddSeveral,
@@ -91,6 +93,7 @@ protected:
     void OnButtonDelete(wxCommandEvent& event);
     void OnButtonDeleteSel(wxCommandEvent& event);
     void OnButtonClear(wxCommandEvent& event);
     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);
     void OnButtonAdd(wxCommandEvent& event);
     void OnButtonAddSeveral(wxCommandEvent& event);
     void OnButtonAddMany(wxCommandEvent& event);
@@ -102,6 +105,7 @@ protected:
 
     void OnUpdateUICurText(wxUpdateUIEvent& event);
 
 
     void OnUpdateUICurText(wxUpdateUIEvent& event);
 
+    void OnUpdateUIInsert(wxUpdateUIEvent& event);
     void OnUpdateUIAddSeveral(wxUpdateUIEvent& event);
     void OnUpdateUIClearButton(wxUpdateUIEvent& event);
     void OnUpdateUIDeleteButton(wxUpdateUIEvent& event);
     void OnUpdateUIAddSeveral(wxUpdateUIEvent& event);
     void OnUpdateUIClearButton(wxUpdateUIEvent& event);
     void OnUpdateUIDeleteButton(wxUpdateUIEvent& event);
@@ -129,7 +133,8 @@ protected:
     wxSizer *m_sizerCombo;
 
     // the text entries for "Add/change string" and "Delete" buttons
     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;
 
                *m_textChange,
                *m_textDelete;
 
@@ -148,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_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_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_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)
     EVT_UPDATE_UI(ComboPage_AddSeveral, ComboboxWidgetsPage::OnUpdateUIAddSeveral)
     EVT_UPDATE_UI(ComboPage_Clear, ComboboxWidgetsPage::OnUpdateUIClearButton)
     EVT_UPDATE_UI(ComboPage_DeleteText, ComboboxWidgetsPage::OnUpdateUIClearButton)
@@ -168,6 +176,7 @@ BEGIN_EVENT_TABLE(ComboboxWidgetsPage, WidgetsPage)
 
     EVT_COMBOBOX(ComboPage_Combo, ComboboxWidgetsPage::OnComboBox)
     EVT_TEXT(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
 
     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(-1, ComboboxWidgetsPage::OnCheckOrRadioBox)
     EVT_RADIOBOX(-1, ComboboxWidgetsPage::OnCheckOrRadioBox)
@@ -241,16 +250,22 @@ ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
 
     sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 
 
     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);
 
     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);
 
     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,
     sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 
     sizerRow = CreateSizerWithTextAndButton(ComboPage_Change,
@@ -410,6 +425,21 @@ void ComboboxWidgetsPage::OnButtonClear(wxCommandEvent& event)
     m_combobox->Clear();
 }
 
     m_combobox->Clear();
 }
 
+void ComboboxWidgetsPage::OnButtonInsert(wxCommandEvent& 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& event)
 {
     static unsigned int s_item = 0;
 void ComboboxWidgetsPage::OnButtonAdd(wxCommandEvent& event)
 {
     static unsigned int s_item = 0;
@@ -452,6 +482,17 @@ void ComboboxWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
         event.Enable( m_chkSort->GetValue() || m_chkReadonly->GetValue() );
 }
 
         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)
 void ComboboxWidgetsPage::OnUpdateUIDeleteButton(wxUpdateUIEvent& event)
 {
     if (m_combobox)
@@ -490,6 +531,9 @@ void ComboboxWidgetsPage::OnComboText(wxCommandEvent& event)
     wxASSERT_MSG( s == m_combobox->GetValue(),
                   _T("event and combobox values should be the same") );
 
     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());
 }
 
     wxLogMessage(_T("Combobox text changed (now '%s')"), s.c_str());
 }
 
index 67e8a80333a1e226e832d152f58913b1b1884557..975812f8d44749c7b385f2105b83775082ca8722 100644 (file)
@@ -70,6 +70,25 @@ void wxItemContainer::Append(const wxArrayString& strings)
     }
 }
 
     }
 }
 
+int wxItemContainer::Insert(const wxString& item, int pos, void *clientData)
+{
+    int n = DoInsert(item, pos);
+    if ( n != wxNOT_FOUND )
+        SetClientData(n, clientData);
+
+    return n;
+}
+
+int
+wxItemContainer::Insert(const wxString& item, int pos, wxClientData *clientData)
+{
+    int n = DoInsert(item, pos);
+    if ( n != wxNOT_FOUND )
+        SetClientObject(n, clientData);
+
+    return n;
+}
+
 // ----------------------------------------------------------------------------
 // client data
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // client data
 // ----------------------------------------------------------------------------
index 4edcdc8b942e7ef2e1f0499a1f784804685b21eb..d746df7874c29b17198ba98987c4083606e941c7 100644 (file)
@@ -102,7 +102,7 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id,
 
     for (int i = 0; i < n; i++)
     {
 
     for (int i = 0; i < n; i++)
     {
-        GtkAppendHelper(menu, choices[i]);
+        GtkAddHelper(menu, i, choices[i]);
     }
 
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
     }
 
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
@@ -136,7 +136,20 @@ int wxChoice::DoAppend( const wxString &item )
 
     GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
 
 
     GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
 
-    return GtkAppendHelper(menu, item);
+    return GtkAddHelper(menu, GetCount(), item);
+}
+
+int wxChoice::DoInsert( const wxString &item, int pos )
+{
+    wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid choice control") );
+    wxCHECK_MSG( (pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
+
+    return GtkAddHelper(menu, pos, item);
 }
 
 void wxChoice::DoSetItemClientData( int n, void* clientData )
 }
 
 void wxChoice::DoSetItemClientData( int n, void* clientData )
@@ -388,8 +401,10 @@ void wxChoice::ApplyWidgetStyle()
     }
 }
 
     }
 }
 
-size_t wxChoice::GtkAppendHelper(GtkWidget *menu, const wxString& item)
+int wxChoice::GtkAddHelper(GtkWidget *menu, int pos, const wxString& item)
 {
 {
+    wxCHECK_MSG((pos>=0) && (pos<=(int)m_clientList.GetCount()), -1, wxT("invalid index"));
+
     GtkWidget *menu_item = gtk_menu_item_new_with_label( wxGTK_CONV( item ) );
 
     size_t index;
     GtkWidget *menu_item = gtk_menu_item_new_with_label( wxGTK_CONV( item ) );
 
     size_t index;
@@ -412,14 +427,22 @@ size_t wxChoice::GtkAppendHelper(GtkWidget *menu, const wxString& item)
     }
     else
     {
     }
     else
     {
+        // don't call wxChoice::GetCount() from here because it doesn't work
+        // if we're called from ctor (and GtkMenuShell is still NULL)
+
         // normal control, just append
         // normal control, just append
+        if (pos == (int)m_clientList.GetCount())
+        {
         gtk_menu_append( GTK_MENU(menu), menu_item );
         gtk_menu_append( GTK_MENU(menu), menu_item );
-
         m_clientList.Append( (wxObject*) NULL );
         m_clientList.Append( (wxObject*) NULL );
-
-        // don't call wxChoice::GetCount() from here because it doesn't work
-        // if we're called from ctor (and GtkMenuShell is still NULL)
         index = m_clientList.GetCount() - 1;
         index = m_clientList.GetCount() - 1;
+        }
+        else
+        {
+            gtk_menu_insert( GTK_MENU(menu), menu_item, pos );
+            m_clientList.Insert( pos, (wxObject*) NULL );
+            index = pos;
+        }
     }
 
     if (GTK_WIDGET_REALIZED(m_widget))
     }
 
     if (GTK_WIDGET_REALIZED(m_widget))
index 976e127c4202e10583200005a6f0fa48bd10400a..f002558d15d7997d9f4589aa6c460936fd9df4d3 100644 (file)
@@ -269,6 +269,93 @@ void wxComboBox::Append( const wxString &item, wxClientData *clientData )
     AppendCommon( item );
 }
 
     AppendCommon( item );
 }
 
+void wxComboBox::InsertCommon( const wxString &item, int pos )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
+
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        AppendCommon(item);
+        return;
+    }
+
+    DisableEvents();
+
+    GtkWidget *list = GTK_COMBO(m_widget)->list;
+
+    GtkWidget *list_item = gtk_list_item_new_with_label( wxGTK_CONV( item ) );
+
+    GList *gitem_list = g_list_alloc ();
+    gitem_list->data = list_item;
+    gtk_list_insert_items( GTK_LIST (list), gitem_list, pos );
+
+    if (GTK_WIDGET_REALIZED(m_widget))
+    {
+        gtk_widget_realize( list_item );
+        gtk_widget_realize( GTK_BIN(list_item)->child );
+
+        if (m_widgetStyle) ApplyWidgetStyle();
+    }
+
+    gtk_widget_show( list_item );
+
+    EnableEvents();
+}
+
+void wxComboBox::Insert( const wxString &item, int pos )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        Append(item);
+        return;
+    }
+
+    m_clientDataList.Insert( pos, (wxObject*) NULL );
+    m_clientObjectList.Insert( pos, (wxObject*) NULL );
+
+    InsertCommon( item, pos );
+}
+
+void wxComboBox::Insert( const wxString &item, int pos, void *clientData )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        Append(item, clientData);
+        return;
+    }
+
+    m_clientDataList.Insert( pos, (wxObject*) clientData );
+    m_clientObjectList.Insert( pos, (wxObject*)NULL );
+
+    InsertCommon( item, pos );
+}
+
+void wxComboBox::Insert( const wxString &item, int pos, wxClientData *clientData )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        Append(item, clientData);
+        return;
+    }
+
+    m_clientDataList.Insert( pos, (wxObject*) NULL );
+    m_clientObjectList.Insert( pos, (wxObject*) clientData );
+
+    InsertCommon( item, pos );
+}
+
 void wxComboBox::SetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 void wxComboBox::SetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
index 4edcdc8b942e7ef2e1f0499a1f784804685b21eb..d746df7874c29b17198ba98987c4083606e941c7 100644 (file)
@@ -102,7 +102,7 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id,
 
     for (int i = 0; i < n; i++)
     {
 
     for (int i = 0; i < n; i++)
     {
-        GtkAppendHelper(menu, choices[i]);
+        GtkAddHelper(menu, i, choices[i]);
     }
 
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
     }
 
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
@@ -136,7 +136,20 @@ int wxChoice::DoAppend( const wxString &item )
 
     GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
 
 
     GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
 
-    return GtkAppendHelper(menu, item);
+    return GtkAddHelper(menu, GetCount(), item);
+}
+
+int wxChoice::DoInsert( const wxString &item, int pos )
+{
+    wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid choice control") );
+    wxCHECK_MSG( (pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
+
+    return GtkAddHelper(menu, pos, item);
 }
 
 void wxChoice::DoSetItemClientData( int n, void* clientData )
 }
 
 void wxChoice::DoSetItemClientData( int n, void* clientData )
@@ -388,8 +401,10 @@ void wxChoice::ApplyWidgetStyle()
     }
 }
 
     }
 }
 
-size_t wxChoice::GtkAppendHelper(GtkWidget *menu, const wxString& item)
+int wxChoice::GtkAddHelper(GtkWidget *menu, int pos, const wxString& item)
 {
 {
+    wxCHECK_MSG((pos>=0) && (pos<=(int)m_clientList.GetCount()), -1, wxT("invalid index"));
+
     GtkWidget *menu_item = gtk_menu_item_new_with_label( wxGTK_CONV( item ) );
 
     size_t index;
     GtkWidget *menu_item = gtk_menu_item_new_with_label( wxGTK_CONV( item ) );
 
     size_t index;
@@ -412,14 +427,22 @@ size_t wxChoice::GtkAppendHelper(GtkWidget *menu, const wxString& item)
     }
     else
     {
     }
     else
     {
+        // don't call wxChoice::GetCount() from here because it doesn't work
+        // if we're called from ctor (and GtkMenuShell is still NULL)
+
         // normal control, just append
         // normal control, just append
+        if (pos == (int)m_clientList.GetCount())
+        {
         gtk_menu_append( GTK_MENU(menu), menu_item );
         gtk_menu_append( GTK_MENU(menu), menu_item );
-
         m_clientList.Append( (wxObject*) NULL );
         m_clientList.Append( (wxObject*) NULL );
-
-        // don't call wxChoice::GetCount() from here because it doesn't work
-        // if we're called from ctor (and GtkMenuShell is still NULL)
         index = m_clientList.GetCount() - 1;
         index = m_clientList.GetCount() - 1;
+        }
+        else
+        {
+            gtk_menu_insert( GTK_MENU(menu), menu_item, pos );
+            m_clientList.Insert( pos, (wxObject*) NULL );
+            index = pos;
+        }
     }
 
     if (GTK_WIDGET_REALIZED(m_widget))
     }
 
     if (GTK_WIDGET_REALIZED(m_widget))
index 976e127c4202e10583200005a6f0fa48bd10400a..f002558d15d7997d9f4589aa6c460936fd9df4d3 100644 (file)
@@ -269,6 +269,93 @@ void wxComboBox::Append( const wxString &item, wxClientData *clientData )
     AppendCommon( item );
 }
 
     AppendCommon( item );
 }
 
+void wxComboBox::InsertCommon( const wxString &item, int pos )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
+
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        AppendCommon(item);
+        return;
+    }
+
+    DisableEvents();
+
+    GtkWidget *list = GTK_COMBO(m_widget)->list;
+
+    GtkWidget *list_item = gtk_list_item_new_with_label( wxGTK_CONV( item ) );
+
+    GList *gitem_list = g_list_alloc ();
+    gitem_list->data = list_item;
+    gtk_list_insert_items( GTK_LIST (list), gitem_list, pos );
+
+    if (GTK_WIDGET_REALIZED(m_widget))
+    {
+        gtk_widget_realize( list_item );
+        gtk_widget_realize( GTK_BIN(list_item)->child );
+
+        if (m_widgetStyle) ApplyWidgetStyle();
+    }
+
+    gtk_widget_show( list_item );
+
+    EnableEvents();
+}
+
+void wxComboBox::Insert( const wxString &item, int pos )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        Append(item);
+        return;
+    }
+
+    m_clientDataList.Insert( pos, (wxObject*) NULL );
+    m_clientObjectList.Insert( pos, (wxObject*) NULL );
+
+    InsertCommon( item, pos );
+}
+
+void wxComboBox::Insert( const wxString &item, int pos, void *clientData )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        Append(item, clientData);
+        return;
+    }
+
+    m_clientDataList.Insert( pos, (wxObject*) clientData );
+    m_clientObjectList.Insert( pos, (wxObject*)NULL );
+
+    InsertCommon( item, pos );
+}
+
+void wxComboBox::Insert( const wxString &item, int pos, wxClientData *clientData )
+{
+    wxCHECK_RET(!(GetWindowStyle() & wxCB_SORT), wxT("can't insert into sorted list"));
+    int count = GetCount();
+    wxCHECK_RET((pos>=0) && (pos<=count), wxT("invalid index"));
+    if (pos == count)
+    {
+        Append(item, clientData);
+        return;
+    }
+
+    m_clientDataList.Insert( pos, (wxObject*) NULL );
+    m_clientObjectList.Insert( pos, (wxObject*) clientData );
+
+    InsertCommon( item, pos );
+}
+
 void wxComboBox::SetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 void wxComboBox::SetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
index 37f432cff0a318b36131d7f4eb29fc6729424649..bc77b99ad8b4f35728c5d9b258bcf82a918e45ee 100644 (file)
@@ -81,6 +81,22 @@ int wxChoice::DoAppend(const wxString& item)
     return index ;
 }
 
     return index ;
 }
 
+int wxChoice::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    UMAAppendMenuItem(MAC_WXHMENU( m_macPopUpMenuHandle ) , item);
+    m_strings.Insert( item, pos ) ;
+    m_datas.Insert( NULL, pos ) ;
+    DoSetItemClientData( pos , NULL ) ;
+    SetControl32BitMaximum( (ControlHandle) m_macControl , pos) ;
+    return pos ;
+}
+
 void wxChoice::Delete(int n)
 {
     wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") );
 void wxChoice::Delete(int n)
 {
     wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") );
index 37f432cff0a318b36131d7f4eb29fc6729424649..bc77b99ad8b4f35728c5d9b258bcf82a918e45ee 100644 (file)
@@ -81,6 +81,22 @@ int wxChoice::DoAppend(const wxString& item)
     return index ;
 }
 
     return index ;
 }
 
+int wxChoice::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    UMAAppendMenuItem(MAC_WXHMENU( m_macPopUpMenuHandle ) , item);
+    m_strings.Insert( item, pos ) ;
+    m_datas.Insert( NULL, pos ) ;
+    DoSetItemClientData( pos , NULL ) ;
+    SetControl32BitMaximum( (ControlHandle) m_macControl , pos) ;
+    return pos ;
+}
+
 void wxChoice::Delete(int n)
 {
     wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") );
 void wxChoice::Delete(int n)
 {
     wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") );
index d8f2533de4fa76bf9ebd61a8965ba3cd8309aba7..466b14e7e583830cac203b9f806b97e785aff62d 100644 (file)
@@ -209,6 +209,14 @@ int wxChoice::DoAppend(const wxString& item)
     return GetCount() - 1;
 }
 
     return GetCount() - 1;
 }
 
+int wxChoice::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(FALSE, -1, wxT("insert not implemented"));
+
+//    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+//    if (pos == GetCount()) return DoAppend(item);
+}
+
 void wxChoice::Delete(int n)
 {
     Widget w = (Widget)m_widgetArray[n];
 void wxChoice::Delete(int n)
 {
     Widget w = (Widget)m_widgetArray[n];
index ef51038de6fb1f2eb60e9ee4ca0882533a90a8b8..61dce03a2b2a5aa22c31cf7e3e7fffe2fa7cdf94 100644 (file)
@@ -145,6 +145,22 @@ int wxComboBox::DoAppend(const wxString& item)
     return GetCount() - 1;
 }
 
     return GetCount() - 1;
 }
 
+int wxComboBox::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    wxXmString str( item.c_str() );
+    XmComboBoxAddItem((Widget) m_mainWidget, str(), pos+1);
+    m_stringList.Insert(pos, item);
+    m_noStrings ++;
+
+    return pos;
+}
+
 void wxComboBox::Delete(int n)
 {
     XmComboBoxDeletePos((Widget) m_mainWidget, n+1);
 void wxComboBox::Delete(int n)
 {
     XmComboBoxDeletePos((Widget) m_mainWidget, n+1);
index 95294fe5f8d340bf942c056ac6beb2dfaa3d2e53..9e1eec75f9df7fdf01f8f2da54d27173a303c2a4 100644 (file)
@@ -197,6 +197,22 @@ int wxComboBox::DoAppend(const wxString& item)
     return GetCount() - 1;
 }
 
     return GetCount() - 1;
 }
 
+int wxComboBox::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    wxXmString str( item.c_str() );
+    XmComboBoxAddItem((Widget) m_mainWidget, str(), pos+1, False);
+    m_noStrings ++;
+    AdjustDropDownListSize();
+
+    return GetCount() - 1;
+}
+
 void wxComboBox::Delete(int n)
 {
 #ifdef LESSTIF_VERSION
 void wxComboBox::Delete(int n)
 {
 #ifdef LESSTIF_VERSION
index f8620938f2a5651ab17803b637794c375473b123..f92b66426afa871ffdec54148afc35ec02fcd2db 100644 (file)
@@ -115,6 +115,20 @@ int wxChoice::DoAppend(const wxString& item)
     return n;
 }
 
     return n;
 }
 
+int wxChoice::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    int n = (int)SendMessage(GetHwnd(), CB_INSERTSTRING, pos, (LONG)item.c_str());
+    if ( n == CB_ERR )
+    {
+        wxLogLastError(wxT("SendMessage(CB_INSERTSTRING)"));
+    }
+
+    return n;
+}
+
 void wxChoice::Delete(int n)
 {
     wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") );
 void wxChoice::Delete(int n)
 {
     wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") );
index 5ae8def9d95b1fb354d45f41c700eca51a168941..c989624c46510cbb7464c0e4537695be12a0dc83 100644 (file)
@@ -111,6 +111,32 @@ int wxChoice::DoAppend(
     return nIndex;
 } // end of wxChoice::DoAppend
 
     return nIndex;
 } // end of wxChoice::DoAppend
 
+int wxChoice::DoInsert(
+  const wxString&                   rsItem
+  int                               pos
+)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    int                             nIndex;
+    SHORT                           nIndexType = 0;
+
+    if (m_windowStyle & wxLB_SORT)
+        nIndexType = LIT_SORTASCENDING;
+    else
+        nIndexType = pos;
+    nIndex = (int)::WinSendMsg( GetHwnd()
+                               ,LM_INSERTITEM
+                               ,(MPARAM)nIndexType
+                               ,(MPARAM)rsItem.c_str()
+                              );
+    return nIndex;
+} // end of wxChoice::DoInsert
+
 void wxChoice::Delete(
   int                               n
 )
 void wxChoice::Delete(
   int                               n
 )
index 554986b03330f7c5783c48b9ca4aff5071e5d34c..4248176caaa788cb021771d478424cd2a6a929e8 100644 (file)
@@ -825,6 +825,18 @@ int wxComboBox::DoAppend(const wxString& item)
     return GetLBox()->Append(item);
 }
 
     return GetLBox()->Append(item);
 }
 
+int wxComboBox::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    GetLBox()->Insert(1, &item, pos);
+    return pos;
+}
+
 void wxComboBox::DoSetItemClientData(int n, void* clientData)
 {
     GetLBox()->SetClientData(n, clientData);
 void wxComboBox::DoSetItemClientData(int n, void* clientData)
 {
     GetLBox()->SetClientData(n, clientData);