having the refcon of a menu item to bear the pointer to the wxMenuItem, and have an map of menuref->wxMenu*
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27461 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -41,12 +41,42 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler)
|
||||
#endif
|
||||
|
||||
// the (popup) menu title has this special id
|
||||
static const int idMenuTitle = -2;
|
||||
static const int idMenuTitle = -3;
|
||||
static MenuItemIndex firstUserHelpMenuItem = 0 ;
|
||||
|
||||
const short kwxMacMenuBarResource = 1 ;
|
||||
const short kwxMacAppleMenuId = 1 ;
|
||||
|
||||
|
||||
// Find an item given the Macintosh Menu Reference
|
||||
|
||||
wxList wxWinMacMenuList(wxKEY_INTEGER);
|
||||
wxMenu *wxFindMenuFromMacMenu(MenuRef inMenuRef)
|
||||
{
|
||||
wxNode *node = wxWinMacMenuList.Find((long)inMenuRef);
|
||||
if (!node)
|
||||
return NULL;
|
||||
return (wxMenu *)node->GetData();
|
||||
}
|
||||
|
||||
void wxAssociateMenuWithMacMenu(MenuRef inMenuRef, wxMenu *menu) ;
|
||||
void wxAssociateMenuWithMacMenu(MenuRef inMenuRef, wxMenu *menu)
|
||||
{
|
||||
// adding NULL MenuRef is (first) surely a result of an error and
|
||||
// (secondly) breaks menu command processing
|
||||
wxCHECK_RET( inMenuRef != (MenuRef) NULL, wxT("attempt to add a NULL MenuRef to menu list") );
|
||||
|
||||
if ( !wxWinMacMenuList.Find((long)inMenuRef) )
|
||||
wxWinMacMenuList.Append((long)inMenuRef, menu);
|
||||
}
|
||||
|
||||
void wxRemoveMacMenuAssociation(wxMenu *menu) ;
|
||||
void wxRemoveMacMenuAssociation(wxMenu *menu)
|
||||
{
|
||||
wxWinMacMenuList.DeleteObject(menu);
|
||||
}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
@@ -77,6 +107,8 @@ void wxMenu::Init()
|
||||
wxLogLastError(wxT("UMANewMenu failed"));
|
||||
}
|
||||
|
||||
wxAssociateMenuWithMacMenu( (MenuRef)m_hMenu , this ) ;
|
||||
|
||||
// if we have a title, insert it in the beginning of the menu
|
||||
if ( !!m_title )
|
||||
{
|
||||
@@ -87,6 +119,7 @@ void wxMenu::Init()
|
||||
|
||||
wxMenu::~wxMenu()
|
||||
{
|
||||
wxRemoveMacMenuAssociation( this ) ;
|
||||
if (MAC_WXHMENU(m_hMenu))
|
||||
::DisposeMenu(MAC_WXHMENU(m_hMenu));
|
||||
}
|
||||
@@ -153,6 +186,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
|
||||
}
|
||||
|
||||
SetMenuItemCommandID( MAC_WXHMENU(m_hMenu) , pos , pItem->GetId() ) ;
|
||||
SetMenuItemRefCon( MAC_WXHMENU(m_hMenu) , pos , (UInt32) pItem ) ;
|
||||
pItem->UpdateItemText() ;
|
||||
pItem->UpdateItemBitmap() ;
|
||||
pItem->UpdateItemStatus() ;
|
||||
@@ -582,6 +616,7 @@ void wxMenuBar::MacInstallMenuBar()
|
||||
UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetText() , wxFont::GetDefaultEncoding() );
|
||||
UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 , true );
|
||||
SetMenuItemCommandID( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetId() ) ;
|
||||
SetMenuItemRefCon(GetMenuHandle( kwxMacAppleMenuId ) , 1 , (UInt32)item ) ;
|
||||
UMASetMenuItemShortcut( GetMenuHandle( kwxMacAppleMenuId ) , 1 , entry ) ;
|
||||
}
|
||||
else
|
||||
@@ -590,6 +625,7 @@ void wxMenuBar::MacInstallMenuBar()
|
||||
{
|
||||
UMAAppendMenuItem(mh, item->GetText() , wxFont::GetDefaultEncoding(), entry);
|
||||
SetMenuItemCommandID( mh , CountMenuItems(mh) , item->GetId() ) ;
|
||||
SetMenuItemRefCon( mh , CountMenuItems(mh) , (UInt32)item ) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user