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 _currentViewModel; private readonly CodeGenNetworkViewModel _mainNetwork; static DocumentViewModel() { Locator.CurrentMutable.Register(() => new DocumentView(), typeof(IViewFor)); } 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() .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; } } }