From 5ac3a903f6a50275c0ae2c5f4d29e79e9d6cab96 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Sat, 13 Aug 2022 21:18:34 +0200 Subject: [PATCH] Update submod positions on group deletions. --- Penumbra/Mods/Manager/Mod.Manager.Options.cs | 21 ++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Penumbra/Mods/Manager/Mod.Manager.Options.cs b/Penumbra/Mods/Manager/Mod.Manager.Options.cs index 6d35b5d1..b5d3f36a 100644 --- a/Penumbra/Mods/Manager/Mod.Manager.Options.cs +++ b/Penumbra/Mods/Manager/Mod.Manager.Options.cs @@ -70,6 +70,7 @@ public sealed partial class Mod var group = mod._groups[ groupIdx ]; ModOptionChanged.Invoke( ModOptionChangeType.PrepareChange, mod, groupIdx, -1, -1 ); mod._groups.RemoveAt( groupIdx ); + UpdateSubModPositions( mod, groupIdx ); group.DeleteFile( mod.ModPath, groupIdx ); ModOptionChanged.Invoke( ModOptionChangeType.GroupDeleted, mod, groupIdx, -1, -1 ); } @@ -78,18 +79,22 @@ public sealed partial class Mod { if( mod._groups.Move( groupIdxFrom, groupIdxTo ) ) { - foreach( var (group, groupIdx) in mod._groups.WithIndex().Skip( Math.Min( groupIdxFrom, groupIdxTo ) ) ) - { - foreach( var (o, optionIdx) in group.OfType().WithIndex() ) - { - o.SetPosition( groupIdx, optionIdx ); - } - } - + UpdateSubModPositions( mod, Math.Min( groupIdxFrom, groupIdxTo ) ); ModOptionChanged.Invoke( ModOptionChangeType.GroupMoved, mod, groupIdxFrom, -1, groupIdxTo ); } } + private static void UpdateSubModPositions( Mod mod, int fromGroup ) + { + foreach( var (group, groupIdx) in mod._groups.WithIndex().Skip( fromGroup ) ) + { + foreach( var (o, optionIdx) in group.OfType().WithIndex() ) + { + o.SetPosition( groupIdx, optionIdx ); + } + } + } + public void ChangeGroupDescription( Mod mod, int groupIdx, string newDescription ) { var group = mod._groups[ groupIdx ];