+ EndRadioGroup();
+}
+
+#if wxUSE_ACCEL
+
+int wxMenu::FindAccel(int id) const
+{
+ size_t n, count = m_accels.GetCount();
+ for ( n = 0; n < count; n++ )
+ {
+ if ( m_accels[n]->m_command == id )
+ return n;
+ }
+
+ return wxNOT_FOUND;
+}
+
+void wxMenu::UpdateAccel(wxMenuItem *item)
+{
+ if ( item->IsSubMenu() )
+ {
+ wxMenu *submenu = item->GetSubMenu();
+ wxMenuItemList::Node *node = submenu->GetMenuItems().GetFirst();
+ while ( node )
+ {
+ UpdateAccel(node->GetData());
+
+ node = node->GetNext();
+ }
+ }
+ else if ( !item->IsSeparator() )
+ {
+ // find the (new) accel for this item
+ wxAcceleratorEntry *accel = wxGetAccelFromString(item->GetText());
+ if ( accel )
+ accel->m_command = item->GetId();
+
+ // find the old one
+ int n = FindAccel(item->GetId());
+ if ( n == wxNOT_FOUND )
+ {
+ // no old, add new if any
+ if ( accel )
+ m_accels.Add(accel);
+ else
+ return; // skipping RebuildAccelTable() below
+ }
+ else
+ {
+ // replace old with new or just remove the old one if no new
+ delete m_accels[n];
+ if ( accel )
+ m_accels[n] = accel;
+ else
+ m_accels.RemoveAt(n);
+ }
+
+ if ( IsAttached() )
+ {
+ m_menuBar->RebuildAccelTable();
+ }
+ }
+ //else: it is a separator, they can't have accels, nothing to do
+}
+
+#endif // wxUSE_ACCEL
+
+// append a new item or submenu to the menu
+bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
+{
+#if wxUSE_ACCEL
+ UpdateAccel(pItem);
+#endif // wxUSE_ACCEL