X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..dd44c130144ad153bf67121a94b23a615db409f5:/src/osx/menuitem_osx.cpp diff --git a/src/osx/menuitem_osx.cpp b/src/osx/menuitem_osx.cpp index 657e3d2447..34a9996173 100644 --- a/src/osx/menuitem_osx.cpp +++ b/src/osx/menuitem_osx.cpp @@ -4,7 +4,6 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: menuitem.cpp 54129 2008-06-11 19:30:52Z SC $ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -29,8 +28,6 @@ wxMenuItemImpl::~wxMenuItemImpl() { } -IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject) - wxMenuItem::wxMenuItem(wxMenu *pParentMenu, int id, const wxString& t, @@ -43,19 +40,20 @@ wxMenuItem::wxMenuItem(wxMenu *pParentMenu, // In other languages there is no difference in naming the Exit/Quit menu item between MacOS and Windows guidelines // therefore these item must not be translated - if ( wxStripMenuCodes(m_text).Upper() == wxT("EXIT") ) - m_text = wxT("Quit\tCtrl+Q") ; + if (pParentMenu != NULL && !pParentMenu->GetNoEventsMode()) + if ( wxStripMenuCodes(m_text).Upper() == wxT("EXIT") ) + m_text = wxT("Quit\tCtrl+Q") ; m_radioGroup.start = -1; m_isRadioGroupStart = false; - - wxString text = wxStripMenuCodes(m_text); + + wxString text = wxStripMenuCodes(m_text, (pParentMenu != NULL && pParentMenu->GetNoEventsMode()) ? wxStrip_Accel : wxStrip_All); if (text.IsEmpty() && !IsSeparator()) { wxASSERT_MSG(wxIsStockID(GetId()), wxT("A non-stock menu item with an empty label?")); text = wxGetStockLabel(GetId(), wxSTOCK_WITH_ACCELERATOR|wxSTOCK_WITH_MNEMONIC); } - + wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( m_text ) ; // use accessors for ID and Kind because they might have been changed in the base constructor m_peer = wxMenuItemImpl::Create( this, pParentMenu, GetId(), text, entry, strHelp, GetKind(), pSubMenu ); @@ -83,7 +81,7 @@ void wxMenuItem::Enable(bool bDoEnable) // eg. BeginAppModalStateForWindow() will disable menus and ignore this change // which in turn causes m_isEnabled to become out of sync with real menuitem state #if wxOSX_USE_CARBON - && !(m_parentMenu && !IsMenuItemEnabled(MAC_WXHMENU(m_parentMenu->GetHMenu()), 0)) + && !(m_parentMenu && !IsMenuItemEnabled(MAC_WXHMENU(m_parentMenu->GetHMenu()), 0)) #endif ) // always update builtin menuitems @@ -176,10 +174,10 @@ void wxMenuItem::UpdateItemBitmap() { if ( !m_parentMenu ) return; - - if ( m_bitmap.Ok() ) + + if ( m_bitmap.IsOk() ) { - m_peer->SetBitmap( m_bitmap ); + GetPeer()->SetBitmap( m_bitmap ); } } @@ -190,13 +188,13 @@ void wxMenuItem::UpdateItemStatus() if ( IsSeparator() ) return ; - + if ( IsCheckable() && IsChecked() ) - m_peer->Check( true ); + GetPeer()->Check( true ); else - m_peer->Check( false ); - - m_peer->Enable( IsEnabled() ); + GetPeer()->Check( false ); + + GetPeer()->Enable( IsEnabled() ); } void wxMenuItem::UpdateItemText() @@ -204,24 +202,24 @@ void wxMenuItem::UpdateItemText() if ( !m_parentMenu ) return ; - wxString text = wxStripMenuCodes(m_text); + wxString text = wxStripMenuCodes(m_text, m_parentMenu != NULL && m_parentMenu->GetNoEventsMode() ? wxStrip_Accel : wxStrip_All); if (text.IsEmpty() && !IsSeparator()) { wxASSERT_MSG(wxIsStockID(GetId()), wxT("A non-stock menu item with an empty label?")); text = wxGetStockLabel(GetId(), wxSTOCK_WITH_ACCELERATOR|wxSTOCK_WITH_MNEMONIC); } - + wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( m_text ) ; - m_peer->SetLabel( text, entry ); + GetPeer()->SetLabel( text, entry ); delete entry ; } // radio group stuff // ----------------- -void wxMenuItem::SetAsRadioGroupStart() +void wxMenuItem::SetAsRadioGroupStart(bool start) { - m_isRadioGroupStart = true; + m_isRadioGroupStart = start; } void wxMenuItem::SetRadioGroupStart(int start) @@ -240,6 +238,27 @@ void wxMenuItem::SetRadioGroupEnd(int end) m_radioGroup.end = end; } +bool wxMenuItem::IsRadioGroupStart() const +{ + return m_isRadioGroupStart; +} + +int wxMenuItem::GetRadioGroupStart() const +{ + wxASSERT_MSG( !m_isRadioGroupStart, + wxS("shouldn't be called for the first radio item") ); + + return m_radioGroup.start; +} + +int wxMenuItem::GetRadioGroupEnd() const +{ + wxASSERT_MSG( m_isRadioGroupStart, + wxS("shouldn't be called for the first radio item") ); + + return m_radioGroup.end; +} + // ---------------------------------------------------------------------------- // wxMenuItemBase // ----------------------------------------------------------------------------