csharpdeeb25a2 | 1 | using System.Globalization; |
| 2 | |
| 3 | namespace CascadeIDE.Services.Presentation; |
| 4 | |
| 5 | /// <summary> |
| 6 | /// Колонки сетки окна-хоста сплита P+M (одна группа <c>(xP+yM)</c>), без лобового; порядок колонок — как в строке презентации. |
| 7 | /// </summary> |
| 8 | public static class PresentationPmSplitHostColumnBuilder |
| 9 | { |
| 10 | private const string DefaultThreeColumn = "220,4,340"; |
| 11 | |
| 12 | public static string Build(PresentationParseResult parse, int pmScreenIndex) |
| 13 | { |
| 14 | if (!parse.IsSuccess || parse.Screens.Count == 0) |
| 15 | return DefaultThreeColumn; |
| 16 | |
| 17 | var idx = Math.Clamp(pmScreenIndex, 0, parse.Screens.Count - 1); |
| 18 | var screen = parse.Screens[idx]; |
| 19 | if (screen.Count != 2) |
| 20 | return DefaultThreeColumn; |
| 21 | |
| 22 | if (!PresentationZoneWeights.TryNormalize(screen, out var normalized) || normalized.Count != 2) |
| 23 | return DefaultThreeColumn; |
| 24 | |
| 25 | var w0 = normalized[0]; |
| 26 | var w1 = normalized[1]; |
| 27 | return $"{FormatWeight(w0)}*,4,{FormatWeight(w1)}*"; |
| 28 | } |
| 29 | |
| 30 | private static string FormatWeight(double w) => w.ToString("0.########", CultureInfo.InvariantCulture); |
| 31 | } |
| 32 | |
View only · write via MCP/CIDE