68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
using System.Reactive.Linq;
|
|
using Intromat.Views;
|
|
using NodeNetwork.Toolkit.BreadcrumbBar;
|
|
using ReactiveUI;
|
|
using Splat;
|
|
|
|
namespace Intromat.ViewModels
|
|
{
|
|
public sealed class DocumentViewModel : FileViewModel
|
|
{
|
|
private readonly ObservableAsPropertyHelper<ReactiveObject> _currentViewModel;
|
|
private readonly CodeGenNetworkViewModel _mainNetwork;
|
|
|
|
static DocumentViewModel()
|
|
{
|
|
Locator.CurrentMutable.Register(() => new DocumentView(), typeof(IViewFor<DocumentViewModel>));
|
|
}
|
|
|
|
public static DocumentViewModel CreateDefault(MainViewModel mainVm, ModuleViewModel module, FolderViewModel parent, string name)
|
|
{
|
|
var documentVm = new DocumentViewModel(mainVm, module, parent, name);
|
|
return documentVm;
|
|
}
|
|
|
|
public DocumentViewModel(MainViewModel mainVm, ModuleViewModel module, FolderViewModel parent, string name)
|
|
: base(module, parent, name, "igraph")
|
|
{
|
|
var network = new CodeGenNetworkViewModel(this, name);
|
|
_mainNetwork = network;
|
|
MainViewModel = mainVm;
|
|
|
|
this.WhenAnyValue(vm => vm.NetworkBreadcrumbBar.ActiveItem)
|
|
.Cast<NetworkBreadcrumbViewModel?>()
|
|
.Where(b => b != null)
|
|
.Select(b => (CodeGenNetworkViewModel)b!.ViewModel!)
|
|
.ToProperty(this, vm => vm.CurrentViewModel, out _currentViewModel);
|
|
|
|
NetworkBreadcrumbBar.ActivePath.Edit(list =>
|
|
{
|
|
list.Clear();
|
|
list.Add(new NetworkBreadcrumbViewModel
|
|
{
|
|
Name = "Main",
|
|
ViewModel = _mainNetwork
|
|
});
|
|
});
|
|
}
|
|
|
|
public override ReactiveObject CurrentViewModel => _currentViewModel.Value;
|
|
|
|
public CodeGenNetworkViewModel MainNetwork => _mainNetwork;
|
|
|
|
public BreadcrumbBarViewModel NetworkBreadcrumbBar { get; } = new();
|
|
|
|
public override string Name
|
|
{
|
|
get => base.Name;
|
|
set
|
|
{
|
|
base.Name = value;
|
|
_mainNetwork.Name = value;
|
|
// TODO: adjust path!
|
|
}
|
|
}
|
|
|
|
public MainViewModel MainViewModel { get; }
|
|
}
|
|
} |