Forge
csharpdeeb25a2
1using CascadeIDE.ViewModels;
2using CommunityToolkit.Mvvm.ComponentModel;
3
4namespace CascadeIDE.Features.Editor;
5
6/// <summary>
7/// Сессия активного редактора: путь, текст, выделение, флаг загрузки.
8/// <see cref="MainWindowViewModel"/> — композитор (прокси-свойства + побочные эффекты HUD/LOC/map).
9/// </summary>
10public sealed partial class EditorWorkspaceViewModel : ViewModelBase
11{
12 private readonly MainWindowViewModel _host;
13
14 public EditorWorkspaceViewModel(MainWindowViewModel host) => _host = host;
15
16 [ObservableProperty]
17 private string? _currentFilePath;
18
19 [ObservableProperty]
20 private bool _isLoadingCurrentFile;
21
22 [ObservableProperty]
23 private string _editorText = "";
24
25 /// <summary>Запрос выделения: начальный offset. View применит к редактору и сбросит.</summary>
26 [ObservableProperty]
27 private int? _editorSelectionStart;
28
29 /// <summary>Запрос выделения: длина. View применит к редактору и сбросит.</summary>
30 [ObservableProperty]
31 private int? _editorSelectionLength;
32
33 /// <summary>True, если открыт файл .md или .markdown — показываем превью.</summary>
34 public bool IsMarkdownFile =>
35 !string.IsNullOrEmpty(CurrentFilePath)
36 && (CurrentFilePath.EndsWith(".md", StringComparison.OrdinalIgnoreCase)
37 || CurrentFilePath.EndsWith(".markdown", StringComparison.OrdinalIgnoreCase));
38
39 /// <summary>Показывать панель превью Markdown только когда контент уже загружен.</summary>
40 public bool IsMarkdownPreviewVisible => IsMarkdownFile && !IsLoadingCurrentFile;
41
42 partial void OnCurrentFilePathChanged(string? value) => _host.OnEditorCurrentFilePathChanged();
43
44 partial void OnEditorTextChanged(string value) => _host.OnEditorTextChanged(value);
45
46 partial void OnIsLoadingCurrentFileChanged(bool value) => _host.OnEditorIsLoadingCurrentFileChanged();
47}
48
View only · write via MCP/CIDE