예제 #1
0
        /// <summary>
        /// When down key is pressed, selected element should move forward.
        /// When up key is pressed, selected element should move back.
        /// </summary>
        public void MoveSelection(Direction direction)
        {
            var oldItem = FilteredResults.FirstOrDefault(item => item.IsSelected);

            if (oldItem == null)
            {
                return;
            }

            int newItemIndex = FilteredResults.IndexOf(oldItem);

            if ((newItemIndex <= 0 && direction == Direction.Up) ||
                (newItemIndex >= FilteredResults.Count() - 1 && direction == Direction.Down))
            {
                return;
            }

            if (direction == Direction.Down)
            {
                newItemIndex++;
            }
            else
            {
                newItemIndex--;
            }

            oldItem.IsSelected = false;
            var newItem = FilteredResults.ElementAt(newItemIndex);

            newItem.IsSelected = true;
        }
예제 #2
0
        private void ShowResults()
        {
            SearchResultsList.SuspendLayout();
            SearchResultsList.Items.Clear();

            if (AlwaysShowList || !IsSearchBoxEmpty())
            {
                var topResults = FilteredResults.Count() > MaxResults?FilteredResults.Take(MaxResults).ToList() : FilteredResults;

                bool first = true;
                foreach (var item in topResults)
                {
                    var name     = GetNameForObject(item);
                    var hintText = GetHintForObject(item);
                    var emphasis = GetHintEmphasisRangeForObject(item);
                    var image    = OnGetIconForItem != null?OnGetIconForItem(item) : null;

                    var menuItem = new ToolStripButtonWithHint(name, image, hintText);

                    menuItem.EmphasisStart = emphasis.X;
                    menuItem.EmphasisEnd   = emphasis.Y;

                    SearchResultsList.Items.Add(menuItem);

                    if (first)
                    {
                        menuItem.Select();
                        first = false;
                    }

                    menuItem.Click += MenuItemClick;
                }

                var unshownCount = FilteredResults.Count() - topResults.Count();
                if (unshownCount > 0)
                {
                    SearchResultsList.Items.Add(new ToolStripLabel(String.Format(" + {0} more (continue typing to filter further)", unshownCount))
                    {
                        ForeColor = Color.Gray
                    });
                }

                SearchResultsList.ResumeLayout();

                if (!SearchResultsList.Visible)
                {
                    SearchResultsList.Show(new Point(Left, Bottom));
                }
            }
            else
            {
                SearchResultsList.ResumeLayout();
                SearchResultsList.Hide();
            }
        }