| 1 | using CascadeIDE.Features.UiChrome; |
| 2 | using CascadeIDE.Models; |
| 3 | using CascadeIDE.Models.Shell; |
| 4 | using CascadeIDE.ViewModels; |
| 5 | using CommunityToolkit.Mvvm.ComponentModel; |
| 6 | |
| 7 | namespace CascadeIDE.Features.Shell; |
| 8 | |
| 9 | /// <summary> |
| 10 | /// Состояние оболочки главного окна: регионы MainGrid, страница MFD, режим UI, сборка на полосе. |
| 11 | /// <see cref="MainWindowViewModel"/> — композитор (прокси + presentation/reactive side-effects). |
| 12 | /// </summary> |
| 13 | public sealed partial class ShellChromeViewModel : ViewModelBase |
| 14 | { |
| 15 | private readonly MainWindowViewModel _host; |
| 16 | |
| 17 | public ShellChromeViewModel(MainWindowViewModel host) => _host = host; |
| 18 | |
| 19 | /// <summary>Bootstrap из настроек до первой UI-привязки (без side-effects host).</summary> |
| 20 | internal void ApplyBootstrapFromSettings(CascadeIdeSettings settings) |
| 21 | { |
| 22 | #pragma warning disable MVVMTK0034 |
| 23 | _isPfdRegionExpanded = settings.Workspace.PfdExpanded; |
| 24 | _isTerminalVisible = settings.Workspace.ShowTerminal; |
| 25 | _isGitPanelVisible = settings.Workspace.ShowGit; |
| 26 | _isInstrumentationDockVisible = settings.Workspace.ShowInstrumentation; |
| 27 | _uiMode = UiChromeViewModel.NormalizeUiMode(settings.Workspace.Mode); |
| 28 | #pragma warning restore MVVMTK0034 |
| 29 | } |
| 30 | |
| 31 | /// <summary> |
| 32 | /// Intent геометрии: регион Mfd в <c>MainGrid</c> развёрнут (ширина по режиму) или свёрнут. |
| 33 | /// Страница «Чат» — <see cref="MfdShellPage.Chat"/> через <see cref="CurrentMfdShellPage"/>, отдельно. |
| 34 | /// </summary> |
| 35 | [ObservableProperty] |
| 36 | private bool _isMfdRegionExpanded = true; |
| 37 | |
| 38 | /// <summary> |
| 39 | /// Intent геометрии: регион Pfd в <c>MainGrid</c> развёрнут (ширина по workspace/режиму) или свёрнут. |
| 40 | /// </summary> |
| 41 | [ObservableProperty] |
| 42 | private bool _isPfdRegionExpanded = true; |
| 43 | |
| 44 | /// <summary>Страница «Терминал» в колонке MFD (меню Вид → Терминал).</summary> |
| 45 | [ObservableProperty] |
| 46 | private bool _isTerminalVisible; |
| 47 | |
| 48 | /// <summary>Страница «Git» в колонке MFD (меню Вид → Git).</summary> |
| 49 | [ObservableProperty] |
| 50 | private bool _isGitPanelVisible; |
| 51 | |
| 52 | /// <summary>Страница «Вывод сборки» в колонке MFD.</summary> |
| 53 | [ObservableProperty] |
| 54 | private bool _isBuildOutputVisible; |
| 55 | |
| 56 | /// <summary>Док инструментирования в колонке MFD.</summary> |
| 57 | [ObservableProperty] |
| 58 | private bool _isInstrumentationDockVisible = true; |
| 59 | |
| 60 | /// <summary>Какая страница показана в оболочке Mfd.</summary> |
| 61 | [ObservableProperty] |
| 62 | private MfdShellPage _currentMfdShellPage = MfdShellPage.Terminal; |
| 63 | |
| 64 | [ObservableProperty] |
| 65 | private CommandPaletteHost _commandPaletteHost = CommandPaletteHost.MainWindow; |
| 66 | |
| 67 | [ObservableProperty] |
| 68 | private string _uiMode = "Balanced"; |
| 69 | |
| 70 | [ObservableProperty] |
| 71 | private int _editorGroupCount = 1; |
| 72 | |
| 73 | /// <summary>Снимок раскладки UI (JSON), полоса Workspace Health в Power.</summary> |
| 74 | [ObservableProperty] |
| 75 | private string _workspaceSnapshotJson = ""; |
| 76 | |
| 77 | [ObservableProperty] |
| 78 | private bool _isBuilding; |
| 79 | } |
| 80 | |