private bool IsParentContainerKeeped(ToolStripItemCollection items, MenuActionGroup lastGroup, MenuActionGroup group) { return((items == _menu.Items) || (group.SubmenuName != null) && (lastGroup != null) && (group.SubmenuName.Equals(lastGroup.SubmenuName))); }
/// <summary> /// Registers an action in an action group of the menu. /// </summary> public void RegisterAction(IAction action, string groupId, ListAnchor anchor, string text, Image iconRes, string resourceType, IActionStateFilter[] filters) { MenuActionGroup group = (MenuActionGroup)_actionGroups.FindByKey(groupId); if (group == null) { throw new ArgumentException("ContextMenuManager -- Invalid action group name " + groupId, "groupId"); } _mnemonicsAssigned = false; group.Add(new MenuAction(resourceType, text, iconRes, action, filters), anchor); }
private void FillMenuImpl(IActionContext context) { bool haveDefaultAction = false; HashSet usedShortcuts = new HashSet(); MenuActionGroup lastGroup = null; IResourceList selection = context.SelectedResources; ToolStripItemCollection items = _menu.Items; foreach (MenuActionGroup group in _actionGroups) { if (!IsSeparatorSuppressedBetweenGroups(lastGroup, group) && IsParentContainerKeeped(items, lastGroup, group)) { items.Add(new ToolStripSeparator()); } if (!IsParentContainerKeeped(items, lastGroup, group)) { items = _menu.Items; } if (group.SubmenuName != null) { if (lastGroup == null || group.SubmenuName != lastGroup.SubmenuName) { ToolStripMenuItem subMenu = new ToolStripMenuItem(group.SubmenuName); items.Add(subMenu); items = subMenu.DropDownItems; } } lastGroup = group; foreach (MenuAction action in group.Actions) { ToolStripMenuItem item = AddActionToMenu(action, items, context, usedShortcuts); if (!haveDefaultAction && selection.Count == 1 && Core.ActionManager.GetDoubleClickAction(selection[0]) == action.Action) { item.Font = new Font(item.Font, FontStyle.Bold); haveDefaultAction = true; } } } }
private bool IsSeparatorSuppressed(MenuActionGroup group1, MenuActionGroup group2) { return(_suppressedSeparators.Contains(group1.Name + ":" + group2.Name)); }
/** * Fills the menu with actions, depending on the specified context. */ public void FillMenu(IActionContext context) { if (_persistentMnemonics) { if (!_mnemonicsAssigned) { AssignMnemonics(); _mnemonicsAssigned = true; } } else { ResetUsedMnemonics(); } _lastContext = context; MenuActionGroup lastGroup = null; MenuItem curSubmenu = null; Menu.MenuItemCollection curMenuItems = _menuItems; _menuItems.Clear(); _itemToActionMap.Clear(); HashSet usedShortcuts = new HashSet(); int submenuVisibleActions = 0, submenuEnabledActions = 0; bool haveDefaultAction = false; string[] resTypes = context.SelectedResources.GetAllTypes(); foreach (MenuActionGroup group in _actionGroups) { if (lastGroup != null && !IsSeparatorSuppressed(group, lastGroup)) { _menuItems.Add("-"); } if (group.SubmenuName != null) { if (lastGroup == null || group.SubmenuName != lastGroup.SubmenuName) { curSubmenu = _menuItems.Add(group.SubmenuName); curMenuItems = curSubmenu.MenuItems; submenuVisibleActions = 0; submenuEnabledActions = 0; } else { curMenuItems.Add("-"); } } else { if (curSubmenu != null) { if (submenuVisibleActions == 0) { curSubmenu.Visible = false; } else if (submenuEnabledActions == 0) { curSubmenu.Enabled = false; } } curMenuItems = _menuItems; curSubmenu = null; } lastGroup = group; foreach (MenuAction action in group.Actions) { if (action.ResourceType != null) { if (resTypes.Length != 1 || resTypes [0] != action.ResourceType) { if (_disableUnmatchingTypeActions) { MenuItem stubItem = curMenuItems.Add(action.Name); stubItem.Enabled = false; submenuVisibleActions++; } continue; } } MenuItem item = AddActionToMenu(action, curMenuItems, context, usedShortcuts); if (!haveDefaultAction && context.SelectedResources.Count == 1 && Core.ActionManager.GetDoubleClickAction(context.SelectedResources [0]) == action.Action) { item.DefaultItem = true; haveDefaultAction = true; } if (item.Visible) { submenuVisibleActions++; } if (item.Enabled) { submenuEnabledActions++; } } } if (curSubmenu != null) { if (submenuVisibleActions == 0) { curSubmenu.Visible = false; } else if (submenuEnabledActions == 0) { curSubmenu.Enabled = false; } } UpdateSeparatorVisibility(_menuItems); }
private bool IsSeparatorSuppressedBetweenGroups(MenuActionGroup lastGroup, MenuActionGroup group) { return((lastGroup == null) || IsSeparatorSuppressed(group, lastGroup)); }