예제 #1
0
        public void FindShortcutEntries(List <KeyCombination> combinationSequence, IContextManager contextManager, List <ShortcutEntry> outputShortcuts)
        {
            outputShortcuts.Clear();
            List <ShortcutEntry> entries = GetShortcutEntriesForPrimaryKey(combinationSequence);

            if (entries == null)
            {
                return;
            }

            foreach (var entry in entries)
            {
                if (entry.StartsWith(combinationSequence) && ShortcutEntrySatisfiesContextManager(contextManager, entry) &&
                    entry.context != typeof(ContextManager.GlobalContext))
                {
                    outputShortcuts.Add(entry);
                }
            }

            if (outputShortcuts.Count == 0)
            {
                foreach (var entry in entries)
                {
                    if (entry.StartsWith(combinationSequence) && ShortcutEntrySatisfiesContextManager(contextManager, entry) &&
                        entry.context == typeof(ContextManager.GlobalContext))
                    {
                        outputShortcuts.Add(entry);
                    }
                }
            }

            bool tagMatch = false;

            foreach (var entry in outputShortcuts)
            {
                tagMatch |= contextManager.HasTag(entry.tag);
            }

            if (tagMatch)
            {
                for (int i = outputShortcuts.Count - 1; i >= 0; i--)
                {
                    if (contextManager.HasTag(outputShortcuts[i].tag))
                    {
                        continue;
                    }
                    outputShortcuts.RemoveAt(i);
                }
            }
            else
            {
                for (int i = outputShortcuts.Count - 1; i >= 0; i--)
                {
                    if (outputShortcuts[i].tag == null)
                    {
                        continue;
                    }
                    outputShortcuts.RemoveAt(i);
                }
            }
        }