Forge
csharpdeeb25a2
1using CascadeIDE.Contracts;
2using CascadeIDE.Features.UiChrome;
3using CascadeIDE.Models;
4
5namespace CascadeIDE.Features.UiChrome.Application;
6
7/// <summary>План применения раскладки режима UI (без присваивания observable VM).</summary>
8[PresentationProjection("ui mode layout apply plan")]
9public static class UiModeLayoutApplyProjection
10{
11 public sealed record Plan(UiModeLayoutSpec Spec, string NormalizedMode, bool Persist);
12
13 public static Plan Create(string? mode, bool persist)
14 {
15 var normalized = UiChromeViewModel.NormalizeUiMode(mode);
16 return new Plan(UiModeCatalog.GetSpec(normalized), normalized, persist);
17 }
18
19 public static MfdShellPage ResolveMfdPageAfterApply(Plan plan, MfdShellPage currentPage) =>
20 plan.Spec.SelectTerminalTabWhenTerminalShown && plan.Spec.TerminalVisible
21 ? MfdShellPage.Terminal
22 : currentPage;
23
24 public static void PersistWorkspaceMode(
25 Plan plan,
26 bool pfdRegionExpanded,
27 bool terminalVisible,
28 CascadeIdeSettings settings,
29 Action saveSettingsIfChanged)
30 {
31 if (!plan.Persist)
32 return;
33
34 settings.Workspace.Mode = plan.NormalizedMode;
35 settings.Workspace.PfdExpanded = pfdRegionExpanded;
36 settings.Workspace.ShowTerminal = terminalVisible;
37 saveSettingsIfChanged();
38 }
39}
40
View only · write via MCP/CIDE