mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-11-04 10:35:27 +08:00 
			
		
		
		
	Adds ValueFormatter to ProgressBar
This commit is contained in:
		@@ -116,6 +116,43 @@ public static class BarChartExtensions
 | 
			
		||||
        return chart;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Sets the value formatter for the bar chart using culture info.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <param name="chart">The bar chart.</param>
 | 
			
		||||
    /// <param name="func">The value formatter function with culture info.</param>
 | 
			
		||||
    /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
    public static BarChart UseValueFormatter(this BarChart chart, Func<double, CultureInfo, string>? func)
 | 
			
		||||
    {
 | 
			
		||||
        if (chart is null)
 | 
			
		||||
        {
 | 
			
		||||
            throw new ArgumentNullException(nameof(chart));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        chart.ValueFormatter = func;
 | 
			
		||||
        return chart;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Sets the value formatter for the bar chart.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <param name="chart">The bar chart.</param>
 | 
			
		||||
    /// <param name="func">The value formatter to use.</param>
 | 
			
		||||
    /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
    public static BarChart UseValueFormatter(this BarChart chart, Func<double, string>? func)
 | 
			
		||||
    {
 | 
			
		||||
        if (chart is null)
 | 
			
		||||
        {
 | 
			
		||||
            throw new ArgumentNullException(nameof(chart));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        chart.ValueFormatter = func != null
 | 
			
		||||
            ? (value, _) => func(value)
 | 
			
		||||
            : null;
 | 
			
		||||
 | 
			
		||||
        return chart;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Sets the width of the bar chart.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,11 @@ public sealed class BarChart : Renderable, IHasCulture
 | 
			
		||||
    /// <remarks>Defaults to null, which corresponds to largest value in chart.</remarks>
 | 
			
		||||
    public double? MaxValue { get; set; }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Gets or sets the function used to format the values of the bar chart.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public Func<double, CultureInfo, string>? ValueFormatter { get; set; }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Initializes a new instance of the <see cref="BarChart"/> class.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
@@ -90,6 +95,7 @@ public sealed class BarChart : Renderable, IHasCulture
 | 
			
		||||
                    AsciiBar = '█',
 | 
			
		||||
                    ShowValue = ShowValues,
 | 
			
		||||
                    Culture = Culture,
 | 
			
		||||
                    ValueFormatter = ValueFormatter,
 | 
			
		||||
                });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ internal sealed class ProgressBar : Renderable, IHasCulture
 | 
			
		||||
    public bool ShowValue { get; set; }
 | 
			
		||||
    public bool IsIndeterminate { get; set; }
 | 
			
		||||
    public CultureInfo? Culture { get; set; }
 | 
			
		||||
    public Func<double, CultureInfo, string>? ValueFormatter { get; set; }
 | 
			
		||||
 | 
			
		||||
    public Style CompletedStyle { get; set; } = Color.Yellow;
 | 
			
		||||
    public Style FinishedStyle { get; set; } = Color.Green;
 | 
			
		||||
@@ -50,7 +51,7 @@ internal sealed class ProgressBar : Renderable, IHasCulture
 | 
			
		||||
        var barCount = Math.Max(0, (int)(width * (completedBarCount / MaxValue)));
 | 
			
		||||
 | 
			
		||||
        // Show value?
 | 
			
		||||
        var value = completedBarCount.ToString(Culture ?? CultureInfo.InvariantCulture);
 | 
			
		||||
        var value = ValueFormatter != null ? ValueFormatter(completedBarCount, Culture ?? CultureInfo.InvariantCulture) : completedBarCount.ToString(Culture ?? CultureInfo.InvariantCulture);
 | 
			
		||||
        if (ShowValue)
 | 
			
		||||
        {
 | 
			
		||||
            barCount = barCount - value.Length - 1;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user