Browse Source

Merge branch 'master' of tig:migueldeicaza/gui.cs

Charlie Kindel 4 years ago
parent
commit
e2742692ec
100 changed files with 3215 additions and 744 deletions
  1. 1 1
      .github/workflows/dotnet-core.yml
  2. 51 0
      .github/workflows/publish.yml
  3. 3 3
      CONTRIBUTING.md
  4. 10 0
      Directory.Build.props
  5. 27 24
      Example/demo.cs
  6. 0 16
      Makefile
  7. 1 1
      README.md
  8. 1 1
      Terminal.Gui/ConsoleDrivers/FakeDriver/FakeConsole.cs
  9. 3 3
      Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
  10. 2 1
      Terminal.Gui/Core/Application.cs
  11. 1 1
      Terminal.Gui/Core/ConsoleDriver.cs
  12. 2 2
      Terminal.Gui/Core/PosDim.cs
  13. 6 6
      Terminal.Gui/Core/TextFormatter.cs
  14. 46 19
      Terminal.Gui/Core/Toplevel.cs
  15. 102 25
      Terminal.Gui/Core/View.cs
  16. 11 6
      Terminal.Gui/Core/Window.cs
  17. 1 1
      Terminal.Gui/README.md
  18. 12 5
      Terminal.Gui/Terminal.Gui.csproj
  19. 16 2
      Terminal.Gui/Views/Button.cs
  20. 1 1
      Terminal.Gui/Views/Checkbox.cs
  21. 8 7
      Terminal.Gui/Views/ComboBox.cs
  22. 1 1
      Terminal.Gui/Views/DateField.cs
  23. 4 2
      Terminal.Gui/Views/FrameView.cs
  24. 1 1
      Terminal.Gui/Views/HexView.cs
  25. 2 2
      Terminal.Gui/Views/Label.cs
  26. 18 10
      Terminal.Gui/Views/ListView.cs
  27. 270 109
      Terminal.Gui/Views/Menu.cs
  28. 111 25
      Terminal.Gui/Views/RadioGroup.cs
  29. 95 34
      Terminal.Gui/Views/ScrollView.cs
  30. 1 1
      Terminal.Gui/Views/TextField.cs
  31. 37 9
      Terminal.Gui/Views/TextView.cs
  32. 1 1
      Terminal.Gui/Views/TimeField.cs
  33. 1 1
      Terminal.Gui/Windows/Dialog.cs
  34. 80 35
      Terminal.Gui/Windows/FileDialog.cs
  35. 3 3
      UICatalog/Scenario.cs
  36. 1 1
      UICatalog/Scenarios/AllViewsTester.cs
  37. 931 0
      UICatalog/Scenarios/DynamicMenuBar.cs
  38. 13 5
      UICatalog/Scenarios/Scrolling.cs
  39. 15 9
      UICatalog/Scenarios/TopLevelNoWindowBug.cs
  40. 2 2
      UICatalog/UICatalog.cs
  41. 0 1
      UnitTests/PosTests.cs
  42. 5 5
      UnitTests/ScenarioTests.cs
  43. 2 2
      UnitTests/TextFormatterTests.cs
  44. 125 4
      UnitTests/ViewTests.cs
  45. 0 60
      XmlYamlMapping.json
  46. 0 26
      azure-pipelines.yml
  47. 1 1
      docs/README.html
  48. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Application.ResizedEventArgs.html
  49. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Application.RunState.html
  50. 17 45
      docs/api/Terminal.Gui/Terminal.Gui.Application.html
  51. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Attribute.html
  52. 92 14
      docs/api/Terminal.Gui/Terminal.Gui.Button.html
  53. 53 8
      docs/api/Terminal.Gui/Terminal.Gui.CheckBox.html
  54. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Clipboard.html
  55. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Color.html
  56. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.ColorScheme.html
  57. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Colors.html
  58. 60 13
      docs/api/Terminal.Gui/Terminal.Gui.ComboBox.html
  59. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.ConsoleDriver.DiagnosticFlags.html
  60. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.ConsoleDriver.html
  61. 17 5
      docs/api/Terminal.Gui/Terminal.Gui.DateField.html
  62. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.DateTimeEventArgs-1.html
  63. 29 4
      docs/api/Terminal.Gui/Terminal.Gui.Dialog.html
  64. 2 2
      docs/api/Terminal.Gui/Terminal.Gui.Dim.html
  65. 155 0
      docs/api/Terminal.Gui/Terminal.Gui.DisplayModeLayout.html
  66. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.FakeConsole.html
  67. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.FakeDriver.html
  68. 9 3
      docs/api/Terminal.Gui/Terminal.Gui.FileDialog.html
  69. 23 4
      docs/api/Terminal.Gui/Terminal.Gui.FrameView.html
  70. 65 10
      docs/api/Terminal.Gui/Terminal.Gui.HexView.html
  71. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.IListDataSource.html
  72. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.IMainLoopDriver.html
  73. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Key.html
  74. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.KeyEvent.html
  75. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.KeyModifiers.html
  76. 64 14
      docs/api/Terminal.Gui/Terminal.Gui.Label.html
  77. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.LayoutStyle.html
  78. 72 23
      docs/api/Terminal.Gui/Terminal.Gui.ListView.html
  79. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.ListViewItemEventArgs.html
  80. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.ListWrapper.html
  81. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.MainLoop.html
  82. 82 14
      docs/api/Terminal.Gui/Terminal.Gui.MenuBar.html
  83. 154 7
      docs/api/Terminal.Gui/Terminal.Gui.MenuBarItem.html
  84. 35 37
      docs/api/Terminal.Gui/Terminal.Gui.MenuItem.html
  85. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.MenuItemCheckStyle.html
  86. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.MessageBox.html
  87. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.MouseEvent.html
  88. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.MouseFlags.html
  89. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.NetMainLoop.html
  90. 5 2
      docs/api/Terminal.Gui/Terminal.Gui.OpenDialog.html
  91. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Point.html
  92. 2 2
      docs/api/Terminal.Gui/Terminal.Gui.Pos.html
  93. 22 3
      docs/api/Terminal.Gui/Terminal.Gui.ProgressBar.html
  94. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.RadioGroup.SelectedItemChangedArgs.html
  95. 106 13
      docs/api/Terminal.Gui/Terminal.Gui.RadioGroup.html
  96. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Rect.html
  97. 1 1
      docs/api/Terminal.Gui/Terminal.Gui.Responder.html
  98. 5 2
      docs/api/Terminal.Gui/Terminal.Gui.SaveDialog.html
  99. 26 5
      docs/api/Terminal.Gui/Terminal.Gui.ScrollBarView.html
  100. 65 9
      docs/api/Terminal.Gui/Terminal.Gui.ScrollView.html

+ 1 - 1
.github/workflows/dotnet-core.yml

@@ -16,7 +16,7 @@ jobs:
     - name: Setup .NET Core
     - name: Setup .NET Core
       uses: actions/setup-dotnet@v1
       uses: actions/setup-dotnet@v1
       with:
       with:
-        dotnet-version: 3.1.101
+        dotnet-version: 3.1.200
     - name: Install dependencies
     - name: Install dependencies
       run: dotnet restore
       run: dotnet restore
     - name: Build
     - name: Build

+ 51 - 0
.github/workflows/publish.yml

@@ -0,0 +1,51 @@
+name: publish Terminal.Gui to nuget
+on:
+  push:
+    branches:
+      - master # Default release branch
+jobs:
+  publish:
+    name: build, pack & publish
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Setup dotnet
+        uses: actions/setup-dotnet@v1
+        with:
+          dotnet-version: 3.1.200
+
+      # Publish
+      - name: publish on version change
+        id: publish_nuget
+        uses: rohith/publish-nuget@v2
+        with:
+          # Filepath of the project to be packaged, relative to root of repository
+          PROJECT_FILE_PATH: Terminal.Gui/Terminal.Gui.csproj
+          
+          # NuGet package id, used for version detection & defaults to project name
+          PACKAGE_NAME: Terminal.Gui
+          
+          # Filepath with version info, relative to root of repository & defaults to PROJECT_FILE_PATH
+          VERSION_FILE_PATH: Directory.Build.props
+
+          # Regex pattern to extract version info in a capturing group
+          VERSION_REGEX: ^\s*<Version>(.*)<\/Version>\s*$
+          
+          # Useful with external providers like Nerdbank.GitVersioning, ignores VERSION_FILE_PATH & VERSION_REGEX
+          # VERSION_STATIC: 1.0.0
+
+          # Flag to toggle git tagging, enabled by default
+          # TAG_COMMIT: true
+
+          # Format of the git tag, [*] gets replaced with actual version
+          # TAG_FORMAT: v*
+
+          # API key to authenticate with NuGet server
+          NUGET_KEY: ${{secrets.NUGET_API_KEY}}
+
+          # NuGet server uri hosting the packages, defaults to https://api.nuget.org
+          # NUGET_SOURCE: https://api.nuget.org
+
+          # Flag to toggle pushing symbols along with nuget package to the server, disabled by default
+          INCLUDE_SYMBOLS: false

+ 3 - 3
CONTRIBUTING.md

@@ -34,13 +34,13 @@ We welcome contributions from the community. See [Issues](https://github.com/mig
 
 
 ### Include API Documentation
 ### Include API Documentation
 
 
-Great care has been provided thus far in ensuring **Terminal.Gui** has great [API Documentation](https://migueldeicaza.github.io/gui.cs/api/Terminal.Gui/Terminal.Gui.html). Contributors have a responsiblity for continously improving the API Documentation.
+Great care has been provided thus far in ensuring **Terminal.Gui** has great [API Documentation](https://migueldeicaza.github.io/gui.cs/api/Terminal.Gui/Terminal.Gui.html). Contributors have a responsibility for continuously improving the API Documentation.
 
 
 - All public APIs must have clear, concise, and complete documentation in the form of [XML Documentation](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/).
 - All public APIs must have clear, concise, and complete documentation in the form of [XML Documentation](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/).
 - Keep the `<summary></summary>` terse.
 - Keep the `<summary></summary>` terse.
 - Use `<see cref=""/>` liberally to cross-link topics.
 - Use `<see cref=""/>` liberally to cross-link topics.
-- Use `<remarks></remarks>` to add more context and explaination.
-- For complex topics, provide conceptual documentation in the `docfx/articles` folder as a `.md` file. It will automatically get picked up and be added to [Conceptual Documenation](https://migueldeicaza.github.io/gui.cs/articles/index.html).
+- Use `<remarks></remarks>` to add more context and explanation.
+- For complex topics, provide conceptual documentation in the `docfx/articles` folder as a `.md` file. It will automatically get picked up and be added to [Conceptual Documentation](https://migueldeicaza.github.io/gui.cs/articles/index.html).
 - Use proper English and good grammar.
 - Use proper English and good grammar.
 
 
 ### Defining Events
 ### Defining Events

+ 10 - 0
Directory.Build.props

@@ -0,0 +1,10 @@
+<Project>
+
+  <PropertyGroup>
+    <Version>0.89.4</Version>
+    <AssemblyVersion>0.89.4</AssemblyVersion>
+    <FileVersion>0.89.4</FileVersion>    
+    <Authors>Miguel de Icaza, Charlie Kindel (@tig), @BDisp</Authors>
+  </PropertyGroup>
+
+</Project>

+ 27 - 24
Example/demo.cs

@@ -253,12 +253,7 @@ static class Demo {
 		});
 		});
 		ntop.Add (menu);
 		ntop.Add (menu);
 
 
-		string fname = null;
-		foreach (var s in new [] { "/etc/passwd", "c:\\windows\\win.ini" })
-			if (System.IO.File.Exists (s)) {
-				fname = s;
-				break;
-			}
+		string fname = GetFileName ();
 
 
 		var win = new Window (fname ?? "Untitled") {
 		var win = new Window (fname ?? "Untitled") {
 			X = 0,
 			X = 0,
@@ -277,6 +272,18 @@ static class Demo {
 		Application.Run (ntop);
 		Application.Run (ntop);
 	}
 	}
 
 
+	private static string GetFileName ()
+	{
+		string fname = null;
+		foreach (var s in new [] { "/etc/passwd", "c:\\windows\\win.ini" })
+			if (System.IO.File.Exists (s)) {
+				fname = s;
+				break;
+			}
+
+		return fname;
+	}
+
 	static bool Quit ()
 	static bool Quit ()
 	{
 	{
 		var n = MessageBox.Query (50, 7, "Quit Demo", "Are you sure you want to quit this demo?", "Yes", "No");
 		var n = MessageBox.Query (50, 7, "Quit Demo", "Are you sure you want to quit this demo?", "Yes", "No");
@@ -298,7 +305,7 @@ static class Demo {
 		Application.Run (d);
 		Application.Run (d);
 
 
 		if (!d.Canceled)
 		if (!d.Canceled)
-			MessageBox.Query (50, 7, "Selected File", string.Join (", ", d.FilePaths), "Ok");
+			MessageBox.Query (50, 7, "Selected File", d.FilePaths.Count > 0 ? string.Join (", ", d.FilePaths) : d.FilePath, "Ok");
 	}
 	}
 
 
 	public static void ShowHex (Toplevel top)
 	public static void ShowHex (Toplevel top)
@@ -312,7 +319,8 @@ static class Demo {
 		});
 		});
 		ntop.Add (menu);
 		ntop.Add (menu);
 
 
-		var win = new Window ("/etc/passwd") {
+		string fname = GetFileName ();
+		var win = new Window (fname) {
 			X = 0,
 			X = 0,
 			Y = 1,
 			Y = 1,
 			Width = Dim.Fill (),
 			Width = Dim.Fill (),
@@ -320,7 +328,7 @@ static class Demo {
 		};
 		};
 		ntop.Add (win);
 		ntop.Add (win);
 
 
-		var source = System.IO.File.OpenRead ("/etc/passwd");
+		var source = System.IO.File.OpenRead (fname);
 		var hex = new HexView (source) {
 		var hex = new HexView (source) {
 			X = 0,
 			X = 0,
 			Y = 0,
 			Y = 0,
@@ -578,7 +586,7 @@ static class Demo {
 			new MenuItemDetails ("F_ind", "", null),
 			new MenuItemDetails ("F_ind", "", null),
 			new MenuItemDetails ("_Replace", "", null),
 			new MenuItemDetails ("_Replace", "", null),
 			new MenuItemDetails ("_Item1", "", null),
 			new MenuItemDetails ("_Item1", "", null),
-			new MenuItemDetails ("_Not From Sub Menu", "", null)
+			new MenuItemDetails ("_Also From Sub Menu", "", null)
 		};
 		};
 
 
 		menuItems [0].Action = () => ShowMenuItem (menuItems [0]);
 		menuItems [0].Action = () => ShowMenuItem (menuItems [0]);
@@ -601,8 +609,8 @@ static class Demo {
 				new MenuItem ("_Copy", "", Copy),
 				new MenuItem ("_Copy", "", Copy),
 				new MenuItem ("C_ut", "", Cut),
 				new MenuItem ("C_ut", "", Cut),
 				new MenuItem ("_Paste", "", Paste),
 				new MenuItem ("_Paste", "", Paste),
-				new MenuItem ("_Find and Replace",
-					new MenuBarItem (new MenuItem[] {menuItems [0], menuItems [1] })),
+				new MenuBarItem ("_Find and Replace",
+					new MenuItem [] { menuItems [0], menuItems [1] }),
 				menuItems[3]
 				menuItems[3]
 			}),
 			}),
 			new MenuBarItem ("_List Demos", new MenuItem [] {
 			new MenuBarItem ("_List Demos", new MenuItem [] {
@@ -614,18 +622,13 @@ static class Demo {
 				new MenuItem ("_Show text alignments", "", () => ShowTextAlignments ()),
 				new MenuItem ("_Show text alignments", "", () => ShowTextAlignments ()),
 				new MenuItem ("_OnKeyDown/Press/Up", "", () => OnKeyDownPressUpDemo ())
 				new MenuItem ("_OnKeyDown/Press/Up", "", () => OnKeyDownPressUpDemo ())
 			}),
 			}),
-			new MenuBarItem ("_Test Menu and SubMenus", new MenuItem [] {
-				new MenuItem ("SubMenu1Item_1",
-					new MenuBarItem (new MenuItem[] {
-						new MenuItem ("SubMenu2Item_1",
-							new MenuBarItem (new MenuItem [] {
-								new MenuItem ("SubMenu3Item_1",
-									new MenuBarItem (new MenuItem [] { menuItems [2] })
-								)
-							})
-						)
+			new MenuBarItem ("_Test Menu and SubMenus", new MenuBarItem [] {
+				new MenuBarItem ("SubMenu1Item_1",  new MenuBarItem [] {
+					new MenuBarItem ("SubMenu2Item_1", new MenuBarItem [] {
+						new MenuBarItem ("SubMenu3Item_1",
+							new MenuItem [] { menuItems [2] })
 					})
 					})
-				)
+				})
 			}),
 			}),
 			new MenuBarItem ("_About...", "Demonstrates top-level menu item", () =>  MessageBox.ErrorQuery (50, 7, "About Demo", "This is a demo app for gui.cs", "Ok")),
 			new MenuBarItem ("_About...", "Demonstrates top-level menu item", () =>  MessageBox.ErrorQuery (50, 7, "About Demo", "This is a demo app for gui.cs", "Ok")),
 		});
 		});
@@ -647,7 +650,7 @@ static class Demo {
 		win.Add (test);
 		win.Add (test);
 		win.Add (ml);
 		win.Add (ml);
 
 
-		var drag = new Label ("Drag: ") { X = 70, Y = 24 };
+		var drag = new Label ("Drag: ") { X = 70, Y = 22 };
 		var dragText = new TextField ("") {
 		var dragText = new TextField ("") {
 			X = Pos.Right (drag),
 			X = Pos.Right (drag),
 			Y = Pos.Top (drag),
 			Y = Pos.Top (drag),

+ 0 - 16
Makefile

@@ -1,16 +0,0 @@
-all: doc-update yaml
-
-# Used to fetch XML doc updates from the C# compiler into the ECMA docs
-doc-update: Terminal.Gui/bin/Release/ne461/Terminal.Gui.dll
-	msbuild /p:Configuration=Release
-	mdoc update -i Terminal.Gui/bin/Release/net461/Terminal.Gui.xml -o ecmadocs/en Terminal.Gui/bin/Release/net461/Terminal.Gui.dll
-
-Terminal.Gui/bin/Release/ne461/Terminal.Gui.dll: 
-	(cd Terminal.Gui)
-	msbuild /p:Configuration=Release
-
-yaml:
-	-rm ecmadocs/en/ns-.xml
-	mono /cvs/ECMA2Yaml/ECMA2Yaml/ECMA2Yaml/bin/Debug/ECMA2Yaml.exe --source=`pwd`/ecmadocs/en --output=`pwd`/docfx/api
-	(cd docfx; mono ~/Downloads/docfx/docfx.exe build)
-

+ 1 - 1
README.md

@@ -90,7 +90,7 @@ Debates on architecture and design can be found in Issues tagged with [design](h
 ## Documentation
 ## Documentation
 
 
 * [Overview](https://migueldeicaza.github.io/gui.cs/articles/overview.html)
 * [Overview](https://migueldeicaza.github.io/gui.cs/articles/overview.html)
-* [Conceptual Documenation](https://migueldeicaza.github.io/gui.cs/articles/index.html)
+* [Conceptual Documentation](https://migueldeicaza.github.io/gui.cs/articles/index.html)
 * [API Documentation](https://migueldeicaza.github.io/gui.cs/api/Terminal.Gui/Terminal.Gui.html)
 * [API Documentation](https://migueldeicaza.github.io/gui.cs/api/Terminal.Gui/Terminal.Gui.html)
 
 
 ### Sample Usage
 ### Sample Usage

+ 1 - 1
Terminal.Gui/ConsoleDrivers/FakeDriver/FakeConsole.cs

@@ -1,5 +1,5 @@
 //
 //
-// FakeConsole.cs: A fake .NET Windows Console API implementaiton for unit tests.
+// FakeConsole.cs: A fake .NET Windows Console API implementation for unit tests.
 //
 //
 // Authors:
 // Authors:
 //   Charlie Kindel (github.com/tig)
 //   Charlie Kindel (github.com/tig)

+ 3 - 3
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -628,9 +628,9 @@ namespace Terminal.Gui {
 
 
 		void IMainLoopDriver.Wakeup ()
 		void IMainLoopDriver.Wakeup ()
 		{
 		{
-			tokenSource.Cancel ();
-			//eventReady.Reset ();
-			//eventReady.Set ();
+			//tokenSource.Cancel ();
+			eventReady.Reset ();
+			eventReady.Set ();
 		}
 		}
 
 
 		bool IMainLoopDriver.EventsPending (bool wait)
 		bool IMainLoopDriver.EventsPending (bool wait)

+ 2 - 1
Terminal.Gui/Core/Application.cs

@@ -79,7 +79,7 @@ namespace Terminal.Gui {
 		public static View CurrentView { get; set; }
 		public static View CurrentView { get; set; }
 
 
 		/// <summary>
 		/// <summary>
-		/// The <see cref="MainLoop"/>  driver for the applicaiton
+		/// The <see cref="MainLoop"/>  driver for the application
 		/// </summary>
 		/// </summary>
 		/// <value>The main loop.</value>
 		/// <value>The main loop.</value>
 		public static MainLoop MainLoop { get; private set; }
 		public static MainLoop MainLoop { get; private set; }
@@ -506,6 +506,7 @@ namespace Terminal.Gui {
 			MainLoop = null;
 			MainLoop = null;
 			Driver?.End ();
 			Driver?.End ();
 			Driver = null;
 			Driver = null;
+			_initialized = false;
 		}
 		}
 
 
 		static void Redraw (View view)
 		static void Redraw (View view)

+ 1 - 1
Terminal.Gui/Core/ConsoleDriver.cs

@@ -862,7 +862,7 @@ namespace Terminal.Gui {
 		/// <param name="padding">Padding to add on the sides.</param>
 		/// <param name="padding">Padding to add on the sides.</param>
 		/// <param name="fill">If set to <c>true</c> it will clear the contents with the current color, otherwise the contents will be left untouched.</param>
 		/// <param name="fill">If set to <c>true</c> it will clear the contents with the current color, otherwise the contents will be left untouched.</param>
 		/// <remarks>This API has been superceded by <see cref="DrawWindowFrame(Rect, int, int, int, int, bool, bool)"/>.</remarks>
 		/// <remarks>This API has been superceded by <see cref="DrawWindowFrame(Rect, int, int, int, int, bool, bool)"/>.</remarks>
-		/// <remarks>This API is equivlalent to calling <c>DrawWindowFrame(Rect, p - 1, p - 1, p - 1, p - 1)</c>. In other words,
+		/// <remarks>This API is equivalent to calling <c>DrawWindowFrame(Rect, p - 1, p - 1, p - 1, p - 1)</c>. In other words,
 		/// A padding value of 0 means there is actually a one cell border.
 		/// A padding value of 0 means there is actually a one cell border.
 		/// </remarks>
 		/// </remarks>
 		public virtual void DrawFrame (Rect region, int padding, bool fill)
 		public virtual void DrawFrame (Rect region, int padding, bool fill)

+ 2 - 2
Terminal.Gui/Core/PosDim.cs

@@ -21,7 +21,7 @@ namespace Terminal.Gui {
 	///   <para>
 	///   <para>
 	///     These can be used to set the absolute position, when merely assigning an
 	///     These can be used to set the absolute position, when merely assigning an
 	///     integer value (via the implicit integer to <see cref="Pos"/> conversion), and they can be combined
 	///     integer value (via the implicit integer to <see cref="Pos"/> conversion), and they can be combined
-	///     to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
+	///     to produce more useful layouts, like: Pos.Center - 3, which would shift the position
 	///     of the <see cref="View"/> 3 characters to the left after centering for example.
 	///     of the <see cref="View"/> 3 characters to the left after centering for example.
 	///   </para>
 	///   </para>
 	///   <para>
 	///   <para>
@@ -356,7 +356,7 @@ namespace Terminal.Gui {
 	///   <para>
 	///   <para>
 	///     These can be used to set the absolute position, when merely assigning an
 	///     These can be used to set the absolute position, when merely assigning an
 	///     integer value (via the implicit integer to Pos conversion), and they can be combined
 	///     integer value (via the implicit integer to Pos conversion), and they can be combined
-	///     to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
+	///     to produce more useful layouts, like: Pos.Center - 3, which would shift the position
 	///     of the <see cref="View"/> 3 characters to the left after centering for example.
 	///     of the <see cref="View"/> 3 characters to the left after centering for example.
 	///   </para>
 	///   </para>
 	/// </remarks>
 	/// </remarks>

+ 6 - 6
Terminal.Gui/Core/TextFormatter.cs

@@ -28,7 +28,7 @@ namespace Terminal.Gui {
 	}
 	}
 
 
 	/// <summary>
 	/// <summary>
-	/// Provides text formatting capabilites for console apps. Supports, hotkeys, horizontal alignment, multille lines, and word-based line wrap.
+	/// Provides text formatting capabilities for console apps. Supports, hotkeys, horizontal alignment, multille lines, and word-based line wrap.
 	/// </summary>
 	/// </summary>
 	public class TextFormatter {
 	public class TextFormatter {
 		List<ustring> lines = new List<ustring> ();
 		List<ustring> lines = new List<ustring> ();
@@ -47,7 +47,7 @@ namespace Terminal.Gui {
 			set {
 			set {
 				text = value;
 				text = value;
 
 
-				if (Size.IsEmpty) {
+				if (text.RuneCount > 0 && (Size.Width == 0 || Size.Height == 0 || Size.Width != text.RuneCount)) {
 					// Proivde a default size (width = length of longest line, height = 1)
 					// Proivde a default size (width = length of longest line, height = 1)
 					// TODO: It might makem more sense for the default to be width = length of first line?
 					// TODO: It might makem more sense for the default to be width = length of first line?
 					Size = new Size (TextFormatter.MaxWidth (Text, int.MaxValue), 1);
 					Size = new Size (TextFormatter.MaxWidth (Text, int.MaxValue), 1);
@@ -383,7 +383,7 @@ namespace Terminal.Gui {
 		}
 		}
 
 
 		/// <summary>
 		/// <summary>
-		/// Computes the maximum width needed to render the text (single line or multple lines) given a minimium width.
+		/// Computes the maximum width needed to render the text (single line or multple lines) given a minimum width.
 		/// </summary>
 		/// </summary>
 		/// <returns>Max width of lines.</returns>
 		/// <returns>Max width of lines.</returns>
 		/// <param name="text">Text, may contain newlines.</param>
 		/// <param name="text">Text, may contain newlines.</param>
@@ -396,7 +396,7 @@ namespace Terminal.Gui {
 
 
 
 
 		/// <summary>
 		/// <summary>
-		///  Calculates the rectangle requried to hold text, assuming no word wrapping.
+		///  Calculates the rectangle required to hold text, assuming no word wrapping.
 		/// </summary>
 		/// </summary>
 		/// <param name="x">The x location of the rectangle</param>
 		/// <param name="x">The x location of the rectangle</param>
 		/// <param name="y">The y location of the rectangle</param>
 		/// <param name="y">The y location of the rectangle</param>
@@ -405,7 +405,7 @@ namespace Terminal.Gui {
 		public static Rect CalcRect (int x, int y, ustring text)
 		public static Rect CalcRect (int x, int y, ustring text)
 		{
 		{
 			if (ustring.IsNullOrEmpty (text))
 			if (ustring.IsNullOrEmpty (text))
-				return Rect.Empty;
+				return new Rect (new Point (x, y), Size.Empty);
 
 
 			int mw = 0;
 			int mw = 0;
 			int ml = 1;
 			int ml = 1;
@@ -522,7 +522,7 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		/// <param name="text">The text to manipulate.</param>
 		/// <param name="text">The text to manipulate.</param>
 		/// <param name="hotKeySpecifier">The hot-key specifier (e.g. '_') to look for.</param>
 		/// <param name="hotKeySpecifier">The hot-key specifier (e.g. '_') to look for.</param>
-		/// <param name="hotPos">Returns the postion of the hot-key in the text. -1 if not found.</param>
+		/// <param name="hotPos">Returns the position of the hot-key in the text. -1 if not found.</param>
 		/// <returns>The input text with the hotkey specifier ('_') removed.</returns>
 		/// <returns>The input text with the hotkey specifier ('_') removed.</returns>
 		public static ustring RemoveHotKeySpecifier (ustring text, int hotPos, Rune hotKeySpecifier)
 		public static ustring RemoveHotKeySpecifier (ustring text, int hotPos, Rune hotKeySpecifier)
 		{
 		{

+ 46 - 19
Terminal.Gui/Core/Toplevel.cs

@@ -182,7 +182,7 @@ namespace Terminal.Gui {
 			case Key.CursorRight:
 			case Key.CursorRight:
 			case Key.CursorDown:
 			case Key.CursorDown:
 			case Key.ControlI: // Unix
 			case Key.ControlI: // Unix
-				var old = Focused;
+				var old = GetDeepestFocusedSubview (Focused);
 				if (!FocusNext ())
 				if (!FocusNext ())
 					FocusNext ();
 					FocusNext ();
 				if (old != Focused) {
 				if (old != Focused) {
@@ -195,7 +195,7 @@ namespace Terminal.Gui {
 			case Key.CursorLeft:
 			case Key.CursorLeft:
 			case Key.CursorUp:
 			case Key.CursorUp:
 			case Key.BackTab:
 			case Key.BackTab:
-				old = Focused;
+				old = GetDeepestFocusedSubview (Focused);
 				if (!FocusPrev ())
 				if (!FocusPrev ())
 					FocusPrev ();
 					FocusPrev ();
 				if (old != Focused) {
 				if (old != Focused) {
@@ -213,6 +213,20 @@ namespace Terminal.Gui {
 			return false;
 			return false;
 		}
 		}
 
 
+		View GetDeepestFocusedSubview (View view)
+		{
+			if (view == null) {
+				return null;
+			}
+
+			foreach (var v in view.Subviews) {
+				if (v.HasFocus) {
+					return GetDeepestFocusedSubview (v);
+				}
+			}
+			return view;
+		}
+
 		IEnumerable<View> GetToplevelSubviews (bool isForward)
 		IEnumerable<View> GetToplevelSubviews (bool isForward)
 		{
 		{
 			if (SuperView == null) {
 			if (SuperView == null) {
@@ -253,26 +267,26 @@ namespace Terminal.Gui {
 		public override void Add (View view)
 		public override void Add (View view)
 		{
 		{
 			if (this == Application.Top) {
 			if (this == Application.Top) {
-				if (view is MenuBar)
-					MenuBar = view as MenuBar;
-				if (view is StatusBar)
-					StatusBar = view as StatusBar;
+				AddMenuStatusBar (view);
 			}
 			}
 			base.Add (view);
 			base.Add (view);
 		}
 		}
 
 
+		internal void AddMenuStatusBar (View view)
+		{
+			if (view is MenuBar) {
+				MenuBar = view as MenuBar;
+			}
+			if (view is StatusBar) {
+				StatusBar = view as StatusBar;
+			}
+		}
+
 		///<inheritdoc/>
 		///<inheritdoc/>
 		public override void Remove (View view)
 		public override void Remove (View view)
 		{
 		{
-			if (this is Toplevel && ((Toplevel)this).MenuBar != null) {
-				if (view is MenuBar) {
-					MenuBar?.Dispose ();
-					MenuBar = null;
-				}
-				if (view is StatusBar) {
-					StatusBar?.Dispose ();
-					StatusBar = null;
-				}
+			if (this is Toplevel toplevel && toplevel.MenuBar != null) {
+				RemoveMenuStatusBar (view);
 			}
 			}
 			base.Remove (view);
 			base.Remove (view);
 		}
 		}
@@ -289,6 +303,18 @@ namespace Terminal.Gui {
 			base.RemoveAll ();
 			base.RemoveAll ();
 		}
 		}
 
 
+		internal void RemoveMenuStatusBar (View view)
+		{
+			if (view is MenuBar) {
+				MenuBar?.Dispose ();
+				MenuBar = null;
+			}
+			if (view is StatusBar) {
+				StatusBar?.Dispose ();
+				StatusBar = null;
+			}
+		}
+
 		internal void EnsureVisibleBounds (Toplevel top, int x, int y, out int nx, out int ny)
 		internal void EnsureVisibleBounds (Toplevel top, int x, int y, out int nx, out int ny)
 		{
 		{
 			nx = Math.Max (x, 0);
 			nx = Math.Max (x, 0);
@@ -341,15 +367,16 @@ namespace Terminal.Gui {
 					top.Y = ny;
 					top.Y = ny;
 				}
 				}
 			}
 			}
-			if (StatusBar != null) {
+			if (top.StatusBar != null) {
 				if (ny + top.Frame.Height > top.Frame.Height - 1) {
 				if (ny + top.Frame.Height > top.Frame.Height - 1) {
 					if (top.Height is Dim.DimFill)
 					if (top.Height is Dim.DimFill)
 						top.Height = Dim.Fill () - 1;
 						top.Height = Dim.Fill () - 1;
 				}
 				}
-				if (StatusBar.Frame.Y != Frame.Height - 1) {
-					StatusBar.Y = Frame.Height - 1;
-					SetNeedsDisplay ();
+				if (top.StatusBar.Frame.Y != top.Frame.Height - 1) {
+					top.StatusBar.Y = top.Frame.Height - 1;
+					top.LayoutSubviews ();
 				}
 				}
+				top.BringSubviewToFront (top.StatusBar);
 			}
 			}
 		}
 		}
 
 

+ 102 - 25
Terminal.Gui/Core/View.cs

@@ -68,7 +68,7 @@ namespace Terminal.Gui {
 	///    if the terminal size changes.
 	///    if the terminal size changes.
 	/// </para>
 	/// </para>
 	/// <para>
 	/// <para>
-	///    Absolute layout requires specifying coordiantes and sizes of Views explicitly, and the
+	///    Absolute layout requires specifying coordinates and sizes of Views explicitly, and the
 	///    View will typcialy stay in a fixed position and size. To change the position and size use the
 	///    View will typcialy stay in a fixed position and size. To change the position and size use the
 	///    <see cref="Frame"/> property.
 	///    <see cref="Frame"/> property.
 	/// </para>
 	/// </para>
@@ -748,6 +748,9 @@ namespace Terminal.Gui {
 					view.SetNeedsDisplay ();
 					view.SetNeedsDisplay ();
 			}
 			}
 			OnRemoved (view);
 			OnRemoved (view);
+			if (focused == view) {
+				focused = null;
+			}
 		}
 		}
 
 
 		void PerformActionForSubview (View subview, Action<View> action)
 		void PerformActionForSubview (View subview, Action<View> action)
@@ -1023,10 +1026,14 @@ namespace Terminal.Gui {
 		///    in a visually sensible place.
 		///    in a visually sensible place.
 		public virtual void PositionCursor ()
 		public virtual void PositionCursor ()
 		{
 		{
-			if (focused != null)
+			if (!CanBeVisible (this)) {
+				return;
+			}
+
+			if (focused != null) {
 				focused.PositionCursor ();
 				focused.PositionCursor ();
-			else {
-				if (CanFocus && HasFocus) {
+			} else {
+				if (CanFocus && HasFocus && Visible) {
 					Move (textFormatter.HotKeyPos == -1 ? 0 : textFormatter.HotKeyPos, 0);
 					Move (textFormatter.HotKeyPos == -1 ? 0 : textFormatter.HotKeyPos, 0);
 				} else {
 				} else {
 					Move (frame.X, frame.Y);
 					Move (frame.X, frame.Y);
@@ -1046,13 +1053,13 @@ namespace Terminal.Gui {
 		{
 		{
 			if (hasFocus != value) {
 			if (hasFocus != value) {
 				hasFocus = value;
 				hasFocus = value;
+				if (value) {
+					OnEnter (view);
+				} else {
+					OnLeave (view);
+				}
+				SetNeedsDisplay ();
 			}
 			}
-			if (value) {
-				OnEnter (view);
-			} else {
-				OnLeave (view);
-			}
-			SetNeedsDisplay ();
 
 
 			// Remove focus down the chain of subviews if focus is removed
 			// Remove focus down the chain of subviews if focus is removed
 			if (!value && focused != null) {
 			if (!value && focused != null) {
@@ -1199,7 +1206,7 @@ namespace Terminal.Gui {
 		/// </para>
 		/// </para>
 		/// <para>
 		/// <para>
 		///    Views should set the color that they want to use on entry, as otherwise this will inherit
 		///    Views should set the color that they want to use on entry, as otherwise this will inherit
-		///    the last color that was set globaly on the driver.
+		///    the last color that was set globally on the driver.
 		/// </para>
 		/// </para>
 		/// <para>
 		/// <para>
 		///    Overrides of <see cref="Redraw"/> must ensure they do not set <c>Driver.Clip</c> to a clip region
 		///    Overrides of <see cref="Redraw"/> must ensure they do not set <c>Driver.Clip</c> to a clip region
@@ -1208,6 +1215,10 @@ namespace Terminal.Gui {
 		/// </remarks>
 		/// </remarks>
 		public virtual void Redraw (Rect bounds)
 		public virtual void Redraw (Rect bounds)
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return;
+			}
+
 			var clipRect = new Rect (Point.Empty, frame.Size);
 			var clipRect = new Rect (Point.Empty, frame.Size);
 
 
 			if (ColorScheme != null)
 			if (ColorScheme != null)
@@ -1235,7 +1246,9 @@ namespace Terminal.Gui {
 
 
 							// Draw the subview
 							// Draw the subview
 							// Use the view's bounds (view-relative; Location will always be (0,0) because
 							// Use the view's bounds (view-relative; Location will always be (0,0) because
-							view.Redraw (view.Bounds);
+							if (view.Visible) {
+								view.Redraw (view.Bounds);
+							}
 						}
 						}
 						view.NeedDisplay = Rect.Empty;
 						view.NeedDisplay = Rect.Empty;
 						view.childNeedsDisplay = false;
 						view.childNeedsDisplay = false;
@@ -1274,14 +1287,14 @@ namespace Terminal.Gui {
 		/// Causes the specified subview to have focus.
 		/// Causes the specified subview to have focus.
 		/// </summary>
 		/// </summary>
 		/// <param name="view">View.</param>
 		/// <param name="view">View.</param>
-		public void SetFocus (View view)
+		void SetFocus (View view)
 		{
 		{
 			if (view == null)
 			if (view == null)
 				return;
 				return;
 			//Console.WriteLine ($"Request to focus {view}");
 			//Console.WriteLine ($"Request to focus {view}");
-			if (!view.CanFocus)
+			if (!view.CanFocus || !view.Visible)
 				return;
 				return;
-			if (focused == view)
+			if (focused?.hasFocus == true && focused == view)
 				return;
 				return;
 
 
 			// Make sure that this view is a subview
 			// Make sure that this view is a subview
@@ -1304,6 +1317,18 @@ namespace Terminal.Gui {
 			SuperView?.SetFocus (this);
 			SuperView?.SetFocus (this);
 		}
 		}
 
 
+		/// <summary>
+		/// Causes the specified view and the entire parent hierarchy to have the focused order updated.
+		/// </summary>
+		public void SetFocus ()
+		{
+			if (!CanBeVisible (this)) {
+				return;
+			}
+
+			SuperView?.SetFocus (this);
+		}
+
 		/// <summary>
 		/// <summary>
 		/// Defines the event arguments for <see cref="KeyEvent"/>
 		/// Defines the event arguments for <see cref="KeyEvent"/>
 		/// </summary>
 		/// </summary>
@@ -1417,11 +1442,13 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		public void EnsureFocus ()
 		public void EnsureFocus ()
 		{
 		{
-			if (focused == null)
-				if (FocusDirection == Direction.Forward)
+			if (focused == null && subviews?.Count > 0) {
+				if (FocusDirection == Direction.Forward) {
 					FocusFirst ();
 					FocusFirst ();
-				else
+				} else {
 					FocusLast ();
 					FocusLast ();
+				}
+			}
 		}
 		}
 
 
 		/// <summary>
 		/// <summary>
@@ -1429,13 +1456,17 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		public void FocusFirst ()
 		public void FocusFirst ()
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return;
+			}
+
 			if (tabIndexes == null) {
 			if (tabIndexes == null) {
 				SuperView?.SetFocus (this);
 				SuperView?.SetFocus (this);
 				return;
 				return;
 			}
 			}
 
 
 			foreach (var view in tabIndexes) {
 			foreach (var view in tabIndexes) {
-				if (view.CanFocus && view.tabStop) {
+				if (view.CanFocus && view.tabStop && view.Visible) {
 					SetFocus (view);
 					SetFocus (view);
 					return;
 					return;
 				}
 				}
@@ -1447,6 +1478,10 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		public void FocusLast ()
 		public void FocusLast ()
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return;
+			}
+
 			if (tabIndexes == null) {
 			if (tabIndexes == null) {
 				SuperView?.SetFocus (this);
 				SuperView?.SetFocus (this);
 				return;
 				return;
@@ -1456,7 +1491,7 @@ namespace Terminal.Gui {
 				i--;
 				i--;
 
 
 				View v = tabIndexes [i];
 				View v = tabIndexes [i];
-				if (v.CanFocus && v.tabStop) {
+				if (v.CanFocus && v.tabStop && v.Visible) {
 					SetFocus (v);
 					SetFocus (v);
 					return;
 					return;
 				}
 				}
@@ -1469,6 +1504,10 @@ namespace Terminal.Gui {
 		/// <returns><c>true</c>, if previous was focused, <c>false</c> otherwise.</returns>
 		/// <returns><c>true</c>, if previous was focused, <c>false</c> otherwise.</returns>
 		public bool FocusPrev ()
 		public bool FocusPrev ()
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return false;
+			}
+
 			FocusDirection = Direction.Backward;
 			FocusDirection = Direction.Backward;
 			if (tabIndexes == null || tabIndexes.Count == 0)
 			if (tabIndexes == null || tabIndexes.Count == 0)
 				return false;
 				return false;
@@ -1488,10 +1527,10 @@ namespace Terminal.Gui {
 					focused_idx = i;
 					focused_idx = i;
 					continue;
 					continue;
 				}
 				}
-				if (w.CanFocus && focused_idx != -1 && w.tabStop) {
+				if (w.CanFocus && focused_idx != -1 && w.tabStop && w.Visible) {
 					focused.SetHasFocus (false, w);
 					focused.SetHasFocus (false, w);
 
 
-					if (w != null && w.CanFocus && w.tabStop)
+					if (w != null && w.CanFocus && w.tabStop && w.Visible)
 						w.FocusLast ();
 						w.FocusLast ();
 
 
 					SetFocus (w);
 					SetFocus (w);
@@ -1511,6 +1550,10 @@ namespace Terminal.Gui {
 		/// <returns><c>true</c>, if next was focused, <c>false</c> otherwise.</returns>
 		/// <returns><c>true</c>, if next was focused, <c>false</c> otherwise.</returns>
 		public bool FocusNext ()
 		public bool FocusNext ()
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return false;
+			}
+
 			FocusDirection = Direction.Forward;
 			FocusDirection = Direction.Forward;
 			if (tabIndexes == null || tabIndexes.Count == 0)
 			if (tabIndexes == null || tabIndexes.Count == 0)
 				return false;
 				return false;
@@ -1530,10 +1573,10 @@ namespace Terminal.Gui {
 					focused_idx = i;
 					focused_idx = i;
 					continue;
 					continue;
 				}
 				}
-				if (w.CanFocus && focused_idx != -1 && w.tabStop) {
+				if (w.CanFocus && focused_idx != -1 && w.tabStop && w.Visible) {
 					focused.SetHasFocus (false, w);
 					focused.SetHasFocus (false, w);
 
 
-					if (w != null && w.CanFocus && w.tabStop)
+					if (w != null && w.CanFocus && w.tabStop && w.Visible)
 						w.FocusFirst ();
 						w.FocusFirst ();
 
 
 					SetFocus (w);
 					SetFocus (w);
@@ -1771,6 +1814,9 @@ namespace Terminal.Gui {
 			get => textFormatter.Text;
 			get => textFormatter.Text;
 			set {
 			set {
 				textFormatter.Text = value;
 				textFormatter.Text = value;
+				if (textFormatter.Size != Bounds.Size && (width == null && Bounds.Width == 0) || (height == null && Bounds.Height == 0)) {
+					Bounds = new Rect (Bounds.X, Bounds.Y, textFormatter.Size.Width, textFormatter.Size.Height);
+				}
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 			}
 			}
 		}
 		}
@@ -1825,6 +1871,10 @@ namespace Terminal.Gui {
 		/// <inheritdoc/>
 		/// <inheritdoc/>
 		public override bool OnMouseEnter (MouseEvent mouseEvent)
 		public override bool OnMouseEnter (MouseEvent mouseEvent)
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return false;
+			}
+
 			MouseEventArgs args = new MouseEventArgs (mouseEvent);
 			MouseEventArgs args = new MouseEventArgs (mouseEvent);
 			MouseEnter?.Invoke (args);
 			MouseEnter?.Invoke (args);
 			if (args.Handled)
 			if (args.Handled)
@@ -1838,6 +1888,10 @@ namespace Terminal.Gui {
 		/// <inheritdoc/>
 		/// <inheritdoc/>
 		public override bool OnMouseLeave (MouseEvent mouseEvent)
 		public override bool OnMouseLeave (MouseEvent mouseEvent)
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return false;
+			}
+
 			MouseEventArgs args = new MouseEventArgs (mouseEvent);
 			MouseEventArgs args = new MouseEventArgs (mouseEvent);
 			MouseLeave?.Invoke (args);
 			MouseLeave?.Invoke (args);
 			if (args.Handled)
 			if (args.Handled)
@@ -1855,6 +1909,10 @@ namespace Terminal.Gui {
 		/// <returns><c>true</c>, if the event was handled, <c>false</c> otherwise.</returns>
 		/// <returns><c>true</c>, if the event was handled, <c>false</c> otherwise.</returns>
 		public virtual bool OnMouseEvent (MouseEvent mouseEvent)
 		public virtual bool OnMouseEvent (MouseEvent mouseEvent)
 		{
 		{
+			if (!CanBeVisible (this)) {
+				return false;
+			}
+
 			MouseEventArgs args = new MouseEventArgs (mouseEvent);
 			MouseEventArgs args = new MouseEventArgs (mouseEvent);
 			MouseClick?.Invoke (args);
 			MouseClick?.Invoke (args);
 			if (args.Handled)
 			if (args.Handled)
@@ -1864,7 +1922,7 @@ namespace Terminal.Gui {
 
 
 
 
 			if (mouseEvent.Flags == MouseFlags.Button1Clicked) {
 			if (mouseEvent.Flags == MouseFlags.Button1Clicked) {
-				if (!HasFocus && SuperView != null) {
+				if (CanFocus && !HasFocus && SuperView != null) {
 					SuperView.SetFocus (this);
 					SuperView.SetFocus (this);
 					SetNeedsDisplay ();
 					SetNeedsDisplay ();
 				}
 				}
@@ -1918,5 +1976,24 @@ namespace Terminal.Gui {
 				}
 				}
 			}
 			}
 		}
 		}
+
+		/// <summary>
+		/// Gets or sets the view visibility.
+		/// </summary>
+		public bool Visible { get; set; } = true;
+
+		bool CanBeVisible (View view)
+		{
+			if (!view.Visible) {
+				return false;
+			}
+			for (var c = view.SuperView; c != null; c = c.SuperView) {
+				if (!c.Visible) {
+					return false;
+				}
+			}
+
+			return true;
+		}
 	}
 	}
 }
 }

+ 11 - 6
Terminal.Gui/Core/Window.cs

@@ -49,7 +49,7 @@ namespace Terminal.Gui {
 		/// <summary>
 		/// <summary>
 		/// Initializes a new instance of the <see cref="Gui.Window"/> class with an optional title using <see cref="LayoutStyle.Absolute"/> positioning.
 		/// Initializes a new instance of the <see cref="Gui.Window"/> class with an optional title using <see cref="LayoutStyle.Absolute"/> positioning.
 		/// </summary>
 		/// </summary>
-		/// <param name="frame">Superview-relatie rectangle specifying the location and size</param>
+		/// <param name="frame">Superview-relative rectangle specifying the location and size</param>
 		/// <param name="title">Title</param>
 		/// <param name="title">Title</param>
 		/// <remarks>
 		/// <remarks>
 		/// This constructor intitalizes a Window with a <see cref="LayoutStyle"/> of <see cref="LayoutStyle.Absolute"/>. Use constructors
 		/// This constructor intitalizes a Window with a <see cref="LayoutStyle"/> of <see cref="LayoutStyle.Absolute"/>. Use constructors
@@ -81,7 +81,7 @@ namespace Terminal.Gui {
 		/// Initializes a new instance of the <see cref="Window"/> using <see cref="LayoutStyle.Absolute"/> positioning with the specified frame for its location, with the specified frame padding,
 		/// Initializes a new instance of the <see cref="Window"/> using <see cref="LayoutStyle.Absolute"/> positioning with the specified frame for its location, with the specified frame padding,
 		/// and an optional title.
 		/// and an optional title.
 		/// </summary>
 		/// </summary>
-		/// <param name="frame">Superview-relatie rectangle specifying the location and size</param>
+		/// <param name="frame">Superview-relative rectangle specifying the location and size</param>
 		/// <param name="padding">Number of characters to use for padding of the drawn frame.</param>
 		/// <param name="padding">Number of characters to use for padding of the drawn frame.</param>
 		/// <param name="title">Title</param>
 		/// <param name="title">Title</param>
 		/// <remarks>
 		/// <remarks>
@@ -135,23 +135,28 @@ namespace Terminal.Gui {
 		public override void Add (View view)
 		public override void Add (View view)
 		{
 		{
 			contentView.Add (view);
 			contentView.Add (view);
-			if (view.CanFocus)
+			if (view.CanFocus) {
 				CanFocus = true;
 				CanFocus = true;
+			}
+			AddMenuStatusBar (view);
 		}
 		}
 
 
 
 
 		/// <inheritdoc/>
 		/// <inheritdoc/>
 		public override void Remove (View view)
 		public override void Remove (View view)
 		{
 		{
-			if (view == null)
+			if (view == null) {
 				return;
 				return;
+			}
 
 
 			SetNeedsDisplay ();
 			SetNeedsDisplay ();
 			var touched = view.Frame;
 			var touched = view.Frame;
 			contentView.Remove (view);
 			contentView.Remove (view);
 
 
-			if (contentView.InternalSubviews.Count < 1)
-				this.CanFocus = false;
+			if (contentView.InternalSubviews.Count < 1) {
+				CanFocus = false;
+			}
+			RemoveMenuStatusBar (view);
 		}
 		}
 
 
 		/// <inheritdoc/>
 		/// <inheritdoc/>

+ 1 - 1
Terminal.Gui/README.md

@@ -11,7 +11,7 @@ Contains all files required to build the **Terminal.Gui** library (and nuget pac
     - `ConsoleDriver` - Definition for the Console Driver API.
     - `ConsoleDriver` - Definition for the Console Driver API.
     - `Events.cs` - Defines keyboard and mouse related structs & classes. 
     - `Events.cs` - Defines keyboard and mouse related structs & classes. 
     - `PosDim.cs` - Implements **Terminal-Gui's** *Computed Layout* system. These classes have deep dependencies on `View`.
     - `PosDim.cs` - Implements **Terminal-Gui's** *Computed Layout* system. These classes have deep dependencies on `View`.
-    - `Responder` - Base class for the windowing class heirachy. Implements support for keyboard & mouse input.
+    - `Responder` - Base class for the windowing class hierarchy. Implements support for keyboard & mouse input.
     - `View` - Derived from `Responder`, the base class for non-modal visual elements such as controls.
     - `View` - Derived from `Responder`, the base class for non-modal visual elements such as controls.
     - `Toplevel` - Drived from `View`, the base class for modal visual elements such as top-level windows and dialogs. Supports the concept of `MenuBar` and `StatusBar`.
     - `Toplevel` - Drived from `View`, the base class for modal visual elements such as top-level windows and dialogs. Supports the concept of `MenuBar` and `StatusBar`.
     - `Window` - Drived from `TopLevel`, implements Toplevel views with a visible frame and Title.
     - `Window` - Drived from `TopLevel`, implements Toplevel views with a visible frame and Title.

+ 12 - 5
Terminal.Gui/Terminal.Gui.csproj

@@ -5,13 +5,15 @@
     <AssemblyName>Terminal.Gui</AssemblyName>
     <AssemblyName>Terminal.Gui</AssemblyName>
     <DocumentationFile>bin\Release\Terminal.Gui.xml</DocumentationFile>
     <DocumentationFile>bin\Release\Terminal.Gui.xml</DocumentationFile>
     <GenerateDocumentationFile Condition=" '$(Configuration)' == 'Release' ">true</GenerateDocumentationFile>
     <GenerateDocumentationFile Condition=" '$(Configuration)' == 'Release' ">true</GenerateDocumentationFile>
-    <AssemblyVersion>0.89.0.0</AssemblyVersion>
+    <!-- moved to ../Directory.Build.props -->
+    <!-- <AssemblyVersion>0.89.0.0</AssemblyVersion> -->
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup>
   <PropertyGroup>
     <GeneratePackageOnBuild Condition=" '$(Configuration)' == 'Release' ">true</GeneratePackageOnBuild>
     <GeneratePackageOnBuild Condition=" '$(Configuration)' == 'Release' ">true</GeneratePackageOnBuild>
     <PackageId>Terminal.Gui</PackageId>
     <PackageId>Terminal.Gui</PackageId>
-    <PackageVersion>0.89</PackageVersion>
-    <Authors>Miguel de Icaza, Charlie Kindel (@tig), @BDisp</Authors>
+    <!-- moved to ../Directory.Build.props -->
+    <!-- <PackageVersion>0.89</PackageVersion> -->
+    <!-- <Authors>Miguel de Icaza, Charlie Kindel (@tig), @BDisp</Authors> -->
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <PackageProjectUrl>https://github.com/migueldeicaza/gui.cs/</PackageProjectUrl>
     <PackageProjectUrl>https://github.com/migueldeicaza/gui.cs/</PackageProjectUrl>
     <PackageTags>csharp, terminal, c#, f#, gui, toolkit, console</PackageTags>
     <PackageTags>csharp, terminal, c#, f#, gui, toolkit, console</PackageTags>
@@ -66,7 +68,7 @@
       * Added support for F11 and F12 keys. (Thanks @bdisp!)
       * Added support for F11 and F12 keys. (Thanks @bdisp!)
       * Multiple improvements to Date/TimeField. (Thanks @bdisp!)
       * Multiple improvements to Date/TimeField. (Thanks @bdisp!)
       * Fixes #409 - Invoke does not cause Wakeup #501. (Thanks @bdisp!)
       * Fixes #409 - Invoke does not cause Wakeup #501. (Thanks @bdisp!)
-      * Fixed Label text alignemnt. (Thanks @bdisp!)
+      * Fixed Label text alignment. (Thanks @bdisp!)
       * Added mouse features in the Unix version. Supports xterm-1006. (Thanks @bdisp!)
       * Added mouse features in the Unix version. Supports xterm-1006. (Thanks @bdisp!)
       * Several StatusBar fixes. (Thanks @bdisp!)
       * Several StatusBar fixes. (Thanks @bdisp!)
       * Tons of mouse improvements including mouse wheel support (e.g. #404, #409). (Thanks @bdisp!)
       * Tons of mouse improvements including mouse wheel support (e.g. #404, #409). (Thanks @bdisp!)
@@ -80,7 +82,7 @@
       * Fixes #557 MessageBox needs to take ustrings (BREAKING CHANGE). (Thanks @tig!)
       * Fixes #557 MessageBox needs to take ustrings (BREAKING CHANGE). (Thanks @tig!)
       * Fixes ScrollView in several key ways. (Thanks @tig!)
       * Fixes ScrollView in several key ways. (Thanks @tig!)
       *   Now supports Computed layout and has constructors that don't require parameters.
       *   Now supports Computed layout and has constructors that don't require parameters.
-      *   ScrollBarViews are now positioned using Computed layout versus error prone absoulte
+      *   ScrollBarViews are now positioned using Computed layout versus error prone absolute
       *   ScrollBarViews now correctly position themselves when one, either, or both are on/off.
       *   ScrollBarViews now correctly position themselves when one, either, or both are on/off.
       *   IsVertical is now a public property that does the expected thing when changed
       *   IsVertical is now a public property that does the expected thing when changed
       *   Mouse handling is better; there's still a bug where the mouse doesn't get grabbed by the ScrollView initially but I think this is a broader problem. I need @BDisp's help on this.
       *   Mouse handling is better; there's still a bug where the mouse doesn't get grabbed by the ScrollView initially but I think this is a broader problem. I need @BDisp's help on this.
@@ -184,6 +186,11 @@
     </PackageReleaseNotes>
     </PackageReleaseNotes>
   </PropertyGroup>
   </PropertyGroup>
 
 
+  <PropertyGroup>
+    <IncludeSymbols>true</IncludeSymbols>
+    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
+  </PropertyGroup>
+
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType></DebugType>
     <DebugType></DebugType>
   </PropertyGroup>
   </PropertyGroup>

+ 16 - 2
Terminal.Gui/Views/Button.cs

@@ -154,7 +154,7 @@ namespace Terminal.Gui {
 		bool CheckKey (KeyEvent key)
 		bool CheckKey (KeyEvent key)
 		{
 		{
 			if (key.Key == (Key.AltMask | HotKey)) {
 			if (key.Key == (Key.AltMask | HotKey)) {
-				this.SuperView.SetFocus (this);
+				SetFocus ();
 				Clicked?.Invoke ();
 				Clicked?.Invoke ();
 				return true;
 				return true;
 			}
 			}
@@ -210,7 +210,7 @@ namespace Terminal.Gui {
 				me.Flags == MouseFlags.Button1TripleClicked) {
 				me.Flags == MouseFlags.Button1TripleClicked) {
 				if (CanFocus) {
 				if (CanFocus) {
 					if (!HasFocus) {
 					if (!HasFocus) {
-						SuperView?.SetFocus (this);
+						SetFocus ();
 						SetNeedsDisplay ();
 						SetNeedsDisplay ();
 					}
 					}
 					Clicked?.Invoke ();
 					Clicked?.Invoke ();
@@ -220,5 +220,19 @@ namespace Terminal.Gui {
 			}
 			}
 			return false;
 			return false;
 		}
 		}
+
+		///<inheritdoc/>
+		public override void PositionCursor ()
+		{
+			if (HotKey == Key.Unknown) {
+				for (int i = 0; i < base.Text.RuneCount; i++) {
+					if (base.Text [i] == text [0]) {
+						Move (i, 0);
+						return;
+					}
+				}
+			}
+			base.PositionCursor ();
+		}
 	}
 	}
 }
 }

+ 1 - 1
Terminal.Gui/Views/Checkbox.cs

@@ -150,7 +150,7 @@ namespace Terminal.Gui {
 			if (!me.Flags.HasFlag (MouseFlags.Button1Clicked) || !CanFocus)
 			if (!me.Flags.HasFlag (MouseFlags.Button1Clicked) || !CanFocus)
 				return false;
 				return false;
 
 
-			SuperView.SetFocus (this);
+			SetFocus ();
 			var previousChecked = Checked;
 			var previousChecked = Checked;
 			Checked = !Checked;
 			Checked = !Checked;
 			OnToggled (previousChecked);
 			OnToggled (previousChecked);

+ 8 - 7
Terminal.Gui/Views/ComboBox.cs

@@ -196,7 +196,7 @@ namespace Terminal.Gui {
 				return true;
 				return true;
 			} else if (me.Flags == MouseFlags.Button1Pressed) {
 			} else if (me.Flags == MouseFlags.Button1Pressed) {
 				if (!search.HasFocus) {
 				if (!search.HasFocus) {
-					SetFocus (search);
+					search.SetFocus ();
 				}
 				}
 
 
 				return true;
 				return true;
@@ -210,7 +210,7 @@ namespace Terminal.Gui {
 			listview.SelectedItem = SelectedItem > -1 ? SelectedItem : 0;
 			listview.SelectedItem = SelectedItem > -1 ? SelectedItem : 0;
 			if (SelectedItem > -1) {
 			if (SelectedItem > -1) {
 				listview.TabStop = true;
 				listview.TabStop = true;
-				this.SetFocus (listview);
+				listview.SetFocus ();
 			}
 			}
 		}
 		}
 
 
@@ -218,7 +218,7 @@ namespace Terminal.Gui {
 		public override bool OnEnter (View view)
 		public override bool OnEnter (View view)
 		{
 		{
 			if (!search.HasFocus && !listview.HasFocus) {
 			if (!search.HasFocus && !listview.HasFocus) {
-				SetFocus (search);
+				search.SetFocus ();
 			}
 			}
 
 
 			search.CursorPosition = search.Text.RuneCount;
 			search.CursorPosition = search.Text.RuneCount;
@@ -301,7 +301,7 @@ namespace Terminal.Gui {
 			if (e.Key == Key.CursorDown && search.HasFocus) { // jump to list
 			if (e.Key == Key.CursorDown && search.HasFocus) { // jump to list
 				if (searchset.Count > 0) {
 				if (searchset.Count > 0) {
 					listview.TabStop = true;
 					listview.TabStop = true;
-					this.SetFocus (listview);
+					listview.SetFocus ();
 					SetValue (searchset [listview.SelectedItem]);
 					SetValue (searchset [listview.SelectedItem]);
 					return true;
 					return true;
 				} else {
 				} else {
@@ -317,7 +317,7 @@ namespace Terminal.Gui {
 			if (e.Key == Key.CursorUp && listview.HasFocus && listview.SelectedItem == 0 && searchset.Count > 0) // jump back to search
 			if (e.Key == Key.CursorUp && listview.HasFocus && listview.SelectedItem == 0 && searchset.Count > 0) // jump back to search
 			{
 			{
 				search.CursorPosition = search.Text.RuneCount;
 				search.CursorPosition = search.Text.RuneCount;
-				this.SetFocus (search);
+				search.SetFocus ();
 				return true;
 				return true;
 			}
 			}
 
 
@@ -350,7 +350,7 @@ namespace Terminal.Gui {
 			}
 			}
 
 
 			if (e.Key == Key.Esc) {
 			if (e.Key == Key.Esc) {
-				this.SetFocus (search);
+				search.SetFocus ();
 				search.Text = text = "";
 				search.Text = text = "";
 				OnSelectedChanged ();
 				OnSelectedChanged ();
 				return true;
 				return true;
@@ -431,7 +431,7 @@ namespace Terminal.Gui {
 			listview.Height = CalculatetHeight ();
 			listview.Height = CalculatetHeight ();
 
 
 			if (Subviews.Count > 0) {
 			if (Subviews.Count > 0) {
-				SetFocus (search);
+				search.SetFocus ();
 			}
 			}
 		}
 		}
 
 
@@ -499,6 +499,7 @@ namespace Terminal.Gui {
 		private void HideList ()
 		private void HideList ()
 		{
 		{
 			Reset (SelectedItem > -1);
 			Reset (SelectedItem > -1);
+			listview.Clear ();
 			listview.TabStop = false;
 			listview.TabStop = false;
 		}
 		}
 
 

+ 1 - 1
Terminal.Gui/Views/DateField.cs

@@ -357,7 +357,7 @@ namespace Terminal.Gui {
 			if (!ev.Flags.HasFlag (MouseFlags.Button1Clicked))
 			if (!ev.Flags.HasFlag (MouseFlags.Button1Clicked))
 				return false;
 				return false;
 			if (!HasFocus)
 			if (!HasFocus)
-				SuperView.SetFocus (this);
+				SetFocus ();
 
 
 			var point = ev.X;
 			var point = ev.X;
 			if (point > FieldLen)
 			if (point > FieldLen)

+ 4 - 2
Terminal.Gui/Views/FrameView.cs

@@ -92,8 +92,10 @@ namespace Terminal.Gui {
 
 
 		void Initialize ()
 		void Initialize ()
 		{
 		{
-			base.Add (contentView);
-			contentView.Text = base.Text;
+			if (Subviews?.Count == 0) {
+				base.Add (contentView);
+				contentView.Text = base.Text;
+			}
 		}
 		}
 
 
 		void DrawFrame ()
 		void DrawFrame ()

+ 1 - 1
Terminal.Gui/Views/HexView.cs

@@ -16,7 +16,7 @@ namespace Terminal.Gui {
 	/// <remarks>
 	/// <remarks>
 	/// <para>
 	/// <para>
 	/// <see cref="HexView"/> provides a hex editor on top of a seekable <see cref="Stream"/> with the left side showing an hex
 	/// <see cref="HexView"/> provides a hex editor on top of a seekable <see cref="Stream"/> with the left side showing an hex
-	/// dump of the values in the <see cref="Stream"/> and the right side showing the contents (filterd to 
+	/// dump of the values in the <see cref="Stream"/> and the right side showing the contents (filtered to 
 	/// non-control sequence ASCII characters).    
 	/// non-control sequence ASCII characters).    
 	/// </para>
 	/// </para>
 	/// <para>
 	/// <para>

+ 2 - 2
Terminal.Gui/Views/Label.cs

@@ -16,7 +16,7 @@ namespace Terminal.Gui {
 	/// The Label <see cref="View"/> displays a string at a given position and supports multiple lines separted by newline characters. Multi-line Labels support word wrap.
 	/// The Label <see cref="View"/> displays a string at a given position and supports multiple lines separted by newline characters. Multi-line Labels support word wrap.
 	/// </summary>
 	/// </summary>
 	/// <remarks>
 	/// <remarks>
-	/// The <see cref="Label"/> view is functionality identical to <see cref="View"/> and is included for API backwards compatibilty.
+	/// The <see cref="Label"/> view is functionality identical to <see cref="View"/> and is included for API backwards compatibility.
 	/// </remarks>
 	/// </remarks>
 	public class Label : View {
 	public class Label : View {
 		/// <inheritdoc/>
 		/// <inheritdoc/>
@@ -87,7 +87,7 @@ namespace Terminal.Gui {
 
 
 			if (mouseEvent.Flags == MouseFlags.Button1Clicked) {
 			if (mouseEvent.Flags == MouseFlags.Button1Clicked) {
 				if (!HasFocus && SuperView != null) {
 				if (!HasFocus && SuperView != null) {
-					SuperView.SetFocus (this);
+					SetFocus ();
 					SetNeedsDisplay ();
 					SetNeedsDisplay ();
 				}
 				}
 
 

+ 18 - 10
Terminal.Gui/Views/ListView.cs

@@ -454,6 +454,9 @@ namespace Terminal.Gui {
 					top++;
 					top++;
 				OnSelectedChanged ();
 				OnSelectedChanged ();
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
+			} else if (lastSelectedItem == -1) {
+				OnSelectedChanged ();
+				SetNeedsDisplay ();
 			}
 			}
 
 
 			return true;
 			return true;
@@ -517,7 +520,7 @@ namespace Terminal.Gui {
 		public virtual bool OnSelectedChanged ()
 		public virtual bool OnSelectedChanged ()
 		{
 		{
 			if (selected != lastSelectedItem) {
 			if (selected != lastSelectedItem) {
-				var value = source.ToList () [selected];
+				var value = source?.Count > 0 ? source.ToList () [selected] : null;
 				SelectedItemChanged?.Invoke (new ListViewItemEventArgs (selected, value));
 				SelectedItemChanged?.Invoke (new ListViewItemEventArgs (selected, value));
 				lastSelectedItem = selected;
 				lastSelectedItem = selected;
 				return true;
 				return true;
@@ -541,7 +544,7 @@ namespace Terminal.Gui {
 		///<inheritdoc/>
 		///<inheritdoc/>
 		public override bool OnEnter (View view)
 		public override bool OnEnter (View view)
 		{
 		{
-			if (source?.Count > 0 && lastSelectedItem == -1) {
+			if (lastSelectedItem == -1) {
 				OnSelectedChanged ();
 				OnSelectedChanged ();
 				return true;
 				return true;
 			}
 			}
@@ -550,10 +553,10 @@ namespace Terminal.Gui {
 		}
 		}
 
 
 		///<inheritdoc/>
 		///<inheritdoc/>
-		public override bool OnMouseEnter (MouseEvent mouseEvent)
+		public override bool OnLeave (View view)
 		{
 		{
-			if (source?.Count > 0 && selected >= 0 && lastSelectedItem == -1) {
-				lastSelectedItem = selected;
+			if (lastSelectedItem > -1) {
+				lastSelectedItem = -1;
 				return true;
 				return true;
 			}
 			}
 
 
@@ -576,11 +579,13 @@ namespace Terminal.Gui {
 				me.Flags != MouseFlags.WheeledDown && me.Flags != MouseFlags.WheeledUp)
 				me.Flags != MouseFlags.WheeledDown && me.Flags != MouseFlags.WheeledUp)
 				return false;
 				return false;
 
 
-			if (!HasFocus)
-				SuperView.SetFocus (this);
+			if (!HasFocus && CanFocus) {
+				SetFocus ();
+			}
 
 
-			if (source == null)
+			if (source == null) {
 				return false;
 				return false;
+			}
 
 
 			if (me.Flags == MouseFlags.WheeledDown) {
 			if (me.Flags == MouseFlags.WheeledDown) {
 				MoveDown ();
 				MoveDown ();
@@ -590,8 +595,9 @@ namespace Terminal.Gui {
 				return true;
 				return true;
 			}
 			}
 
 
-			if (me.Y + top >= source.Count)
+			if (me.Y + top >= source.Count) {
 				return true;
 				return true;
+			}
 
 
 			selected = top + me.Y;
 			selected = top + me.Y;
 			if (AllowsAll ()) {
 			if (AllowsAll ()) {
@@ -601,8 +607,10 @@ namespace Terminal.Gui {
 			}
 			}
 			OnSelectedChanged ();
 			OnSelectedChanged ();
 			SetNeedsDisplay ();
 			SetNeedsDisplay ();
-			if (me.Flags == MouseFlags.Button1DoubleClicked)
+			if (me.Flags == MouseFlags.Button1DoubleClicked) {
 				OnOpenSelectedItem ();
 				OnOpenSelectedItem ();
+			}
+
 			return true;
 			return true;
 		}
 		}
 	}
 	}

+ 270 - 109
Terminal.Gui/Views/Menu.cs

@@ -56,8 +56,9 @@ namespace Terminal.Gui {
 		/// <param name="title">Title for the menu item.</param>
 		/// <param name="title">Title for the menu item.</param>
 		/// <param name="help">Help text to display.</param>
 		/// <param name="help">Help text to display.</param>
 		/// <param name="action">Action to invoke when the menu item is activated.</param>
 		/// <param name="action">Action to invoke when the menu item is activated.</param>
-		/// <param name="canExecute">Function to determine if the action can currently be executred.</param>
-		public MenuItem (ustring title, string help, Action action, Func<bool> canExecute = null)
+		/// <param name="canExecute">Function to determine if the action can currently be executed.</param>
+		/// <param name="parent">The parent of this menu item.</param>
+		public MenuItem (ustring title, ustring help, Action action, Func<bool> canExecute = null, MenuItem parent = null)
 		{
 		{
 			Title = title ?? "";
 			Title = title ?? "";
 			Help = help ?? "";
 			Help = help ?? "";
@@ -75,17 +76,7 @@ namespace Terminal.Gui {
 					nextIsHot = false;
 					nextIsHot = false;
 				}
 				}
 			}
 			}
-		}
-
-		/// <summary>
-		/// Initializes a new instance of <see cref="MenuItem"/>
-		/// </summary>
-		/// <param name="title">Title for the menu item.</param>
-		/// <param name="subMenu">The menu sub-menu.</param>
-		public MenuItem (ustring title, MenuBarItem subMenu) : this (title, "", null)
-		{
-			SubMenu = subMenu;
-			IsFromSubMenu = true;
+			Parent = parent;
 		}
 		}
 
 
 		/// <summary>
 		/// <summary>
@@ -146,11 +137,15 @@ namespace Terminal.Gui {
 		public MenuItemCheckStyle CheckType { get; set; }
 		public MenuItemCheckStyle CheckType { get; set; }
 
 
 		/// <summary>
 		/// <summary>
-		/// Gets or sets the parent for this <see cref="MenuItem"/>
+		/// Gets or sets the parent for this <see cref="MenuItem"/>.
 		/// </summary>
 		/// </summary>
 		/// <value>The parent.</value>
 		/// <value>The parent.</value>
-		internal MenuBarItem SubMenu { get; set; }
-		internal bool IsFromSubMenu { get; set; }
+		public MenuItem Parent { get; internal set; }
+
+		/// <summary>
+		/// Gets if this <see cref="MenuItem"/> is from a sub-menu.
+		/// </summary>
+		internal bool IsFromSubMenu { get {return Parent != null; } }
 
 
 		/// <summary>
 		/// <summary>
 		/// Merely a debugging aid to see the interaction with main
 		/// Merely a debugging aid to see the interaction with main
@@ -179,8 +174,9 @@ namespace Terminal.Gui {
 		/// <param name="title">Title for the menu item.</param>
 		/// <param name="title">Title for the menu item.</param>
 		/// <param name="help">Help text to display.</param>
 		/// <param name="help">Help text to display.</param>
 		/// <param name="action">Action to invoke when the menu item is activated.</param>
 		/// <param name="action">Action to invoke when the menu item is activated.</param>
-		/// <param name="canExecute">Function to determine if the action can currently be executred.</param>
-		public MenuBarItem (ustring title, string help, Action action, Func<bool> canExecute = null) : base (title, help, action, canExecute)
+		/// <param name="canExecute">Function to determine if the action can currently be executed.</param>
+		/// <param name="parent">The parent <see cref="MenuItem"/> of this if exist, otherwise is null.</param>
+		public MenuBarItem (ustring title, ustring help, Action action, Func<bool> canExecute = null, MenuItem parent = null) : base (title, help, action, canExecute, parent)
 		{
 		{
 			SetTitle (title ?? "");
 			SetTitle (title ?? "");
 			Children = null;
 			Children = null;
@@ -191,12 +187,17 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		/// <param name="title">Title for the menu item.</param>
 		/// <param name="title">Title for the menu item.</param>
 		/// <param name="children">The items in the current menu.</param>
 		/// <param name="children">The items in the current menu.</param>
-		public MenuBarItem (ustring title, MenuItem [] children)
+		/// <param name="parent">The parent <see cref="MenuItem"/> of this if exist, otherwise is null.</param>
+		public MenuBarItem (ustring title, MenuItem [] children, MenuItem parent = null)
 		{
 		{
-			if (children == null)
+			if (children == null) {
 				throw new ArgumentNullException (nameof (children), "The parameter cannot be null. Use an empty array instead.");
 				throw new ArgumentNullException (nameof (children), "The parameter cannot be null. Use an empty array instead.");
-
+			}
 			SetTitle (title ?? "");
 			SetTitle (title ?? "");
+			if (parent != null) {
+				Parent = parent;
+			}
+			SetChildrensParent (children);
 			Children = children;
 			Children = children;
 		}
 		}
 
 
@@ -204,24 +205,78 @@ namespace Terminal.Gui {
 		/// Initializes a new <see cref="MenuBarItem"/>.
 		/// Initializes a new <see cref="MenuBarItem"/>.
 		/// </summary>
 		/// </summary>
 		/// <param name="children">The items in the current menu.</param>
 		/// <param name="children">The items in the current menu.</param>
-		public MenuBarItem (MenuItem [] children) : this (new string (' ', GetMaxTitleLength (children)), children) { }
+		public MenuBarItem (MenuItem [] children) : this ("", children) { }
 
 
 		/// <summary>
 		/// <summary>
 		/// Initializes a new <see cref="MenuBarItem"/>.
 		/// Initializes a new <see cref="MenuBarItem"/>.
 		/// </summary>
 		/// </summary>
-		public MenuBarItem () : this (children: new MenuItem [] { }) { }
+		public MenuBarItem () : this (children: new MenuItem [] { }) {  }
+
+		//static int GetMaxTitleLength (MenuItem [] children)
+		//{
+		//	int maxLength = 0;
+		//	foreach (var item in children) {
+		//		int len = GetMenuBarItemLength (item.Title);
+		//		if (len > maxLength)
+		//			maxLength = len;
+		//		item.IsFromSubMenu = true;
+		//	}
+
+		//	return maxLength;
+		//}
+
+		void SetChildrensParent (MenuItem [] childrens)
+		{
+			foreach (var child in childrens) {
+				if (child != null && child.Parent == null) {
+					child.Parent = this;
+				}
+			}
+		}
+
+		/// <summary>
+		/// Check if the children parameter is a <see cref="MenuBarItem"/>.
+		/// </summary>
+		/// <param name="children"></param>
+		/// <returns>Returns a <see cref="MenuBarItem"/> or null otherwise.</returns>
+		public MenuBarItem SubMenu (MenuItem children)
+		{
+			return children as MenuBarItem;
+		}
 
 
-		static int GetMaxTitleLength (MenuItem [] children)
+		/// <summary>
+		/// Check if the <see cref="MenuItem"/> parameter is a child of this.
+		/// </summary>
+		/// <param name="menuItem"></param>
+		/// <returns>Returns <c>true</c> if it is a child of this. <c>false</c> otherwise.</returns>
+		public bool IsSubMenuOf (MenuItem menuItem)
 		{
 		{
-			int maxLength = 0;
-			foreach (var item in children) {
-				int len = GetMenuBarItemLength (item.Title);
-				if (len > maxLength)
-					maxLength = len;
-				item.IsFromSubMenu = true;
+			foreach (var child in Children) {
+				if (child == menuItem && child.Parent == menuItem.Parent) {
+					return true;
+				}
 			}
 			}
+			return false;
+		}
 
 
-			return maxLength;
+		/// <summary>
+		/// Get the index of the <see cref="MenuItem"/> parameter.
+		/// </summary>
+		/// <param name="children"></param>
+		/// <returns>Returns a value bigger than -1 if the <see cref="MenuItem"/> is a child of this.</returns>
+		public int GetChildrenIndex (MenuItem children)
+		{
+			if (Children?.Length == 0) {
+				return -1;
+			}
+			int i = 0;
+			foreach (var child in Children) {
+				if (child == children) {
+					return i;
+				}
+				i++;
+			}
+			return -1;
 		}
 		}
 
 
 		void SetTitle (ustring title)
 		void SetTitle (ustring title)
@@ -229,10 +284,9 @@ namespace Terminal.Gui {
 			if (title == null)
 			if (title == null)
 				title = "";
 				title = "";
 			Title = title;
 			Title = title;
-			TitleLength = GetMenuBarItemLength (Title);
 		}
 		}
 
 
-		static int GetMenuBarItemLength (ustring title)
+		int GetMenuBarItemLength (ustring title)
 		{
 		{
 			int len = 0;
 			int len = 0;
 			foreach (var ch in title) {
 			foreach (var ch in title) {
@@ -255,9 +309,10 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		/// <value>The children.</value>
 		/// <value>The children.</value>
 		public MenuItem [] Children { get; set; }
 		public MenuItem [] Children { get; set; }
-		internal int TitleLength { get; private set; }
 
 
-		internal bool IsTopLevel { get => (Children == null || Children.Length == 0); }
+		internal int TitleLength => GetMenuBarItemLength (Title);
+
+		internal bool IsTopLevel { get => Parent == null && (Children == null || Children.Length == 0); }
 
 
 	}
 	}
 
 
@@ -328,7 +383,7 @@ namespace Terminal.Gui {
 				for (int p = 0; p < Frame.Width - 2; p++)
 				for (int p = 0; p < Frame.Width - 2; p++)
 					if (item == null)
 					if (item == null)
 						Driver.AddRune (Driver.HLine);
 						Driver.AddRune (Driver.HLine);
-					else if (p == Frame.Width - 3 && barItems.Children [i].SubMenu != null)
+					else if (p == Frame.Width - 3 && barItems.SubMenu(barItems.Children [i]) != null)
 						Driver.AddRune (Driver.RightArrow);
 						Driver.AddRune (Driver.RightArrow);
 					else
 					else
 						Driver.AddRune (' ');
 						Driver.AddRune (' ');
@@ -429,66 +484,19 @@ namespace Terminal.Gui {
 
 
 		public override bool ProcessKey (KeyEvent kb)
 		public override bool ProcessKey (KeyEvent kb)
 		{
 		{
-			bool disabled;
 			switch (kb.Key) {
 			switch (kb.Key) {
 			case Key.Tab:
 			case Key.Tab:
 				host.CleanUp ();
 				host.CleanUp ();
 				return true;
 				return true;
 			case Key.CursorUp:
 			case Key.CursorUp:
-				if (barItems.IsTopLevel || current == -1)
-					return true;
-				do {
-					disabled = false;
-					current--;
-					if (host.UseKeysUpDownAsKeysLeftRight) {
-						if (current == -1 && barItems.Children [current + 1].IsFromSubMenu && host.selectedSub > -1) {
-							current++;
-							host.PreviousMenu (true);
-							if (host.openMenu.current > 0) {
-								host.openMenu.current--;
-							}
-							break;
-						}
-					}
-					if (current < 0)
-						current = barItems.Children.Length - 1;
-					var item = barItems.Children [current];
-					if (item == null || !item.IsEnabled ()) disabled = true;
-					if (host.UseKeysUpDownAsKeysLeftRight && barItems.Children [current]?.SubMenu != null &&
-						!disabled && host.IsMenuOpen) {
-						CheckSubMenu ();
-						break;
-					}
-				} while (barItems.Children [current] == null || disabled);
-				SetNeedsDisplay ();
-				return true;
+				return MoveUp ();
 			case Key.CursorDown:
 			case Key.CursorDown:
-				if (barItems.IsTopLevel) {
-					return true;
-				}
-
-				do {
-					current++;
-					disabled = false;
-					if (current == barItems.Children.Length)
-						current = 0;
-					var item = barItems.Children [current];
-					if (item == null || !item.IsEnabled ()) disabled = true;
-					if (host.UseKeysUpDownAsKeysLeftRight && barItems.Children [current]?.SubMenu != null &&
-						!disabled && host.IsMenuOpen) {
-						CheckSubMenu ();
-						break;
-					}
-					if (!host.IsMenuOpen)
-						host.OpenMenu (host.selected);
-				} while (barItems.Children [current] == null || disabled);
-				SetNeedsDisplay ();
-				return true;
+				return MoveDown ();
 			case Key.CursorLeft:
 			case Key.CursorLeft:
 				host.PreviousMenu (true);
 				host.PreviousMenu (true);
 				return true;
 				return true;
 			case Key.CursorRight:
 			case Key.CursorRight:
-				host.NextMenu (barItems.IsTopLevel || barItems.Children [current].IsFromSubMenu ? true : false);
+				host.NextMenu (barItems.IsTopLevel || (barItems.Children != null && current > -1 && current < barItems.Children.Length && barItems.Children [current].IsFromSubMenu) ? true : false);
 				return true;
 				return true;
 			case Key.Esc:
 			case Key.Esc:
 				Application.UngrabMouse ();
 				Application.UngrabMouse ();
@@ -497,8 +505,7 @@ namespace Terminal.Gui {
 			case Key.Enter:
 			case Key.Enter:
 				if (barItems.IsTopLevel) {
 				if (barItems.IsTopLevel) {
 					Run (barItems.Action);
 					Run (barItems.Action);
-				} else {
-					CheckSubMenu ();
+				} else if (current > -1) {
 					Run (barItems.Children [current].Action);
 					Run (barItems.Children [current].Action);
 				}
 				}
 				return true;
 				return true;
@@ -520,6 +527,85 @@ namespace Terminal.Gui {
 			return false;
 			return false;
 		}
 		}
 
 
+		bool MoveDown ()
+		{
+			if (barItems.IsTopLevel) {
+				return true;
+			}
+			bool disabled;
+			do {
+				current++;
+				if (current >= barItems.Children.Length) {
+					current = 0;
+				}
+				if (this != host.openCurrentMenu && barItems.Children [current].IsFromSubMenu && host.selectedSub > -1) {
+					host.PreviousMenu (true);
+					host.SelectEnabledItem (barItems.Children, current, out current);
+					host.openCurrentMenu = this;
+				}
+				var item = barItems.Children [current];
+				if (item?.IsEnabled () != true) {
+					disabled = true;
+				} else {
+					disabled = false;
+				}
+				if (host.UseKeysUpDownAsKeysLeftRight && barItems.SubMenu (barItems.Children [current]) != null &&
+					!disabled && host.IsMenuOpen) {
+					CheckSubMenu ();
+					break;
+				}
+				if (!host.IsMenuOpen) {
+					host.OpenMenu (host.selected);
+				}
+			} while (barItems.Children [current] == null || disabled);
+			SetNeedsDisplay ();
+			return true;
+		}
+
+		bool MoveUp ()
+		{
+			if (barItems.IsTopLevel || current == -1) {
+				return true;
+			}
+			bool disabled;
+			do {
+				current--;
+				if (host.UseKeysUpDownAsKeysLeftRight) {
+					if ((current == -1 || this != host.openCurrentMenu) && barItems.Children [current + 1].IsFromSubMenu && host.selectedSub > -1) {
+						current++;
+						host.PreviousMenu (true);
+						if (current > 0) {
+							current--;
+							host.openCurrentMenu = this;
+						}
+						break;
+					}
+				}
+				if (current < 0)
+					current = barItems.Children.Length - 1;
+				if (!host.SelectEnabledItem (barItems.Children, current, out current, false)) {
+					current = 0;
+					if (!host.SelectEnabledItem (barItems.Children, current, out current)) {
+						host.CloseMenu ();
+					}
+					break;
+				}
+				var item = barItems.Children [current];
+				if (item?.IsEnabled () != true) {
+					disabled = true;
+				} else {
+					disabled = false;
+				}
+				if (host.UseKeysUpDownAsKeysLeftRight && barItems.SubMenu (barItems.Children [current]) != null &&
+					!disabled && host.IsMenuOpen) {
+					CheckSubMenu ();
+					break;
+				}
+			} while (barItems.Children [current] == null || disabled);
+			SetNeedsDisplay ();
+			return true;
+		}
+
 		public override bool MouseEvent (MouseEvent me)
 		public override bool MouseEvent (MouseEvent me)
 		{
 		{
 			if (!host.handled && !host.HandleGrabView (me, this)) {
 			if (!host.handled && !host.HandleGrabView (me, this)) {
@@ -558,17 +644,22 @@ namespace Terminal.Gui {
 
 
 		internal void CheckSubMenu ()
 		internal void CheckSubMenu ()
 		{
 		{
-			if (barItems.Children [current] == null)
+			if (current == -1 || barItems.Children [current] == null) {
 				return;
 				return;
-			var subMenu = barItems.Children [current].SubMenu;
+			}
+			var subMenu = barItems.SubMenu (barItems.Children [current]);
 			if (subMenu != null) {
 			if (subMenu != null) {
 				int pos = -1;
 				int pos = -1;
-				if (host.openSubMenu != null)
+				if (host.openSubMenu != null) {
 					pos = host.openSubMenu.FindIndex (o => o?.barItems == subMenu);
 					pos = host.openSubMenu.FindIndex (o => o?.barItems == subMenu);
+				}
+				if (pos == -1 && this != host.openCurrentMenu && subMenu.Children != host.openCurrentMenu.barItems.Children) {
+					host.CloseMenu (false, true);
+				}
 				host.Activate (host.selected, pos, subMenu);
 				host.Activate (host.selected, pos, subMenu);
-			} else if (host.openSubMenu != null && !barItems.Children [current].IsFromSubMenu)
+			} else if (host.openSubMenu?.Last ().barItems.IsSubMenuOf (barItems.Children [current]) == false) {
 				host.CloseMenu (false, true);
 				host.CloseMenu (false, true);
-			else {
+			} else {
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 			}
 			}
 		}
 		}
@@ -684,7 +775,7 @@ namespace Terminal.Gui {
 					selected = 0;
 					selected = 0;
 					CanFocus = true;
 					CanFocus = true;
 					lastFocused = SuperView.MostFocused;
 					lastFocused = SuperView.MostFocused;
-					SuperView.SetFocus (this);
+					SetFocus ();
 					SetNeedsDisplay ();
 					SetNeedsDisplay ();
 					Application.GrabMouse (this);
 					Application.GrabMouse (this);
 				} else if (!openedByHotKey) {
 				} else if (!openedByHotKey) {
@@ -711,7 +802,7 @@ namespace Terminal.Gui {
 			selected = -1;
 			selected = -1;
 			CanFocus = false;
 			CanFocus = false;
 			if (lastFocused != null) {
 			if (lastFocused != null) {
-				lastFocused.SuperView?.SetFocus (lastFocused);
+				lastFocused.SetFocus ();
 			}
 			}
 			SetNeedsDisplay ();
 			SetNeedsDisplay ();
 			Application.UngrabMouse ();
 			Application.UngrabMouse ();
@@ -788,7 +879,7 @@ namespace Terminal.Gui {
 		public Action MenuClosing;
 		public Action MenuClosing;
 
 
 		internal Menu openMenu;
 		internal Menu openMenu;
-		Menu openCurrentMenu;
+		internal Menu openCurrentMenu;
 		internal List<Menu> openSubMenu;
 		internal List<Menu> openSubMenu;
 		View previousFocused;
 		View previousFocused;
 		internal bool isMenuOpening;
 		internal bool isMenuOpening;
@@ -844,7 +935,7 @@ namespace Terminal.Gui {
 				openCurrentMenu.previousSubFocused = openMenu;
 				openCurrentMenu.previousSubFocused = openMenu;
 
 
 				SuperView.Add (openMenu);
 				SuperView.Add (openMenu);
-				SuperView.SetFocus (openMenu);
+				openMenu.SetFocus ();
 				break;
 				break;
 			default:
 			default:
 				if (openSubMenu == null)
 				if (openSubMenu == null)
@@ -859,7 +950,9 @@ namespace Terminal.Gui {
 					SuperView.Add (openCurrentMenu);
 					SuperView.Add (openCurrentMenu);
 				}
 				}
 				selectedSub = openSubMenu.Count - 1;
 				selectedSub = openSubMenu.Count - 1;
-				SuperView?.SetFocus (openCurrentMenu);
+				if (selectedSub > -1 && SelectEnabledItem (openCurrentMenu.barItems.Children, openCurrentMenu.current, out openCurrentMenu.current)) {
+					openCurrentMenu.SetFocus ();
+				}
 				break;
 				break;
 			}
 			}
 			isMenuOpening = false;
 			isMenuOpening = false;
@@ -878,6 +971,10 @@ namespace Terminal.Gui {
 
 
 			previousFocused = SuperView.Focused;
 			previousFocused = SuperView.Focused;
 			OpenMenu (selected);
 			OpenMenu (selected);
+			if (!SelectEnabledItem (openCurrentMenu.barItems.Children, openCurrentMenu.current, out openCurrentMenu.current)) {
+				CloseMenu ();
+			}
+			openCurrentMenu.CheckSubMenu ();
 			Application.GrabMouse (this);
 			Application.GrabMouse (this);
 		}
 		}
 
 
@@ -891,9 +988,58 @@ namespace Terminal.Gui {
 				previousFocused = SuperView.Focused;
 				previousFocused = SuperView.Focused;
 
 
 			OpenMenu (idx, sIdx, subMenu);
 			OpenMenu (idx, sIdx, subMenu);
+			if (!SelectEnabledItem (openCurrentMenu.barItems.Children, openCurrentMenu.current, out openCurrentMenu.current)) {
+				if (subMenu == null) {
+					CloseMenu ();
+				}
+			}
 			SetNeedsDisplay ();
 			SetNeedsDisplay ();
 		}
 		}
 
 
+		internal bool SelectEnabledItem (IEnumerable<MenuItem> chldren, int current, out int newCurrent, bool forward = true)
+		{
+			if (chldren == null) {
+				newCurrent = -1;
+				return true;
+			}
+
+			IEnumerable<MenuItem> childrens;
+			if (forward) {
+				childrens = chldren;
+			} else {
+				childrens = chldren.Reverse ();
+			}
+			int count;
+			if (forward) {
+				count = -1;
+			} else {
+				count = childrens.Count ();
+			}
+			foreach (var child in childrens) {
+				if (forward) {
+					if (++count < current) {
+						continue;
+					}
+				} else {
+					if (--count > current) {
+						continue;
+					}
+				}
+				if (child == null || !child.IsEnabled ()) {
+					if (forward) {
+						current++;
+					} else {
+						current--;
+					}
+				} else {
+					newCurrent = current;
+					return true;
+				}
+			}
+			newCurrent = -1;
+			return false;
+		}
+
 		/// <summary>
 		/// <summary>
 		/// Closes the current Menu programatically, if open.
 		/// Closes the current Menu programatically, if open.
 		/// </summary>
 		/// </summary>
@@ -912,11 +1058,11 @@ namespace Terminal.Gui {
 			switch (isSubMenu) {
 			switch (isSubMenu) {
 			case false:
 			case false:
 				if (openMenu != null) {
 				if (openMenu != null) {
-					SuperView.Remove (openMenu);
+					SuperView?.Remove (openMenu);
 				}
 				}
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 				if (previousFocused != null && previousFocused is Menu && openMenu != null && previousFocused.ToString () != openCurrentMenu.ToString ())
 				if (previousFocused != null && previousFocused is Menu && openMenu != null && previousFocused.ToString () != openCurrentMenu.ToString ())
-					previousFocused?.SuperView?.SetFocus (previousFocused);
+					previousFocused.SetFocus ();
 				openMenu?.Dispose ();
 				openMenu?.Dispose ();
 				openMenu = null;
 				openMenu = null;
 				if (lastFocused is Menu || lastFocused is MenuBar) {
 				if (lastFocused is Menu || lastFocused is MenuBar) {
@@ -928,9 +1074,9 @@ namespace Terminal.Gui {
 					if (!reopen) {
 					if (!reopen) {
 						selected = -1;
 						selected = -1;
 					}
 					}
-					LastFocused.SuperView?.SetFocus (LastFocused);
+					LastFocused.SetFocus ();
 				} else {
 				} else {
-					SuperView.SetFocus (this);
+					SetFocus ();
 					PositionCursor ();
 					PositionCursor ();
 				}
 				}
 				IsMenuOpen = false;
 				IsMenuOpen = false;
@@ -940,7 +1086,7 @@ namespace Terminal.Gui {
 				selectedSub = -1;
 				selectedSub = -1;
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 				RemoveAllOpensSubMenus ();
 				RemoveAllOpensSubMenus ();
-				openCurrentMenu.previousSubFocused?.SuperView?.SetFocus (openCurrentMenu.previousSubFocused);
+				openCurrentMenu.previousSubFocused.SetFocus ();
 				openSubMenu = null;
 				openSubMenu = null;
 				IsMenuOpen = true;
 				IsMenuOpen = true;
 				break;
 				break;
@@ -956,9 +1102,9 @@ namespace Terminal.Gui {
 			for (int i = openSubMenu.Count - 1; i > index; i--) {
 			for (int i = openSubMenu.Count - 1; i > index; i--) {
 				isMenuClosing = true;
 				isMenuClosing = true;
 				if (openSubMenu.Count - 1 > 0)
 				if (openSubMenu.Count - 1 > 0)
-					SuperView.SetFocus (openSubMenu [i - 1]);
+					openSubMenu [i - 1].SetFocus ();
 				else
 				else
-					SuperView.SetFocus (openMenu);
+					openMenu.SetFocus ();
 				if (openSubMenu != null) {
 				if (openSubMenu != null) {
 					var menu = openSubMenu [i];
 					var menu = openSubMenu [i];
 					SuperView.Remove (menu);
 					SuperView.Remove (menu);
@@ -1041,6 +1187,13 @@ namespace Terminal.Gui {
 				if (selected > -1)
 				if (selected > -1)
 					CloseMenu (true, false);
 					CloseMenu (true, false);
 				OpenMenu (selected);
 				OpenMenu (selected);
+				if (!SelectEnabledItem (openCurrentMenu.barItems.Children, openCurrentMenu.current, out openCurrentMenu.current, false)) {
+					openCurrentMenu.current = 0;
+					if (!SelectEnabledItem (openCurrentMenu.barItems.Children, openCurrentMenu.current, out openCurrentMenu.current)) {
+						CloseMenu ();
+					}
+					break;
+				}
 				break;
 				break;
 			case true:
 			case true:
 				if (selectedSub > -1) {
 				if (selectedSub > -1) {
@@ -1068,17 +1221,19 @@ namespace Terminal.Gui {
 				if (selected > -1)
 				if (selected > -1)
 					CloseMenu (true);
 					CloseMenu (true);
 				OpenMenu (selected);
 				OpenMenu (selected);
+				SelectEnabledItem (openCurrentMenu.barItems.Children, openCurrentMenu.current, out openCurrentMenu.current);
 				break;
 				break;
 			case true:
 			case true:
 				if (UseKeysUpDownAsKeysLeftRight) {
 				if (UseKeysUpDownAsKeysLeftRight) {
 					CloseMenu (false, true);
 					CloseMenu (false, true);
 					NextMenu ();
 					NextMenu ();
 				} else {
 				} else {
-					if ((selectedSub == -1 || openSubMenu == null || openSubMenu?.Count == selectedSub) && openCurrentMenu.barItems.Children [openCurrentMenu.current].SubMenu == null) {
+					var subMenu = openCurrentMenu.barItems.SubMenu (openCurrentMenu.barItems.Children [openCurrentMenu.current]);
+					if ((selectedSub == -1 || openSubMenu == null || openSubMenu?.Count == selectedSub) && subMenu == null) {
 						if (openSubMenu != null)
 						if (openSubMenu != null)
 							CloseMenu (false, true);
 							CloseMenu (false, true);
 						NextMenu ();
 						NextMenu ();
-					} else if (openCurrentMenu.barItems.Children [openCurrentMenu.current].SubMenu != null ||
+					} else if (subMenu != null ||
 						!openCurrentMenu.barItems.Children [openCurrentMenu.current].IsFromSubMenu)
 						!openCurrentMenu.barItems.Children [openCurrentMenu.current].IsFromSubMenu)
 						selectedSub++;
 						selectedSub++;
 					else
 					else
@@ -1120,6 +1275,10 @@ namespace Terminal.Gui {
 				Application.GrabMouse (this);
 				Application.GrabMouse (this);
 				selected = i;
 				selected = i;
 				OpenMenu (i);
 				OpenMenu (i);
+				if (!SelectEnabledItem (openCurrentMenu.barItems.Children, openCurrentMenu.current, out openCurrentMenu.current)) {
+					CloseMenu ();
+				}
+				openCurrentMenu.CheckSubMenu ();
 			}
 			}
 		}
 		}
 
 
@@ -1167,13 +1326,15 @@ namespace Terminal.Gui {
 				CloseMenu ();
 				CloseMenu ();
 				if (openedByAltKey) {
 				if (openedByAltKey) {
 					openedByAltKey = false;
 					openedByAltKey = false;
-					LastFocused.SuperView?.SetFocus (LastFocused);
+					LastFocused.SetFocus ();
 				}
 				}
 				break;
 				break;
 
 
 			case Key.CursorDown:
 			case Key.CursorDown:
 			case Key.Enter:
 			case Key.Enter:
-				ProcessMenu (selected, Menus [selected]);
+				if (selected > -1) {
+					ProcessMenu (selected, Menus [selected]); 
+				}
 				break;
 				break;
 
 
 			default:
 			default:

+ 111 - 25
Terminal.Gui/Views/RadioGroup.cs

@@ -10,15 +10,18 @@ namespace Terminal.Gui {
 	public class RadioGroup : View {
 	public class RadioGroup : View {
 		int selected = -1;
 		int selected = -1;
 		int cursor;
 		int cursor;
+		DisplayModeLayout displayMode;
+		int horizontalSpace = 2;
+		List<(int pos, int length)> horizontal;
 
 
-		void Init(Rect rect, ustring [] radioLabels, int selected)
+		void Init (Rect rect, ustring [] radioLabels, int selected)
 		{
 		{
 			if (radioLabels == null) {
 			if (radioLabels == null) {
 				this.radioLabels = new List<ustring>();
 				this.radioLabels = new List<ustring>();
 			} else {
 			} else {
 				this.radioLabels = radioLabels.ToList ();
 				this.radioLabels = radioLabels.ToList ();
 			}
 			}
-			
+
 			this.selected = selected;
 			this.selected = selected;
 			SetWidthHeight (this.radioLabels);
 			SetWidthHeight (this.radioLabels);
 			CanFocus = true;
 			CanFocus = true;
@@ -59,30 +62,61 @@ namespace Terminal.Gui {
 		/// <param name="y">The y coordinate.</param>
 		/// <param name="y">The y coordinate.</param>
 		/// <param name="radioLabels">The radio labels; an array of strings that can contain hotkeys using an underscore before the letter.</param>
 		/// <param name="radioLabels">The radio labels; an array of strings that can contain hotkeys using an underscore before the letter.</param>
 		/// <param name="selected">The item to be selected, the value is clamped to the number of items.</param>		
 		/// <param name="selected">The item to be selected, the value is clamped to the number of items.</param>		
-		public RadioGroup (int x, int y, ustring [] radioLabels, int selected = 0) : 
+		public RadioGroup (int x, int y, ustring [] radioLabels, int selected = 0) :
 			this (MakeRect (x, y, radioLabels != null ? radioLabels.ToList() : null), radioLabels, selected) { }
 			this (MakeRect (x, y, radioLabels != null ? radioLabels.ToList() : null), radioLabels, selected) { }
 
 
 		/// <summary>
 		/// <summary>
-		/// The location of the cursor in the <see cref="RadioGroup"/>
+		/// Gets or sets the <see cref="DisplayModeLayout"/> for this <see cref="RadioGroup"/>.
 		/// </summary>
 		/// </summary>
-		public int Cursor {
-			get => cursor;
+		public DisplayModeLayout DisplayMode {
+			get { return displayMode; }
 			set {
 			set {
-				if (cursor < 0 || cursor >= radioLabels.Count)
-					return;
-				cursor = value;
-				SetNeedsDisplay ();
+				if (displayMode != value) {
+					displayMode = value;
+					SetWidthHeight (radioLabels);
+					SetNeedsDisplay ();
+				}
+			}
+		}
+
+		/// <summary>
+		/// Gets or sets the horizontal space for this <see cref="RadioGroup"/> if the <see cref="DisplayMode"/> is <see cref="DisplayModeLayout.Horizontal"/>
+		/// </summary>
+		public int HorizontalSpace {
+			get { return horizontalSpace; }
+			set {
+				if (horizontalSpace != value && displayMode == DisplayModeLayout.Horizontal) {
+					horizontalSpace = value;
+					SetWidthHeight (radioLabels);
+					SetNeedsDisplay ();
+				}
 			}
 			}
 		}
 		}
 
 
 		void SetWidthHeight (List<ustring> radioLabels)
 		void SetWidthHeight (List<ustring> radioLabels)
 		{
 		{
-			var r = MakeRect(0, 0, radioLabels);
-			if (LayoutStyle == LayoutStyle.Computed) {
-				Width = r.Width;
-				Height = radioLabels.Count;
-			} else {
-				Frame = new Rect (Frame.Location, new Size (r.Width, radioLabels.Count));
+			switch (displayMode) {
+			case DisplayModeLayout.Vertical:
+				var r = MakeRect (0, 0, radioLabels);
+				if (LayoutStyle == LayoutStyle.Computed) {
+					Width = r.Width;
+					Height = radioLabels.Count;
+				} else {
+					Frame = new Rect (Frame.Location, new Size (r.Width, radioLabels.Count));
+				}
+				break;
+			case DisplayModeLayout.Horizontal:
+				CalculateHorizontalPositions ();
+				var length = 0;
+				foreach (var item in horizontal) {
+					length += item.length;
+				}
+				var hr = new Rect (0, 0, length, 1);
+				if (LayoutStyle == LayoutStyle.Computed) {
+					Width = hr.Width;
+					Height = 1;
+				}
+				break;
 			}
 			}
 		}
 		}
 
 
@@ -106,7 +140,7 @@ namespace Terminal.Gui {
 		/// The radio labels to display
 		/// The radio labels to display
 		/// </summary>
 		/// </summary>
 		/// <value>The radio labels.</value>
 		/// <value>The radio labels.</value>
-		public ustring [] RadioLabels { 
+		public ustring [] RadioLabels {
 			get => radioLabels.ToArray();
 			get => radioLabels.ToArray();
 			set {
 			set {
 				var prevCount = radioLabels.Count;
 				var prevCount = radioLabels.Count;
@@ -120,6 +154,20 @@ namespace Terminal.Gui {
 			}
 			}
 		}
 		}
 
 
+		private void CalculateHorizontalPositions ()
+		{
+			if (displayMode == DisplayModeLayout.Horizontal) {
+				horizontal = new List<(int pos, int length)> ();
+				int start = 0;
+				int length = 0;
+				for (int i = 0; i < radioLabels.Count; i++) {
+					start += length;
+					length = radioLabels [i].RuneCount + horizontalSpace;
+					horizontal.Add ((start, length));
+				}
+			}
+		}
+
 		//// Redraws the RadioGroup 
 		//// Redraws the RadioGroup 
 		//void Update(List<ustring> newRadioLabels)
 		//void Update(List<ustring> newRadioLabels)
 		//{
 		//{
@@ -139,7 +187,14 @@ namespace Terminal.Gui {
 			Driver.SetAttribute (ColorScheme.Normal);
 			Driver.SetAttribute (ColorScheme.Normal);
 			Clear ();
 			Clear ();
 			for (int i = 0; i < radioLabels.Count; i++) {
 			for (int i = 0; i < radioLabels.Count; i++) {
-				Move (0, i);
+				switch (DisplayMode) {
+				case DisplayModeLayout.Vertical:
+					Move (0, i);
+					break;
+				case DisplayModeLayout.Horizontal:
+					Move (horizontal [i].pos, 0);
+					break;
+				}
 				Driver.SetAttribute (ColorScheme.Normal);
 				Driver.SetAttribute (ColorScheme.Normal);
 				Driver.AddStr (ustring.Make(new Rune[] { (i == selected ? Driver.Selected : Driver.UnSelected), ' '}));
 				Driver.AddStr (ustring.Make(new Rune[] { (i == selected ? Driver.Selected : Driver.UnSelected), ' '}));
 				DrawHotString (radioLabels [i], HasFocus && i == cursor, ColorScheme);
 				DrawHotString (radioLabels [i], HasFocus && i == cursor, ColorScheme);
@@ -149,7 +204,14 @@ namespace Terminal.Gui {
 		///<inheritdoc/>
 		///<inheritdoc/>
 		public override void PositionCursor ()
 		public override void PositionCursor ()
 		{
 		{
-			Move (0, cursor);
+			switch (DisplayMode) {
+			case DisplayModeLayout.Vertical:
+				Move (0, cursor);
+				break;
+			case DisplayModeLayout.Horizontal:
+				Move (horizontal [cursor].pos, 0);
+				break;
+			}
 		}
 		}
 
 
 		// TODO: Make this a global class
 		// TODO: Make this a global class
@@ -192,6 +254,7 @@ namespace Terminal.Gui {
 			get => selected;
 			get => selected;
 			set {
 			set {
 				OnSelectedItemChanged (value, SelectedItem);
 				OnSelectedItemChanged (value, SelectedItem);
+				cursor = selected;
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 			}
 			}
 		}
 		}
@@ -224,7 +287,7 @@ namespace Terminal.Gui {
 								SelectedItem = i;
 								SelectedItem = i;
 								cursor = i;
 								cursor = i;
 								if (!HasFocus)
 								if (!HasFocus)
-									SuperView.SetFocus (this);
+									SetFocus ();
 								return true;
 								return true;
 							}
 							}
 							nextIsHot = false;
 							nextIsHot = false;
@@ -264,16 +327,39 @@ namespace Terminal.Gui {
 		///<inheritdoc/>
 		///<inheritdoc/>
 		public override bool MouseEvent (MouseEvent me)
 		public override bool MouseEvent (MouseEvent me)
 		{
 		{
-			if (!me.Flags.HasFlag (MouseFlags.Button1Clicked))
+			if (!me.Flags.HasFlag (MouseFlags.Button1Clicked)) {
+				return false;
+			}
+			if (!CanFocus) {
 				return false;
 				return false;
+			}
+			SetFocus ();
 
 
-			SuperView.SetFocus (this);
+			var pos = displayMode == DisplayModeLayout.Horizontal ? me.X : me.Y;
+			var rCount = displayMode == DisplayModeLayout.Horizontal ? horizontal.Last ().pos + horizontal.Last ().length : radioLabels.Count;
 
 
-			if (me.Y < radioLabels.Count) {
-				cursor = SelectedItem = me.Y;
-				SetNeedsDisplay ();
+			if (pos < rCount) {
+				var c = displayMode == DisplayModeLayout.Horizontal ? horizontal.FindIndex ((x) => x.pos <= me.X && x.pos + x.length - 2 >= me.X) : me.Y;
+				if (c > -1) {
+					cursor = SelectedItem = c;
+					SetNeedsDisplay ();
+				}
 			}
 			}
 			return true;
 			return true;
 		}
 		}
 	}
 	}
+
+	/// <summary>
+	/// Used for choose the display mode of this <see cref="RadioGroup"/>
+	/// </summary>
+	public enum DisplayModeLayout {
+		/// <summary>
+		/// Vertical mode display. It's the default.
+		/// </summary>
+		Vertical,
+		/// <summary>
+		/// Horizontal mode display.
+		/// </summary>
+		Horizontal
+	}
 }
 }

+ 95 - 34
Terminal.Gui/Views/ScrollView.cs

@@ -74,6 +74,11 @@ namespace Terminal.Gui {
 			}
 			}
 		}
 		}
 
 
+		/// <summary>
+		/// Get or sets the view that host this <see cref="ScrollView"/>
+		/// </summary>
+		public ScrollView Host { get; internal set; }
+
 		void SetPosition (int newPos)
 		void SetPosition (int newPos)
 		{
 		{
 			Position = newPos;
 			Position = newPos;
@@ -168,7 +173,10 @@ namespace Terminal.Gui {
 				} else {
 				} else {
 					bh -= 2;
 					bh -= 2;
 					var by1 = position * bh / Size;
 					var by1 = position * bh / Size;
-					var by2 = (position + bh) * bh / Size;
+					var by2 = Host.KeepContentAlwaysInViewport ? Math.Min (((position + bh) * bh / Size) + 1, bh - 1) : (position + bh) * bh / Size;
+					if (Host.KeepContentAlwaysInViewport && by1 == by2) {
+						by1 = Math.Max (by1 - 1, 0);
+					}
 
 
 					Move (col, 0);
 					Move (col, 0);
 					Driver.AddRune (Driver.UpArrow);
 					Driver.AddRune (Driver.UpArrow);
@@ -191,7 +199,7 @@ namespace Terminal.Gui {
 									hasTopTee = true;
 									hasTopTee = true;
 									posTopTee = y;
 									posTopTee = y;
 									special = Driver.TopTee;
 									special = Driver.TopTee;
-								} else if ((y >= by2 || by2 == 0) && !hasBottomTee) {
+								} else if ((position == 0 && y == bh - 1 || y >= by2 || by2 == 0) && !hasBottomTee) {
 									hasBottomTee = true;
 									hasBottomTee = true;
 									posBottomTee = y;
 									posBottomTee = y;
 									special = Driver.BottomTee;
 									special = Driver.BottomTee;
@@ -225,7 +233,10 @@ namespace Terminal.Gui {
 				} else {
 				} else {
 					bw -= 2;
 					bw -= 2;
 					var bx1 = position * bw / Size;
 					var bx1 = position * bw / Size;
-					var bx2 = (position + bw) * bw / Size;
+					var bx2 = Host.KeepContentAlwaysInViewport ? Math.Min (((position + bw) * bw / Size) + 1, bw - 1) : (position + bw) * bw / Size;
+					if (Host.KeepContentAlwaysInViewport && bx1 == bx2) {
+						bx1 = Math.Max (bx1 - 1, 0);
+					}
 
 
 					Move (0, row);
 					Move (0, row);
 					Driver.AddRune (Driver.LeftArrow);
 					Driver.AddRune (Driver.LeftArrow);
@@ -245,7 +256,7 @@ namespace Terminal.Gui {
 									hasLeftTee = true;
 									hasLeftTee = true;
 									posLeftTee = x;
 									posLeftTee = x;
 									special = Driver.LeftTee;
 									special = Driver.LeftTee;
-								} else if ((x >= bx2 || bx2 == 0) && !hasRightTee) {
+								} else if ((position == 0 && x == bw - 1 || x >= bx2 || bx2 == 0) && !hasRightTee) {
 									hasRightTee = true;
 									hasRightTee = true;
 									posRightTee = x;
 									posRightTee = x;
 									special = Driver.RightTee;
 									special = Driver.RightTee;
@@ -270,8 +281,9 @@ namespace Terminal.Gui {
 		public override bool MouseEvent (MouseEvent me)
 		public override bool MouseEvent (MouseEvent me)
 		{
 		{
 			if (me.Flags != MouseFlags.Button1Pressed && me.Flags != MouseFlags.Button1Clicked &&
 			if (me.Flags != MouseFlags.Button1Pressed && me.Flags != MouseFlags.Button1Clicked &&
-				!me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition))
+				!me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition)) {
 				return false;
 				return false;
+			}
 
 
 			int location = vertical ? me.Y : me.X;
 			int location = vertical ? me.Y : me.X;
 			int barsize = vertical ? Bounds.Height : Bounds.Width;
 			int barsize = vertical ? Bounds.Height : Bounds.Width;
@@ -281,23 +293,27 @@ namespace Terminal.Gui {
 			barsize -= 2;
 			barsize -= 2;
 			var pos = Position;
 			var pos = Position;
 			if (location == 0) {
 			if (location == 0) {
-				if (pos > 0)
+				if (pos > 0) {
 					SetPosition (pos - 1);
 					SetPosition (pos - 1);
+				}
 			} else if (location == barsize + 1) {
 			} else if (location == barsize + 1) {
-				if (pos + 1 < Size)
+				if (Host.CanScroll (1, out _, vertical)) {
 					SetPosition (pos + 1);
 					SetPosition (pos + 1);
-			} else {
+				}
+			} else if (location > 0 && location < barsize + 1) {
 				var b1 = pos * barsize / Size;
 				var b1 = pos * barsize / Size;
-				var b2 = (pos + barsize) * barsize / Size;
-
-				if (b1 == 0 && location == 1 && pos == 0 || (location >= posTopLeftTee + 1 && location <= posBottomRightTee + 1 && (pos != 0 || pos != Size - 1) && location != 1 && location != barsize) ||
-					(b2 == barsize + (b2 - b1 - 1) && location == barsize && pos == Size - 1)) {
-					return true;
-				} else if (location <= barsize) {
-					if (location > 1 && location > posTopLeftTee && location > posBottomRightTee)
-						SetPosition (Math.Min (pos + (Size / location), Size - 1));
-					else if (location <= b2 && pos > 0 || pos > 0)
-						SetPosition (Math.Max (pos - (Size / barsize), 0));
+				var b2 = Host.KeepContentAlwaysInViewport ? Math.Min (((pos + barsize) * barsize / Size) + 1, barsize - 1) : (pos + barsize) * barsize / Size;
+				if (Host.KeepContentAlwaysInViewport && b1 == b2) {
+					b1 = Math.Max (b1 - 1, 0);
+				}
+
+				if (location > b2 + 1 && location > posTopLeftTee && location > b1 && location > posBottomRightTee && posBottomRightTee > 0) {
+					Host.CanScroll (location, out int nv, vertical);
+					if (nv > 0) {
+						SetPosition (Math.Min (pos + nv, Size));
+					}
+				} else if (location <= b1) {
+					SetPosition (Math.Max (pos - barsize - location, 0));
 				}
 				}
 			}
 			}
 
 
@@ -352,6 +368,7 @@ namespace Terminal.Gui {
 			vertical.ChangedPosition += delegate {
 			vertical.ChangedPosition += delegate {
 				ContentOffset = new Point (ContentOffset.X, vertical.Position);
 				ContentOffset = new Point (ContentOffset.X, vertical.Position);
 			};
 			};
+			vertical.Host = this;
 			horizontal = new ScrollBarView (1, 0, isVertical: false) {
 			horizontal = new ScrollBarView (1, 0, isVertical: false) {
 				X = 0,
 				X = 0,
 				Y = Pos.AnchorEnd (1),
 				Y = Pos.AnchorEnd (1),
@@ -361,6 +378,7 @@ namespace Terminal.Gui {
 			horizontal.ChangedPosition += delegate {
 			horizontal.ChangedPosition += delegate {
 				ContentOffset = new Point (horizontal.Position, ContentOffset.Y);
 				ContentOffset = new Point (horizontal.Position, ContentOffset.Y);
 			};
 			};
+			horizontal.Host = this;
 			base.Add (contentView);
 			base.Add (contentView);
 			CanFocus = true;
 			CanFocus = true;
 
 
@@ -372,6 +390,7 @@ namespace Terminal.Gui {
 		Point contentOffset;
 		Point contentOffset;
 		bool showHorizontalScrollIndicator;
 		bool showHorizontalScrollIndicator;
 		bool showVerticalScrollIndicator;
 		bool showVerticalScrollIndicator;
+		bool keepContentAlwaysInViewport = true;
 
 
 		/// <summary>
 		/// <summary>
 		/// Represents the contents of the data shown inside the scrolview
 		/// Represents the contents of the data shown inside the scrolview
@@ -382,11 +401,13 @@ namespace Terminal.Gui {
 				return contentSize;
 				return contentSize;
 			}
 			}
 			set {
 			set {
-				contentSize = value;
-				contentView.Frame = new Rect (contentOffset, value);
-				vertical.Size = contentSize.Height;
-				horizontal.Size = contentSize.Width;
-				SetNeedsDisplay ();
+				if (contentSize != value) {
+					contentSize = value;
+					contentView.Frame = new Rect (contentOffset, value);
+					vertical.Size = contentSize.Height;
+					horizontal.Size = contentSize.Width;
+					SetNeedsDisplay ();
+				}
 			}
 			}
 		}
 		}
 
 
@@ -412,6 +433,32 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		public bool AutoHideScrollBars { get; set; } = true;
 		public bool AutoHideScrollBars { get; set; } = true;
 
 
+		/// <summary>
+		/// Get or sets if the view-port is kept always visible in the area of this <see cref="ScrollView"/>
+		/// </summary>
+		public bool KeepContentAlwaysInViewport {
+			get { return keepContentAlwaysInViewport; }
+			set {
+				if (keepContentAlwaysInViewport != value) {
+					keepContentAlwaysInViewport = value;
+					Point p = default;
+					if (value && -contentOffset.X + Bounds.Width > contentSize.Width) {
+						p = new Point (contentSize.Width - Bounds.Width + (showVerticalScrollIndicator ? 1 : 0), -contentOffset.Y);
+					}
+					if (value && -contentOffset.Y + Bounds.Height > contentSize.Height) {
+						if (p == default) {
+							p = new Point (-contentOffset.X, contentSize.Height - Bounds.Height + (showHorizontalScrollIndicator ? 1 : 0));
+						} else {
+							p.Y = contentSize.Height - Bounds.Height + (showHorizontalScrollIndicator ? 1 : 0);
+						}
+					}
+					if (p != default) {
+						ContentOffset = p;
+					}
+				}
+			}
+		}
+
 		/// <summary>
 		/// <summary>
 		/// Adds the view to the scrollview.
 		/// Adds the view to the scrollview.
 		/// </summary>
 		/// </summary>
@@ -447,7 +494,7 @@ namespace Terminal.Gui {
 		/// <summary>
 		/// <summary>
 		/// Gets or sets the visibility for the horizontal scroll indicator.
 		/// Gets or sets the visibility for the horizontal scroll indicator.
 		/// </summary>
 		/// </summary>
-		/// <value><c>true</c> if show vertical scroll indicator; otherwise, <c>false</c>.</value>
+		/// <value><c>true</c> if show horizontal scroll indicator; otherwise, <c>false</c>.</value>
 		public bool ShowHorizontalScrollIndicator {
 		public bool ShowHorizontalScrollIndicator {
 			get => showHorizontalScrollIndicator;
 			get => showHorizontalScrollIndicator;
 			set {
 			set {
@@ -645,11 +692,11 @@ namespace Terminal.Gui {
 		/// <param name="lines">Number of lines to scroll.</param>
 		/// <param name="lines">Number of lines to scroll.</param>
 		public bool ScrollDown (int lines)
 		public bool ScrollDown (int lines)
 		{
 		{
-			var ny = Math.Max (-contentSize.Height, contentOffset.Y - lines);
-			if (ny == contentOffset.Y)
-				return false;
-			ContentOffset = new Point (contentOffset.X, ny);
-			return true;
+			if (CanScroll (lines, out _, true)) {
+				ContentOffset = new Point (contentOffset.X, contentOffset.Y - lines);
+				return true;
+			}
+			return false;
 		}
 		}
 
 
 		/// <summary>
 		/// <summary>
@@ -659,12 +706,26 @@ namespace Terminal.Gui {
 		/// <param name="cols">Number of columns to scroll by.</param>
 		/// <param name="cols">Number of columns to scroll by.</param>
 		public bool ScrollRight (int cols)
 		public bool ScrollRight (int cols)
 		{
 		{
-			var nx = Math.Max (-contentSize.Width, contentOffset.X - cols);
-			if (nx == contentOffset.X)
-				return false;
+			if (CanScroll (cols, out _)) {
+				ContentOffset = new Point (contentOffset.X - cols, contentOffset.Y);
+				return true;
+			}
+			return false;
+		}
 
 
-			ContentOffset = new Point (nx, contentOffset.Y);
-			return true;
+		internal bool CanScroll (int n, out int max, bool isVertical = false)
+		{
+			var size = isVertical ?
+				(KeepContentAlwaysInViewport ? Bounds.Height + (showHorizontalScrollIndicator ? -2 : -1) : 0) :
+				(KeepContentAlwaysInViewport ? Bounds.Width + (showVerticalScrollIndicator ? -2 : -1) : 0);
+			var cSize = isVertical ? -contentSize.Height : -contentSize.Width;
+			var cOffSet = isVertical ? contentOffset.Y : contentOffset.X;
+			var newSize = Math.Max (cSize, cOffSet - n);
+			max = cSize < newSize - size ? n : -cSize + (cOffSet - size) - 1;
+			if (cSize < newSize - size) {
+				return true;
+			}
+			return false;
 		}
 		}
 
 
 		///<inheritdoc/>
 		///<inheritdoc/>

+ 1 - 1
Terminal.Gui/Views/TextField.cs

@@ -651,7 +651,7 @@ namespace Terminal.Gui {
 					return true;
 					return true;
 				}
 				}
 				if (!HasFocus) {
 				if (!HasFocus) {
-					SuperView.SetFocus (this);
+					SetFocus ();
 				}
 				}
 				PositionCursor (ev);
 				PositionCursor (ev);
 				if (isButtonReleased) {
 				if (isButtonReleased) {

+ 37 - 9
Terminal.Gui/Views/TextView.cs

@@ -234,6 +234,18 @@ namespace Terminal.Gui {
 	///        </description>
 	///        </description>
 	///     </item>
 	///     </item>
 	///     <item>
 	///     <item>
+	///        <term>Control-Home</term>
+	///        <description>
+	///          Scrolls to the first line and moves the cursor there.
+	///        </description>
+	///     </item>
+	///     <item>
+	///        <term>Control-End</term>
+	///        <description>
+	///          Scrolls to the last line and moves the cursor there.
+	///        </description>
+	///     </item>
+	///     <item>
 	///        <term>Delete, Control-d</term>
 	///        <term>Delete, Control-d</term>
 	///        <description>
 	///        <description>
 	///          Deletes the character in front of the cursor.
 	///          Deletes the character in front of the cursor.
@@ -301,7 +313,7 @@ namespace Terminal.Gui {
 		public Action Changed;
 		public Action Changed;
 #endif
 #endif
 		/// <summary>
 		/// <summary>
-		///   Initalizes a <see cref="TextView"/> on the specified area, with absolute position and size.
+		///   Initializes a <see cref="TextView"/> on the specified area, with absolute position and size.
 		/// </summary>
 		/// </summary>
 		/// <remarks>
 		/// <remarks>
 		/// </remarks>
 		/// </remarks>
@@ -311,7 +323,7 @@ namespace Terminal.Gui {
 		}
 		}
 
 
 		/// <summary>
 		/// <summary>
-		///   Initalizes a <see cref="TextView"/> on the specified area, 
+		///   Initializes a <see cref="TextView"/> on the specified area, 
 		///   with dimensions controlled with the X, Y, Width and Height properties.
 		///   with dimensions controlled with the X, Y, Width and Height properties.
 		/// </summary>
 		/// </summary>
 		public TextView () : base ()
 		public TextView () : base ()
@@ -1004,15 +1016,11 @@ namespace Terminal.Gui {
 				break;
 				break;
 
 
 			case Key.CtrlMask | Key.End:
 			case Key.CtrlMask | Key.End:
-				currentRow = model.Count;
-				TrackColumn ();
-				PositionCursor ();
+				MoveEnd ();
 				break;
 				break;
 
 
 			case Key.CtrlMask | Key.Home:
 			case Key.CtrlMask | Key.Home:
-				currentRow = 0;
-				TrackColumn ();
-				PositionCursor ();
+				MoveHome ();
 				break;
 				break;
 
 
 			default:
 			default:
@@ -1086,6 +1094,26 @@ namespace Terminal.Gui {
 
 
 		Rune RuneAt (int col, int row) => model.GetLine (row) [col];
 		Rune RuneAt (int col, int row) => model.GetLine (row) [col];
 
 
+		/// <summary>
+		/// Will scroll the <see cref="TextView"/> to the last line and position the cursor there.
+		/// </summary>
+		public void MoveEnd ()
+		{
+			currentRow = model.Count - 1;
+			TrackColumn ();
+			PositionCursor ();
+		}
+
+		/// <summary>
+		/// Will scroll the <see cref="TextView"/> to the first line and position the cursor there.
+		/// </summary>
+		public void MoveHome ()
+		{
+			currentRow = 0;
+			TrackColumn ();
+			PositionCursor ();
+		}
+
 		bool MoveNext (ref int col, ref int row, out Rune rune)
 		bool MoveNext (ref int col, ref int row, out Rune rune)
 		{
 		{
 			var line = model.GetLine (row);
 			var line = model.GetLine (row);
@@ -1204,7 +1232,7 @@ namespace Terminal.Gui {
 			}
 			}
 
 
 			if (!HasFocus) {
 			if (!HasFocus) {
-				SuperView.SetFocus (this);
+				SetFocus ();
 			}
 			}
 
 
 			if (ev.Flags == MouseFlags.Button1Clicked) {
 			if (ev.Flags == MouseFlags.Button1Clicked) {

+ 1 - 1
Terminal.Gui/Views/TimeField.cs

@@ -275,7 +275,7 @@ namespace Terminal.Gui {
 			if (!ev.Flags.HasFlag (MouseFlags.Button1Clicked))
 			if (!ev.Flags.HasFlag (MouseFlags.Button1Clicked))
 				return false;
 				return false;
 			if (!HasFocus)
 			if (!HasFocus)
-				SuperView.SetFocus (this);
+				SetFocus ();
 
 
 			var point = ev.X;
 			var point = ev.X;
 			if (point > FieldLen)
 			if (point > FieldLen)

+ 1 - 1
Terminal.Gui/Windows/Dialog.cs

@@ -94,7 +94,7 @@ namespace Terminal.Gui {
 		public Dialog (ustring title, params Button [] buttons) : this (title: title, width: 0, height: 0, buttons: buttons) { }
 		public Dialog (ustring title, params Button [] buttons) : this (title: title, width: 0, height: 0, buttons: buttons) { }
 
 
 		/// <summary>
 		/// <summary>
-		/// Adds a <see cref="Button"/> to the <see cref="Dialog"/>, its layout will be controled by the <see cref="Dialog"/>
+		/// Adds a <see cref="Button"/> to the <see cref="Dialog"/>, its layout will be controlled by the <see cref="Dialog"/>
 		/// </summary>
 		/// </summary>
 		/// <param name="button">Button to add.</param>
 		/// <param name="button">Button to add.</param>
 		public void AddButton (Button button)
 		public void AddButton (Button button)

+ 80 - 35
Terminal.Gui/Windows/FileDialog.cs

@@ -44,33 +44,49 @@ namespace Terminal.Gui {
 			return false;
 			return false;
 		}
 		}
 
 
-		internal void Reload ()
+		internal bool Reload (ustring value = null)
 		{
 		{
+			bool valid = false;
 			try {
 			try {
-				dirInfo = new DirectoryInfo (directory.ToString ());
+				dirInfo = new DirectoryInfo (value == null ? directory.ToString () : value.ToString ());
 				infos = (from x in dirInfo.GetFileSystemInfos ()
 				infos = (from x in dirInfo.GetFileSystemInfos ()
-					 where IsAllowed (x)
+					 where IsAllowed (x) && (!canChooseFiles ? x.Attributes.HasFlag (FileAttributes.Directory) : true)
 					 orderby (!x.Attributes.HasFlag (FileAttributes.Directory)) + x.Name
 					 orderby (!x.Attributes.HasFlag (FileAttributes.Directory)) + x.Name
 					 select (x.Name, x.Attributes.HasFlag (FileAttributes.Directory), false)).ToList ();
 					 select (x.Name, x.Attributes.HasFlag (FileAttributes.Directory), false)).ToList ();
 				infos.Insert (0, ("..", true, false));
 				infos.Insert (0, ("..", true, false));
 				top = 0;
 				top = 0;
 				selected = 0;
 				selected = 0;
-			} catch (Exception) {
-				dirInfo = null;
-				infos.Clear ();
+				valid = true;
+			} catch (Exception ex) {
+				switch (ex) {
+				case DirectoryNotFoundException _:
+				case ArgumentException _:
+					dirInfo = null;
+					infos.Clear ();
+					valid = true;
+					break;
+				default:
+					valid = false;
+					break;
+				}
 			} finally {
 			} finally {
-				SetNeedsDisplay ();
+				if (valid) {
+					SetNeedsDisplay ();
+				}
 			}
 			}
+			return valid;
 		}
 		}
 
 
 		ustring directory;
 		ustring directory;
 		public ustring Directory {
 		public ustring Directory {
 			get => directory;
 			get => directory;
 			set {
 			set {
-				if (directory == value)
+				if (directory == value) {
 					return;
 					return;
-				directory = value;
-				Reload ();
+				}
+				if (Reload (value)) {
+					directory = value;
+				}
 			}
 			}
 		}
 		}
 
 
@@ -88,7 +104,7 @@ namespace Terminal.Gui {
 				return false;
 				return false;
 
 
 			if (!HasFocus)
 			if (!HasFocus)
-				SuperView.SetFocus (this);
+				SetFocus ();
 
 
 			if (infos == null)
 			if (infos == null)
 				return false;
 				return false;
@@ -101,10 +117,11 @@ namespace Terminal.Gui {
 			switch (me.Flags) {
 			switch (me.Flags) {
 			case MouseFlags.Button1Clicked:
 			case MouseFlags.Button1Clicked:
 				SetSelected (me);
 				SetSelected (me);
-				SelectionChanged ();
+				OnSelectionChanged ();
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 				break;
 				break;
 			case MouseFlags.Button1DoubleClicked:
 			case MouseFlags.Button1DoubleClicked:
+				UnMarkAll ();
 				SetSelected (me);
 				SetSelected (me);
 				if (ExecuteSelection ()) {
 				if (ExecuteSelection ()) {
 					host.canceled = false;
 					host.canceled = false;
@@ -151,6 +168,17 @@ namespace Terminal.Gui {
 			return true;
 			return true;
 		}
 		}
 
 
+		private void UnMarkAll ()
+		{
+			if (allowsMultipleSelection && infos.Count > 0) {
+				for (int i = 0; i < infos.Count; i++) {
+					if (infos [i].Item3) {
+						infos [i] = (infos [i].Item1, infos [i].Item2, false);
+					}
+				}
+			}
+		}
+
 		void SetSelected (MouseEvent me)
 		void SetSelected (MouseEvent me)
 		{
 		{
 			lastSelected = selected;
 			lastSelected = selected;
@@ -222,15 +250,17 @@ namespace Terminal.Gui {
 		public Action<ustring> DirectoryChanged { get; set; }
 		public Action<ustring> DirectoryChanged { get; set; }
 		public Action<ustring> FileChanged { get; set; }
 		public Action<ustring> FileChanged { get; set; }
 
 
-		void SelectionChanged ()
+		void OnSelectionChanged ()
 		{
 		{
-			if (FilePaths.Count > 0)
-				FileChanged?.Invoke (string.Join (", ", GetFilesName (FilePaths)));
-			else
-				FileChanged?.Invoke (infos [selected].Item2 ? "" : Path.GetFileName (infos [selected].Item1));
-			if (SelectedChanged != null) {
+			if (allowsMultipleSelection) {
+				if (FilePaths.Count > 0) {
+					FileChanged?.Invoke (string.Join (", ", GetFilesName (FilePaths)));
+				} else {
+					FileChanged?.Invoke (infos [selected].Item2 && !canChooseDirectories ? "" : Path.GetFileName (infos [selected].Item1));
+				}
+			} else {
 				var sel = infos [selected];
 				var sel = infos [selected];
-				SelectedChanged ((sel.Item1, sel.Item2));
+				SelectedChanged?.Invoke ((sel.Item1, sel.Item2));
 			}
 			}
 		}
 		}
 
 
@@ -269,13 +299,14 @@ namespace Terminal.Gui {
 						top = selected;
 						top = selected;
 					else
 					else
 						top = 0;
 						top = 0;
-					SelectionChanged ();
+					OnSelectionChanged ();
 
 
 					SetNeedsDisplay ();
 					SetNeedsDisplay ();
 				}
 				}
 				return true;
 				return true;
 
 
 			case Key.Enter:
 			case Key.Enter:
+				UnMarkAll ();
 				if (ExecuteSelection ())
 				if (ExecuteSelection ())
 					return false;
 					return false;
 				else
 				else
@@ -288,7 +319,7 @@ namespace Terminal.Gui {
 				if (n != selected) {
 				if (n != selected) {
 					selected = n;
 					selected = n;
 					top = selected;
 					top = selected;
-					SelectionChanged ();
+					OnSelectionChanged ();
 					SetNeedsDisplay ();
 					SetNeedsDisplay ();
 				}
 				}
 				return true;
 				return true;
@@ -313,7 +344,7 @@ namespace Terminal.Gui {
 		{
 		{
 			selected = infos.Count - 1;
 			selected = infos.Count - 1;
 			top = infos.Count () - 1;
 			top = infos.Count () - 1;
-			SelectionChanged ();
+			OnSelectionChanged ();
 			SetNeedsDisplay ();
 			SetNeedsDisplay ();
 		}
 		}
 
 
@@ -321,7 +352,7 @@ namespace Terminal.Gui {
 		{
 		{
 			selected = 0;
 			selected = 0;
 			top = 0;
 			top = 0;
-			SelectionChanged ();
+			OnSelectionChanged ();
 			SetNeedsDisplay ();
 			SetNeedsDisplay ();
 		}
 		}
 
 
@@ -331,7 +362,7 @@ namespace Terminal.Gui {
 				selected++;
 				selected++;
 				if (selected >= top + Frame.Height)
 				if (selected >= top + Frame.Height)
 					top++;
 					top++;
-				SelectionChanged ();
+				OnSelectionChanged ();
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 			}
 			}
 		}
 		}
@@ -342,13 +373,16 @@ namespace Terminal.Gui {
 				selected--;
 				selected--;
 				if (selected < top)
 				if (selected < top)
 					top = selected;
 					top = selected;
-				SelectionChanged ();
+				OnSelectionChanged ();
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 			}
 			}
 		}
 		}
 
 
 		internal bool ExecuteSelection ()
 		internal bool ExecuteSelection ()
 		{
 		{
+			if (infos.Count == 0) {
+				return false;
+			}
 			var isDir = infos [selected].Item2;
 			var isDir = infos [selected].Item2;
 
 
 			if (isDir) {
 			if (isDir) {
@@ -380,7 +414,7 @@ namespace Terminal.Gui {
 						infos [i] = (infos [i].Item1, infos [i].Item2, !infos [i].Item3);
 						infos [i] = (infos [i].Item1, infos [i].Item2, !infos [i].Item3);
 					}
 					}
 				}
 				}
-				SelectionChanged ();
+				OnSelectionChanged ();
 				SetNeedsDisplay ();
 				SetNeedsDisplay ();
 			}
 			}
 		}
 		}
@@ -396,25 +430,36 @@ namespace Terminal.Gui {
 
 
 		public string MakePath (string relativePath)
 		public string MakePath (string relativePath)
 		{
 		{
-			return Path.GetFullPath (Path.Combine (Directory.ToString (), relativePath));
+			var dir = Directory.ToString ();
+			return string.IsNullOrEmpty (dir) ? "" : Path.GetFullPath (Path.Combine (dir, relativePath));
 		}
 		}
 
 
 		public IReadOnlyList<string> FilePaths {
 		public IReadOnlyList<string> FilePaths {
 			get {
 			get {
 				if (allowsMultipleSelection) {
 				if (allowsMultipleSelection) {
 					var res = new List<string> ();
 					var res = new List<string> ();
-					foreach (var item in infos)
+					foreach (var item in infos) {
 						if (item.Item3)
 						if (item.Item3)
 							res.Add (MakePath (item.Item1));
 							res.Add (MakePath (item.Item1));
+					}
+					if (res.Count == 0 && infos.Count > 0 && infos [selected].Item1 != "..") {
+						res.Add (MakePath (infos [selected].Item1));
+					}
 					return res;
 					return res;
 				} else {
 				} else {
+					if (infos.Count == 0) {
+						return null;
+					}
 					if (infos [selected].Item2) {
 					if (infos [selected].Item2) {
-						if (canChooseDirectories)
-							return new List<string> () { MakePath (infos [selected].Item1) };
+						if (canChooseDirectories) {
+							var sel = infos [selected].Item1;
+							return sel == ".." ? new List<string> () : new List<string> () { MakePath (infos [selected].Item1) };
+						}
 						return Array.Empty<string> ();
 						return Array.Empty<string> ();
 					} else {
 					} else {
-						if (canChooseFiles)
+						if (canChooseFiles) {
 							return new List<string> () { MakePath (infos [selected].Item1) };
 							return new List<string> () { MakePath (infos [selected].Item1) };
+						}
 						return Array.Empty<string> ();
 						return Array.Empty<string> ();
 					}
 					}
 				}
 				}
@@ -463,6 +508,7 @@ namespace Terminal.Gui {
 				Width = Dim.Fill () - 1,
 				Width = Dim.Fill () - 1,
 				TextChanged = (e) => {
 				TextChanged = (e) => {
 					DirectoryPath = dirEntry.Text;
 					DirectoryPath = dirEntry.Text;
+					nameEntry.Text = ustring.Empty;
 				}
 				}
 			};
 			};
 			Add (dirLabel, dirEntry);
 			Add (dirLabel, dirEntry);
@@ -486,9 +532,9 @@ namespace Terminal.Gui {
 			};
 			};
 			DirectoryPath = Path.GetFullPath (Environment.CurrentDirectory);
 			DirectoryPath = Path.GetFullPath (Environment.CurrentDirectory);
 			Add (dirListView);
 			Add (dirListView);
-			dirListView.DirectoryChanged = (dir) => dirEntry.Text = dir;
-			dirListView.FileChanged = (file) => nameEntry.Text = file;
-
+			dirListView.DirectoryChanged = (dir) => { nameEntry.Text = ustring.Empty; dirEntry.Text = dir; };
+			dirListView.FileChanged = (file) => nameEntry.Text = file == ".." ? "" : file;
+			dirListView.SelectedChanged = (file) => nameEntry.Text = file.Item1 == ".." ? "" : file.Item1;
 			this.cancel = new Button ("Cancel");
 			this.cancel = new Button ("Cancel");
 			this.cancel.Clicked += () => {
 			this.cancel.Clicked += () => {
 				canceled = true;
 				canceled = true;
@@ -500,7 +546,6 @@ namespace Terminal.Gui {
 				IsDefault = true,
 				IsDefault = true,
 			};
 			};
 			this.prompt.Clicked += () => {
 			this.prompt.Clicked += () => {
-				dirListView.ExecuteSelection ();
 				canceled = false;
 				canceled = false;
 				Application.RequestStop ();
 				Application.RequestStop ();
 			};
 			};

+ 3 - 3
UICatalog/Scenario.cs

@@ -156,14 +156,14 @@ namespace UICatalog {
 			/// Static helper function to get the <see cref="Scenario"/> Name given a Type
 			/// Static helper function to get the <see cref="Scenario"/> Name given a Type
 			/// </summary>
 			/// </summary>
 			/// <param name="t"></param>
 			/// <param name="t"></param>
-			/// <returns>Name of the catagory</returns>
+			/// <returns>Name of the category</returns>
 			public static string GetName (Type t) => ((ScenarioCategory)System.Attribute.GetCustomAttributes (t) [0]).Name;
 			public static string GetName (Type t) => ((ScenarioCategory)System.Attribute.GetCustomAttributes (t) [0]).Name;
 
 
 			/// <summary>
 			/// <summary>
 			/// Static helper function to get the <see cref="Scenario"/> Categories given a Type
 			/// Static helper function to get the <see cref="Scenario"/> Categories given a Type
 			/// </summary>
 			/// </summary>
 			/// <param name="t"></param>
 			/// <param name="t"></param>
-			/// <returns>list of catagory names</returns>
+			/// <returns>list of category names</returns>
 			public static List<string> GetCategories (Type t) => System.Attribute.GetCustomAttributes (t)
 			public static List<string> GetCategories (Type t) => System.Attribute.GetCustomAttributes (t)
 				.ToList ()
 				.ToList ()
 				.Where (a => a is ScenarioCategory)
 				.Where (a => a is ScenarioCategory)
@@ -174,7 +174,7 @@ namespace UICatalog {
 		/// <summary>
 		/// <summary>
 		/// Helper function to get the list of categories a <see cref="Scenario"/> belongs to (defined in <see cref="ScenarioCategory"/>)
 		/// Helper function to get the list of categories a <see cref="Scenario"/> belongs to (defined in <see cref="ScenarioCategory"/>)
 		/// </summary>
 		/// </summary>
-		/// <returns>list of catagory names</returns>
+		/// <returns>list of category names</returns>
 		public List<string> GetCategories () => ScenarioCategory.GetCategories (this.GetType ());
 		public List<string> GetCategories () => ScenarioCategory.GetCategories (this.GetType ());
 
 
 		/// <inheritdoc/>
 		/// <inheritdoc/>

+ 1 - 1
UICatalog/Scenarios/AllViewsTester.cs

@@ -94,7 +94,7 @@ namespace UICatalog {
 				ColorScheme = Colors.TopLevel,
 				ColorScheme = Colors.TopLevel,
 			};
 			};
 			_classListView.OpenSelectedItem += (a) => {
 			_classListView.OpenSelectedItem += (a) => {
-				Top.SetFocus (_settingsPane);
+				_settingsPane.SetFocus ();
 			};
 			};
 			_classListView.SelectedItemChanged += (args) => {
 			_classListView.SelectedItemChanged += (args) => {
 				ClearClass (_curView);
 				ClearClass (_curView);

+ 931 - 0
UICatalog/Scenarios/DynamicMenuBar.cs

@@ -0,0 +1,931 @@
+using NStack;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Text;
+using Terminal.Gui;
+
+namespace UICatalog {
+	[ScenarioMetadata (Name: "Dynamic MenuBar", Description: "Demonstrates how to add and remove a MenuBar, Menus and change titles dynamically.")]
+	[ScenarioCategory ("Dynamic")]
+	class DynamicMenuBar : Scenario {
+		public override void Run ()
+		{
+			Top.Add (new DynamicMenuBarSample (Win.Title));
+			base.Run ();
+		}
+	}
+
+	class DynamicMenuItemList {
+		public ustring Title { get; set; }
+		public MenuItem MenuItem { get; set; }
+
+		public DynamicMenuItemList () { }
+
+		public DynamicMenuItemList (ustring title, MenuItem menuItem)
+		{
+			Title = title;
+			MenuItem = menuItem;
+		}
+
+		public override string ToString () => $"{Title}, {MenuItem}";
+	}
+
+	class DynamicMenuItem {
+		public ustring title = "_New";
+		public ustring help = "";
+		public ustring action = "";
+		public bool isTopLevel;
+		public bool hasSubMenu;
+		public MenuItemCheckStyle checkStyle;
+
+		public DynamicMenuItem () { }
+
+		public DynamicMenuItem (ustring title)
+		{
+			this.title = title;
+		}
+
+		public DynamicMenuItem (ustring title, ustring help, ustring action, bool isTopLevel, bool hasSubMenu, MenuItemCheckStyle checkStyle = MenuItemCheckStyle.NoCheck)
+		{
+			this.title = title;
+			this.help = help;
+			this.action = action;
+			this.isTopLevel = isTopLevel;
+			this.hasSubMenu = hasSubMenu;
+			this.checkStyle = checkStyle;
+		}
+	}
+
+	class DynamicMenuBarSample : Window {
+		MenuBar _menuBar;
+		MenuItem _currentMenuBarItem;
+		int _currentSelectedMenuBar;
+		MenuItem _currentEditMenuBarItem;
+
+		public DynamicMenuItemModel DataContext { get; set; }
+
+		public DynamicMenuBarSample (ustring title) : base (title)
+		{
+			DataContext = new DynamicMenuItemModel ();
+
+			var _frmMenu = new FrameView ("Menus:") {
+				Y = 7,
+				Width = Dim.Percent (50),
+				Height = Dim.Fill ()
+			};
+
+			var _btnAddMenuBar = new Button ("Add a MenuBar") {
+				Y = 1,
+			};
+			_frmMenu.Add (_btnAddMenuBar);
+
+			var _btnMenuBarUp = new Button ("^") {
+				X = Pos.Center ()
+			};
+			_frmMenu.Add (_btnMenuBarUp);
+
+			var _btnMenuBarDown = new Button ("v") {
+				X = Pos.Center (),
+				Y = Pos.Bottom (_btnMenuBarUp)
+			};
+			_frmMenu.Add (_btnMenuBarDown);
+
+			var _btnRemoveMenuBar = new Button ("Remove a MenuBar") {
+				Y = 1
+			};
+			_btnRemoveMenuBar.X = Pos.AnchorEnd () - (Pos.Right (_btnRemoveMenuBar) - Pos.Left (_btnRemoveMenuBar));
+			_frmMenu.Add (_btnRemoveMenuBar);
+
+			var _btnPrevious = new Button ("<") {
+				X = Pos.Left (_btnAddMenuBar),
+				Y = Pos.Top (_btnAddMenuBar) + 2
+			};
+			_frmMenu.Add (_btnPrevious);
+
+			var _btnAdd = new Button (" Add  ") {
+				Y = Pos.Top (_btnPrevious) + 2,
+			};
+			_btnAdd.X = Pos.AnchorEnd () - (Pos.Right (_btnAdd) - Pos.Left (_btnAdd));
+			_frmMenu.Add (_btnAdd);
+
+			var _btnNext = new Button (">") {
+				X = Pos.X (_btnAdd),
+				Y = Pos.Top (_btnPrevious),
+			};
+			_frmMenu.Add (_btnNext);
+
+			var _lblMenuBar = new Label () {
+				ColorScheme = Colors.Dialog,
+				TextAlignment = TextAlignment.Centered,
+				X = Pos.Right (_btnPrevious) + 1,
+				Y = Pos.Top (_btnPrevious),
+				Width = Dim.Fill () - Dim.Width (_btnAdd) - 1,
+				Height = 1
+			};
+			_frmMenu.Add (_lblMenuBar);
+			_lblMenuBar.WantMousePositionReports = true;
+			_lblMenuBar.CanFocus = true;
+
+			var _lblParent = new Label () {
+				TextAlignment = TextAlignment.Centered,
+				X = Pos.Right (_btnPrevious) + 1,
+				Y = Pos.Top (_btnPrevious) + 1,
+				Width = Dim.Fill () - Dim.Width (_btnAdd) - 1
+			};
+			_frmMenu.Add (_lblParent);
+
+			var _btnPreviowsParent = new Button ("..") {
+				X = Pos.Left (_btnAddMenuBar),
+				Y = Pos.Top (_btnPrevious) + 1
+			};
+			_frmMenu.Add (_btnPreviowsParent);
+
+			var _lstMenus = new ListView (new List<DynamicMenuItemList> ()) {
+				ColorScheme = Colors.Dialog,
+				X = Pos.Right (_btnPrevious) + 1,
+				Y = Pos.Top (_btnPrevious) + 2,
+				Width = _lblMenuBar.Width,
+				Height = Dim.Fill (),
+			};
+			_frmMenu.Add (_lstMenus);
+
+			_lblMenuBar.TabIndex = _btnPrevious.TabIndex + 1;
+			_lstMenus.TabIndex = _lblMenuBar.TabIndex + 1;
+			_btnNext.TabIndex = _lstMenus.TabIndex + 1;
+			_btnAdd.TabIndex = _btnNext.TabIndex + 1;
+
+			var _btnRemove = new Button ("Remove") {
+				X = Pos.Left (_btnAdd),
+				Y = Pos.Top (_btnAdd) + 1
+			};
+			_frmMenu.Add (_btnRemove);
+
+			var _btnUp = new Button ("^") {
+				X = Pos.Right (_lstMenus) + 2,
+				Y = Pos.Top (_btnRemove) + 2
+			};
+			_frmMenu.Add (_btnUp);
+
+			var _btnDown = new Button ("v") {
+				X = Pos.Right (_lstMenus) + 2,
+				Y = Pos.Top (_btnUp) + 1
+			};
+			_frmMenu.Add (_btnDown);
+
+			Add (_frmMenu);
+
+			var _frmMenuDetails = new FrameView ("Menu Details:") {
+				X = Pos.Right (_frmMenu),
+				Y = Pos.Top (_frmMenu),
+				Width = Dim.Fill (),
+				Height = Dim.Fill ()
+			};
+
+			var _lblTitle = new Label ("Title:") {
+				Y = 1
+			};
+			_frmMenuDetails.Add (_lblTitle);
+
+			var _txtTitle = new TextField () {
+				X = Pos.Right (_lblTitle) + 2,
+				Y = Pos.Top (_lblTitle),
+				Width = Dim.Fill ()
+			};
+			_frmMenuDetails.Add (_txtTitle);
+
+			var _lblHelp = new Label ("Help:") {
+				X = Pos.Left (_lblTitle),
+				Y = Pos.Bottom (_lblTitle) + 1
+			};
+			_frmMenuDetails.Add (_lblHelp);
+
+			var _txtHelp = new TextField () {
+				X = Pos.Left (_txtTitle),
+				Y = Pos.Top (_lblHelp),
+				Width = Dim.Fill ()
+			};
+			_frmMenuDetails.Add (_txtHelp);
+
+			var _lblAction = new Label ("Action:") {
+				X = Pos.Left (_lblTitle),
+				Y = Pos.Bottom (_lblHelp) + 1
+			};
+			_frmMenuDetails.Add (_lblAction);
+
+			var _txtAction = new TextView () {
+				ColorScheme = Colors.Dialog,
+				X = Pos.Left (_txtTitle),
+				Y = Pos.Top (_lblAction),
+				Width = Dim.Fill (),
+				Height = 5
+			};
+			_frmMenuDetails.Add (_txtAction);
+
+			var _ckbIsTopLevel = new CheckBox ("IsTopLevel") {
+				X = Pos.Left (_lblTitle),
+				Y = Pos.Bottom (_lblAction) + 5
+			};
+			_frmMenuDetails.Add (_ckbIsTopLevel);
+
+			var _ckbSubMenu = new CheckBox ("Has sub-menus") {
+				X = Pos.Left (_lblTitle),
+				Y = Pos.Bottom (_ckbIsTopLevel)
+			};
+			_frmMenuDetails.Add (_ckbSubMenu);
+			_ckbIsTopLevel.Toggled = (e) => {
+				if (_ckbIsTopLevel.Checked && _currentEditMenuBarItem.Parent != null) {
+					MessageBox.ErrorQuery ("Invalid IsTopLevel", "Only menu bar can have top level menu item!", "Ok");
+					_ckbIsTopLevel.Checked = false;
+					return;
+				}
+				if (_ckbIsTopLevel.Checked) {
+					_ckbSubMenu.Checked = false;
+					_ckbSubMenu.SetNeedsDisplay ();
+					_txtAction.ReadOnly = false;
+				} else {
+					_txtAction.ReadOnly = true;
+				}
+			};
+			_ckbSubMenu.Toggled = (e) => {
+				if (_ckbSubMenu.Checked) {
+					_ckbIsTopLevel.Checked = false;
+					_ckbIsTopLevel.SetNeedsDisplay ();
+					_txtAction.ReadOnly = true;
+				} else {
+					_txtAction.ReadOnly = false;
+				}
+			};
+
+			var _rChkLabels = new ustring [] { "NoCheck", "Checked", "Radio" };
+			var _rbChkStyle = new RadioGroup (_rChkLabels) {
+				X = Pos.Left (_lblTitle),
+				Y = Pos.Bottom (_ckbSubMenu) + 1,
+			};
+			_frmMenuDetails.Add (_rbChkStyle);
+
+			var _btnOk = new Button ("Ok") {
+				X = Pos.Left (_lblTitle) + 20,
+				Y = Pos.Bottom (_rbChkStyle) + 1,
+				Clicked = () => {
+					if (ustring.IsNullOrEmpty (_txtTitle.Text) && _currentEditMenuBarItem != null) {
+						MessageBox.ErrorQuery ("Invalid title", "Must enter a valid title!.", "Ok");
+					} else if (_currentEditMenuBarItem != null) {
+						var menuItem = new DynamicMenuItem (_txtTitle.Text, _txtHelp.Text, _txtAction.Text, _ckbIsTopLevel != null ? _ckbIsTopLevel.Checked : false, _ckbSubMenu != null ? _ckbSubMenu.Checked : false, _rbChkStyle.SelectedItem == 0 ? MenuItemCheckStyle.NoCheck : _rbChkStyle.SelectedItem == 1 ? MenuItemCheckStyle.Checked : MenuItemCheckStyle.Radio);
+						UpdateMenuItem (_currentEditMenuBarItem, menuItem, _lstMenus.SelectedItem);
+					}
+				}
+			};
+			_frmMenuDetails.Add (_btnOk);
+
+			var _btnCancel = new Button ("Cancel") {
+				X = Pos.Right (_btnOk) + 3,
+				Y = Pos.Top (_btnOk),
+				Clicked = () => {
+					_txtTitle.Text = ustring.Empty;
+				}
+			};
+			_frmMenuDetails.Add (_btnCancel);
+
+			Add (_frmMenuDetails);
+
+			_btnAdd.Clicked = () => {
+				if (MenuBar == null) {
+					MessageBox.ErrorQuery ("Menu Bar Error", "Must add a MenuBar first!", "Ok");
+					_btnAddMenuBar.SetFocus ();
+					return;
+				}
+
+				var item = EnterMenuItem (_currentMenuBarItem);
+				if (ustring.IsNullOrEmpty (item.title)) {
+					return;
+				}
+
+				if (!(_currentMenuBarItem is MenuBarItem)) {
+					var parent = _currentMenuBarItem.Parent as MenuBarItem;
+					var idx = parent.GetChildrenIndex (_currentMenuBarItem);
+					_currentMenuBarItem = new MenuBarItem (_currentMenuBarItem.Title, new MenuItem [] { new MenuItem ("_New", "", CreateAction (_currentEditMenuBarItem, new DynamicMenuItem ())) }, _currentMenuBarItem.Parent);
+					_currentMenuBarItem.CheckType = item.checkStyle;
+					parent.Children [idx] = _currentMenuBarItem;
+				} else {
+					MenuItem newMenu = CreateNewMenu (item, _currentMenuBarItem);
+					var menuBarItem = _currentMenuBarItem as MenuBarItem;
+					if (menuBarItem == null) {
+						menuBarItem = new MenuBarItem (_currentMenuBarItem.Title, new MenuItem [] { newMenu }, _currentMenuBarItem.Parent);
+					} else if (menuBarItem.Children == null) {
+						menuBarItem.Children = new MenuItem [] { newMenu };
+					} else {
+						var childrens = menuBarItem.Children;
+						Array.Resize (ref childrens, childrens.Length + 1);
+						childrens [childrens.Length - 1] = newMenu;
+						menuBarItem.Children = childrens;
+					}
+					DataContext.Menus.Add (new DynamicMenuItemList (newMenu.Title, newMenu));
+					_lstMenus.MoveDown ();
+				}
+			};
+
+			_btnRemove.Clicked = () => {
+				var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [_lstMenus.SelectedItem].MenuItem : null;
+				if (menuItem != null) {
+					var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
+					childrens [_lstMenus.SelectedItem] = null;
+					int i = 0;
+					foreach (var c in childrens) {
+						if (c != null) {
+							childrens [i] = c;
+							i++;
+						}
+					}
+					Array.Resize (ref childrens, childrens.Length - 1);
+					if (childrens.Length == 0) {
+						if (_currentMenuBarItem.Parent == null) {
+							((MenuBarItem)_currentMenuBarItem).Children = null;
+							_currentMenuBarItem.Action = CreateAction (_currentEditMenuBarItem, new DynamicMenuItem (_currentMenuBarItem.Title));
+						} else {
+							_currentMenuBarItem = new MenuItem (_currentMenuBarItem.Title, _currentMenuBarItem.Help, CreateAction (_currentEditMenuBarItem, new DynamicMenuItem (_currentEditMenuBarItem.Title)), null, _currentMenuBarItem.Parent);
+						}
+					} else {
+						((MenuBarItem)_currentMenuBarItem).Children = childrens;
+					}
+					DataContext.Menus.RemoveAt (_lstMenus.SelectedItem);
+				}
+			};
+
+			_btnMenuBarUp.Clicked = () => {
+				var i = _currentSelectedMenuBar;
+				var menuItem = _menuBar != null && _menuBar.Menus.Length > 0 ? _menuBar.Menus [i] : null;
+				if (menuItem != null) {
+					var menus = _menuBar.Menus;
+					if (i > 0) {
+						menus [i] = menus [i - 1];
+						menus [i - 1] = menuItem;
+						_currentSelectedMenuBar = i - 1;
+						_menuBar.SetNeedsDisplay ();
+					}
+				}
+			};
+
+			_btnMenuBarDown.Clicked = () => {
+				var i = _currentSelectedMenuBar;
+				var menuItem = _menuBar != null && _menuBar.Menus.Length > 0 ? _menuBar.Menus [i] : null;
+				if (menuItem != null) {
+					var menus = _menuBar.Menus;
+					if (i < menus.Length - 1) {
+						menus [i] = menus [i + 1];
+						menus [i + 1] = menuItem;
+						_currentSelectedMenuBar = i + 1;
+						_menuBar.SetNeedsDisplay ();
+					}
+				}
+			};
+
+			_btnUp.Clicked = () => {
+				var i = _lstMenus.SelectedItem;
+				var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [i].MenuItem : null;
+				if (menuItem != null) {
+					var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
+					if (i > 0) {
+						childrens [i] = childrens [i - 1];
+						childrens [i - 1] = menuItem;
+						DataContext.Menus [i] = DataContext.Menus [i - 1];
+						DataContext.Menus [i - 1] = new DynamicMenuItemList (menuItem.Title, menuItem);
+						_lstMenus.SelectedItem = i - 1;
+					}
+				}
+			};
+
+			_btnDown.Clicked = () => {
+				var i = _lstMenus.SelectedItem;
+				var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [i].MenuItem : null;
+				if (menuItem != null) {
+					var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
+					if (i < childrens.Length - 1) {
+						childrens [i] = childrens [i + 1];
+						childrens [i + 1] = menuItem;
+						DataContext.Menus [i] = DataContext.Menus [i + 1];
+						DataContext.Menus [i + 1] = new DynamicMenuItemList (menuItem.Title, menuItem);
+						_lstMenus.SelectedItem = i + 1;
+					}
+				}
+			};
+
+			_btnAddMenuBar.Clicked = () => {
+				var item = EnterMenuItem (null);
+				if (ustring.IsNullOrEmpty (item.title)) {
+					return;
+				}
+
+				if (MenuBar == null) {
+					_menuBar = new MenuBar ();
+					Add (_menuBar);
+				}
+				var newMenu = CreateNewMenu (item) as MenuBarItem;
+
+				var menus = _menuBar.Menus;
+				Array.Resize (ref menus, menus.Length + 1);
+				menus [^1] = newMenu;
+				_menuBar.Menus = menus;
+				_currentMenuBarItem = newMenu;
+				_currentMenuBarItem.CheckType = item.checkStyle;
+				_currentSelectedMenuBar = menus.Length - 1;
+				_menuBar.Menus [_currentSelectedMenuBar] = newMenu;
+				_lblMenuBar.Text = newMenu.Title;
+				SetListViewSource (_currentMenuBarItem, true);
+				EditMenuBarItem (_menuBar.Menus [_currentSelectedMenuBar]);
+				_menuBar.SetNeedsDisplay ();
+			};
+
+			_btnRemoveMenuBar.Clicked = () => {
+				if (_menuBar != null && _menuBar.Menus.Length > 0) {
+					_menuBar.Menus [_currentSelectedMenuBar] = null;
+					int i = 0;
+					foreach (var m in _menuBar.Menus) {
+						if (m != null) {
+							_menuBar.Menus [i] = m;
+							i++;
+						}
+					}
+					var menus = _menuBar.Menus;
+					Array.Resize (ref menus, menus.Length - 1);
+					_menuBar.Menus = menus;
+					if (_currentSelectedMenuBar - 1 >= 0 && _menuBar.Menus.Length > 0) {
+						_currentSelectedMenuBar--;
+					}
+					_currentMenuBarItem = _menuBar.Menus?.Length > 0 ? _menuBar.Menus [_currentSelectedMenuBar] : null;
+				}
+				if (MenuBar != null && _currentMenuBarItem == null && _menuBar.Menus.Length == 0) {
+					Remove (_menuBar);
+					_menuBar = null;
+					DataContext.Menus = new List<DynamicMenuItemList> ();
+					_currentMenuBarItem = null;
+					_currentSelectedMenuBar = -1;
+					_lblMenuBar.Text = ustring.Empty;
+				} else {
+					_lblMenuBar.Text = _menuBar.Menus [_currentSelectedMenuBar].Title;
+				}
+				SetListViewSource (_currentMenuBarItem, true);
+				EditMenuBarItem (null);
+			};
+
+			_lblMenuBar.Enter = (e) => {
+				if (_menuBar?.Menus != null) {
+					_currentMenuBarItem = _menuBar.Menus [_currentSelectedMenuBar];
+					EditMenuBarItem (_menuBar.Menus [_currentSelectedMenuBar]);
+				}
+			};
+
+			_btnPrevious.Clicked = () => {
+				if (_currentSelectedMenuBar - 1 > -1) {
+					_currentSelectedMenuBar--;
+				}
+				SelectCurrentMenuBarItem ();
+			};
+
+			_btnNext.Clicked = () => {
+				if (_menuBar != null && _currentSelectedMenuBar + 1 < _menuBar.Menus.Length) {
+					_currentSelectedMenuBar++;
+				}
+				SelectCurrentMenuBarItem ();
+			};
+
+			_lstMenus.SelectedItemChanged = (e) => {
+				var menuBarItem = DataContext.Menus.Count > 0 ? DataContext.Menus [e.Item].MenuItem : null;
+				EditMenuBarItem (menuBarItem);
+			};
+
+			_lstMenus.OpenSelectedItem = (e) => {
+				_currentMenuBarItem = DataContext.Menus [e.Item].MenuItem;
+				DataContext.Parent = _currentMenuBarItem.Title;
+				DataContext.Menus = new List<DynamicMenuItemList> ();
+				SetListViewSource (_currentMenuBarItem, true);
+				var menuBarItem = DataContext.Menus.Count > 0 ? DataContext.Menus [0].MenuItem : null;
+				EditMenuBarItem (menuBarItem);
+			};
+
+			_btnPreviowsParent.Clicked = () => {
+				if (_currentMenuBarItem != null && _currentMenuBarItem.Parent != null) {
+					var mi = _currentMenuBarItem;
+					_currentMenuBarItem = _currentMenuBarItem.Parent as MenuBarItem;
+					SetListViewSource (_currentMenuBarItem, true);
+					var i = ((MenuBarItem)_currentMenuBarItem).GetChildrenIndex (mi);
+					if (i > -1) {
+						_lstMenus.SelectedItem = i;
+					}
+					if (_currentMenuBarItem.Parent != null) {
+						DataContext.Parent = _currentMenuBarItem.Title;
+					} else {
+						DataContext.Parent = ustring.Empty;
+					}
+				} else {
+					DataContext.Parent = ustring.Empty;
+				}
+			};
+
+			var ustringConverter = new UStringValueConverter ();
+			var listWrapperConverter = new ListWrapperConverter ();
+
+			var lblMenuBar = new Binding (this, "MenuBar", _lblMenuBar, "Text", ustringConverter);
+			var lblParent = new Binding (this, "Parent", _lblParent, "Text", ustringConverter);
+			var lstMenus = new Binding (this, "Menus", _lstMenus, "Source", listWrapperConverter);
+
+
+			ustring GetTargetAction (Action action)
+			{
+				var me = action.Target;
+
+				if (me == null) {
+					throw new ArgumentException ();
+				}
+				object v = new object ();
+				foreach (var field in me.GetType ().GetFields ()) {
+					if (field.Name == "item") {
+						v = field.GetValue (me);
+					}
+				}
+				return v == null || !(v is DynamicMenuItem item) ? ustring.Empty : item.action;
+			}
+
+			Action CreateAction (MenuItem menuItem, DynamicMenuItem item)
+			{
+				switch (menuItem.CheckType) {
+				case MenuItemCheckStyle.NoCheck:
+					return new Action (() => MessageBox.ErrorQuery (item.title, item.action, "Ok"));
+				case MenuItemCheckStyle.Checked:
+					return new Action (() => menuItem.Checked = !menuItem.Checked);
+				case MenuItemCheckStyle.Radio:
+					break;
+				}
+				return new Action (() => {
+					menuItem.Checked = true;
+					var parent = menuItem?.Parent as MenuBarItem;
+					if (parent != null) {
+						var childrens = parent.Children;
+						for (int i = 0; i < childrens.Length; i++) {
+							var child = childrens [i];
+							if (child != menuItem) {
+								child.Checked = false;
+							}
+						}
+					}
+				});
+			}
+
+			void SetListViewSource (MenuItem _currentMenuBarItem, bool fill = false)
+			{
+				DataContext.Menus = new List<DynamicMenuItemList> ();
+				var menuBarItem = _currentMenuBarItem as MenuBarItem;
+				if (menuBarItem != null && menuBarItem?.Children == null) {
+					return;
+				}
+				if (!fill) {
+					return;
+				}
+				if (menuBarItem != null) {
+					foreach (var child in menuBarItem?.Children) {
+						var m = new DynamicMenuItemList (child.Title, child);
+						DataContext.Menus.Add (m);
+					}
+				}
+			}
+
+			void EditMenuBarItem (MenuItem menuBarItem)
+			{
+				if (menuBarItem == null) {
+					_frmMenuDetails.CanFocus = false;
+				} else {
+					_frmMenuDetails.CanFocus = true;
+				}
+				_currentEditMenuBarItem = menuBarItem;
+				_txtTitle.Text = menuBarItem?.Title ?? "";
+				_txtHelp.Text = menuBarItem?.Help ?? "";
+				_txtAction.Text = menuBarItem != null && menuBarItem.Action != null ? GetTargetAction (menuBarItem.Action) : ustring.Empty;
+				_ckbIsTopLevel.Checked = IsTopLevel (menuBarItem);
+				_ckbSubMenu.Checked = HasSubMenus (menuBarItem);
+				_rbChkStyle.SelectedItem = (int)(menuBarItem?.CheckType ?? MenuItemCheckStyle.NoCheck);
+			}
+
+			void UpdateMenuItem (MenuItem _currentEditMenuBarItem, DynamicMenuItem menuItem, int index)
+			{
+				_currentEditMenuBarItem.Title = menuItem.title;
+				_currentEditMenuBarItem.Help = menuItem.help;
+				_currentEditMenuBarItem.CheckType = menuItem.checkStyle;
+				var parent = _currentEditMenuBarItem.Parent as MenuBarItem;
+				if (parent != null && parent.Children.Length == 1 && _currentEditMenuBarItem.CheckType == MenuItemCheckStyle.Radio) {
+					_currentEditMenuBarItem.Checked = true;
+				}
+				if (menuItem.isTopLevel && _currentEditMenuBarItem is MenuBarItem) {
+					((MenuBarItem)_currentEditMenuBarItem).Children = null;
+					_currentEditMenuBarItem.Action = CreateAction (_currentEditMenuBarItem, menuItem);
+					SetListViewSource (_currentEditMenuBarItem, true);
+				} else if (menuItem.hasSubMenu) {
+					_currentEditMenuBarItem.Action = null;
+					if (_currentEditMenuBarItem is MenuBarItem && ((MenuBarItem)_currentEditMenuBarItem).Children == null) {
+						((MenuBarItem)_currentEditMenuBarItem).Children = new MenuItem [] { new MenuItem ("_New", "", CreateAction (_currentEditMenuBarItem, new DynamicMenuItem ())) };
+					} else if (_currentEditMenuBarItem.Parent != null) {
+						UpdateParent (ref _currentEditMenuBarItem);
+					} else {
+						_currentEditMenuBarItem = new MenuBarItem (_currentEditMenuBarItem.Title, new MenuItem [] { new MenuItem ("_New", "", CreateAction (_currentEditMenuBarItem, new DynamicMenuItem ())) }, _currentEditMenuBarItem.Parent);
+					}
+					SetListViewSource (_currentEditMenuBarItem, true);
+				} else if (_currentEditMenuBarItem is MenuBarItem && _currentEditMenuBarItem.Parent != null) {
+					UpdateParent (ref _currentEditMenuBarItem);
+					_currentEditMenuBarItem = new MenuItem (menuItem.title, menuItem.help, CreateAction (_currentEditMenuBarItem, menuItem), null, _currentEditMenuBarItem.Parent);
+				} else {
+					if (_currentEditMenuBarItem is MenuBarItem) {
+						((MenuBarItem)_currentEditMenuBarItem).Children = null;
+						DataContext.Menus = new List<DynamicMenuItemList> ();
+					}
+					_currentEditMenuBarItem.Action = CreateAction (_currentEditMenuBarItem, menuItem);
+				}
+
+				if (_currentEditMenuBarItem.Parent == null) {
+					DataContext.MenuBar = _currentEditMenuBarItem.Title;
+				} else {
+					DataContext.Menus [index] = new DynamicMenuItemList (_currentEditMenuBarItem.Title, _currentEditMenuBarItem);
+				}
+				_currentEditMenuBarItem.CheckType = menuItem.checkStyle;
+				EditMenuBarItem (_currentEditMenuBarItem);
+			}
+
+			void UpdateParent (ref MenuItem menuItem)
+			{
+				var parent = menuItem.Parent as MenuBarItem;
+				var idx = parent.GetChildrenIndex (menuItem);
+				if (!(menuItem is MenuBarItem)) {
+					menuItem = new MenuBarItem (menuItem.Title, new MenuItem [] { new MenuItem ("_New", "", CreateAction (menuItem, new DynamicMenuItem ())) }, menuItem.Parent);
+					if (idx > -1) {
+						parent.Children [idx] = menuItem;
+					}
+				} else {
+					menuItem = new MenuItem (menuItem.Title, menuItem.Help, CreateAction (menuItem, new DynamicMenuItem ()), null, menuItem.Parent);
+					if (idx > -1) {
+						parent.Children [idx] = menuItem;
+					}
+				}
+			}
+
+			bool IsTopLevel (MenuItem menuItem)
+			{
+				var topLevel = menuItem as MenuBarItem;
+				if (topLevel != null && topLevel.Parent == null && (topLevel.Children == null || topLevel.Children.Length == 0)) {
+					return true;
+				} else {
+					return false;
+				}
+			}
+
+			bool HasSubMenus (MenuItem menuItem)
+			{
+				var menuBarItem = menuItem as MenuBarItem;
+				if (menuBarItem != null && menuBarItem.Children != null && menuBarItem.Children.Length > 0) {
+					return true;
+				} else {
+					return false;
+				}
+			}
+
+			void SelectCurrentMenuBarItem ()
+			{
+				MenuBarItem menuBarItem = null;
+				if (_menuBar?.Menus != null) {
+					menuBarItem = _menuBar.Menus [_currentSelectedMenuBar];
+					_lblMenuBar.Text = menuBarItem.Title;
+				}
+				EditMenuBarItem (menuBarItem);
+				_currentMenuBarItem = menuBarItem;
+				DataContext.Menus = new List<DynamicMenuItemList> ();
+				SetListViewSource (_currentMenuBarItem, true);
+				_lblParent.Text = ustring.Empty;
+			}
+
+			DynamicMenuItem EnterMenuItem (MenuItem menuItem)
+			{
+				var _lblTitle = new Label (1, 3, "Title:");
+				var _txtTitle = new TextField ("_New") {
+					X = Pos.Right (_lblTitle) + 2,
+					Y = Pos.Top (_lblTitle),
+					Width = Dim.Fill (),
+				};
+				var _lblHelp = new Label ("Help:") {
+					X = Pos.Left (_lblTitle),
+					Y = Pos.Bottom (_lblTitle) + 1
+				};
+				var _txtHelp = new TextField () {
+					X = Pos.Left (_txtTitle),
+					Y = Pos.Top (_lblHelp),
+					Width = Dim.Fill (),
+				};
+				var _lblAction = new Label ("Action:") {
+					X = Pos.Left (_lblTitle),
+					Y = Pos.Bottom (_lblHelp) + 1
+				};
+				var _txtAction = new TextView () {
+					ColorScheme = Colors.Menu,
+					X = Pos.Left (_txtTitle),
+					Y = Pos.Top (_lblAction),
+					Width = Dim.Fill (),
+					Height = 5,
+					ReadOnly = true
+				};
+				var _ckbIsTopLevel = new CheckBox ("IsTopLevel") {
+					X = Pos.Left (_lblTitle),
+					Y = Pos.Bottom (_lblAction) + 5
+				};
+				var _ckbSubMenu = new CheckBox ("Has sub-menus") {
+					X = Pos.Left (_lblTitle),
+					Y = Pos.Bottom (_ckbIsTopLevel),
+					Checked = menuItem == null
+				};
+				_ckbIsTopLevel.Toggled = (e) => {
+					if (_ckbIsTopLevel.Checked && menuItem != null) {
+						MessageBox.ErrorQuery ("Invalid IsTopLevel", "Only menu bar can have top level menu item!", "Ok");
+						_ckbIsTopLevel.Checked = false;
+						return;
+					}
+					if (_ckbIsTopLevel.Checked) {
+						_ckbSubMenu.Checked = false;
+						_ckbSubMenu.SetNeedsDisplay ();
+						_txtAction.ReadOnly = false;
+					} else {
+						_txtAction.ReadOnly = true;
+					}
+				};
+				_ckbSubMenu.Toggled = (e) => {
+					if (_ckbSubMenu.Checked) {
+						_ckbIsTopLevel.Checked = false;
+						_ckbIsTopLevel.SetNeedsDisplay ();
+						_txtAction.ReadOnly = true;
+					} else {
+						_txtAction.ReadOnly = false;
+					}
+				};
+				var _rChkLabels = new ustring [] { "NoCheck", "Checked", "Radio" };
+				var _rbChkStyle = new RadioGroup (_rChkLabels) {
+					X = Pos.Left (_lblTitle),
+					Y = Pos.Bottom (_ckbSubMenu) + 1,
+				};
+				var _btnOk = new Button ("Ok") {
+					IsDefault = true,
+					Clicked = () => {
+						if (ustring.IsNullOrEmpty (_txtTitle.Text)) {
+							MessageBox.ErrorQuery ("Invalid title", "Must enter a valid title!.", "Ok");
+						} else {
+							Application.RequestStop ();
+						}
+					}
+				};
+				var _btnCancel = new Button ("Cancel") {
+					Clicked = () => {
+						_txtTitle.Text = ustring.Empty;
+						Application.RequestStop ();
+					}
+				};
+				var _dialog = new Dialog ("Please enter the menu details.", _btnOk, _btnCancel);
+				_dialog.Add (_lblTitle, _txtTitle, _lblHelp, _txtHelp, _lblAction, _txtAction, _ckbIsTopLevel, _ckbSubMenu, _rbChkStyle);
+				_txtTitle.SetFocus ();
+				Application.Run (_dialog);
+
+				return new DynamicMenuItem (_txtTitle.Text, _txtHelp.Text, _txtAction.Text, _ckbIsTopLevel != null ? _ckbIsTopLevel.Checked : false, _ckbSubMenu != null ? _ckbSubMenu.Checked : false, _rbChkStyle.SelectedItem == 0 ? MenuItemCheckStyle.NoCheck : _rbChkStyle.SelectedItem == 1 ? MenuItemCheckStyle.Checked : MenuItemCheckStyle.Radio);
+			}
+
+			MenuItem CreateNewMenu (DynamicMenuItem item, MenuItem parent = null)
+			{
+				MenuItem newMenu;
+				if (item.hasSubMenu) {
+					newMenu = new MenuBarItem (item.title, new MenuItem [] { new MenuItem ("_New", "", null) }, parent);
+					((MenuBarItem)newMenu).Children [0].Action = CreateAction (newMenu, new DynamicMenuItem ());
+				} else if (parent != null) {
+					newMenu = new MenuItem (item.title, item.help, null, null, parent);
+					newMenu.CheckType = item.checkStyle;
+					newMenu.Action = CreateAction (newMenu, item);
+				} else {
+					newMenu = new MenuBarItem (item.title, item.help, null);
+					((MenuBarItem)newMenu).Children [0].Action = CreateAction (newMenu, item);
+				}
+
+				return newMenu;
+			}
+		}
+	}
+
+	class DynamicMenuItemModel : INotifyPropertyChanged {
+		public event PropertyChangedEventHandler PropertyChanged;
+
+		private ustring menuBar;
+		private ustring parent;
+		private List<DynamicMenuItemList> menus;
+
+		public ustring MenuBar {
+			get => menuBar;
+			set {
+				if (value != menuBar) {
+					menuBar = value;
+					PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (GetPropertyName ()));
+				}
+			}
+		}
+
+		public ustring Parent {
+			get => parent;
+			set {
+				if (value != parent) {
+					parent = value;
+					PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (GetPropertyName ()));
+				}
+			}
+		}
+
+		public List<DynamicMenuItemList> Menus {
+			get => menus;
+			set {
+				if (value != menus) {
+					menus = value;
+					PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (GetPropertyName ()));
+				}
+			}
+		}
+
+		public DynamicMenuItemModel ()
+		{
+			Menus = new List<DynamicMenuItemList> ();
+		}
+
+		public string GetPropertyName ([CallerMemberName] string propertyName = null)
+		{
+			return propertyName;
+		}
+	}
+
+	public interface IValueConverter {
+		object Convert (object value, object parameter = null);
+	}
+
+	public class Binding {
+		public View Target { get; private set; }
+		public View Source { get; private set; }
+
+		public string SourcePropertyName { get; private set; }
+		public string TargetPropertyName { get; private set; }
+
+		private object sourceDataContext;
+		private PropertyInfo sourceBindingProperty;
+		private IValueConverter valueConverter;
+
+		public Binding (View source, string sourcePropertyName, View target, string targetPropertyName, IValueConverter valueConverter = null)
+		{
+			Target = target;
+			Source = source;
+			SourcePropertyName = sourcePropertyName;
+			TargetPropertyName = targetPropertyName;
+			sourceDataContext = Source.GetType ().GetProperty ("DataContext").GetValue (Source);
+			sourceBindingProperty = sourceDataContext.GetType ().GetProperty (SourcePropertyName);
+			this.valueConverter = valueConverter;
+			UpdateTarget ();
+
+			var notifier = ((INotifyPropertyChanged)sourceDataContext);
+			if (notifier != null) {
+				notifier.PropertyChanged += (s, e) => {
+					if (e.PropertyName == SourcePropertyName) {
+						UpdateTarget ();
+					}
+				};
+			}
+		}
+
+		private void UpdateTarget ()
+		{
+			try {
+				var sourceValue = sourceBindingProperty.GetValue (sourceDataContext);
+				if (sourceValue == null) {
+					return;
+				}
+
+				var finalValue = valueConverter?.Convert (sourceValue) ?? sourceValue;
+
+				var targetProperty = Target.GetType ().GetProperty (TargetPropertyName);
+				targetProperty.SetValue (Target, finalValue);
+			} catch (Exception ex) {
+				MessageBox.ErrorQuery ("Binding Error", $"Binding failed: {ex}.", "Ok");
+			}
+		}
+	}
+
+	public class ListWrapperConverter : IValueConverter {
+		public object Convert (object value, object parameter = null)
+		{
+			return new ListWrapper ((IList)value);
+		}
+	}
+
+	public class UStringValueConverter : IValueConverter {
+		public object Convert (object value, object parameter = null)
+		{
+			var data = Encoding.ASCII.GetBytes (value.ToString ());
+			return ustring.Make (data);
+		}
+	}
+}

+ 13 - 5
UICatalog/Scenarios/Scrolling.cs

@@ -169,7 +169,7 @@ namespace UICatalog {
 				ColorScheme = Colors.Dialog
 				ColorScheme = Colors.Dialog
 			});
 			});
 
 
-			scrollView.Add (new TextField ("... the emergency broadcast sytem.") {
+			scrollView.Add (new TextField ("... the emergency broadcast system.") {
 				X = 3,
 				X = 3,
 				Y = 10,
 				Y = 10,
 				Width = 50,
 				Width = 50,
@@ -213,10 +213,15 @@ namespace UICatalog {
 
 
 			var t = "Auto Hide Scrollbars";
 			var t = "Auto Hide Scrollbars";
 			var ahCheckBox = new CheckBox (t, scrollView.AutoHideScrollBars) {
 			var ahCheckBox = new CheckBox (t, scrollView.AutoHideScrollBars) {
-				X = Pos.Left (scrollView) + scrollView.Bounds.Width / 2 - t.Length / 2,
+				X = Pos.Left (scrollView) + (scrollView.Bounds.Width / 2) - (t.Length / 2),
 				Y = Pos.Bottom (scrollView) + 3,
 				Y = Pos.Bottom (scrollView) + 3,
 			};
 			};
-			hCheckBox.Toggled += (previousChecked) => {
+			var k = "Keep Content Always In Viewport";
+			var keepCheckBox = new CheckBox (k, scrollView.AutoHideScrollBars) {
+				X = Pos.Left (scrollView) + (scrollView.Bounds.Width / 2) - (k.Length / 2),
+				Y = Pos.Bottom (scrollView) + 4,
+			};
+			hCheckBox.Toggled += (_) => {
 				if (!ahCheckBox.Checked) {
 				if (!ahCheckBox.Checked) {
 					scrollView.ShowHorizontalScrollIndicator = hCheckBox.Checked;
 					scrollView.ShowHorizontalScrollIndicator = hCheckBox.Checked;
 				} else {
 				} else {
@@ -224,7 +229,7 @@ namespace UICatalog {
 					MessageBox.Query ("Message", "Disable Auto Hide Scrollbars first.", "Ok");
 					MessageBox.Query ("Message", "Disable Auto Hide Scrollbars first.", "Ok");
 				}
 				}
 			};
 			};
-			vCheckBox.Toggled += (previousChecked) => {
+			vCheckBox.Toggled += (_) => {
 				if (!ahCheckBox.Checked) {
 				if (!ahCheckBox.Checked) {
 					scrollView.ShowVerticalScrollIndicator = vCheckBox.Checked;
 					scrollView.ShowVerticalScrollIndicator = vCheckBox.Checked;
 				} else {
 				} else {
@@ -232,13 +237,16 @@ namespace UICatalog {
 					MessageBox.Query ("Message", "Disable Auto Hide Scrollbars first.", "Ok");
 					MessageBox.Query ("Message", "Disable Auto Hide Scrollbars first.", "Ok");
 				}
 				}
 			};
 			};
-			ahCheckBox.Toggled += (previousChecked) => {
+			ahCheckBox.Toggled += (_) => {
 				scrollView.AutoHideScrollBars = ahCheckBox.Checked;
 				scrollView.AutoHideScrollBars = ahCheckBox.Checked;
 				hCheckBox.Checked = true;
 				hCheckBox.Checked = true;
 				vCheckBox.Checked = true;
 				vCheckBox.Checked = true;
 			};
 			};
 			Win.Add (ahCheckBox);
 			Win.Add (ahCheckBox);
 
 
+			keepCheckBox.Toggled += (_) => scrollView.KeepContentAlwaysInViewport = keepCheckBox.Checked;
+			Win.Add (keepCheckBox);
+
 			var scrollView2 = new ScrollView (new Rect (55, 2, 20, 8)) {
 			var scrollView2 = new ScrollView (new Rect (55, 2, 20, 8)) {
 				ContentSize = new Size (20, 50),
 				ContentSize = new Size (20, 50),
 				//ContentOffset = new Point (0, 0),
 				//ContentOffset = new Point (0, 0),

+ 15 - 9
UICatalog/Scenarios/TopLevelNoWindowBug.cs

@@ -10,14 +10,14 @@ namespace UICatalog {
 		{
 		{
 			Top?.Dispose ();
 			Top?.Dispose ();
 
 
-			Top = new Toplevel (new Rect (0, 0, Application.Driver.Cols, Application.Driver.Rows));
+			//Top = new Toplevel (new Rect (0, 0, Application.Driver.Cols, Application.Driver.Rows));
 
 
 			var menu = new MenuBar (new MenuBarItem [] {
 			var menu = new MenuBar (new MenuBarItem [] {
 				new MenuBarItem ("_Файл", new MenuItem [] {
 				new MenuBarItem ("_Файл", new MenuItem [] {
 					new MenuItem ("_Создать", "Creates new file", null),
 					new MenuItem ("_Создать", "Creates new file", null),
 					new MenuItem ("_Открыть", "", null),
 					new MenuItem ("_Открыть", "", null),
 					new MenuItem ("Со_хранить", "", null),
 					new MenuItem ("Со_хранить", "", null),
-					new MenuItem ("_Выход", "", () => Application.RequestStop())
+					new MenuItem ("_Выход", "", () => { if (Quit ()) { Application.RequestStop(); } })
 				}),
 				}),
 				new MenuBarItem ("_Edit", new MenuItem [] {
 				new MenuBarItem ("_Edit", new MenuItem [] {
 					new MenuItem ("_Copy", "", null),
 					new MenuItem ("_Copy", "", null),
@@ -28,15 +28,21 @@ namespace UICatalog {
 			Top.Add (menu);
 			Top.Add (menu);
 
 
 			// BUGBUG: #437 This being commented out causes menu to mis-behave
 			// BUGBUG: #437 This being commented out causes menu to mis-behave
-			//var win = new Window ($"Scenario: {GetName ()}") {
-			//	X = 0,
-			//	Y = 1,
-			//	Width = Dim.Fill (),
-			//	Height = Dim.Fill ()
-			//};
-			//ntop.Add (win);
+			var win = new Window ($"Scenario: {GetName ()}") {
+				X = 0,
+				Y = 1,
+				Width = Dim.Fill (),
+				Height = Dim.Fill ()
+			};
+			Top.Add (win);
 
 
 			base.Run ();
 			base.Run ();
 		}
 		}
+
+		private bool Quit ()
+		{
+			var n = MessageBox.Query (50, 7, $"Quit {GetName ()}", $"Are you sure you want to quit this {GetName ()}?", "Yes", "No");
+			return n == 0;
+		}
 	}
 	}
 }
 }

+ 2 - 2
UICatalog/UICatalog.cs

@@ -97,7 +97,7 @@ namespace UICatalog {
 				scenario.Setup ();
 				scenario.Setup ();
 				scenario.Run ();
 				scenario.Run ();
 				_top.Ready += () => {
 				_top.Ready += () => {
-					_top.SetFocus (_rightPane);
+					_rightPane.SetFocus ();
 					_top.Ready = null;
 					_top.Ready = null;
 				};
 				};
 
 
@@ -176,7 +176,7 @@ namespace UICatalog {
 				CanFocus = true,
 				CanFocus = true,
 			};
 			};
 			_categoryListView.OpenSelectedItem += (a) => {
 			_categoryListView.OpenSelectedItem += (a) => {
-				_top.SetFocus (_rightPane);
+				_rightPane.SetFocus ();
 			};
 			};
 			_categoryListView.SelectedItemChanged += CategoryListView_SelectedChanged;
 			_categoryListView.SelectedItemChanged += CategoryListView_SelectedChanged;
 			_leftPane.Add (_categoryListView);
 			_leftPane.Add (_categoryListView);

+ 0 - 1
UnitTests/PosTests.cs

@@ -4,7 +4,6 @@ using System.ComponentModel;
 using System.Data;
 using System.Data;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
-using System.Runtime.InteropServices.WindowsRuntime;
 using Terminal.Gui;
 using Terminal.Gui;
 using Xunit;
 using Xunit;
 
 

+ 5 - 5
UnitTests/ScenarioTests.cs

@@ -5,7 +5,7 @@ using Terminal.Gui;
 using UICatalog;
 using UICatalog;
 using Xunit;
 using Xunit;
 
 
-// Alais Console to MockConsole so we don't accidentally use Console
+// Alias Console to MockConsole so we don't accidentally use Console
 using Console = Terminal.Gui.FakeConsole;
 using Console = Terminal.Gui.FakeConsole;
 
 
 namespace Terminal.Gui {
 namespace Terminal.Gui {
@@ -32,18 +32,18 @@ namespace Terminal.Gui {
 		}
 		}
 
 
 		/// <summary>
 		/// <summary>
-		/// This runs through all Sceanrios defined in UI Catalog, calling Init, Setup, and Run.
+		/// This runs through all Scenarios defined in UI Catalog, calling Init, Setup, and Run.
 		/// It puts a Ctrl-Q in the input queue so the Scenario immediately exits. 
 		/// It puts a Ctrl-Q in the input queue so the Scenario immediately exits. 
 		/// Should find any egregious regressions.
 		/// Should find any egregious regressions.
 		/// </summary>
 		/// </summary>
 		[Fact]
 		[Fact]
-		public void Run_All_Sceanrios ()
+		public void Run_All_Scenarios ()
 		{
 		{
 			List<Type> scenarioClasses = Scenario.GetDerivedClasses<Scenario> ();
 			List<Type> scenarioClasses = Scenario.GetDerivedClasses<Scenario> ();
 			Assert.NotEmpty (scenarioClasses);
 			Assert.NotEmpty (scenarioClasses);
 
 
 			foreach (var scenarioClass in scenarioClasses) {
 			foreach (var scenarioClass in scenarioClasses) {
-				// Setup some fake kepresses 
+				// Setup some fake keypresses 
 				// Passing empty string will cause just a ctrl-q to be fired
 				// Passing empty string will cause just a ctrl-q to be fired
 				Console.MockKeyPresses.Clear ();
 				Console.MockKeyPresses.Clear ();
 				int stackSize = CreateInput ("");
 				int stackSize = CreateInput ("");
@@ -95,7 +95,7 @@ namespace Terminal.Gui {
 
 
 			var item = scenarioClasses.FindIndex (t => Scenario.ScenarioMetadata.GetName (t).Equals ("Generic", StringComparison.OrdinalIgnoreCase));
 			var item = scenarioClasses.FindIndex (t => Scenario.ScenarioMetadata.GetName (t).Equals ("Generic", StringComparison.OrdinalIgnoreCase));
 			var scenarioClass = scenarioClasses[item];
 			var scenarioClass = scenarioClasses[item];
-			// Setup some fake kepresses 
+			// Setup some fake keypresses 
 			// Passing empty string will cause just a ctrl-q to be fired
 			// Passing empty string will cause just a ctrl-q to be fired
 			int stackSize = CreateInput ("");
 			int stackSize = CreateInput ("");
 
 

+ 2 - 2
UnitTests/TextFormatterTests.cs

@@ -533,8 +533,8 @@ namespace Terminal.Gui {
 		{
 		{
 			Assert.Equal (Rect.Empty, TextFormatter.CalcRect (0, 0, null));
 			Assert.Equal (Rect.Empty, TextFormatter.CalcRect (0, 0, null));
 			Assert.Equal (Rect.Empty, TextFormatter.CalcRect (0, 0, ""));
 			Assert.Equal (Rect.Empty, TextFormatter.CalcRect (0, 0, ""));
-			Assert.Equal (Rect.Empty, TextFormatter.CalcRect (1, 2, ""));
-			Assert.Equal (Rect.Empty, TextFormatter.CalcRect (-1, -2, ""));
+			Assert.Equal (new Rect (new Point (1, 2), Size.Empty), TextFormatter.CalcRect (1, 2, ""));
+			Assert.Equal (new Rect (new Point (-1, -2), Size.Empty), TextFormatter.CalcRect (-1, -2, ""));
 		}
 		}
 
 
 		[Fact]
 		[Fact]

+ 125 - 4
UnitTests/ViewTests.cs

@@ -35,7 +35,7 @@ namespace Terminal.Gui {
 			Assert.Empty (r.Subviews);
 			Assert.Empty (r.Subviews);
 			Assert.False (r.WantContinuousButtonPressed);
 			Assert.False (r.WantContinuousButtonPressed);
 			Assert.False (r.WantMousePositionReports);
 			Assert.False (r.WantMousePositionReports);
-			Assert.Null (r.GetEnumerator().Current);
+			Assert.Null (r.GetEnumerator ().Current);
 			Assert.Null (r.SuperView);
 			Assert.Null (r.SuperView);
 			Assert.Null (r.MostFocused);
 			Assert.Null (r.MostFocused);
 
 
@@ -64,7 +64,7 @@ namespace Terminal.Gui {
 			Assert.Null (r.MostFocused);
 			Assert.Null (r.MostFocused);
 
 
 			// Rect with values
 			// Rect with values
-			r = new View (new Rect(1, 2, 3, 4));
+			r = new View (new Rect (1, 2, 3, 4));
 			Assert.NotNull (r);
 			Assert.NotNull (r);
 			Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
 			Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
 			Assert.Equal ("View()({X=1,Y=2,Width=3,Height=4})", r.ToString ());
 			Assert.Equal ("View()({X=1,Y=2,Width=3,Height=4})", r.ToString ());
@@ -115,7 +115,7 @@ namespace Terminal.Gui {
 			var sub1 = new View ();
 			var sub1 = new View ();
 			root.Add (sub1);
 			root.Add (sub1);
 			var sub2 = new View ();
 			var sub2 = new View ();
-			sub1.Width = Dim.Width(sub2);
+			sub1.Width = Dim.Width (sub2);
 
 
 			Assert.Throws<InvalidOperationException> (() => root.LayoutSubviews ());
 			Assert.Throws<InvalidOperationException> (() => root.LayoutSubviews ());
 
 
@@ -551,7 +551,7 @@ namespace Terminal.Gui {
 
 
 			var t = new Toplevel () { Id = "0", };
 			var t = new Toplevel () { Id = "0", };
 
 
-			var w = new Window () {Id = "t", Width = Dim.Fill (), Height = Dim.Fill () };
+			var w = new Window () { Id = "t", Width = Dim.Fill (), Height = Dim.Fill () };
 			var v1 = new View () { Id = "v1", Width = Dim.Fill (), Height = Dim.Fill () };
 			var v1 = new View () { Id = "v1", Width = Dim.Fill (), Height = Dim.Fill () };
 			var v2 = new View () { Id = "v2", Width = Dim.Fill (), Height = Dim.Fill () };
 			var v2 = new View () { Id = "v2", Width = Dim.Fill (), Height = Dim.Fill () };
 			var sv1 = new View () { Id = "sv1", Width = Dim.Fill (), Height = Dim.Fill () };
 			var sv1 = new View () { Id = "sv1", Width = Dim.Fill (), Height = Dim.Fill () };
@@ -899,5 +899,126 @@ namespace Terminal.Gui {
 			Application.Run ();
 			Application.Run ();
 			Application.Shutdown ();
 			Application.Shutdown ();
 		}
 		}
+
+
+		[Fact]
+		public void Navigation_With_Null_Focused_View ()
+		{
+			// Non-regression test for #882 (NullReferenceException during keyboard navigation when Focused is null)
+
+			Application.Init (new FakeDriver (), new NetMainLoop (() => FakeConsole.ReadKey (true)));
+
+			Application.Top.Ready += () => {
+				Assert.Null (Application.Top.Focused);
+			};
+
+			// Keyboard navigation with tab
+			Console.MockKeyPresses.Push (new ConsoleKeyInfo ('\t', ConsoleKey.Tab, false, false, false));
+
+			Application.Iteration += () => Application.RequestStop ();
+
+			Application.Run ();
+			Application.Shutdown ();
+		}
+
+		[Fact]
+		public void Multi_Thread_Toplevels ()
+		{
+			Application.Init (new FakeDriver (), new NetMainLoop (() => FakeConsole.ReadKey (true)));
+
+			var t = Application.Top;
+			var w = new Window ();
+			t.Add (w);
+
+			int count = 0, count1 = 0, count2 = 0;
+			bool log = false, log1 = false, log2 = false;
+			bool fromTopStillKnowFirstIsRunning = false;
+			bool fromTopStillKnowSecondIsRunning = false;
+			bool fromFirstStillKnowSecondIsRunning = false;
+
+			Application.MainLoop.AddTimeout (TimeSpan.FromMilliseconds (100), (_) => {
+				count++;
+				if (count1 == 5) {
+					log1 = true;
+				}
+				if (count1 > 13 && count < 15) {
+					fromTopStillKnowFirstIsRunning = true;
+				}
+				if (count2 > 6 && count2 < 8) {
+					fromTopStillKnowSecondIsRunning = true;
+				}
+				if (count == 30) {
+					Assert.Equal (30, count);
+					Assert.Equal (20, count1);
+					Assert.Equal (10, count2);
+
+					Assert.True (log);
+					Assert.True (log1);
+					Assert.True (log2);
+
+					Assert.True (fromTopStillKnowFirstIsRunning);
+					Assert.True (fromTopStillKnowSecondIsRunning);
+					Assert.True (fromFirstStillKnowSecondIsRunning);
+
+					Application.RequestStop ();
+					return false;
+				}
+				return true;
+			});
+
+			t.Ready = () => {
+				FirstDialogToplevel ();
+			};
+
+			void FirstDialogToplevel ()
+			{
+				var od = new OpenDialog {
+					Ready = () => {
+						SecoundDialogToplevel ();
+					}
+				};
+
+				Application.MainLoop.AddTimeout (TimeSpan.FromMilliseconds (100), (_) => {
+					count1++;
+					if (count2 == 5) {
+						log2 = true;
+					}
+					if (count2 > 3 && count2 < 5) {
+						fromFirstStillKnowSecondIsRunning = true;
+					}
+					if (count1 == 20) {
+						Assert.Equal (20, count1);
+						Application.RequestStop ();
+						return false;
+					}
+					return true;
+				});
+
+				Application.Run (od);
+			}
+
+			void SecoundDialogToplevel ()
+			{
+				var d = new Dialog ();
+
+				Application.MainLoop.AddTimeout (TimeSpan.FromMilliseconds (100), (_) => {
+					count2++;
+					if (count < 30) {
+						log = true;
+					}
+					if (count2 == 10) {
+						Assert.Equal (10, count2);
+						Application.RequestStop ();
+						return false;
+					}
+					return true;
+				});
+
+				Application.Run (d);
+			}
+
+			Application.Run ();
+			Application.Shutdown ();
+		}
 	}
 	}
 }
 }

+ 0 - 60
XmlYamlMapping.json

@@ -1,60 +0,0 @@
-{
-  "/cvs/gui.cs/ecmadocs/en/ns-Mono.Terminal.xml": "/cvs/gui.cs/docfx/api/Mono.Terminal.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Clipboard.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Clipboard.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/ProgressBar.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.ProgressBar.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/SpecialChar.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.SpecialChar.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Button.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Button.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/ScrollView.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.ScrollView.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/FileDialog.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.FileDialog.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Toplevel.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Toplevel.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Dialog.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Dialog.yml",
-  "/cvs/gui.cs/ecmadocs/en/Unix.Terminal/Curses+Event.xml": "/cvs/gui.cs/docfx/api/Unix.Terminal/Unix.Terminal.Curses.Event.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Attribute.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Attribute.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/OpenDialog.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.OpenDialog.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/CheckBox.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.CheckBox.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Size.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Size.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/TimeField.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.TimeField.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/IListDataSource.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.IListDataSource.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/MenuBar.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.MenuBar.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/MouseEvent.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.MouseEvent.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Dim.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Dim.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/HexView.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.HexView.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Colors.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Colors.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/TextField.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.TextField.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/RadioGroup.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.RadioGroup.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/LayoutStyle.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.LayoutStyle.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Application+RunState.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Application.RunState.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Responder.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Responder.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/TextAlignment.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.TextAlignment.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/View.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.View.yml",
-  "/cvs/gui.cs/ecmadocs/en/Mono.Terminal/UnixMainLoop+Condition.xml": "/cvs/gui.cs/docfx/api/Mono.Terminal/Mono.Terminal.UnixMainLoop.Condition.yml",
-  "/cvs/gui.cs/ecmadocs/en/Mono.Terminal/IMainLoopDriver.xml": "/cvs/gui.cs/docfx/api/Mono.Terminal/Mono.Terminal.IMainLoopDriver.yml",
-  "/cvs/gui.cs/ecmadocs/en/Unix.Terminal/Curses+Window.xml": "/cvs/gui.cs/docfx/api/Unix.Terminal/Unix.Terminal.Curses.Window.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Label.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Label.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Point.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Point.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/ListView.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.ListView.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/CursesDriver.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.CursesDriver.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/MenuBarItem.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.MenuBarItem.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/MessageBox.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.MessageBox.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/FrameView.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.FrameView.yml",
-  "/cvs/gui.cs/ecmadocs/en/ns-Unix.Terminal.xml": "/cvs/gui.cs/docfx/api/Unix.Terminal.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/ScrollBarView.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.ScrollBarView.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/ColorScheme.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.ColorScheme.yml",
-  "/cvs/gui.cs/ecmadocs/en/ns-Terminal.Gui.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Rect.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Rect.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Key.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Key.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/MouseFlags.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.MouseFlags.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/MenuItem.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.MenuItem.yml",
-  "/cvs/gui.cs/ecmadocs/en/Mono.Terminal/UnixMainLoop.xml": "/cvs/gui.cs/docfx/api/Mono.Terminal/Mono.Terminal.UnixMainLoop.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Pos.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Pos.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Application.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Application.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Window.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Window.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/SaveDialog.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.SaveDialog.yml",
-  "/cvs/gui.cs/ecmadocs/en/Unix.Terminal/Curses.xml": "/cvs/gui.cs/docfx/api/Unix.Terminal/Unix.Terminal.Curses.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/ConsoleDriver.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.ConsoleDriver.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/KeyEvent.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.KeyEvent.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/TextView.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.TextView.yml",
-  "/cvs/gui.cs/ecmadocs/en/Mono.Terminal/MainLoop.xml": "/cvs/gui.cs/docfx/api/Mono.Terminal/Mono.Terminal.MainLoop.yml",
-  "/cvs/gui.cs/ecmadocs/en/Terminal.Gui/Color.xml": "/cvs/gui.cs/docfx/api/Terminal.Gui/Terminal.Gui.Color.yml",
-  "/cvs/gui.cs/ecmadocs/en/Unix.Terminal/Curses+MouseEvent.xml": "/cvs/gui.cs/docfx/api/Unix.Terminal/Unix.Terminal.Curses.MouseEvent.yml"
-}

+ 0 - 26
azure-pipelines.yml

@@ -1,26 +0,0 @@
-pool:
-  vmImage: 'Ubuntu 16.04'
-
-variables:
-  buildConfiguration: 'Release'
-
-steps:
-- script: |
-    msbuild /t:Restore Terminal.sln
-  displayName: Restore dependencies
-
-
-- script: |
-    if echo $BUILD_SOURCEBRANCH | grep /release/; then perl -pi -e "s/PackageVersion>.*</PackageVersion>${BUILD_SOURCEBRANCHNAME}</" Terminal.Gui/Terminal.Gui.csproj; fi
-  displayName: Update NuGet package version from branch name
-
-- script: |
-    msbuild /p:Configuration=Release Terminal.sln
-  displayName: Build
-
-- script: |
-    cp ./Terminal.Gui/bin/Release/Terminal.Gui.*.nupkg $BUILD_ARTIFACTSTAGINGDIRECTORY
-  displayName: Copy artifacts to staging directory
-
-- task: PublishBuildArtifacts@1
-  condition: and(succeeded(), ne(variables['system.pullrequest.isfork'], true))

+ 1 - 1
docs/README.html

@@ -8,7 +8,7 @@
     <title>To Generate the Docs </title>
     <title>To Generate the Docs </title>
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="To Generate the Docs ">
     <meta name="title" content="To Generate the Docs ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="favicon.ico">
     <link rel="shortcut icon" href="favicon.ico">
     <link rel="stylesheet" href="styles/docfx.vendor.css">
     <link rel="stylesheet" href="styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Application.ResizedEventArgs.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Application.ResizedEventArgs
     <meta name="title" content="Class Application.ResizedEventArgs
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Application.RunState.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Application.RunState
     <meta name="title" content="Class Application.RunState
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 17 - 45
docs/api/Terminal.Gui/Terminal.Gui.Application.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Application
     <meta name="title" content="Class Application
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -375,7 +375,7 @@ TThe current <a class="xref" href="Terminal.Gui.View.html">View</a> object being
   <a id="Terminal_Gui_Application_MainLoop_" data-uid="Terminal.Gui.Application.MainLoop*"></a>
   <a id="Terminal_Gui_Application_MainLoop_" data-uid="Terminal.Gui.Application.MainLoop*"></a>
   <h4 id="Terminal_Gui_Application_MainLoop" data-uid="Terminal.Gui.Application.MainLoop">MainLoop</h4>
   <h4 id="Terminal_Gui_Application_MainLoop" data-uid="Terminal.Gui.Application.MainLoop">MainLoop</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
-The <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_MainLoop">MainLoop</a>  driver for the applicaiton
+The <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_MainLoop">MainLoop</a>  driver for the application
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
@@ -466,7 +466,7 @@ Building block API: Prepares the provided <a class="xref" href="Terminal.Gui.Top
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Application.RunState.html">Application.RunState</a></td>
         <td><a class="xref" href="Terminal.Gui.Application.RunState.html">Application.RunState</a></td>
-        <td>The runstate handle that needs to be passed to the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_System_Boolean_">End(Application.RunState, Boolean)</a> method upon completion.</td>
+        <td>The runstate handle that needs to be passed to the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_">End(Application.RunState)</a> method upon completion.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -476,20 +476,20 @@ This method prepares the provided toplevel for running with the focus,
 it adds this to the list of toplevels, sets up the mainloop to process the
 it adds this to the list of toplevels, sets up the mainloop to process the
 event, lays out the subviews, focuses the first element, and draws the
 event, lays out the subviews, focuses the first element, and draws the
 toplevel in the screen. This is usually followed by executing
 toplevel in the screen. This is usually followed by executing
-the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_RunLoop_Terminal_Gui_Application_RunState_System_Boolean_">RunLoop(Application.RunState, Boolean)</a> method, and then the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_System_Boolean_">End(Application.RunState, Boolean)</a> method upon termination which will
+the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_RunLoop_Terminal_Gui_Application_RunState_System_Boolean_">RunLoop(Application.RunState, Boolean)</a> method, and then the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_">End(Application.RunState)</a> method upon termination which will
 undo these changes.
 undo these changes.
 </div>
 </div>
   
   
   
   
   <a id="Terminal_Gui_Application_End_" data-uid="Terminal.Gui.Application.End*"></a>
   <a id="Terminal_Gui_Application_End_" data-uid="Terminal.Gui.Application.End*"></a>
-  <h4 id="Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_System_Boolean_" data-uid="Terminal.Gui.Application.End(Terminal.Gui.Application.RunState,System.Boolean)">End(Application.RunState, Boolean)</h4>
+  <h4 id="Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_" data-uid="Terminal.Gui.Application.End(Terminal.Gui.Application.RunState)">End(Application.RunState)</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
 Building block API: completes the execution of a <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a>  that was started with <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Begin_Terminal_Gui_Toplevel_">Begin(Toplevel)</a> .
 Building block API: completes the execution of a <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a>  that was started with <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Begin_Terminal_Gui_Toplevel_">Begin(Toplevel)</a> .
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public static void End(Application.RunState runState, bool closeDriver = true)</code></pre>
+    <pre><code class="lang-csharp hljs">public static void End(Application.RunState runState)</code></pre>
   </div>
   </div>
   <h5 class="parameters">Parameters</h5>
   <h5 class="parameters">Parameters</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -506,11 +506,6 @@ Building block API: completes the execution of a <a class="xref" href="Terminal.
         <td><span class="parametername">runState</span></td>
         <td><span class="parametername">runState</span></td>
         <td>The runstate returned by the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Begin_Terminal_Gui_Toplevel_">Begin(Toplevel)</a> method.</td>
         <td>The runstate returned by the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Begin_Terminal_Gui_Toplevel_">Begin(Toplevel)</a> method.</td>
       </tr>
       </tr>
-      <tr>
-        <td><span class="xref">System.Boolean</span></td>
-        <td><span class="parametername">closeDriver</span></td>
-        <td>If <code>true</code>, closes the application. If <code>false</code> closes the toplevels only.</td>
-      </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   
   
@@ -579,7 +574,7 @@ Initializes a new instance of <a class="xref" href="Terminal.Gui.html">Terminal.
   <h5 id="Terminal_Gui_Application_Init_Terminal_Gui_ConsoleDriver_Terminal_Gui_IMainLoopDriver__remarks">Remarks</h5>
   <h5 id="Terminal_Gui_Application_Init_Terminal_Gui_ConsoleDriver_Terminal_Gui_IMainLoopDriver__remarks">Remarks</h5>
   <div class="markdown level1 remarks">
   <div class="markdown level1 remarks">
 <p>
 <p>
-Call this method once per instance (or after <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Shutdown_System_Boolean_">Shutdown(Boolean)</a> has been called).
+Call this method once per instance (or after <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Shutdown">Shutdown()</a> has been called).
 </p>
 </p>
 <p>
 <p>
 Loads the right <a class="xref" href="Terminal.Gui.ConsoleDriver.html">ConsoleDriver</a> for the platform.
 Loads the right <a class="xref" href="Terminal.Gui.ConsoleDriver.html">ConsoleDriver</a> for the platform.
@@ -670,7 +665,7 @@ This will cause <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui
   <a id="Terminal_Gui_Application_Run_" data-uid="Terminal.Gui.Application.Run*"></a>
   <a id="Terminal_Gui_Application_Run_" data-uid="Terminal.Gui.Application.Run*"></a>
   <h4 id="Terminal_Gui_Application_Run" data-uid="Terminal.Gui.Application.Run">Run()</h4>
   <h4 id="Terminal_Gui_Application_Run" data-uid="Terminal.Gui.Application.Run">Run()</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
-Runs the application by calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_System_Boolean_">Run(Toplevel, Boolean)</a> with the value of <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Top">Top</a>
+Runs the application by calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_">Run(Toplevel)</a> with the value of <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Top">Top</a>
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
@@ -680,14 +675,14 @@ Runs the application by calling <a class="xref" href="Terminal.Gui.Application.h
   
   
   
   
   <a id="Terminal_Gui_Application_Run_" data-uid="Terminal.Gui.Application.Run*"></a>
   <a id="Terminal_Gui_Application_Run_" data-uid="Terminal.Gui.Application.Run*"></a>
-  <h4 id="Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_System_Boolean_" data-uid="Terminal.Gui.Application.Run(Terminal.Gui.Toplevel,System.Boolean)">Run(Toplevel, Boolean)</h4>
+  <h4 id="Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_" data-uid="Terminal.Gui.Application.Run(Terminal.Gui.Toplevel)">Run(Toplevel)</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
 Runs the main loop on the given <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a> container.
 Runs the main loop on the given <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a> container.
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public static void Run(Toplevel view, bool closeDriver = true)</code></pre>
+    <pre><code class="lang-csharp hljs">public static void Run(Toplevel view)</code></pre>
   </div>
   </div>
   <h5 class="parameters">Parameters</h5>
   <h5 class="parameters">Parameters</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -704,14 +699,9 @@ Runs the main loop on the given <a class="xref" href="Terminal.Gui.Toplevel.html
         <td><span class="parametername">view</span></td>
         <td><span class="parametername">view</span></td>
         <td>The <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a> tu run modally.</td>
         <td>The <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a> tu run modally.</td>
       </tr>
       </tr>
-      <tr>
-        <td><span class="xref">System.Boolean</span></td>
-        <td><span class="parametername">closeDriver</span></td>
-        <td>Set to <true></true> to cause the MainLoop to end when <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_System_Boolean_">End(Application.RunState, Boolean)</a> is called, clsing the toplevels only.</td>
-      </tr>
     </tbody>
     </tbody>
   </table>
   </table>
-  <h5 id="Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_System_Boolean__remarks">Remarks</h5>
+  <h5 id="Terminal_Gui_Application_Run_Terminal_Gui_Toplevel__remarks">Remarks</h5>
   <div class="markdown level1 remarks">
   <div class="markdown level1 remarks">
 <p>
 <p>
   This method is used to start processing events
   This method is used to start processing events
@@ -719,11 +709,11 @@ Runs the main loop on the given <a class="xref" href="Terminal.Gui.Toplevel.html
   run other modal <a class="xref" href="Terminal.Gui.View.html">View</a>s such as <a class="xref" href="Terminal.Gui.Dialog.html">Dialog</a> boxes.
   run other modal <a class="xref" href="Terminal.Gui.View.html">View</a>s such as <a class="xref" href="Terminal.Gui.Dialog.html">Dialog</a> boxes.
 </p>
 </p>
 <p>
 <p>
-  To make a <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_System_Boolean_">Run(Toplevel, Boolean)</a> stop execution, call <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_RequestStop">RequestStop()</a>.
+  To make a <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_">Run(Toplevel)</a> stop execution, call <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_RequestStop">RequestStop()</a>.
 </p>
 </p>
 <p>
 <p>
-  Calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_System_Boolean_">Run(Toplevel, Boolean)</a> is equivalent to calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Begin_Terminal_Gui_Toplevel_">Begin(Toplevel)</a>, followed by <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_RunLoop_Terminal_Gui_Application_RunState_System_Boolean_">RunLoop(Application.RunState, Boolean)</a>,
-  and then calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_System_Boolean_">End(Application.RunState, Boolean)</a>.
+  Calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_">Run(Toplevel)</a> is equivalent to calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Begin_Terminal_Gui_Toplevel_">Begin(Toplevel)</a>, followed by <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_RunLoop_Terminal_Gui_Application_RunState_System_Boolean_">RunLoop(Application.RunState, Boolean)</a>,
+  and then calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_End_Terminal_Gui_Application_RunState_">End(Application.RunState)</a>.
 </p>
 </p>
 <p>
 <p>
   Alternatively, to have a program control the main loop and 
   Alternatively, to have a program control the main loop and 
@@ -738,13 +728,12 @@ Runs the main loop on the given <a class="xref" href="Terminal.Gui.Toplevel.html
   <a id="Terminal_Gui_Application_Run_" data-uid="Terminal.Gui.Application.Run*"></a>
   <a id="Terminal_Gui_Application_Run_" data-uid="Terminal.Gui.Application.Run*"></a>
   <h4 id="Terminal_Gui_Application_Run__1" data-uid="Terminal.Gui.Application.Run``1">Run&lt;T&gt;()</h4>
   <h4 id="Terminal_Gui_Application_Run__1" data-uid="Terminal.Gui.Application.Run``1">Run&lt;T&gt;()</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
-Runs the application by calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_System_Boolean_">Run(Toplevel, Boolean)</a> with a new instance of the specified <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a>-derived class
+Runs the application by calling <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_">Run(Toplevel)</a> with a new instance of the specified <a class="xref" href="Terminal.Gui.Toplevel.html">Toplevel</a>-derived class
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
     <pre><code class="lang-csharp hljs">public static void Run&lt;T&gt;()
     <pre><code class="lang-csharp hljs">public static void Run&lt;T&gt;()
-
     where T : Toplevel, new()</code></pre>
     where T : Toplevel, new()</code></pre>
   </div>
   </div>
   <h5 class="typeParameters">Type Parameters</h5>
   <h5 class="typeParameters">Type Parameters</h5>
@@ -804,32 +793,15 @@ blocking or non-blocking call.
   
   
   
   
   <a id="Terminal_Gui_Application_Shutdown_" data-uid="Terminal.Gui.Application.Shutdown*"></a>
   <a id="Terminal_Gui_Application_Shutdown_" data-uid="Terminal.Gui.Application.Shutdown*"></a>
-  <h4 id="Terminal_Gui_Application_Shutdown_System_Boolean_" data-uid="Terminal.Gui.Application.Shutdown(System.Boolean)">Shutdown(Boolean)</h4>
+  <h4 id="Terminal_Gui_Application_Shutdown" data-uid="Terminal.Gui.Application.Shutdown">Shutdown()</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
 Shutdown an application initialized with <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Init_Terminal_Gui_ConsoleDriver_Terminal_Gui_IMainLoopDriver_">Init(ConsoleDriver, IMainLoopDriver)</a>
 Shutdown an application initialized with <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Init_Terminal_Gui_ConsoleDriver_Terminal_Gui_IMainLoopDriver_">Init(ConsoleDriver, IMainLoopDriver)</a>
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public static void Shutdown(bool closeDriver = true)</code></pre>
+    <pre><code class="lang-csharp hljs">public static void Shutdown()</code></pre>
   </div>
   </div>
-  <h5 class="parameters">Parameters</h5>
-  <table class="table table-bordered table-striped table-condensed">
-    <thead>
-      <tr>
-        <th>Type</th>
-        <th>Name</th>
-        <th>Description</th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td><span class="xref">System.Boolean</span></td>
-        <td><span class="parametername">closeDriver</span></td>
-        <td><code>true</code>Closes the application.<code>false</code>Closes toplevels only.</td>
-      </tr>
-    </tbody>
-  </table>
   
   
   
   
   <a id="Terminal_Gui_Application_UngrabMouse_" data-uid="Terminal.Gui.Application.UngrabMouse*"></a>
   <a id="Terminal_Gui_Application_UngrabMouse_" data-uid="Terminal.Gui.Application.UngrabMouse*"></a>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Attribute.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Struct Attribute
     <meta name="title" content="Struct Attribute
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 92 - 14
docs/api/Terminal.Gui/Terminal.Gui.Button.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Button
     <meta name="title" content="Class Button
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -247,9 +247,6 @@ Button is a <a class="xref" href="Terminal.Gui.View.html">View</a> that provides
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Move_System_Int32_System_Int32_">View.Move(Int32, Int32)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Move_System_Int32_System_Int32_">View.Move(Int32, Int32)</a>
     </div>
     </div>
-    <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_PositionCursor">View.PositionCursor()</a>
-    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_HasFocus">View.HasFocus</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_HasFocus">View.HasFocus</a>
     </div>
     </div>
@@ -290,7 +287,7 @@ Button is a <a class="xref" href="Terminal.Gui.View.html">View</a> that provides
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -349,6 +346,9 @@ Button is a <a class="xref" href="Terminal.Gui.View.html">View</a> that provides
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseLeave_Terminal_Gui_MouseEvent_">View.OnMouseLeave(MouseEvent)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseLeave_Terminal_Gui_MouseEvent_">View.OnMouseLeave(MouseEvent)</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseEvent_Terminal_Gui_MouseEvent_">View.OnMouseEvent(MouseEvent)</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Dispose_System_Boolean_">View.Dispose(Boolean)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Dispose_System_Boolean_">View.Dispose(Boolean)</a>
     </div>
     </div>
@@ -359,7 +359,7 @@ Button is a <a class="xref" href="Terminal.Gui.View.html">View</a> that provides
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
@@ -660,15 +660,15 @@ The text displayed by this <a class="xref" href="Terminal.Gui.Button.html">Butto
   </h3>
   </h3>
   
   
   
   
-  <a id="Terminal_Gui_Button_OnMouseEvent_" data-uid="Terminal.Gui.Button.OnMouseEvent*"></a>
-  <h4 id="Terminal_Gui_Button_OnMouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.Button.OnMouseEvent(Terminal.Gui.MouseEvent)">OnMouseEvent(MouseEvent)</h4>
+  <a id="Terminal_Gui_Button_MouseEvent_" data-uid="Terminal.Gui.Button.MouseEvent*"></a>
+  <h4 id="Terminal_Gui_Button_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.Button.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
 Method invoked when a mouse event is generated
 Method invoked when a mouse event is generated
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public override bool OnMouseEvent(MouseEvent mouseEvent)</code></pre>
+    <pre><code class="lang-csharp hljs">public override bool MouseEvent(MouseEvent me)</code></pre>
   </div>
   </div>
   <h5 class="parameters">Parameters</h5>
   <h5 class="parameters">Parameters</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -682,7 +682,7 @@ Method invoked when a mouse event is generated
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.MouseEvent.html">MouseEvent</a></td>
         <td><a class="xref" href="Terminal.Gui.MouseEvent.html">MouseEvent</a></td>
-        <td><span class="parametername">mouseEvent</span></td>
+        <td><span class="parametername">me</span></td>
         <td></td>
         <td></td>
       </tr>
       </tr>
     </tbody>
     </tbody>
@@ -703,12 +703,31 @@ Method invoked when a mouse event is generated
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
-  <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseEvent_Terminal_Gui_MouseEvent_">View.OnMouseEvent(MouseEvent)</a></div>
+  <div><a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a></div>
+  
+  
+  <a id="Terminal_Gui_Button_PositionCursor_" data-uid="Terminal.Gui.Button.PositionCursor*"></a>
+  <h4 id="Terminal_Gui_Button_PositionCursor" data-uid="Terminal.Gui.Button.PositionCursor">PositionCursor()</h4>
+  <div class="markdown level1 summary">
+Positions the cursor in the right position based on the currently focused view in the chain.
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public override void PositionCursor()</code></pre>
+  </div>
+  <h5 class="overrides">Overrides</h5>
+  <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_PositionCursor">View.PositionCursor()</a></div>
   
   
   
   
   <a id="Terminal_Gui_Button_ProcessColdKey_" data-uid="Terminal.Gui.Button.ProcessColdKey*"></a>
   <a id="Terminal_Gui_Button_ProcessColdKey_" data-uid="Terminal.Gui.Button.ProcessColdKey*"></a>
   <h4 id="Terminal_Gui_Button_ProcessColdKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Button.ProcessColdKey(Terminal.Gui.KeyEvent)">ProcessColdKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_Button_ProcessColdKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Button.ProcessColdKey(Terminal.Gui.KeyEvent)">ProcessColdKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+This method can be overwritten by views that
+want to provide accelerator functionality
+(Alt-key for example), but without
+interefering with normal ProcessKey behavior.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -748,11 +767,31 @@ Method invoked when a mouse event is generated
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessColdKey_Terminal_Gui_KeyEvent_">View.ProcessColdKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessColdKey_Terminal_Gui_KeyEvent_">View.ProcessColdKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_Button_ProcessColdKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  After keys are sent to the subviews on the
+  current view, all the view are
+  processed and the key is passed to the views
+  to allow some of them to process the keystroke
+  as a cold-key. </p>
+<p>
+  This functionality is used, for example, by
+  default buttons to act on the enter key.
+  Processing this as a hot-key would prevent
+  non-default buttons from consuming the enter
+  keypress when they have the focus.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_Button_ProcessHotKey_" data-uid="Terminal.Gui.Button.ProcessHotKey*"></a>
   <a id="Terminal_Gui_Button_ProcessHotKey_" data-uid="Terminal.Gui.Button.ProcessHotKey*"></a>
   <h4 id="Terminal_Gui_Button_ProcessHotKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Button.ProcessHotKey(Terminal.Gui.KeyEvent)">ProcessHotKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_Button_ProcessHotKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Button.ProcessHotKey(Terminal.Gui.KeyEvent)">ProcessHotKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+This method can be overwritten by view that
+want to provide accelerator functionality
+(Alt-key for example).
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -792,11 +831,31 @@ Method invoked when a mouse event is generated
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessHotKey_Terminal_Gui_KeyEvent_">View.ProcessHotKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessHotKey_Terminal_Gui_KeyEvent_">View.ProcessHotKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_Button_ProcessHotKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Before keys are sent to the subview on the
+  current view, all the views are
+  processed and the key is passed to the widgets
+  to allow some of them to process the keystroke
+  as a hot-key. </p>
+<p>
+   For example, if you implement a button that
+   has a hotkey ok &quot;o&quot;, you would catch the
+   combination Alt-o here.  If the event is
+   caught, you must return true to stop the
+   keystroke from being dispatched to other
+   views.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_Button_ProcessKey_" data-uid="Terminal.Gui.Button.ProcessKey*"></a>
   <a id="Terminal_Gui_Button_ProcessKey_" data-uid="Terminal.Gui.Button.ProcessKey*"></a>
   <h4 id="Terminal_Gui_Button_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Button.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_Button_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Button.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -836,6 +895,25 @@ Method invoked when a mouse event is generated
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_Button_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 53 - 8
docs/api/Terminal.Gui/Terminal.Gui.CheckBox.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class CheckBox
     <meta name="title" content="Class CheckBox
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -284,7 +284,7 @@ The <a class="xref" href="Terminal.Gui.CheckBox.html">CheckBox</a> <a class="xre
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -361,6 +361,9 @@ The <a class="xref" href="Terminal.Gui.CheckBox.html">CheckBox</a> <a class="xre
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -626,7 +629,9 @@ The text displayed by this <a class="xref" href="Terminal.Gui.CheckBox.html">Che
   
   
   <a id="Terminal_Gui_CheckBox_MouseEvent_" data-uid="Terminal.Gui.CheckBox.MouseEvent*"></a>
   <a id="Terminal_Gui_CheckBox_MouseEvent_" data-uid="Terminal.Gui.CheckBox.MouseEvent*"></a>
   <h4 id="Terminal_Gui_CheckBox_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.CheckBox.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_CheckBox_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.CheckBox.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -660,7 +665,7 @@ The text displayed by this <a class="xref" href="Terminal.Gui.CheckBox.html">Che
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -699,7 +704,9 @@ Called when the <a class="xref" href="Terminal.Gui.CheckBox.html#Terminal_Gui_Ch
   
   
   <a id="Terminal_Gui_CheckBox_PositionCursor_" data-uid="Terminal.Gui.CheckBox.PositionCursor*"></a>
   <a id="Terminal_Gui_CheckBox_PositionCursor_" data-uid="Terminal.Gui.CheckBox.PositionCursor*"></a>
   <h4 id="Terminal_Gui_CheckBox_PositionCursor" data-uid="Terminal.Gui.CheckBox.PositionCursor">PositionCursor()</h4>
   <h4 id="Terminal_Gui_CheckBox_PositionCursor" data-uid="Terminal.Gui.CheckBox.PositionCursor">PositionCursor()</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Positions the cursor in the right position based on the currently focused view in the chain.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -711,7 +718,10 @@ Called when the <a class="xref" href="Terminal.Gui.CheckBox.html#Terminal_Gui_Ch
   
   
   <a id="Terminal_Gui_CheckBox_ProcessKey_" data-uid="Terminal.Gui.CheckBox.ProcessKey*"></a>
   <a id="Terminal_Gui_CheckBox_ProcessKey_" data-uid="Terminal.Gui.CheckBox.ProcessKey*"></a>
   <h4 id="Terminal_Gui_CheckBox_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.CheckBox.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_CheckBox_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.CheckBox.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -751,11 +761,32 @@ Called when the <a class="xref" href="Terminal.Gui.CheckBox.html#Terminal_Gui_Ch
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_CheckBox_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_CheckBox_Redraw_" data-uid="Terminal.Gui.CheckBox.Redraw*"></a>
   <a id="Terminal_Gui_CheckBox_Redraw_" data-uid="Terminal.Gui.CheckBox.Redraw*"></a>
   <h4 id="Terminal_Gui_CheckBox_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.CheckBox.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_CheckBox_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.CheckBox.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -774,12 +805,26 @@ Called when the <a class="xref" href="Terminal.Gui.CheckBox.html#Terminal_Gui_Ch
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">bounds</span></td>
         <td><span class="parametername">bounds</span></td>
-        <td></td>
+        <td>The bounds (view-relative region) to redraw.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_CheckBox_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Clipboard.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Clipboard
     <meta name="title" content="Class Clipboard
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Color.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Enum Color
     <meta name="title" content="Enum Color
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.ColorScheme.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ColorScheme
     <meta name="title" content="Class ColorScheme
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Colors.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Colors
     <meta name="title" content="Class Colors
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 60 - 13
docs/api/Terminal.Gui/Terminal.Gui.ComboBox.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ComboBox
     <meta name="title" content="Class ComboBox
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -278,7 +278,7 @@ ComboBox control
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -355,6 +355,9 @@ ComboBox control
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -632,7 +635,9 @@ The currently selected list item
   
   
   <a id="Terminal_Gui_ComboBox_MouseEvent_" data-uid="Terminal.Gui.ComboBox.MouseEvent*"></a>
   <a id="Terminal_Gui_ComboBox_MouseEvent_" data-uid="Terminal.Gui.ComboBox.MouseEvent*"></a>
   <h4 id="Terminal_Gui_ComboBox_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ComboBox.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_ComboBox_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ComboBox.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -666,7 +671,7 @@ The currently selected list item
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -676,7 +681,9 @@ The currently selected list item
   
   
   <a id="Terminal_Gui_ComboBox_OnEnter_" data-uid="Terminal.Gui.ComboBox.OnEnter*"></a>
   <a id="Terminal_Gui_ComboBox_OnEnter_" data-uid="Terminal.Gui.ComboBox.OnEnter*"></a>
   <h4 id="Terminal_Gui_ComboBox_OnEnter_Terminal_Gui_View_" data-uid="Terminal.Gui.ComboBox.OnEnter(Terminal.Gui.View)">OnEnter(View)</h4>
   <h4 id="Terminal_Gui_ComboBox_OnEnter_Terminal_Gui_View_" data-uid="Terminal.Gui.ComboBox.OnEnter(Terminal.Gui.View)">OnEnter(View)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a view gets focus.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -695,7 +702,7 @@ The currently selected list item
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><span class="parametername">view</span></td>
         <td><span class="parametername">view</span></td>
-        <td></td>
+        <td>The view that is losing focus.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -710,7 +717,7 @@ The currently selected list item
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -720,7 +727,9 @@ The currently selected list item
   
   
   <a id="Terminal_Gui_ComboBox_OnLeave_" data-uid="Terminal.Gui.ComboBox.OnLeave*"></a>
   <a id="Terminal_Gui_ComboBox_OnLeave_" data-uid="Terminal.Gui.ComboBox.OnLeave*"></a>
   <h4 id="Terminal_Gui_ComboBox_OnLeave_Terminal_Gui_View_" data-uid="Terminal.Gui.ComboBox.OnLeave(Terminal.Gui.View)">OnLeave(View)</h4>
   <h4 id="Terminal_Gui_ComboBox_OnLeave_Terminal_Gui_View_" data-uid="Terminal.Gui.ComboBox.OnLeave(Terminal.Gui.View)">OnLeave(View)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a view loses focus.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -739,7 +748,7 @@ The currently selected list item
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><span class="parametername">view</span></td>
         <td><span class="parametername">view</span></td>
-        <td></td>
+        <td>The view that is getting focus.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -754,7 +763,7 @@ The currently selected list item
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -818,7 +827,10 @@ Invokes the SelectedChanged event if it is defined.
   
   
   <a id="Terminal_Gui_ComboBox_ProcessKey_" data-uid="Terminal.Gui.ComboBox.ProcessKey*"></a>
   <a id="Terminal_Gui_ComboBox_ProcessKey_" data-uid="Terminal.Gui.ComboBox.ProcessKey*"></a>
   <h4 id="Terminal_Gui_ComboBox_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.ComboBox.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_ComboBox_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.ComboBox.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -858,11 +870,32 @@ Invokes the SelectedChanged event if it is defined.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_ComboBox_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_ComboBox_Redraw_" data-uid="Terminal.Gui.ComboBox.Redraw*"></a>
   <a id="Terminal_Gui_ComboBox_Redraw_" data-uid="Terminal.Gui.ComboBox.Redraw*"></a>
   <h4 id="Terminal_Gui_ComboBox_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ComboBox.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_ComboBox_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ComboBox.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -881,12 +914,26 @@ Invokes the SelectedChanged event if it is defined.
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">bounds</span></td>
         <td><span class="parametername">bounds</span></td>
-        <td></td>
+        <td>The bounds (view-relative region) to redraw.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_ComboBox_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_ComboBox_SetSource_" data-uid="Terminal.Gui.ComboBox.SetSource*"></a>
   <a id="Terminal_Gui_ComboBox_SetSource_" data-uid="Terminal.Gui.ComboBox.SetSource*"></a>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.ConsoleDriver.DiagnosticFlags.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Enum ConsoleDriver.DiagnosticFlags
     <meta name="title" content="Enum ConsoleDriver.DiagnosticFlags
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.ConsoleDriver.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ConsoleDriver
     <meta name="title" content="Class ConsoleDriver
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 17 - 5
docs/api/Terminal.Gui/Terminal.Gui.DateField.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class DateField
     <meta name="title" content="Class DateField
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -330,7 +330,7 @@ Simple Date editing <a class="xref" href="Terminal.Gui.View.html">View</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -407,6 +407,9 @@ Simple Date editing <a class="xref" href="Terminal.Gui.View.html">View</a>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -623,7 +626,9 @@ Get or set the date format for the widget.
   
   
   <a id="Terminal_Gui_DateField_MouseEvent_" data-uid="Terminal.Gui.DateField.MouseEvent*"></a>
   <a id="Terminal_Gui_DateField_MouseEvent_" data-uid="Terminal.Gui.DateField.MouseEvent*"></a>
   <h4 id="Terminal_Gui_DateField_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.DateField.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_DateField_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.DateField.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -657,7 +662,7 @@ Get or set the date format for the widget.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -696,7 +701,9 @@ Event firing method for the <a class="xref" href="Terminal.Gui.DateField.html#Te
   
   
   <a id="Terminal_Gui_DateField_ProcessKey_" data-uid="Terminal.Gui.DateField.ProcessKey*"></a>
   <a id="Terminal_Gui_DateField_ProcessKey_" data-uid="Terminal.Gui.DateField.ProcessKey*"></a>
   <h4 id="Terminal_Gui_DateField_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.DateField.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_DateField_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.DateField.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Processes key presses for the <a class="xref" href="Terminal.Gui.TextField.html">TextField</a>.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -736,6 +743,11 @@ Event firing method for the <a class="xref" href="Terminal.Gui.DateField.html#Te
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.TextField.html#Terminal_Gui_TextField_ProcessKey_Terminal_Gui_KeyEvent_">TextField.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.TextField.html#Terminal_Gui_TextField_ProcessKey_Terminal_Gui_KeyEvent_">TextField.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_DateField_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+The <a class="xref" href="Terminal.Gui.TextField.html">TextField</a> control responds to the following keys:
+<table><thead><tr><th>Keys</th><th>Function</th></tr></thead><tbody><tr><td><a class="xref" href="Terminal.Gui.Key.html#Terminal_Gui_Key_Delete">Delete</a>, <a class="xref" href="Terminal.Gui.Key.html#Terminal_Gui_Key_Backspace">Backspace</a></td><td>Deletes the character before cursor.</td></tr></tbody></table>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.DateTimeEventArgs-1.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class DateTimeEventArgs&lt;T&gt;
     <meta name="title" content="Class DateTimeEventArgs&lt;T&gt;
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 29 - 4
docs/api/Terminal.Gui/Terminal.Gui.Dialog.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Dialog
     <meta name="title" content="Class Dialog
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -333,7 +333,7 @@ or more <a class="xref" href="Terminal.Gui.Button.html">Button</a>s. It defaults
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -401,6 +401,9 @@ or more <a class="xref" href="Terminal.Gui.Button.html">Button</a>s. It defaults
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -557,7 +560,7 @@ After initialzation use <code>X</code>, <code>Y</code>, <code>Width</code>, and
   <a id="Terminal_Gui_Dialog_AddButton_" data-uid="Terminal.Gui.Dialog.AddButton*"></a>
   <a id="Terminal_Gui_Dialog_AddButton_" data-uid="Terminal.Gui.Dialog.AddButton*"></a>
   <h4 id="Terminal_Gui_Dialog_AddButton_Terminal_Gui_Button_" data-uid="Terminal.Gui.Dialog.AddButton(Terminal.Gui.Button)">AddButton(Button)</h4>
   <h4 id="Terminal_Gui_Dialog_AddButton_Terminal_Gui_Button_" data-uid="Terminal.Gui.Dialog.AddButton(Terminal.Gui.Button)">AddButton(Button)</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
-Adds a <a class="xref" href="Terminal.Gui.Button.html">Button</a> to the <a class="xref" href="Terminal.Gui.Dialog.html">Dialog</a>, its layout will be controled by the <a class="xref" href="Terminal.Gui.Dialog.html">Dialog</a>
+Adds a <a class="xref" href="Terminal.Gui.Button.html">Button</a> to the <a class="xref" href="Terminal.Gui.Dialog.html">Dialog</a>, its layout will be controlled by the <a class="xref" href="Terminal.Gui.Dialog.html">Dialog</a>
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
@@ -585,7 +588,10 @@ Adds a <a class="xref" href="Terminal.Gui.Button.html">Button</a> to the <a clas
   
   
   <a id="Terminal_Gui_Dialog_ProcessKey_" data-uid="Terminal.Gui.Dialog.ProcessKey*"></a>
   <a id="Terminal_Gui_Dialog_ProcessKey_" data-uid="Terminal.Gui.Dialog.ProcessKey*"></a>
   <h4 id="Terminal_Gui_Dialog_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Dialog.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_Dialog_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.Dialog.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -625,6 +631,25 @@ Adds a <a class="xref" href="Terminal.Gui.Button.html">Button</a> to the <a clas
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.Toplevel.html#Terminal_Gui_Toplevel_ProcessKey_Terminal_Gui_KeyEvent_">Toplevel.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.Toplevel.html#Terminal_Gui_Toplevel_ProcessKey_Terminal_Gui_KeyEvent_">Toplevel.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_Dialog_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 2 - 2
docs/api/Terminal.Gui/Terminal.Gui.Dim.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Dim
     <meta name="title" content="Class Dim
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -124,7 +124,7 @@ Dim properties of a <a class="xref" href="Terminal.Gui.View.html">View</a> to co
 <p>
 <p>
   These can be used to set the absolute position, when merely assigning an
   These can be used to set the absolute position, when merely assigning an
   integer value (via the implicit integer to Pos conversion), and they can be combined
   integer value (via the implicit integer to Pos conversion), and they can be combined
-  to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
+  to produce more useful layouts, like: Pos.Center - 3, which would shift the position
   of the <a class="xref" href="Terminal.Gui.View.html">View</a> 3 characters to the left after centering for example.
   of the <a class="xref" href="Terminal.Gui.View.html">View</a> 3 characters to the left after centering for example.
 </p>
 </p>
 </div>
 </div>

+ 155 - 0
docs/api/Terminal.Gui/Terminal.Gui.DisplayModeLayout.html

@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<!--[if IE]><![endif]-->
+<html>
+  
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <title>Enum DisplayModeLayout
+   </title>
+    <meta name="viewport" content="width=device-width">
+    <meta name="title" content="Enum DisplayModeLayout
+   ">
+    <meta name="generator" content="docfx 2.56.2.0">
+    
+    <link rel="shortcut icon" href="../../favicon.ico">
+    <link rel="stylesheet" href="../../styles/docfx.vendor.css">
+    <link rel="stylesheet" href="../../styles/docfx.css">
+    <link rel="stylesheet" href="../../styles/main.css">
+    <meta property="docfx:navrel" content="../../toc.html">
+    <meta property="docfx:tocrel" content="toc.html">
+    
+    <meta property="docfx:rel" content="../../">
+    
+  </head>
+  <body data-spy="scroll" data-target="#affix" data-offset="120">
+    <div id="wrapper">
+      <header>
+        
+        <nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
+          <div class="container">
+            <div class="navbar-header">
+              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
+                <span class="sr-only">Toggle navigation</span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+              </button>
+              
+              <a class="navbar-brand" href="../../index.html">
+                <img id="logo" class="svg" src="../../images/logo48.png" alt="">
+              </a>
+            </div>
+            <div class="collapse navbar-collapse" id="navbar">
+              <form class="navbar-form navbar-right" role="search" id="search">
+                <div class="form-group">
+                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
+                </div>
+              </form>
+            </div>
+          </div>
+        </nav>
+        
+        <div class="subnav navbar navbar-default">
+          <div class="container hide-when-search" id="breadcrumb">
+            <ul class="breadcrumb">
+              <li></li>
+            </ul>
+          </div>
+        </div>
+      </header>
+      <div class="container body-content">
+        
+        <div id="search-results">
+          <div class="search-list"></div>
+          <div class="sr-items">
+            <p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
+          </div>
+          <ul id="pagination"></ul>
+        </div>
+      </div>
+      <div role="main" class="container body-content hide-when-search">
+        
+        <div class="sidenav hide-when-search">
+          <a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
+          <div class="sidetoggle collapse" id="sidetoggle">
+            <div id="sidetoc"></div>
+          </div>
+        </div>
+        <div class="article row grid-right">
+          <div class="col-md-10">
+            <article class="content wrap" id="_content" data-uid="Terminal.Gui.DisplayModeLayout">
+  
+  
+  <h1 id="Terminal_Gui_DisplayModeLayout" data-uid="Terminal.Gui.DisplayModeLayout" class="text-break">Enum DisplayModeLayout
+  </h1>
+  <div class="markdown level0 summary">
+Used for choose the display mode of this <a class="xref" href="Terminal.Gui.RadioGroup.html">RadioGroup</a>
+</div>
+  <div class="markdown level0 conceptual"></div>
+  <h6><strong>Namespace</strong>: <a class="xref" href="Terminal.Gui.html">Terminal.Gui</a></h6>
+  <h6><strong>Assembly</strong>: Terminal.Gui.dll</h6>
+  <h5 id="Terminal_Gui_DisplayModeLayout_syntax">Syntax</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public enum DisplayModeLayout</code></pre>
+  </div>
+  <h3 id="fields">Fields
+  </h3>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    <thead>
+    <tbody>
+      <tr>
+        <td id="Terminal_Gui_DisplayModeLayout_Horizontal">Horizontal</td>
+        <td>
+Horizontal mode display.
+</td>
+      </tr>
+      <tr>
+        <td id="Terminal_Gui_DisplayModeLayout_Vertical">Vertical</td>
+        <td>
+Vertical mode display. It&apos;s the default.
+</td>
+      </tr>
+    </tbody>
+  </thead></thead></table>
+</article>
+          </div>
+          
+          <div class="hidden-sm col-md-2" role="complementary">
+            <div class="sideaffix">
+              <div class="contribution">
+                <ul class="nav">
+                </ul>
+              </div>
+              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
+              <!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
+              </nav>
+            </div>
+          </div>
+        </div>
+      </div>
+      
+      <footer>
+        <div class="grad-bottom"></div>
+        <div class="footer">
+          <div class="container">
+            <span class="pull-right">
+              <a href="#top">Back to top</a>
+            </span>
+            
+            <span>Generated by <strong>DocFX</strong></span>
+          </div>
+        </div>
+      </footer>
+    </div>
+    
+    <script type="text/javascript" src="../../styles/docfx.vendor.js"></script>
+    <script type="text/javascript" src="../../styles/docfx.js"></script>
+    <script type="text/javascript" src="../../styles/main.js"></script>
+  </body>
+</html>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.FakeConsole.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class FakeConsole
     <meta name="title" content="Class FakeConsole
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.FakeDriver.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class FakeDriver
     <meta name="title" content="Class FakeDriver
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 9 - 3
docs/api/Terminal.Gui/Terminal.Gui.FileDialog.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class FileDialog
     <meta name="title" content="Class FileDialog
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -337,7 +337,7 @@ Base class for the <a class="xref" href="Terminal.Gui.OpenDialog.html">OpenDialo
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -405,6 +405,9 @@ Base class for the <a class="xref" href="Terminal.Gui.OpenDialog.html">OpenDialo
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -769,7 +772,10 @@ Gets or sets the prompt label for the <a class="xref" href="Terminal.Gui.Button.
   
   
   <a id="Terminal_Gui_FileDialog_WillPresent_" data-uid="Terminal.Gui.FileDialog.WillPresent*"></a>
   <a id="Terminal_Gui_FileDialog_WillPresent_" data-uid="Terminal.Gui.FileDialog.WillPresent*"></a>
   <h4 id="Terminal_Gui_FileDialog_WillPresent" data-uid="Terminal.Gui.FileDialog.WillPresent">WillPresent()</h4>
   <h4 id="Terminal_Gui_FileDialog_WillPresent" data-uid="Terminal.Gui.FileDialog.WillPresent">WillPresent()</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Invoked by <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Begin_Terminal_Gui_Toplevel_">Begin(Toplevel)</a> as part of the <a class="xref" href="Terminal.Gui.Application.html#Terminal_Gui_Application_Run_Terminal_Gui_Toplevel_">Run(Toplevel)</a> after
+the views have been laid out, and before the views are drawn for the first time.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">

+ 23 - 4
docs/api/Terminal.Gui/Terminal.Gui.FrameView.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class FrameView
     <meta name="title" content="Class FrameView
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -279,7 +279,7 @@ a GroupBox in Windows.
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -356,6 +356,9 @@ a GroupBox in Windows.
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
     </div>
     </div>
@@ -627,7 +630,9 @@ Add the specified <a class="xref" href="Terminal.Gui.View.html">View</a> to this
   
   
   <a id="Terminal_Gui_FrameView_Redraw_" data-uid="Terminal.Gui.FrameView.Redraw*"></a>
   <a id="Terminal_Gui_FrameView_Redraw_" data-uid="Terminal.Gui.FrameView.Redraw*"></a>
   <h4 id="Terminal_Gui_FrameView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.FrameView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_FrameView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.FrameView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -646,12 +651,26 @@ Add the specified <a class="xref" href="Terminal.Gui.View.html">View</a> to this
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">bounds</span></td>
         <td><span class="parametername">bounds</span></td>
-        <td></td>
+        <td>The bounds (view-relative region) to redraw.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_FrameView_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_FrameView_Remove_" data-uid="Terminal.Gui.FrameView.Remove*"></a>
   <a id="Terminal_Gui_FrameView_Remove_" data-uid="Terminal.Gui.FrameView.Remove*"></a>

+ 65 - 10
docs/api/Terminal.Gui/Terminal.Gui.HexView.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class HexView
     <meta name="title" content="Class HexView
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -281,7 +281,7 @@ An hex viewer and editor <a class="xref" href="Terminal.Gui.View.html">View</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -361,6 +361,9 @@ An hex viewer and editor <a class="xref" href="Terminal.Gui.View.html">View</a>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
     </div>
     </div>
@@ -396,7 +399,7 @@ An hex viewer and editor <a class="xref" href="Terminal.Gui.View.html">View</a>
   <div class="markdown level0 remarks">
   <div class="markdown level0 remarks">
 <p>
 <p>
 <a class="xref" href="Terminal.Gui.HexView.html">HexView</a> provides a hex editor on top of a seekable <span class="xref">System.IO.Stream</span> with the left side showing an hex
 <a class="xref" href="Terminal.Gui.HexView.html">HexView</a> provides a hex editor on top of a seekable <span class="xref">System.IO.Stream</span> with the left side showing an hex
-dump of the values in the <span class="xref">System.IO.Stream</span> and the right side showing the contents (filterd to 
+dump of the values in the <span class="xref">System.IO.Stream</span> and the right side showing the contents (filtered to 
 non-control sequence ASCII characters).    
 non-control sequence ASCII characters).    
 </p>
 </p>
 <p>
 <p>
@@ -546,7 +549,9 @@ Each Key indicates an offset where an edit was made and the Value is the changed
   
   
   <a id="Terminal_Gui_HexView_Frame_" data-uid="Terminal.Gui.HexView.Frame*"></a>
   <a id="Terminal_Gui_HexView_Frame_" data-uid="Terminal.Gui.HexView.Frame*"></a>
   <h4 id="Terminal_Gui_HexView_Frame" data-uid="Terminal.Gui.HexView.Frame">Frame</h4>
   <h4 id="Terminal_Gui_HexView_Frame" data-uid="Terminal.Gui.HexView.Frame">Frame</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Gets or sets the frame for the view. The frame is relative to the view&apos;s container (<a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SuperView">SuperView</a>).
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -563,12 +568,22 @@ Each Key indicates an offset where an edit was made and the Value is the changed
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
-        <td></td>
+        <td>The frame.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">View.Frame</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">View.Frame</a></div>
+  <h5 id="Terminal_Gui_HexView_Frame_remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Change the Frame when using the <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Absolute">Absolute</a> layout style to move or resize views. 
+</p>
+<p>
+   Altering the Frame of a view will trigger the redrawing of the
+   view as well as the redrawing of the affected regions of the <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SuperView">SuperView</a>.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_HexView_Source_" data-uid="Terminal.Gui.HexView.Source*"></a>
   <a id="Terminal_Gui_HexView_Source_" data-uid="Terminal.Gui.HexView.Source*"></a>
@@ -615,7 +630,9 @@ contents of the <a class="xref" href="Terminal.Gui.HexView.html#Terminal_Gui_Hex
   
   
   <a id="Terminal_Gui_HexView_PositionCursor_" data-uid="Terminal.Gui.HexView.PositionCursor*"></a>
   <a id="Terminal_Gui_HexView_PositionCursor_" data-uid="Terminal.Gui.HexView.PositionCursor*"></a>
   <h4 id="Terminal_Gui_HexView_PositionCursor" data-uid="Terminal.Gui.HexView.PositionCursor">PositionCursor()</h4>
   <h4 id="Terminal_Gui_HexView_PositionCursor" data-uid="Terminal.Gui.HexView.PositionCursor">PositionCursor()</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Positions the cursor in the right position based on the currently focused view in the chain.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -627,7 +644,10 @@ contents of the <a class="xref" href="Terminal.Gui.HexView.html#Terminal_Gui_Hex
   
   
   <a id="Terminal_Gui_HexView_ProcessKey_" data-uid="Terminal.Gui.HexView.ProcessKey*"></a>
   <a id="Terminal_Gui_HexView_ProcessKey_" data-uid="Terminal.Gui.HexView.ProcessKey*"></a>
   <h4 id="Terminal_Gui_HexView_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.HexView.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_HexView_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.HexView.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -646,7 +666,7 @@ contents of the <a class="xref" href="Terminal.Gui.HexView.html#Terminal_Gui_Hex
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.KeyEvent.html">KeyEvent</a></td>
         <td><a class="xref" href="Terminal.Gui.KeyEvent.html">KeyEvent</a></td>
         <td><span class="parametername">keyEvent</span></td>
         <td><span class="parametername">keyEvent</span></td>
-        <td></td>
+        <td>Contains the details about the key that produced the event.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -667,11 +687,32 @@ contents of the <a class="xref" href="Terminal.Gui.HexView.html#Terminal_Gui_Hex
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_HexView_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_HexView_Redraw_" data-uid="Terminal.Gui.HexView.Redraw*"></a>
   <a id="Terminal_Gui_HexView_Redraw_" data-uid="Terminal.Gui.HexView.Redraw*"></a>
   <h4 id="Terminal_Gui_HexView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.HexView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_HexView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.HexView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -690,12 +731,26 @@ contents of the <a class="xref" href="Terminal.Gui.HexView.html#Terminal_Gui_Hex
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">bounds</span></td>
         <td><span class="parametername">bounds</span></td>
-        <td></td>
+        <td>The bounds (view-relative region) to redraw.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_HexView_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.IListDataSource.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Interface IListDataSource
     <meta name="title" content="Interface IListDataSource
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.IMainLoopDriver.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Interface IMainLoopDriver
     <meta name="title" content="Interface IMainLoopDriver
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Key.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Enum Key
     <meta name="title" content="Enum Key
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.KeyEvent.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class KeyEvent
     <meta name="title" content="Class KeyEvent
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.KeyModifiers.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class KeyModifiers
     <meta name="title" content="Class KeyModifiers
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 64 - 14
docs/api/Terminal.Gui/Terminal.Gui.Label.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Label
     <meta name="title" content="Class Label
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -290,7 +290,7 @@ The Label <a class="xref" href="Terminal.Gui.View.html">View</a> displays a stri
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -370,6 +370,9 @@ The Label <a class="xref" href="Terminal.Gui.View.html">View</a> displays a stri
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
     </div>
     </div>
@@ -403,7 +406,7 @@ The Label <a class="xref" href="Terminal.Gui.View.html">View</a> displays a stri
   </div>
   </div>
   <h5 id="Terminal_Gui_Label_remarks"><strong>Remarks</strong></h5>
   <h5 id="Terminal_Gui_Label_remarks"><strong>Remarks</strong></h5>
   <div class="markdown level0 remarks">
   <div class="markdown level0 remarks">
-The <a class="xref" href="Terminal.Gui.Label.html">Label</a> view is functionality identical to <a class="xref" href="Terminal.Gui.View.html">View</a> and is included for API backwards compatibilty.
+The <a class="xref" href="Terminal.Gui.Label.html">Label</a> view is functionality identical to <a class="xref" href="Terminal.Gui.View.html">View</a> and is included for API backwards compatibility.
 </div>
 </div>
   <h3 id="constructors">Constructors
   <h3 id="constructors">Constructors
   </h3>
   </h3>
@@ -421,7 +424,9 @@ The <a class="xref" href="Terminal.Gui.Label.html">Label</a> view is functionali
   
   
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <h4 id="Terminal_Gui_Label__ctor_NStack_ustring_" data-uid="Terminal.Gui.Label.#ctor(NStack.ustring)">Label(ustring)</h4>
   <h4 id="Terminal_Gui_Label__ctor_NStack_ustring_" data-uid="Terminal.Gui.Label.#ctor(NStack.ustring)">Label(ustring)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Initializes a new instance of <a class="xref" href="Terminal.Gui.View.html">View</a> using <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Computed">Computed</a> layout.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -440,15 +445,28 @@ The <a class="xref" href="Terminal.Gui.Label.html">Label</a> view is functionali
       <tr>
       <tr>
         <td><span class="xref">NStack.ustring</span></td>
         <td><span class="xref">NStack.ustring</span></td>
         <td><span class="parametername">text</span></td>
         <td><span class="parametername">text</span></td>
-        <td></td>
+        <td>text to initialize the <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Text">Text</a> property with.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
+  <h5 id="Terminal_Gui_Label__ctor_NStack_ustring__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  The <a class="xref" href="Terminal.Gui.View.html">View</a> will be created using <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Computed">Computed</a>
+  coordinates with the given string. The initial size (<a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> will be 
+  adjusted to fit the contents of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Text">Text</a>, including newlines (&apos;\n&apos;) for multiple lines. 
+</p>
+<p>
+  If <code>Height</code> is greater than one, word wrapping is provided.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <h4 id="Terminal_Gui_Label__ctor_System_Int32_System_Int32_NStack_ustring_" data-uid="Terminal.Gui.Label.#ctor(System.Int32,System.Int32,NStack.ustring)">Label(Int32, Int32, ustring)</h4>
   <h4 id="Terminal_Gui_Label__ctor_System_Int32_System_Int32_NStack_ustring_" data-uid="Terminal.Gui.Label.#ctor(System.Int32,System.Int32,NStack.ustring)">Label(Int32, Int32, ustring)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Initializes a new instance of <a class="xref" href="Terminal.Gui.View.html">View</a> using <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Absolute">Absolute</a> layout.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -467,25 +485,39 @@ The <a class="xref" href="Terminal.Gui.Label.html">Label</a> view is functionali
       <tr>
       <tr>
         <td><span class="xref">System.Int32</span></td>
         <td><span class="xref">System.Int32</span></td>
         <td><span class="parametername">x</span></td>
         <td><span class="parametername">x</span></td>
-        <td></td>
+        <td>column to locate the Label.</td>
       </tr>
       </tr>
       <tr>
       <tr>
         <td><span class="xref">System.Int32</span></td>
         <td><span class="xref">System.Int32</span></td>
         <td><span class="parametername">y</span></td>
         <td><span class="parametername">y</span></td>
-        <td></td>
+        <td>row to locate the Label.</td>
       </tr>
       </tr>
       <tr>
       <tr>
         <td><span class="xref">NStack.ustring</span></td>
         <td><span class="xref">NStack.ustring</span></td>
         <td><span class="parametername">text</span></td>
         <td><span class="parametername">text</span></td>
-        <td></td>
+        <td>text to initialize the <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Text">Text</a> property with.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
+  <h5 id="Terminal_Gui_Label__ctor_System_Int32_System_Int32_NStack_ustring__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  The <a class="xref" href="Terminal.Gui.View.html">View</a> will be created at the given
+  coordinates with the given string. The size (<a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> will be 
+  adjusted to fit the contents of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Text">Text</a>, including newlines (&apos;\n&apos;) for multiple lines. 
+</p>
+<p>
+  No line wrapping is provided.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <h4 id="Terminal_Gui_Label__ctor_Terminal_Gui_Rect_" data-uid="Terminal.Gui.Label.#ctor(Terminal.Gui.Rect)">Label(Rect)</h4>
   <h4 id="Terminal_Gui_Label__ctor_Terminal_Gui_Rect_" data-uid="Terminal.Gui.Label.#ctor(Terminal.Gui.Rect)">Label(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Initializes a new instance of a <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Absolute">Absolute</a> <a class="xref" href="Terminal.Gui.View.html">View</a> class with the absolute
+dimensions specified in the <code>frame</code> parameter. 
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -504,15 +536,22 @@ The <a class="xref" href="Terminal.Gui.Label.html">Label</a> view is functionali
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">frame</span></td>
         <td><span class="parametername">frame</span></td>
-        <td></td>
+        <td>The region covered by this view.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
+  <h5 id="Terminal_Gui_Label__ctor_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+This constructor intitalize a View with a <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_LayoutStyle">LayoutStyle</a> of <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Absolute">Absolute</a>. Use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View__ctor">View()</a> to 
+initialize a View with  <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_LayoutStyle">LayoutStyle</a> of <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Computed">Computed</a> 
+</div>
   
   
   
   
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <a id="Terminal_Gui_Label__ctor_" data-uid="Terminal.Gui.Label.#ctor*"></a>
   <h4 id="Terminal_Gui_Label__ctor_Terminal_Gui_Rect_NStack_ustring_" data-uid="Terminal.Gui.Label.#ctor(Terminal.Gui.Rect,NStack.ustring)">Label(Rect, ustring)</h4>
   <h4 id="Terminal_Gui_Label__ctor_Terminal_Gui_Rect_NStack_ustring_" data-uid="Terminal.Gui.Label.#ctor(Terminal.Gui.Rect,NStack.ustring)">Label(Rect, ustring)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Initializes a new instance of <a class="xref" href="Terminal.Gui.View.html">View</a> using <a class="xref" href="Terminal.Gui.LayoutStyle.html#Terminal_Gui_LayoutStyle_Absolute">Absolute</a> layout.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -531,15 +570,26 @@ The <a class="xref" href="Terminal.Gui.Label.html">Label</a> view is functionali
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">rect</span></td>
         <td><span class="parametername">rect</span></td>
-        <td></td>
+        <td>Location.</td>
       </tr>
       </tr>
       <tr>
       <tr>
         <td><span class="xref">NStack.ustring</span></td>
         <td><span class="xref">NStack.ustring</span></td>
         <td><span class="parametername">text</span></td>
         <td><span class="parametername">text</span></td>
-        <td></td>
+        <td>text to initialize the <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Text">Text</a> property with.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
+  <h5 id="Terminal_Gui_Label__ctor_Terminal_Gui_Rect_NStack_ustring__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  The <a class="xref" href="Terminal.Gui.View.html">View</a> will be created at the given
+  coordinates with the given string. The initial size (<a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> will be 
+  adjusted to fit the contents of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Text">Text</a>, including newlines (&apos;\n&apos;) for multiple lines. 
+</p>
+<p>
+  If <code>rect.Height</code> is greater than one, word wrapping is provided.
+</p>
+</div>
   <h3 id="fields">Fields
   <h3 id="fields">Fields
   </h3>
   </h3>
   
   

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.LayoutStyle.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Enum LayoutStyle
     <meta name="title" content="Enum LayoutStyle
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 72 - 23
docs/api/Terminal.Gui/Terminal.Gui.ListView.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ListView
     <meta name="title" content="Class ListView
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -256,9 +256,6 @@ ListView <a class="xref" href="Terminal.Gui.View.html">View</a> renders a scroll
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnRemoved_Terminal_Gui_View_">View.OnRemoved(View)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnRemoved_Terminal_Gui_View_">View.OnRemoved(View)</a>
     </div>
     </div>
-    <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnLeave_Terminal_Gui_View_">View.OnLeave(View)</a>
-    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Focused">View.Focused</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Focused">View.Focused</a>
     </div>
     </div>
@@ -281,7 +278,7 @@ ListView <a class="xref" href="Terminal.Gui.View.html">View</a> renders a scroll
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -343,6 +340,9 @@ ListView <a class="xref" href="Terminal.Gui.View.html">View</a> renders a scroll
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ToString">View.ToString()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ToString">View.ToString()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseEnter_Terminal_Gui_MouseEvent_">View.OnMouseEnter(MouseEvent)</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseLeave_Terminal_Gui_MouseEvent_">View.OnMouseLeave(MouseEvent)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseLeave_Terminal_Gui_MouseEvent_">View.OnMouseLeave(MouseEvent)</a>
     </div>
     </div>
@@ -358,6 +358,9 @@ ListView <a class="xref" href="Terminal.Gui.View.html">View</a> renders a scroll
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -819,7 +822,9 @@ Marks an unmarked row.
   
   
   <a id="Terminal_Gui_ListView_MouseEvent_" data-uid="Terminal.Gui.ListView.MouseEvent*"></a>
   <a id="Terminal_Gui_ListView_MouseEvent_" data-uid="Terminal.Gui.ListView.MouseEvent*"></a>
   <h4 id="Terminal_Gui_ListView_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ListView.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_ListView_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ListView.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -853,7 +858,7 @@ Marks an unmarked row.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -1025,7 +1030,9 @@ Moves the selected item index to the previous row.
   
   
   <a id="Terminal_Gui_ListView_OnEnter_" data-uid="Terminal.Gui.ListView.OnEnter*"></a>
   <a id="Terminal_Gui_ListView_OnEnter_" data-uid="Terminal.Gui.ListView.OnEnter*"></a>
   <h4 id="Terminal_Gui_ListView_OnEnter_Terminal_Gui_View_" data-uid="Terminal.Gui.ListView.OnEnter(Terminal.Gui.View)">OnEnter(View)</h4>
   <h4 id="Terminal_Gui_ListView_OnEnter_Terminal_Gui_View_" data-uid="Terminal.Gui.ListView.OnEnter(Terminal.Gui.View)">OnEnter(View)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a view gets focus.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -1044,7 +1051,7 @@ Moves the selected item index to the previous row.
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><span class="parametername">view</span></td>
         <td><span class="parametername">view</span></td>
-        <td></td>
+        <td>The view that is losing focus.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -1059,7 +1066,7 @@ Moves the selected item index to the previous row.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -1067,13 +1074,15 @@ Moves the selected item index to the previous row.
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnEnter_Terminal_Gui_View_">View.OnEnter(View)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnEnter_Terminal_Gui_View_">View.OnEnter(View)</a></div>
   
   
   
   
-  <a id="Terminal_Gui_ListView_OnMouseEnter_" data-uid="Terminal.Gui.ListView.OnMouseEnter*"></a>
-  <h4 id="Terminal_Gui_ListView_OnMouseEnter_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ListView.OnMouseEnter(Terminal.Gui.MouseEvent)">OnMouseEnter(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <a id="Terminal_Gui_ListView_OnLeave_" data-uid="Terminal.Gui.ListView.OnLeave*"></a>
+  <h4 id="Terminal_Gui_ListView_OnLeave_Terminal_Gui_View_" data-uid="Terminal.Gui.ListView.OnLeave(Terminal.Gui.View)">OnLeave(View)</h4>
+  <div class="markdown level1 summary">
+Method invoked when a view loses focus.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public override bool OnMouseEnter(MouseEvent mouseEvent)</code></pre>
+    <pre><code class="lang-csharp hljs">public override bool OnLeave(View view)</code></pre>
   </div>
   </div>
   <h5 class="parameters">Parameters</h5>
   <h5 class="parameters">Parameters</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -1086,9 +1095,9 @@ Moves the selected item index to the previous row.
     </thead>
     </thead>
     <tbody>
     <tbody>
       <tr>
       <tr>
-        <td><a class="xref" href="Terminal.Gui.MouseEvent.html">MouseEvent</a></td>
-        <td><span class="parametername">mouseEvent</span></td>
-        <td></td>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td>The view that is getting focus.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -1103,12 +1112,12 @@ Moves the selected item index to the previous row.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
-  <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnMouseEnter_Terminal_Gui_MouseEvent_">View.OnMouseEnter(MouseEvent)</a></div>
+  <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnLeave_Terminal_Gui_View_">View.OnLeave(View)</a></div>
   
   
   
   
   <a id="Terminal_Gui_ListView_OnOpenSelectedItem_" data-uid="Terminal.Gui.ListView.OnOpenSelectedItem*"></a>
   <a id="Terminal_Gui_ListView_OnOpenSelectedItem_" data-uid="Terminal.Gui.ListView.OnOpenSelectedItem*"></a>
@@ -1167,7 +1176,9 @@ Invokes the SelectedChanged event if it is defined.
   
   
   <a id="Terminal_Gui_ListView_PositionCursor_" data-uid="Terminal.Gui.ListView.PositionCursor*"></a>
   <a id="Terminal_Gui_ListView_PositionCursor_" data-uid="Terminal.Gui.ListView.PositionCursor*"></a>
   <h4 id="Terminal_Gui_ListView_PositionCursor" data-uid="Terminal.Gui.ListView.PositionCursor">PositionCursor()</h4>
   <h4 id="Terminal_Gui_ListView_PositionCursor" data-uid="Terminal.Gui.ListView.PositionCursor">PositionCursor()</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Positions the cursor in the right position based on the currently focused view in the chain.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -1179,7 +1190,10 @@ Invokes the SelectedChanged event if it is defined.
   
   
   <a id="Terminal_Gui_ListView_ProcessKey_" data-uid="Terminal.Gui.ListView.ProcessKey*"></a>
   <a id="Terminal_Gui_ListView_ProcessKey_" data-uid="Terminal.Gui.ListView.ProcessKey*"></a>
   <h4 id="Terminal_Gui_ListView_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.ListView.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_ListView_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.ListView.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -1219,11 +1233,32 @@ Invokes the SelectedChanged event if it is defined.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_ListView_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_ListView_Redraw_" data-uid="Terminal.Gui.ListView.Redraw*"></a>
   <a id="Terminal_Gui_ListView_Redraw_" data-uid="Terminal.Gui.ListView.Redraw*"></a>
   <h4 id="Terminal_Gui_ListView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ListView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_ListView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ListView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -1242,12 +1277,26 @@ Invokes the SelectedChanged event if it is defined.
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">bounds</span></td>
         <td><span class="parametername">bounds</span></td>
-        <td></td>
+        <td>The bounds (view-relative region) to redraw.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_ListView_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_ListView_SetSource_" data-uid="Terminal.Gui.ListView.SetSource*"></a>
   <a id="Terminal_Gui_ListView_SetSource_" data-uid="Terminal.Gui.ListView.SetSource*"></a>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.ListViewItemEventArgs.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ListViewItemEventArgs
     <meta name="title" content="Class ListViewItemEventArgs
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.ListWrapper.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ListWrapper
     <meta name="title" content="Class ListWrapper
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.MainLoop.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class MainLoop
     <meta name="title" content="Class MainLoop
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 82 - 14
docs/api/Terminal.Gui/Terminal.Gui.MenuBar.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class MenuBar
     <meta name="title" content="Class MenuBar
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -281,7 +281,7 @@ The MenuBar provides a menu for Terminal.Gui applications.
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -352,6 +352,9 @@ The MenuBar provides a menu for Terminal.Gui applications.
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -614,7 +617,9 @@ Closes the current Menu programatically, if open.
   
   
   <a id="Terminal_Gui_MenuBar_MouseEvent_" data-uid="Terminal.Gui.MenuBar.MouseEvent*"></a>
   <a id="Terminal_Gui_MenuBar_MouseEvent_" data-uid="Terminal.Gui.MenuBar.MouseEvent*"></a>
   <h4 id="Terminal_Gui_MenuBar_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.MenuBar.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_MenuBar_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.MenuBar.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -648,7 +653,7 @@ Closes the current Menu programatically, if open.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -677,7 +682,7 @@ Closes the current Menu programatically, if open.
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.KeyEvent.html">KeyEvent</a></td>
         <td><a class="xref" href="Terminal.Gui.KeyEvent.html">KeyEvent</a></td>
         <td><span class="parametername">keyEvent</span></td>
         <td><span class="parametername">keyEvent</span></td>
-        <td></td>
+        <td>Contains the details about the key that produced the event.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -721,7 +726,7 @@ Closes the current Menu programatically, if open.
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.KeyEvent.html">KeyEvent</a></td>
         <td><a class="xref" href="Terminal.Gui.KeyEvent.html">KeyEvent</a></td>
         <td><span class="parametername">keyEvent</span></td>
         <td><span class="parametername">keyEvent</span></td>
-        <td></td>
+        <td>Contains the details about the key that produced the event.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -746,7 +751,9 @@ Closes the current Menu programatically, if open.
   
   
   <a id="Terminal_Gui_MenuBar_OnLeave_" data-uid="Terminal.Gui.MenuBar.OnLeave*"></a>
   <a id="Terminal_Gui_MenuBar_OnLeave_" data-uid="Terminal.Gui.MenuBar.OnLeave*"></a>
   <h4 id="Terminal_Gui_MenuBar_OnLeave_Terminal_Gui_View_" data-uid="Terminal.Gui.MenuBar.OnLeave(Terminal.Gui.View)">OnLeave(View)</h4>
   <h4 id="Terminal_Gui_MenuBar_OnLeave_Terminal_Gui_View_" data-uid="Terminal.Gui.MenuBar.OnLeave(Terminal.Gui.View)">OnLeave(View)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a view loses focus.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -765,7 +772,7 @@ Closes the current Menu programatically, if open.
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
         <td><span class="parametername">view</span></td>
         <td><span class="parametername">view</span></td>
-        <td></td>
+        <td>The view that is getting focus.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -780,7 +787,7 @@ Closes the current Menu programatically, if open.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -826,7 +833,9 @@ Opens the current Menu programatically.
   
   
   <a id="Terminal_Gui_MenuBar_PositionCursor_" data-uid="Terminal.Gui.MenuBar.PositionCursor*"></a>
   <a id="Terminal_Gui_MenuBar_PositionCursor_" data-uid="Terminal.Gui.MenuBar.PositionCursor*"></a>
   <h4 id="Terminal_Gui_MenuBar_PositionCursor" data-uid="Terminal.Gui.MenuBar.PositionCursor">PositionCursor()</h4>
   <h4 id="Terminal_Gui_MenuBar_PositionCursor" data-uid="Terminal.Gui.MenuBar.PositionCursor">PositionCursor()</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Positions the cursor in the right position based on the currently focused view in the chain.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -838,7 +847,11 @@ Opens the current Menu programatically.
   
   
   <a id="Terminal_Gui_MenuBar_ProcessHotKey_" data-uid="Terminal.Gui.MenuBar.ProcessHotKey*"></a>
   <a id="Terminal_Gui_MenuBar_ProcessHotKey_" data-uid="Terminal.Gui.MenuBar.ProcessHotKey*"></a>
   <h4 id="Terminal_Gui_MenuBar_ProcessHotKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.MenuBar.ProcessHotKey(Terminal.Gui.KeyEvent)">ProcessHotKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_MenuBar_ProcessHotKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.MenuBar.ProcessHotKey(Terminal.Gui.KeyEvent)">ProcessHotKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+This method can be overwritten by view that
+want to provide accelerator functionality
+(Alt-key for example).
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -878,11 +891,31 @@ Opens the current Menu programatically.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessHotKey_Terminal_Gui_KeyEvent_">View.ProcessHotKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessHotKey_Terminal_Gui_KeyEvent_">View.ProcessHotKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_MenuBar_ProcessHotKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Before keys are sent to the subview on the
+  current view, all the views are
+  processed and the key is passed to the widgets
+  to allow some of them to process the keystroke
+  as a hot-key. </p>
+<p>
+   For example, if you implement a button that
+   has a hotkey ok &quot;o&quot;, you would catch the
+   combination Alt-o here.  If the event is
+   caught, you must return true to stop the
+   keystroke from being dispatched to other
+   views.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_MenuBar_ProcessKey_" data-uid="Terminal.Gui.MenuBar.ProcessKey*"></a>
   <a id="Terminal_Gui_MenuBar_ProcessKey_" data-uid="Terminal.Gui.MenuBar.ProcessKey*"></a>
   <h4 id="Terminal_Gui_MenuBar_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.MenuBar.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_MenuBar_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.MenuBar.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -922,11 +955,32 @@ Opens the current Menu programatically.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_MenuBar_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_MenuBar_Redraw_" data-uid="Terminal.Gui.MenuBar.Redraw*"></a>
   <a id="Terminal_Gui_MenuBar_Redraw_" data-uid="Terminal.Gui.MenuBar.Redraw*"></a>
   <h4 id="Terminal_Gui_MenuBar_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.MenuBar.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_MenuBar_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.MenuBar.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -945,12 +999,26 @@ Opens the current Menu programatically.
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">bounds</span></td>
         <td><span class="parametername">bounds</span></td>
-        <td></td>
+        <td>The bounds (view-relative region) to redraw.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_MenuBar_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 154 - 7
docs/api/Terminal.Gui/Terminal.Gui.MenuBarItem.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class MenuBarItem
     <meta name="title" content="Class MenuBarItem
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -122,6 +122,9 @@ A <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a> contains
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.MenuItem.html#Terminal_Gui_MenuItem_CheckType">MenuItem.CheckType</a>
       <a class="xref" href="Terminal.Gui.MenuItem.html#Terminal_Gui_MenuItem_CheckType">MenuItem.CheckType</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.MenuItem.html#Terminal_Gui_MenuItem_Parent">MenuItem.Parent</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.MenuItem.html#Terminal_Gui_MenuItem_GetMenuItem">MenuItem.GetMenuItem()</a>
       <a class="xref" href="Terminal.Gui.MenuItem.html#Terminal_Gui_MenuItem_GetMenuItem">MenuItem.GetMenuItem()</a>
     </div>
     </div>
@@ -173,14 +176,14 @@ Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarIt
   
   
   
   
   <a id="Terminal_Gui_MenuBarItem__ctor_" data-uid="Terminal.Gui.MenuBarItem.#ctor*"></a>
   <a id="Terminal_Gui_MenuBarItem__ctor_" data-uid="Terminal.Gui.MenuBarItem.#ctor*"></a>
-  <h4 id="Terminal_Gui_MenuBarItem__ctor_NStack_ustring_System_String_System_Action_System_Func_System_Boolean__" data-uid="Terminal.Gui.MenuBarItem.#ctor(NStack.ustring,System.String,System.Action,System.Func{System.Boolean})">MenuBarItem(ustring, String, Action, Func&lt;Boolean&gt;)</h4>
+  <h4 id="Terminal_Gui_MenuBarItem__ctor_NStack_ustring_NStack_ustring_System_Action_System_Func_System_Boolean__Terminal_Gui_MenuItem_" data-uid="Terminal.Gui.MenuBarItem.#ctor(NStack.ustring,NStack.ustring,System.Action,System.Func{System.Boolean},Terminal.Gui.MenuItem)">MenuBarItem(ustring, ustring, Action, Func&lt;Boolean&gt;, MenuItem)</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
 Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a> as a <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a>.
 Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a> as a <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a>.
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public MenuBarItem(ustring title, string help, Action action, Func&lt;bool&gt; canExecute = null)</code></pre>
+    <pre><code class="lang-csharp hljs">public MenuBarItem(ustring title, ustring help, Action action, Func&lt;bool&gt; canExecute = null, MenuItem parent = null)</code></pre>
   </div>
   </div>
   <h5 class="parameters">Parameters</h5>
   <h5 class="parameters">Parameters</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -198,7 +201,7 @@ Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarIt
         <td>Title for the menu item.</td>
         <td>Title for the menu item.</td>
       </tr>
       </tr>
       <tr>
       <tr>
-        <td><span class="xref">System.String</span></td>
+        <td><span class="xref">NStack.ustring</span></td>
         <td><span class="parametername">help</span></td>
         <td><span class="parametername">help</span></td>
         <td>Help text to display.</td>
         <td>Help text to display.</td>
       </tr>
       </tr>
@@ -210,21 +213,26 @@ Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarIt
       <tr>
       <tr>
         <td><span class="xref">System.Func</span>&lt;<span class="xref">System.Boolean</span>&gt;</td>
         <td><span class="xref">System.Func</span>&lt;<span class="xref">System.Boolean</span>&gt;</td>
         <td><span class="parametername">canExecute</span></td>
         <td><span class="parametername">canExecute</span></td>
-        <td>Function to determine if the action can currently be executred.</td>
+        <td>Function to determine if the action can currently be executed.</td>
+      </tr>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a></td>
+        <td><span class="parametername">parent</span></td>
+        <td>The parent <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a> of this if exist, otherwise is null.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   
   
   
   
   <a id="Terminal_Gui_MenuBarItem__ctor_" data-uid="Terminal.Gui.MenuBarItem.#ctor*"></a>
   <a id="Terminal_Gui_MenuBarItem__ctor_" data-uid="Terminal.Gui.MenuBarItem.#ctor*"></a>
-  <h4 id="Terminal_Gui_MenuBarItem__ctor_NStack_ustring_Terminal_Gui_MenuItem___" data-uid="Terminal.Gui.MenuBarItem.#ctor(NStack.ustring,Terminal.Gui.MenuItem[])">MenuBarItem(ustring, MenuItem[])</h4>
+  <h4 id="Terminal_Gui_MenuBarItem__ctor_NStack_ustring_Terminal_Gui_MenuItem___Terminal_Gui_MenuItem_" data-uid="Terminal.Gui.MenuBarItem.#ctor(NStack.ustring,Terminal.Gui.MenuItem[],Terminal.Gui.MenuItem)">MenuBarItem(ustring, MenuItem[], MenuItem)</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
 Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a>.
 Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a>.
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public MenuBarItem(ustring title, MenuItem[] children)</code></pre>
+    <pre><code class="lang-csharp hljs">public MenuBarItem(ustring title, MenuItem[] children, MenuItem parent = null)</code></pre>
   </div>
   </div>
   <h5 class="parameters">Parameters</h5>
   <h5 class="parameters">Parameters</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -246,6 +254,11 @@ Initializes a new <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarIt
         <td><span class="parametername">children</span></td>
         <td><span class="parametername">children</span></td>
         <td>The items in the current menu.</td>
         <td>The items in the current menu.</td>
       </tr>
       </tr>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a></td>
+        <td><span class="parametername">parent</span></td>
+        <td>The parent <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a> of this if exist, otherwise is null.</td>
+      </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   
   
@@ -306,6 +319,140 @@ Gets or sets an array of <a class="xref" href="Terminal.Gui.MenuItem.html">MenuI
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
+  <h3 id="methods">Methods
+  </h3>
+  
+  
+  <a id="Terminal_Gui_MenuBarItem_GetChildrenIndex_" data-uid="Terminal.Gui.MenuBarItem.GetChildrenIndex*"></a>
+  <h4 id="Terminal_Gui_MenuBarItem_GetChildrenIndex_Terminal_Gui_MenuItem_" data-uid="Terminal.Gui.MenuBarItem.GetChildrenIndex(Terminal.Gui.MenuItem)">GetChildrenIndex(MenuItem)</h4>
+  <div class="markdown level1 summary">
+Get the index of the <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a> parameter.
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int GetChildrenIndex(MenuItem children)</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a></td>
+        <td><span class="parametername">children</span></td>
+        <td></td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><span class="xref">System.Int32</span></td>
+        <td>Returns a value bigger than -1 if the <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a> is a child of this.</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
+  <a id="Terminal_Gui_MenuBarItem_IsSubMenuOf_" data-uid="Terminal.Gui.MenuBarItem.IsSubMenuOf*"></a>
+  <h4 id="Terminal_Gui_MenuBarItem_IsSubMenuOf_Terminal_Gui_MenuItem_" data-uid="Terminal.Gui.MenuBarItem.IsSubMenuOf(Terminal.Gui.MenuItem)">IsSubMenuOf(MenuItem)</h4>
+  <div class="markdown level1 summary">
+Check if the <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a> parameter is a child of this.
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool IsSubMenuOf(MenuItem menuItem)</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a></td>
+        <td><span class="parametername">menuItem</span></td>
+        <td></td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><span class="xref">System.Boolean</span></td>
+        <td>Returns <code>true</code> if it is a child of this. <code>false</code> otherwise.</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
+  <a id="Terminal_Gui_MenuBarItem_SubMenu_" data-uid="Terminal.Gui.MenuBarItem.SubMenu*"></a>
+  <h4 id="Terminal_Gui_MenuBarItem_SubMenu_Terminal_Gui_MenuItem_" data-uid="Terminal.Gui.MenuBarItem.SubMenu(Terminal.Gui.MenuItem)">SubMenu(MenuItem)</h4>
+  <div class="markdown level1 summary">
+Check if the children parameter is a <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a>.
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public MenuBarItem SubMenu(MenuItem children)</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a></td>
+        <td><span class="parametername">children</span></td>
+        <td></td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a></td>
+        <td>Returns a <a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a> or null otherwise.</td>
+      </tr>
+    </tbody>
+  </table>
 </article>
 </article>
           </div>
           </div>
           
           

+ 35 - 37
docs/api/Terminal.Gui/Terminal.Gui.MenuItem.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class MenuItem
     <meta name="title" content="Class MenuItem
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -140,14 +140,14 @@ Initializes a new instance of <a class="xref" href="Terminal.Gui.MenuItem.html">
   
   
   
   
   <a id="Terminal_Gui_MenuItem__ctor_" data-uid="Terminal.Gui.MenuItem.#ctor*"></a>
   <a id="Terminal_Gui_MenuItem__ctor_" data-uid="Terminal.Gui.MenuItem.#ctor*"></a>
-  <h4 id="Terminal_Gui_MenuItem__ctor_NStack_ustring_System_String_System_Action_System_Func_System_Boolean__" data-uid="Terminal.Gui.MenuItem.#ctor(NStack.ustring,System.String,System.Action,System.Func{System.Boolean})">MenuItem(ustring, String, Action, Func&lt;Boolean&gt;)</h4>
+  <h4 id="Terminal_Gui_MenuItem__ctor_NStack_ustring_NStack_ustring_System_Action_System_Func_System_Boolean__Terminal_Gui_MenuItem_" data-uid="Terminal.Gui.MenuItem.#ctor(NStack.ustring,NStack.ustring,System.Action,System.Func{System.Boolean},Terminal.Gui.MenuItem)">MenuItem(ustring, ustring, Action, Func&lt;Boolean&gt;, MenuItem)</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
 Initializes a new instance of <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a>.
 Initializes a new instance of <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a>.
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public MenuItem(ustring title, string help, Action action, Func&lt;bool&gt; canExecute = null)</code></pre>
+    <pre><code class="lang-csharp hljs">public MenuItem(ustring title, ustring help, Action action, Func&lt;bool&gt; canExecute = null, MenuItem parent = null)</code></pre>
   </div>
   </div>
   <h5 class="parameters">Parameters</h5>
   <h5 class="parameters">Parameters</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -165,7 +165,7 @@ Initializes a new instance of <a class="xref" href="Terminal.Gui.MenuItem.html">
         <td>Title for the menu item.</td>
         <td>Title for the menu item.</td>
       </tr>
       </tr>
       <tr>
       <tr>
-        <td><span class="xref">System.String</span></td>
+        <td><span class="xref">NStack.ustring</span></td>
         <td><span class="parametername">help</span></td>
         <td><span class="parametername">help</span></td>
         <td>Help text to display.</td>
         <td>Help text to display.</td>
       </tr>
       </tr>
@@ -177,41 +177,12 @@ Initializes a new instance of <a class="xref" href="Terminal.Gui.MenuItem.html">
       <tr>
       <tr>
         <td><span class="xref">System.Func</span>&lt;<span class="xref">System.Boolean</span>&gt;</td>
         <td><span class="xref">System.Func</span>&lt;<span class="xref">System.Boolean</span>&gt;</td>
         <td><span class="parametername">canExecute</span></td>
         <td><span class="parametername">canExecute</span></td>
-        <td>Function to determine if the action can currently be executred.</td>
-      </tr>
-    </tbody>
-  </table>
-  
-  
-  <a id="Terminal_Gui_MenuItem__ctor_" data-uid="Terminal.Gui.MenuItem.#ctor*"></a>
-  <h4 id="Terminal_Gui_MenuItem__ctor_NStack_ustring_Terminal_Gui_MenuBarItem_" data-uid="Terminal.Gui.MenuItem.#ctor(NStack.ustring,Terminal.Gui.MenuBarItem)">MenuItem(ustring, MenuBarItem)</h4>
-  <div class="markdown level1 summary">
-Initializes a new instance of <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a>
-</div>
-  <div class="markdown level1 conceptual"></div>
-  <h5 class="decalaration">Declaration</h5>
-  <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public MenuItem(ustring title, MenuBarItem subMenu)</code></pre>
-  </div>
-  <h5 class="parameters">Parameters</h5>
-  <table class="table table-bordered table-striped table-condensed">
-    <thead>
-      <tr>
-        <th>Type</th>
-        <th>Name</th>
-        <th>Description</th>
+        <td>Function to determine if the action can currently be executed.</td>
       </tr>
       </tr>
-    </thead>
-    <tbody>
       <tr>
       <tr>
-        <td><span class="xref">NStack.ustring</span></td>
-        <td><span class="parametername">title</span></td>
-        <td>Title for the menu item.</td>
-      </tr>
-      <tr>
-        <td><a class="xref" href="Terminal.Gui.MenuBarItem.html">MenuBarItem</a></td>
-        <td><span class="parametername">subMenu</span></td>
-        <td>The menu sub-menu.</td>
+        <td><a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a></td>
+        <td><span class="parametername">parent</span></td>
+        <td>The parent of this menu item.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -410,6 +381,33 @@ Gets or sets the help text for the menu item.
   </table>
   </table>
   
   
   
   
+  <a id="Terminal_Gui_MenuItem_Parent_" data-uid="Terminal.Gui.MenuItem.Parent*"></a>
+  <h4 id="Terminal_Gui_MenuItem_Parent" data-uid="Terminal.Gui.MenuItem.Parent">Parent</h4>
+  <div class="markdown level1 summary">
+Gets or sets the parent for this <a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a>.
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public MenuItem Parent { get; }</code></pre>
+  </div>
+  <h5 class="propertyValue">Property Value</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.MenuItem.html">MenuItem</a></td>
+        <td>The parent.</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
   <a id="Terminal_Gui_MenuItem_Title_" data-uid="Terminal.Gui.MenuItem.Title*"></a>
   <a id="Terminal_Gui_MenuItem_Title_" data-uid="Terminal.Gui.MenuItem.Title*"></a>
   <h4 id="Terminal_Gui_MenuItem_Title" data-uid="Terminal.Gui.MenuItem.Title">Title</h4>
   <h4 id="Terminal_Gui_MenuItem_Title" data-uid="Terminal.Gui.MenuItem.Title">Title</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.MenuItemCheckStyle.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Enum MenuItemCheckStyle
     <meta name="title" content="Enum MenuItemCheckStyle
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.MessageBox.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class MessageBox
     <meta name="title" content="Class MessageBox
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.MouseEvent.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Struct MouseEvent
     <meta name="title" content="Struct MouseEvent
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.MouseFlags.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Enum MouseFlags
     <meta name="title" content="Enum MouseFlags
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.NetMainLoop.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class NetMainLoop
     <meta name="title" content="Class NetMainLoop
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 5 - 2
docs/api/Terminal.Gui/Terminal.Gui.OpenDialog.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class OpenDialog
     <meta name="title" content="Class OpenDialog
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -369,7 +369,7 @@ The <a class="xref" href="Terminal.Gui.OpenDialog.html">OpenDialog</a>provides a
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -437,6 +437,9 @@ The <a class="xref" href="Terminal.Gui.OpenDialog.html">OpenDialog</a>provides a
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Point.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Struct Point
     <meta name="title" content="Struct Point
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 2 - 2
docs/api/Terminal.Gui/Terminal.Gui.Pos.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Pos
     <meta name="title" content="Class Pos
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -134,7 +134,7 @@ subtraction operators.
 <p>
 <p>
   These can be used to set the absolute position, when merely assigning an
   These can be used to set the absolute position, when merely assigning an
   integer value (via the implicit integer to <a class="xref" href="Terminal.Gui.Pos.html">Pos</a> conversion), and they can be combined
   integer value (via the implicit integer to <a class="xref" href="Terminal.Gui.Pos.html">Pos</a> conversion), and they can be combined
-  to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
+  to produce more useful layouts, like: Pos.Center - 3, which would shift the position
   of the <a class="xref" href="Terminal.Gui.View.html">View</a> 3 characters to the left after centering for example.
   of the <a class="xref" href="Terminal.Gui.View.html">View</a> 3 characters to the left after centering for example.
 </p>
 </p>
 <p>
 <p>

+ 22 - 3
docs/api/Terminal.Gui/Terminal.Gui.ProgressBar.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ProgressBar
     <meta name="title" content="Class ProgressBar
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -287,7 +287,7 @@ A Progress Bar view that can indicate progress of an activity visually.
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -370,6 +370,9 @@ A Progress Bar view that can indicate progress of an activity visually.
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_MouseEvent_Terminal_Gui_MouseEvent_">Responder.MouseEvent(MouseEvent)</a>
     </div>
     </div>
@@ -507,7 +510,9 @@ mode.   If is in activity mode, the marker is moved.
   
   
   <a id="Terminal_Gui_ProgressBar_Redraw_" data-uid="Terminal.Gui.ProgressBar.Redraw*"></a>
   <a id="Terminal_Gui_ProgressBar_Redraw_" data-uid="Terminal.Gui.ProgressBar.Redraw*"></a>
   <h4 id="Terminal_Gui_ProgressBar_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ProgressBar.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_ProgressBar_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ProgressBar.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -532,6 +537,20 @@ mode.   If is in activity mode, the marker is moved.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_ProgressBar_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.RadioGroup.SelectedItemChangedArgs.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class RadioGroup.SelectedItemChangedArgs
     <meta name="title" content="Class RadioGroup.SelectedItemChangedArgs
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 106 - 13
docs/api/Terminal.Gui/Terminal.Gui.RadioGroup.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class RadioGroup
     <meta name="title" content="Class RadioGroup
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -284,7 +284,7 @@
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -361,6 +361,9 @@
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -553,15 +556,42 @@ Invoked when the selected radio label has changed.
   </h3>
   </h3>
   
   
   
   
-  <a id="Terminal_Gui_RadioGroup_Cursor_" data-uid="Terminal.Gui.RadioGroup.Cursor*"></a>
-  <h4 id="Terminal_Gui_RadioGroup_Cursor" data-uid="Terminal.Gui.RadioGroup.Cursor">Cursor</h4>
+  <a id="Terminal_Gui_RadioGroup_DisplayMode_" data-uid="Terminal.Gui.RadioGroup.DisplayMode*"></a>
+  <h4 id="Terminal_Gui_RadioGroup_DisplayMode" data-uid="Terminal.Gui.RadioGroup.DisplayMode">DisplayMode</h4>
   <div class="markdown level1 summary">
   <div class="markdown level1 summary">
-The location of the cursor in the <a class="xref" href="Terminal.Gui.RadioGroup.html">RadioGroup</a>
+Gets or sets the <a class="xref" href="Terminal.Gui.DisplayModeLayout.html">DisplayModeLayout</a> for this <a class="xref" href="Terminal.Gui.RadioGroup.html">RadioGroup</a>.
 </div>
 </div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public int Cursor { get; set; }</code></pre>
+    <pre><code class="lang-csharp hljs">public DisplayModeLayout DisplayMode { get; set; }</code></pre>
+  </div>
+  <h5 class="propertyValue">Property Value</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.DisplayModeLayout.html">DisplayModeLayout</a></td>
+        <td></td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
+  <a id="Terminal_Gui_RadioGroup_HorizontalSpace_" data-uid="Terminal.Gui.RadioGroup.HorizontalSpace*"></a>
+  <h4 id="Terminal_Gui_RadioGroup_HorizontalSpace" data-uid="Terminal.Gui.RadioGroup.HorizontalSpace">HorizontalSpace</h4>
+  <div class="markdown level1 summary">
+Gets or sets the horizontal space for this <a class="xref" href="Terminal.Gui.RadioGroup.html">RadioGroup</a> if the <a class="xref" href="Terminal.Gui.RadioGroup.html#Terminal_Gui_RadioGroup_DisplayMode">DisplayMode</a> is <a class="xref" href="Terminal.Gui.DisplayModeLayout.html#Terminal_Gui_DisplayModeLayout_Horizontal">Horizontal</a>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int HorizontalSpace { get; set; }</code></pre>
   </div>
   </div>
   <h5 class="propertyValue">Property Value</h5>
   <h5 class="propertyValue">Property Value</h5>
   <table class="table table-bordered table-striped table-condensed">
   <table class="table table-bordered table-striped table-condensed">
@@ -638,7 +668,9 @@ The currently selected item from the list of radio labels
   
   
   <a id="Terminal_Gui_RadioGroup_MouseEvent_" data-uid="Terminal.Gui.RadioGroup.MouseEvent*"></a>
   <a id="Terminal_Gui_RadioGroup_MouseEvent_" data-uid="Terminal.Gui.RadioGroup.MouseEvent*"></a>
   <h4 id="Terminal_Gui_RadioGroup_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.RadioGroup.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_RadioGroup_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.RadioGroup.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -672,7 +704,7 @@ The currently selected item from the list of radio labels
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -716,7 +748,9 @@ Called whenever the current selected item changes. Invokes the <a class="xref" h
   
   
   <a id="Terminal_Gui_RadioGroup_PositionCursor_" data-uid="Terminal.Gui.RadioGroup.PositionCursor*"></a>
   <a id="Terminal_Gui_RadioGroup_PositionCursor_" data-uid="Terminal.Gui.RadioGroup.PositionCursor*"></a>
   <h4 id="Terminal_Gui_RadioGroup_PositionCursor" data-uid="Terminal.Gui.RadioGroup.PositionCursor">PositionCursor()</h4>
   <h4 id="Terminal_Gui_RadioGroup_PositionCursor" data-uid="Terminal.Gui.RadioGroup.PositionCursor">PositionCursor()</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Positions the cursor in the right position based on the currently focused view in the chain.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -728,7 +762,12 @@ Called whenever the current selected item changes. Invokes the <a class="xref" h
   
   
   <a id="Terminal_Gui_RadioGroup_ProcessColdKey_" data-uid="Terminal.Gui.RadioGroup.ProcessColdKey*"></a>
   <a id="Terminal_Gui_RadioGroup_ProcessColdKey_" data-uid="Terminal.Gui.RadioGroup.ProcessColdKey*"></a>
   <h4 id="Terminal_Gui_RadioGroup_ProcessColdKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.RadioGroup.ProcessColdKey(Terminal.Gui.KeyEvent)">ProcessColdKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_RadioGroup_ProcessColdKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.RadioGroup.ProcessColdKey(Terminal.Gui.KeyEvent)">ProcessColdKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+This method can be overwritten by views that
+want to provide accelerator functionality
+(Alt-key for example), but without
+interefering with normal ProcessKey behavior.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -768,11 +807,30 @@ Called whenever the current selected item changes. Invokes the <a class="xref" h
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessColdKey_Terminal_Gui_KeyEvent_">View.ProcessColdKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessColdKey_Terminal_Gui_KeyEvent_">View.ProcessColdKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_RadioGroup_ProcessColdKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  After keys are sent to the subviews on the
+  current view, all the view are
+  processed and the key is passed to the views
+  to allow some of them to process the keystroke
+  as a cold-key. </p>
+<p>
+  This functionality is used, for example, by
+  default buttons to act on the enter key.
+  Processing this as a hot-key would prevent
+  non-default buttons from consuming the enter
+  keypress when they have the focus.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_RadioGroup_ProcessKey_" data-uid="Terminal.Gui.RadioGroup.ProcessKey*"></a>
   <a id="Terminal_Gui_RadioGroup_ProcessKey_" data-uid="Terminal.Gui.RadioGroup.ProcessKey*"></a>
   <h4 id="Terminal_Gui_RadioGroup_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.RadioGroup.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_RadioGroup_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.RadioGroup.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -812,11 +870,32 @@ Called whenever the current selected item changes. Invokes the <a class="xref" h
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_RadioGroup_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_RadioGroup_Redraw_" data-uid="Terminal.Gui.RadioGroup.Redraw*"></a>
   <a id="Terminal_Gui_RadioGroup_Redraw_" data-uid="Terminal.Gui.RadioGroup.Redraw*"></a>
   <h4 id="Terminal_Gui_RadioGroup_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.RadioGroup.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_RadioGroup_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.RadioGroup.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -835,12 +914,26 @@ Called whenever the current selected item changes. Invokes the <a class="xref" h
       <tr>
       <tr>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><a class="xref" href="Terminal.Gui.Rect.html">Rect</a></td>
         <td><span class="parametername">bounds</span></td>
         <td><span class="parametername">bounds</span></td>
-        <td></td>
+        <td>The bounds (view-relative region) to redraw.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_RadioGroup_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Rect.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Struct Rect
     <meta name="title" content="Struct Rect
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 1 - 1
docs/api/Terminal.Gui/Terminal.Gui.Responder.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class Responder
     <meta name="title" content="Class Responder
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">

+ 5 - 2
docs/api/Terminal.Gui/Terminal.Gui.SaveDialog.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class SaveDialog
     <meta name="title" content="Class SaveDialog
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -370,7 +370,7 @@ save.
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -438,6 +438,9 @@ save.
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>

+ 26 - 5
docs/api/Terminal.Gui/Terminal.Gui.ScrollBarView.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ScrollBarView
     <meta name="title" content="Class ScrollBarView
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -287,7 +287,7 @@ ScrollBarViews are views that display a 1-character scrollbar, either horizontal
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -370,6 +370,9 @@ ScrollBarViews are views that display a 1-character scrollbar, either horizontal
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -655,7 +658,9 @@ part of a <a class="xref" href="Terminal.Gui.ScrollView.html">ScrollView</a> the
   
   
   <a id="Terminal_Gui_ScrollBarView_MouseEvent_" data-uid="Terminal.Gui.ScrollBarView.MouseEvent*"></a>
   <a id="Terminal_Gui_ScrollBarView_MouseEvent_" data-uid="Terminal.Gui.ScrollBarView.MouseEvent*"></a>
   <h4 id="Terminal_Gui_ScrollBarView_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ScrollBarView.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_ScrollBarView_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ScrollBarView.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -689,7 +694,7 @@ part of a <a class="xref" href="Terminal.Gui.ScrollView.html">ScrollView</a> the
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -699,7 +704,9 @@ part of a <a class="xref" href="Terminal.Gui.ScrollView.html">ScrollView</a> the
   
   
   <a id="Terminal_Gui_ScrollBarView_Redraw_" data-uid="Terminal.Gui.ScrollBarView.Redraw*"></a>
   <a id="Terminal_Gui_ScrollBarView_Redraw_" data-uid="Terminal.Gui.ScrollBarView.Redraw*"></a>
   <h4 id="Terminal_Gui_ScrollBarView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ScrollBarView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_ScrollBarView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ScrollBarView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -724,6 +731,20 @@ part of a <a class="xref" href="Terminal.Gui.ScrollView.html">ScrollView</a> the
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_ScrollBarView_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   <h3 id="implements">Implements</h3>
   <h3 id="implements">Implements</h3>
   <div>
   <div>
       <span class="xref">System.IDisposable</span>
       <span class="xref">System.IDisposable</span>

+ 65 - 9
docs/api/Terminal.Gui/Terminal.Gui.ScrollView.html

@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=device-width">
     <meta name="title" content="Class ScrollView
     <meta name="title" content="Class ScrollView
    ">
    ">
-    <meta name="generator" content="docfx 2.56.1.0">
+    <meta name="generator" content="docfx 2.56.2.0">
     
     
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="shortcut icon" href="../../favicon.ico">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
     <link rel="stylesheet" href="../../styles/docfx.vendor.css">
@@ -278,7 +278,7 @@ Scrollviews are views that present a window into a virtual space where subviews
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_OnDrawContent_Terminal_Gui_Rect_">View.OnDrawContent(Rect)</a>
     </div>
     </div>
     <div>
     <div>
-      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus_Terminal_Gui_View_">View.SetFocus(View)</a>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_SetFocus">View.SetFocus()</a>
     </div>
     </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_KeyPress">View.KeyPress</a>
@@ -355,6 +355,9 @@ Scrollviews are views that present a window into a virtual space where subviews
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
       <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_EndInit">View.EndInit()</a>
     </div>
     </div>
+    <div>
+      <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Visible">View.Visible</a>
+    </div>
     <div>
     <div>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
       <a class="xref" href="Terminal.Gui.Responder.html#Terminal_Gui_Responder_Dispose">Responder.Dispose()</a>
     </div>
     </div>
@@ -543,7 +546,7 @@ Gets or sets the visibility for the horizontal scroll indicator.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td><code>true</code> if show vertical scroll indicator; otherwise, <code>false</code>.</td>
+        <td><code>true</code> if show horizontal scroll indicator; otherwise, <code>false</code>.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -611,7 +614,9 @@ Adds the view to the scrollview.
   
   
   <a id="Terminal_Gui_ScrollView_Dispose_" data-uid="Terminal.Gui.ScrollView.Dispose*"></a>
   <a id="Terminal_Gui_ScrollView_Dispose_" data-uid="Terminal.Gui.ScrollView.Dispose*"></a>
   <h4 id="Terminal_Gui_ScrollView_Dispose_System_Boolean_" data-uid="Terminal.Gui.ScrollView.Dispose(System.Boolean)">Dispose(Boolean)</h4>
   <h4 id="Terminal_Gui_ScrollView_Dispose_System_Boolean_" data-uid="Terminal.Gui.ScrollView.Dispose(System.Boolean)">Dispose(Boolean)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -636,11 +641,22 @@ Adds the view to the scrollview.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Dispose_System_Boolean_">View.Dispose(Boolean)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Dispose_System_Boolean_">View.Dispose(Boolean)</a></div>
+  <h5 id="Terminal_Gui_ScrollView_Dispose_System_Boolean__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+If disposing equals true, the method has been called directly
+or indirectly by a user&apos;s code. Managed and unmanaged resources
+can be disposed.
+If disposing equals false, the method has been called by the
+runtime from inside the finalizer and you should not reference
+other objects. Only unmanaged resources can be disposed.		
+</div>
   
   
   
   
   <a id="Terminal_Gui_ScrollView_MouseEvent_" data-uid="Terminal.Gui.ScrollView.MouseEvent*"></a>
   <a id="Terminal_Gui_ScrollView_MouseEvent_" data-uid="Terminal.Gui.ScrollView.MouseEvent*"></a>
   <h4 id="Terminal_Gui_ScrollView_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ScrollView.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
   <h4 id="Terminal_Gui_ScrollView_MouseEvent_Terminal_Gui_MouseEvent_" data-uid="Terminal.Gui.ScrollView.MouseEvent(Terminal.Gui.MouseEvent)">MouseEvent(MouseEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Method invoked when a mouse event is generated
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -674,7 +690,7 @@ Adds the view to the scrollview.
     <tbody>
     <tbody>
       <tr>
       <tr>
         <td><span class="xref">System.Boolean</span></td>
         <td><span class="xref">System.Boolean</span></td>
-        <td></td>
+        <td><code>true</code>, if the event was handled, <code>false</code> otherwise.</td>
       </tr>
       </tr>
     </tbody>
     </tbody>
   </table>
   </table>
@@ -684,7 +700,9 @@ Adds the view to the scrollview.
   
   
   <a id="Terminal_Gui_ScrollView_PositionCursor_" data-uid="Terminal.Gui.ScrollView.PositionCursor*"></a>
   <a id="Terminal_Gui_ScrollView_PositionCursor_" data-uid="Terminal.Gui.ScrollView.PositionCursor*"></a>
   <h4 id="Terminal_Gui_ScrollView_PositionCursor" data-uid="Terminal.Gui.ScrollView.PositionCursor">PositionCursor()</h4>
   <h4 id="Terminal_Gui_ScrollView_PositionCursor" data-uid="Terminal.Gui.ScrollView.PositionCursor">PositionCursor()</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Positions the cursor in the right position based on the currently focused view in the chain.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -696,7 +714,10 @@ Adds the view to the scrollview.
   
   
   <a id="Terminal_Gui_ScrollView_ProcessKey_" data-uid="Terminal.Gui.ScrollView.ProcessKey*"></a>
   <a id="Terminal_Gui_ScrollView_ProcessKey_" data-uid="Terminal.Gui.ScrollView.ProcessKey*"></a>
   <h4 id="Terminal_Gui_ScrollView_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.ScrollView.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
   <h4 id="Terminal_Gui_ScrollView_ProcessKey_Terminal_Gui_KeyEvent_" data-uid="Terminal.Gui.ScrollView.ProcessKey(Terminal.Gui.KeyEvent)">ProcessKey(KeyEvent)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+If the view is focused, gives the view a
+chance to process the keystroke.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -736,11 +757,32 @@ Adds the view to the scrollview.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_ProcessKey_Terminal_Gui_KeyEvent_">View.ProcessKey(KeyEvent)</a></div>
+  <h5 id="Terminal_Gui_ScrollView_ProcessKey_Terminal_Gui_KeyEvent__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+  Views can override this method if they are
+  interested in processing the given keystroke.
+  If they consume the keystroke, they must
+  return true to stop the keystroke from being
+  processed by other widgets or consumed by the
+  widget engine.    If they return false, the
+  keystroke will be passed using the ProcessColdKey
+  method to other views to process.
+</p>
+<p>
+  The View implementation does nothing but return false,
+  so it is not necessary to call base.ProcessKey if you
+  derive directly from View, but you should if you derive
+  other View subclasses.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_ScrollView_Redraw_" data-uid="Terminal.Gui.ScrollView.Redraw*"></a>
   <a id="Terminal_Gui_ScrollView_Redraw_" data-uid="Terminal.Gui.ScrollView.Redraw*"></a>
   <h4 id="Terminal_Gui_ScrollView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ScrollView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
   <h4 id="Terminal_Gui_ScrollView_Redraw_Terminal_Gui_Rect_" data-uid="Terminal.Gui.ScrollView.Redraw(Terminal.Gui.Rect)">Redraw(Rect)</h4>
-  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 summary">
+Redraws this view and its subviews; only redraws the views that have been flagged for a re-display.
+</div>
   <div class="markdown level1 conceptual"></div>
   <div class="markdown level1 conceptual"></div>
   <h5 class="decalaration">Declaration</h5>
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
   <div class="codewrapper">
@@ -765,6 +807,20 @@ Adds the view to the scrollview.
   </table>
   </table>
   <h5 class="overrides">Overrides</h5>
   <h5 class="overrides">Overrides</h5>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
   <div><a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">View.Redraw(Rect)</a></div>
+  <h5 id="Terminal_Gui_ScrollView_Redraw_Terminal_Gui_Rect__remarks">Remarks</h5>
+  <div class="markdown level1 remarks">
+<p>
+   Always use <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Bounds">Bounds</a> (view-relative) when calling <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a>, NOT <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Frame">Frame</a> (superview-relative).
+</p>
+<p>
+   Views should set the color that they want to use on entry, as otherwise this will inherit
+   the last color that was set globally on the driver.
+</p>
+<p>
+   Overrides of <a class="xref" href="Terminal.Gui.View.html#Terminal_Gui_View_Redraw_Terminal_Gui_Rect_">Redraw(Rect)</a> must ensure they do not set <code>Driver.Clip</code> to a clip region
+   larger than the <code>region</code> parameter.
+</p>
+</div>
   
   
   
   
   <a id="Terminal_Gui_ScrollView_RemoveAll_" data-uid="Terminal.Gui.ScrollView.RemoveAll*"></a>
   <a id="Terminal_Gui_ScrollView_RemoveAll_" data-uid="Terminal.Gui.ScrollView.RemoveAll*"></a>

Some files were not shown because too many files changed in this diff