From 93668bf339dfcbce18426d242fc46801b10d80a6 Mon Sep 17 00:00:00 2001 From: marchellc Date: Wed, 22 Jan 2025 16:09:09 +0100 Subject: [PATCH] settings api fixes --- .../Debug/SettingsTest/SettingsTestCommand.cs | 2 +- .../API/Settings/Entries/Dropdown/SettingsDropdown.cs | 7 +++++++ LabExtended/API/Settings/Menus/SettingsMenu.cs | 8 ++++++-- LabExtended/API/Settings/SettingsExtensions.cs | 9 +++++++++ LabExtended/API/Settings/SettingsManager.cs | 10 ++++++---- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/LabExtended/API/CustomCommands/Debug/SettingsTest/SettingsTestCommand.cs b/LabExtended/API/CustomCommands/Debug/SettingsTest/SettingsTestCommand.cs index bc3b78b..af92de6 100644 --- a/LabExtended/API/CustomCommands/Debug/SettingsTest/SettingsTestCommand.cs +++ b/LabExtended/API/CustomCommands/Debug/SettingsTest/SettingsTestCommand.cs @@ -50,7 +50,7 @@ private static void ApplyTestMenu(List menus) public class TestMenu : SettingsMenu { public override string CustomId { get; } = "testMenu"; - public override string MenuLabel { get; } = "Test Menu"; + public override string Header { get; } = "Test Menu"; public override void BuildMenu(List settings) { diff --git a/LabExtended/API/Settings/Entries/Dropdown/SettingsDropdown.cs b/LabExtended/API/Settings/Entries/Dropdown/SettingsDropdown.cs index 768baea..285327f 100644 --- a/LabExtended/API/Settings/Entries/Dropdown/SettingsDropdown.cs +++ b/LabExtended/API/Settings/Entries/Dropdown/SettingsDropdown.cs @@ -19,6 +19,7 @@ public SettingsDropdown( SSDropdownSetting.DropdownEntryType dropdownEntryType, Action dropdownBuilder = null, string dropdownHint = null) + : base(new SSDropdownSetting( SettingsManager.GetIntegerId(customId), @@ -31,6 +32,9 @@ public SettingsDropdown( customId) { Base = (SSDropdownSetting)base.Base; + + dropdownBuilder.InvokeSafe(this); + Base.Options = Options.Select(x => x.Text).ToArray(); _prevSelectedIndex = Base.DefaultOptionIndex; @@ -72,6 +76,9 @@ public SettingsDropdownOption SelectedOption return Options[SelectedIndex]; } } + + public void SyncOptions() + => Base.Options = Options.Select(x => x.Text).ToArray(); public SettingsDropdown AddOption(T optionValue, string optionText) => AddOption(new SettingsDropdownOption(optionValue, optionText)); diff --git a/LabExtended/API/Settings/Menus/SettingsMenu.cs b/LabExtended/API/Settings/Menus/SettingsMenu.cs index 5437f3e..4d48540 100644 --- a/LabExtended/API/Settings/Menus/SettingsMenu.cs +++ b/LabExtended/API/Settings/Menus/SettingsMenu.cs @@ -9,8 +9,12 @@ namespace LabExtended.API.Settings.Menus public abstract class SettingsMenu { public abstract string CustomId { get; } - public abstract string MenuLabel { get; } - + + public abstract string Header { get; } + + public virtual string HeaderHint { get; } + public virtual bool HeaderReducedPadding { get; } + public ExPlayer Player { get; internal set; } public LockedList Settings { get; } = new LockedList(); diff --git a/LabExtended/API/Settings/SettingsExtensions.cs b/LabExtended/API/Settings/SettingsExtensions.cs index 7e42a57..1eb0209 100644 --- a/LabExtended/API/Settings/SettingsExtensions.cs +++ b/LabExtended/API/Settings/SettingsExtensions.cs @@ -4,6 +4,15 @@ namespace LabExtended.API.Settings; public static class SettingsExtensions { + public static List WithEntry(this List entries) where T : SettingsEntry, new() + { + if (entries is null) + throw new ArgumentNullException(nameof(entries)); + + entries.Add(Activator.CreateInstance()); + return entries; + } + public static List WithEntry(this List entries, SettingsEntry entry) { if (entries is null) diff --git a/LabExtended/API/Settings/SettingsManager.cs b/LabExtended/API/Settings/SettingsManager.cs index de23188..28efa64 100644 --- a/LabExtended/API/Settings/SettingsManager.cs +++ b/LabExtended/API/Settings/SettingsManager.cs @@ -284,15 +284,17 @@ private static void OnPlayerJoined(ExPlayer player) builtMenu.Player = player; - if (!string.IsNullOrWhiteSpace(builtMenu.MenuLabel)) - builtList.Add(new SSGroupHeader(builtMenu.MenuLabel)); - builtMenu.BuildMenu(menuList); builtMenu.Settings.Clear(); builtMenu.Settings.AddRange(menuList); ListPool.Shared.Return(menuList); + + if (!idEntries.TryGetValue(builtMenu.CustomId, out var menuHeader)) + idEntries.Add(builtMenu.CustomId, menuHeader = new LockedDictionary()); + + menuHeader[player] = new SettingsGroup(builtMenu.Header, builtMenu.HeaderReducedPadding, builtMenu.HeaderHint); for (int y = 0; y < builtMenu.Settings.Count; y++) { @@ -461,7 +463,7 @@ internal static void OnResponseMessage(NetworkConnection connection, SSSClientRe break; case SettingsDropdown dropdown: - entry.Menu.OnDropdownSelected(dropdown, dropdown.TryGetOption(dropdown.SelectedIndex, out var option) ? option : null); + entry.Menu.OnDropdownSelected(dropdown, dropdown.SelectedOption); break; } }