diff --git a/Terminal.Gui/View/Layout/DimAuto.cs b/Terminal.Gui/View/Layout/DimAuto.cs index e00109f3b..5d34a9729 100644 --- a/Terminal.Gui/View/Layout/DimAuto.cs +++ b/Terminal.Gui/View/Layout/DimAuto.cs @@ -272,6 +272,10 @@ public class DimAuto () : Dim { View v = subviews [i]; + if (autoMax == int.MaxValue) + { + autoMax = superviewContentSize; + } if (dimension == Dimension.Width) { v.SetRelativeLayout (new Size (autoMax - subviewsSize, 0)); diff --git a/Terminal.Gui/Views/Shortcut.cs b/Terminal.Gui/Views/Shortcut.cs index cfb3580b7..526da816d 100644 --- a/Terminal.Gui/Views/Shortcut.cs +++ b/Terminal.Gui/Views/Shortcut.cs @@ -70,9 +70,6 @@ public class Shortcut : View // Only the Shortcut should be able to have focus, not any subviews KeyView.CanFocus = false; - // Right align the text in the keyview - KeyView.TextAlignment = Alignment.End; - SetKeyViewDefaultLayout (); Add (KeyView); @@ -88,9 +85,7 @@ public class Shortcut : View void OnInitialized (object sender, EventArgs e) { - ShowHide (CommandView); - ShowHide (HelpView); - ShowHide (KeyView); + ShowHide (); // Force Width to DimAuto to calculate natural width and then set it back Dim savedDim = Width; @@ -120,7 +115,7 @@ public class Shortcut : View // When one of the subviews is "empty" we don't want to show it. So we // Use Add/Remove. We need to be careful to add them in the right order // so Pos.Align works correctly. - private void ShowHide (View subView) + private void ShowHide () { RemoveAll (); if (!string.IsNullOrEmpty (CommandView.Text)) @@ -366,8 +361,8 @@ public class Shortcut : View _commandView.CanFocus = false; // Bar will set the width of all CommandViews to the width of the widest CommandViews. - _commandView.Width = Dim.Auto (DimAutoStyle.Text); - _commandView.Height = Dim.Auto (DimAutoStyle.Text); + _commandView.Width = Dim.Auto (); + _commandView.Height = Dim.Auto (); _commandView.X = Pos.Align (Alignment.End, AlignmentModes.IgnoreFirstOrLast); _commandView.Y = 0; //Pos.Center (); @@ -394,7 +389,7 @@ public class Shortcut : View Remove (KeyView); Add (_commandView, HelpView, KeyView); - ShowHide (_commandView); + ShowHide (); UpdateKeyBinding (); return; @@ -404,7 +399,7 @@ public class Shortcut : View void CommandViewTextChanged (object sender, StateEventArgs e) { Title = _commandView.Text; - ShowHide (_commandView); + ShowHide (); } void CommandViewAccept (object sender, CancelEventArgs e) @@ -445,10 +440,12 @@ public class Shortcut : View { HelpView.Margin.Thickness = new (1, 0, 1, 0); HelpView.X = Pos.Align (Alignment.End, AlignmentModes.IgnoreFirstOrLast); - HelpView.Y = 0; //Pos.Center (), + HelpView.Y = 0; //Pos.Center (), HelpView.Width = Dim.Auto (DimAutoStyle.Text); - HelpView.Height = Dim.Auto (DimAutoStyle.Text); + HelpView.Height = Dim.Height(CommandView); HelpView.Visible = true; + HelpView.VerticalTextAlignment = Alignment.Center; + } /// @@ -463,7 +460,7 @@ public class Shortcut : View if (HelpView != null) { HelpView.Text = value; - ShowHide (HelpView); + ShowHide (); } } } @@ -479,7 +476,7 @@ public class Shortcut : View if (HelpView != null) { HelpView.Text = value; - ShowHide (HelpView); + ShowHide (); } } } @@ -508,7 +505,7 @@ public class Shortcut : View UpdateKeyBinding (); KeyView.Text = Key == Key.Empty ? string.Empty : $"{Key}"; - ShowHide (KeyView); + ShowHide (); } } @@ -563,10 +560,13 @@ public class Shortcut : View { KeyView.Margin.Thickness = new (1, 0, 1, 0); KeyView.X = Pos.Align (Alignment.End, AlignmentModes.IgnoreFirstOrLast); - KeyView.Y = 0; //Pos.Center (), + //KeyView.Y = Pos.Center (); KeyView.Width = Dim.Auto (DimAutoStyle.Text, minimumContentDim: Dim.Func(GetMinimumKeyViewSize)); - KeyView.Height = Dim.Auto (DimAutoStyle.Text); + KeyView.Height = Dim.Height(CommandView); KeyView.Visible = true; + // Right align the text in the keyview + KeyView.TextAlignment = Alignment.End; + KeyView.VerticalTextAlignment = Alignment.Center; } private void UpdateKeyBinding () diff --git a/Terminal.Gui/Views/Slider.cs b/Terminal.Gui/Views/Slider.cs index c42247299..eefc202d7 100644 --- a/Terminal.Gui/Views/Slider.cs +++ b/Terminal.Gui/Views/Slider.cs @@ -1650,6 +1650,8 @@ public class Slider : View default: throw new ArgumentOutOfRangeException (_config._type.ToString ()); } + OnAccept (); + } internal bool ExtendPlus () @@ -1735,7 +1737,6 @@ public class Slider : View internal bool Set () { SetFocusedOption (); - return true; } diff --git a/UICatalog/Scenarios/Shortcuts.cs b/UICatalog/Scenarios/Shortcuts.cs index 79f670eb6..4ab677197 100644 --- a/UICatalog/Scenarios/Shortcuts.cs +++ b/UICatalog/Scenarios/Shortcuts.cs @@ -35,7 +35,7 @@ public class Shortcuts : Scenario ListView eventLog = new ListView () { X = Pos.AnchorEnd (), - Width = 50, + Width = 40, Height = Dim.Fill (), ColorScheme = Colors.ColorSchemes ["Toplevel"], Source = new ListWrapper (eventSource) @@ -44,10 +44,11 @@ public class Shortcuts : Scenario var shortcut1 = new Shortcut { - //Width =30, + X = 20, + Width = 30, Title = "Zi_gzag", Key = Key.F1, - Text = "Gonna zig zag", + Text = "Width is 30", KeyBindingScope = KeyBindingScope.Application, BorderStyle = LineStyle.Dotted }; @@ -61,14 +62,20 @@ public class Shortcuts : Scenario var shortcut2 = new Shortcut { + X = 20, Y = Pos.Bottom (shortcut1), Width = Dim.Width (shortcut1), - Title = "_Two", - Key = Key.F2.WithAlt, - Text = "Number two", + Key = Key.F2, + Text = "Width is ^", KeyBindingScope = KeyBindingScope.HotKey, - BorderStyle = LineStyle.Dotted + BorderStyle = LineStyle.Dotted, + CommandView = new RadioGroup () + { + Orientation = Orientation.Vertical, + RadioLabels = ["One", "Two", "Three", "Four"], + }, }; + shortcut2.Border.Thickness = new Thickness (1, 0, 1, 0); shortcut2.Accept += (s, e) => { @@ -79,11 +86,12 @@ public class Shortcuts : Scenario var shortcut3 = new Shortcut { + X = 20, Y = Pos.Bottom (shortcut2), - Width = Dim.Width (shortcut1), CommandView = new CheckBox () { Text = "_Align" }, Key = Key.F3, - HelpText = "Alignment", + HelpText = "Width is Fill", + Width = Dim.Fill () - Dim.Width (eventLog), KeyBindingScope = KeyBindingScope.HotKey, BorderStyle = LineStyle.Dotted }; @@ -124,40 +132,19 @@ public class Shortcuts : Scenario }; Application.Top.Add (shortcut3); - - var shortcutH = new Shortcut - { - Y = Pos.Top (shortcut3), - X = Pos.Right (shortcut3), - Title = "Horizo_ntal", - Key = Key.F10, - Text = "Hey!", - KeyBindingScope = KeyBindingScope.HotKey, - BorderStyle = LineStyle.Dotted - }; - shortcutH.Border.Thickness = new Thickness (0, 0, 1, 0); - shortcutH.Accept += (s, e) => - { - eventSource.Add ($"Accept: {s}"); - eventLog.MoveDown (); - }; - Application.Top.Add (shortcutH); - var shortcut4 = new Shortcut { X = 20, Y = Pos.Bottom (shortcut3), - Width = Dim.Fill (50), + Width = Dim.Width (shortcut3), Title = "C", - Text = "H", + HelpText = "Width is Fill", Key = Key.K, KeyBindingScope = KeyBindingScope.HotKey, // Command = Command.Accept, BorderStyle = LineStyle.Dotted }; shortcut4.Border.Thickness = new Thickness (1, 0, 1, 0); - shortcut4.Margin.Thickness = new Thickness (0, 1, 0, 0); - View.Diagnostics = ViewDiagnosticFlags.Ruler; shortcut4.Accept += (s, e) => { @@ -171,16 +158,15 @@ public class Shortcuts : Scenario { X = 20, Y = Pos.Bottom (shortcut4), - Width = Dim.Fill (50), + Width = Dim.Width (shortcut4), + Title = "Fi_ve", Key = Key.F5.WithCtrl.WithAlt.WithShift, - Text = "Help text", + HelpText = "Width is Fill", KeyBindingScope = KeyBindingScope.HotKey, BorderStyle = LineStyle.Dotted }; shortcut5.Border.Thickness = new Thickness (1, 0, 1, 0); - shortcut5.Margin.Thickness = new Thickness (0, 1, 0, 0); - View.Diagnostics = ViewDiagnosticFlags.Ruler; shortcut5.Accept += (s, e) => { @@ -190,9 +176,40 @@ public class Shortcuts : Scenario Application.Top.Add (shortcut5); + var shortcutSlider = new Shortcut + { + X = 20, + Y = Pos.Bottom (shortcut5), + Key = Key.F5, + HelpText = "Width is Fill", + Width = Dim.Width (shortcut5), + + KeyBindingScope = KeyBindingScope.HotKey, + BorderStyle = LineStyle.Dotted, + CommandView = new Slider () + { + Orientation = Orientation.Vertical, + AllowEmpty = false, + } + }; + + + ((Slider)shortcutSlider.CommandView).Options = new List> () + { new () { Legend = "A" }, new () { Legend = "B" }, new () { Legend = "C" } }; + ((Slider)shortcutSlider.CommandView).SetOption (0); + shortcutSlider.Border.Thickness = new Thickness (1, 0, 1, 0); + + shortcutSlider.Accept += (s, e) => + { + eventSource.Add ($"Accept: {s}"); + eventLog.MoveDown (); + }; + Application.Top.Add (shortcutSlider); + ; ((CheckBox)shortcut3.CommandView).OnToggled (); //shortcut1.SetFocus (); + //View.Diagnostics = ViewDiagnosticFlags.Ruler; }