This commit is contained in:
Jöran Malek 2024-02-26 18:08:18 +01:00
parent b1d3ec73c9
commit 693d12b61c
35 changed files with 389 additions and 269 deletions

View file

@ -1,36 +0,0 @@
using InkForge.Desktop.Managers;
using InkForge.Desktop.Models;
using ReactiveUI;
namespace InkForge.Desktop.ViewModels;
public class AppViewModel : ReactiveObject
{
private readonly LandingViewModel _landingViewModel;
private readonly WorkspaceManager _workspace;
private object _view;
public object View
{
get => _view;
set => this.RaiseAndSetIfChanged(ref _view, value);
}
public AppViewModel(WorkspaceManager workspace, LandingViewModel landingViewModel)
{
_workspace = workspace;
_landingViewModel = landingViewModel;
this.WhenAnyValue(v => v._workspace.Workspace).Subscribe(OnWorkspaceChanged);
}
private void OnWorkspaceChanged(Workspace workspace)
{
View = workspace switch
{
null => _landingViewModel,
{ } => new WorkspaceViewModel(workspace) // scoped?
};
}
}

View file

@ -1,28 +1,28 @@
using System.Collections.ObjectModel;
using System.Reactive;
using Avalonia.Platform.Storage;
using Dock.Model.ReactiveUI.Controls;
using InkForge.Desktop.Managers;
using InkForge.Desktop.Services;
using ReactiveUI;
namespace InkForge.Desktop.ViewModels;
namespace InkForge.Desktop.ViewModels.Documents;
public class LandingViewModel : ReactiveObject
public class WelcomePageDocumentViewModel : Document
{
private ReadOnlyObservableCollection<RecentItemViewModel> _recentItems;
private readonly WorkspaceManager _workspaceController;
public ReactiveCommand<Unit, Unit> CreateNew { get; }
public ReactiveCommand<Unit, Unit> OpenNew { get; }
public ReadOnlyObservableCollection<RecentItemViewModel> RecentItems => _recentItems;
public LandingViewModel(WorkspaceManager workspaceController)
public WelcomePageDocumentViewModel(WorkspaceManager workspaceController)
{
Title = "Welcome";
_workspaceController = workspaceController;
CreateNew = ReactiveCommand.CreateFromTask(OnCreateNew);
OpenNew = ReactiveCommand.CreateFromTask(OnOpenNew);

View file

@ -0,0 +1,23 @@
using Dock.Model.Controls;
using InkForge.Desktop.Dock;
using InkForge.Desktop.Managers;
using InkForge.Desktop.ViewModels.Documents;
namespace InkForge.Desktop.ViewModels;
public class DocumentsViewModel
{
private readonly WorkspaceFactory _workspaceFactory;
public IRootDock Layout { get; }
public DocumentsViewModel(WorkspaceFactory workspaceFactory, WorkspaceManager workspaceManager)
{
_workspaceFactory = workspaceFactory;
Layout = workspaceFactory.CreateLayout();
var documents = workspaceFactory.GetDockable<IDocumentDock>("Documents")!;
workspaceFactory.AddDockable(documents, new WelcomePageDocumentViewModel(workspaceManager));
}
}

View file

@ -1,19 +0,0 @@
using InkForge.Desktop.Models;
using ReactiveUI;
namespace InkForge.Desktop.ViewModels;
public class WorkspaceViewModel : ReactiveObject
{
private readonly Workspace _workspace;
private readonly ObservableAsPropertyHelper<string> _workspaceNameProperty;
public string WorkspaceName => _workspaceNameProperty.Value;
public WorkspaceViewModel(Workspace workspace)
{
_workspace = workspace;
_workspaceNameProperty = this.WhenAnyValue(v => v._workspace.Name).ToProperty(this, nameof(WorkspaceName));
}
}

View file

@ -0,0 +1,26 @@
using InkForge.Desktop.Models;
namespace InkForge.Desktop.ViewModels.Workspaces;
public class WorkspaceViewModel(Workspace workspace)
{
// private readonly Workspace _workspace;
// private readonly ObservableAsPropertyHelper<string> _workspaceNameProperty;
// public string WorkspaceName => _workspaceNameProperty.Value;
// public ReactiveCommand<Unit, Unit> AddDocument { get; }
// public WorkspacesViewModel(Workspace workspace)
// {
// _workspace = workspace;
// _workspaceNameProperty = this.WhenAnyValue(v => v._workspace.Name).ToProperty(this, nameof(WorkspaceName));
// AddDocument = ReactiveCommand.Create(OnAddDocument);
// }
// private void OnAddDocument()
// {
// }
}

View file

@ -0,0 +1,24 @@
using InkForge.Desktop.Managers;
using InkForge.Desktop.ViewModels.Workspaces;
using ReactiveUI;
namespace InkForge.Desktop.ViewModels;
public class WorkspacesViewModel : ReactiveObject
{
private readonly WorkspaceManager _workspaceManager;
private WorkspaceViewModel? _workspace;
public WorkspaceViewModel? Workspace
{
get => _workspace;
private set => this.RaiseAndSetIfChanged(ref _workspace, value);
}
public WorkspacesViewModel(WorkspaceManager workspaceManager)
{
_workspaceManager = workspaceManager;
workspaceManager.WhenAnyValue(v => v.Workspace, v => v is null ? null : new WorkspaceViewModel(v)).BindTo(this, v => v.Workspace);
}
}