(#684) Enable setting the color of the values in a BreakdownChart

This commit is contained in:
Nils Andresen 2023-09-15 20:12:06 +02:00
parent 037e109699
commit bef21e8a21
No known key found for this signature in database
GPG Key ID: 0EAFED177E6A41E9
6 changed files with 45 additions and 1 deletions

View File

@ -23,6 +23,7 @@ public static class Program
.FullSize()
.Width(60)
.ShowPercentage()
.WithValueColor(Color.Orange1)
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)

View File

@ -297,4 +297,21 @@ public static class BreakdownChartExtensions
chart.Compact = compact;
return chart;
}
/// <summary>
/// Sets the <see cref="BreakdownChart.ValueColor"/>.
/// </summary>
/// <param name="chart">The breakdown chart.</param>
/// <param name="color">The <see cref="Color"/> to set.</param>
/// <returns>The same instance so that multiple calls can be chained.</returns>
public static BreakdownChart WithValueColor(this BreakdownChart chart, Color color)
{
if (chart is null)
{
throw new ArgumentNullException(nameof(chart));
}
chart.ValueColor = color;
return chart;
}
}

View File

@ -30,6 +30,11 @@ public sealed class BreakdownChart : Renderable, IHasCulture, IExpandable
/// </summary>
public Func<double, CultureInfo, string>? ValueFormatter { get; set; }
/// <summary>
/// Gets or sets the Color in which the values will be shown.
/// </summary>
public Color ValueColor { get; set; } = Color.Grey;
/// <summary>
/// Gets or sets a value indicating whether or not the
/// chart and tags should be rendered in compact mode.
@ -94,6 +99,7 @@ public sealed class BreakdownChart : Renderable, IHasCulture, IExpandable
Culture = Culture,
ShowTagValues = ShowTagValues,
ValueFormatter = ValueFormatter,
ValueColor = ValueColor,
});
}

View File

@ -8,6 +8,7 @@ internal sealed class BreakdownTags : Renderable
public CultureInfo? Culture { get; set; }
public bool ShowTagValues { get; set; } = true;
public Func<double, CultureInfo, string>? ValueFormatter { get; set; }
public Color ValueColor { get; set; } = Color.Grey;
public BreakdownTags(List<IBreakdownChartItem> data)
{
@ -55,8 +56,9 @@ internal sealed class BreakdownTags : Renderable
if (ShowTagValues)
{
return string.Format(culture, "{0} [grey]{1}[/]",
return string.Format(culture, "{0} [{1}]{2}[/]",
item.Label.EscapeMarkup(),
ValueColor.ToMarkup(),
formatter(item.Value, culture));
}

View File

@ -0,0 +1,3 @@
████████████████████████████████████████████████████████████
■ SCSS 37 ■ HTML 28.3 ■ C# 22.6 ■ JavaScript 6
■ Ruby 6 ■ Shell 0.1

View File

@ -127,6 +127,21 @@ public sealed class BreakdownChartTests
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("ValueColor")]
public async Task Should_Render_Correct_ValueColor()
{
// Given
var console = new TestConsole().EmitAnsiSequences();
var chart = Fixture.GetChart().Width(60).WithValueColor(Color.Red);
// When
console.Write(chart);
// Then
await Verifier.Verify(console.Output);
}
public static class Fixture
{
public static BreakdownChart GetChart()