From 3078c467d0666e28ab25dd31d515648300f946da Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Sun, 18 May 2025 12:31:34 +0200 Subject: [PATCH] Fix issue with empty and temporary settings. --- Penumbra/Mods/Settings/ModSettings.cs | 15 +++++++++++---- Penumbra/Mods/Settings/TemporaryModSettings.cs | 11 +++++++++-- Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs | 4 ++-- Penumbra/UI/ModsTab/ModPanelSettingsTab.cs | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Penumbra/Mods/Settings/ModSettings.cs b/Penumbra/Mods/Settings/ModSettings.cs index 07217d4d..bbdd6bfa 100644 --- a/Penumbra/Mods/Settings/ModSettings.cs +++ b/Penumbra/Mods/Settings/ModSettings.cs @@ -11,11 +11,18 @@ namespace Penumbra.Mods.Settings; /// Contains the settings for a given mod. public class ModSettings { - public static readonly ModSettings Empty = new(); + public static readonly ModSettings Empty = new(true); - public SettingList Settings { get; internal init; } = []; - public ModPriority Priority { get; set; } - public bool Enabled { get; set; } + public SettingList Settings { get; internal init; } = []; + public ModPriority Priority { get; set; } + public bool Enabled { get; set; } + public bool IsEmpty { get; protected init; } + + public ModSettings() + { } + + protected ModSettings(bool empty) + => IsEmpty = empty; // Create an independent copy of the current settings. public ModSettings DeepCopy() diff --git a/Penumbra/Mods/Settings/TemporaryModSettings.cs b/Penumbra/Mods/Settings/TemporaryModSettings.cs index a16a9feb..ce438aac 100644 --- a/Penumbra/Mods/Settings/TemporaryModSettings.cs +++ b/Penumbra/Mods/Settings/TemporaryModSettings.cs @@ -2,9 +2,11 @@ namespace Penumbra.Mods.Settings; public sealed class TemporaryModSettings : ModSettings { + public new static readonly TemporaryModSettings Empty = new(true); + public const string OwnSource = "yourself"; public string Source = string.Empty; - public int Lock = 0; + public int Lock; public bool ForceInherit; // Create default settings for a given mod. @@ -21,12 +23,16 @@ public sealed class TemporaryModSettings : ModSettings public TemporaryModSettings() { } + private TemporaryModSettings(bool empty) + : base(empty) + { } + public TemporaryModSettings(Mod mod, ModSettings? clone, string source = OwnSource, int key = 0) { Source = source; Lock = key; ForceInherit = clone == null; - if (clone != null && clone != Empty) + if (clone is { IsEmpty: false }) { Enabled = clone.Enabled; Priority = clone.Priority; @@ -34,6 +40,7 @@ public sealed class TemporaryModSettings : ModSettings } else { + IsEmpty = true; Enabled = false; Priority = ModPriority.Default; Settings = SettingList.Default(mod); diff --git a/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs b/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs index 666fce61..3e165cb5 100644 --- a/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs +++ b/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs @@ -49,7 +49,7 @@ public sealed class ModGroupDrawer(Configuration config, CollectionManager colle case GroupDrawBehaviour.SingleSelection: ImGuiUtil.Dummy(UiHelpers.DefaultSpace, useDummy); useDummy = false; - DrawSingleGroupCombo(group, idx, settings == ModSettings.Empty ? group.DefaultSettings : settings.Settings[idx]); + DrawSingleGroupCombo(group, idx, settings.IsEmpty ? group.DefaultSettings : settings.Settings[idx]); break; } } @@ -59,7 +59,7 @@ public sealed class ModGroupDrawer(Configuration config, CollectionManager colle { ImGuiUtil.Dummy(UiHelpers.DefaultSpace, useDummy); useDummy = false; - var option = settings == ModSettings.Empty ? group.DefaultSettings : settings.Settings[idx]; + var option = settings.IsEmpty ? group.DefaultSettings : settings.Settings[idx]; if (group.Behaviour is GroupDrawBehaviour.MultiSelection) DrawMultiGroup(group, idx, option); else diff --git a/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs b/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs index 3988de35..7c6ebf74 100644 --- a/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs +++ b/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs @@ -183,7 +183,7 @@ public class ModPanelSettingsTab( /// private void DrawRemoveSettings() { - var drawInherited = !_inherited && selection.Settings != ModSettings.Empty; + var drawInherited = !_inherited && !selection.Settings.IsEmpty; var scroll = ImGui.GetScrollMaxY() > 0 ? ImGui.GetStyle().ScrollbarSize + ImGui.GetStyle().ItemInnerSpacing.X : 0; var buttonSize = ImUtf8.CalcTextSize("Turn Permanent_"u8).X; var offset = drawInherited