From c3b4c6dea21027bc80828aa17a5d949d0d7eaf77 Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Mon, 6 Feb 2023 23:07:03 -0600 Subject: [PATCH] Updated ActionEditor component to MudBlazor --- LANCommander/Components/ActionEditor.razor | 191 +++++++++------------ LANCommander/Pages/Games/Edit.razor | 2 + 2 files changed, 84 insertions(+), 109 deletions(-) diff --git a/LANCommander/Components/ActionEditor.razor b/LANCommander/Components/ActionEditor.razor index 5b3d7b1..18de7bc 100644 --- a/LANCommander/Components/ActionEditor.razor +++ b/LANCommander/Components/ActionEditor.razor @@ -1,141 +1,114 @@ @using LANCommander.Data.Models @using LANCommander.Extensions +@inject IDialogService DialogService -@{ - int i = 0; -} -
- - - - - - - - - - - +Actions - - @if (Actions == null || Actions.Count == 0) - { - - } + + + Name + Path + Arguments + Working Dir + Primary + + - @foreach (var action in Actions.OrderBy(a => a.SortOrder)) - { - var index = i; + + + + + + + + + + + + + - - - - - - - - - - i++; - } - - - - -
NamePathArgumentsWorking DirPrimary
Actions are used to start the game or launch other executables. It is recommended to have at least one action to launch the game.
-
- -
-
- - - - -
- - - - - -
-
-
- - -
-
-
+ + Add + @code { - [Parameter] public List Actions { get; set; } - [Parameter] public Guid GameId { get; set; } + [Parameter] public IEnumerable Actions { get; set; } + [Parameter] public Guid ArchiveId { get; set; } - protected override void OnInitialized() + private List OrderedActions { get; set; } + + protected override async Task OnInitializedAsync() { - Actions = Actions.OrderBy(a => a.SortOrder).ToList(); - - FixSortOrders(); - - base.OnInitialized(); + OrderedActions = Actions.OrderBy(a => a.SortOrder).ToList(); } private void AddAction() { - if (Actions == null) - Actions = new List(); + if (OrderedActions == null) + OrderedActions = new List(); - Actions.Add(new Data.Models.Action() + OrderedActions.Add(new Data.Models.Action() { - PrimaryAction = Actions.Count == 0, - SortOrder = Actions.Count + PrimaryAction = OrderedActions.Count == 0, + SortOrder = OrderedActions.Count }); } - private void RemoveAction(int index) + private void RemoveAction(Data.Models.Action action) { - Actions.Remove(Actions.ElementAt(index)); - - FixSortOrders(); + OrderedActions.Remove(action); } - private void MoveUp(int index) + private void MoveUp(Data.Models.Action action) { - if (index == 0) - return; - - Actions.Move(Actions.ElementAt(index), index - 1); - FixSortOrders(); + if (action.SortOrder > 0) + OrderedActions.Move(action, action.SortOrder - 1); } - private void MoveDown(int index) + private void MoveDown(Data.Models.Action action) { - if (index == Actions.Count - 1) - return; - - Actions.Move(Actions.ElementAt(index), index + 1); - FixSortOrders(); + if (action.SortOrder < OrderedActions.Count + 1) + OrderedActions.Move(action, action.SortOrder + 1); } - private void FixSortOrders() { - for (int i = 0; i < Actions.Count; i++) + private async void BrowseForActionPath(Data.Models.Action action) + { + var parameters = new DialogParameters { - Actions.ElementAt(i).SortOrder = i; + ["ArchiveId"] = ArchiveId + }; + + var dialog = await DialogService.ShowAsync("File Selector", parameters); + var result = await dialog.Result; + + if (!result.Canceled) + { + action.Path = result.Data as string; + + var parts = action.Path.Split('/'); + + if (parts.Length > 1) + { + action.Path = parts.Last(); + action.WorkingDirectory = "{InstallDir}/" + String.Join('/', parts.Take(parts.Length - 1)); + } + + StateHasChanged(); } } + + private void FixSortOrder() + { + int i = 0; + + foreach (var action in OrderedActions) + { + action.SortOrder = i; + + i++; + } + + Actions = OrderedActions; + } } diff --git a/LANCommander/Pages/Games/Edit.razor b/LANCommander/Pages/Games/Edit.razor index 05cc2cf..f3cbac8 100644 --- a/LANCommander/Pages/Games/Edit.razor +++ b/LANCommander/Pages/Games/Edit.razor @@ -42,6 +42,8 @@ } + +