]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/menuitem.cpp
fixed compilation problem with old gcc releases
[wxWidgets.git] / src / os2 / menuitem.cpp
index 03ee6f9b5d3543d25d0093288b258159455e99cf..9b5bc2fed425ee3de751cf36bc28149d5c9c3749 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
 // ============================================================================
 // dynamic classes implementation
 // ----------------------------------------------------------------------------
 
-    #if wxUSE_OWNER_DRAWN
-        IMPLEMENT_DYNAMIC_CLASS2(wxMenuItem, wxMenuItemBase, wxOwnerDrawn)
-    #else   //!USE_OWNER_DRAWN
-        IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxMenuItemBase)
-    #endif  //USE_OWNER_DRAWN
+IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject)
 
 // ----------------------------------------------------------------------------
 // wxMenuItem
@@ -80,11 +110,12 @@ wxMenuItem::wxMenuItem(
 , int                               nId
 , const wxString&                   rText
 , const wxString&                   rStrHelp
-, bool                              bCheckable
+, wxItemKind                        kind
 , wxMenu*                           pSubMenu
 )
+: wxMenuItemBase(pParentMenu, nId, rText, rStrHelp, kind, pSubMenu)
 #if wxUSE_OWNER_DRAWN
-:  wxOwnerDrawn( rText
+,  wxOwnerDrawn( TextToLabel(rText)
                 ,bCheckable
                )
 #endif // owner drawn
@@ -96,7 +127,7 @@ wxMenuItem::wxMenuItem(
     //
     // Set default menu colors
     //
-    #define SYS_COLOR(c) (wxSystemSettings::GetSystemColour(wxSYS_COLOUR_##c))
+    #define SYS_COLOR(c) (wxSystemSettings::GetColour(wxSYS_COLOUR_##c))
 
     SetTextColour(SYS_COLOR(MENUTEXT));
     SetBackgroundColour(SYS_COLOR(MENU));
@@ -109,14 +140,10 @@ wxMenuItem::wxMenuItem(
     #undef  SYS_COLOR
 #endif // wxUSE_OWNER_DRAWN
 
-    m_parentMenu  = pParentMenu;
-    m_subMenu     = pSubMenu;
-    m_isEnabled   = TRUE;
-    m_isChecked   = FALSE;
-    m_id          = nId;
-    m_text        = rText;
-    m_isCheckable = bCheckable;
-    m_help        = rStrHelp;
+    m_text        = TextToLabel(rText);
+
+    memset(&m_vMenuData, '\0', sizeof(m_vMenuData));
+    m_vMenuData.id= nId;
 } // end of wxMenuItem::wxMenuItem
 
 wxMenuItem::~wxMenuItem()
@@ -153,21 +180,21 @@ wxString wxMenuItemBase::GetLabelFromText(
   const wxString&                   rText
 )
 {
-    return wxStripMenuCodes(rText);
-}
-
-// accelerators
-// ------------
-
-#if wxUSE_ACCEL
+    wxString label;
+    for ( const wxChar *pc = rText.c_str(); *pc; pc++ )
+    {
+        if ( *pc == wxT('~') || *pc == wxT('&') )
+        {
+            // '~' is the escape character for GTK+ and '&' is the one for
+            // wxWindows - skip both of them
+            continue;
+        }
 
-wxAcceleratorEntry *wxMenuItem::GetAccel() const
-{
-    return wxGetAccelFromString(GetText());
+        label += *pc;
+    }
+    return label;
 }
 
-#endif // wxUSE_ACCEL
-
 // change item state
 // -----------------
 
@@ -183,13 +210,13 @@ void wxMenuItem::Enable(
         bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu)
                                  ,MM_SETITEMATTR
                                  ,MPFROM2SHORT(GetRealId(), TRUE)
-                                 ,MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED)
+                                 ,MPFROM2SHORT(MIA_DISABLED, FALSE)
                                 );
     else
         bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu)
                                  ,MM_SETITEMATTR
                                  ,MPFROM2SHORT(GetRealId(), TRUE)
-                                 ,MPFROM2SHORT(MIA_DISABLED, FALSE)
+                                 ,MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED)
                                 );
     if (!bOk)
     {
@@ -204,7 +231,7 @@ void wxMenuItem::Check(
 {
     bool                            bOk;
 
-    wxCHECK_RET( m_isCheckable, wxT("only checkable items may be checked") );
+    wxCHECK_RET( IsCheckable(), wxT("only checkable items may be checked") );
     if (m_isChecked == bCheck)
         return;
     if (bCheck)
@@ -221,7 +248,7 @@ void wxMenuItem::Check(
                                 );
     if (!bOk)
     {
-        wxLogLastError("EnableMenuItem");
+        wxLogLastError("CheckMenuItem");
     }
     wxMenuItemBase::Check(bCheck);
 } // end of wxMenuItem::Check
@@ -233,11 +260,13 @@ void wxMenuItem::SetText(
     //
     // Don't do anything if label didn't change
     //
-    if (m_text == rText)
+
+    wxString Text = TextToLabel(rText);
+    if (m_text == Text)
         return;
 
-    wxMenuItemBase::SetText(rText);
-    OWNER_DRAWN_ONLY(wxOwnerDrawn::SetName(rText));
+    wxMenuItemBase::SetText(Text);
+    OWNER_DRAWN_ONLY(wxOwnerDrawn::SetName(Text));
 
     HWND                            hMenu = GetHMenuOf(m_parentMenu);
 
@@ -279,7 +308,7 @@ void wxMenuItem::SetText(
 #endif  //owner drawn
         {
             uFlagsOld |= MIS_TEXT;
-            pData = (BYTE*)rText.c_str();
+            pData = (BYTE*)Text.c_str();
         }
 
         //
@@ -325,7 +354,7 @@ wxMenuItem* wxMenuItemBase::New(
 , int                               nId
 , const wxString&                   rName
 , const wxString&                   rHelp
-, bool                              bIsCheckable
+, wxItemKind                        kind
 , wxMenu*                           pSubMenu
 )
 {
@@ -333,7 +362,7 @@ wxMenuItem* wxMenuItemBase::New(
                           ,nId
                           ,rName
                           ,rHelp
-                          ,bIsCheckable
+                          ,kind
                           ,pSubMenu
                          );
 } // end of wxMenuItemBase::New