+bool wxRadioButton::Create( wxWindow *parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxValidator& validator,
+ const wxString& name )
+{
+ m_acceptsFocus = TRUE;
+ m_needParent = 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->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, wxGTK_CONV( label ) );