Now even wxRadioButton works

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1196 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 1998-12-14 20:03:52 +00:00
parent 72fd19a1fb
commit f5d29b396f
5 changed files with 118 additions and 94 deletions

View File

@ -66,7 +66,8 @@ class wxRadioButton: public wxControl
void ApplyWidgetStyle();
bool m_blockFirstEvent;
bool m_blockFirstEvent;
GtkWidget* m_theOtherRadioButtton;
};
#endif // __GTKRADIOBUTTONH__

View File

@ -66,7 +66,8 @@ class wxRadioButton: public wxControl
void ApplyWidgetStyle();
bool m_blockFirstEvent;
bool m_blockFirstEvent;
GtkWidget* m_theOtherRadioButtton;
};
#endif // __GTKRADIOBUTTONH__

View File

@ -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);

View File

@ -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 );
}

View File

@ -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 );
}