From e47d6599b5dc04a52e2b2a693468e5d741d0e607 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Sun, 16 Nov 2025 19:48:28 +0100 Subject: [PATCH] work --- .../Ui/MainWindow.axaml.cs | 85 ++++++++++++++----- 1 file changed, 65 insertions(+), 20 deletions(-) diff --git a/ModpackUpdater.Apps.Manager/Ui/MainWindow.axaml.cs b/ModpackUpdater.Apps.Manager/Ui/MainWindow.axaml.cs index d172de3..322fa7d 100644 --- a/ModpackUpdater.Apps.Manager/Ui/MainWindow.axaml.cs +++ b/ModpackUpdater.Apps.Manager/Ui/MainWindow.axaml.cs @@ -15,8 +15,6 @@ namespace ModpackUpdater.Apps.Manager.Ui; public partial class MainWindow : Window, IMainApi { - private WorkspaceFeature? wsFeature; - public static IImage? ButtonImageAddAction => AppGlobals.Symbols.GetImageSource(AppSymbols.add); public static IImage? ButtonImageRemoveAction => AppGlobals.Symbols.GetImageSource(AppSymbols.remove); @@ -56,7 +54,7 @@ public partial class MainWindow : Window, IMainApi insertPrioSplitters: true); } - private async Task LoadNewWorkspace(IWorkspace? workspace, WorkspaceFeature feature) + private async Task LoadNewWorkspace(IWorkspace? workspace) { if (workspace is null) return; @@ -68,10 +66,7 @@ public partial class MainWindow : Window, IMainApi } if (workspace != Model.CurrentWorkspace) - { - wsFeature = feature; Model.CurrentWorkspace = workspace; - } AddToRecentFiles(workspace); LoadRecentWorkspaces(); @@ -122,13 +117,13 @@ public partial class MainWindow : Window, IMainApi var context = new WorkspaceContext(MainApi, null); await feature.Configure(context); if (context.Workspace != null) - await LoadNewWorkspace(context.Workspace, feature); + await LoadNewWorkspace(context.Workspace); } private async void MenuItemRecentWorkspaceItem_Click(object? sender, RoutedEventArgs e) { if (sender is MenuItem item && item.DataContext is MainWindowRecentFilesItem tag && tag.Feature.CreateFromConfig(tag.Config) is IWorkspace workspace) - await LoadNewWorkspace(workspace, tag.Feature); + await LoadNewWorkspace(workspace); } private void MenuItemToolsItem_Click(object? sender, RoutedEventArgs e) @@ -137,23 +132,73 @@ public partial class MainWindow : Window, IMainApi func.Execute(new MainApiParameters(this)); } - private void ButtonAddAction_OnClick(object? sender, RoutedEventArgs e) - { - throw new NotImplementedException(); - } - - private void ButtonRemoveAction_OnClick(object? sender, RoutedEventArgs e) - { - throw new NotImplementedException(); - } - private void MenuItemCreateUpdate_OnClick(object? sender, RoutedEventArgs e) { - throw new NotImplementedException(); + if (Model.CurrentWorkspace?.UpdateInfos is null + || Model.CurrentTreeNodes?.ElementAtOrDefault(1) is not { } nodeUpdates) + return; + + var update = new UpdateInfo(); + Model.CurrentWorkspace.UpdateInfos.Updates.Add(update); + nodeUpdates.Nodes.Add(new ActionSetTreeNode(update)); } private void MenuItemRemoveUpdate_OnClick(object? sender, RoutedEventArgs e) { - throw new NotImplementedException(); + if (Model.CurrentWorkspace?.UpdateInfos is null + || Model.CurrentTreeNodes?.ElementAtOrDefault(1) is not { } nodeUpdates + || Model.SelectedTreeNode is not ActionSetTreeNode nodeUpdate + || nodeUpdate.Infos is not UpdateInfo update) + return; + + nodeUpdates.Nodes.Remove(nodeUpdate); + Model.CurrentWorkspace.UpdateInfos.Updates.Remove(update); + } + + private void ButtonAddAction_OnClick(object? sender, RoutedEventArgs e) + { + if (Model.CurrentWorkspace?.InstallInfos is not { } rootInfos + || Model.SelectedTreeNode is not ActionSetTreeNode nodeUpdate + || Model.CurrentGridRows is not { } rows) + return; + + InstallAction action; + + switch (nodeUpdate.Infos) + { + case UpdateInfo updateInfos: + updateInfos.Actions.Add((UpdateAction)(action = new UpdateAction())); + break; + case InstallInfos installInfos: + installInfos.Actions.Add(action = new InstallAction()); + break; + default: + return; + } + + rows.Add(new MainWindowGridRow(action, rootInfos)); + } + + private void ButtonRemoveAction_OnClick(object? sender, RoutedEventArgs e) + { + if (Model.SelectedGridRow is not { } row + || Model.SelectedTreeNode is not ActionSetTreeNode nodeUpdate + || Model.CurrentGridRows is not { } rows) + return; + + switch (nodeUpdate.Infos) + { + case UpdateInfo updateInfos: + if (row.Action is UpdateAction action) + updateInfos.Actions.Remove(action); + break; + case InstallInfos installInfos: + installInfos.Actions.Remove(row.Action); + break; + default: + return; + } + + rows.Remove(row); } } \ No newline at end of file