浏览代码

Added 3x3 demo

Tig 1 年之前
父节点
当前提交
64b3554570
共有 1 个文件被更改,包括 232 次插入180 次删除
  1. 232 180
      UICatalog/Scenarios/PosJustification.cs

+ 232 - 180
UICatalog/Scenarios/PosJustification.cs

@@ -1,8 +1,7 @@
-using System.Collections.Generic;
 using System;
 using System;
-using Terminal.Gui;
+using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
-using System.Reflection.Emit;
+using Terminal.Gui;
 
 
 namespace UICatalog.Scenarios;
 namespace UICatalog.Scenarios;
 
 
@@ -10,11 +9,10 @@ namespace UICatalog.Scenarios;
 [ScenarioCategory ("Layout")]
 [ScenarioCategory ("Layout")]
 public sealed class PosJustification : Scenario
 public sealed class PosJustification : Scenario
 {
 {
-
-    private Justifier _horizJustifier = new Justifier ();
-    private int _leftMargin = 0;
-    private Justifier _vertJustifier = new Justifier ();
-    private int _topMargin = 0;
+    private readonly Justifier _horizJustifier = new ();
+    private int _leftMargin;
+    private readonly Justifier _vertJustifier = new ();
+    private int _topMargin;
 
 
     public override void Main ()
     public override void Main ()
     {
     {
@@ -31,6 +29,8 @@ public sealed class PosJustification : Scenario
 
 
         SetupVerticalControls (appWindow);
         SetupVerticalControls (appWindow);
 
 
+        Setup3by3Grid (appWindow);
+
         // Run - Start the application.
         // Run - Start the application.
         Application.Run (appWindow);
         Application.Run (appWindow);
         appWindow.Dispose ();
         appWindow.Dispose ();
@@ -42,6 +42,7 @@ public sealed class PosJustification : Scenario
     private void SetupHorizontalControls (Window appWindow)
     private void SetupHorizontalControls (Window appWindow)
     {
     {
         ColorScheme colorScheme = Colors.ColorSchemes ["Toplevel"];
         ColorScheme colorScheme = Colors.ColorSchemes ["Toplevel"];
+
         RadioGroup justification = new ()
         RadioGroup justification = new ()
         {
         {
             X = Pos.Justify (_horizJustifier.Justification),
             X = Pos.Justify (_horizJustifier.Justification),
@@ -51,23 +52,25 @@ public sealed class PosJustification : Scenario
         };
         };
 
 
         justification.SelectedItemChanged += (s, e) =>
         justification.SelectedItemChanged += (s, e) =>
-        {
-            _horizJustifier.Justification = (Justification)Enum.Parse (typeof (Justification), justification.SelectedItem.ToString ());
-            foreach (var view in appWindow.Subviews.Where (v => v.X is Pos.PosJustify))
-            {
-                if (view.X is Pos.PosJustify j)
-                {
-                    var newJust = new Pos.PosJustify (_horizJustifier.Justification)
-                    {
-                        Justifier =
-                        {
-                            PutSpaceBetweenItems = _horizJustifier.PutSpaceBetweenItems
-                        }
-                    };
-                    view.X = newJust;
-                }
-            }
-        };
+                                             {
+                                                 _horizJustifier.Justification =
+                                                     (Justification)Enum.Parse (typeof (Justification), justification.SelectedItem.ToString ());
+
+                                                 foreach (View view in appWindow.Subviews.Where (v => v.X is Pos.PosJustify))
+                                                 {
+                                                     if (view.X is Pos.PosJustify j)
+                                                     {
+                                                         var newJust = new Pos.PosJustify (_horizJustifier.Justification)
+                                                         {
+                                                             Justifier =
+                                                             {
+                                                                 PutSpaceBetweenItems = _horizJustifier.PutSpaceBetweenItems
+                                                             }
+                                                         };
+                                                         view.X = newJust;
+                                                     }
+                                                 }
+                                             };
         appWindow.Add (justification);
         appWindow.Add (justification);
 
 
         CheckBox putSpaces = new ()
         CheckBox putSpaces = new ()
@@ -75,12 +78,14 @@ public sealed class PosJustification : Scenario
             X = Pos.Justify (_horizJustifier.Justification),
             X = Pos.Justify (_horizJustifier.Justification),
             Y = Pos.Top (justification),
             Y = Pos.Top (justification),
             ColorScheme = colorScheme,
             ColorScheme = colorScheme,
-            Text = "Spaces",
+            Text = "Spaces"
         };
         };
+
         putSpaces.Toggled += (s, e) =>
         putSpaces.Toggled += (s, e) =>
                              {
                              {
                                  _horizJustifier.PutSpaceBetweenItems = e.NewValue is { } && e.NewValue.Value;
                                  _horizJustifier.PutSpaceBetweenItems = e.NewValue is { } && e.NewValue.Value;
-                                 foreach (var view in appWindow.Subviews.Where (v => v.X is Pos.PosJustify))
+
+                                 foreach (View view in appWindow.Subviews.Where (v => v.X is Pos.PosJustify))
                                  {
                                  {
                                      if (view.X is Pos.PosJustify j)
                                      if (view.X is Pos.PosJustify j)
                                      {
                                      {
@@ -95,33 +100,37 @@ public sealed class PosJustification : Scenario
             X = Pos.Left (putSpaces),
             X = Pos.Left (putSpaces),
             Y = Pos.Bottom (putSpaces),
             Y = Pos.Bottom (putSpaces),
             ColorScheme = colorScheme,
             ColorScheme = colorScheme,
-            Text = "Margin",
+            Text = "Margin"
         };
         };
-        margin.Toggled += (s, e) =>
-        {
-            _leftMargin = e.NewValue is { } && e.NewValue.Value ? 1 : 0;
-            foreach (var view in appWindow.Subviews.Where (v => v.X is Pos.PosJustify))
-            {
-                // Skip the justification radio group
-                if (view != justification)
-                {
-                    view.Margin.Thickness = new Thickness (_leftMargin, 0, 0, 0);
-                }
-            }
-            appWindow.LayoutSubviews ();
 
 
-        };
+        margin.Toggled += (s, e) =>
+                          {
+                              _leftMargin = e.NewValue is { } && e.NewValue.Value ? 1 : 0;
+
+                              foreach (View view in appWindow.Subviews.Where (v => v.X is Pos.PosJustify))
+                              {
+                                  // Skip the justification radio group
+                                  if (view != justification)
+                                  {
+                                      view.Margin.Thickness = new (_leftMargin, 0, 0, 0);
+                                  }
+                              }
+
+                              appWindow.LayoutSubviews ();
+                          };
         appWindow.Add (margin);
         appWindow.Add (margin);
 
 
-        var addedViews = new List<Button> ();
-        addedViews.Add (new Button
-        {
-            X = Pos.Justify (_horizJustifier.Justification),
-            Y = Pos.Center (),
-            Text = NumberToWords.Convert (0)
-        });
+        List<Button> addedViews = new List<Button> ();
 
 
-        var addedViewsUpDown = new Buttons.NumericUpDown<int> ()
+        addedViews.Add (
+                        new()
+                        {
+                            X = Pos.Justify (_horizJustifier.Justification),
+                            Y = Pos.Center (),
+                            Text = NumberToWords.Convert (0)
+                        });
+
+        Buttons.NumericUpDown<int> addedViewsUpDown = new Buttons.NumericUpDown<int>
         {
         {
             X = Pos.Justify (_horizJustifier.Justification),
             X = Pos.Justify (_horizJustifier.Justification),
             Y = Pos.Top (justification),
             Y = Pos.Top (justification),
@@ -131,54 +140,55 @@ public sealed class PosJustification : Scenario
             BorderStyle = LineStyle.None,
             BorderStyle = LineStyle.None,
             Value = addedViews.Count
             Value = addedViews.Count
         };
         };
-        addedViewsUpDown.Border.Thickness = new Thickness (0, 1, 0, 0);
+        addedViewsUpDown.Border.Thickness = new (0, 1, 0, 0);
+
         addedViewsUpDown.ValueChanging += (s, e) =>
         addedViewsUpDown.ValueChanging += (s, e) =>
-                                            {
-                                                if (e.NewValue < 0)
-                                                {
-                                                    e.Cancel = true;
-
-                                                    return;
-                                                }
-
-                                                // Add or remove buttons
-                                                if (e.NewValue < e.OldValue)
-                                                {
-                                                    // Remove buttons
-                                                    for (int i = e.OldValue - 1; i >= e.NewValue; i--)
-                                                    {
-                                                        var button = addedViews [i];
-                                                        appWindow.Remove (button);
-                                                        addedViews.RemoveAt (i);
-                                                        button.Dispose ();
-                                                    }
-                                                }
-
-                                                if (e.NewValue > e.OldValue)
-                                                {
-                                                    // Add buttons
-                                                    for (int i = e.OldValue; i < e.NewValue; i++)
-                                                    {
-                                                        var button = new Button
-                                                        {
-                                                            X = Pos.Justify (_horizJustifier.Justification),
-                                                            Y = Pos.Center (),
-                                                            Text = NumberToWords.Convert (i + 1)
-                                                        };
-                                                        appWindow.Add (button);
-                                                        addedViews.Add (button);
-                                                    }
-                                                }
-                                            };
+                                          {
+                                              if (e.NewValue < 0)
+                                              {
+                                                  e.Cancel = true;
+
+                                                  return;
+                                              }
+
+                                              // Add or remove buttons
+                                              if (e.NewValue < e.OldValue)
+                                              {
+                                                  // Remove buttons
+                                                  for (int i = e.OldValue - 1; i >= e.NewValue; i--)
+                                                  {
+                                                      Button button = addedViews [i];
+                                                      appWindow.Remove (button);
+                                                      addedViews.RemoveAt (i);
+                                                      button.Dispose ();
+                                                  }
+                                              }
+
+                                              if (e.NewValue > e.OldValue)
+                                              {
+                                                  // Add buttons
+                                                  for (int i = e.OldValue; i < e.NewValue; i++)
+                                                  {
+                                                      var button = new Button
+                                                      {
+                                                          X = Pos.Justify (_horizJustifier.Justification),
+                                                          Y = Pos.Center (),
+                                                          Text = NumberToWords.Convert (i + 1)
+                                                      };
+                                                      appWindow.Add (button);
+                                                      addedViews.Add (button);
+                                                  }
+                                              }
+                                          };
         appWindow.Add (addedViewsUpDown);
         appWindow.Add (addedViewsUpDown);
 
 
         appWindow.Add (addedViews [0]);
         appWindow.Add (addedViews [0]);
-
     }
     }
 
 
     private void SetupVerticalControls (Window appWindow)
     private void SetupVerticalControls (Window appWindow)
     {
     {
         ColorScheme colorScheme = Colors.ColorSchemes ["Error"];
         ColorScheme colorScheme = Colors.ColorSchemes ["Error"];
+
         RadioGroup justification = new ()
         RadioGroup justification = new ()
         {
         {
             X = 0,
             X = 0,
@@ -188,23 +198,25 @@ public sealed class PosJustification : Scenario
         };
         };
 
 
         justification.SelectedItemChanged += (s, e) =>
         justification.SelectedItemChanged += (s, e) =>
-        {
-            _vertJustifier.Justification = (Justification)Enum.Parse (typeof (Justification), justification.SelectedItem.ToString ());
-            foreach (var view in appWindow.Subviews.Where (v => v.Y is Pos.PosJustify))
-            {
-                if (view.Y is Pos.PosJustify j)
-                {
-                    var newJust = new Pos.PosJustify (_vertJustifier.Justification)
-                    {
-                        Justifier =
-                        {
-                            PutSpaceBetweenItems = _vertJustifier.PutSpaceBetweenItems
-                        }
-                    };
-                    view.Y = newJust;
-                }
-            }
-        };
+                                             {
+                                                 _vertJustifier.Justification =
+                                                     (Justification)Enum.Parse (typeof (Justification), justification.SelectedItem.ToString ());
+
+                                                 foreach (View view in appWindow.Subviews.Where (v => v.Y is Pos.PosJustify))
+                                                 {
+                                                     if (view.Y is Pos.PosJustify j)
+                                                     {
+                                                         var newJust = new Pos.PosJustify (_vertJustifier.Justification)
+                                                         {
+                                                             Justifier =
+                                                             {
+                                                                 PutSpaceBetweenItems = _vertJustifier.PutSpaceBetweenItems
+                                                             }
+                                                         };
+                                                         view.Y = newJust;
+                                                     }
+                                                 }
+                                             };
         appWindow.Add (justification);
         appWindow.Add (justification);
 
 
         CheckBox putSpaces = new ()
         CheckBox putSpaces = new ()
@@ -212,20 +224,21 @@ public sealed class PosJustification : Scenario
             X = 0,
             X = 0,
             Y = Pos.Justify (_vertJustifier.Justification),
             Y = Pos.Justify (_vertJustifier.Justification),
             ColorScheme = colorScheme,
             ColorScheme = colorScheme,
-            Text = "Spaces",
+            Text = "Spaces"
         };
         };
+
         putSpaces.Toggled += (s, e) =>
         putSpaces.Toggled += (s, e) =>
-        {
-            _vertJustifier.PutSpaceBetweenItems = e.NewValue is { } && e.NewValue.Value;
-            foreach (var view in appWindow.Subviews.Where (v => v.Y is Pos.PosJustify))
-            {
-                if (view.Y is Pos.PosJustify j)
-                {
-                    j.Justifier.PutSpaceBetweenItems = _vertJustifier.PutSpaceBetweenItems;
-                }
-            }
+                             {
+                                 _vertJustifier.PutSpaceBetweenItems = e.NewValue is { } && e.NewValue.Value;
 
 
-        };
+                                 foreach (View view in appWindow.Subviews.Where (v => v.Y is Pos.PosJustify))
+                                 {
+                                     if (view.Y is Pos.PosJustify j)
+                                     {
+                                         j.Justifier.PutSpaceBetweenItems = _vertJustifier.PutSpaceBetweenItems;
+                                     }
+                                 }
+                             };
         appWindow.Add (putSpaces);
         appWindow.Add (putSpaces);
 
 
         CheckBox margin = new ()
         CheckBox margin = new ()
@@ -233,32 +246,37 @@ public sealed class PosJustification : Scenario
             X = Pos.Right (putSpaces) + 1,
             X = Pos.Right (putSpaces) + 1,
             Y = Pos.Top (putSpaces),
             Y = Pos.Top (putSpaces),
             ColorScheme = colorScheme,
             ColorScheme = colorScheme,
-            Text = "Margin",
+            Text = "Margin"
         };
         };
+
         margin.Toggled += (s, e) =>
         margin.Toggled += (s, e) =>
-        {
-            _topMargin = e.NewValue is { } && e.NewValue.Value ? 1 : 0;
-            foreach (var view in appWindow.Subviews.Where (v => v.Y is Pos.PosJustify))
-            {
-                // Skip the justification radio group
-                if (view != justification)
-                {
-                    view.Margin.Thickness = new Thickness (0, _topMargin, 0, 0);
-                }
-            }
-            appWindow.LayoutSubviews ();
-        };
+                          {
+                              _topMargin = e.NewValue is { } && e.NewValue.Value ? 1 : 0;
+
+                              foreach (View view in appWindow.Subviews.Where (v => v.Y is Pos.PosJustify))
+                              {
+                                  // Skip the justification radio group
+                                  if (view != justification)
+                                  {
+                                      view.Margin.Thickness = new (0, _topMargin, 0, 0);
+                                  }
+                              }
+
+                              appWindow.LayoutSubviews ();
+                          };
         appWindow.Add (margin);
         appWindow.Add (margin);
 
 
-        var addedViews = new List<CheckBox> ();
-        addedViews.Add (new CheckBox
-        {
-            X = 0,
-            Y = Pos.Justify (_vertJustifier.Justification),
-            Text = NumberToWords.Convert (0)
-        });
+        List<CheckBox> addedViews = new List<CheckBox> ();
 
 
-        var addedViewsUpDown = new Buttons.NumericUpDown<int> ()
+        addedViews.Add (
+                        new()
+                        {
+                            X = 0,
+                            Y = Pos.Justify (_vertJustifier.Justification),
+                            Text = NumberToWords.Convert (0)
+                        });
+
+        Buttons.NumericUpDown<int> addedViewsUpDown = new Buttons.NumericUpDown<int>
         {
         {
             X = 0,
             X = 0,
             Y = Pos.Justify (_vertJustifier.Justification),
             Y = Pos.Justify (_vertJustifier.Justification),
@@ -268,67 +286,101 @@ public sealed class PosJustification : Scenario
             BorderStyle = LineStyle.None,
             BorderStyle = LineStyle.None,
             Value = addedViews.Count
             Value = addedViews.Count
         };
         };
-        addedViewsUpDown.Border.Thickness = new Thickness (0, 1, 0, 0);
-        addedViewsUpDown.ValueChanging += (s, e) =>
-        {
-            if (e.NewValue < 0)
-            {
-                e.Cancel = true;
-
-                return;
-            }
-
-            // Add or remove buttons
-            if (e.NewValue < e.OldValue)
-            {
-                // Remove buttons
-                for (int i = e.OldValue - 1; i >= e.NewValue; i--)
-                {
-                    var button = addedViews [i];
-                    appWindow.Remove (button);
-                    addedViews.RemoveAt (i);
-                    button.Dispose ();
-                }
-            }
+        addedViewsUpDown.Border.Thickness = new (0, 1, 0, 0);
 
 
-            if (e.NewValue > e.OldValue)
-            {
-                // Add buttons
-                for (int i = e.OldValue; i < e.NewValue; i++)
-                {
-                    var button = new CheckBox ()
-                    {
-                        X = 0,
-                        Y = Pos.Justify (_vertJustifier.Justification),
-                        Text = NumberToWords.Convert (i + 1)
-                    };
-                    appWindow.Add (button);
-                    addedViews.Add (button);
-                }
-            }
-        };
+        addedViewsUpDown.ValueChanging += (s, e) =>
+                                          {
+                                              if (e.NewValue < 0)
+                                              {
+                                                  e.Cancel = true;
+
+                                                  return;
+                                              }
+
+                                              // Add or remove buttons
+                                              if (e.NewValue < e.OldValue)
+                                              {
+                                                  // Remove buttons
+                                                  for (int i = e.OldValue - 1; i >= e.NewValue; i--)
+                                                  {
+                                                      CheckBox button = addedViews [i];
+                                                      appWindow.Remove (button);
+                                                      addedViews.RemoveAt (i);
+                                                      button.Dispose ();
+                                                  }
+                                              }
+
+                                              if (e.NewValue > e.OldValue)
+                                              {
+                                                  // Add buttons
+                                                  for (int i = e.OldValue; i < e.NewValue; i++)
+                                                  {
+                                                      var button = new CheckBox
+                                                      {
+                                                          X = 0,
+                                                          Y = Pos.Justify (_vertJustifier.Justification),
+                                                          Text = NumberToWords.Convert (i + 1)
+                                                      };
+                                                      appWindow.Add (button);
+                                                      addedViews.Add (button);
+                                                  }
+                                              }
+                                          };
         appWindow.Add (addedViewsUpDown);
         appWindow.Add (addedViewsUpDown);
 
 
         appWindow.Add (addedViews [0]);
         appWindow.Add (addedViews [0]);
-
     }
     }
 
 
-    static IEnumerable<string> GetUniqueEnumNames<T> (bool reverse) where T : Enum
+    private static IEnumerable<string> GetUniqueEnumNames<T> (bool reverse) where T : Enum
     {
     {
-        var values = new HashSet<int> ();
-        var names = Enum.GetNames (typeof (T));
+        HashSet<int> values = new HashSet<int> ();
+        string [] names = Enum.GetNames (typeof (T));
 
 
         if (reverse)
         if (reverse)
         {
         {
             names = Enum.GetNames (typeof (T)).Reverse ().ToArray ();
             names = Enum.GetNames (typeof (T)).Reverse ().ToArray ();
         }
         }
-        foreach (var name in names)
+
+        foreach (string name in names)
         {
         {
             var value = (int)Enum.Parse (typeof (T), name);
             var value = (int)Enum.Parse (typeof (T), name);
+
             if (values.Add (value))
             if (values.Add (value))
             {
             {
                 yield return name;
                 yield return name;
             }
             }
         }
         }
     }
     }
+
+    private void Setup3by3Grid (Window appWindow)
+    {
+        var container = new View
+        {
+            Title = "3 by 3",
+            BorderStyle = LineStyle.Single,
+            X = Pos.AnchorEnd (),
+            Y = Pos.AnchorEnd (),
+            Width = Dim.Percent (30),
+            Height = Dim.Percent (30)
+        };
+
+        for (var i = 0; i < 9; i++)
+
+        {
+            var v = new View
+            {
+                Title = $"{i}",
+                BorderStyle = LineStyle.Dashed,
+                Height = 3,
+                Width = 5
+            };
+
+            v.X = Pos.Justify (Justification.Right, i / 3);
+            v.Y = Pos.Justify (Justification.Justified, i % 3 + 10);
+
+            container.Add (v);
+        }
+
+        appWindow.Add (container);
+    }
 }
 }