Browse Source

Add RemoveTile method

tznind 2 years ago
parent
commit
fb1672331f
2 changed files with 39 additions and 4 deletions
  1. 26 0
      Terminal.Gui/Views/SplitView.cs
  2. 13 4
      UICatalog/Scenarios/Notepad.cs

+ 26 - 0
Terminal.Gui/Views/SplitView.cs

@@ -153,6 +153,32 @@ namespace Terminal.Gui {
 
 			return toReturn;
 		}
+		public void RemoveTile (int idx)
+		{
+			var oldTiles = Tiles.ToArray ();
+			
+			if (idx < 0 || idx >= oldTiles.Length) {
+				return;
+			}
+
+			RebuildForTileCount (oldTiles.Length - 1);
+
+			for (int i = 0; i < tiles.Count; i++) {
+
+				int oldIdx = i >= idx ? i + 1: i;
+				var oldTile = oldTiles [oldIdx];
+
+				// remove the new empty View
+				Remove (tiles [i].View);
+
+				// restore old Tile and View
+				tiles [i] = oldTile;
+				Add (tiles [i].View);
+				
+			}
+			SetNeedsDisplay ();
+			LayoutSubviews ();
+		}
 
 		///<summary>
 		/// Returns the index of the first <see cref="Tile"/> in

+ 13 - 4
UICatalog/Scenarios/Notepad.cs

@@ -92,7 +92,7 @@ namespace UICatalog.Scenarios {
 
 				items = new MenuBarItem (new MenuItem [] {
 					new MenuItem ($"Save", "", () => Save(e.Tab)),
-					new MenuItem ($"Close", "", () => Close(e.Tab)),
+					new MenuItem ($"Close", "", () => Close(tv, e.Tab)),
 					null,
 					new MenuItem ($"Split Up", "", () => SplitUp(tv,t)),
 					new MenuItem ($"Split Down", "", () => SplitDown(tv,t)),
@@ -175,9 +175,10 @@ namespace UICatalog.Scenarios {
 
 		private void Close ()
 		{
-			Close (tabView.SelectedTab);
+			// TODO: Should be the tab view with focus not the root (first) one.
+			Close (tabView, tabView.SelectedTab);
 		}
-		private void Close (TabView.Tab tabToClose)
+		private void Close (TabView tv, TabView.Tab tabToClose)
 		{
 			var tab = tabToClose as OpenedFile;
 
@@ -201,8 +202,15 @@ namespace UICatalog.Scenarios {
 			}
 
 			// close and dispose the tab
-			tabView.RemoveTab (tab);
+			tv.RemoveTab (tab);
 			tab.View.Dispose ();
+
+			if(tv.Tabs.Count == 0) {
+
+				var split = (SplitView)tv.SuperView.SuperView;
+				var tileIndex = split.IndexOf (tv);
+				split.RemoveTile (tileIndex);
+			}
 		}
 
 		private void Open ()
@@ -219,6 +227,7 @@ namespace UICatalog.Scenarios {
 						return;
 					}
 
+					// TODO should open in focused TabView
 					Open (new FileInfo (path), Path.GetFileName (path));
 				}
 			}