diff --git a/HellionChat/Ui/FirstRunWizard.cs b/HellionChat/Ui/FirstRunWizard.cs index 2247c05..45f378b 100644 --- a/HellionChat/Ui/FirstRunWizard.cs +++ b/HellionChat/Ui/FirstRunWizard.cs @@ -365,10 +365,10 @@ public sealed class FirstRunWizard : Window if (ImGui.Checkbox(HellionStrings.Wizard_Step3_LoadPreviousSession_Label, ref loadPrev)) { _state.PendingLoadPreviousSession = loadPrev; - // Mirror the DataManagement coupling: turning load-previous on + // Mirror the DataAndPrivacy coupling: turning load-previous on // also turns filter-include on (otherwise old messages bypass // the filter chain), and turning filter-include off forces - // load-previous off. Same idiom as Ui/SettingsTabs/DataManagement.cs:182-200. + // load-previous off. Same idiom as Ui/SettingsTabs/DataAndPrivacy.cs:182-200. if (loadPrev) _state.PendingFilterIncludePreviousSessions = true; } diff --git a/HellionChat/Ui/Settings.cs b/HellionChat/Ui/Settings.cs index 00c7161..92b2e19 100755 --- a/HellionChat/Ui/Settings.cs +++ b/HellionChat/Ui/Settings.cs @@ -24,6 +24,10 @@ public sealed class SettingsWindow : Dalamud.Interface.Windowing.Window private List Tabs { get; } private int CurrentTab; private SettingsView View = SettingsView.Overview; + + // Set when a section is freshly entered; the first Draw afterwards reads it + // and clears it, so each section starts collapsed every time it is opened. + private bool _sectionJustEntered; private readonly SettingsOverview Overview; internal SettingsWindow(Plugin plugin, ILoggerFactory loggerFactory) @@ -46,15 +50,15 @@ public sealed class SettingsWindow : Dalamud.Interface.Windowing.Window Tabs = [ new General(Plugin, Mutable), - new ThemeAndLayout(Plugin, Mutable, loggerFactory.CreateLogger()), + new Appearance(Plugin, Mutable, loggerFactory.CreateLogger()), new FontsAndColours(Plugin, Mutable, loggerFactory.CreateLogger()), new SettingsTabs.Window(Plugin, Mutable), new Chat(Plugin, Mutable), new SettingsTabs.Tabs(Plugin, Mutable), new SettingsTabs.Privacy(Plugin, Mutable), - new DataManagement(Plugin, Mutable, loggerFactory.CreateLogger()), + new DataAndPrivacy(Plugin, Mutable, loggerFactory.CreateLogger()), new SettingsTabs.Integrations(Plugin, Mutable), - new Information(Mutable), + new About(Mutable), ]; RespectCloseHotkey = false; @@ -106,6 +110,7 @@ public sealed class SettingsWindow : Dalamud.Interface.Windowing.Window { CurrentTab = tabIndex; View = SettingsView.Detail; + _sectionJustEntered = true; } internal void OpenOverview() @@ -148,7 +153,10 @@ public sealed class SettingsWindow : Dalamud.Interface.Windowing.Window using var child = ImRaii.Child("##chat2-settings-detail", new Vector2(-1, height)); if (child.Success) - Tabs[CurrentTab].Draw(false); + { + Tabs[CurrentTab].Draw(_sectionJustEntered); + _sectionJustEntered = false; + } } private void DrawSaveButtons() diff --git a/HellionChat/Ui/SettingsTabs/Information.cs b/HellionChat/Ui/SettingsTabs/About.cs similarity index 98% rename from HellionChat/Ui/SettingsTabs/Information.cs rename to HellionChat/Ui/SettingsTabs/About.cs index 39c1208..73e753c 100644 --- a/HellionChat/Ui/SettingsTabs/Information.cs +++ b/HellionChat/Ui/SettingsTabs/About.cs @@ -11,7 +11,7 @@ using HellionChat.Util; namespace HellionChat.Ui.SettingsTabs; // Combines the former About and Changelog tabs into three collapsible sections. -internal sealed class Information : ISettingsTab +internal sealed class About : ISettingsTab { private Configuration Mutable { get; } @@ -47,7 +47,7 @@ internal sealed class Information : ISettingsTab "Sirayuki", ]; - internal Information(Configuration mutable) + internal About(Configuration mutable) { Mutable = mutable; Translators.Sort( @@ -56,7 +56,7 @@ internal sealed class Information : ISettingsTab ); } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { using var wrap = ImRaii.TextWrapPos(0.0f); diff --git a/HellionChat/Ui/SettingsTabs/ThemeAndLayout.cs b/HellionChat/Ui/SettingsTabs/Appearance.cs similarity index 98% rename from HellionChat/Ui/SettingsTabs/ThemeAndLayout.cs rename to HellionChat/Ui/SettingsTabs/Appearance.cs index f5a9f9e..e541671 100644 --- a/HellionChat/Ui/SettingsTabs/ThemeAndLayout.cs +++ b/HellionChat/Ui/SettingsTabs/Appearance.cs @@ -8,25 +8,25 @@ using Microsoft.Extensions.Logging; namespace HellionChat.Ui.SettingsTabs; -internal sealed class ThemeAndLayout : ISettingsTab +internal sealed class Appearance : ISettingsTab { private Plugin Plugin { get; } private Configuration Mutable { get; } - private readonly ILogger _logger; + private readonly ILogger _logger; private string? _applyDismissedFor; public string Name => HellionStrings.Settings_Card_ThemeAndLayout_Title + "###tabs-themeandlayout"; - internal ThemeAndLayout(Plugin plugin, Configuration mutable, ILogger logger) + internal Appearance(Plugin plugin, Configuration mutable, ILogger logger) { Plugin = plugin; Mutable = mutable; _logger = logger; } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { DrawThemeSection(); ImGui.Spacing(); diff --git a/HellionChat/Ui/SettingsTabs/Chat.cs b/HellionChat/Ui/SettingsTabs/Chat.cs index 66f1804..7a374a3 100644 --- a/HellionChat/Ui/SettingsTabs/Chat.cs +++ b/HellionChat/Ui/SettingsTabs/Chat.cs @@ -40,7 +40,7 @@ internal sealed class Chat : ISettingsTab .ToArray(), }; - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { DrawAutoTellTabsSection(); ImGui.Spacing(); diff --git a/HellionChat/Ui/SettingsTabs/DataManagement.cs b/HellionChat/Ui/SettingsTabs/DataAndPrivacy.cs similarity index 99% rename from HellionChat/Ui/SettingsTabs/DataManagement.cs rename to HellionChat/Ui/SettingsTabs/DataAndPrivacy.cs index 3ceab5b..4be8c5a 100644 --- a/HellionChat/Ui/SettingsTabs/DataManagement.cs +++ b/HellionChat/Ui/SettingsTabs/DataAndPrivacy.cs @@ -15,11 +15,11 @@ using Microsoft.Extensions.Logging; namespace HellionChat.Ui.SettingsTabs; -internal sealed class DataManagement : ISettingsTab +internal sealed class DataAndPrivacy : ISettingsTab { private Plugin Plugin { get; } private Configuration Mutable { get; } - private readonly ILogger _logger; + private readonly ILogger _logger; public string Name => HellionStrings.Settings_Card_DataManagement_Title + "###tabs-datamanagement"; @@ -138,18 +138,18 @@ internal sealed class DataManagement : ISettingsTab ), ]; - internal DataManagement(Plugin plugin, Configuration mutable, ILogger logger) + internal DataAndPrivacy(Plugin plugin, Configuration mutable, ILogger logger) { Plugin = plugin; Mutable = mutable; _logger = logger; } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { // Shift-on-open keeps the Advanced tools available without a permanent // toggle in the UI, mirroring upstream Chat 2 behaviour. - if (changed) + if (sectionJustEntered) ShowAdvanced = ImGui.GetIO().KeyShift; DrawStorageSection(); diff --git a/HellionChat/Ui/SettingsTabs/FontsAndColours.cs b/HellionChat/Ui/SettingsTabs/FontsAndColours.cs index 5d15733..14d95b6 100644 --- a/HellionChat/Ui/SettingsTabs/FontsAndColours.cs +++ b/HellionChat/Ui/SettingsTabs/FontsAndColours.cs @@ -27,7 +27,7 @@ internal sealed class FontsAndColours : ISettingsTab _logger = logger; } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { DrawFontsSection(); ImGui.Spacing(); diff --git a/HellionChat/Ui/SettingsTabs/General.cs b/HellionChat/Ui/SettingsTabs/General.cs index 9a13d5b..8aed26b 100644 --- a/HellionChat/Ui/SettingsTabs/General.cs +++ b/HellionChat/Ui/SettingsTabs/General.cs @@ -19,7 +19,7 @@ internal sealed class General : ISettingsTab Mutable = mutable; } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { DrawInputSection(); ImGui.Spacing(); diff --git a/HellionChat/Ui/SettingsTabs/ISettingsTab.cs b/HellionChat/Ui/SettingsTabs/ISettingsTab.cs index ce99fea..9dbdd39 100755 --- a/HellionChat/Ui/SettingsTabs/ISettingsTab.cs +++ b/HellionChat/Ui/SettingsTabs/ISettingsTab.cs @@ -3,5 +3,5 @@ namespace HellionChat.Ui.SettingsTabs; internal interface ISettingsTab { string Name { get; } - void Draw(bool changed); + void Draw(bool sectionJustEntered); } diff --git a/HellionChat/Ui/SettingsTabs/Integrations.cs b/HellionChat/Ui/SettingsTabs/Integrations.cs index 4f7792d..ae48c10 100644 --- a/HellionChat/Ui/SettingsTabs/Integrations.cs +++ b/HellionChat/Ui/SettingsTabs/Integrations.cs @@ -23,7 +23,7 @@ internal sealed class Integrations : ISettingsTab Mutable = mutable; } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { ImGui.TextWrapped(HellionStrings.Settings_Integrations_Intro); ImGui.Spacing(); diff --git a/HellionChat/Ui/SettingsTabs/Privacy.cs b/HellionChat/Ui/SettingsTabs/Privacy.cs index 27e70a4..0bb5082 100644 --- a/HellionChat/Ui/SettingsTabs/Privacy.cs +++ b/HellionChat/Ui/SettingsTabs/Privacy.cs @@ -109,7 +109,7 @@ internal sealed class Privacy : ISettingsTab ), ]; - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { if (ImGui.Button(HellionStrings.Wizard_Reopen_Button)) Plugin.FirstRunWizard.IsOpen = true; diff --git a/HellionChat/Ui/SettingsTabs/Tabs.cs b/HellionChat/Ui/SettingsTabs/Tabs.cs index 865c5a6..5f571a3 100755 --- a/HellionChat/Ui/SettingsTabs/Tabs.cs +++ b/HellionChat/Ui/SettingsTabs/Tabs.cs @@ -24,7 +24,7 @@ internal sealed class Tabs : ISettingsTab Mutable = mutable; } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { const string addTabPopup = "add-tab-popup"; diff --git a/HellionChat/Ui/SettingsTabs/Window.cs b/HellionChat/Ui/SettingsTabs/Window.cs index 7f7a0f1..9bf1288 100644 --- a/HellionChat/Ui/SettingsTabs/Window.cs +++ b/HellionChat/Ui/SettingsTabs/Window.cs @@ -18,7 +18,7 @@ internal sealed class Window : ISettingsTab Mutable = mutable; } - public void Draw(bool changed) + public void Draw(bool sectionJustEntered) { DrawHideSection(); ImGui.Spacing();