X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c7fd6717af589e659abf480731c9810341eca37e..1e52188741389278cd99abf79218162c87024ba3:/src/msw/radiobox.cpp?ds=inline diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index e125e57e59..19ae0e3b05 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -5,8 +5,8 @@ // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // =========================================================================== @@ -17,7 +17,7 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "radiobox.h" #endif @@ -49,6 +49,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl) +/* + selection + content + label + dimension + item +*/ + // there are two possible ways to create the radio buttons: either as children // of the radiobox or as siblings of it - allow playing with both variants for // now, eventually we will choose the best one for our purposes @@ -183,22 +191,6 @@ bool wxRadioBox::MSWCommand(WXUINT cmd, WXWORD id) return FALSE; } -#if WXWIN_COMPATIBILITY -wxRadioBox::wxRadioBox(wxWindow *parent, wxFunction func, const char *title, - int x, int y, int width, int height, - int n, char **choices, - int majorDim, long style, const char *name) -{ - wxString *choices2 = new wxString[n]; - for ( int i = 0; i < n; i ++) choices2[i] = choices[i]; - Create(parent, -1, title, wxPoint(x, y), wxSize(width, height), n, choices2, majorDim, style, - wxDefaultValidator, name); - Callback(func); - delete choices2; -} - -#endif // WXWIN_COMPATIBILITY - // Radio box item wxRadioBox::wxRadioBox() { @@ -300,7 +292,7 @@ bool wxRadioBox::Create(wxWindow *parent, // Create a dummy radio control to end the group. (void)::CreateWindow(_T("BUTTON"), - _T(""), + wxEmptyString, WS_GROUP | BS_AUTORADIOBUTTON | WS_CHILD, 0, 0, 0, 0, hwndParent, (HMENU)NewControlId(), wxGetInstance(), NULL); @@ -348,7 +340,6 @@ void wxRadioBox::SetSelection(int N) ::SendMessage((HWND) m_radioButtons[m_selectedButton], BM_SETCHECK, 0, 0L); ::SendMessage((HWND)m_radioButtons[N], BM_SETCHECK, 1, 0L); - ::SetFocus((HWND)m_radioButtons[N]); m_selectedButton = N; } @@ -650,10 +641,9 @@ void wxRadioBox::SetFocus() { if (m_noItems > 0) { - if (m_selectedButton == -1) - ::SetFocus((HWND) m_radioButtons[0]); - else - ::SetFocus((HWND) m_radioButtons[m_selectedButton]); + ::SetFocus((HWND)m_radioButtons[m_selectedButton == -1 + ? 0 + : m_selectedButton]); } } @@ -717,6 +707,7 @@ bool wxRadioBox::ContainsHWND(WXHWND hWnd) const void wxRadioBox::Command(wxCommandEvent & event) { SetSelection (event.m_commandInt); + SetFocus(); ProcessCommand (event); } @@ -724,8 +715,6 @@ void wxRadioBox::Command(wxCommandEvent & event) // radiobox pointer in GWL_USERDATA for radio buttons must be updated too! void wxRadioBox::SubclassRadioButton(WXHWND hWndBtn) { - // No GWL_USERDATA in Win16, so omit this subclassing. -#ifdef __WIN32__ HWND hwndBtn = (HWND)hWndBtn; if ( !s_wndprocRadioBtn ) @@ -733,7 +722,6 @@ void wxRadioBox::SubclassRadioButton(WXHWND hWndBtn) ::SetWindowLong(hwndBtn, GWL_WNDPROC, (long)wxRadioBtnWndProc); ::SetWindowLong(hwndBtn, GWL_USERDATA, (long)this); -#endif // __WIN32__ } void wxRadioBox::SendNotificationEvent() @@ -837,11 +825,6 @@ WXHBRUSH wxRadioBox::OnCtlColor(WXHDC pDC, WXHWND WXUNUSED(pWnd), WXUINT WXUNUSE #endif // wxUSE_CTL3D HDC hdc = (HDC)pDC; - if (GetParent()->GetTransparentBackground()) - SetBkMode(hdc, TRANSPARENT); - else - SetBkMode(hdc, OPAQUE); - wxColour colBack = GetBackgroundColour(); if (!IsEnabled()) @@ -884,7 +867,7 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, case WM_NOTIFY: { NMHDR* hdr = (NMHDR *)lParam; - if ( (int)hdr->code == TTN_NEEDTEXT ) + if ( hdr->code == TTN_NEEDTEXT ) { wxRadioBox *radiobox = (wxRadioBox *) ::GetWindowLong(hwnd, GWL_USERDATA); @@ -954,6 +937,7 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, if ( selNew != selOld ) { radiobox->SetSelection(selNew); + radiobox->SetFocus(); // emulate the button click radiobox->SendNotificationEvent(); @@ -974,15 +958,24 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, bool processed = TRUE; + // HELPINFO doesn't seem to be supported on WinCE. +#ifndef __WXWINCE__ HELPINFO* info = (HELPINFO*) lParam; // Don't yet process menu help events, just windows if (info->iContextType == HELPINFO_WINDOW) +#endif { wxWindow* subjectOfHelp = radiobox; bool eventProcessed = FALSE; while (subjectOfHelp && !eventProcessed) { - wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(), wxPoint(info->MousePos.x, info->MousePos.y) ) ; // info->iCtrlId); + wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(), +#ifdef __WXWINCE__ + wxPoint(0, 0) +#else + wxPoint(info->MousePos.x, info->MousePos.y) +#endif + ) ; // info->iCtrlId); helpEvent.SetEventObject(radiobox); eventProcessed = radiobox->GetEventHandler()->ProcessEvent(helpEvent); @@ -991,14 +984,16 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd, } processed = eventProcessed; } +#ifndef __WXWINCE__ else if (info->iContextType == HELPINFO_MENUITEM) { wxHelpEvent helpEvent(wxEVT_HELP, info->iCtrlId) ; helpEvent.SetEventObject(radiobox); processed = radiobox->GetEventHandler()->ProcessEvent(helpEvent); } - else processed = FALSE; - + else + processed = FALSE; +#endif if (processed) return 0;