Browse Source

Merge branch 'develop' into listview_keyboard_search

Charlie Kindel 2 years ago
parent
commit
06bc892c67
2 changed files with 87 additions and 9 deletions
  1. 2 1
      Terminal.Gui/Views/Menu.cs
  2. 85 8
      UnitTests/MenuTests.cs

+ 2 - 1
Terminal.Gui/Views/Menu.cs

@@ -758,6 +758,7 @@ namespace Terminal.Gui {
 					return true;
 				var item = barItems.Children [meY];
 				if (item == null || !item.IsEnabled ()) disabled = true;
+				if (disabled) return true;
 				current = meY;
 				if (item != null && !disabled)
 					RunSelected ();
@@ -1074,7 +1075,7 @@ namespace Terminal.Gui {
 				if (i == selected && IsMenuOpen) {
 					hotColor = i == selected ? ColorScheme.HotFocus : ColorScheme.HotNormal;
 					normalColor = i == selected ? ColorScheme.Focus : GetNormalColor ();
-				} else { 
+				} else {
 					hotColor = ColorScheme.HotNormal;
 					normalColor = GetNormalColor ();
 				}

+ 85 - 8
UnitTests/MenuTests.cs

@@ -1133,8 +1133,8 @@ Edit
 			string padding (int i)
 			{
 				int n = 0;
-				while (i > 0){
-					n += Menus [i-1].TitleLength + 2;
+				while (i > 0) {
+					n += Menus [i - 1].TitleLength + 2;
 					i--;
 				}
 				return new string (' ', n);
@@ -1153,12 +1153,12 @@ Edit
 			public string expectedBottomRow (int i) => $"{d.LLCorner}{new String (d.HLine.ToString () [0], Menus [i].Children [0].TitleLength + 3)}{d.LRCorner}  \n";
 
 			// The fulll expected string for an open sub menu
-			public string expectedSubMenuOpen (int i) => ClosedMenuText + 
+			public string expectedSubMenuOpen (int i) => ClosedMenuText +
 				(Menus [i].Children.Length > 0 ?
 					padding (i) + expectedTopRow (i) +
 					padding (i) + expectedMenuItemRow (i) +
-					padding (i) + expectedBottomRow (i) 
-				: 
+					padding (i) + expectedBottomRow (i)
+				:
 				"");
 
 			public ExpectedMenuBar (MenuBarItem [] menus) : base (menus)
@@ -1481,14 +1481,14 @@ Edit
 
 			MenuBarItem [] items = new MenuBarItem [expectedMenu.Menus.Length];
 			for (var i = 0; i < expectedMenu.Menus.Length; i++) {
-				items [i] = new MenuBarItem (expectedMenu.Menus [i].Title, expectedMenu.Menus [i].Children.Length > 0 
+				items [i] = new MenuBarItem (expectedMenu.Menus [i].Title, expectedMenu.Menus [i].Children.Length > 0
 					? new MenuItem [] {
 						new MenuItem (expectedMenu.Menus [i].Children [0].Title, "", null),
-					} 
+					}
 					: Array.Empty<MenuItem> ());
 			}
 			var menu = new MenuBar (items);
-			
+
 			var tf = new TextField () { Y = 2, Width = 10 };
 			Application.Top.Add (menu, tf);
 
@@ -1559,5 +1559,82 @@ Edit
 			Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F10 | Key.ShiftMask, new KeyModifiers ())));
 			Assert.False (menu.IsMenuOpen);
 		}
+
+		[Fact, AutoInitShutdown]
+		public void Disabled_MenuItem_Is_Never_Selected ()
+		{
+			var menu = new MenuBar (new MenuBarItem [] {
+				new MenuBarItem ("Menu", new MenuItem [] {
+					new MenuItem ("Enabled 1", "", null),
+					new MenuItem ("Disabled", "", null, () => false),
+					null,
+					new MenuItem ("Enabled 2", "", null)
+				})
+			});
+
+			var top = Application.Top;
+			top.Add (menu);
+			Application.Begin (top);
+
+			var attributes = new Attribute [] {
+				// 0
+				menu.ColorScheme.Normal,
+				// 1
+				menu.ColorScheme.Focus,
+				// 2
+				menu.ColorScheme.Disabled
+			};
+
+			TestHelpers.AssertDriverColorsAre (@"
+00000000000000", attributes);
+
+			Assert.True (menu.MouseEvent (new MouseEvent {
+				X = 0,
+				Y = 0,
+				Flags = MouseFlags.Button1Pressed,
+				View = menu
+			}));
+			top.Redraw (top.Bounds);
+			TestHelpers.AssertDriverColorsAre (@"
+11111100000000
+00000000000000
+01111111111110
+02222222222220
+00000000000000
+00000000000000
+00000000000000", attributes);
+
+			Assert.True (top.Subviews [1].MouseEvent (new MouseEvent {
+				X = 0,
+				Y = 2,
+				Flags = MouseFlags.Button1Clicked,
+				View = top.Subviews [1]
+			}));
+			top.Subviews [1].Redraw (top.Bounds);
+			TestHelpers.AssertDriverColorsAre (@"
+11111100000000
+00000000000000
+01111111111110
+02222222222220
+00000000000000
+00000000000000
+00000000000000", attributes);
+
+			Assert.True (top.Subviews [1].MouseEvent (new MouseEvent {
+				X = 0,
+				Y = 2,
+				Flags = MouseFlags.ReportMousePosition,
+				View = top.Subviews [1]
+			}));
+			top.Subviews [1].Redraw (top.Bounds);
+			TestHelpers.AssertDriverColorsAre (@"
+11111100000000
+00000000000000
+01111111111110
+02222222222220
+00000000000000
+00000000000000
+00000000000000", attributes);
+		}
 	}
 }