2023-06-20 12:26:48 +00:00
|
|
|
using System.Diagnostics.CodeAnalysis;
|
|
|
|
using InnovEnergy.Lib.Units;
|
|
|
|
using InnovEnergy.Lib.Utils;
|
|
|
|
|
|
|
|
|
|
|
|
namespace InnovEnergy.App.SaliMax;
|
|
|
|
|
|
|
|
public static class Flow
|
|
|
|
{
|
|
|
|
private static readonly String RightArrowChar = ">";
|
|
|
|
private static readonly String LeftArrowChar = "<";
|
|
|
|
private static readonly String DownArrowChar = "V";
|
|
|
|
private static readonly String UpArrowChar = "^";
|
|
|
|
|
2023-08-16 13:15:45 +00:00
|
|
|
public static TextBlock Horizontal(Unit amount) => Horizontal(amount, 10);
|
|
|
|
|
|
|
|
public static TextBlock Horizontal(Unit amount, Int32 width)
|
2023-06-20 12:26:48 +00:00
|
|
|
{
|
2023-06-27 15:02:56 +00:00
|
|
|
var label = amount.ToDisplayString();
|
2023-06-20 12:26:48 +00:00
|
|
|
var arrowChar = amount.Value < 0 ? LeftArrowChar : RightArrowChar;
|
|
|
|
var arrow = Enumerable.Repeat(arrowChar, width).Join();
|
|
|
|
|
|
|
|
// note : appending "fake label" below to make it vertically symmetric
|
2023-07-03 13:47:34 +00:00
|
|
|
return TextBlock.AlignCenterHorizontal(label, arrow, "");
|
2023-06-20 12:26:48 +00:00
|
|
|
}
|
2023-08-16 13:15:45 +00:00
|
|
|
|
|
|
|
public static TextBlock Vertical(Unit amount) => Vertical(amount, 4);
|
|
|
|
|
2023-06-20 12:26:48 +00:00
|
|
|
[SuppressMessage("ReSharper", "PossibleMultipleEnumeration")]
|
|
|
|
[SuppressMessage("ReSharper", "CoVariantArrayConversion")]
|
2023-08-16 13:15:45 +00:00
|
|
|
public static TextBlock Vertical(Unit amount, Int32 height)
|
2023-06-20 12:26:48 +00:00
|
|
|
{
|
2023-06-27 15:02:56 +00:00
|
|
|
var label = amount.ToDisplayString();
|
2023-06-20 12:26:48 +00:00
|
|
|
var arrowChar = amount.Value < 0 ? UpArrowChar : DownArrowChar;
|
|
|
|
var halfArrow = Enumerable.Repeat(arrowChar, height/2);
|
|
|
|
|
|
|
|
var lines = halfArrow
|
2023-08-16 13:15:45 +00:00
|
|
|
.Append(label)
|
|
|
|
.Concat(halfArrow)
|
|
|
|
.ToArray(height / 2 * 2 + 1);
|
2023-06-20 12:26:48 +00:00
|
|
|
|
2023-07-03 13:47:34 +00:00
|
|
|
return TextBlock.AlignCenterHorizontal(lines);
|
2023-06-20 12:26:48 +00:00
|
|
|
}
|
|
|
|
}
|