X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/914589c26ced86ffa672171ee476e1740538fbb8..6a44bffd1ac68163e4c1cfe8aa8fe4f7f98a02e7:/src/os2/menuitem.cpp?ds=sidebyside diff --git a/src/os2/menuitem.cpp b/src/os2/menuitem.cpp index 03ee6f9b5d..761e549f2c 100644 --- a/src/os2/menuitem.cpp +++ b/src/os2/menuitem.cpp @@ -54,6 +54,40 @@ #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 // ============================================================================ @@ -62,11 +96,7 @@ // 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 @@ -84,7 +114,7 @@ wxMenuItem::wxMenuItem( , wxMenu* pSubMenu ) #if wxUSE_OWNER_DRAWN -: wxOwnerDrawn( rText +: wxOwnerDrawn( TextToLabel(rText) ,bCheckable ) #endif // owner drawn @@ -96,7 +126,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)); @@ -114,9 +144,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,21 +185,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 +215,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 +253,7 @@ void wxMenuItem::Check( ); if (!bOk) { - wxLogLastError("EnableMenuItem"); + wxLogLastError("CheckMenuItem"); } wxMenuItemBase::Check(bCheck); } // end of wxMenuItem::Check @@ -233,11 +265,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 +313,7 @@ void wxMenuItem::SetText( #endif //owner drawn { uFlagsOld |= MIS_TEXT; - pData = (BYTE*)rText.c_str(); + pData = (BYTE*)Text.c_str(); } //