]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/radiobox.cpp
unicode fixes, enabling notebook images again
[wxWidgets.git] / src / msw / radiobox.cpp
index 3718821eba32e3a1de0b7cdae1e0e3c23eff11ab..19ae0e3b051a9045d6a8603dbee9027025e8a562 100644 (file)
@@ -17,7 +17,7 @@
 // headers
 // ---------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma implementation "radiobox.h"
 #endif
 
 
 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
@@ -332,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;
 }
@@ -634,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]);
     }
 
 }
@@ -701,6 +707,7 @@ bool wxRadioBox::ContainsHWND(WXHWND hWnd) const
 void wxRadioBox::Command(wxCommandEvent & event)
 {
     SetSelection (event.m_commandInt);
+    SetFocus();
     ProcessCommand (event);
 }
 
@@ -708,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 )
@@ -717,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()
@@ -933,6 +937,7 @@ LRESULT APIENTRY _EXPORT wxRadioBtnWndProc(HWND hwnd,
                     if ( selNew != selOld )
                     {
                         radiobox->SetSelection(selNew);
+                        radiobox->SetFocus();
 
                         // emulate the button click
                         radiobox->SendNotificationEvent();
@@ -953,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);
 
@@ -970,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;