From ec4b5935d89ab4160c4853600dafabe8651e9792 Mon Sep 17 00:00:00 2001 From: goat Date: Tue, 21 Mar 2023 19:48:02 +0100 Subject: [PATCH] fix: specify a fallback value for chat channel settings entry --- .../Windows/Settings/Tabs/SettingsTabGeneral.cs | 3 ++- .../Windows/Settings/Widgets/SettingsEntry{T}.cs | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabGeneral.cs b/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabGeneral.cs index 7b4e29980..53869ca16 100644 --- a/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabGeneral.cs +++ b/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabGeneral.cs @@ -27,7 +27,8 @@ public class SettingsTabGeneral : SettingsTab return Loc.Localize("DalamudSettingsChannelNone", "Do not pick \"None\"."); return null; - }), + }, + fallbackValue: XivChatType.Debug), new GapSettingsEntry(5), diff --git a/Dalamud/Interface/Internal/Windows/Settings/Widgets/SettingsEntry{T}.cs b/Dalamud/Interface/Internal/Windows/Settings/Widgets/SettingsEntry{T}.cs index b5fada8fd..c8ebfca88 100644 --- a/Dalamud/Interface/Internal/Windows/Settings/Widgets/SettingsEntry{T}.cs +++ b/Dalamud/Interface/Internal/Windows/Settings/Widgets/SettingsEntry{T}.cs @@ -20,8 +20,10 @@ internal sealed class SettingsEntry : SettingsEntry private readonly Action? change; private object? valueBacking; + private object? fallbackValue; - public SettingsEntry(string name, string description, LoadSettingDelegate load, SaveSettingDelegate save, Action? change = null, Func? warning = null, Func? validity = null, Func? visibility = null) + public SettingsEntry(string name, string description, LoadSettingDelegate load, SaveSettingDelegate save, Action? change = null, Func? warning = null, Func? validity = null, Func? visibility = null, + object? fallbackValue = null) { this.load = load; this.save = save; @@ -31,6 +33,8 @@ internal sealed class SettingsEntry : SettingsEntry this.CheckWarning = warning; this.CheckValidity = validity; this.CheckVisibility = visibility; + + this.fallbackValue = fallbackValue; } public delegate T? LoadSettingDelegate(DalamudConfiguration config); @@ -97,6 +101,12 @@ internal sealed class SettingsEntry : SettingsEntry var descriptions = values.Cast().ToDictionary(x => x, x => x.GetAttribute() ?? new SettingsAnnotationAttribute(x.ToString(), string.Empty)); + if (!descriptions.ContainsKey(idx)) + { + idx = (Enum)this.fallbackValue ?? throw new Exception("No fallback value for enum"); + this.valueBacking = idx; + } + if (ImGui.BeginCombo($"###{this.Id.ToString()}", descriptions[idx].FriendlyName)) { foreach (Enum value in values)