X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/837e57436a89516a5fa9f478f401e06bd872c17c..2356708db31b737c6eae53c2316b642aa5a2e68d:/src/msw/radiobox.cpp?ds=sidebyside diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index ebd76b52bb..7e44bde49e 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -351,135 +351,164 @@ wxString wxRadioBox::GetString(int N) const // Restored old code. void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) { - int currentX, currentY; - GetPosition(¤tX, ¤tY); - int xx = x; - int yy = y; - - if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - xx = currentX; - if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - yy = currentY; - - wxChar buf[400]; - - int y_offset = yy; - int x_offset = xx; - int current_width, cyf; - - int cx1,cy1; - wxGetCharSize(m_hWnd, &cx1, &cy1, & GetFont()); - // Attempt to have a look coherent with other platforms: - // We compute the biggest toggle dim, then we align all - // items according this value. - int maxWidth = -1; - int maxHeight = -1; - - int i; - for (i = 0 ; i < m_noItems; i++) - { - int eachWidth; - int eachHeight; - if (m_radioWidth[i]<0) - { - // It's a labelled toggle - GetWindowText((HWND) m_radioButtons[i], buf, 300); - GetTextExtent(buf, ¤t_width, &cyf,NULL,NULL, & GetFont()); - eachWidth = (int)(current_width + RADIO_SIZE); - eachHeight = (int)((3*cyf)/2); - } - else + int currentX, currentY; + GetPosition(¤tX, ¤tY); + int widthOld, heightOld; + GetSize(&widthOld, &heightOld); + + int xx = x; + int yy = y; + + if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + xx = currentX; + if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + yy = currentY; + + wxString buf; + + int y_offset = yy; + int x_offset = xx; + int current_width, cyf; + + int cx1,cy1; + wxGetCharSize(m_hWnd, &cx1, &cy1, & GetFont()); + + // Attempt to have a look coherent with other platforms: We compute the + // biggest toggle dim, then we align all items according this value. + int maxWidth = -1; + int maxHeight = -1; + + int i; + for (i = 0 ; i < m_noItems; i++) { - eachWidth = m_radioWidth[i]; - eachHeight = m_radioHeight[i]; + int eachWidth; + int eachHeight; + if (m_radioWidth[i]<0) + { + // It's a labelled toggle + buf = wxGetWindowText(m_radioButtons[i]); + GetTextExtent(buf, ¤t_width, &cyf); + eachWidth = (int)(current_width + RADIO_SIZE); + eachHeight = (int)((3*cyf)/2); + } + else + { + eachWidth = m_radioWidth[i]; + eachHeight = m_radioHeight[i]; + } + + if (maxWidth0) - y_offset += cy1/2; - } - } - int eachWidth; - int eachHeight; - if (m_radioWidth[i]<0) - { - // It's a labeled item - GetWindowText((HWND) m_radioButtons[i], buf, 300); - GetTextExtent(buf, ¤t_width, &cyf,NULL,NULL, & GetFont()); - - // How do we find out radio button bitmap size!! - // By adjusting them carefully, manually :-) - eachWidth = (int)(current_width + RADIO_SIZE); - eachHeight = (int)((3*cyf)/2); - } - else - { - eachWidth = m_radioWidth[i]; - eachHeight = m_radioHeight[i]; + // only change our width/height if asked for + if ( width == -1 ) + { + if ( sizeFlags & wxSIZE_AUTO_WIDTH ) + width = totWidth + cx1; + else + width = widthOld; + } + + if ( height == -1 ) + { + if ( sizeFlags & wxSIZE_AUTO_HEIGHT ) + height = totHeight + extraHeight; + else + height = heightOld; + } + + MoveWindow(GetHwnd(), x_offset, y_offset, width, height, TRUE); + + x_offset += cx1; + y_offset += cy1; } - MoveWindow((HWND) m_radioButtons[i],x_offset,y_offset,eachWidth,eachHeight,TRUE); - if (m_windowStyle & wxRA_SPECIFY_ROWS) +#if defined(CTL3D) && (!CTL3D) + y_offset += (int)(cy1/2); // Fudge factor since buttons overlapped label + // JACS 2/12/93. CTL3D draws group label quite high. +#endif + int startX = x_offset; + int startY = y_offset; + + for ( i = 0 ; i < m_noItems; i++) { - y_offset += maxHeight; - if (m_radioWidth[0]>0) - y_offset += cy1/2; + // Bidimensional radio adjustment + if (i&&((i%m_majorDim)==0)) // Why is this omitted for i = 0? + { + if (m_windowStyle & wxRA_VERTICAL) + { + y_offset = startY; + x_offset += maxWidth + cx1; + } + else + { + x_offset = startX; + y_offset += maxHeight; + if (m_radioWidth[0]>0) + y_offset += cy1/2; + } + } + int eachWidth; + int eachHeight; + if (m_radioWidth[i]<0) + { + // It's a labeled item + buf = wxGetWindowText(m_radioButtons[i]); + GetTextExtent(buf, ¤t_width, &cyf); + + // How do we find out radio button bitmap size!! + // By adjusting them carefully, manually :-) + eachWidth = (int)(current_width + RADIO_SIZE); + eachHeight = (int)((3*cyf)/2); + } + else + { + eachWidth = m_radioWidth[i]; + eachHeight = m_radioHeight[i]; + } + + MoveWindow((HWND)m_radioButtons[i], x_offset, y_offset, + eachWidth, eachHeight, + TRUE); + + if (m_windowStyle & wxRA_SPECIFY_ROWS) + { + y_offset += maxHeight; + if (m_radioWidth[0]>0) + y_offset += cy1/2; + } + else + x_offset += maxWidth + cx1; } - else - x_offset += maxWidth + cx1; - } } - void wxRadioBox::GetSize(int *width, int *height) const { RECT rect; @@ -653,37 +682,6 @@ void wxRadioBox::Command (wxCommandEvent & event) ProcessCommand (event); } -long wxRadioBox::MSWWindowProc(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam) -{ - long rc = 0; - bool processed = FALSE; - - switch ( msg ) - { - case WM_NCHITTEST: - { - int xPos = LOWORD(lParam); // horizontal position of cursor - int yPos = HIWORD(lParam); // vertical position of cursor - - ScreenToClient(&xPos, &yPos); - - // Make sure you can drag by the top of the groupbox, but let - // other (enclosed) controls get mouse events also - if ( yPos < 10 ) - { - rc = HTCLIENT; - processed = TRUE; - } - } - break; - } - - if ( !processed ) - rc = wxControl::MSWWindowProc(msg, wParam, lParam); - - return rc; -} - void wxRadioBox::SubclassRadioButton(WXHWND hWndBtn) { #ifdef __WIN32__