Пример #1
0
 private bool IsParentContainerKeeped(ToolStripItemCollection items,
                                      MenuActionGroup lastGroup, MenuActionGroup group)
 {
     return((items == _menu.Items) ||
            (group.SubmenuName != null) && (lastGroup != null) &&
            (group.SubmenuName.Equals(lastGroup.SubmenuName)));
 }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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;
                    }
                }
            }
        }
Пример #4
0
 private bool IsSeparatorSuppressed(MenuActionGroup group1, MenuActionGroup group2)
 {
     return(_suppressedSeparators.Contains(group1.Name + ":" + group2.Name));
 }
Пример #5
0
        /**
         * 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);
        }
Пример #6
0
 private bool IsSeparatorSuppressedBetweenGroups(MenuActionGroup lastGroup, MenuActionGroup group)
 {
     return((lastGroup == null) || IsSeparatorSuppressed(group, lastGroup));
 }