123 lines
4.3 KiB
C#
123 lines
4.3 KiB
C#
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;
|
|
using Telerik.WinControls.UI;
|
|
|
|
namespace ModpackUpdater.Apps.Manager;
|
|
|
|
public partial class Form1 : RadForm, IMainApi
|
|
{
|
|
private IWorkspace? workspace;
|
|
|
|
public IWorkspace? Workspace => workspace;
|
|
|
|
public Form1()
|
|
{
|
|
InitializeComponent();
|
|
|
|
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);
|
|
|
|
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()
|
|
{
|
|
// ...
|
|
}
|
|
|
|
private void LoadActionSet()
|
|
{
|
|
// ...
|
|
}
|
|
|
|
private void Form1_Load(object sender, EventArgs e)
|
|
{
|
|
LoadRecentWorkspaces();
|
|
}
|
|
|
|
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)
|
|
{
|
|
if (sender is RadMenuItem item && item.Tag is PluginFunction func)
|
|
func.Execute(new MainApiParameters(this));
|
|
}
|
|
}
|