ContextMenu CreateMenu(bool importantOnly)
        {
            ContextMenu menu = new ContextMenu();

            bool itemsAdded     = false;
            bool needsSeparator = false;

            foreach (StringTagDescription[] tags in TagModel.GetTagsGrouped())
            {
                itemsAdded = false;


                foreach (StringTagDescription tag in tags)
                {
                    if (tag.Important != importantOnly)
                    {
                        continue;
                    }

                    if (itemsAdded && needsSeparator)
                    {
                        var sep = new SeparatorContextMenuItem();
                        needsSeparator = false;
                        menu.Add(sep);
                    }

                    var    item      = new ContextMenuItem(tag.Description);
                    string tagString = tag.Name;
                    item.Clicked += delegate {
                        InsertTag(tagString);
                    };
                    menu.Add(item);
                    itemsAdded = true;
                }
                needsSeparator = true;
            }

            if (importantOnly)
            {
                var subMenu = CreateMenu(false);
                if (subMenu.Items.Count > 0)
                {
                    var sep = new SeparatorContextMenuItem();
                    menu.Add(sep);

                    var item = new ContextMenuItem(GettextCatalog.GetString("More"));
                    item.SubMenu = subMenu;
                    menu.Add(item);
                }
            }

            return(menu);
        }
Example #2
0
        void UpdateGlobalWarningLabel()
        {
            KeyBindingConflict[] conflicts = currentBindings.CheckKeyBindingConflicts(IdeApp.CommandService.GetCommands());
            if (conflicts.Length == 0)
            {
                globalWarningBox.Hide();
                return;
            }
            globalWarningBox.Show();

            conflicButton.ContextMenuRequested = delegate {
                ContextMenu menu  = new ContextMenu();
                bool        first = true;

                foreach (KeyBindingConflict conf in conflicts)
                {
                    if (first == false)
                    {
                        ContextMenuItem item = new SeparatorContextMenuItem();
                        menu.Items.Add(item);
                    }

                    foreach (Command cmd in conf.Commands)
                    {
                        string          txt      = currentBindings.GetBinding(cmd) + " - " + cmd.Text;
                        ContextMenuItem item     = new ContextMenuItem(txt);
                        Command         localCmd = cmd;

                        item.Clicked += (sender, e) => SelectCommand(localCmd);

                        menu.Items.Add(item);
                        first = false;
                    }
                }

                return(menu);
            };
        }
Example #3
0
        void UpdateConflictsWarning()
        {
            duplicates = new Dictionary <string, HashSet <Command> > ();
            foreach (var conflict in currentBindings.CheckKeyBindingConflicts(IdeApp.CommandService.GetCommands()))
            {
                HashSet <Command> cmds = null;
                if (!duplicates.TryGetValue(conflict.Key, out cmds))
                {
                    duplicates [conflict.Key] = cmds = new HashSet <Command> ();
                }
                foreach (var cmd in conflict.Commands)
                {
                    cmds.Add(cmd);
                }
            }
            conflicts = new Dictionary <string, HashSet <Command> > ();

            foreach (var dup in duplicates)
            {
                foreach (var cmd in dup.Value)
                {
                    HashSet <Command> cmdDuplicates;
                    if (IdeApp.CommandService.Conflicts.TryGetValue(cmd, out cmdDuplicates))
                    {
                        cmdDuplicates = new HashSet <Command> (cmdDuplicates.Intersect(dup.Value));
                        if (cmdDuplicates.Count > 0)
                        {
                            HashSet <Command> cmdConflicts;
                            if (!conflicts.TryGetValue(dup.Key, out cmdConflicts))
                            {
                                conflicts [dup.Key] = cmdConflicts = new HashSet <Command> ();
                            }
                            conflicts [dup.Key].UnionWith(cmdDuplicates);
                        }
                    }
                }
            }

            if (conflicts.Count == 0)
            {
                globalWarningBox.Hide();
                return;
            }

            globalWarningBox.Show();

            conflicButton.ContextMenuRequested = delegate {
                ContextMenu menu  = new ContextMenu();
                bool        first = true;

                foreach (var conf in conflicts)
                {
                    if (first == false)
                    {
                        ContextMenuItem item = new SeparatorContextMenuItem();
                        menu.Items.Add(item);
                    }

                    foreach (Command cmd in conf.Value.OrderBy(cmd => cmd.DisplayName))
                    {
                        string          txt      = conf.Key + " \u2013 " + cmd.DisplayName;
                        ContextMenuItem item     = new ContextMenuItem(txt);
                        Command         localCmd = cmd;

                        item.Clicked += (sender, e) => SelectCommand(localCmd);

                        menu.Items.Add(item);
                        first = false;
                    }
                }

                return(menu);
            };
        }