changed expand color settings to use ColorScheme

This commit is contained in:
tznind
2020-12-18 18:52:09 +00:00
parent 64042132ed
commit 51aefce32b
2 changed files with 44 additions and 50 deletions

View File

@@ -7,7 +7,7 @@ using System.Linq;
namespace Terminal.Gui {
/// <summary>
/// Interface to implement when you want <see cref="TreeView{T}"/> to automatically determine children for your class
/// Interface to implement when you want the regular (non generic) <see cref="TreeView"/> to automatically determine children for your class (without having to specify a <see cref="ITreeBuilder{T}"/>)
/// </summary>
public interface ITreeNode
{
@@ -25,7 +25,7 @@ namespace Terminal.Gui {
}
/// <summary>
/// Simple class for representing nodes of a <see cref="TreeView{T}"/>.
/// Simple class for representing nodes, use with regular (non generic) <see cref="TreeView"/>.
/// </summary>
public class TreeNode : ITreeNode
{
@@ -80,6 +80,7 @@ namespace Terminal.Gui {
/// <summary>
/// Returns true/false for whether a model has children. This method should be implemented when <see cref="GetChildren"/> is an expensive operation otherwise <see cref="SupportsCanExpand"/> should return false (in which case this method will not be called)
/// </summary>
/// <remarks>Only implement this method if you have a very fast way of determining whether an object can have children e.g. checking a Type (directories can always be expanded)</remarks>
/// <param name="model"></param>
/// <returns></returns>
bool CanExpand(T model);
@@ -93,7 +94,7 @@ namespace Terminal.Gui {
}
/// <summary>
/// Abstract implementation of <see cref="ITreeBuilder{T}"/>
/// Abstract implementation of <see cref="ITreeBuilder{T}"/>.
/// </summary>
public abstract class TreeBuilder<T> : ITreeBuilder<T> {
@@ -101,7 +102,7 @@ namespace Terminal.Gui {
public bool SupportsCanExpand { get; protected set;} = false;
/// <summary>
/// Override this method to return a rapid answer as to whether <see cref="GetChildren(T)"/> returns results.
/// Override this method to return a rapid answer as to whether <see cref="GetChildren(T)"/> returns results. If you are implementing this method ensure you passed true in base constructor or set <see cref="SupportsCanExpand"/>
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
@@ -250,12 +251,6 @@ namespace Terminal.Gui {
/// Symbol to use for branch nodes that can be expanded to indicate this to the user. Defaults to '+'. Set to null to hide
/// </summary>
public Rune? ExpandableSymbol {get;set;} = '+';
/// <summary>
/// Optional color scheme to use when rendering <see cref="ExpandableSymbol"/> (defaults to null)
/// </summary>
public Attribute? ExpandableSymbolColor {get;set;}
/// <summary>
/// Symbol to use for branch nodes that can be collapsed (are currently expanded). Defaults to '-'. Set to null to hide
@@ -263,9 +258,14 @@ namespace Terminal.Gui {
public Rune? CollapseableSymbol {get;set;} = '-';
/// <summary>
/// Optional color scheme to use when rendering <see cref="CollapseableSymbol"/> (defaults to null)
/// Set to true to highlight expand/collapse symbols in hot key color
/// </summary>
public Attribute? CollapseableSymbolColor {get;set;}
public bool ColorExpandSymbol {get;set;}
/// <summary>
/// Invert console colours used to render the expand symbol
/// </summary>
public bool InvertExpandSymbolColors {get;set;}
}
@@ -790,14 +790,13 @@ namespace Terminal.Gui {
{
// true if the current line of the tree is the selected one and control has focus
bool isSelected = tree.SelectedObject == Model && tree.HasFocus;
Attribute lineColor = isSelected? colorScheme.HotFocus : colorScheme.Normal;
Attribute lineColor = isSelected? colorScheme.Focus : colorScheme.Normal;
driver.SetAttribute(lineColor);
// Everything on line before the expansion run and branch text
Rune[] prefix = GetLinePrefix(driver).ToArray();
Rune expansion = GetExpandableSymbol(driver);
Attribute? expansionColor = GetExpandableSymbolColor();
string lineBody = tree.AspectGetter(Model);
var remainingWidth = availableWidth - (prefix.Length + 1 + lineBody.Length);
@@ -807,9 +806,21 @@ namespace Terminal.Gui {
foreach(Rune r in prefix)
driver.AddRune(r);
// if it is not the curerntly selected line render the expansion symbol in the appropriate color scheme
if(!isSelected && expansionColor.HasValue)
driver.SetAttribute(expansionColor.Value);
// pick color for expanded symbol
if(tree.Style.ColorExpandSymbol || tree.Style.InvertExpandSymbolColors)
{
Attribute color;
if(tree.Style.ColorExpandSymbol)
color = isSelected ? tree.ColorScheme.HotFocus : tree.ColorScheme.HotNormal;
else
color = lineColor;
if(tree.Style.InvertExpandSymbolColors)
color = new Attribute(color.Background,color.Foreground);
driver.SetAttribute(color);
}
driver.AddRune(expansion);
@@ -890,21 +901,6 @@ namespace Terminal.Gui {
return leafSymbol;
}
/// <summary>
/// Returns an appropriate color according to the <see cref="TreeStyle"/> for displaying the <see cref="GetExpandableSymbol(ConsoleDriver)"/>
/// </summary>
/// <returns></returns>
public Attribute? GetExpandableSymbolColor()
{
if(IsExpanded)
return tree.Style.CollapseableSymbolColor;
if(CanExpand())
return tree.Style.ExpandableSymbolColor;
return null;
}
/// <summary>
/// Returns true if the current branch can be expanded according to the <see cref="TreeBuilder{T}"/> or cached children already fetched
/// </summary>

View File

@@ -28,6 +28,7 @@ namespace UICatalog.Scenarios {
private MenuItem miArrowSymbols;
private MenuItem miNoSymbols;
private MenuItem miColoredSymbols;
private MenuItem miInvertSymbols;
private Terminal.Gui.Attribute green;
private Terminal.Gui.Attribute red;
@@ -50,6 +51,7 @@ namespace UICatalog.Scenarios {
miArrowSymbols = new MenuItem ("_ArrowSymbols", "", () => SetExpandableSymbols('>','v')){Checked = false, CheckType = MenuItemCheckStyle.Radio},
miNoSymbols = new MenuItem ("_NoSymbols", "", () => SetExpandableSymbols(null,null)){Checked = false, CheckType = MenuItemCheckStyle.Radio},
miColoredSymbols = new MenuItem ("_ColoredSymbols", "", () => ShowColoredExpandableSymbols()){Checked = false, CheckType = MenuItemCheckStyle.Checked},
miInvertSymbols = new MenuItem ("_InvertSymbols", "", () => InvertExpandableSymbols()){Checked = false, CheckType = MenuItemCheckStyle.Checked},
}),
});
Top.Add (menu);
@@ -152,26 +154,22 @@ namespace UICatalog.Scenarios {
{
miColoredSymbols.Checked = !miColoredSymbols.Checked;
ShowColoredExpandableSymbols(treeViewFiles);
ShowColoredExpandableSymbols(treeViewNodes);
treeViewFiles.Style.ColorExpandSymbol = miColoredSymbols.Checked;
treeViewFiles.SetNeedsDisplay();
treeViewNodes.Style.ColorExpandSymbol = miColoredSymbols.Checked;
treeViewNodes.SetNeedsDisplay();
}
private void InvertExpandableSymbols(){
miInvertSymbols.Checked = !miInvertSymbols.Checked;
treeViewFiles.Style.InvertExpandSymbolColors = miInvertSymbols.Checked;
treeViewFiles.SetNeedsDisplay();
treeViewNodes.Style.InvertExpandSymbolColors = miInvertSymbols.Checked;
treeViewNodes.SetNeedsDisplay();
}
private void ShowColoredExpandableSymbols (ITreeView treeView)
{
// Toggle Green expand symbols
if(miColoredSymbols.Checked)
treeView.Style.ExpandableSymbolColor = green;
else
treeView.Style.ExpandableSymbolColor = null; //clear it
// Toggle Red collapse symbols
if(miColoredSymbols.Checked)
treeView.Style.CollapseableSymbolColor = red;
else
treeView.Style.CollapseableSymbolColor = null; //clear it
treeView.SetNeedsDisplay();
}
private ITreeNode CreateSimpleRoot ()
{