void SelectLastItem() { if (menuItems.Count > 0) { ((ActionMenuItem)menuItems [menuItems.Count - 1]).Select(); } else if (parentMenu.Widget is ActionMenuBar) { ActionMenuBar bar = (ActionMenuBar)parentMenu.Widget; bar.Select(parentNode); } else if (parentMenu.Widget is ActionMenu) { ActionMenu parentAM = (ActionMenu)parentMenu.Widget; parentAM.Select(parentNode); } }
void ProcessKey(ActionMenuItem item, Gdk.Key key, Gdk.ModifierType modifier) { int pos = menuItems.IndexOf(item); switch (key) { case Gdk.Key.Up: if (pos > 0) { ((ActionMenuItem)menuItems[pos - 1]).Select(); } else if (parentMenu.Widget is ActionMenuBar) { ActionMenuBar bar = (ActionMenuBar)parentMenu.Widget; bar.Select(parentNode); } break; case Gdk.Key.Down: if (pos < menuItems.Count - 1) { ((ActionMenuItem)menuItems[pos + 1]).Select(); } else if (pos == menuItems.Count - 1) { InsertAction(menuItems.Count); } break; case Gdk.Key.Right: if ((modifier & Gdk.ModifierType.ControlMask) != 0 && item.Node.Type == Gtk.UIManagerItemType.Menuitem) { // Create a submenu using (item.Node.Action.UndoManager.AtomicChange) { item.Node.Type = Gtk.UIManagerItemType.Menu; } item.Node.Action.NotifyChanged(); } if (item.HasSubmenu) { item.ShowSubmenu(); if (openSubmenu != null) { openSubmenu.Select(null); } } else if (parentNode != null) { ActionMenuBar parentMB = parentMenu.Widget as ActionMenuBar; if (parentMB != null) { int i = parentNode.ParentNode.Children.IndexOf(parentNode); if (i < parentNode.ParentNode.Children.Count - 1) { parentMB.DropMenu(parentNode.ParentNode.Children [i + 1]); } } } break; case Gdk.Key.Left: if ((modifier & Gdk.ModifierType.ControlMask) != 0 && item.Node.Type == Gtk.UIManagerItemType.Menu) { // Remove the submenu OpenSubmenu = null; using (item.Node.Action.UndoManager.AtomicChange) { item.Node.Type = Gtk.UIManagerItemType.Menuitem; item.Node.Children.Clear(); } item.Node.Action.NotifyChanged(); break; } if (parentNode != null) { ActionMenu parentAM = parentMenu.Widget as ActionMenu; if (parentAM != null) { parentAM.Select(parentNode); } ActionMenuBar parentMB = parentMenu.Widget as ActionMenuBar; if (parentMB != null) { int i = parentNode.ParentNode.Children.IndexOf(parentNode); if (i > 0) { parentMB.DropMenu(parentNode.ParentNode.Children [i - 1]); } } } break; case Gdk.Key.Return: item.EditingDone += OnEditingDone; item.StartEditing(); break; case Gdk.Key.Insert: if ((modifier & Gdk.ModifierType.ControlMask) != 0) { InsertActionAt(item, true, true); } else { InsertActionAt(item, false, false); } break; case Gdk.Key.Delete: DeleteAction(item); break; } }