Dock
This commit is contained in:
parent
b1d3ec73c9
commit
693d12b61c
35 changed files with 389 additions and 269 deletions
|
|
@ -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?
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
23
app/InkForge.Desktop/ViewModels/DocumentsViewModel.cs
Normal file
23
app/InkForge.Desktop/ViewModels/DocumentsViewModel.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
// {
|
||||
|
||||
// }
|
||||
}
|
||||
24
app/InkForge.Desktop/ViewModels/WorkspacesViewModel.cs
Normal file
24
app/InkForge.Desktop/ViewModels/WorkspacesViewModel.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue