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(); 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(); 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().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)); } }