X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/42e69d6b435a4dd5415caf3750db62cf45b6f373..2356708db31b737c6eae53c2316b642aa5a2e68d:/src/msw/radiobox.cpp diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index 757b479beb..7e44bde49e 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -110,7 +110,7 @@ bool wxRadioBox::MSWCommand(WXUINT cmd, WXWORD id) } } - wxASSERT_MSG( selectedButton != -1, "click from alien button?" ); + wxASSERT_MSG( selectedButton != -1, _T("click from alien button?") ); if ( selectedButton != m_selectedButton ) { @@ -257,7 +257,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, } // Create a dummy radio control to end the group. - (void)CreateWindowEx(0, RADIO_CLASS, "", WS_GROUP | RADIO_FLAGS, + (void)CreateWindowEx(0, RADIO_CLASS, _T(""), WS_GROUP | RADIO_FLAGS, 0, 0, 0, 0, hwndParent, (HMENU)NewControlId(), wxGetInstance(), NULL); @@ -287,8 +287,17 @@ wxRadioBox::~wxRadioBox() } +wxString wxRadioBox::GetLabel(int item) const +{ + wxCHECK_MSG( item >= 0 && item < m_noItems, _T(""), _T("invalid radiobox index") ); + + return wxGetWindowText(m_radioButtons[item]); +} + void wxRadioBox::SetLabel(int item, const wxString& label) { + wxCHECK_RET( item >= 0 && item < m_noItems, _T("invalid radiobox index") ); + m_radioWidth[item] = m_radioHeight[item] = -1; SetWindowText((HWND)m_radioButtons[item], label.c_str()); } @@ -299,7 +308,7 @@ void wxRadioBox::SetLabel(int item, wxBitmap *bitmap) m_radioWidth[item] = bitmap->GetWidth() + FB_MARGIN; m_radioHeight[item] = bitmap->GetHeight() + FB_MARGIN; */ - wxFAIL_MSG("not implemented"); + wxFAIL_MSG(_T("not implemented")); } int wxRadioBox::FindString(const wxString& s) const @@ -315,7 +324,7 @@ int wxRadioBox::FindString(const wxString& s) const void wxRadioBox::SetSelection(int N) { - wxCHECK_RET( (N >= 0) && (N < m_noItems), "invalid radiobox index" ); + wxCHECK_RET( (N >= 0) && (N < m_noItems), _T("invalid radiobox index") ); // Following necessary for Win32s, because Win32s translate BM_SETCHECK if (m_selectedButton >= 0 && m_selectedButton < m_noItems) @@ -342,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; - - char 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; @@ -644,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__ @@ -716,7 +723,7 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, { wxRadioBox *radiobox = (wxRadioBox *)::GetWindowLong(hwnd, GWL_USERDATA); - wxCHECK_MSG( radiobox, 0, "radio button without radio box?" ); + wxCHECK_MSG( radiobox, 0, _T("radio button without radio box?") ); int sel = radiobox->GetSelection();