Tig преди 9 месеца
родител
ревизия
10d99a2c8a
променени са 89 файла, в които са добавени 730 реда и са изтрити 353 реда
  1. 6 6
      UICatalog/Properties/launchSettings.json
  2. 34 76
      UICatalog/Scenario.cs
  3. 39 0
      UICatalog/ScenarioCategory.cs
  4. 42 0
      UICatalog/ScenarioMetadata.cs
  5. 2 2
      UICatalog/Scenarios/ASCIICustomButton.cs
  6. 3 3
      UICatalog/Scenarios/Adornments.cs
  7. 12 0
      UICatalog/Scenarios/AllViewsTester.cs
  8. 3 3
      UICatalog/Scenarios/AnimationScenario/AnimationScenario.cs
  9. 57 1
      UICatalog/Scenarios/Arrangement.cs
  10. 2 2
      UICatalog/Scenarios/Bars.cs
  11. 3 3
      UICatalog/Scenarios/Buttons.cs
  12. 31 7
      UICatalog/Scenarios/CharacterMap.cs
  13. 2 2
      UICatalog/Scenarios/ChineseUI.cs
  14. 3 3
      UICatalog/Scenarios/ClassExplorer.cs
  15. 33 5
      UICatalog/Scenarios/Clipping.cs
  16. 6 6
      UICatalog/Scenarios/CollectionNavigatorTester.cs
  17. 40 3
      UICatalog/Scenarios/ColorPicker.cs
  18. 2 2
      UICatalog/Scenarios/CombiningMarks.cs
  19. 3 3
      UICatalog/Scenarios/ComboBoxIteration.cs
  20. 2 2
      UICatalog/Scenarios/ComputedLayout.cs
  21. 5 5
      UICatalog/Scenarios/ConfigurationEditor.cs
  22. 31 4
      UICatalog/Scenarios/ContentScrolling.cs
  23. 48 3
      UICatalog/Scenarios/ContextMenus.cs
  24. 9 9
      UICatalog/Scenarios/CsvEditor.cs
  25. 3 3
      UICatalog/Scenarios/DatePickers.cs
  26. 55 2
      UICatalog/Scenarios/Dialogs.cs
  27. 2 2
      UICatalog/Scenarios/DimAutoDemo.cs
  28. 3 3
      UICatalog/Scenarios/DynamicMenuBar.cs
  29. 2 2
      UICatalog/Scenarios/DynamicStatusBar.cs
  30. 8 8
      UICatalog/Scenarios/Editor.cs
  31. 3 3
      UICatalog/Scenarios/FileDialogExamples.cs
  32. 2 2
      UICatalog/Scenarios/Generic.cs
  33. 3 3
      UICatalog/Scenarios/GraphViewExample.cs
  34. 6 6
      UICatalog/Scenarios/HexEditor.cs
  35. 3 3
      UICatalog/Scenarios/HotKeys.cs
  36. 3 3
      UICatalog/Scenarios/Images.cs
  37. 3 3
      UICatalog/Scenarios/InteractiveTree.cs
  38. 3 3
      UICatalog/Scenarios/InvertColors.cs
  39. 2 2
      UICatalog/Scenarios/KeyBindings.cs
  40. 2 2
      UICatalog/Scenarios/Keys.cs
  41. 4 4
      UICatalog/Scenarios/LineCanvasExperiment.cs
  42. 3 3
      UICatalog/Scenarios/LineDrawing.cs
  43. 4 4
      UICatalog/Scenarios/LineViewExample.cs
  44. 6 6
      UICatalog/Scenarios/ListColumns.cs
  45. 3 3
      UICatalog/Scenarios/ListViewWithSelection.cs
  46. 4 4
      UICatalog/Scenarios/ListsAndCombos.cs
  47. 3 3
      UICatalog/Scenarios/Localization.cs
  48. 3 3
      UICatalog/Scenarios/MenuBarScenario.cs
  49. 59 3
      UICatalog/Scenarios/MessageBoxes.cs
  50. 2 2
      UICatalog/Scenarios/Mouse.cs
  51. 4 4
      UICatalog/Scenarios/MultiColouredTable.cs
  52. 4 4
      UICatalog/Scenarios/Navigation.cs
  53. 4 4
      UICatalog/Scenarios/Notepad.cs
  54. 2 2
      UICatalog/Scenarios/NumericUpDownDemo.cs
  55. 2 2
      UICatalog/Scenarios/PosAlignDemo.cs
  56. 2 2
      UICatalog/Scenarios/ProcessTable.cs
  57. 4 4
      UICatalog/Scenarios/Progress.cs
  58. 4 4
      UICatalog/Scenarios/ProgressBarStyles.cs
  59. 2 2
      UICatalog/Scenarios/RunTExample.cs
  60. 4 4
      UICatalog/Scenarios/RuneWidthGreaterThanOne.cs
  61. 4 4
      UICatalog/Scenarios/Scrolling.cs
  62. 2 2
      UICatalog/Scenarios/SendKeys.cs
  63. 3 3
      UICatalog/Scenarios/ShadowStyles.cs
  64. 2 2
      UICatalog/Scenarios/Shortcuts.cs
  65. 4 4
      UICatalog/Scenarios/SingleBackgroundWorker.cs
  66. 2 2
      UICatalog/Scenarios/Sliders.cs
  67. 3 3
      UICatalog/Scenarios/Snake.cs
  68. 3 3
      UICatalog/Scenarios/SpinnerStyles.cs
  69. 4 4
      UICatalog/Scenarios/SyntaxHighlighting.cs
  70. 3 3
      UICatalog/Scenarios/TabViewExample.cs
  71. 5 5
      UICatalog/Scenarios/TableEditor.cs
  72. 4 4
      UICatalog/Scenarios/Text.cs
  73. 2 2
      UICatalog/Scenarios/TextAlignmentAndDirection.cs
  74. 3 3
      UICatalog/Scenarios/TextEffectsScenario.cs
  75. 2 2
      UICatalog/Scenarios/TextFormatterDemo.cs
  76. 4 4
      UICatalog/Scenarios/TextViewAutocompletePopup.cs
  77. 2 2
      UICatalog/Scenarios/Threading.cs
  78. 3 3
      UICatalog/Scenarios/TileViewNesting.cs
  79. 3 3
      UICatalog/Scenarios/TimeAndDate.cs
  80. 3 3
      UICatalog/Scenarios/TreeUseCases.cs
  81. 4 4
      UICatalog/Scenarios/TreeViewFileSystem.cs
  82. 2 2
      UICatalog/Scenarios/TrueColors.cs
  83. 3 3
      UICatalog/Scenarios/Unicode.cs
  84. 5 5
      UICatalog/Scenarios/ViewExperiments.cs
  85. 2 2
      UICatalog/Scenarios/VkeyPacketSimulator.cs
  86. 2 2
      UICatalog/Scenarios/WindowsAndFrameViews.cs
  87. 2 2
      UICatalog/Scenarios/WizardAsView.cs
  88. 4 4
      UICatalog/Scenarios/Wizards.cs
  89. 1 1
      UICatalog/UICatalog.cs

+ 6 - 6
UICatalog/Properties/launchSettings.json

@@ -23,10 +23,6 @@
       "commandLineArgs": "dotnet UICatalog.dll --driver NetDriver",
       "distributionName": ""
     },
-    "Buttons": {
-      "commandName": "Project",
-      "commandLineArgs": "Buttons"
-    },
     "WizardAsView": {
       "commandName": "Project",
       "commandLineArgs": "WizardAsView"
@@ -37,11 +33,11 @@
     },
     "Charmap": {
       "commandName": "Project",
-      "commandLineArgs": "\"Character Map\""
+      "commandLineArgs": "\"Character Map\" -b"
     },
     "All Views Tester": {
       "commandName": "Project",
-      "commandLineArgs": "\"All Views Tester\""
+      "commandLineArgs": "\"All Views Tester\" -b"
     },
     "Windows & FrameViews": {
       "commandName": "Project",
@@ -73,6 +69,10 @@
     "Benchmark All": {
       "commandName": "Project",
       "commandLineArgs": "--benchmark"
+    },
+    "ContextMenus": {
+      "commandName": "Project",
+      "commandLineArgs": "ContextMenus -b"
     }
   }
 }

+ 34 - 76
UICatalog/Scenario.cs

@@ -25,12 +25,12 @@ namespace UICatalog;
 ///             <item>
 ///                 <description>
 ///                     Annotate the <see cref="Scenario"/> derived class with a
-///                     <see cref="Scenario.ScenarioMetadata"/> attribute specifying the scenario's name and description.
+///                     <see cref="ScenarioMetadata"/> attribute specifying the scenario's name and description.
 ///                 </description>
 ///             </item>
 ///             <item>
 ///                 <description>
-///                     Add one or more <see cref="Scenario.ScenarioCategory"/> attributes to the class specifying
+///                     Add one or more <see cref="ScenarioCategory"/> attributes to the class specifying
 ///                     which categories the scenario belongs to. If you don't specify a category the scenario will show up
 ///                     in "_All".
 ///                 </description>
@@ -151,8 +151,9 @@ public class Scenario : IDisposable
     /// </summary>
     public virtual void Main () { }
 
-    private const uint ABORT_TIME = 1000;
-    private const uint MAX_ITERATIONS = 500;
+    private const uint MAX_NATURAL_ITERATIONS = 100; // not including needed for demo keys
+    private const uint ABORT_TIMEOUT_MS = 5000;
+    private const int DEMO_KEY_PACING_MS = 1; // Must be non-zero
 
     private readonly object _timeoutLock = new ();
     private object? _timeout;
@@ -180,13 +181,16 @@ public class Scenario : IDisposable
         return _benchmarkResults;
     }
 
+    private List<Key> _demoKeys;
+    private int _currentDemoKey = 0;
+
     private void OnApplicationOnInitializedChanged (object? s, EventArgs<bool> a)
     {
         if (a.CurrentValue)
         {
             lock (_timeoutLock!)
             {
-                _timeout = Application.AddTimeout (TimeSpan.FromMilliseconds (ABORT_TIME), ForceCloseCallback);
+                _timeout = Application.AddTimeout (TimeSpan.FromMilliseconds (ABORT_TIMEOUT_MS), ForceCloseCallback);
             }
 
             Application.Iteration += OnApplicationOnIteration;
@@ -202,6 +206,7 @@ public class Scenario : IDisposable
             };
             Application.NotifyNewRunState += OnApplicationNotifyNewRunState;
 
+
             _stopwatch = Stopwatch.StartNew ();
         }
         else
@@ -216,7 +221,7 @@ public class Scenario : IDisposable
     private void OnApplicationOnIteration (object? s, IterationEventArgs a)
     {
         BenchmarkResults.IterationCount++;
-        if (BenchmarkResults.IterationCount > MAX_ITERATIONS)
+        if (BenchmarkResults.IterationCount > MAX_NATURAL_ITERATIONS + (_demoKeys.Count* DEMO_KEY_PACING_MS))
         {
             Application.RequestStop ();
         }
@@ -237,6 +242,25 @@ public class Scenario : IDisposable
         }
 
         SubscribeAllSubviews (Application.Top!);
+
+        _currentDemoKey = 0;
+        _demoKeys = GetDemoKeyStrokes ();
+        _demoKeys.Add (Application.QuitKey);
+
+        Application.AddTimeout (
+                                new TimeSpan (0, 0, 0, 0, DEMO_KEY_PACING_MS),
+                                () =>
+                                {
+                                    if (_currentDemoKey >= _demoKeys.Count)
+                                    {
+                                        return false;
+                                    }
+
+                                    Application.RaiseKeyDownEvent (_demoKeys [_currentDemoKey++]);
+
+                                    return true;
+                                });
+
     }
 
     // If the scenario doesn't close within the abort time, this will force it to quit
@@ -250,7 +274,7 @@ public class Scenario : IDisposable
             }
         }
 
-        Debug.WriteLine ($@"  Failed to Quit with {Application.QuitKey} after {ABORT_TIME}ms and {BenchmarkResults.IterationCount} iterations. Force quit.");
+        Debug.WriteLine ($@"  Failed to Quit with {Application.QuitKey} after {ABORT_TIMEOUT_MS}ms and {BenchmarkResults.IterationCount} iterations. Force quit.");
 
         Application.RequestStop ();
 
@@ -298,7 +322,7 @@ public class Scenario : IDisposable
                                                    (current, attrs) => current
                                                                        .Union (
                                                                                attrs.Where (a => a is ScenarioCategory)
-                                                                                    .Select (a => ((Scenario.ScenarioCategory)a).Name))
+                                                                                    .Select (a => ((ScenarioCategory)a).Name))
                                                                        .ToList ());
 
         // Sort
@@ -308,75 +332,9 @@ public class Scenario : IDisposable
         categories.Insert (0, "All Scenarios");
 
         return categories;
-    }
-
-    /// <summary>Defines the category names used to categorize a <see cref="Scenario"/></summary>
-    [AttributeUsage (AttributeTargets.Class, AllowMultiple = true)]
-    public class ScenarioCategory (string name) : System.Attribute
-    {
-        /// <summary>Static helper function to get the <see cref="Scenario"/> Categories given a Type</summary>
-        /// <param name="t"></param>
-        /// <returns>list of category names</returns>
-        public static List<string> GetCategories (Type t)
-        {
-            return GetCustomAttributes (t)
-                   .ToList ()
-                   .Where (a => a is Scenario.ScenarioCategory)
-                   .Select (a => ((Scenario.ScenarioCategory)a).Name)
-                   .ToList ();
-        }
-
-        /// <summary>Static helper function to get the <see cref="Scenario"/> Name given a Type</summary>
-        /// <param name="t"></param>
-        /// <returns>Name of the category</returns>
-        public static string GetName (Type t)
-        {
-            if (GetCustomAttributes (t).FirstOrDefault (a => a is Scenario.ScenarioMetadata) is Scenario.ScenarioMetadata { } metadata)
-            {
-                return metadata.Name;
-            }
 
-            return string.Empty;
-        }
-
-        /// <summary>Category Name</summary>
-        public string Name { get; set; } = name;
     }
 
-    /// <summary>Defines the metadata (Name and Description) for a <see cref="Scenario"/></summary>
-    [AttributeUsage (AttributeTargets.Class)]
-    public class ScenarioMetadata (string name, string description) : System.Attribute
-    {
-        /// <summary><see cref="Scenario"/> Description</summary>
-        public string Description { get; set; } = description;
-
-        /// <summary>Static helper function to get the <see cref="Scenario"/> Description given a Type</summary>
-        /// <param name="t"></param>
-        /// <returns></returns>
-        public static string GetDescription (Type t)
-        {
-            if (GetCustomAttributes (t).FirstOrDefault (a => a is Scenario.ScenarioMetadata) is Scenario.ScenarioMetadata { } metadata)
-            {
-                return metadata.Description;
-            }
-
-            return string.Empty;
-        }
-
-        /// <summary>Static helper function to get the <see cref="Scenario"/> Name given a Type</summary>
-        /// <param name="t"></param>
-        /// <returns></returns>
-        public static string GetName (Type t)
-        {
-            if (GetCustomAttributes (t).FirstOrDefault (a => a is Scenario.ScenarioMetadata) is Scenario.ScenarioMetadata { } metadata)
-            {
-                return metadata.Name;
-            }
-
-            return string.Empty;
-        }
+    public virtual List<Key> GetDemoKeyStrokes () => new List<Key> ();
 
-        /// <summary><see cref="Scenario"/> Name</summary>
-        public string Name { get; set; } = name;
-    }
-}
+}

+ 39 - 0
UICatalog/ScenarioCategory.cs

@@ -0,0 +1,39 @@
+#nullable enable
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace UICatalog;
+
+/// <summary>Defines the category names used to categorize a <see cref="Scenario"/></summary>
+[AttributeUsage (AttributeTargets.Class, AllowMultiple = true)]
+public class ScenarioCategory (string name) : System.Attribute
+{
+    /// <summary>Static helper function to get the <see cref="Scenario"/> Categories given a Type</summary>
+    /// <param name="t"></param>
+    /// <returns>list of category names</returns>
+    public static List<string> GetCategories (Type t)
+    {
+        return GetCustomAttributes (t)
+               .ToList ()
+               .Where (a => a is ScenarioCategory)
+               .Select<System.Attribute, string> (a => ((ScenarioCategory)a).Name)
+               .ToList ();
+    }
+
+    /// <summary>Static helper function to get the <see cref="Scenario"/> Name given a Type</summary>
+    /// <param name="t"></param>
+    /// <returns>Name of the category</returns>
+    public static string GetName (Type t)
+    {
+        if (GetCustomAttributes (t).FirstOrDefault (a => a is ScenarioMetadata) is ScenarioMetadata { } metadata)
+        {
+            return metadata.Name;
+        }
+
+        return string.Empty;
+    }
+
+    /// <summary>Category Name</summary>
+    public string Name { get; set; } = name;
+}

+ 42 - 0
UICatalog/ScenarioMetadata.cs

@@ -0,0 +1,42 @@
+#nullable enable
+using System;
+using System.Linq;
+
+namespace UICatalog;
+
+/// <summary>Defines the metadata (Name and Description) for a <see cref="Scenario"/></summary>
+[AttributeUsage (AttributeTargets.Class)]
+public class ScenarioMetadata (string name, string description) : System.Attribute
+{
+    /// <summary><see cref="Scenario"/> Description</summary>
+    public string Description { get; set; } = description;
+
+    /// <summary>Static helper function to get the <see cref="Scenario"/> Description given a Type</summary>
+    /// <param name="t"></param>
+    /// <returns></returns>
+    public static string GetDescription (Type t)
+    {
+        if (GetCustomAttributes (t).FirstOrDefault (a => a is ScenarioMetadata) is ScenarioMetadata { } metadata)
+        {
+            return metadata.Description;
+        }
+
+        return string.Empty;
+    }
+
+    /// <summary>Static helper function to get the <see cref="Scenario"/> Name given a Type</summary>
+    /// <param name="t"></param>
+    /// <returns></returns>
+    public static string GetName (Type t)
+    {
+        if (GetCustomAttributes (t).FirstOrDefault (a => a is ScenarioMetadata) is ScenarioMetadata { } metadata)
+        {
+            return metadata.Name;
+        }
+
+        return string.Empty;
+    }
+
+    /// <summary><see cref="Scenario"/> Name</summary>
+    public string Name { get; set; } = name;
+}

+ 2 - 2
UICatalog/Scenarios/ASCIICustomButton.cs

@@ -7,8 +7,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ASCIICustomButtonTest", "ASCIICustomButton sample")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("ASCIICustomButtonTest", "ASCIICustomButton sample")]
+[ScenarioCategory ("Controls")]
 public class ASCIICustomButtonTest : Scenario
 {
     private static bool _smallerWindow;

+ 3 - 3
UICatalog/Scenarios/Adornments.cs

@@ -2,9 +2,9 @@
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Adornments Demo", "Demonstrates Margin, Border, and Padding on Views.")]
-[Scenario.ScenarioCategory ("Layout")]
-[Scenario.ScenarioCategory ("Adornments")]
+[ScenarioMetadata ("Adornments Demo", "Demonstrates Margin, Border, and Padding on Views.")]
+[ScenarioCategory ("Layout")]
+[ScenarioCategory ("Adornments")]
 public class Adornments : Scenario
 {
     public override void Main ()

+ 12 - 0
UICatalog/Scenarios/AllViewsTester.cs

@@ -336,4 +336,16 @@ public class AllViewsTester : Scenario
 
         UpdateHostTitle (view);
     }
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        for (int i = 0; i < GetAllViewClassesCollection ().Count; i++)
+        {
+            keys.Add (Key.CursorDown);
+        }
+
+        return keys;
+    }
 }

+ 3 - 3
UICatalog/Scenarios/AnimationScenario/AnimationScenario.cs

@@ -10,9 +10,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Animation", "Demonstration of how to render animated images with threading.")]
-[Scenario.ScenarioCategory ("Threading")]
-[Scenario.ScenarioCategory ("Drawing")]
+[ScenarioMetadata ("Animation", "Demonstration of how to render animated images with threading.")]
+[ScenarioCategory ("Threading")]
+[ScenarioCategory ("Drawing")]
 public class AnimationScenario : Scenario
 {
     private bool _isDisposed;

+ 57 - 1
UICatalog/Scenarios/Arrangement.cs

@@ -1,4 +1,5 @@
-using Terminal.Gui;
+using System.Collections.Generic;
+using Terminal.Gui;
 using Timer = System.Timers.Timer;
 
 namespace UICatalog.Scenarios;
@@ -68,8 +69,10 @@ public class Arrangement : Scenario
         View overlappedView1 = CreateOverlappedView (2, 0, 13);
         overlappedView1.Title = "Movable _& Sizable";
         View tiledSubView = CreateTiledView (4, 0, 2);
+        tiledSubView.Arrangement = ViewArrangement.Fixed;
         overlappedView1.Add (tiledSubView);
         tiledSubView = CreateTiledView (5, Pos.Right (tiledSubView), Pos.Top (tiledSubView));
+        tiledSubView.Arrangement = ViewArrangement.Fixed;
         overlappedView1.Add (tiledSubView);
 
         ProgressBar progressBar = new ()
@@ -242,4 +245,57 @@ public class Arrangement : Scenario
     }
 
     private char GetNextHotKey () { return (char)('A' + _hotkeyCount++); }
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        // Select view with progress bar
+        keys.Add ((Key)'&');
+
+        keys.Add (Application.ArrangeKey);
+
+        for (int i = 0; i < 8; i++)
+        {
+            keys.Add (Key.CursorUp);
+        }
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorRight);
+        }
+
+        keys.Add (Application.ArrangeKey);
+
+        keys.Add (Key.S);
+
+        keys.Add (Application.ArrangeKey);
+
+        for (int i = 0; i < 10; i++)
+        {
+            keys.Add (Key.CursorUp);
+        }
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorLeft);
+        }
+
+        keys.Add (Application.ArrangeKey);
+
+        // Select view with progress bar
+        keys.Add ((Key)'&');
+
+        keys.Add (Application.ArrangeKey);
+
+        keys.Add (Key.Tab);
+
+        for (int i = 0; i < 10; i++)
+        {
+            keys.Add (Key.CursorRight);
+            keys.Add (Key.CursorDown);
+        }
+
+        return keys;
+    }
 }

+ 2 - 2
UICatalog/Scenarios/Bars.cs

@@ -8,8 +8,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Bars", "Illustrates Bar views (e.g. StatusBar)")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("Bars", "Illustrates Bar views (e.g. StatusBar)")]
+[ScenarioCategory ("Controls")]
 public class Bars : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/Buttons.cs

@@ -7,9 +7,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Buttons", "Demonstrates all sorts of Buttons.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Layout")]
+[ScenarioMetadata ("Buttons", "Demonstrates all sorts of Buttons.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Layout")]
 public class Buttons : Scenario
 {
     public override void Main ()

+ 31 - 7
UICatalog/Scenarios/CharacterMap.cs

@@ -21,12 +21,12 @@ namespace UICatalog.Scenarios;
 ///     "Character Map" application (like Windows' charmap.exe). - Helps test unicode character rendering in Terminal.Gui -
 ///     Illustrates how to do infinite scrolling
 /// </summary>
-[Scenario.ScenarioMetadata ("Character Map", "Unicode viewer demonstrating infinite content, scrolling, and Unicode.")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Drawing")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Layout")]
-[Scenario.ScenarioCategory ("Scrolling")]
+[ScenarioMetadata ("Character Map", "Unicode viewer demonstrating infinite content, scrolling, and Unicode.")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Drawing")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Layout")]
+[ScenarioCategory ("Scrolling")]
 
 public class CharacterMap : Scenario
 {
@@ -306,9 +306,33 @@ public class CharacterMap : Scenario
         return item;
     }
 
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        for (int i = 0; i < 200; i++)
+        {
+            keys.Add (Key.CursorDown);
+        }
+
+        // Category table
+        keys.Add (Key.Tab.WithShift);
+
+        // Block elements
+        keys.Add (Key.B);
+        keys.Add (Key.L);
+
+        keys.Add (Key.Tab);
+
+        for (int i = 0; i < 200; i++)
+        {
+            keys.Add (Key.CursorLeft);
+        }
+        return keys;
+    }
 }
 
-internal class CharMap : View
+internal class CharMap : View, IDesignable
 {
     private const int COLUMN_WIDTH = 3;
 

+ 2 - 2
UICatalog/Scenarios/ChineseUI.cs

@@ -2,8 +2,8 @@
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ChineseUI", "Chinese UI")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("ChineseUI", "Chinese UI")]
+[ScenarioCategory ("Text and Formatting")]
 public class ChineseUI : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/ClassExplorer.cs

@@ -7,9 +7,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Class Explorer", "Tree view explorer for classes by namespace based on TreeView.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("TreeView")]
+[ScenarioMetadata ("Class Explorer", "Tree view explorer for classes by namespace based on TreeView.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("TreeView")]
 public class ClassExplorer : Scenario
 {
     private MenuItem _highlightModelTextOnly;

+ 33 - 5
UICatalog/Scenarios/Clipping.cs

@@ -1,11 +1,12 @@
-using Terminal.Gui;
+using System.Collections.Generic;
+using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Clipping", "Used to test that things clip correctly")]
-[Scenario.ScenarioCategory ("Tests")]
-[Scenario.ScenarioCategory ("Drawing")]
-[Scenario.ScenarioCategory ("Scrolling")]
+[ScenarioMetadata ("Clipping", "Used to test that things clip correctly")]
+[ScenarioCategory ("Tests")]
+[ScenarioCategory ("Drawing")]
+[ScenarioCategory ("Scrolling")]
 public class Clipping : Scenario
 {
     public override void Main ()
@@ -82,4 +83,31 @@ public class Clipping : Scenario
         win.Dispose ();
         Application.Shutdown ();
     }
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorDown);
+        }
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorRight);
+        }
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorLeft);
+        }
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorUp);
+        }
+
+        return keys;
+    }
 }

+ 6 - 6
UICatalog/Scenarios/CollectionNavigatorTester.cs

@@ -6,15 +6,15 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata (
+[ScenarioMetadata (
                                "Collection Navigator",
                                "Demonstrates keyboard navigation in ListView & TreeView (CollectionNavigator)."
                            )]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("ListView")]
-[Scenario.ScenarioCategory ("TreeView")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("ListView")]
+[ScenarioCategory ("TreeView")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public class CollectionNavigatorTester : Scenario
 {
     private ObservableCollection<string> _items = new ObservableCollection<string> (new ObservableCollection<string> ()

+ 40 - 3
UICatalog/Scenarios/ColorPicker.cs

@@ -1,11 +1,12 @@
 using System;
+using System.Collections.Generic;
 using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Color Picker", "Color Picker.")]
-[Scenario.ScenarioCategory ("Colors")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("ColorPicker", "Color Picker.")]
+[ScenarioCategory ("Colors")]
+[ScenarioCategory ("Controls")]
 public class ColorPickers : Scenario
 {
     /// <summary>Background color Label.</summary>
@@ -270,4 +271,40 @@ public class ColorPickers : Scenario
                                    )
         };
     }
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        keys.Add (Key.B.WithAlt);
+
+        for (int i = 0; i < 200; i++)
+        {
+            keys.Add (Key.CursorRight);
+        }
+
+        keys.Add (Key.Tab);
+        keys.Add (Key.Tab);
+
+        for (int i = 0; i < 200; i++)
+        {
+            keys.Add (Key.CursorLeft);
+        }
+
+        keys.Add (Key.Tab);
+        keys.Add (Key.Tab);
+
+        for (int i = 0; i < 200; i++)
+        {
+            keys.Add (Key.CursorLeft);
+        }
+
+        keys.Add (Key.N.WithAlt);
+        keys.Add (Key.R.WithAlt);
+        keys.Add (Key.H.WithAlt);
+        keys.Add (Key.S.WithAlt);
+        keys.Add (Key.D1.WithAlt);
+
+        return keys;
+    }
 }

+ 2 - 2
UICatalog/Scenarios/CombiningMarks.cs

@@ -2,8 +2,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Combining Marks", "Illustrates how Unicode Combining Marks work (or don't).")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("Combining Marks", "Illustrates how Unicode Combining Marks work (or don't).")]
+[ScenarioCategory ("Text and Formatting")]
 public class CombiningMarks : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/ComboBoxIteration.cs

@@ -4,9 +4,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ComboBoxIteration", "ComboBox iteration.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("ComboBox")]
+[ScenarioMetadata ("ComboBoxIteration", "ComboBox iteration.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("ComboBox")]
 public class ComboBoxIteration : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/ComputedLayout.cs

@@ -9,8 +9,8 @@ namespace UICatalog.Scenarios;
 /// <summary>
 ///     This Scenario demonstrates how to use Terminal.Gui's Dim and Pos Layout System. 
 /// </summary>
-[Scenario.ScenarioMetadata ("Computed Layout", "Demonstrates the Computed (Dim and Pos) Layout System.")]
-[Scenario.ScenarioCategory ("Layout")]
+[ScenarioMetadata ("Computed Layout", "Demonstrates the Computed (Dim and Pos) Layout System.")]
+[ScenarioCategory ("Layout")]
 public class ComputedLayout : Scenario
 {
     public override void Main ()

+ 5 - 5
UICatalog/Scenarios/ConfigurationEditor.cs

@@ -6,11 +6,11 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Configuration Editor", "Edits Terminal.Gui Config Files.")]
-[Scenario.ScenarioCategory ("TabView")]
-[Scenario.ScenarioCategory ("Colors")]
-[Scenario.ScenarioCategory ("Files and IO")]
-[Scenario.ScenarioCategory ("TextView")]
+[ScenarioMetadata ("Configuration Editor", "Edits Terminal.Gui Config Files.")]
+[ScenarioCategory ("TabView")]
+[ScenarioCategory ("Colors")]
+[ScenarioCategory ("Files and IO")]
+[ScenarioCategory ("TextView")]
 public class ConfigurationEditor : Scenario
 {
     private static ColorScheme _editorColorScheme = new ()

+ 31 - 4
UICatalog/Scenarios/ContentScrolling.cs

@@ -5,10 +5,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Content Scrolling", "Demonstrates using View.Viewport and View.GetContentSize () to scroll content.")]
-[Scenario.ScenarioCategory ("Layout")]
-[Scenario.ScenarioCategory ("Drawing")]
-[Scenario.ScenarioCategory ("Scrolling")]
+[ScenarioMetadata ("Content Scrolling", "Demonstrates using View.Viewport and View.GetContentSize () to scroll content.")]
+[ScenarioCategory ("Layout")]
+[ScenarioCategory ("Drawing")]
+[ScenarioCategory ("Scrolling")]
 public class ContentScrolling : Scenario
 {
     private ViewDiagnosticFlags _diagnosticFlags;
@@ -425,4 +425,31 @@ public class ContentScrolling : Scenario
         app.Dispose ();
         Application.Shutdown ();
     }
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        for (int i = 0; i < 50; i++)
+        {
+            keys.Add (Key.CursorRight);
+        }
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorLeft);
+        }
+
+        for (int i = 0; i < 50; i++)
+        {
+            keys.Add (Key.CursorDown);
+        }
+
+        for (int i = 0; i < 25; i++)
+        {
+            keys.Add (Key.CursorUp);
+        }
+
+        return keys;
+    }
 }

+ 48 - 3
UICatalog/Scenarios/ContextMenus.cs

@@ -5,11 +5,11 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ContextMenus", "Context Menu Sample.")]
-[Scenario.ScenarioCategory ("Menus")]
+[ScenarioMetadata ("ContextMenus", "Context Menu Sample.")]
+[ScenarioCategory ("Menus")]
 public class ContextMenus : Scenario
 {
-    private readonly List<CultureInfo> _cultureInfos = Application.SupportedCultures;
+    private List<CultureInfo> _cultureInfos = null;
     private ContextMenu _contextMenu = new ();
     private bool _forceMinimumPosToZero = true;
     private MenuItem _miForceMinimumPosToZero;
@@ -22,6 +22,7 @@ public class ContextMenus : Scenario
         // Init
         Application.Init ();
 
+        _cultureInfos = Application.SupportedCultures;
         // Setup - Create a top-level application window and configure it.
         Window appWindow = new ()
         {
@@ -110,6 +111,11 @@ public class ContextMenus : Scenario
         List<MenuItem> supportedCultures = new ();
         int index = -1;
 
+        if (_cultureInfos == null)
+        {
+            return supportedCultures.ToArray ();
+        }
+
         foreach (CultureInfo c in _cultureInfos)
         {
             var culture = new MenuItem { CheckType = MenuItemCheckStyle.Checked };
@@ -283,4 +289,43 @@ public class ContextMenus : Scenario
 
         _contextMenu.Show (menuItems);
     }
+
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        keys.Add (Key.F10.WithShift);
+        keys.Add (Key.Esc);
+
+        keys.Add (Key.Space.WithCtrl);
+        keys.Add (Key.CursorDown);
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.F10.WithShift);
+        keys.Add (Key.Esc);
+
+        keys.Add (Key.Tab);
+
+        keys.Add (Key.Space.WithCtrl);
+        keys.Add (Key.CursorDown);
+        keys.Add (Key.CursorDown);
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.F10.WithShift);
+        keys.Add (Key.Esc);
+
+        keys.Add (Key.Tab);
+
+        keys.Add (Key.Space.WithCtrl);
+        keys.Add (Key.CursorDown);
+        keys.Add (Key.CursorDown);
+        keys.Add (Key.CursorDown);
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.F10.WithShift);
+        keys.Add (Key.Esc);
+
+        return keys;
+    }
 }

+ 9 - 9
UICatalog/Scenarios/CsvEditor.cs

@@ -9,15 +9,15 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Csv Editor", "Open and edit simple CSV files using the TableView class.")]
-[Scenario.ScenarioCategory ("TableView")]
-[Scenario.ScenarioCategory ("TextView")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Arrangement")]
-[Scenario.ScenarioCategory ("Files and IO")]
+[ScenarioMetadata ("Csv Editor", "Open and edit simple CSV files using the TableView class.")]
+[ScenarioCategory ("TableView")]
+[ScenarioCategory ("TextView")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Arrangement")]
+[ScenarioCategory ("Files and IO")]
 public class CsvEditor : Scenario
 {
     private string _currentFile;

+ 3 - 3
UICatalog/Scenarios/DatePickers.cs

@@ -2,9 +2,9 @@
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Date Picker", "Demonstrates how to use DatePicker class")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("DateTime")]
+[ScenarioMetadata ("Date Picker", "Demonstrates how to use DatePicker class")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("DateTime")]
 public class DatePickers : Scenario
 {
     public override void Main ()

+ 55 - 2
UICatalog/Scenarios/Dialogs.cs

@@ -5,8 +5,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Dialogs", "Demonstrates how to the Dialog class")]
-[Scenario.ScenarioCategory ("Dialogs")]
+[ScenarioMetadata ("Dialogs", "Demonstrates how to the Dialog class")]
+[ScenarioCategory ("Dialogs")]
 public class Dialogs : Scenario
 {
     private static readonly int CODE_POINT = '你'; // We know this is a wide char
@@ -353,4 +353,57 @@ public class Dialogs : Scenario
 
         return dialog;
     }
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        keys.Add (Key.D6);
+        keys.Add (Key.D5);
+
+        keys.Add (Key.Tab);
+        keys.Add (Key.D2);
+        keys.Add (Key.D0);
+
+        keys.Add (Key.Enter);
+        for (int i = 0; i < 5; i++)
+        {
+            keys.Add (Key.A);
+        }
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.S.WithAlt);
+        keys.Add (Key.Enter);
+        for (int i = 0; i < 5; i++)
+        {
+            keys.Add (Key.A);
+        }
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.E.WithAlt);
+        keys.Add (Key.Enter);
+        for (int i = 0; i < 5; i++)
+        {
+            keys.Add (Key.A);
+        }
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.C.WithAlt);
+        keys.Add (Key.Enter);
+        for (int i = 0; i < 5; i++)
+        {
+            keys.Add (Key.A);
+        }
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.F.WithAlt);
+        keys.Add (Key.Enter);
+        for (int i = 0; i < 5; i++)
+        {
+            keys.Add (Key.A);
+        }
+        keys.Add (Key.Enter);
+
+        return keys;
+    }
 }

+ 2 - 2
UICatalog/Scenarios/DimAutoDemo.cs

@@ -4,8 +4,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("DimAuto", "Demonstrates Dim.Auto")]
-[Scenario.ScenarioCategory ("Layout")]
+[ScenarioMetadata ("DimAuto", "Demonstrates Dim.Auto")]
+[ScenarioCategory ("Layout")]
 public class DimAutoDemo : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/DynamicMenuBar.cs

@@ -8,9 +8,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Dynamic MenuBar", "Demonstrates how to change a MenuBar dynamically.")]
-[Scenario.ScenarioCategory ("Arrangement")]
-[Scenario.ScenarioCategory ("Menus")]
+[ScenarioMetadata ("Dynamic MenuBar", "Demonstrates how to change a MenuBar dynamically.")]
+[ScenarioCategory ("Arrangement")]
+[ScenarioCategory ("Menus")]
 public class DynamicMenuBar : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/DynamicStatusBar.cs

@@ -9,8 +9,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Dynamic StatusBar", "Demonstrates how to add and remove a StatusBar and change items dynamically.")]
-[Scenario.ScenarioCategory ("Arrangement")]
+[ScenarioMetadata ("Dynamic StatusBar", "Demonstrates how to add and remove a StatusBar and change items dynamically.")]
+[ScenarioCategory ("Arrangement")]
 public class DynamicStatusBar : Scenario
 {
     public override void Main ()

+ 8 - 8
UICatalog/Scenarios/Editor.cs

@@ -12,14 +12,14 @@ using static UICatalog.Scenarios.DynamicMenuBar;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Editor", "A Text Editor using the TextView control.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Arrangement")]
-[Scenario.ScenarioCategory ("Files and IO")]
-[Scenario.ScenarioCategory ("TextView")]
-[Scenario.ScenarioCategory ("Menus")]
+[ScenarioMetadata ("Editor", "A Text Editor using the TextView control.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Arrangement")]
+[ScenarioCategory ("Files and IO")]
+[ScenarioCategory ("TextView")]
+[ScenarioCategory ("Menus")]
 public class Editor : Scenario
 {
     private Window _appWindow;

+ 3 - 3
UICatalog/Scenarios/FileDialogExamples.cs

@@ -7,9 +7,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("FileDialog", "Demonstrates how to the FileDialog class")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Files and IO")]
+[ScenarioMetadata ("FileDialog", "Demonstrates how to the FileDialog class")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Files and IO")]
 public class FileDialogExamples : Scenario
 {
     private CheckBox _cbAllowMultipleSelection;

+ 2 - 2
UICatalog/Scenarios/Generic.cs

@@ -2,8 +2,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Generic", "Generic sample - A template for creating new Scenarios")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("Generic", "Generic sample - A template for creating new Scenarios")]
+[ScenarioCategory ("Controls")]
 public sealed class Generic : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/GraphViewExample.cs

@@ -8,9 +8,9 @@ using Application = Terminal.Gui.Application;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Graph View", "Demos the GraphView control.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Drawing")]
+[ScenarioMetadata ("Graph View", "Demos the GraphView control.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Drawing")]
 public class GraphViewExample : Scenario
 {
     private readonly Thickness _thickness = new (1, 1, 1, 1);

+ 6 - 6
UICatalog/Scenarios/HexEditor.cs

@@ -4,12 +4,12 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("HexEditor", "A binary (hex) editor using the HexView control.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Navigation")]
-[Scenario.ScenarioCategory ("Files and IO")]
+[ScenarioMetadata ("HexEditor", "A binary (hex) editor using the HexView control.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Navigation")]
+[ScenarioCategory ("Files and IO")]
 public class HexEditor : Scenario
 {
     private string _fileName = "demo.bin";

+ 3 - 3
UICatalog/Scenarios/HotKeys.cs

@@ -2,9 +2,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("HotKeys", "Demonstrates how HotKeys work.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioMetadata ("HotKeys", "Demonstrates how HotKeys work.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public class HotKeys : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/Images.cs

@@ -10,9 +10,9 @@ using Color = Terminal.Gui.Color;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Images", "Demonstration of how to render an image with/without true color support.")]
-[Scenario.ScenarioCategory ("Colors")]
-[Scenario.ScenarioCategory ("Drawing")]
+[ScenarioMetadata ("Images", "Demonstration of how to render an image with/without true color support.")]
+[ScenarioCategory ("Colors")]
+[ScenarioCategory ("Drawing")]
 public class Images : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/InteractiveTree.cs

@@ -3,9 +3,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Interactive Tree", "Create nodes and child nodes in TreeView.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("TreeView")]
+[ScenarioMetadata ("Interactive Tree", "Create nodes and child nodes in TreeView.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("TreeView")]
 public class InteractiveTree : Scenario
 {
     private TreeView _treeView;

+ 3 - 3
UICatalog/Scenarios/InvertColors.cs

@@ -5,9 +5,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Invert Colors", "Invert the foreground and the background colors.")]
-[Scenario.ScenarioCategory ("Colors")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("Invert Colors", "Invert the foreground and the background colors.")]
+[ScenarioCategory ("Colors")]
+[ScenarioCategory ("Text and Formatting")]
 public class InvertColors : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/KeyBindings.cs

@@ -7,8 +7,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("KeyBindings", "Illustrates the KeyBindings API.")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioMetadata ("KeyBindings", "Illustrates the KeyBindings API.")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public sealed class KeyBindings : Scenario
 {
     private readonly ObservableCollection<string> _focusedBindings = [];

+ 2 - 2
UICatalog/Scenarios/Keys.cs

@@ -3,8 +3,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Keys", "Shows keyboard input handling.")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioMetadata ("Keys", "Shows keyboard input handling.")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public class Keys : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/LineCanvasExperiment.cs

@@ -2,10 +2,10 @@
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("LineCanvas Experiments", "Experiments with LineCanvas")]
-[Scenario.ScenarioCategory ("Drawing")]
-[Scenario.ScenarioCategory ("Adornments")]
-[Scenario.ScenarioCategory ("Proof of Concept")]
+[ScenarioMetadata ("LineCanvas Experiments", "Experiments with LineCanvas")]
+[ScenarioCategory ("Drawing")]
+[ScenarioCategory ("Adornments")]
+[ScenarioCategory ("Proof of Concept")]
 public class LineCanvasExperiment : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/LineDrawing.cs

@@ -101,9 +101,9 @@ internal class DrawLineTool : ITool
     }
 }
 
-[Scenario.ScenarioMetadata ("Line Drawing", "Demonstrates LineCanvas.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Drawing")]
+[ScenarioMetadata ("Line Drawing", "Demonstrates LineCanvas.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Drawing")]
 public class LineDrawing : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/LineViewExample.cs

@@ -4,10 +4,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Line View", "Demonstrates drawing lines using the LineView control.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("LineView")]
-[Scenario.ScenarioCategory ("Adornments")]
+[ScenarioMetadata ("Line View", "Demonstrates drawing lines using the LineView control.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("LineView")]
+[ScenarioCategory ("Adornments")]
 public class LineViewExample : Scenario
 {
     public override void Main ()

+ 6 - 6
UICatalog/Scenarios/ListColumns.cs

@@ -6,12 +6,12 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ListColumns", "Implements a columned list via a data table.")]
-[Scenario.ScenarioCategory ("TableView")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Scrolling")]
+[ScenarioMetadata ("ListColumns", "Implements a columned list via a data table.")]
+[ScenarioCategory ("TableView")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Scrolling")]
 public class ListColumns : Scenario
 {
     private ColorScheme _alternatingColorScheme;

+ 3 - 3
UICatalog/Scenarios/ListViewWithSelection.cs

@@ -10,9 +10,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("List View With Selection", "ListView with columns and selection")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("ListView")]
+[ScenarioMetadata ("List View With Selection", "ListView with columns and selection")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("ListView")]
 public class ListViewWithSelection : Scenario
 {
     private CheckBox _allowMarkingCB;

+ 4 - 4
UICatalog/Scenarios/ListsAndCombos.cs

@@ -6,10 +6,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ListView & ComboBox", "Demonstrates a ListView populating a ComboBox that acts as a filter.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("ListView")]
-[Scenario.ScenarioCategory ("ComboBox")]
+[ScenarioMetadata ("ListView & ComboBox", "Demonstrates a ListView populating a ComboBox that acts as a filter.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("ListView")]
+[ScenarioCategory ("ComboBox")]
 public class ListsAndCombos : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/Localization.cs

@@ -6,9 +6,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Localization", "Test for localization resources.")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Tests")]
+[ScenarioMetadata ("Localization", "Test for localization resources.")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Tests")]
 public class Localization : Scenario
 {
     private CheckBox _allowAnyCheckBox;

+ 3 - 3
UICatalog/Scenarios/MenuBarScenario.cs

@@ -4,9 +4,9 @@ using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("MenuBar", "Demonstrates the MenuBar using the demo menu.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Menus")]
+[ScenarioMetadata ("MenuBar", "Demonstrates the MenuBar using the demo menu.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Menus")]
 public class MenuBarScenario : Scenario
 {
     private Label _currentMenuBarItem;

+ 59 - 3
UICatalog/Scenarios/MessageBoxes.cs

@@ -1,12 +1,13 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("MessageBoxes", "Demonstrates how to use the MessageBox class.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Dialogs")]
+[ScenarioMetadata ("MessageBoxes", "Demonstrates how to use the MessageBox class.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Dialogs")]
 public class MessageBoxes : Scenario
 {
     public override void Main ()
@@ -287,4 +288,59 @@ public class MessageBoxes : Scenario
 
         Application.Shutdown ();
     }
+
+
+    public override List<Key> GetDemoKeyStrokes ()
+    {
+        var keys = new List<Key> ();
+
+        keys.Add (Key.S.WithAlt);
+        keys.Add (Key.Esc);
+
+        keys.Add (Key.E.WithAlt);
+        keys.Add (Key.S.WithAlt);
+        keys.Add (Key.Esc);
+
+        keys.Add (Key.N.WithAlt);
+        keys.Add (Key.D5);
+        keys.Add (Key.S.WithAlt);
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.T.WithAlt);
+        keys.Add (Key.T.WithCtrl);
+        keys.AddRange (GetKeysFromText ("This is a really long title"));
+        keys.Add (Key.M.WithAlt);
+        keys.Add (Key.T.WithCtrl);
+        keys.AddRange (GetKeysFromText ("This is a long,\nmulti-line message.\nThis is a test of the emergency\nbroadcast\nsystem."));
+        keys.Add (Key.S.WithAlt);
+
+        for (int i = 0; i < 10; i++)
+        {
+            keys.Add (Key.Tab);
+        }
+        keys.Add (Key.Enter);
+
+        keys.Add (Key.W.WithAlt);
+        keys.Add (Key.S.WithAlt);
+
+        for (int i = 0; i < 10; i++)
+        {
+            keys.Add (Key.Tab);
+        }
+        keys.Add (Key.Enter);
+
+        return keys;
+    }
+
+    List<Key> GetKeysFromText (string text)
+    {
+        List<Key> keys = new ();
+
+        foreach (var r in text)
+        {
+            keys.Add (r);
+        }
+
+        return keys;
+    }
 }

+ 2 - 2
UICatalog/Scenarios/Mouse.cs

@@ -6,8 +6,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Mouse", "Demonstrates how to capture mouse events")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioMetadata ("Mouse", "Demonstrates how to capture mouse events")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public class Mouse : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/MultiColouredTable.cs

@@ -5,10 +5,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("MultiColouredTable", "Demonstrates how to multi color cell contents.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Colors")]
-[Scenario.ScenarioCategory ("TableView")]
+[ScenarioMetadata ("MultiColouredTable", "Demonstrates how to multi color cell contents.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Colors")]
+[ScenarioCategory ("TableView")]
 public class MultiColouredTable : Scenario
 {
     private DataTable _table;

+ 4 - 4
UICatalog/Scenarios/Navigation.cs

@@ -3,10 +3,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Navigation", "Navigation Tester")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
-[Scenario.ScenarioCategory ("Layout")]
-[Scenario.ScenarioCategory ("Navigation")]
+[ScenarioMetadata ("Navigation", "Navigation Tester")]
+[ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioCategory ("Layout")]
+[ScenarioCategory ("Navigation")]
 public class Navigation : Scenario
 {
     private int _hotkeyCount;

+ 4 - 4
UICatalog/Scenarios/Notepad.cs

@@ -4,10 +4,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Notepad", "Multi-tab text editor using the TabView control.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("TabView")]
-[Scenario.ScenarioCategory ("TextView")]
+[ScenarioMetadata ("Notepad", "Multi-tab text editor using the TabView control.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("TabView")]
+[ScenarioCategory ("TextView")]
 public class Notepad : Scenario
 {
     private TabView _focusedTabView;

+ 2 - 2
UICatalog/Scenarios/NumericUpDownDemo.cs

@@ -4,8 +4,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("NumericUpDown", "Demonstrates the NumericUpDown View")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("NumericUpDown", "Demonstrates the NumericUpDown View")]
+[ScenarioCategory ("Controls")]
 public class NumericUpDownDemo : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/PosAlignDemo.cs

@@ -5,8 +5,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Pos.Align", "Demonstrates Pos.Align")]
-[Scenario.ScenarioCategory ("Layout")]
+[ScenarioMetadata ("Pos.Align", "Demonstrates Pos.Align")]
+[ScenarioCategory ("Layout")]
 public sealed class PosAlignDemo : Scenario
 {
     private readonly Aligner _horizAligner = new () { AlignmentModes = AlignmentModes.StartToEnd | AlignmentModes.AddSpaceBetweenItems};

+ 2 - 2
UICatalog/Scenarios/ProcessTable.cs

@@ -5,8 +5,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ProcessTable", "Demonstrates TableView with the currently running processes.")]
-[Scenario.ScenarioCategory ("TableView")]
+[ScenarioMetadata ("ProcessTable", "Demonstrates TableView with the currently running processes.")]
+[ScenarioCategory ("TableView")]
 public class ProcessTable : Scenario
 {
     private TableView tableView;

+ 4 - 4
UICatalog/Scenarios/Progress.cs

@@ -9,10 +9,10 @@ namespace UICatalog.Scenarios;
 // 
 // This would be a great scenario to show of threading (Issue #471)
 //
-[Scenario.ScenarioMetadata ("Progress", "Shows off ProgressBar and Threading.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Threading")]
-[Scenario.ScenarioCategory ("Progress")]
+[ScenarioMetadata ("Progress", "Shows off ProgressBar and Threading.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Threading")]
+[ScenarioCategory ("Progress")]
 public class Progress : Scenario
 {
     private Window win;

+ 4 - 4
UICatalog/Scenarios/ProgressBarStyles.cs

@@ -9,10 +9,10 @@ using static UICatalog.Scenarios.Adornments;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ProgressBar Styles", "Shows the ProgressBar Styles.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Progress")]
-[Scenario.ScenarioCategory ("Threading")]
+[ScenarioMetadata ("ProgressBar Styles", "Shows the ProgressBar Styles.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Progress")]
+[ScenarioCategory ("Threading")]
 
 // TODO: Add enable/disable to show that that is working
 // TODO: Clean up how FramesEditor works 

+ 2 - 2
UICatalog/Scenarios/RunTExample.cs

@@ -2,8 +2,8 @@
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Run<T> Example", "Illustrates using Application.Run<T> to run a custom class")]
-[Scenario.ScenarioCategory ("Runnable")]
+[ScenarioMetadata ("Run<T> Example", "Illustrates using Application.Run<T> to run a custom class")]
+[ScenarioCategory ("Runnable")]
 public class RunTExample : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/RuneWidthGreaterThanOne.cs

@@ -3,10 +3,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("RuneWidthGreaterThanOne", "Test rune width greater than one")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Tests")]
+[ScenarioMetadata ("RuneWidthGreaterThanOne", "Test rune width greater than one")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Tests")]
 public class RuneWidthGreaterThanOne : Scenario
 {
     private Button _button;

+ 4 - 4
UICatalog/Scenarios/Scrolling.cs

@@ -3,10 +3,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Scrolling", "Demonstrates scrolling etc...")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Scrolling")]
-[Scenario.ScenarioCategory ("Tests")]
+[ScenarioMetadata ("Scrolling", "Demonstrates scrolling etc...")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Scrolling")]
+[ScenarioCategory ("Tests")]
 public class Scrolling : Scenario
 {
     private ViewDiagnosticFlags _diagnosticFlags;

+ 2 - 2
UICatalog/Scenarios/SendKeys.cs

@@ -3,8 +3,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("SendKeys", "SendKeys sample - Send key combinations.")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioMetadata ("SendKeys", "SendKeys sample - Send key combinations.")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public class SendKeys : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/ShadowStyles.cs

@@ -7,9 +7,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("ShadowStyles Demo", "Demonstrates ShadowStyles Effects.")]
-[Scenario.ScenarioCategory ("Layout")]
-[Scenario.ScenarioCategory ("Adornments")]
+[ScenarioMetadata ("ShadowStyles Demo", "Demonstrates ShadowStyles Effects.")]
+[ScenarioCategory ("Layout")]
+[ScenarioCategory ("Adornments")]
 public class ShadowStyles : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/Shortcuts.cs

@@ -11,8 +11,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Shortcuts", "Illustrates Shortcut class.")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("Shortcuts", "Illustrates Shortcut class.")]
+[ScenarioCategory ("Controls")]
 public class Shortcuts : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/SingleBackgroundWorker.cs

@@ -7,10 +7,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Single BackgroundWorker", "A single BackgroundWorker threading opening another Toplevel")]
-[Scenario.ScenarioCategory ("Threading")]
-[Scenario.ScenarioCategory ("Arrangement")]
-[Scenario.ScenarioCategory ("Runnable")]
+[ScenarioMetadata ("Single BackgroundWorker", "A single BackgroundWorker threading opening another Toplevel")]
+[ScenarioCategory ("Threading")]
+[ScenarioCategory ("Arrangement")]
+[ScenarioCategory ("Runnable")]
 public class SingleBackgroundWorker : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/Sliders.cs

@@ -8,8 +8,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Sliders", "Demonstrates the Slider view.")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("Sliders", "Demonstrates the Slider view.")]
+[ScenarioCategory ("Controls")]
 public class Sliders : Scenario
 {
     public void MakeSliders (View v, List<object> options)

+ 3 - 3
UICatalog/Scenarios/Snake.cs

@@ -8,9 +8,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Snake", "The game of apple eating.")]
-[Scenario.ScenarioCategory ("Colors")]
-[Scenario.ScenarioCategory ("Drawing")]
+[ScenarioMetadata ("Snake", "The game of apple eating.")]
+[ScenarioCategory ("Colors")]
+[ScenarioCategory ("Drawing")]
 public class Snake : Scenario
 {
     private bool isDisposed;

+ 3 - 3
UICatalog/Scenarios/SpinnerStyles.cs

@@ -6,9 +6,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("SpinnerView Styles", "Shows the SpinnerView Styles.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Progress")]
+[ScenarioMetadata ("SpinnerView Styles", "Shows the SpinnerView Styles.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Progress")]
 public class SpinnerViewStyles : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/SyntaxHighlighting.cs

@@ -11,10 +11,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Syntax Highlighting", "Text editor with keyword highlighting using the TextView control.")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("TextView")]
+[ScenarioMetadata ("Syntax Highlighting", "Text editor with keyword highlighting using the TextView control.")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("TextView")]
 public class SyntaxHighlighting : Scenario
 {
     private readonly HashSet<string> _keywords = new (StringComparer.CurrentCultureIgnoreCase)

+ 3 - 3
UICatalog/Scenarios/TabViewExample.cs

@@ -4,9 +4,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Tab View", "Demos TabView control with limited screen space in Absolute layout.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("TabView")]
+[ScenarioMetadata ("Tab View", "Demos TabView control with limited screen space in Absolute layout.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("TabView")]
 public class TabViewExample : Scenario
 {
     private MenuItem _miShowBorder;

+ 5 - 5
UICatalog/Scenarios/TableEditor.cs

@@ -9,11 +9,11 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("TableEditor", "Implements data table editor using the TableView control.")]
-[Scenario.ScenarioCategory ("TableView")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("TableEditor", "Implements data table editor using the TableView control.")]
+[ScenarioCategory ("TableView")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Text and Formatting")]
 public class TableEditor : Scenario
 {
     private readonly HashSet<FileSystemInfo> _checkedFileSystemInfos = new ();

+ 4 - 4
UICatalog/Scenarios/Text.cs

@@ -9,10 +9,10 @@ using Terminal.Gui.TextValidateProviders;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Text Input Controls", "Tests all text input controls")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("Text Input Controls", "Tests all text input controls")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioCategory ("Text and Formatting")]
 public class Text : Scenario
 {
     private Label _labelMirroringTimeField;

+ 2 - 2
UICatalog/Scenarios/TextAlignmentAndDirection.cs

@@ -6,8 +6,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Text Alignment and Direction", "Demos horizontal and vertical text alignment and direction.")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("Text Alignment and Direction", "Demos horizontal and vertical text alignment and direction.")]
+[ScenarioCategory ("Text and Formatting")]
 public class TextAlignmentAndDirection : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/TextEffectsScenario.cs

@@ -3,9 +3,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Text Effects", "Text Effects.")]
-[Scenario.ScenarioCategory ("Colors")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("Text Effects", "Text Effects.")]
+[ScenarioCategory ("Colors")]
+[ScenarioCategory ("Text and Formatting")]
 public class TextEffectsScenario : Scenario
 {
     private TabView _tabView;

+ 2 - 2
UICatalog/Scenarios/TextFormatterDemo.cs

@@ -6,8 +6,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("TextFormatter Demo", "Demos and tests the TextFormatter class.")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
+[ScenarioMetadata ("TextFormatter Demo", "Demos and tests the TextFormatter class.")]
+[ScenarioCategory ("Text and Formatting")]
 public class TextFormatterDemo : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/TextViewAutocompletePopup.cs

@@ -4,10 +4,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("TextView Autocomplete Popup", "Shows five TextView Autocomplete Popup effects")]
-[Scenario.ScenarioCategory ("TextView")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioMetadata ("TextView Autocomplete Popup", "Shows five TextView Autocomplete Popup effects")]
+[ScenarioCategory ("TextView")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public class TextViewAutocompletePopup : Scenario
 {
     private int _height = 10;

+ 2 - 2
UICatalog/Scenarios/Threading.cs

@@ -6,8 +6,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Threading", "Demonstration of how to use threading in different ways")]
-[Scenario.ScenarioCategory ("Threading")]
+[ScenarioMetadata ("Threading", "Demonstration of how to use threading in different ways")]
+[ScenarioCategory ("Threading")]
 public class Threading : Scenario
 {
     private readonly ObservableCollection<string> _log = [];

+ 3 - 3
UICatalog/Scenarios/TileViewNesting.cs

@@ -3,9 +3,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Tile View Nesting", "Demonstrates recursive nesting of TileViews")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("LineView")]
+[ScenarioMetadata ("Tile View Nesting", "Demonstrates recursive nesting of TileViews")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("LineView")]
 public class TileViewNesting : Scenario
 {
     private CheckBox _cbBorder;

+ 3 - 3
UICatalog/Scenarios/TimeAndDate.cs

@@ -3,9 +3,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Time And Date", "Illustrates TimeField and time & date handling")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("DateTime")]
+[ScenarioMetadata ("Time And Date", "Illustrates TimeField and time & date handling")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("DateTime")]
 public class TimeAndDate : Scenario
 {
     private Label _lblDateFmt;

+ 3 - 3
UICatalog/Scenarios/TreeUseCases.cs

@@ -4,9 +4,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Tree View", "Simple tree view examples.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("TreeView")]
+[ScenarioMetadata ("Tree View", "Simple tree view examples.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("TreeView")]
 public class TreeUseCases : Scenario
 {
     private View _currentTree;

+ 4 - 4
UICatalog/Scenarios/TreeViewFileSystem.cs

@@ -7,10 +7,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("File System Explorer", "Hierarchical file system explorer demonstrating TreeView.")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("TreeView")]
-[Scenario.ScenarioCategory ("Files and IO")]
+[ScenarioMetadata ("File System Explorer", "Hierarchical file system explorer demonstrating TreeView.")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("TreeView")]
+[ScenarioCategory ("Files and IO")]
 public class TreeViewFileSystem : Scenario
 {
     private readonly FileSystemIconProvider _iconProvider = new ();

+ 2 - 2
UICatalog/Scenarios/TrueColors.cs

@@ -3,8 +3,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("True Colors", "Demonstration of true color support.")]
-[Scenario.ScenarioCategory ("Colors")]
+[ScenarioMetadata ("True Colors", "Demonstration of true color support.")]
+[ScenarioCategory ("Colors")]
 public class TrueColors : Scenario
 {
     public override void Main ()

+ 3 - 3
UICatalog/Scenarios/Unicode.cs

@@ -5,9 +5,9 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Unicode", "Tries to test Unicode in all controls (#204)")]
-[Scenario.ScenarioCategory ("Text and Formatting")]
-[Scenario.ScenarioCategory ("Controls")]
+[ScenarioMetadata ("Unicode", "Tries to test Unicode in all controls (#204)")]
+[ScenarioCategory ("Text and Formatting")]
+[ScenarioCategory ("Controls")]
 public class UnicodeInMenu : Scenario
 {
     public override void Main ()

+ 5 - 5
UICatalog/Scenarios/ViewExperiments.cs

@@ -3,11 +3,11 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("View Experiments", "v2 View Experiments")]
-[Scenario.ScenarioCategory ("Controls")]
-[Scenario.ScenarioCategory ("Adornments")]
-[Scenario.ScenarioCategory ("Layout")]
-[Scenario.ScenarioCategory ("Proof of Concept")]
+[ScenarioMetadata ("View Experiments", "v2 View Experiments")]
+[ScenarioCategory ("Controls")]
+[ScenarioCategory ("Adornments")]
+[ScenarioCategory ("Layout")]
+[ScenarioCategory ("Proof of Concept")]
 public class ViewExperiments : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/VkeyPacketSimulator.cs

@@ -7,8 +7,8 @@ using Terminal.Gui.ConsoleDrivers;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("VkeyPacketSimulator", "Simulates the Virtual Key Packet")]
-[Scenario.ScenarioCategory ("Mouse and Keyboard")]
+[ScenarioMetadata ("VkeyPacketSimulator", "Simulates the Virtual Key Packet")]
+[ScenarioCategory ("Mouse and Keyboard")]
 public class VkeyPacketSimulator : Scenario
 {
     private static readonly ManualResetEventSlim _stopOutput = new (false);

+ 2 - 2
UICatalog/Scenarios/WindowsAndFrameViews.cs

@@ -4,8 +4,8 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Windows & FrameViews", "Stress Tests Windows, sub-Windows, and FrameViews.")]
-[Scenario.ScenarioCategory ("Layout")]
+[ScenarioMetadata ("Windows & FrameViews", "Stress Tests Windows, sub-Windows, and FrameViews.")]
+[ScenarioCategory ("Layout")]
 public class WindowsAndFrameViews : Scenario
 {
     public override void Main ()

+ 2 - 2
UICatalog/Scenarios/WizardAsView.cs

@@ -2,8 +2,8 @@
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("WizardAsView", "Shows using the Wizard class in an non-modal way")]
-[Scenario.ScenarioCategory ("Wizards")]
+[ScenarioMetadata ("WizardAsView", "Shows using the Wizard class in an non-modal way")]
+[ScenarioCategory ("Wizards")]
 public class WizardAsView : Scenario
 {
     public override void Main ()

+ 4 - 4
UICatalog/Scenarios/Wizards.cs

@@ -4,10 +4,10 @@ using Terminal.Gui;
 
 namespace UICatalog.Scenarios;
 
-[Scenario.ScenarioMetadata ("Wizards", "Demonstrates the Wizard class")]
-[Scenario.ScenarioCategory ("Dialogs")]
-[Scenario.ScenarioCategory ("Wizards")]
-[Scenario.ScenarioCategory ("Runnable")]
+[ScenarioMetadata ("Wizards", "Demonstrates the Wizard class")]
+[ScenarioCategory ("Dialogs")]
+[ScenarioCategory ("Wizards")]
+[ScenarioCategory ("Runnable")]
 
 public class Wizards : Scenario
 {

+ 1 - 1
UICatalog/UICatalog.cs

@@ -442,7 +442,7 @@ public class UICatalogApp
 
             if (maxScenarios == 0)
             {
-                break;
+               // break;
             }
         }