]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/menuitem.mm
Add the possibility to disable invisible wxDataViewCtrl items.
[wxWidgets.git] / src / osx / cocoa / menuitem.mm
index 87132b46000e6d5d7f5b4816f504ccf88785a6de..c253f75672c9d77b55d47cfe79e85b37bd46491f 100644 (file)
 
 #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());
@@ -78,7 +71,7 @@ void wxMacCocoaMenuItemSetAccelerator( NSMenuItem* menuItem, wxAcceleratorEntry*
     int key = entry->GetKeyCode() ;
     if ( key )
     {
-        if (entry->GetFlags() & wxACCEL_CTRL);
+        if (entry->GetFlags() & wxACCEL_CTRL)
             modifiers |= NSCommandKeyMask;
 
         if (entry->GetFlags() & wxACCEL_ALT)
@@ -178,45 +171,53 @@ void wxMacCocoaMenuItemSetAccelerator( NSMenuItem* menuItem, wxAcceleratorEntry*
     }
 }
 
-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 :
@@ -225,20 +226,46 @@ 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];
@@ -266,9 +293,5 @@ wxMenuItemImpl* wxMenuItemImpl::Create( wxMenuItem* peer, wxMenu *pParentMenu,
         item = temp;
     }
     c = new wxMenuItemCocoaImpl( peer, item );
-    if ( kind != wxITEM_SEPARATOR )
-    {
-        [(wxNSMenuItem*)item setImplementation:c];
-    }
     return c;
 }