+wxMenu *wxMenuBar::Remove(size_t pos)
+{
+ wxMenu *menu = wxMenuBarBase::Remove(pos);
+ if ( !menu )
+ return NULL;
+
+ if ( IsAttached() )
+ {
+ if (s_macInstalledMenuBar == this)
+ {
+ ::DeleteMenu( menu->MacGetMenuId() /* m_menus[pos]->MacGetMenuId() */ ) ;
+ }
+
+ menu->Detach();
+
+#if wxUSE_ACCEL
+ if ( menu->HasAccels() )
+ {
+ // need to rebuild accell table
+ RebuildAccelTable();
+ }
+#endif // wxUSE_ACCEL
+
+ Refresh();
+ }
+
+ m_titles.Remove(pos);
+
+ return menu;
+}
+
+bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
+{
+ WXHMENU submenu = menu ? menu->GetHMenu() : 0;
+ wxCHECK_MSG( submenu, FALSE, wxT("can't append invalid menu to menubar") );
+
+ if ( !wxMenuBarBase::Append(menu, title) )
+ return FALSE;
+
+ menu->Attach(this);
+
+ m_titles.Add(title);
+
+ if ( IsAttached() )
+ {
+ if (s_macInstalledMenuBar == this)
+ {
+ ::InsertMenu( menu->GetHMenu() , 0 ) ;
+ }
+
+#if wxUSE_ACCEL
+ if ( menu->HasAccels() )
+ {
+ // need to rebuild accell table
+ RebuildAccelTable();
+ }
+#endif // wxUSE_ACCEL
+
+ Refresh();
+ }
+
+ return TRUE;
+}
+
+// ---------------------------------------------------------------------------
+// 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 ( menuString == title )
+ return 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 = m_menus[i]->FindItem(id, itemMenu);
+ }
+
+ return item;
+}
+
+