using System; using System.IO; using System.Reactive.Linq; using DynamicData; using Intromat.Interfaces; using Intromat.Nodes; using ReactiveUI; namespace Intromat.ViewModels { public class ModuleViewModel : FolderViewModel, IFile { private bool _isDirty; public ModuleViewModel(ProjectViewModel parent, string name, string fullPath) : base(null, parent, name) { FullPath = fullPath; _isExpanded = true; this.WhenAnyValue(vm => vm.Parent) .Buffer(2, 1) .Select(b => (Previous: b[0], Current: b[1])) .Subscribe(t => { ((ProjectViewModel)t.Previous).Modules.Remove(this); ((ProjectViewModel)t.Current).Modules.Remove(this); }); } public static ModuleViewModel CreateDefault(MainViewModel mainVm, ProjectViewModel parent, string fullPath) { var module = new ModuleViewModel(parent, Path.GetFileName(fullPath)!, fullPath); var mainDocument = DocumentViewModel.CreateDefault(mainVm, module, module, "Main"); module.Files.Add(mainDocument); module.Files.Add(ShaderFileViewModel.CreateDefault(mainVm, module, module, "Code")); var entryPoint = new MainEntryPointNode { CanBeRemovedByUser = false }; mainDocument.MainNetwork.Nodes.Add(entryPoint); return module; } public override string FullPath { get; } public bool IsDirty { get => _isDirty; set => this.RaiseAndSetIfChanged(ref _isDirty, value); } } }