From f5d29b396f837cab85b8d63992cc1b640007db67 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 14 Dec 1998 20:03:52 +0000 Subject: [PATCH] Now even wxRadioButton works git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1196 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/radiobut.h | 3 +- include/wx/gtk1/radiobut.h | 3 +- samples/controls/controls.cpp | 6 ++ src/gtk/radiobut.cpp | 100 ++++++++++++++++++---------------- src/gtk1/radiobut.cpp | 100 ++++++++++++++++++---------------- 5 files changed, 118 insertions(+), 94 deletions(-) diff --git a/include/wx/gtk/radiobut.h b/include/wx/gtk/radiobut.h index f86495364f..9a00ea810c 100644 --- a/include/wx/gtk/radiobut.h +++ b/include/wx/gtk/radiobut.h @@ -66,7 +66,8 @@ class wxRadioButton: public wxControl void ApplyWidgetStyle(); - bool m_blockFirstEvent; + bool m_blockFirstEvent; + GtkWidget* m_theOtherRadioButtton; }; #endif // __GTKRADIOBUTTONH__ diff --git a/include/wx/gtk1/radiobut.h b/include/wx/gtk1/radiobut.h index f86495364f..9a00ea810c 100644 --- a/include/wx/gtk1/radiobut.h +++ b/include/wx/gtk1/radiobut.h @@ -66,7 +66,8 @@ class wxRadioButton: public wxControl void ApplyWidgetStyle(); - bool m_blockFirstEvent; + bool m_blockFirstEvent; + GtkWidget* m_theOtherRadioButtton; }; #endif // __GTKRADIOBUTTONH__ diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 52ef792d97..0fba093a1f 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -197,6 +197,9 @@ const int ID_RADIOBOX_SEL_STR = 162; const int ID_RADIOBOX_FONT = 163; const int ID_RADIOBOX_ENABLE = 164; +const int ID_RADIOBUTTON_1 = 166; +const int ID_RADIOBUTTON_2 = 167; + const int ID_SET_FONT = 170; const int ID_GAUGE = 180; @@ -376,6 +379,9 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) : m_fontButton->SetForegroundColour("blue"); (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) ); (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) ); + wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30) ); + rb->SetValue( FALSE ); + (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) ); m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio); panel = new wxPanel(m_notebook); diff --git a/src/gtk/radiobut.cpp b/src/gtk/radiobut.cpp index ffe7dfa874..aab86976cd 100644 --- a/src/gtk/radiobut.cpp +++ b/src/gtk/radiobut.cpp @@ -27,20 +27,20 @@ extern bool g_blockEventsOnDrag; static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButton *rb ) { - if (!rb->HasVMT()) return; + if (!rb->HasVMT()) return; - if (rb->m_blockFirstEvent) - { - rb->m_blockFirstEvent = FALSE; - return; - } + if (rb->m_blockFirstEvent) + { + rb->m_blockFirstEvent = FALSE; + return; + } - if (g_blockEventsOnDrag) return; + if (g_blockEventsOnDrag) return; - wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId()); - event.SetInt( rb->GetValue() ); - event.SetEventObject( rb ); - rb->GetEventHandler()->ProcessEvent( event ); + wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId()); + event.SetInt( rb->GetValue() ); + event.SetEventObject( rb ); + rb->GetEventHandler()->ProcessEvent( event ); } //----------------------------------------------------------------------------- @@ -53,81 +53,89 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name ) { - m_needParent = TRUE; + m_needParent = TRUE; - wxSize newSize = size; + wxSize newSize = size; - PreCreation( parent, id, pos, newSize, style, name ); + PreCreation( parent, id, pos, newSize, style, name ); - SetValidator( validator ); + SetValidator( validator ); - m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label ); + m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label ); - SetLabel(label); + m_theOtherRadioButtton = + gtk_radio_button_new_with_label( + gtk_radio_button_group( GTK_RADIO_BUTTON(m_widget) ), + "button2" ); + + SetLabel(label); - m_blockFirstEvent = FALSE; + m_blockFirstEvent = FALSE; - if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label ); - if (newSize.y == -1) newSize.y = 26; - SetSize( newSize.x, newSize.y ); + if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label ); + if (newSize.y == -1) newSize.y = 26; + SetSize( newSize.x, newSize.y ); - gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", - GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this ); + gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", + GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this ); - m_parent->AddChild( this ); + m_parent->AddChild( this ); - (m_parent->m_insertCallback)( m_parent, this ); + (m_parent->m_insertCallback)( m_parent, this ); - PostCreation(); + PostCreation(); - SetBackgroundColour( parent->GetBackgroundColour() ); - SetForegroundColour( parent->GetForegroundColour() ); + SetBackgroundColour( parent->GetBackgroundColour() ); + SetForegroundColour( parent->GetForegroundColour() ); - Show( TRUE ); + Show( TRUE ); - return TRUE; + return TRUE; } void wxRadioButton::SetLabel( const wxString& label ) { - wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); + wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); - wxControl::SetLabel( label ); - GtkButton *bin = GTK_BUTTON( m_widget ); - GtkLabel *g_label = GTK_LABEL( bin->child ); - gtk_label_set( g_label, GetLabel() ); + wxControl::SetLabel( label ); + GtkButton *bin = GTK_BUTTON( m_widget ); + GtkLabel *g_label = GTK_LABEL( bin->child ); + gtk_label_set( g_label, GetLabel() ); } void wxRadioButton::SetValue( bool val ) { - wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); + wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); - m_blockFirstEvent = TRUE; + m_blockFirstEvent = TRUE; - gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), val ); + if (val) + gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), TRUE ); + else + gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_theOtherRadioButtton), TRUE ); } bool wxRadioButton::GetValue(void) const { - wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" ); + wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" ); - return GTK_TOGGLE_BUTTON(m_widget)->active; + return GTK_TOGGLE_BUTTON(m_widget)->active; } void wxRadioButton::Enable( bool enable ) { - wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); + wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); - wxControl::Enable( enable ); + wxControl::Enable( enable ); - gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable ); + gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable ); } void wxRadioButton::ApplyWidgetStyle() { - SetWidgetStyle(); - gtk_widget_set_style( m_widget, m_widgetStyle ); - gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle ); + SetWidgetStyle(); + gtk_widget_set_style( m_widget, m_widgetStyle ); + gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle ); } diff --git a/src/gtk1/radiobut.cpp b/src/gtk1/radiobut.cpp index ffe7dfa874..aab86976cd 100644 --- a/src/gtk1/radiobut.cpp +++ b/src/gtk1/radiobut.cpp @@ -27,20 +27,20 @@ extern bool g_blockEventsOnDrag; static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButton *rb ) { - if (!rb->HasVMT()) return; + if (!rb->HasVMT()) return; - if (rb->m_blockFirstEvent) - { - rb->m_blockFirstEvent = FALSE; - return; - } + if (rb->m_blockFirstEvent) + { + rb->m_blockFirstEvent = FALSE; + return; + } - if (g_blockEventsOnDrag) return; + if (g_blockEventsOnDrag) return; - wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId()); - event.SetInt( rb->GetValue() ); - event.SetEventObject( rb ); - rb->GetEventHandler()->ProcessEvent( event ); + wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId()); + event.SetInt( rb->GetValue() ); + event.SetEventObject( rb ); + rb->GetEventHandler()->ProcessEvent( event ); } //----------------------------------------------------------------------------- @@ -53,81 +53,89 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name ) { - m_needParent = TRUE; + m_needParent = TRUE; - wxSize newSize = size; + wxSize newSize = size; - PreCreation( parent, id, pos, newSize, style, name ); + PreCreation( parent, id, pos, newSize, style, name ); - SetValidator( validator ); + SetValidator( validator ); - m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label ); + m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label ); - SetLabel(label); + m_theOtherRadioButtton = + gtk_radio_button_new_with_label( + gtk_radio_button_group( GTK_RADIO_BUTTON(m_widget) ), + "button2" ); + + SetLabel(label); - m_blockFirstEvent = FALSE; + m_blockFirstEvent = FALSE; - if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label ); - if (newSize.y == -1) newSize.y = 26; - SetSize( newSize.x, newSize.y ); + if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label ); + if (newSize.y == -1) newSize.y = 26; + SetSize( newSize.x, newSize.y ); - gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", - GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this ); + gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", + GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this ); - m_parent->AddChild( this ); + m_parent->AddChild( this ); - (m_parent->m_insertCallback)( m_parent, this ); + (m_parent->m_insertCallback)( m_parent, this ); - PostCreation(); + PostCreation(); - SetBackgroundColour( parent->GetBackgroundColour() ); - SetForegroundColour( parent->GetForegroundColour() ); + SetBackgroundColour( parent->GetBackgroundColour() ); + SetForegroundColour( parent->GetForegroundColour() ); - Show( TRUE ); + Show( TRUE ); - return TRUE; + return TRUE; } void wxRadioButton::SetLabel( const wxString& label ) { - wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); + wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); - wxControl::SetLabel( label ); - GtkButton *bin = GTK_BUTTON( m_widget ); - GtkLabel *g_label = GTK_LABEL( bin->child ); - gtk_label_set( g_label, GetLabel() ); + wxControl::SetLabel( label ); + GtkButton *bin = GTK_BUTTON( m_widget ); + GtkLabel *g_label = GTK_LABEL( bin->child ); + gtk_label_set( g_label, GetLabel() ); } void wxRadioButton::SetValue( bool val ) { - wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); + wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); - m_blockFirstEvent = TRUE; + m_blockFirstEvent = TRUE; - gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), val ); + if (val) + gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), TRUE ); + else + gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_theOtherRadioButtton), TRUE ); } bool wxRadioButton::GetValue(void) const { - wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" ); + wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" ); - return GTK_TOGGLE_BUTTON(m_widget)->active; + return GTK_TOGGLE_BUTTON(m_widget)->active; } void wxRadioButton::Enable( bool enable ) { - wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); + wxCHECK_RET( m_widget != NULL, "invalid radiobutton" ); - wxControl::Enable( enable ); + wxControl::Enable( enable ); - gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable ); + gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable ); } void wxRadioButton::ApplyWidgetStyle() { - SetWidgetStyle(); - gtk_widget_set_style( m_widget, m_widgetStyle ); - gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle ); + SetWidgetStyle(); + gtk_widget_set_style( m_widget, m_widgetStyle ); + gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle ); }