]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/menuitem.cpp
cgimagecreate from wxbitmap crashes 10.2 - turn off. Put in right click handler to...
[wxWidgets.git] / src / os2 / menuitem.cpp
index 574fea6166f10423b0d1eb047f3dc69c5cfb13e9..a3180a5ae8fe14940d49019eee9c7be3c9203d4b 100644 (file)
     #define OWNER_DRAWN_ONLY( code )
 #endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN
 
-// ----------------------------------------------------------------------------
-// static function for translating menu labels
-// ----------------------------------------------------------------------------
-
-static wxString TextToLabel(const wxString& rTitle)
-{
-    wxString Title;
-    const wxChar *pc;
-    for (pc = rTitle.c_str(); *pc != wxT('\0'); pc++ )
-    {
-        if (*pc == wxT('&') )
-        {
-            if (*(pc+1) == wxT('&'))
-            {
-                pc++;
-                Title << wxT('&');
-            }
-            else
-                Title << wxT('~');
-        }
-        else
-        {
-            if ( *pc == wxT('~') )
-            {
-                // tildes must be doubled to prevent them from being
-                // interpreted as accelerator character prefix by PM ???
-                Title << *pc;
-            }
-            Title << *pc;
-        }
-    }
-    return Title;
-}
-
 // ============================================================================
 // implementation
 // ============================================================================
@@ -115,18 +81,20 @@ wxMenuItem::wxMenuItem(
 )
 : wxMenuItemBase( pParentMenu
                  ,nId
-                 ,TextToLabel(rsText)
+                 ,wxPMTextToLabel(rsText)
                  ,rsHelp
                  ,eKind
                  ,pSubMenu
                 )
 #if wxUSE_OWNER_DRAWN
-,  wxOwnerDrawn( TextToLabel(rsText)
+,  wxOwnerDrawn( wxPMTextToLabel(rsText)
                 ,eKind == wxITEM_CHECK
                )
 #endif // owner drawn
 {
     wxASSERT_MSG(pParentMenu != NULL, wxT("a menu item should have a parent"));
+    memset(&m_vMenuData, '\0', sizeof(m_vMenuData));
+    m_vMenuData.id = (USHORT)nId;
 
     Init();
 } // end of wxMenuItem::wxMenuItem
@@ -141,13 +109,13 @@ wxMenuItem::wxMenuItem(
 )
 : wxMenuItemBase( pParentMenu
                  ,nId
-                 ,TextToLabel(rsText)
+                 ,wxPMTextToLabel(rsText)
                  ,rsHelp
                  ,bIsCheckable ? wxITEM_CHECK : wxITEM_NORMAL
                  ,pSubMenu
                 )
 #if wxUSE_OWNER_DRAWN
-,  wxOwnerDrawn( TextToLabel(rsText)
+,  wxOwnerDrawn( wxPMTextToLabel(rsText)
                 ,bIsCheckable
                )
 #endif // owner drawn
@@ -173,12 +141,11 @@ void wxMenuItem::Init()
     SetTextColour(SYS_COLOR(MENUTEXT));
     SetBackgroundColour(SYS_COLOR(MENU));
 
-    #undef  SYS_COLOR
-
     //
     // We don't want normal items be owner-drawn
     //
     ResetOwnerDrawn();
+    #undef  SYS_COLOR
 
     //
     // Tell the owner drawing code to to show the accel string as well
@@ -218,23 +185,25 @@ bool wxMenuItem::IsChecked() const
 } // end of wxMenuItem::IsChecked
 
 wxString wxMenuItemBase::GetLabelFromText(
-  const wxString&                   rText
+  const wxString&                   rsText
 )
 {
-    wxString label;
-    for ( const wxChar *pc = rText.c_str(); *pc; pc++ )
+    wxString                        sLabel;
+
+    for (const char* zPc = rsText.c_str(); *zPc; zPc++)
     {
-        if ( *pc == wxT('~') || *pc == wxT('&') )
+        if (*zPc == wxT('~') || *zPc == wxT('&'))
         {
-            // '~' is the escape character for GTK+ and '&' is the one for
-            // wxWindows - skip both of them
+            //
+            // '~' is the escape character for OS/2PM and '&' is the one for
+            // wxWidgets - skip both of them
+            //
             continue;
         }
-
-        label += *pc;
+        sLabel += *zPc;
     }
-    return label;
-}
+    return sLabel;
+} // end of wxMenuItemBase::GetLabelFromText
 
 //
 // Radio group stuff
@@ -352,9 +321,9 @@ void wxMenuItem::Check(
         //
         // Also uncheck all the other items in this radio group
         //
-        wxMenuItemList::Node*       pNode = rItems.Item(nStart);
+        wxMenuItemList::compatibility_iterator node = rItems.Item(nStart);
 
-        for (int n = nStart; n <= nEnd && pNode; n++)
+        for (int n = nStart; n <= nEnd && node; n++)
         {
             if (n == nPos)
             {
@@ -366,14 +335,14 @@ void wxMenuItem::Check(
             }
             if (n != nPos)
             {
-                pNode->GetData()->m_isChecked = FALSE;
+                node->GetData()->m_isChecked = FALSE;
                 ::WinSendMsg( hMenu
                              ,MM_SETITEMATTR
                              ,MPFROM2SHORT(n, TRUE)
                              ,MPFROM2SHORT(MIA_CHECKED, FALSE)
                             );
             }
-            pNode = pNode->GetNext();
+            node = node->GetNext();
         }
     }
     else // check item
@@ -406,12 +375,15 @@ void wxMenuItem::SetText(
     // Don't do anything if label didn't change
     //
 
-    wxString                        sText = TextToLabel(rText);
+    wxString                        sText = wxPMTextToLabel(rText);
     if (m_text == sText)
         return;
 
     wxMenuItemBase::SetText(sText);
     OWNER_DRAWN_ONLY(wxOwnerDrawn::SetName(sText));
+#if  wxUSE_OWNER_DRAWN
+    SetAccelString(rText.AfterFirst(_T('\t')));
+#endif // wxUSE_OWNER_DRAWN
 
     HWND                            hMenu = GetHmenuOf(m_parentMenu);