InkForge/app/InkForge.Desktop/InkForgeFactory.cs

86 lines
2.1 KiB
C#
Raw Permalink Normal View History

2024-05-02 21:44:13 +02:00
using Avalonia;
2024-03-17 22:27:01 +01:00
using Dock.Model.Controls;
using Dock.Model.Core;
2024-05-02 21:44:13 +02:00
using Dock.Model.Mvvm;
using Dock.Model.Mvvm.Controls;
using DynamicData.Binding;
using InkForge.Desktop.Managers;
using InkForge.Desktop.Models;
using InkForge.Desktop.ViewModels.Documents;
using InkForge.Desktop.ViewModels.Tools;
2024-03-17 22:27:01 +01:00
using Microsoft.Extensions.DependencyInjection;
namespace InkForge.Desktop;
public class InkForgeFactory : Factory
{
2024-05-02 21:44:13 +02:00
private readonly IDock _mainDock;
2024-03-17 22:27:01 +01:00
private readonly IRootDock _rootDock;
2024-05-02 21:44:13 +02:00
private readonly WelcomePageDocumentViewModel _welcomePage;
private readonly WorkspaceTool _workspaceTool;
2024-03-17 22:27:01 +01:00
2024-05-02 21:44:13 +02:00
public InkForgeFactory(WorkspaceManager workspace)
2024-03-17 22:27:01 +01:00
{
2024-05-02 21:44:13 +02:00
_rootDock = CreateRootDock();
_mainDock = CreateDockDock();
_mainDock.IsCollapsable = false;
_mainDock.CanClose = false;
2024-03-17 22:27:01 +01:00
2024-05-02 21:44:13 +02:00
_welcomePage = CreateWelcomePageDocumentViewModel();
2024-03-17 22:27:01 +01:00
_workspaceTool = CreateWorkspaceTool();
2024-05-02 21:44:13 +02:00
workspace.WhenValueChanged(m => m.Workspace).Subscribe(OnWorkspaceChanged);
2024-03-17 22:27:01 +01:00
}
public override IRootDock CreateLayout()
{
2024-05-02 21:44:13 +02:00
ToolDock toolDock = new()
2024-03-17 22:27:01 +01:00
{
2024-05-02 21:44:13 +02:00
Alignment = Alignment.Left,
Proportion = 0.25,
2024-03-17 22:27:01 +01:00
VisibleDockables = [_workspaceTool],
};
ProportionalDock windowLayoutContent = new()
{
Orientation = Orientation.Horizontal,
2024-05-02 21:44:13 +02:00
VisibleDockables = [toolDock, new ProportionalDockSplitter(), _mainDock]
2024-03-17 22:27:01 +01:00
};
2024-05-02 21:44:13 +02:00
_rootDock.VisibleDockables = [windowLayoutContent];
_rootDock.DefaultDockable = windowLayoutContent;
2024-03-17 22:27:01 +01:00
return _rootDock;
}
2024-05-02 21:44:13 +02:00
private static WelcomePageDocumentViewModel CreateWelcomePageDocumentViewModel()
2024-03-17 22:27:01 +01:00
{
2024-05-02 21:44:13 +02:00
return ActivatorUtilities.CreateInstance<WelcomePageDocumentViewModel>(
Application.Current!.GetValue(App.ServiceProviderProperty)
);
2024-03-17 22:27:01 +01:00
}
private static ViewModels.Tools.WorkspaceTool CreateWorkspaceTool()
{
return ActivatorUtilities.CreateInstance<ViewModels.Tools.WorkspaceTool>(
Application.Current!.GetValue(App.ServiceProviderProperty)
);
}
2024-05-02 21:44:13 +02:00
private void OnWorkspaceChanged(Workspace? workspace)
{
IDockable dock = workspace switch
{
null => _welcomePage,
_ => workspace.Services.GetRequiredService<DocumentManager>().Dock,
};
AddDockable(_mainDock, dock);
CloseOtherDockables(dock);
}
2024-03-17 22:27:01 +01:00
}