Forge
csharpdeeb25a2
1using System.Globalization;
2
3namespace CascadeIDE.Services.Presentation;
4
5/// <summary>
6/// Колонки сетки окна-хоста сплита P+M (одна группа <c>(xP+yM)</c>), без лобового; порядок колонок — как в строке презентации.
7/// </summary>
8public 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