(#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() .FullSize()
.Width(60) .Width(60)
.ShowPercentage() .ShowPercentage()
.WithValueColor(Color.Orange1)
.AddItem("SCSS", 37, Color.Red) .AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue) .AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green) .AddItem("C#", 22.6, Color.Green)

View File

@ -297,4 +297,21 @@ public static class BreakdownChartExtensions
chart.Compact = compact; chart.Compact = compact;
return chart; 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> /// </summary>
public Func<double, CultureInfo, string>? ValueFormatter { get; set; } 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> /// <summary>
/// Gets or sets a value indicating whether or not the /// Gets or sets a value indicating whether or not the
/// chart and tags should be rendered in compact mode. /// chart and tags should be rendered in compact mode.
@ -94,6 +99,7 @@ public sealed class BreakdownChart : Renderable, IHasCulture, IExpandable
Culture = Culture, Culture = Culture,
ShowTagValues = ShowTagValues, ShowTagValues = ShowTagValues,
ValueFormatter = ValueFormatter, ValueFormatter = ValueFormatter,
ValueColor = ValueColor,
}); });
} }

View File

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