From 35e68e74f4694fd2a47ec703d630ebe17fdf4f1c Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Fri, 17 Jun 2022 17:33:22 +0200 Subject: [PATCH] File Selector improvements. --- Penumbra/UI/Classes/ModEditWindow.Textures.cs | 2 +- Penumbra/UI/Classes/ModFileSystemSelector.cs | 2 +- Penumbra/UI/ConfigWindow.Misc.cs | 31 +++++++++++++++++++ Penumbra/UI/ConfigWindow.SettingsTab.cs | 2 +- Penumbra/UI/ConfigWindow.cs | 1 - 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Penumbra/UI/Classes/ModEditWindow.Textures.cs b/Penumbra/UI/Classes/ModEditWindow.Textures.cs index 6f0ec77f..e18ec33c 100644 --- a/Penumbra/UI/Classes/ModEditWindow.Textures.cs +++ b/Penumbra/UI/Classes/ModEditWindow.Textures.cs @@ -41,7 +41,7 @@ public partial class ModEditWindow private int _offsetX = 0; private int _offsetY = 0; - private readonly FileDialogManager _dialogManager = new(); + private readonly FileDialogManager _dialogManager = ConfigWindow.SetupFileManager(); private static bool DragFloat( string label, float width, ref float value ) { diff --git a/Penumbra/UI/Classes/ModFileSystemSelector.cs b/Penumbra/UI/Classes/ModFileSystemSelector.cs index 14dfd804..51490733 100644 --- a/Penumbra/UI/Classes/ModFileSystemSelector.cs +++ b/Penumbra/UI/Classes/ModFileSystemSelector.cs @@ -19,7 +19,7 @@ namespace Penumbra.UI.Classes; public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, ModFileSystemSelector.ModState > { - private readonly FileDialogManager _fileManager = new(); + private readonly FileDialogManager _fileManager = ConfigWindow.SetupFileManager(); private TexToolsImporter? _import; public ModSettings SelectedSettings { get; private set; } = ModSettings.Empty; public ModCollection SelectedSettingCollection { get; private set; } = ModCollection.Empty; diff --git a/Penumbra/UI/ConfigWindow.Misc.cs b/Penumbra/UI/ConfigWindow.Misc.cs index 7d8969ee..6f70126a 100644 --- a/Penumbra/UI/ConfigWindow.Misc.cs +++ b/Penumbra/UI/ConfigWindow.Misc.cs @@ -1,6 +1,8 @@ using System; using System.Linq; using System.Numerics; +using Dalamud.Interface; +using Dalamud.Interface.ImGuiFileDialog; using ImGuiNET; using Lumina.Data.Parsing; using Lumina.Excel.GeneratedSheets; @@ -11,6 +13,7 @@ using Penumbra.GameData.ByteString; using Penumbra.GameData.Enums; using Penumbra.Interop.Structs; using Penumbra.UI.Classes; +using Penumbra.Util; namespace Penumbra.UI; @@ -114,4 +117,32 @@ public partial class ConfigWindow } } } + + // Set up the file selector with the right flags and custom side bar items. + public static FileDialogManager SetupFileManager() + { + var fileManager = new FileDialogManager + { + AddedWindowFlags = ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoDocking, + }; + + if( Functions.GetDownloadsFolder( out var downloadsFolder ) ) + { + fileManager.CustomSideBarItems.Add( ("Downloads", downloadsFolder, FontAwesomeIcon.Download, -1) ); + } + + if( Functions.GetQuickAccessFolders( out var folders ) ) + { + foreach( var ((name, path), idx) in folders.WithIndex() ) + { + fileManager.CustomSideBarItems.Add( ($"{name}##{idx}", path, FontAwesomeIcon.Folder, -1) ); + } + } + + // Remove Videos and Music. + fileManager.CustomSideBarItems.Add( ("Videos", string.Empty, 0, -1) ); + fileManager.CustomSideBarItems.Add( ("Music", string.Empty, 0, -1) ); + + return fileManager; + } } \ No newline at end of file diff --git a/Penumbra/UI/ConfigWindow.SettingsTab.cs b/Penumbra/UI/ConfigWindow.SettingsTab.cs index de377896..32859822 100644 --- a/Penumbra/UI/ConfigWindow.SettingsTab.cs +++ b/Penumbra/UI/ConfigWindow.SettingsTab.cs @@ -62,7 +62,7 @@ public partial class ConfigWindow // Changing the base mod directory. private string? _newModDirectory; - private readonly FileDialogManager _dialogManager = new(); + private readonly FileDialogManager _dialogManager = SetupFileManager(); private bool _dialogOpen; // For toggling on/off. // Do not change the directory without explicitly pressing enter or this button. diff --git a/Penumbra/UI/ConfigWindow.cs b/Penumbra/UI/ConfigWindow.cs index ff7fa751..ccfac393 100644 --- a/Penumbra/UI/ConfigWindow.cs +++ b/Penumbra/UI/ConfigWindow.cs @@ -33,7 +33,6 @@ public sealed partial class ConfigWindow : Window, IDisposable _effectiveTab = new EffectiveTab(); _debugTab = new DebugTab( this ); _resourceTab = new ResourceTab( this ); - Flags |= ImGuiWindowFlags.NoDocking; if( Penumbra.Config.FixMainWindow ) { Flags |= ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoMove;