51 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|