wxWidgets/src/cocoa/NSMenu.mm
Dimitri Schoolwerth 80fdcdb90e No changes, synchronised source names that appear commented at the top of files with the actual path to the files.
Fixed commented names (path, filename, and extension) of files in include/ and src/. Prepended the names in src/ with "src/" everywhere, while starting those in include/wx/ with "wx/".

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67254 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-20 00:14:35 +00:00

138 lines
5.9 KiB
Plaintext

/////////////////////////////////////////////////////////////////////////////
// Name: src/cocoa/NSMenu.mm
// Purpose: wxCocoaNSMenu implementation
// Author: David Elliott
// Modified by:
// Created: 2002/12/09
// RCS-ID: $Id$
// Copyright: (c) 2002 David Elliott
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#if wxUSE_MENUS
#ifndef WX_PRECOMP
#include "wx/log.h"
#endif // WX_PRECOMP
#include "wx/cocoa/ObjcRef.h"
#include "wx/cocoa/NSMenu.h"
#import <Foundation/NSNotification.h>
#include "wx/cocoa/objc/NSMenu.h"
// ============================================================================
// @class WXNSMenu
// ============================================================================
@implementation WXNSMenu : NSMenu
- (void)dealloc
{
wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa(self);
if(menu)
menu->Cocoa_dealloc();
[super dealloc];
}
@end // WXNSMenu
WX_IMPLEMENT_GET_OBJC_CLASS(WXNSMenu,NSMenu)
// ============================================================================
// @class wxNSMenuNotificationObserver
// ============================================================================
@interface wxNSMenuNotificationObserver : NSObject
{
}
- (void)menuDidAddItem: (NSNotification *)notification;
- (void)menuDidChangeItem: (NSNotification *)notification;
- (void)menuDidRemoveItem: (NSNotification *)notification;
- (void)menuDidSendAction: (NSNotification *)notification;
- (void)menuWillSendAction: (NSNotification *)notification;
@end // interface wxNSMenuNotificationObserver
WX_DECLARE_GET_OBJC_CLASS(wxNSMenuNotificationObserver,NSObject)
@implementation wxNSMenuNotificationObserver : NSObject
- (void)menuDidAddItem: (NSNotification *)notification
{
wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]);
wxCHECK_RET(menu,wxT("menuDidAddItem received but no wxMenu exists"));
menu->CocoaNotification_menuDidAddItem(notification);
}
- (void)menuDidChangeItem: (NSNotification *)notification
{
wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]);
wxCHECK_RET(menu,wxT("menuDidChangeItem received but no wxMenu exists"));
menu->CocoaNotification_menuDidChangeItem(notification);
}
- (void)menuDidRemoveItem: (NSNotification *)notification
{
wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]);
wxCHECK_RET(menu,wxT("menuDidRemoveItem received but no wxMenu exists"));
menu->CocoaNotification_menuDidRemoveItem(notification);
}
- (void)menuDidSendAction: (NSNotification *)notification
{
wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]);
wxCHECK_RET(menu,wxT("menuDidSendAction received but no wxMenu exists"));
menu->CocoaNotification_menuDidSendAction(notification);
}
- (void)menuWillSendAction: (NSNotification *)notification
{
wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]);
wxCHECK_RET(menu,wxT("menuWillSendAction received but no wxMenu exists"));
menu->CocoaNotification_menuWillSendAction(notification);
}
@end // implementation wxNSMenuNotificationObserver
WX_IMPLEMENT_GET_OBJC_CLASS(wxNSMenuNotificationObserver,NSObject)
// ========================================================================
// wxCocoaNSMenu
// ========================================================================
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSMenu)
// New CF-retained observer (this should have been using wxObjcAutoRefFromAlloc to begin with)
static wxObjcAutoRefFromAlloc<wxNSMenuNotificationObserver*> s_cocoaNSMenuObserver([[WX_GET_OBJC_CLASS(wxNSMenuNotificationObserver) alloc] init]);
// For compatibility with old code
struct objc_object *wxCocoaNSMenu::sm_cocoaObserver = s_cocoaNSMenuObserver;
void wxCocoaNSMenu::AssociateNSMenu(WX_NSMenu cocoaNSMenu, unsigned int flags)
{
if(cocoaNSMenu)
{
sm_cocoaHash.insert(wxCocoaNSMenuHash::value_type(cocoaNSMenu,this));
if(flags&OBSERVE_DidAddItem)
[[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(menuDidAddItem:) name:NSMenuDidAddItemNotification object:cocoaNSMenu];
if(flags&OBSERVE_DidChangeItem)
[[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(menuDidChangeItem:) name:NSMenuDidChangeItemNotification object:cocoaNSMenu];
if(flags&OBSERVE_DidRemoveItem)
[[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(menuDidRemoveItem:) name:NSMenuDidRemoveItemNotification object:cocoaNSMenu];
if(flags&OBSERVE_DidSendAction)
[[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(menuDidSendAction:) name:NSMenuDidSendActionNotification object:cocoaNSMenu];
if(flags&OBSERVE_WillSendAction)
[[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(menuWillSendAction:) name:NSMenuWillSendActionNotification object:cocoaNSMenu];
}
}
void wxCocoaNSMenu::DisassociateNSMenu(WX_NSMenu cocoaNSMenu)
{
if(cocoaNSMenu)
{
sm_cocoaHash.erase(cocoaNSMenu);
[[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:NSMenuDidAddItemNotification object:cocoaNSMenu];
[[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:NSMenuDidChangeItemNotification object:cocoaNSMenu];
[[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:NSMenuDidRemoveItemNotification object:cocoaNSMenu];
[[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:NSMenuDidSendActionNotification object:cocoaNSMenu];
[[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:NSMenuWillSendActionNotification object:cocoaNSMenu];
}
}
#endif // wxUSE_MENUS