Forge
csharpdeeb25a2
1namespace CascadeIDE.Features.UiChrome;
2
3/// <summary>Какую встроенную тему подставить при входе в режим.</summary>
4public enum UiModeThemeSlot
5{
6 CursorLike,
7 Dark,
8 PowerCockpit,
9}
10
11/// <summary>Снимок раскладки панелей и темы для одного нормализованного режима (<see cref="UiChromeViewModel.NormalizeUiMode"/>).</summary>
12public sealed record UiModeLayoutSpec(
13 bool PfdRegionExpanded,
14 bool BuildOutputVisible,
15 bool TerminalVisible,
16 bool MfdRegionExpanded,
17 int EditorGroupCount,
18 UiModeThemeSlot ThemeSlot,
19 bool SelectTerminalTabWhenTerminalShown,
20 bool InstrumentationDockVisible);
21
22/// <summary>
23/// Встроенный режим UI: порядок в списке UI, раскладка при <c>ApplyUiModeLayout</c>, ширина региона Mfd.
24/// Шипнутый бандл <c>UiModes/index.toml</c> задаёт id (в т.ч. <c>Flight</c>, <c>Editor</c>); неизвестный id в спеке — как Flight.
25/// </summary>
26public static class UiModeLayoutRegistry
27{
28 /// <summary>Стабильный порядок пункта «Режим интерфейса» и комбо.</summary>
29 public static readonly IReadOnlyList<string> OrderedModeIds = ["Flight"];
30
31 private static readonly Dictionary<string, UiModeLayoutSpec> ByNormalizedMode =
32 new(StringComparer.OrdinalIgnoreCase)
33 {
34 // Базовая «рабочая» раскладка (раньше Balanced): терминал/сборка, два редактора, MFD.
35 ["Flight"] = new UiModeLayoutSpec(
36 PfdRegionExpanded: true,
37 BuildOutputVisible: true,
38 TerminalVisible: true,
39 MfdRegionExpanded: true,
40 EditorGroupCount: 2,
41 ThemeSlot: UiModeThemeSlot.CursorLike,
42 SelectTerminalTabWhenTerminalShown: false,
43 InstrumentationDockVisible: true),
44 };
45
46 /// <summary>Спека для режима; неизвестный режим — как Flight.</summary>
47 public static UiModeLayoutSpec Get(string normalizedMode) =>
48 ByNormalizedMode.TryGetValue(normalizedMode, out var spec)
49 ? spec
50 : ByNormalizedMode["Flight"];
51
52 /// <summary>Ширина развёрнутого региона Mfd в пикселях для нормализованного режима (с учётом <c>workspace.toml</c> через <see cref="UiWorkspaceLayoutRuntimeMetrics"/>).</summary>
53 public static int GetMfdRegionExpandedWidthPixels(string normalizedMode) => normalizedMode switch
54 {
55 "Flight" => UiWorkspaceLayoutRuntimeMetrics.MfdRegionExpandedAgentChatWidthPixels,
56 _ => UiWorkspaceLayoutRuntimeMetrics.MfdRegionExpandedDefaultWidthPixels,
57 };
58}
59
View only · write via MCP/CIDE