Exemplo n.º 1
0
        private void InitializeForm()
        {
            var labelColumn = Add(new StackPanel()
            {
                Orientation = Orientation.Vertical, Margin = 1
            });
            var valueColumn = Add(new StackPanel()
            {
                Orientation = Orientation.Vertical, Margin = 1
            });

            this.SynchronizeForLifetime(nameof(this.Bounds), () =>
            {
                var labelColumnWidth = ConsoleMath.Round(this.Width * this.Options.LabelColumnPercentage);
                var valueColumnWidth = ConsoleMath.Round(this.Width * (1 - this.Options.LabelColumnPercentage));

                while (labelColumnWidth + valueColumnWidth > this.Width)
                {
                    labelColumnWidth--;
                }

                while (labelColumnWidth + valueColumnWidth < this.Width)
                {
                    valueColumnWidth++;
                }

                labelColumn.Width = labelColumnWidth;
                valueColumn.Width = valueColumnWidth;

                labelColumn.Height = this.Height;
                valueColumn.Height = this.Height;

                valueColumn.X = labelColumnWidth;
            }, this);

            foreach (var element in this.Options.Elements)
            {
                labelColumn.Add(new Label()
                {
                    Height = 1, Text = element.Label
                }).FillHorizontally();
                element.ValueControl.Height = 1;
                valueColumn.Add(element.ValueControl);
                EnsureSizing(element);
            }

            this.Options.Elements.Added.SubscribeForLifetime((addedElement) =>
            {
                var index = this.Options.Elements.IndexOf(addedElement);
                var label = new Label()
                {
                    Height = 1, Text = addedElement.Label
                };
                addedElement.ValueControl.Height = 1;
                labelColumn.Controls.Insert(index, label);
                label.FillHorizontally();
                valueColumn.Controls.Insert(index, addedElement.ValueControl);
                EnsureSizing(addedElement);
            }, this);

            this.Options.Elements.Removed.SubscribeForLifetime((removedElement) =>
            {
                var index = valueColumn.Controls.IndexOf(removedElement.ValueControl);
                labelColumn.Controls.RemoveAt(index);
                valueColumn.Controls.RemoveAt(index);
            }, this);

            this.Options.Elements.AssignedToIndex.SubscribeForLifetime((assignment) => throw new NotSupportedException("Index assignments not supported in form elements"), this);
        }
Exemplo n.º 2
0
        private void InitializeForm()
        {
            var labelColumn = Add(new StackPanel()
            {
                Orientation = Orientation.Vertical
            });
            var valueColumn = Add(new StackPanel()
            {
                Orientation = Orientation.Vertical
            });

            Application.FocusManager.GlobalKeyHandlers.PushForLifetime(ConsoleKey.DownArrow, null, () =>
            {
                if (this.Descendents.Contains(Application.FocusManager.FocusedControl))
                {
                    Application.FocusManager.TryMoveFocus();
                }
            }, this);

            Application.FocusManager.GlobalKeyHandlers.PushForLifetime(ConsoleKey.UpArrow, null, () =>
            {
                if (this.Descendents.Contains(Application.FocusManager.FocusedControl))
                {
                    Application.FocusManager.TryMoveFocus(false);
                }
            }, this);

            this.SynchronizeForLifetime(nameof(this.Bounds), () =>
            {
                var labelColumnWidth = (int)Math.Round(this.Width * this.Options.LabelColumnPercentage);
                var valueColumnWidth = (int)Math.Round(this.Width * (1 - this.Options.LabelColumnPercentage));

                while (labelColumnWidth + valueColumnWidth > this.Width)
                {
                    labelColumnWidth--;
                }

                while (labelColumnWidth + valueColumnWidth < this.Width)
                {
                    valueColumnWidth++;
                }

                labelColumn.Width = labelColumnWidth;
                valueColumn.Width = valueColumnWidth;

                labelColumn.Height = this.Height;
                valueColumn.Height = this.Height;

                valueColumn.X = labelColumnWidth;
            }, this);

            foreach (var element in this.Options.Elements)
            {
                labelColumn.Add(new Label()
                {
                    Height = 1, Text = element.Label
                }).FillHorizontally();
                element.ValueControl.Height = 1;
                valueColumn.Add(element.ValueControl).FillHorizontally();
            }

            this.Options.Elements.Added.SubscribeForLifetime((addedElement) =>
            {
                var index = this.Options.Elements.IndexOf(addedElement);
                var label = new Label()
                {
                    Height = 1, Text = addedElement.Label
                };
                addedElement.ValueControl.Height = 1;
                labelColumn.Controls.Insert(index, label);
                label.FillHorizontally();

                valueColumn.Controls.Insert(index, addedElement.ValueControl);
                addedElement.ValueControl.FillHorizontally();
            }, this);

            this.Options.Elements.Removed.SubscribeForLifetime((removedElement) =>
            {
                var index = valueColumn.Controls.IndexOf(removedElement.ValueControl);
                labelColumn.Controls.RemoveAt(index);
                valueColumn.Controls.RemoveAt(index);
            }, this);

            this.Options.Elements.AssignedToIndex.SubscribeForLifetime((assignment) => throw new NotSupportedException("Index assignments not supported in form elements"), this);
        }