Files
bluflame/intromat/Intromat/ViewModels/ModuleViewModel.cs
2026-04-18 22:31:51 +02:00

51 lines
1.6 KiB
C#

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);
}
}
}