// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
-// RCS-ID: $Id: menu.cpp 54129 2008-06-11 19:30:52Z SC $
+// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
{
}
-IMPLEMENT_DYNAMIC_CLASS(wxMenu, wxEvtHandler)
-IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler)
-
// the (popup) menu title has this special id
static const int idMenuTitle = -3;
// Construct a menu with optional title (then use append)
-static
-wxMenu *
-_wxMenuAt(const wxMenuList &menuList, size_t pos)
-{
- wxMenuList::compatibility_iterator menuIter = menuList.GetFirst();
-
- while (pos-- > 0)
- menuIter = menuIter->GetNext();
-
- return menuIter->GetData() ;
-}
-
void wxMenu::Init()
{
m_doBreak = false;
processed = true ;
}
}
+
+ if(!processed && item)
+ {
+ processed = item->GetPeer()->DoDefault();
+ }
+
return processed;
}
m_appleMenu = new wxMenu();
m_appleMenu->SetAllowRearrange(false);
- m_appleMenu->Append( wxApp::s_macAboutMenuItemId, "About..." );
- m_appleMenu->AppendSeparator();
+
+ // Create standard items unless the application explicitly disabled this by
+ // setting the corresponding ids to wxID_NONE: although this is not
+ // recommended, sometimes these items really don't make sense.
+ if ( wxApp::s_macAboutMenuItemId != wxID_NONE )
+ {
+ wxString aboutLabel(_("About"));
+ if ( wxTheApp )
+ aboutLabel << ' ' << wxTheApp->GetAppDisplayName();
+ else
+ aboutLabel << "...";
+ m_appleMenu->Append( wxApp::s_macAboutMenuItemId, aboutLabel);
+ m_appleMenu->AppendSeparator();
+ }
+
#if !wxOSX_USE_CARBON
- m_appleMenu->Append( wxApp::s_macPreferencesMenuItemId, "Preferences..." );
+ if ( wxApp::s_macPreferencesMenuItemId != wxID_NONE )
+ {
+ m_appleMenu->Append( wxApp::s_macPreferencesMenuItemId,
+ _("Preferences...") + "\tCtrl+," );
+ m_appleMenu->AppendSeparator();
+ }
+
+ // standard menu items, handled in wxMenu::HandleCommandProcess(), see above:
+ wxString hideLabel(_("Hide"));
+ if ( wxTheApp )
+ hideLabel << ' ' << wxTheApp->GetAppDisplayName();
+ hideLabel << "\tCtrl+H";
+ m_appleMenu->Append( wxID_OSX_HIDE, hideLabel );
+ m_appleMenu->Append( wxID_OSX_HIDEOTHERS, _("Hide Others")+"\tAlt+Ctrl+H" );
+ m_appleMenu->Append( wxID_OSX_SHOWALL, _("Show All") );
m_appleMenu->AppendSeparator();
- m_appleMenu->Append( wxApp::s_macExitMenuItemId, "Quit\tCtrl+Q" );
-#endif
+
+ // Do always add "Quit" item unconditionally however, it can't be disabled.
+ wxString quitLabel(_("Quit"));
+ if ( wxTheApp )
+ quitLabel << ' ' << wxTheApp->GetAppDisplayName();
+ quitLabel << "\tCtrl+Q";
+ m_appleMenu->Append( wxApp::s_macExitMenuItemId, quitLabel );
+#endif // !wxOSX_USE_CARBON
m_rootMenu->AppendSubMenu(m_appleMenu, "\x14") ;
}
{
Init();
- m_titles.Alloc(count);
-
for ( size_t i = 0; i < count; i++ )
{
m_menus.Append(menus[i]);
- m_titles.Add(titles[i]);
menus[i]->Attach(this);
Append( menus[i], titles[i] );
return ;
m_rootMenu->GetPeer()->MakeRoot();
-
+
+ // hide items in the apple menu that don't exist in the wx menubar
+
+ int id = 0;
+ wxMenuItem* appleItem = NULL;
+ wxMenuItem* wxItem = NULL;
+
+ id = wxApp::s_macAboutMenuItemId;
+ appleItem = m_appleMenu->FindItem(id);
+ wxItem = FindItem(id);
+ if ( appleItem != NULL )
+ {
+ if ( wxItem == NULL )
+ appleItem->GetPeer()->Hide();
+ else
+ appleItem->SetItemLabel(wxItem->GetItemLabel());
+ }
+
+ id = wxApp::s_macPreferencesMenuItemId;
+ appleItem = m_appleMenu->FindItem(id);
+ wxItem = FindItem(id);
+ if ( appleItem != NULL )
+ {
+ if ( wxItem == NULL )
+ appleItem->GetPeer()->Hide();
+ else
+ appleItem->SetItemLabel(wxItem->GetItemLabel());
+ }
+
+
#if 0
MenuBarHandle menubar = NULL ;
UMASetMenuTitle( MAC_WXHMENU(menu->GetHMenu()) , m_titles[i], GetFont().GetEncoding() ) ;
menu->MacBeforeDisplay(false) ;
- ::InsertMenu(MAC_WXHMENU(_wxMenuAt(m_menus, i)->GetHMenu()), 0);
+ ::InsertMenu(MAC_WXHMENU(GetMenu(i)->GetHMenu()), 0);
}
}
{
wxCHECK_RET( pos < GetMenuCount(), wxT("invalid menu index") );
- m_titles[pos] = label;
-
- if ( !IsAttached() )
- return;
-
- _wxMenuAt(m_menus, pos)->SetTitle( label ) ;
+ GetMenu(pos)->SetTitle( label ) ;
}
wxString wxMenuBar::GetMenuLabel(size_t pos) const
wxCHECK_MSG( pos < GetMenuCount(), wxEmptyString,
wxT("invalid menu index in wxMenuBar::GetMenuLabel") );
- return m_titles[pos];
-}
-
-int wxMenuBar::FindMenu(const wxString& title)
-{
- wxString menuTitle = wxStripMenuCodes(title);
-
- size_t count = GetMenuCount();
- for ( size_t i = 0; i < count; i++ )
- {
- wxString title = wxStripMenuCodes(m_titles[i]);
- if ( menuTitle == title )
- return i;
- }
-
- return wxNOT_FOUND;
+ return GetMenu(pos)->GetTitle();
}
// ---------------------------------------------------------------------------
if ( !menuOld )
return NULL;
- m_titles[pos] = title;
-
wxMenuItem* item = m_rootMenu->FindItemByPosition(pos+firstMenuPos);
m_rootMenu->Remove(item);
m_rootMenu->Insert( pos+firstMenuPos, wxMenuItem::New( m_rootMenu, wxID_ANY, title, "", wxITEM_NORMAL, menu ) );
if ( !wxMenuBarBase::Insert(pos, menu, title) )
return false;
- m_titles.Insert(title, pos);
-
m_rootMenu->Insert( pos+firstMenuPos, wxMenuItem::New( m_rootMenu, wxID_ANY, title, "", wxITEM_NORMAL, menu ) );
return true;
wxMenuItem* item = m_rootMenu->FindItemByPosition(pos+firstMenuPos);
m_rootMenu->Remove(item);
- m_titles.RemoveAt(pos);
-
return menu;
}
if ( !wxMenuBarBase::Append(menu, title) )
return false;
- m_titles.Add(title);
-
m_rootMenu->AppendSubMenu(menu, title);
+ menu->SetTitle(title);
return true;
}
wxMenuBarBase::Attach( frame ) ;
}
-// ---------------------------------------------------------------------------
-// wxMenuBar searching for menu items
-// ---------------------------------------------------------------------------
-
-// Find the itemString in menuString, and return the item id or wxNOT_FOUND
-int wxMenuBar::FindMenuItem(const wxString& menuString,
- const wxString& itemString) const
-{
- wxString menuLabel = wxStripMenuCodes(menuString);
- size_t count = GetMenuCount();
- for ( size_t i = 0; i < count; i++ )
- {
- wxString title = wxStripMenuCodes(m_titles[i]);
- if ( menuLabel == title )
- return _wxMenuAt(m_menus, i)->FindItem(itemString);
- }
-
- return wxNOT_FOUND;
-}
-
-wxMenuItem *wxMenuBar::FindItem(int id, wxMenu **itemMenu) const
-{
- if ( itemMenu )
- *itemMenu = NULL;
-
- wxMenuItem *item = NULL;
- size_t count = GetMenuCount();
- for ( size_t i = 0; !item && (i < count); i++ )
- item = _wxMenuAt(m_menus, i)->FindItem(id, itemMenu);
-
- return item;
-}
-
-#endif
+#endif // wxUSE_MENUS