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 ()
{