X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aa61d3525370a9b9fa8c797d9b7f89d96994db5f..63ab3daed955b52885e75daeab6088564f9e64d2:/src/msw/radiobox.cpp diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index b3a6b7f03d..45424eb27e 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -26,10 +26,11 @@ #if wxUSE_RADIOBOX +#include "wx/radiobox.h" + #ifndef WX_PRECOMP #include "wx/bitmap.h" #include "wx/brush.h" - #include "wx/radiobox.h" #include "wx/settings.h" #include "wx/log.h" #endif @@ -37,9 +38,6 @@ #include "wx/msw/subwin.h" #if wxUSE_TOOLTIPS - #if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__) - #include - #endif #include "wx/tooltip.h" #endif // wxUSE_TOOLTIPS @@ -213,7 +211,7 @@ bool wxRadioBox::Create(wxWindow *parent, SetSize(pos.x, pos.y, size.x, size.y); // Now that we have items determine what is the best size and set it. - SetBestSize(size); + SetInitialSize(size); return true; } @@ -325,7 +323,7 @@ void wxRadioBox::SendNotificationEvent() unsigned int wxRadioBox::GetCount() const { - return m_radioButtons->GetCount(); + return m_radioButtons ? m_radioButtons->GetCount() : 0u; } void wxRadioBox::SetString(unsigned int item, const wxString& label) @@ -421,6 +419,25 @@ bool wxRadioBox::IsItemShown(unsigned int item) const GWL_STYLE) & WS_VISIBLE) != 0; } +#if wxUSE_TOOLTIPS + +bool wxRadioBox::HasToolTips() const +{ + return wxStaticBox::HasToolTips() || wxRadioBoxBase::HasItemToolTips(); +} + +void wxRadioBox::DoSetItemToolTip(unsigned int item, wxToolTip *tooltip) +{ + // we have already checked for the item to be valid in wxRadioBoxBase + const HWND hwndRbtn = (*m_radioButtons)[item]; + if ( tooltip != NULL ) + tooltip->Add(hwndRbtn); + else // unset the tooltip + wxToolTip::Remove(hwndRbtn); +} + +#endif // wxUSE_TOOLTIPS + WX_FORWARD_STD_METHODS_TO_SUBWINDOWS(wxRadioBox, wxStaticBox, m_radioButtons) // ---------------------------------------------------------------------------- @@ -478,7 +495,7 @@ wxSize wxRadioBox::GetTotalButtonSize(const wxSize& sizeBtn) const // and also wide enough for its label int widthLabel; - GetTextExtent(wxStripMenuCodes(GetLabel()), &widthLabel, NULL); + GetTextExtent(GetLabelText(), &widthLabel, NULL); widthLabel += RADIO_SIZE; // FIXME this is bogus too if ( widthLabel > width ) width = widthLabel; @@ -488,6 +505,13 @@ wxSize wxRadioBox::GetTotalButtonSize(const wxSize& sizeBtn) const 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; @@ -639,6 +663,23 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) } } +int wxRadioBox::GetItemFromPoint(const wxPoint& pt) const +{ + const unsigned int count = GetCount(); + for ( unsigned int i = 0; i < count; i++ ) + { + RECT rect = wxGetWindowRect((*m_radioButtons)[i]); + + if ( rect.left <= pt.x && pt.x < rect.right && + rect.top <= pt.y && pt.y < rect.bottom ) + { + return i; + } + } + + return wxNOT_FOUND; +} + // ---------------------------------------------------------------------------- // radio box drawing // ---------------------------------------------------------------------------- @@ -690,32 +731,6 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, return lDlgCode | DLGC_WANTARROWS; } -#if wxUSE_TOOLTIPS - case WM_NOTIFY: - { - NMHDR* hdr = (NMHDR *)lParam; - if ( hdr->code == TTN_NEEDTEXT ) - { - wxRadioBox * - radiobox = (wxRadioBox *)wxGetWindowUserData(hwnd); - - wxCHECK_MSG( radiobox, 0, - wxT("radio button without radio box?") ); - - wxToolTip *tooltip = radiobox->GetToolTip(); - if ( tooltip ) - { - TOOLTIPTEXT *ttt = (TOOLTIPTEXT *)lParam; - ttt->lpszText = (wxChar *)tooltip->GetTip().c_str(); - } - - // processed - return 0; - } - } - break; -#endif // wxUSE_TOOLTIPS - case WM_KEYDOWN: { wxRadioBox *radiobox = (wxRadioBox *)wxGetWindowUserData(hwnd);