using System.Collections.ObjectModel; using System.IO; using Intromat.Interfaces; using ReactiveUI; namespace Intromat.ViewModels { public class ProjectViewModel : ReactiveObject, IFile, ITreeItem { private string _fullPath; private bool _isDirty; private string _name; private bool _isExpanded; private bool _isSelected; public ProjectViewModel(string name, string fullPath) { _name = name; _fullPath = fullPath; TreeRoot = new[] { this }; _isExpanded = true; } public string FullPath { get => _fullPath; set => this.RaiseAndSetIfChanged(ref _fullPath, value); } public string Name { get => _name; set => this.RaiseAndSetIfChanged(ref _name, value); } public bool IsExpanded { get => _isExpanded; set => this.RaiseAndSetIfChanged(ref _isExpanded, value); } public bool IsSelected { get => _isSelected; set => this.RaiseAndSetIfChanged(ref _isSelected, value); } public ProjectViewModel[] TreeRoot { get; init; } public ObservableCollection Modules { get; } = new(); public bool IsDirty { get => _isDirty; set => this.RaiseAndSetIfChanged(ref _isDirty, value); } public static ProjectViewModel CreateDefault(MainViewModel mainVm, string fullPath, string name = "Project") { var project = new ProjectViewModel(name, Path.GetFullPath(fullPath)); var directory = Path.GetDirectoryName(fullPath)!; project.Modules.Add(ModuleViewModel.CreateDefault(mainVm, project, Path.Combine(directory, "Module1"))); return project; } } }