+ m_acceptsFocus = TRUE;
+ m_needParent = TRUE;
+ m_isRadioButton = TRUE;
+
+ m_blockEvent = FALSE;
+
+ if (!PreCreation( parent, pos, size ) ||
+ !CreateBase( parent, id, pos, size, style, validator, name ))
+ {
+ wxFAIL_MSG( wxT("wxRadioButton creation failed") );
+ return FALSE;
+ }
+
+ if (HasFlag(wxRB_GROUP))
+ {
+ // start a new group
+ m_radioButtonGroup = (GSList*) NULL;
+ }
+ else
+ {
+ // search backward for last group start
+ wxRadioButton *chief = (wxRadioButton*) NULL;
+ wxWindowList::Node *node = parent->GetChildren().GetLast();
+ while (node)
+ {
+ wxWindow *child = node->GetData();
+ if (child->m_isRadioButton)
+ {
+ chief = (wxRadioButton*) child;
+ if (child->HasFlag(wxRB_GROUP)) break;
+ }
+ node = node->GetPrevious();
+ }
+ if (chief)
+ {
+ // we are part of the group started by chief
+ m_radioButtonGroup = gtk_radio_button_group( GTK_RADIO_BUTTON(chief->m_widget) );
+ }
+ else
+ {
+ // start a new group
+ m_radioButtonGroup = (GSList*) NULL;
+ }
+ }
+
+ m_widget = gtk_radio_button_new_with_label( m_radioButtonGroup, label.mbc_str() );
+
+ SetLabel(label);
+
+ gtk_signal_connect( GTK_OBJECT(m_widget), "clicked",
+ GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
+
+ m_parent->DoAddChild( this );
+
+ PostCreation();
+
+ SetFont( parent->GetFont() );
+
+ wxSize size_best( DoGetBestSize() );
+ wxSize new_size( size );
+ if (new_size.x == -1)
+ new_size.x = size_best.x;
+ if (new_size.y == -1)
+ new_size.y = size_best.y;
+ if ((new_size.x != size.x) || (new_size.y != size.y))
+ SetSize( new_size.x, new_size.y );
+
+ SetBackgroundColour( parent->GetBackgroundColour() );
+ SetForegroundColour( parent->GetForegroundColour() );
+
+ Show( TRUE );