+ if ( !wxStaticBox::Reparent(newParent) )
+ {
+ return false;
+ }
+
+ HWND hwndParent = GetHwndOf(GetParent());
+ for ( size_t item = 0; item < m_radioButtons->GetCount(); item++ )
+ {
+ ::SetParent((*m_radioButtons)[item], hwndParent);
+ }
+#ifdef __WXWINCE__
+ // put static box under the buttons in the Z-order
+ SetWindowPos(GetHwnd(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
+#endif
+ return true;
+}
+
+WX_FORWARD_STD_METHODS_TO_SUBWINDOWS(wxRadioBox, wxStaticBox, m_radioButtons)
+
+// ----------------------------------------------------------------------------
+// size calculations
+// ----------------------------------------------------------------------------
+
+wxSize wxRadioBox::GetMaxButtonSize() const
+{
+ // calculate the max button size
+ int widthMax = 0,
+ heightMax = 0;
+ const unsigned int count = GetCount();
+ for ( unsigned int i = 0 ; i < count; i++ )
+ {
+ int width, height;
+ if ( m_radioWidth[i] < 0 )
+ {
+ GetTextExtent(wxGetWindowText((*m_radioButtons)[i]), &width, &height);
+
+ // adjust the size to take into account the radio box itself
+ // FIXME this is totally bogus!
+ width += RADIO_SIZE;
+ height *= 3;
+ height /= 2;
+ }
+ else
+ {
+ width = m_radioWidth[i];
+ height = m_radioHeight[i];
+ }
+
+ if ( widthMax < width )
+ widthMax = width;
+ if ( heightMax < height )
+ heightMax = height;
+ }
+
+ return wxSize(widthMax, heightMax);
+}
+
+wxSize wxRadioBox::GetTotalButtonSize(const wxSize& sizeBtn) const
+{
+ // the radiobox should be big enough for its buttons
+ int cx1, cy1;
+ wxGetCharSize(m_hWnd, &cx1, &cy1, GetFont());
+
+ int extraHeight = cy1;
+
+ int height = GetRowCount() * sizeBtn.y + cy1/2 + extraHeight;
+ int width = GetColumnCount() * (sizeBtn.x + cx1) + cx1;
+
+ // Add extra space under the label, if it exists.
+ if (!wxControl::GetLabel().empty())
+ height += cy1/2;
+
+ // and also wide enough for its label
+ int widthLabel;
+ GetTextExtent(GetLabelText(), &widthLabel, NULL);
+ widthLabel += RADIO_SIZE; // FIXME this is bogus too
+ if ( widthLabel > width )
+ width = widthLabel;
+
+ return wxSize(width, height);
+}
+
+wxSize wxRadioBox::DoGetBestSize() const
+{
+ if ( !m_radioButtons )
+ {
+ // if we're not fully initialized yet, we can't meaningfully compute
+ // our best size, we'll do it later
+ return wxSize(1, 1);
+ }
+
+ wxSize best = GetTotalButtonSize(GetMaxButtonSize());
+ CacheBestSize(best);
+ return best;