mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-29 01:07:58 +01:00
Add Style.ShowHeaders to TableView (#2514)
* Add Style.HideHeaders to TableView * Revisions to TableView HideHeaders from review Also add to UICatalog TableEditor Scenario * Allow ShowHorizontalHeaderUnderline to draw top border even when HideHeaders is enabled; AlwaysShowHeader will keep it there on scroll * Add Unit Tests for TableView.Style.HideHeaders * Rename HideHeaders to ShowHeaders and simplify logic --------- Co-authored-by: tznind <tznind@dundee.ac.uk>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using NStack;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
@@ -258,8 +259,10 @@ namespace Terminal.Gui {
|
||||
line++;
|
||||
}
|
||||
|
||||
RenderHeaderMidline (line, columnsToRender);
|
||||
line++;
|
||||
if (Style.ShowHeaders) {
|
||||
RenderHeaderMidline (line, columnsToRender);
|
||||
line++;
|
||||
}
|
||||
|
||||
if (Style.ShowHorizontalHeaderUnderline) {
|
||||
RenderHeaderUnderline (line, bounds.Width, columnsToRender);
|
||||
@@ -321,7 +324,7 @@ namespace Terminal.Gui {
|
||||
/// <returns></returns>
|
||||
private int GetHeaderHeight ()
|
||||
{
|
||||
int heightRequired = 1;
|
||||
int heightRequired = Style.ShowHeaders ? 1 : 0;
|
||||
|
||||
if (Style.ShowHorizontalHeaderOverline)
|
||||
heightRequired++;
|
||||
@@ -1800,6 +1803,14 @@ namespace Terminal.Gui {
|
||||
/// </summary>
|
||||
public class TableStyle {
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a flag indicating whether to render headers of a <see cref="TableView"/>.
|
||||
/// Defaults to <see langword="true"/>.
|
||||
/// </summary>
|
||||
/// <remarks><see cref="ShowHorizontalHeaderOverline"/>, <see cref="ShowHorizontalHeaderUnderline"/> etc
|
||||
/// may still be used even if <see cref="ShowHeaders"/> is <see langword="false"/>.</remarks>
|
||||
public bool ShowHeaders { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// When scrolling down always lock the column headers in place as the first row of the table
|
||||
/// </summary>
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace UICatalog.Scenarios {
|
||||
[ScenarioCategory ("Top Level Windows")]
|
||||
public class TableEditor : Scenario {
|
||||
TableView tableView;
|
||||
private MenuItem miShowHeaders;
|
||||
private MenuItem miAlwaysShowHeaders;
|
||||
private MenuItem miHeaderOverline;
|
||||
private MenuItem miHeaderMidline;
|
||||
@@ -56,7 +57,8 @@ namespace UICatalog.Scenarios {
|
||||
new MenuItem ("_Quit", "", () => Quit()),
|
||||
}),
|
||||
new MenuBarItem ("_View", new MenuItem [] {
|
||||
miAlwaysShowHeaders = new MenuItem ("_AlwaysShowHeaders", "", () => ToggleAlwaysShowHeader()){Checked = tableView.Style.AlwaysShowHeaders, CheckType = MenuItemCheckStyle.Checked },
|
||||
miShowHeaders = new MenuItem ("_ShowHeaders", "", () => ToggleShowHeaders()){Checked = tableView.Style.ShowHeaders, CheckType = MenuItemCheckStyle.Checked },
|
||||
miAlwaysShowHeaders = new MenuItem ("_AlwaysShowHeaders", "", () => ToggleAlwaysShowHeaders()){Checked = tableView.Style.AlwaysShowHeaders, CheckType = MenuItemCheckStyle.Checked },
|
||||
miHeaderOverline = new MenuItem ("_HeaderOverLine", "", () => ToggleOverline()){Checked = tableView.Style.ShowHorizontalHeaderOverline, CheckType = MenuItemCheckStyle.Checked },
|
||||
miHeaderMidline = new MenuItem ("_HeaderMidLine", "", () => ToggleHeaderMidline()){Checked = tableView.Style.ShowVerticalHeaderLines, CheckType = MenuItemCheckStyle.Checked },
|
||||
miHeaderUnderline = new MenuItem ("_HeaderUnderLine", "", () => ToggleUnderline()){Checked = tableView.Style.ShowHorizontalHeaderUnderline, CheckType = MenuItemCheckStyle.Checked },
|
||||
@@ -374,7 +376,14 @@ namespace UICatalog.Scenarios {
|
||||
tableView.Update ();
|
||||
}
|
||||
|
||||
private void ToggleAlwaysShowHeader ()
|
||||
private void ToggleShowHeaders ()
|
||||
{
|
||||
miShowHeaders.Checked = !miShowHeaders.Checked;
|
||||
tableView.Style.ShowHeaders = (bool)miShowHeaders.Checked;
|
||||
tableView.Update ();
|
||||
}
|
||||
|
||||
private void ToggleAlwaysShowHeaders ()
|
||||
{
|
||||
miAlwaysShowHeaders.Checked = !miAlwaysShowHeaders.Checked;
|
||||
tableView.Style.AlwaysShowHeaders = (bool)miAlwaysShowHeaders.Checked;
|
||||
|
||||
@@ -444,6 +444,86 @@ namespace Terminal.Gui.ViewsTests {
|
||||
Assert.Equal (new Point (8, 3), selected [5]);
|
||||
}
|
||||
|
||||
[Fact, AutoInitShutdown]
|
||||
public void TableView_ShowHeadersFalse_AndNoHeaderLines ()
|
||||
{
|
||||
var tv = GetABCDEFTableView (out _);
|
||||
tv.Bounds = new Rect (0, 0, 5, 5);
|
||||
|
||||
tv.Style.ShowHeaders = false;
|
||||
tv.Style.ShowHorizontalHeaderOverline = false;
|
||||
tv.Style.ShowHorizontalHeaderUnderline = false;
|
||||
|
||||
tv.Redraw (tv.Bounds);
|
||||
|
||||
string expected = @"
|
||||
│1│2│
|
||||
";
|
||||
TestHelpers.AssertDriverContentsAre (expected, output);
|
||||
}
|
||||
[Fact, AutoInitShutdown]
|
||||
public void TableView_ShowHeadersFalse_OverlineTrue ()
|
||||
{
|
||||
var tv = GetABCDEFTableView (out _);
|
||||
tv.Bounds = new Rect (0, 0, 5, 5);
|
||||
|
||||
tv.Style.ShowHeaders = false;
|
||||
tv.Style.ShowHorizontalHeaderOverline = true;
|
||||
tv.Style.ShowHorizontalHeaderUnderline = false;
|
||||
|
||||
tv.Redraw (tv.Bounds);
|
||||
|
||||
string expected = @"
|
||||
┌─┬─┐
|
||||
│1│2│
|
||||
";
|
||||
TestHelpers.AssertDriverContentsAre (expected, output);
|
||||
}
|
||||
[Fact, AutoInitShutdown]
|
||||
public void TableView_ShowHeadersFalse_UnderlineTrue ()
|
||||
{
|
||||
var tv = GetABCDEFTableView (out _);
|
||||
tv.Bounds = new Rect (0, 0, 5, 5);
|
||||
|
||||
tv.Style.ShowHeaders = false;
|
||||
tv.Style.ShowHorizontalHeaderOverline = false;
|
||||
tv.Style.ShowHorizontalHeaderUnderline = true;
|
||||
// Horizontal scrolling option is part of the underline
|
||||
tv.Style.ShowHorizontalScrollIndicators = true;
|
||||
|
||||
|
||||
tv.Redraw (tv.Bounds);
|
||||
|
||||
string expected = @"
|
||||
├─┼─►
|
||||
│1│2│
|
||||
";
|
||||
TestHelpers.AssertDriverContentsAre (expected, output);
|
||||
}
|
||||
|
||||
[Fact, AutoInitShutdown]
|
||||
public void TableView_ShowHeadersFalse_AllLines ()
|
||||
{
|
||||
var tv = GetABCDEFTableView (out _);
|
||||
tv.Bounds = new Rect (0, 0, 5, 5);
|
||||
|
||||
tv.Style.ShowHeaders = false;
|
||||
tv.Style.ShowHorizontalHeaderOverline = true;
|
||||
tv.Style.ShowHorizontalHeaderUnderline = true;
|
||||
// Horizontal scrolling option is part of the underline
|
||||
tv.Style.ShowHorizontalScrollIndicators = true;
|
||||
|
||||
|
||||
tv.Redraw (tv.Bounds);
|
||||
|
||||
string expected = @"
|
||||
┌─┬─┐
|
||||
├─┼─►
|
||||
│1│2│
|
||||
";
|
||||
TestHelpers.AssertDriverContentsAre (expected, output);
|
||||
}
|
||||
|
||||
[Fact, AutoInitShutdown]
|
||||
public void TableView_ExpandLastColumn_True ()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user