Innovenergy_trunk/csharp/App/SaliMax/src/AsciiArt.cs

79 lines
1.9 KiB
C#

using InnovEnergy.Lib.Units;
using InnovEnergy.Lib.Utils;
namespace InnovEnergy.App.SaliMax;
public static class AsciiArt
{
public static String CreateBox(params Object[] elements)
{
var aligned = elements
.Select(e => e.ToString()!)
.JoinLines()
.AlignLeft();
var w = aligned.Width();
var line = "".PadRight(w + 2, '─');
var top = "┌" + line + "┐";
var bottom = "└" + line + "┘";
return aligned
.SplitLines()
.Select(l => l.SurroundWith(" "))
.Select(l => l.SurroundWith("│"))
.Prepend(top)
.Append(bottom)
.JoinLines();
}
public static String CreateHorizontalArrow(Decimal value, String separator)
{
var valueToString = " " + value.W();
if (value == 0)
{
valueToString = "";
}
var contentWidth = separator.Length;
var horizontal = "".PadRight(contentWidth, ' ');
var v = valueToString.PadRight(contentWidth);
var s = separator.PadRight(contentWidth);
return StringUtils.JoinLines(
horizontal,
v,
s,
horizontal
);
}
public static String CreateTransitionPadLeft(String value, String separator)
{
var contentWidth = separator.Length + 2;
var horizontal = "".PadLeft(contentWidth, ' ');
var v = value.PadLeft(contentWidth);
var s = separator.PadLeft(contentWidth);
return StringUtils.JoinLines(
horizontal,
v,
s,
horizontal
);
}
public static String CreateVerticalArrow(Decimal power, Int32 width = 0)
{
var flow = "V".NewLine() + "V".NewLine() + power.W().NewLine() + "V".NewLine() + "V";
return flow.AlignCenterHorizontal(width);
}
}