Ejemplo n.º 1
0
        private void RenderComboBox(ComboBox comboBox)
        {
            Point loc = comboBox.AbsoluteLocation();

            ConsoleAdapter.Write(new string(' ', comboBox.Width));
            ConsoleAdapter.MoveCursor(loc.Left, loc.Top);
            ConsoleAdapter.Write(comboBox.VisibleText);
            ConsoleAdapter.MoveCursor(loc.Left + comboBox.Width - 1, loc.Top);
            ConsoleColor saveColor = ConsoleAdapter.BackgroundColor;

            ConsoleAdapter.BackgroundColor = comboBox.ExpanderBackground;

            var expanded = comboBox.DroppedDown;

            ConsoleAdapter.Write(expanded ? '▲' : '▼');
            ConsoleAdapter.BackgroundColor = saveColor;
            var initialCurosrTopPosition = loc.Top + 1;
            var itemLinesToDraw          = comboBox.Items.Count > comboBox.VisibleItemsCount
                                                        ? comboBox.VisibleItemsCount
                                                        : comboBox.Items.Count;

            var expanderLocation = new Point
            {
                Left = loc.Left + 1,
                Top  = initialCurosrTopPosition
            };

            var expanderSize = new Size {
                Width = comboBox.Width - 1, Height = itemLinesToDraw
            };

            if (expanded)
            {
                ConsoleAdapter.MoveCursor(loc.Left + comboBox.Width - 1, loc.Top);

                RenderBackgroundBox(
                    expanderLocation,
                    expanderSize,
                    comboBox.BackgroundColor
                    );
                ConsoleAdapter.ForegroundColor = comboBox.ForegroundColor;
                ConsoleAdapter.BackgroundColor = comboBox.BackgroundColor;

                var startItem = comboBox.SelectedIndex >= comboBox.VisibleItemsCount ? comboBox.SelectedIndex - comboBox.VisibleItemsCount + 1 : 0;
                for (int i = startItem; i < startItem + itemLinesToDraw; i++)
                {
                    ConsoleAdapter.MoveCursor(loc.Left + 1, initialCurosrTopPosition);
                    if (comboBox.Items[i] == comboBox.Items[comboBox.SelectedIndex])
                    {
                        ConsoleAdapter.BackgroundColor = RenderOptions.ColorScheme.FocusedBackgroundColor;
                        ConsoleAdapter.ForegroundColor = comboBox.SelectedColor;
                    }
                    ConsoleAdapter.Write(comboBox.Items[i].Text);
                    ConsoleAdapter.BackgroundColor = comboBox.BackgroundColor;
                    ConsoleAdapter.ForegroundColor = comboBox.ForegroundColor;
                    ++initialCurosrTopPosition;
                }

                if (comboBox.Items.Count > comboBox.VisibleItemsCount)
                {
                    var rollerSize   = (int)((comboBox.VisibleItemsCount / (float)comboBox.Items.Count) * (comboBox.VisibleItemsCount - 2));
                    var rollDiff     = comboBox.Items.Count - comboBox.VisibleItemsCount;
                    var rollerOffset = comboBox.SelectedIndex < comboBox.VisibleItemsCount ?
                                       0 :
                                       (int)(((comboBox.SelectedIndex - comboBox.VisibleItemsCount + 1) / (float)rollDiff) * (comboBox.VisibleItemsCount - 2 - rollerSize));
                    RenderVerticalScroll(
                        new Point()
                    {
                        Left = loc.Left + comboBox.Width - 1, Top = loc.Top + 1
                    },
                        comboBox.VisibleItemsCount,
                        rollerSize,
                        rollerOffset
                        );
                }
            }
            else
            {
                RenderBackgroundBox(
                    expanderLocation,
                    expanderSize,
                    ScoreboardContext.Navigation.Current.Scoreboard.BackgroundColor
                    );
                var overlapped = GetOverlappedControls(expanderLocation, new Point
                {
                    Left = expanderLocation.Left + expanderSize.Width,
                    Top  = expanderLocation.Top + expanderSize.Height
                }).Where(_ => _ != comboBox);

                RenderOverridedExcept(overlapped, comboBox);
            }
        }