X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/914589c26ced86ffa672171ee476e1740538fbb8..38755449339718307f594d0c92f7d37ce56c908c:/src/os2/menuitem.cpp diff --git a/src/os2/menuitem.cpp b/src/os2/menuitem.cpp index 03ee6f9b5d..1d960c605b 100644 --- a/src/os2/menuitem.cpp +++ b/src/os2/menuitem.cpp @@ -54,6 +54,44 @@ #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; *pc != wxT('\0'); pc++ ) + { + if (*pc == wxT('&') ) + { + if (*(pc+1) == wxT('&')) + { + pc++; + Title << wxT('&'); + } + else + Title << wxT('~'); + } +// else if (*pc == wxT('/')) +// { +// 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 // ============================================================================ @@ -84,7 +122,7 @@ wxMenuItem::wxMenuItem( , wxMenu* pSubMenu ) #if wxUSE_OWNER_DRAWN -: wxOwnerDrawn( rText +: wxOwnerDrawn( TextToLabel(rText) ,bCheckable ) #endif // owner drawn @@ -114,9 +152,11 @@ wxMenuItem::wxMenuItem( m_isEnabled = TRUE; m_isChecked = FALSE; m_id = nId; - m_text = rText; + m_text = TextToLabel(rText); m_isCheckable = bCheckable; m_help = rStrHelp; + memset(&m_vMenuData, '\0', sizeof(m_vMenuData)); + m_vMenuData.id= nId; } // end of wxMenuItem::wxMenuItem wxMenuItem::~wxMenuItem() @@ -153,7 +193,19 @@ wxString wxMenuItemBase::GetLabelFromText( const wxString& rText ) { - return wxStripMenuCodes(rText); + 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; + } + + label += *pc; + } + return label; } // accelerators @@ -183,13 +235,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) { @@ -221,7 +273,7 @@ void wxMenuItem::Check( ); if (!bOk) { - wxLogLastError("EnableMenuItem"); + wxLogLastError("CheckMenuItem"); } wxMenuItemBase::Check(bCheck); } // end of wxMenuItem::Check @@ -233,11 +285,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 +333,7 @@ void wxMenuItem::SetText( #endif //owner drawn { uFlagsOld |= MIS_TEXT; - pData = (BYTE*)rText.c_str(); + pData = (BYTE*)Text.c_str(); } //