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