From 9d51b3d6f1b4b5981a4745d81c1794d82963ac7e Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Thu, 19 Aug 2021 11:15:09 +0200 Subject: [PATCH] Update ModSelector to reselect a mod on update instead of directly in most cases. --- Penumbra/UI/MenuTabs/TabCollections.cs | 2 +- Penumbra/UI/MenuTabs/TabImport.cs | 2 +- .../TabInstalled/TabInstalledDetails.cs | 2 +- .../TabInstalled/TabInstalledModPanel.cs | 6 ++--- .../TabInstalled/TabInstalledSelector.cs | 26 ++++++++++++------- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Penumbra/UI/MenuTabs/TabCollections.cs b/Penumbra/UI/MenuTabs/TabCollections.cs index db4b0f13..8fdc788b 100644 --- a/Penumbra/UI/MenuTabs/TabCollections.cs +++ b/Penumbra/UI/MenuTabs/TabCollections.cs @@ -144,7 +144,7 @@ namespace Penumbra.UI _selector.Cache.TriggerListReset(); if( _selector.Mod != null ) { - _selector.SelectModByDir( _selector.Mod.Data.BasePath.Name ); + _selector.SelectModOnUpdate( _selector.Mod.Data.BasePath.Name ); } } diff --git a/Penumbra/UI/MenuTabs/TabImport.cs b/Penumbra/UI/MenuTabs/TabImport.cs index 5a827d96..1088ebbe 100644 --- a/Penumbra/UI/MenuTabs/TabImport.cs +++ b/Penumbra/UI/MenuTabs/TabImport.cs @@ -87,7 +87,7 @@ namespace Penumbra.UI _base.ReloadMods(); if( directory != null ) { - _base._menu.InstalledTab.Selector.SelectModByDir( directory.Name ); + _base._menu.InstalledTab.Selector.SelectModOnUpdate( directory.Name ); } } } diff --git a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetails.cs b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetails.cs index 8c48b16d..3695726f 100644 --- a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetails.cs +++ b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetails.cs @@ -215,7 +215,7 @@ namespace Penumbra.UI var mod = kv.Key; if( ImGui.Selectable( mod.Data.Meta.Name ) ) { - _selector.SelectModByName( mod.Data.Meta.Name ); + _selector.SelectModByDir( mod.Data.BasePath.Name ); } ImGui.SameLine(); diff --git a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledModPanel.cs b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledModPanel.cs index 38c1cf39..bdc41724 100644 --- a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledModPanel.cs +++ b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledModPanel.cs @@ -74,7 +74,7 @@ namespace Penumbra.UI var name = Meta!.Name; if( Custom.ImGuiCustom.InputOrText( _editMode, LabelEditName, ref name, 64 ) && _modManager.RenameMod( name, Mod!.Data ) ) { - _selector.SelectModByDir( Mod.Data.BasePath.Name ); + _selector.SelectModOnUpdate( Mod.Data.BasePath.Name ); if( !_modManager.Config.ModSortOrder.ContainsKey( Mod!.Data.BasePath.Name ) ) { Mod.Data.Rename( name ); @@ -233,7 +233,7 @@ namespace Penumbra.UI if( ImGui.InputText( "Sort Order", ref currentSortOrder, 256, ImGuiInputTextFlags.EnterReturnsTrue ) ) { manager.ChangeSortOrder( mod, currentSortOrder ); - selector.SelectModByDir( mod.BasePath.Name ); + selector.SelectModOnUpdate( mod.BasePath.Name ); return true; } @@ -331,7 +331,7 @@ namespace Penumbra.UI { Service< ModManager >.Get()!.RenameModFolder( Mod.Data, newDir, false ); - _selector.SelectModByDir( _newName ); + _selector.SelectModOnUpdate( _newName ); closeParent = true; ImGui.CloseCurrentPopup(); diff --git a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledSelector.cs b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledSelector.cs index 9ad30234..f74c372f 100644 --- a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledSelector.cs +++ b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledSelector.cs @@ -168,7 +168,7 @@ namespace Penumbra.UI modMeta.SaveToFile( metaFile ); _modManager.AddMod( newDir ); ModFileSystem.InvokeChange(); - SelectModByDir( newDir.Name ); + SelectModOnUpdate( newDir.Name ); } catch( Exception e ) { @@ -421,7 +421,8 @@ namespace Penumbra.UI private partial class Selector { public Mod.Mod? Mod { get; private set; } - private int _index; + private int _index; + private string _nextDir = string.Empty; private void SetSelection( int idx, Mod.Mod? info ) { @@ -458,11 +459,8 @@ namespace Penumbra.UI public void ClearSelection() => SetSelection( -1 ); - public void SelectModByName( string name ) - { - var (mod, idx) = Cache.GetModByName( name ); - SetSelection( idx, mod ); - } + public void SelectModOnUpdate( string directory ) + => _nextDir = directory; public void SelectModByDir( string name ) { @@ -479,7 +477,7 @@ namespace Penumbra.UI if( _index >= 0 && _modManager.UpdateMod( Mod.Data, reloadMeta, recomputeMeta ) ) { - SelectModByDir( Mod.Data.BasePath.Name ); + SelectModOnUpdate( Mod.Data.BasePath.Name ); _base._menu.InstalledTab.ModPanel.Details.ResetState(); } } @@ -744,9 +742,17 @@ namespace Penumbra.UI public void Draw() { - if( Cache.Update() && Mod != null ) + if( Cache.Update() ) { - SelectModByDir( Mod.Data.BasePath.Name ); + if( _nextDir.Any() ) + { + SelectModByDir( _nextDir ); + _nextDir = string.Empty; + } + else if( Mod != null ) + { + SelectModByDir( Mod.Data.BasePath.Name ); + } } try