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
|
#endif
|
||||||
|
|
||||||
// the (popup) menu title has this special id
|
// the (popup) menu title has this special id
|
||||||
static const int idMenuTitle = -2;
|
static const int idMenuTitle = -3;
|
||||||
static MenuItemIndex firstUserHelpMenuItem = 0 ;
|
static MenuItemIndex firstUserHelpMenuItem = 0 ;
|
||||||
|
|
||||||
const short kwxMacMenuBarResource = 1 ;
|
const short kwxMacMenuBarResource = 1 ;
|
||||||
const short kwxMacAppleMenuId = 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
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -77,6 +107,8 @@ void wxMenu::Init()
|
|||||||
wxLogLastError(wxT("UMANewMenu failed"));
|
wxLogLastError(wxT("UMANewMenu failed"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxAssociateMenuWithMacMenu( (MenuRef)m_hMenu , this ) ;
|
||||||
|
|
||||||
// if we have a title, insert it in the beginning of the menu
|
// if we have a title, insert it in the beginning of the menu
|
||||||
if ( !!m_title )
|
if ( !!m_title )
|
||||||
{
|
{
|
||||||
@@ -87,6 +119,7 @@ void wxMenu::Init()
|
|||||||
|
|
||||||
wxMenu::~wxMenu()
|
wxMenu::~wxMenu()
|
||||||
{
|
{
|
||||||
|
wxRemoveMacMenuAssociation( this ) ;
|
||||||
if (MAC_WXHMENU(m_hMenu))
|
if (MAC_WXHMENU(m_hMenu))
|
||||||
::DisposeMenu(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() ) ;
|
SetMenuItemCommandID( MAC_WXHMENU(m_hMenu) , pos , pItem->GetId() ) ;
|
||||||
|
SetMenuItemRefCon( MAC_WXHMENU(m_hMenu) , pos , (UInt32) pItem ) ;
|
||||||
pItem->UpdateItemText() ;
|
pItem->UpdateItemText() ;
|
||||||
pItem->UpdateItemBitmap() ;
|
pItem->UpdateItemBitmap() ;
|
||||||
pItem->UpdateItemStatus() ;
|
pItem->UpdateItemStatus() ;
|
||||||
@@ -582,6 +616,7 @@ void wxMenuBar::MacInstallMenuBar()
|
|||||||
UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetText() , wxFont::GetDefaultEncoding() );
|
UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetText() , wxFont::GetDefaultEncoding() );
|
||||||
UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 , true );
|
UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 , true );
|
||||||
SetMenuItemCommandID( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetId() ) ;
|
SetMenuItemCommandID( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetId() ) ;
|
||||||
|
SetMenuItemRefCon(GetMenuHandle( kwxMacAppleMenuId ) , 1 , (UInt32)item ) ;
|
||||||
UMASetMenuItemShortcut( GetMenuHandle( kwxMacAppleMenuId ) , 1 , entry ) ;
|
UMASetMenuItemShortcut( GetMenuHandle( kwxMacAppleMenuId ) , 1 , entry ) ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -590,6 +625,7 @@ void wxMenuBar::MacInstallMenuBar()
|
|||||||
{
|
{
|
||||||
UMAAppendMenuItem(mh, item->GetText() , wxFont::GetDefaultEncoding(), entry);
|
UMAAppendMenuItem(mh, item->GetText() , wxFont::GetDefaultEncoding(), entry);
|
||||||
SetMenuItemCommandID( mh , CountMenuItems(mh) , item->GetId() ) ;
|
SetMenuItemCommandID( mh , CountMenuItems(mh) , item->GetId() ) ;
|
||||||
|
SetMenuItemRefCon( mh , CountMenuItems(mh) , (UInt32)item ) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user