소스 검색

Implementing UseSubMenusSingleFrame in context menu.

BDisp 3 년 전
부모
커밋
c1649981b5
3개의 변경된 파일22개의 추가작업 그리고 3개의 파일을 삭제
  1. 7 1
      Terminal.Gui/Core/ContextMenu.cs
  2. 3 1
      Terminal.Gui/Views/Menu.cs
  3. 12 1
      UICatalog/Scenarios/ContextMenus.cs

+ 7 - 1
Terminal.Gui/Core/ContextMenu.cs

@@ -106,7 +106,8 @@ namespace Terminal.Gui {
 				X = position.X,
 				Y = position.Y,
 				Width = 0,
-				Height = 0
+				Height = 0,
+				UseSubMenusSingleFrame = UseSubMenusSingleFrame
 			};
 
 			menuBar.isContextMenuLoading = true;
@@ -201,5 +202,10 @@ namespace Terminal.Gui {
 		/// Gets the <see cref="Gui.MenuBar"/> that is hosting this context menu.
 		/// </summary>
 		public MenuBar MenuBar { get => menuBar; }
+
+		/// <summary>
+		/// Gets or sets if the sub-menus must be displayed in a single or multiple frames.
+		/// </summary>
+		public bool UseSubMenusSingleFrame { get; set; }
 	}
 }

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

@@ -757,8 +757,10 @@ namespace Terminal.Gui {
 				if (item == null || !item.IsEnabled ()) disabled = true;
 				if (item != null && !disabled)
 					current = me.Y - 1;
-				if (host.UseSubMenusSingleFrame || !CheckSubMenu ())
+				if (host.UseSubMenusSingleFrame || !CheckSubMenu ()) {
+					SetNeedsDisplay ();
 					return true;
+				}
 				host.OnMenuOpened ();
 				return true;
 			}

+ 12 - 1
UICatalog/Scenarios/ContextMenus.cs

@@ -12,12 +12,19 @@ namespace UICatalog.Scenarios {
 		private MenuItem miForceMinimumPosToZero;
 		private bool forceMinimumPosToZero = true;
 		private TextField tfTopLeft, tfTopRight, tfMiddle, tfBottomLeft, tfBottomRight;
+		private MenuItem miUseSubMenusSingleFrame;
+		private bool useSubMenusSingleFrame;
 
 		public override void Setup ()
 		{
 			var text = "Context Menu";
 			var width = 20;
 
+			Win.Add (new Label ("Press 'Ctrl + Space' to open the Window context menu.") {
+				X = Pos.Center (),
+				Y = 1
+			});
+
 			tfTopLeft = new TextField (text) {
 				Width = width
 			};
@@ -89,10 +96,14 @@ namespace UICatalog.Scenarios {
 						tfBottomLeft.ContextMenu.ForceMinimumPosToZero = forceMinimumPosToZero;
 						tfBottomRight.ContextMenu.ForceMinimumPosToZero = forceMinimumPosToZero;
 					}) { CheckType = MenuItemCheckStyle.Checked, Checked = forceMinimumPosToZero },
+					miUseSubMenusSingleFrame = new MenuItem ("Use_SubMenusSingleFrame", "",
+						() => contextMenu.UseSubMenusSingleFrame = miUseSubMenusSingleFrame.Checked = useSubMenusSingleFrame = !useSubMenusSingleFrame) {
+							CheckType = MenuItemCheckStyle.Checked, Checked = useSubMenusSingleFrame
+						},
 					null,
 					new MenuItem ("_Quit", "", () => Application.RequestStop ())
 				})
-			) { ForceMinimumPosToZero = forceMinimumPosToZero };
+			) { ForceMinimumPosToZero = forceMinimumPosToZero, UseSubMenusSingleFrame = useSubMenusSingleFrame };
 
 			tfTopLeft.ContextMenu.ForceMinimumPosToZero = forceMinimumPosToZero;
 			tfTopRight.ContextMenu.ForceMinimumPosToZero = forceMinimumPosToZero;