From 9aa36c4cf00388864b33079552f1fe0de443643f Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Tue, 11 Aug 2020 11:45:05 +0200 Subject: [PATCH] Do not include cell separators in grid Closes #40 --- .../Unit/Composition/GridTests.cs | 34 +++++++++++++++---- .../Unit/Composition/TableTests.cs | 6 ++-- src/Spectre.Console/Composition/Grid.cs | 6 +++- src/Spectre.Console/Composition/GridColumn.cs | 2 +- src/Spectre.Console/Composition/Table.cs | 10 ++++-- 5 files changed, 45 insertions(+), 13 deletions(-) diff --git a/src/Spectre.Console.Tests/Unit/Composition/GridTests.cs b/src/Spectre.Console.Tests/Unit/Composition/GridTests.cs index cc40a82..4368afd 100644 --- a/src/Spectre.Console.Tests/Unit/Composition/GridTests.cs +++ b/src/Spectre.Console.Tests/Unit/Composition/GridTests.cs @@ -99,13 +99,12 @@ namespace Spectre.Console.Tests.Unit.Composition } [Fact] - public void Should_Render_Grid_Column_Padding_Correctly() + public void Should_Use_Default_Padding() { // Given var console = new PlainConsole(width: 80); var grid = new Grid(); - grid.AddColumn(new GridColumn { Padding = new Padding(3, 0) }); - grid.AddColumns(2); + grid.AddColumns(3); grid.AddRow("Foo", "Bar", "Baz"); grid.AddRow("Qux", "Corgi", "Waldo"); grid.AddRow("Grault", "Garply", "Fred"); @@ -115,9 +114,32 @@ namespace Spectre.Console.Tests.Unit.Composition // Then console.Lines.Count.ShouldBe(3); - console.Lines[0].ShouldBe(" Foo Bar Baz "); - console.Lines[1].ShouldBe(" Qux Corgi Waldo"); - console.Lines[2].ShouldBe(" Grault Garply Fred "); + console.Lines[0].ShouldBe("Foo Bar Baz "); + console.Lines[1].ShouldBe("Qux Corgi Waldo"); + console.Lines[2].ShouldBe("Grault Garply Fred "); + } + + [Fact] + public void Should_Render_Explicit_Grid_Column_Padding_Correctly() + { + // Given + var console = new PlainConsole(width: 80); + var grid = new Grid(); + grid.AddColumn(new GridColumn { Padding = new Padding(3, 0) }); + grid.AddColumn(new GridColumn { Padding = new Padding(0, 0) }); + grid.AddColumn(new GridColumn { Padding = new Padding(0, 3) }); + grid.AddRow("Foo", "Bar", "Baz"); + grid.AddRow("Qux", "Corgi", "Waldo"); + grid.AddRow("Grault", "Garply", "Fred"); + + // When + console.Render(grid); + + // Then + console.Lines.Count.ShouldBe(3); + console.Lines[0].ShouldBe(" Foo Bar Baz "); + console.Lines[1].ShouldBe(" Qux Corgi Waldo "); + console.Lines[2].ShouldBe(" GraultGarplyFred "); } [Fact] diff --git a/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs b/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs index bc17ff0..2be64cb 100644 --- a/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs +++ b/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs @@ -254,9 +254,9 @@ namespace Spectre.Console.Tests.Unit.Composition // Then console.Lines.Count.ShouldBe(3); - console.Lines[0].ShouldBe("Foo Bar Baz "); - console.Lines[1].ShouldBe("Qux Corgi Waldo"); - console.Lines[2].ShouldBe("Grault Garply Fred "); + console.Lines[0].ShouldBe("Foo Bar Baz "); + console.Lines[1].ShouldBe("Qux Corgi Waldo"); + console.Lines[2].ShouldBe("Grault Garply Fred "); } [Fact] diff --git a/src/Spectre.Console/Composition/Grid.cs b/src/Spectre.Console/Composition/Grid.cs index 5a2c95c..e688b25 100644 --- a/src/Spectre.Console/Composition/Grid.cs +++ b/src/Spectre.Console/Composition/Grid.cs @@ -21,6 +21,7 @@ namespace Spectre.Console Border = BorderKind.None, ShowHeaders = false, IsGrid = true, + PadRightCell = false, }; } @@ -55,11 +56,14 @@ namespace Spectre.Console throw new ArgumentNullException(nameof(column)); } + // Only pad the most right cell if we've explicitly set a padding. + _table.PadRightCell = column.Padding != null; + _table.AddColumn(new TableColumn(string.Empty) { Width = column.Width, NoWrap = column.NoWrap, - Padding = column.Padding, + Padding = column.Padding ?? new Padding(0, 2), Alignment = column.Alignment, }); } diff --git a/src/Spectre.Console/Composition/GridColumn.cs b/src/Spectre.Console/Composition/GridColumn.cs index a67f31f..1fc658a 100644 --- a/src/Spectre.Console/Composition/GridColumn.cs +++ b/src/Spectre.Console/Composition/GridColumn.cs @@ -20,7 +20,7 @@ namespace Spectre.Console /// /// Gets or sets the padding of the column. /// - public Padding Padding { get; set; } = new Padding(0, 1); + public Padding? Padding { get; set; } = null; /// /// Gets or sets the alignment of the column. diff --git a/src/Spectre.Console/Composition/Table.cs b/src/Spectre.Console/Composition/Table.cs index 17ce99c..3e6f286 100644 --- a/src/Spectre.Console/Composition/Table.cs +++ b/src/Spectre.Console/Composition/Table.cs @@ -53,8 +53,14 @@ namespace Spectre.Console /// public bool SafeBorder { get; set; } = true; + // Whether this is a grid or not. internal bool IsGrid { get; set; } = false; + // Whether or not the most right cell should be padded. + // This is almost always the case, unless we're rendering + // a grid without explicit padding in the last cell. + internal bool PadRightCell { get; set; } = true; + /// /// Initializes a new instance of the class. /// @@ -279,7 +285,7 @@ namespace Spectre.Console } // Pad column on the right side - if (showBorder || (hideBorder && !lastCell) || (IsGrid && !lastCell)) + if (showBorder || (hideBorder && !lastCell) || (hideBorder && lastCell && IsGrid && PadRightCell)) { var rightPadding = _columns[cellIndex].Padding.Right; if (rightPadding > 0) @@ -293,7 +299,7 @@ namespace Spectre.Console // Add right column edge result.Add(new Segment(border.GetPart(BorderPart.CellRight))); } - else if (showBorder || (hideBorder && !lastCell)) + else if (showBorder) { // Add column separator result.Add(new Segment(border.GetPart(BorderPart.CellSeparator)));