| 1 | using CascadeIDE.ViewModels; |
| 2 | using CommunityToolkit.Mvvm.ComponentModel; |
| 3 | |
| 4 | namespace CascadeIDE.Features.Editor; |
| 5 | |
| 6 | /// <summary> |
| 7 | /// Сессия активного редактора: путь, текст, выделение, флаг загрузки. |
| 8 | /// <see cref="MainWindowViewModel"/> — композитор (прокси-свойства + побочные эффекты HUD/LOC/map). |
| 9 | /// </summary> |
| 10 | public 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 | |