From f96c7001e435f0ab391d9f9db181aa2dc2748dc4 Mon Sep 17 00:00:00 2001 From: Thomas Nind <31306100+tznind@users.noreply.github.com> Date: Thu, 17 Mar 2022 09:06:17 +0000 Subject: [PATCH] Fixed TableView when redrawing a System.DataTable that has no columns (#1639) --- Terminal.Gui/Views/TableView.cs | 10 +++++----- UnitTests/TableViewTests.cs | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Terminal.Gui/Views/TableView.cs b/Terminal.Gui/Views/TableView.cs index ac3ff1fc6..1082f68c5 100644 --- a/Terminal.Gui/Views/TableView.cs +++ b/Terminal.Gui/Views/TableView.cs @@ -621,7 +621,7 @@ namespace Terminal.Gui { /// public override bool ProcessKey (KeyEvent keyEvent) { - if (Table == null) { + if (Table == null || Table.Columns.Count <= 0) { PositionCursor (); return false; } @@ -865,7 +865,7 @@ namespace Terminal.Gui { SetFocus (); } - if (Table == null) { + if (Table == null || Table.Columns.Count <= 0) { return false; } @@ -925,7 +925,7 @@ namespace Terminal.Gui { /// public Point? ScreenToCell (int clientX, int clientY) { - if (Table == null) + if (Table == null || Table.Columns.Count <= 0) return null; var viewPort = CalculateViewport (Bounds); @@ -956,7 +956,7 @@ namespace Terminal.Gui { /// public Point? CellToScreen (int tableColumn, int tableRow) { - if (Table == null) + if (Table == null || Table.Columns.Count <= 0) return null; var viewPort = CalculateViewport (Bounds); @@ -1137,7 +1137,7 @@ namespace Terminal.Gui { /// private IEnumerable CalculateViewport (Rect bounds, int padding = 1) { - if (Table == null) + if (Table == null || Table.Columns.Count <= 0) yield break; int usedSpace = 0; diff --git a/UnitTests/TableViewTests.cs b/UnitTests/TableViewTests.cs index 67b9f6b16..5ccfdbbcd 100644 --- a/UnitTests/TableViewTests.cs +++ b/UnitTests/TableViewTests.cs @@ -74,6 +74,23 @@ namespace Terminal.Gui.Views { Assert.Equal (1, tableView.ColumnOffset); } + [Fact] + [AutoInitShutdown] + public void Redraw_EmptyTable () + { + var tableView = new TableView (); + tableView.ColorScheme = new ColorScheme(); + tableView.Bounds = new Rect (0, 0, 25, 10); + + // Set a table with 1 column + tableView.Table = BuildTable (1, 50); + tableView.Redraw(tableView.Bounds); + + tableView.Table.Columns.Remove(tableView.Table.Columns[0]); + tableView.Redraw(tableView.Bounds); + } + + [Fact] public void SelectedCellChanged_NotFiredForSameValue () {