Batch Update

This commit is contained in:
Jöran Malek 2024-03-17 22:27:01 +01:00
parent 693d12b61c
commit 4c2b5cca93
32 changed files with 483 additions and 332 deletions

View file

@ -21,8 +21,9 @@ public class WelcomePageDocumentViewModel : Document
public WelcomePageDocumentViewModel(WorkspaceManager workspaceController)
{
CanClose = false;
Title = "Welcome";
_workspaceController = workspaceController;
CreateNew = ReactiveCommand.CreateFromTask(OnCreateNew);
OpenNew = ReactiveCommand.CreateFromTask(OnOpenNew);
@ -33,7 +34,7 @@ public class WelcomePageDocumentViewModel : Document
var storageProvider = this.GetStorageProvider()!;
var documents = await storageProvider.TryGetWellKnownFolderAsync(WellKnownFolder.Documents);
var file = await storageProvider.SaveFilePickerAsync(new FilePickerSaveOptions()
var file = await storageProvider.SaveFilePickerAsync(new()
{
DefaultExtension = ".ifdb",
FileTypeChoices =
@ -60,7 +61,7 @@ public class WelcomePageDocumentViewModel : Document
var storageProvider = this.GetStorageProvider()!;
var documents = await storageProvider.TryGetWellKnownFolderAsync(WellKnownFolder.Documents);
var files = await storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions()
var files = await storageProvider.OpenFilePickerAsync(new()
{
AllowMultiple = false,
SuggestedStartLocation = documents,

View file

@ -1,23 +0,0 @@
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

@ -0,0 +1,13 @@
using Dock.Model.Core;
using Dock.Model.ReactiveUI.Controls;
namespace InkForge.Desktop.ViewModels;
public class InkForgeDocumentDock : DocumentDock, IDock
{
bool IDock.IsEmpty
{
get => false;
set { }
}
}

View file

@ -0,0 +1,32 @@
using Avalonia;
using Dock.Model.Core;
using InkForge.Desktop.Managers;
using Microsoft.Extensions.DependencyInjection;
using ReactiveUI;
namespace InkForge.Desktop.ViewModels;
public class MainViewModel : ReactiveObject
{
private readonly DocumentManager _documentManager;
public IDock Layout { get; }
public MainViewModel(InkForgeFactory factory)
{
Layout = factory.CreateLayout();
factory.InitLayout(Layout);
_documentManager = CreateDocumentManager();
}
private static DocumentManager CreateDocumentManager()
{
return ActivatorUtilities.CreateInstance<DocumentManager>(
Application.Current!.GetValue(App.ServiceProviderProperty)
);
}
}

View file

@ -0,0 +1,32 @@
using Dock.Model.ReactiveUI.Controls;
using InkForge.Desktop.Managers;
using InkForge.Desktop.ViewModels.Workspaces;
using ReactiveUI;
namespace InkForge.Desktop.ViewModels.Tools;
public class WorkspaceTool : Tool
{
private WorkspaceViewModel? _workspace;
public WorkspaceViewModel? Workspace
{
get => _workspace;
private set => this.RaiseAndSetIfChanged(ref _workspace, value);
}
public WorkspaceTool(WorkspaceManager workspaceManager, IWorkspaceViewModelFactory workspaceViewModelFactory)
{
Title = "Workspace";
CanClose = false;
workspaceManager.WhenAnyValue(v => v.Workspace,
v => v switch
{
{ } => workspaceViewModelFactory.Create(v),
_ => null
}).BindTo(this, v => v.Workspace);
}
}

View file

@ -1,26 +1,50 @@
using InkForge.Desktop.Models;
namespace InkForge.Desktop.ViewModels.Workspaces;
using Microsoft.Extensions.DependencyInjection;
public class WorkspaceViewModel(Workspace workspace)
namespace InkForge.Desktop.ViewModels.Workspaces
{
// private readonly Workspace _workspace;
// private readonly ObservableAsPropertyHelper<string> _workspaceNameProperty;
public class WorkspaceViewModel(Workspace workspace)
{
// private readonly Workspace _workspace;
// private readonly ObservableAsPropertyHelper<string> _workspaceNameProperty;
// public string WorkspaceName => _workspaceNameProperty.Value;
// public string WorkspaceName => _workspaceNameProperty.Value;
// public ReactiveCommand<Unit, Unit> AddDocument { get; }
// public ReactiveCommand<Unit, Unit> AddDocument { get; }
// public WorkspacesViewModel(Workspace workspace)
// {
// _workspace = workspace;
// _workspaceNameProperty = this.WhenAnyValue(v => v._workspace.Name).ToProperty(this, nameof(WorkspaceName));
// public WorkspacesViewModel(Workspace workspace)
// {
// _workspace = workspace;
// _workspaceNameProperty = this.WhenAnyValue(v => v._workspace.Name).ToProperty(this, nameof(WorkspaceName));
// AddDocument = ReactiveCommand.Create(OnAddDocument);
// }
// AddDocument = ReactiveCommand.Create(OnAddDocument);
// }
// private void OnAddDocument()
// {
// private void OnAddDocument()
// {
// }
// }
}
public interface IWorkspaceViewModelFactory
{
WorkspaceViewModel Create(Workspace workspace);
}
namespace Internal
{
internal class WorkspaceViewModelFactory(IServiceProvider services) : IWorkspaceViewModelFactory
{
private static ObjectFactory<WorkspaceViewModel>? s_workspaceViewModelFactory;
public WorkspaceViewModel Create(Workspace workspace)
{
s_workspaceViewModelFactory ??= ActivatorUtilities.CreateFactory<WorkspaceViewModel>([typeof(Workspace)]);
return s_workspaceViewModelFactory(services, [workspace]);
}
WorkspaceViewModel IWorkspaceViewModelFactory.Create(Workspace workspace) => Create(workspace);
}
}
}

View file

@ -1,24 +0,0 @@
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);
}
}