From 545536f66f273999619eda69099a2cf7cb2de8a9 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Wed, 27 Apr 2022 23:31:56 +0200 Subject: [PATCH] Add memory of last mod path as well as default directory. Add default Author. Fix bugs. --- OtterGui | 2 +- Penumbra/Configuration.cs | 4 ++ Penumbra/UI/Classes/ModFileSystemSelector.cs | 13 +++- ...cs => ConfigWindow.SettingsTab.General.cs} | 69 ++++++++++++++++++- Penumbra/UI/ConfigWindow.SettingsTab.cs | 6 +- 5 files changed, 86 insertions(+), 8 deletions(-) rename Penumbra/UI/{ConfigWindow.SettingsTab.ModSelector.cs => ConfigWindow.SettingsTab.General.cs} (57%) diff --git a/OtterGui b/OtterGui index 1a3cd1f8..6b918d67 160000 --- a/OtterGui +++ b/OtterGui @@ -1 +1 @@ -Subproject commit 1a3cd1f881f3b6c2c4d9d4b20f054d1ab5ccc014 +Subproject commit 6b918d67fb7370340b1b310a03dbf033b9950450 diff --git a/Penumbra/Configuration.cs b/Penumbra/Configuration.cs index 565d7975..e5c8a899 100644 --- a/Penumbra/Configuration.cs +++ b/Penumbra/Configuration.cs @@ -4,6 +4,7 @@ using System.Linq; using Dalamud.Configuration; using Dalamud.Logging; using OtterGui.Filesystem; +using Penumbra.Import; using Penumbra.UI.Classes; namespace Penumbra; @@ -38,6 +39,9 @@ public partial class Configuration : IPluginConfiguration public bool DisableSoundStreaming { get; set; } = true; public bool EnableHttpApi { get; set; } + public string DefaultModImportPath { get; set; } = string.Empty; + public string DefaultModAuthor { get; set; } = DefaultTexToolsData.Author; + public Dictionary< ColorId, uint > Colors { get; set; } = Enum.GetValues< ColorId >().ToDictionary( c => c, c => c.Data().DefaultColor ); diff --git a/Penumbra/UI/Classes/ModFileSystemSelector.cs b/Penumbra/UI/Classes/ModFileSystemSelector.cs index be36ab68..9a9d90c8 100644 --- a/Penumbra/UI/Classes/ModFileSystemSelector.cs +++ b/Penumbra/UI/Classes/ModFileSystemSelector.cs @@ -132,7 +132,7 @@ public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, Mod try { var newDir = Mod.CreateModFolder( Penumbra.ModManager.BasePath, _newModName ); - Mod.CreateMeta( newDir, _newModName, string.Empty, string.Empty, "1.0", string.Empty ); + Mod.CreateMeta( newDir, _newModName, Penumbra.Config.DefaultModAuthor, string.Empty, "1.0", string.Empty ); Penumbra.ModManager.AddMod( newDir ); _newModName = string.Empty; } @@ -144,11 +144,18 @@ public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, Mod } // Add an import mods button that opens a file selector. + // Only set the initial directory once. + private bool _hasSetFolder; + private void AddImportModButton( Vector2 size ) { if( ImGuiUtil.DrawDisabledButton( FontAwesomeIcon.FileImport.ToIconString(), size, "Import one or multiple mods from Tex Tools Mod Pack Files.", !Penumbra.ModManager.Valid, true ) ) { + var modPath = _hasSetFolder ? null + : Penumbra.Config.DefaultModImportPath.Length > 0 ? Penumbra.Config.DefaultModImportPath + : Penumbra.Config.ModDirectory.Length > 0 ? Penumbra.Config.ModDirectory : null; + _hasSetFolder = true; _fileManager.OpenFileDialog( "Import Mod Pack", "TexTools Mod Packs{.ttmp,.ttmp2}", ( s, f ) => { if( s ) @@ -156,7 +163,7 @@ public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, Mod _import = new TexToolsImporter( Penumbra.ModManager.BasePath, f.Count, f.Select( file => new FileInfo( file ) ) ); ImGui.OpenPopup( "Import Status" ); } - }, 0, Penumbra.Config.ModDirectory ); + }, 0, modPath ); } _fileManager.Draw(); @@ -202,7 +209,7 @@ public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, Mod } catch( Exception e ) { - PluginLog.Error($"Error cleaning up failed mod extraction of {file.FullName} to {dir.FullName}:\n{e}" ); + PluginLog.Error( $"Error cleaning up failed mod extraction of {file.FullName} to {dir.FullName}:\n{e}" ); } } diff --git a/Penumbra/UI/ConfigWindow.SettingsTab.ModSelector.cs b/Penumbra/UI/ConfigWindow.SettingsTab.General.cs similarity index 57% rename from Penumbra/UI/ConfigWindow.SettingsTab.ModSelector.cs rename to Penumbra/UI/ConfigWindow.SettingsTab.General.cs index 55d9a66d..faddf3c7 100644 --- a/Penumbra/UI/ConfigWindow.SettingsTab.ModSelector.cs +++ b/Penumbra/UI/ConfigWindow.SettingsTab.General.cs @@ -1,4 +1,7 @@ using System; +using System.IO; +using System.Numerics; +using Dalamud.Interface; using ImGuiNET; using OtterGui; using OtterGui.Filesystem; @@ -12,7 +15,7 @@ public partial class ConfigWindow { private void DrawModSelectorSettings() { - if( !ImGui.CollapsingHeader( "Mod Selector" ) ) + if( !ImGui.CollapsingHeader( "General" ) ) { return; } @@ -20,6 +23,9 @@ public partial class ConfigWindow DrawFolderSortType(); DrawAbsoluteSizeSelector(); DrawRelativeSizeSelector(); + ImGui.Dummy( _window._defaultSpace ); + DrawDefaultModImportPath(); + DrawDefaultModAuthor(); ImGui.NewLine(); } @@ -93,5 +99,66 @@ public partial class ConfigWindow ImGuiUtil.LabeledHelpMarker( "Mod Selector Relative Size", "Instead of keeping the mod-selector in the Installed Mods tab a fixed width, this will let it scale with the total size of the Penumbra window." ); } + + private void DrawDefaultModImportPath() + { + var tmp = Penumbra.Config.DefaultModImportPath; + var spacing = new Vector2( 3 * ImGuiHelpers.GlobalScale ); + using var style = ImRaii.PushStyle( ImGuiStyleVar.ItemSpacing, spacing ); + ImGui.SetNextItemWidth( _window._inputTextWidth.X - _window._iconButtonSize.X - spacing.X ); + if( ImGui.InputText( "##defaultModImport", ref tmp, 256 ) ) + { + Penumbra.Config.DefaultModImportPath = tmp; + } + + if( ImGui.IsItemDeactivatedAfterEdit() ) + { + Penumbra.Config.Save(); + } + + ImGui.SameLine(); + if( ImGuiUtil.DrawDisabledButton( $"{FontAwesomeIcon.Folder.ToIconString()}##import", _window._iconButtonSize, + "Select a directory via dialog.", false, true ) ) + { + if( _dialogOpen ) + { + _dialogManager.Reset(); + _dialogOpen = false; + } + else + { + var startDir = Directory.Exists( Penumbra.Config.ModDirectory ) ? Penumbra.Config.ModDirectory : "."; + + _dialogManager.OpenFolderDialog( "Choose Default Import Directory", ( b, s ) => + { + Penumbra.Config.DefaultModImportPath = b ? s : Penumbra.Config.DefaultModImportPath; + Penumbra.Config.Save(); + _dialogOpen = false; + }, startDir ); + _dialogOpen = true; + } + } + + style.Pop(); + ImGuiUtil.LabeledHelpMarker( "Default Mod Import Directory", + "Set the directory that gets opened when using the file picker to import mods for the first time." ); + } + + private void DrawDefaultModAuthor() + { + var tmp = Penumbra.Config.DefaultModAuthor; + ImGui.SetNextItemWidth( _window._inputTextWidth.X ); + if( ImGui.InputText( "##defaultAuthor", ref tmp, 64 ) ) + { + Penumbra.Config.DefaultModAuthor = tmp; + } + + if( ImGui.IsItemDeactivatedAfterEdit() ) + { + Penumbra.Config.Save(); + } + + ImGuiUtil.LabeledHelpMarker( "Default Mod Author", "Set the default author stored for newly created mods." ); + } } } \ No newline at end of file diff --git a/Penumbra/UI/ConfigWindow.SettingsTab.cs b/Penumbra/UI/ConfigWindow.SettingsTab.cs index 9278faa9..0961f177 100644 --- a/Penumbra/UI/ConfigWindow.SettingsTab.cs +++ b/Penumbra/UI/ConfigWindow.SettingsTab.cs @@ -45,6 +45,8 @@ public partial class ConfigWindow DrawModSelectorSettings(); DrawColorSettings(); DrawAdvancedSettings(); + + _dialogManager.Draw(); } // Changing the base mod directory. @@ -92,8 +94,6 @@ public partial class ConfigWindow _dialogOpen = true; } } - - _dialogManager.Draw(); } private static void DrawOpenDirectoryButton( int id, DirectoryInfo directory, bool condition ) @@ -137,7 +137,7 @@ public partial class ConfigWindow ImGui.NewLine(); if( Penumbra.Config.ModDirectory != _newModDirectory - && _newModDirectory.Length == 0 + && _newModDirectory.Length != 0 && ( save || DrawPressEnterWarning( Penumbra.Config.ModDirectory, pos ) ) ) { Penumbra.ModManager.DiscoverMods( _newModDirectory );