From 2f6407b9473f0a3cbd88d6419926b25ab5d6850a Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Tue, 1 Sep 1998 15:41:45 +0000 Subject: [PATCH] Small fixes to wxChoice, wxComboBox and wxListBox git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@644 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/choice.h | 1 + include/wx/gtk1/choice.h | 1 + samples/controls/controls.cpp | 22 ++++++++++++++++++++-- src/gtk/choice.cpp | 5 +++++ src/gtk/combobox.cpp | 21 ++++++++++++++++----- src/gtk/listbox.cpp | 4 ++-- src/gtk1/choice.cpp | 5 +++++ src/gtk1/combobox.cpp | 21 ++++++++++++++++----- src/gtk1/listbox.cpp | 4 ++-- 9 files changed, 68 insertions(+), 16 deletions(-) diff --git a/include/wx/gtk/choice.h b/include/wx/gtk/choice.h index fe5586752b..36f403bb74 100644 --- a/include/wx/gtk/choice.h +++ b/include/wx/gtk/choice.h @@ -63,6 +63,7 @@ class wxChoice: public wxControl const wxString& name = wxChoiceNameStr ); void Append( const wxString &item ); void Clear(void); + void Delete(int n); int FindString( const wxString &string ) const; int GetColumns(void) const; int GetSelection(void); diff --git a/include/wx/gtk1/choice.h b/include/wx/gtk1/choice.h index fe5586752b..36f403bb74 100644 --- a/include/wx/gtk1/choice.h +++ b/include/wx/gtk1/choice.h @@ -63,6 +63,7 @@ class wxChoice: public wxControl const wxString& name = wxChoiceNameStr ); void Append( const wxString &item ); void Clear(void); + void Delete(int n); int FindString( const wxString &string ) const; int GetColumns(void) const; int GetSelection(void); diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index f2c28e5dfd..e0e3ea5cc1 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -141,12 +141,14 @@ const ID_CHOICE_SEL_NUM = 121; const ID_CHOICE_SEL_STR = 122; const ID_CHOICE_CLEAR = 123; const ID_CHOICE_APPEND = 124; +const ID_CHOICE_DELETE = 125; const ID_COMBO = 140; const ID_COMBO_SEL_NUM = 141; const ID_COMBO_SEL_STR = 142; const ID_COMBO_CLEAR = 143; const ID_COMBO_APPEND = 144; +const ID_COMBO_DELETE = 145; const ID_TEXT = 150; @@ -167,11 +169,13 @@ BEGIN_EVENT_TABLE(MyPanel, wxPanel) EVT_BUTTON (ID_CHOICE_SEL_STR, MyPanel::OnChoiceButtons) EVT_BUTTON (ID_CHOICE_CLEAR, MyPanel::OnChoiceButtons) EVT_BUTTON (ID_CHOICE_APPEND, MyPanel::OnChoiceButtons) + EVT_BUTTON (ID_CHOICE_DELETE, MyPanel::OnChoiceButtons) EVT_CHOICE (ID_COMBO, MyPanel::OnCombo) EVT_BUTTON (ID_COMBO_SEL_NUM, MyPanel::OnComboButtons) EVT_BUTTON (ID_COMBO_SEL_STR, MyPanel::OnComboButtons) EVT_BUTTON (ID_COMBO_CLEAR, MyPanel::OnComboButtons) EVT_BUTTON (ID_COMBO_APPEND, MyPanel::OnComboButtons) + EVT_BUTTON (ID_COMBO_DELETE, MyPanel::OnComboButtons) EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio) EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons) EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons) @@ -207,6 +211,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) : (void)new wxButton( panel, ID_CHOICE_SEL_STR, "Select 'This'", wxPoint(300,30), wxSize(100,30) ); (void)new wxButton( panel, ID_CHOICE_CLEAR, "Clear", wxPoint(180,80), wxSize(100,30) ); (void)new wxButton( panel, ID_CHOICE_APPEND, "Append 'Hi!'", wxPoint(300,80), wxSize(100,30) ); + (void)new wxButton( panel, ID_CHOICE_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) ); m_notebook->AddPage(panel, "wxChoice"); panel = new wxPanel(m_notebook); @@ -215,6 +220,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) : (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(300,30), wxSize(100,30) ); (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(100,30) ); (void)new wxButton( panel, ID_COMBO_APPEND, "Append 'Hi!'", wxPoint(300,80), wxSize(100,30) ); + (void)new wxButton( panel, ID_COMBO_DELETE, "Delete selected item", wxPoint(180,130), wxSize(140,30) ); m_notebook->AddPage(panel, "wxComboBox"); wxTextCtrl *text = new wxTextCtrl( m_notebook, ID_TEXT, "Write text here.", wxPoint(10,10), wxSize(120,100), wxTE_MULTILINE ); @@ -233,8 +239,8 @@ void MyPanel::OnSize( wxSizeEvent& WXUNUSED(event) ) int y = 0; GetClientSize( &x, &y ); - if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y/2-4 ); - if (m_text) m_text->SetSize( 2, y/2+2, x-4, y/2-4 ); + if (m_notebook) m_notebook->SetSize( 2, 2, x-4, y*2/3-4 ); + if (m_text) m_text->SetSize( 2, y*2/3+2, x-4, y/3-4 ); } void MyPanel::OnListBox( wxCommandEvent &event ) @@ -308,6 +314,12 @@ void MyPanel::OnChoiceButtons( wxCommandEvent &event ) m_choice->Append( "Hi!" ); break; } + case ID_CHOICE_DELETE: + { + int idx = m_choice->GetSelection(); + m_choice->Delete( idx ); + break; + } } } @@ -342,6 +354,12 @@ void MyPanel::OnComboButtons( wxCommandEvent &event ) m_combo->Append( "Hi!" ); break; } + case ID_COMBO_DELETE: + { + int idx = m_combo->GetSelection(); + m_combo->Delete( idx ); + break; + } } } diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index b7d2e26e2e..4fec00cb30 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -103,6 +103,11 @@ void wxChoice::Clear(void) gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu ); } +void wxChoice::Delete( int WXUNUSED(n) ) +{ + wxFAIL_MSG( "wxChoice:Delete not implemented" ); +} + int wxChoice::FindString( const wxString &string ) const { // If you read this code once and you think you understand diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 4bcce99f9f..302cf3abda 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -143,22 +143,33 @@ void wxComboBox::Append( const wxString &item, char *clientData ) gtk_signal_connect( GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this ); + m_clientData.Append( (wxObject*)clientData ); + gtk_container_add( GTK_CONTAINER(list), list_item ); gtk_widget_show( list_item ); - - m_clientData.Append( (wxObject*)clientData ); } void wxComboBox::Delete( int n ) { - GtkWidget *list = GTK_COMBO(m_widget)->list; - gtk_list_clear_items( GTK_LIST(list), n, n ); + GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list ); + + GList *child = g_list_nth( listbox->children, n ); + + if (!child) + { + wxFAIL_MSG("wrong index"); + return; + } + + GList *list = g_list_append( NULL, child->data ); + gtk_list_remove_items( listbox, list ); + g_list_free( list ); wxNode *node = m_clientData.Nth( n ); if (!node) { - wxFAIL_MSG( "wxComboBox: wrong index" ); + wxFAIL_MSG( "wrong index" ); } else m_clientData.DeleteNode( node ); diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index 00cb2e6ba5..916d8490ad 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -140,10 +140,10 @@ void wxListBox::Append( const wxString &item, char *clientData ) gtk_signal_connect( GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); - gtk_container_add( GTK_CONTAINER(m_list), list_item ); - m_clientData.Append( (wxObject*)clientData ); + gtk_container_add( GTK_CONTAINER(m_list), list_item ); + gtk_widget_show( list_item ); } diff --git a/src/gtk1/choice.cpp b/src/gtk1/choice.cpp index b7d2e26e2e..4fec00cb30 100644 --- a/src/gtk1/choice.cpp +++ b/src/gtk1/choice.cpp @@ -103,6 +103,11 @@ void wxChoice::Clear(void) gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu ); } +void wxChoice::Delete( int WXUNUSED(n) ) +{ + wxFAIL_MSG( "wxChoice:Delete not implemented" ); +} + int wxChoice::FindString( const wxString &string ) const { // If you read this code once and you think you understand diff --git a/src/gtk1/combobox.cpp b/src/gtk1/combobox.cpp index 4bcce99f9f..302cf3abda 100644 --- a/src/gtk1/combobox.cpp +++ b/src/gtk1/combobox.cpp @@ -143,22 +143,33 @@ void wxComboBox::Append( const wxString &item, char *clientData ) gtk_signal_connect( GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this ); + m_clientData.Append( (wxObject*)clientData ); + gtk_container_add( GTK_CONTAINER(list), list_item ); gtk_widget_show( list_item ); - - m_clientData.Append( (wxObject*)clientData ); } void wxComboBox::Delete( int n ) { - GtkWidget *list = GTK_COMBO(m_widget)->list; - gtk_list_clear_items( GTK_LIST(list), n, n ); + GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list ); + + GList *child = g_list_nth( listbox->children, n ); + + if (!child) + { + wxFAIL_MSG("wrong index"); + return; + } + + GList *list = g_list_append( NULL, child->data ); + gtk_list_remove_items( listbox, list ); + g_list_free( list ); wxNode *node = m_clientData.Nth( n ); if (!node) { - wxFAIL_MSG( "wxComboBox: wrong index" ); + wxFAIL_MSG( "wrong index" ); } else m_clientData.DeleteNode( node ); diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index 00cb2e6ba5..916d8490ad 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -140,10 +140,10 @@ void wxListBox::Append( const wxString &item, char *clientData ) gtk_signal_connect( GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); - gtk_container_add( GTK_CONTAINER(m_list), list_item ); - m_clientData.Append( (wxObject*)clientData ); + gtk_container_add( GTK_CONTAINER(m_list), list_item ); + gtk_widget_show( list_item ); } -- 2.45.2