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:
Stefan Csomor
2004-05-27 14:47:50 +00:00
parent a9928e9d1a
commit de5914a150

View File

@@ -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 ) ;
}
}