+ int i;
+ wxRadioButton *current;
+
+// define the position
+
+ int x_current, y_current;
+ int x_offset,y_offset;
+
+ x_offset = x;
+ y_offset = y;
+ GetPosition(&x_current, &y_current);
+ if ((x == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+ x_offset = x_current;
+ if ((y == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+ y_offset = y_current;
+
+// define size
+
+ int charWidth,charHeight;
+ int maxWidth,maxHeight;
+ int eachWidth[128],eachHeight[128];
+ int totWidth,totHeight;
+
+ SetFont(GetParent()->GetFont());
+ GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &charWidth, &charHeight);
+ charWidth/=52;
+
+ maxWidth=-1;
+ maxHeight=-1;
+ for (i = 0 ; i < m_noItems; i++)
+ {
+ GetTextExtent(GetLabel(i), &eachWidth[i], &eachHeight[i]);
+ eachWidth[i] = (int)(eachWidth[i] + RADIO_SIZE);
+ eachHeight[i] = (int)((3*eachHeight[i])/2);
+ if (maxWidth<eachWidth[i]) maxWidth = eachWidth[i];
+ if (maxHeight<eachHeight[i]) maxHeight = eachHeight[i];
+ }
+
+ totHeight = GetNumVer() * (maxHeight + charHeight/2) + charHeight*3/2;
+ totWidth = GetNumHor() * (maxWidth + charWidth) + charWidth;
+
+ wxControl::DoSetSize(x_offset,y_offset,totWidth,totHeight,wxSIZE_AUTO);
+
+// arrange radiobuttons
+
+ int x_start,y_start;
+
+
+ x_start = charWidth;
+ y_start = charHeight*3/2;
+ x_offset = x_start;
+ y_offset = y_start;
+
+ current=m_radioButtonCycle;
+ for ( i = 0 ; i < m_noItems; i++)
+ {
+ if (i&&((i%m_majorDim)==0)) // not to do for the zero button!
+ {
+ if (m_windowStyle & wxRA_VERTICAL)
+ {
+ x_offset += maxWidth + charWidth;
+ y_offset = y_start;
+ }
+ else
+ {
+ x_offset = x_start;
+ y_offset += maxHeight + charHeight/2;
+ }
+ }
+
+ current->SetSize(x_offset,y_offset,eachWidth[i],eachHeight[i]);
+ current=current->NextInCycle();
+
+ if (m_windowStyle & wxRA_SPECIFY_ROWS)
+ y_offset += maxHeight + charHeight/2;
+ else
+ x_offset += maxWidth + charWidth;
+ }