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); }
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); }