Add InsertTile method

This commit is contained in:
tznind
2023-01-22 11:50:56 +00:00
parent 1a00e49361
commit a50f9cd2de
2 changed files with 48 additions and 1 deletions

View File

@@ -116,6 +116,34 @@ namespace Terminal.Gui {
LayoutSubviews ();
}
/// <summary>
/// Adds a new <see cref="Tile"/> to the collection at <paramref name="idx"/>.
/// This will also add another splitter line
/// </summary>
/// <param name="idx"></param>
/// <exception cref="NotImplementedException"></exception>
internal void InsertTile (int idx)
{
var oldTiles = Tiles.ToArray ();
RebuildForTileCount (oldTiles.Length + 1);
for(int i=0;i<tiles.Count;i++) {
if(i != idx) {
var oldTile = oldTiles [i > idx ? i - 1 : i];
// remove the new empty View
Remove (tiles [i].View);
// restore old Tile and View
tiles [i] = oldTile;
Add (tiles [i].View);
}
}
SetNeedsDisplay ();
LayoutSubviews ();
}
/// <summary>
/// Orientation of the dividing line (Horizontal or Vertical).
/// </summary>

View File

@@ -379,8 +379,27 @@ namespace UnitTests {
└──┴──────┘";
TestHelpers.AssertDriverContentsAre (looksLike, output);
}
[Fact, AutoInitShutdown]
public void TestSplitView_InsertPanelAtStart ()
{
var splitContainer = Get11By3SplitView (out var line, true);
SetInputFocusLine (splitContainer);
splitContainer.InsertTile (0);
splitContainer.Redraw (splitContainer.Bounds);
// so should ignore the 2 distance and stick to 6
string looksLike =
@"
┌──┬───┬──┐
│ │111│22│
└──┴───┴──┘";
TestHelpers.AssertDriverContentsAre (looksLike, output);
}
[Fact, AutoInitShutdown]
public void TestSplitView_Horizontal_Focused ()
{