#ifndef WX_PRECOMP
#include "wx/app.h"
+ #include "wx/log.h"
#include "wx/menu.h"
#endif // WX_PRECOMP
#include "wx/osx/private.h"
-@interface wxNSMenuItem : NSMenuItem
-{
- wxMenuItemImpl* impl;
-}
-
-- (void) setImplementation:(wxMenuItemImpl*) item;
-- (wxMenuItemImpl*) implementation;
-
-- (void) clickedAction: (id) sender;
-- (BOOL)validateMenuItem:(NSMenuItem *) menuItem;
-
-@end
-
@implementation wxNSMenuItem
- (id) init
- (void) clickedAction: (id) sender
{
+ wxUnusedVar(sender);
if ( impl )
{
- impl->GetWXPeer()->GetMenu()->HandleCommandProcess(impl->GetWXPeer());
+ wxMenuItem* menuitem = impl->GetWXPeer();
+ if ( menuitem->GetMenu()->HandleCommandProcess(menuitem) == false )
+ {
+ }
}
}
- (BOOL)validateMenuItem:(NSMenuItem *) menuItem
{
+ wxUnusedVar(menuItem);
if( impl )
{
impl->GetWXPeer()->GetMenu()->HandleCommandUpdateStatus(impl->GetWXPeer());
int key = entry->GetKeyCode() ;
if ( key )
{
- if (entry->GetFlags() & wxACCEL_CTRL);
+ if (entry->GetFlags() & wxACCEL_CTRL)
modifiers |= NSCommandKeyMask;
if (entry->GetFlags() & wxACCEL_ALT)
}
}
-class wxMenuItemCocoaImpl : public wxMenuItemImpl
+class wxMenuItemCocoaImpl : public wxMenuItemImpl
{
public :
wxMenuItemCocoaImpl( wxMenuItem* peer, NSMenuItem* item ) : wxMenuItemImpl(peer), m_osxMenuItem(item)
{
+ if ( ![m_osxMenuItem isSeparatorItem] )
+ [(wxNSMenuItem*)m_osxMenuItem setImplementation:this];
}
-
+
~wxMenuItemCocoaImpl();
-
- void SetBitmap( const wxBitmap& bitmap )
+
+ void SetBitmap( const wxBitmap& bitmap )
{
[m_osxMenuItem setImage:bitmap.GetNSImage()];
}
-
- void Enable( bool enable )
+
+ void Enable( bool enable )
{
[m_osxMenuItem setEnabled:enable];
}
-
- void Check( bool check )
+
+ void Check( bool check )
{
[m_osxMenuItem setState:( check ? NSOnState : NSOffState) ];
}
-
+
void Hide( bool hide )
{
- [m_osxMenuItem setHidden:hide ];
+ // NB: setHidden is new as of 10.5 so we should not call it below there
+ if ([m_osxMenuItem respondsToSelector:@selector(setHidden:)])
+ [m_osxMenuItem setHidden:hide ];
+ else
+ wxLogDebug("wxMenuItemCocoaImpl::Hide not yet supported under OS X < 10.5");
}
-
- void SetLabel( const wxString& text, wxAcceleratorEntry *entry )
+
+ void SetLabel( const wxString& text, wxAcceleratorEntry *entry )
{
wxCFStringRef cfText(text);
[m_osxMenuItem setTitle:cfText.AsNSString()];
-
+
if ( entry )
wxMacCocoaMenuItemSetAccelerator( m_osxMenuItem, entry );
}
+ bool DoDefault();
+
void * GetHMenuItem() { return m_osxMenuItem; }
protected :
wxMenuItemCocoaImpl::~wxMenuItemCocoaImpl()
{
+ if ( ![m_osxMenuItem isSeparatorItem] )
+ [(wxNSMenuItem*)m_osxMenuItem setImplementation:nil];
+ [m_osxMenuItem release];
}
+bool wxMenuItemCocoaImpl::DoDefault()
+{
+ bool handled=false;
+ int menuid = m_peer->GetId();
+
+ NSApplication *theNSApplication = [NSApplication sharedApplication];
+ if (menuid == wxID_OSX_HIDE)
+ {
+ [theNSApplication hide:nil];
+ handled=true;
+ }
+ else if (menuid == wxID_OSX_HIDEOTHERS)
+ {
+ [theNSApplication hideOtherApplications:nil];
+ handled=true;
+ }
+ else if (menuid == wxID_OSX_SHOWALL)
+ {
+ [theNSApplication unhideAllApplications:nil];
+ handled=true;
+ }
+ return handled;
+}
wxMenuItemImpl* wxMenuItemImpl::Create( wxMenuItem* peer, wxMenu *pParentMenu,
- int id,
+ int WXUNUSED(id),
const wxString& text,
wxAcceleratorEntry *entry,
- const wxString& strHelp,
+ const wxString& WXUNUSED(strHelp),
wxItemKind kind,
wxMenu *pSubMenu )
{
wxMenuItemImpl* c = NULL;
NSMenuItem* item = nil;
-
+
if ( kind == wxITEM_SEPARATOR )
{
item = [[NSMenuItem separatorItem] retain];
item = temp;
}
c = new wxMenuItemCocoaImpl( peer, item );
- if ( kind != wxITEM_SEPARATOR )
- {
- [(wxNSMenuItem*)item setImplementation:c];
- }
return c;
}