FileDialog.

This commit is contained in:
Ottermandias 2025-04-04 16:14:14 +02:00
parent 09c2264de4
commit 7b6dac8e0b
2 changed files with 16 additions and 3 deletions

View file

@ -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;
/// <summary>
/// Load the current configuration.

View file

@ -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
?? ".";
/// <summary> Set up the file selector with the right flags and custom side bar items. </summary>
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));