some work for loading a workspace
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
using ModpackUpdater.Apps.Manager.Api.Model;
|
||||
using ModpackUpdater.Apps.Manager.Api.Plugins.Features;
|
||||
using ModpackUpdater.Apps.Manager.Api.Plugins.Params;
|
||||
using ModpackUpdater.Apps.Manager.Settings;
|
||||
using Pilz.Plugins.Advanced;
|
||||
using Pilz.Plugins.Advanced.UI.Telerik;
|
||||
using Pilz.UI.Symbols;
|
||||
@@ -9,7 +11,9 @@ namespace ModpackUpdater.Apps.Manager;
|
||||
|
||||
public partial class Form1 : RadForm, IMainApi
|
||||
{
|
||||
public IWorkspace? Workspace { get; set; }
|
||||
private IWorkspace? workspace;
|
||||
|
||||
public IWorkspace? Workspace => workspace;
|
||||
|
||||
public Form1()
|
||||
{
|
||||
@@ -17,17 +21,68 @@ public partial class Form1 : RadForm, IMainApi
|
||||
|
||||
radMenuItem_Workspace.SvgImage = AppGlobals.Symbols.GetSvgImage(AppSymbols.workspace, SymbolSize.Small);
|
||||
radMenuItem_WorkspacePreferences.SvgImage = AppGlobals.Symbols.GetSvgImage(AppSymbols.settings, SymbolSize.Small);
|
||||
radMenuItem_SaveWorkspace.SvgImage = AppGlobals.Symbols.GetSvgImage(AppSymbols.save, SymbolSize.Small);
|
||||
radMenuItem_OpenNewWorkspace.SvgImage = AppGlobals.Symbols.GetSvgImage(AppSymbols.new_window, SymbolSize.Small);
|
||||
radMenuItem_RecentWorkspaces.SvgImage = AppGlobals.Symbols.GetSvgImage(AppSymbols.time_machine, SymbolSize.Small);
|
||||
radMenuItem_Tools.SvgImage = AppGlobals.Symbols.GetSvgImage(AppSymbols.tools, SymbolSize.Small);
|
||||
|
||||
PluginFeatureController.Instance.Functions.Get(FeatureTypes.Workspace).InsertItemsTo(radMenuItem_OpenNewWorkspace.Items, customClickHandler: RadMenuItem_OpenNewWorkspace_Click);
|
||||
radMenuItem_SaveWorkspace.Shortcuts.Add(new(Keys.Control, Keys.S));
|
||||
|
||||
PluginFeatureController.Instance.Features.Get(FeatureTypes.Workspace).InsertItemsTo(radMenuItem_OpenNewWorkspace.Items, customClickHandler: RadMenuItem_OpenNewWorkspace_Click);
|
||||
PluginFeatureController.Instance.Functions.Get(FeatureTypes.Tools).InsertItemsTo(radMenuItem_OpenNewWorkspace.Items, customClickHandler: RadMenuItem_ToolsItem_Click);
|
||||
}
|
||||
|
||||
private void LoadRecentWorkspaces()
|
||||
{
|
||||
// ...
|
||||
var settings = Program.Settings.Get<WorkspaceSettings>();
|
||||
|
||||
radMenuItem_RecentWorkspaces.Items.Clear();
|
||||
|
||||
foreach (var config in settings.Workspaces)
|
||||
{
|
||||
var item = new RadMenuItem
|
||||
{
|
||||
Text = config.DisplayText,
|
||||
Tag = config,
|
||||
};
|
||||
|
||||
item.Click += RadMenuItem_OpenRecentWorkspace_Click;
|
||||
|
||||
radMenuItem_RecentWorkspaces.Items.Add(item);
|
||||
}
|
||||
|
||||
if (radMenuItem_RecentWorkspaces.Items.Any())
|
||||
radMenuItem_RecentWorkspaces.Visibility = Telerik.WinControls.ElementVisibility.Visible;
|
||||
else
|
||||
radMenuItem_RecentWorkspaces.Visibility = Telerik.WinControls.ElementVisibility.Collapsed;
|
||||
}
|
||||
|
||||
private void AddToRecentFiles(IWorkspace workspace)
|
||||
{
|
||||
var settings = Program.Settings.Get<WorkspaceSettings>();
|
||||
|
||||
settings.Workspaces.Remove(workspace.Config);
|
||||
settings.Workspaces.Insert(0, workspace.Config);
|
||||
|
||||
while (settings.Workspaces.Count > 20)
|
||||
settings.Workspaces.RemoveAt(20);
|
||||
}
|
||||
|
||||
private async Task LoadNewWorkspace(IWorkspace? workspace)
|
||||
{
|
||||
if (workspace is null)
|
||||
return;
|
||||
|
||||
if (workspace != this.workspace)
|
||||
this.workspace = workspace;
|
||||
|
||||
AddToRecentFiles(workspace);
|
||||
Invoke(LoadRecentWorkspaces);
|
||||
|
||||
if (!await workspace.Load())
|
||||
return;
|
||||
|
||||
Invoke(LoadWorkspace);
|
||||
}
|
||||
|
||||
private void LoadWorkspace()
|
||||
@@ -40,14 +95,23 @@ public partial class Form1 : RadForm, IMainApi
|
||||
// ...
|
||||
}
|
||||
|
||||
private void RadMenuItem_OpenNewWorkspace_Click(object? sender, EventArgs e)
|
||||
private void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
// ...
|
||||
LoadRecentWorkspaces();
|
||||
}
|
||||
|
||||
private void RadMenuItem_OpenRecentWorkspace_Click(object? sender, EventArgs e)
|
||||
private async void RadMenuItem_OpenNewWorkspace_Click(object? sender, EventArgs e)
|
||||
{
|
||||
// ...
|
||||
if (sender is RadMenuItem item && item.Tag is WorkspaceFeature feature && feature.Configure(ref workspace))
|
||||
await LoadNewWorkspace(workspace);
|
||||
}
|
||||
|
||||
private async void RadMenuItem_OpenRecentWorkspace_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender is RadMenuItem item && item.Tag is WorkspaceConfig config
|
||||
&& PluginFeatureController.Instance.Features.Get(FeatureTypes.Workspace).OfType<WorkspaceFeature>().FirstOrDefault(n => n.Identifier == config.ProviderId) is WorkspaceFeature feature
|
||||
&& feature.CreateFromSettings(config) is IWorkspace workspace)
|
||||
await LoadNewWorkspace(workspace);
|
||||
}
|
||||
|
||||
private void RadMenuItem_ToolsItem_Click(object? sender, EventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user