diff --git a/Penumbra/EphemeralConfig.cs b/Penumbra/EphemeralConfig.cs index 24ab466b..d182a84c 100644 --- a/Penumbra/EphemeralConfig.cs +++ b/Penumbra/EphemeralConfig.cs @@ -1,3 +1,4 @@ +using Dalamud.Interface.ImGuiFileDialog; using Dalamud.Interface.ImGuiNotification; using Newtonsoft.Json; using OtterGui.Classes; @@ -41,6 +42,7 @@ public class EphemeralConfig : ISavable, IDisposable, IService public string LastModPath { get; set; } = string.Empty; public bool AdvancedEditingOpen { get; set; } = false; public bool ForceRedrawOnFileChange { get; set; } = false; + public FileDialog.SortingField FilePickerSortingField { get; set; } = FileDialog.SortingField.FileName; /// /// Load the current configuration. diff --git a/Penumbra/UI/FileDialogService.cs b/Penumbra/UI/FileDialogService.cs index cc2a7f6a..bdea508b 100644 --- a/Penumbra/UI/FileDialogService.cs +++ b/Penumbra/UI/FileDialogService.cs @@ -19,7 +19,7 @@ public class FileDialogService : IDisposable, IUiService public FileDialogService(CommunicatorService communicator, Configuration config) { _communicator = communicator; - _manager = SetupFileManager(config.ModDirectory); + _manager = SetupFileManager(config); _communicator.ModDirectoryChanged.Subscribe(OnModDirectoryChange, ModDirectoryChanged.Priority.FileDialogService); } @@ -65,6 +65,8 @@ public class FileDialogService : IDisposable, IUiService public void Dispose() { + _manager.SetDefaultSortOrder = null; + _manager.GetDefaultSortOrder = null; _startPaths.Clear(); _manager.Reset(); _communicator.ModDirectoryChanged.Unsubscribe(OnModDirectoryChange); @@ -115,12 +117,21 @@ public class FileDialogService : IDisposable, IUiService ?? "."; /// Set up the file selector with the right flags and custom side bar items. - private static FileDialogManager SetupFileManager(string modDirectory) + private static FileDialogManager SetupFileManager(Configuration config) { var fileManager = new FileDialogManager { AddedWindowFlags = ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoDocking, }; + fileManager.SetDefaultSortOrder = v => + { + if (v == config.Ephemeral.FilePickerSortingField) + return; + + config.Ephemeral.FilePickerSortingField = v; + config.Ephemeral.Save(); + }; + fileManager.GetDefaultSortOrder = () => config.Ephemeral.FilePickerSortingField; if (Functions.GetDownloadsFolder(out var downloadsFolder)) fileManager.CustomSideBarItems.Add(("Downloads", downloadsFolder, FontAwesomeIcon.Download, -1)); @@ -130,7 +141,7 @@ public class FileDialogService : IDisposable, IUiService fileManager.CustomSideBarItems.Add(($"{name}##{idx}", path, FontAwesomeIcon.Folder, -1)); // Add Penumbra Root. This is not updated if the root changes right now. - fileManager.CustomSideBarItems.Add(("Root Directory", modDirectory, FontAwesomeIcon.Gamepad, 0)); + fileManager.CustomSideBarItems.Add(("Root Directory", config.ModDirectory, FontAwesomeIcon.Gamepad, 0)); // Remove Videos and Music. fileManager.CustomSideBarItems.Add(("Videos", string.Empty, 0, -1));