From 4907654841771daf13077233e0c5b93418322f1c Mon Sep 17 00:00:00 2001 From: ig Date: Fri, 25 Aug 2023 17:17:41 +0200 Subject: [PATCH] add support for unknown/nullable flows --- csharp/App/SaliMax/src/Flow.cs | 48 +++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/csharp/App/SaliMax/src/Flow.cs b/csharp/App/SaliMax/src/Flow.cs index 763c7cee2..f598b4fe2 100644 --- a/csharp/App/SaliMax/src/Flow.cs +++ b/csharp/App/SaliMax/src/Flow.cs @@ -7,38 +7,50 @@ 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 = "^"; + private static readonly String RightArrowChar = ">"; + private static readonly String LeftArrowChar = "<"; + private static readonly String DownArrowChar = "V"; + private static readonly String UpArrowChar = "^"; + private static readonly String UnknownArrowChar = "?"; - public static TextBlock Horizontal(Unit amount) => Horizontal(amount, 10); + public static TextBlock Horizontal(Unit? amount) => Horizontal(amount, 10); - public static TextBlock Horizontal(Unit amount, Int32 width) + public static TextBlock Horizontal(Unit? amount, Int32 width) { - var label = amount.ToDisplayString(); - var arrowChar = amount.Value < 0 ? LeftArrowChar : RightArrowChar; + var label = amount?.ToDisplayString() ?? ""; + + var arrowChar = amount switch + { + { Value: < 0 } => LeftArrowChar, + { Value: >= 0 } => RightArrowChar, + _ => UnknownArrowChar, + }; + + //var arrowChar = amount.Value < 0 ? LeftArrowChar : RightArrowChar; var arrow = Enumerable.Repeat(arrowChar, width).Join(); // note : appending "fake label" below to make it vertically symmetric return TextBlock.AlignCenterHorizontal(label, arrow, ""); } - public static TextBlock Vertical(Unit amount) => Vertical(amount, 4); + public static TextBlock Vertical(Unit? amount) => Vertical(amount, 4); [SuppressMessage("ReSharper", "PossibleMultipleEnumeration")] [SuppressMessage("ReSharper", "CoVariantArrayConversion")] - public static TextBlock Vertical(Unit amount, Int32 height) + public static TextBlock Vertical(Unit? amount, Int32 height) { - var label = amount.ToDisplayString(); - var arrowChar = amount.Value < 0 ? UpArrowChar : DownArrowChar; - var halfArrow = Enumerable.Repeat(arrowChar, height/2); + var label = amount?.ToDisplayString() ?? UnknownArrowChar; + var arrowChar = amount switch + { + { Value: < 0 } => UpArrowChar, + { Value: >= 0 } => DownArrowChar, + _ => UnknownArrowChar, + }; - var lines = halfArrow - .Append(label) - .Concat(halfArrow) - .ToArray(height / 2 * 2 + 1); + // var arrowChar = amount is null ? UnknownArrowChar + // : amount.Value < 0 ? UpArrowChar + // : DownArrowChar; - return TextBlock.AlignCenterHorizontal(lines); + return TextBlock.AlignCenterHorizontal(arrowChar, arrowChar, label, arrowChar, arrowChar); } }