diff --git a/ChatTwo/Resources/HellionStrings.Designer.cs b/ChatTwo/Resources/HellionStrings.Designer.cs index f50e2e8..3dac2eb 100644 --- a/ChatTwo/Resources/HellionStrings.Designer.cs +++ b/ChatTwo/Resources/HellionStrings.Designer.cs @@ -221,4 +221,10 @@ internal class HellionStrings internal static string Settings_Window_InactivityHide_Heading => Get(nameof(Settings_Window_InactivityHide_Heading)); internal static string Settings_Window_Frame_Heading => Get(nameof(Settings_Window_Frame_Heading)); internal static string Settings_Window_Tooltips_Heading => Get(nameof(Settings_Window_Tooltips_Heading)); + + // Hellion Chat — Chat-Tab section headings + internal static string Settings_Chat_AutoTellTabs_Heading => Get(nameof(Settings_Chat_AutoTellTabs_Heading)); + internal static string Settings_Chat_Behaviour_Heading => Get(nameof(Settings_Chat_Behaviour_Heading)); + internal static string Settings_Chat_Preview_Heading => Get(nameof(Settings_Chat_Preview_Heading)); + internal static string Settings_Chat_Emotes_Heading => Get(nameof(Settings_Chat_Emotes_Heading)); } diff --git a/ChatTwo/Resources/HellionStrings.de.resx b/ChatTwo/Resources/HellionStrings.de.resx index 2bf579c..48b161e 100644 --- a/ChatTwo/Resources/HellionStrings.de.resx +++ b/ChatTwo/Resources/HellionStrings.de.resx @@ -505,4 +505,18 @@ Tooltips + + + + Auto-Tell-Tabs + + + Nachrichten-Verhalten + + + Vorschau + + + Emotes + diff --git a/ChatTwo/Resources/HellionStrings.resx b/ChatTwo/Resources/HellionStrings.resx index f14e346..9cb8ce4 100644 --- a/ChatTwo/Resources/HellionStrings.resx +++ b/ChatTwo/Resources/HellionStrings.resx @@ -505,4 +505,18 @@ Tooltips + + + + Auto-Tell-Tabs + + + Message Behaviour + + + Preview + + + Emotes + diff --git a/ChatTwo/Ui/SettingsTabs/Chat.cs b/ChatTwo/Ui/SettingsTabs/Chat.cs index 61f8896..49baafc 100644 --- a/ChatTwo/Ui/SettingsTabs/Chat.cs +++ b/ChatTwo/Ui/SettingsTabs/Chat.cs @@ -1,5 +1,8 @@ +using System.Numerics; using ChatTwo.Resources; using ChatTwo.Util; +using Dalamud.Interface; +using Dalamud.Interface.Colors; using Dalamud.Interface.Utility; using Dalamud.Interface.Utility.Raii; using Dalamud.Bindings.ImGui; @@ -13,14 +16,215 @@ internal sealed class Chat : ISettingsTab public string Name => HellionStrings.Settings_Tab_Chat + "###tabs-chat"; + private SearchSelector.SelectorPopupOptions WordPopupOptions; + internal Chat(Plugin plugin, Configuration mutable) { Plugin = plugin; Mutable = mutable; + + WordPopupOptions = RefillSheet(); + } + + private SearchSelector.SelectorPopupOptions RefillSheet() + { + return new SearchSelector.SelectorPopupOptions + { + FilteredSheet = EmoteCache.SortedCodeArray.Where(w => !Mutable.BlockedEmotes.Contains(w)).ToArray() + }; } public void Draw(bool changed) { - // Settings ziehen in Plan-Task 6 ein. + DrawAutoTellTabsSection(); + ImGui.Spacing(); + DrawBehaviourSection(); + ImGui.Spacing(); + DrawPreviewSection(); + ImGui.Spacing(); + DrawEmotesSection(); + } + + private void DrawAutoTellTabsSection() + { + using var tree = ImRaii.TreeNode(HellionStrings.Settings_Chat_AutoTellTabs_Heading); + if (!tree.Success) + { + return; + } + + using (ImRaii.PushIndent(ImGui.GetStyle().IndentSpacing, false)) + { + ImGui.Checkbox(HellionStrings.ChatLog_AutoTellTabs_Enable_Name, ref Mutable.EnableAutoTellTabs); + ImGuiUtil.HelpMarker(HellionStrings.ChatLog_AutoTellTabs_Enable_Description); + + ImGui.SetNextItemWidth(200f * ImGuiHelpers.GlobalScale); + var limit = Mutable.AutoTellTabsLimit; + if (ImGui.SliderInt(HellionStrings.ChatLog_AutoTellTabs_Limit_Name, ref limit, 1, 50)) + { + Mutable.AutoTellTabsLimit = limit; + } + ImGuiUtil.HelpMarker(HellionStrings.ChatLog_AutoTellTabs_Limit_Description); + + ImGui.Checkbox(HellionStrings.ChatLog_AutoTellTabs_Compact_Name, ref Mutable.AutoTellTabsCompactDisplay); + ImGuiUtil.HelpMarker(HellionStrings.ChatLog_AutoTellTabs_Compact_Description); + + ImGui.Checkbox(HellionStrings.ChatLog_AutoTellTabs_GreetedToggle_Name, ref Mutable.AutoTellTabsShowGreetedToggle); + ImGuiUtil.HelpMarker(HellionStrings.ChatLog_AutoTellTabs_GreetedToggle_Description); + + ImGui.Spacing(); + ImGuiUtil.HelpText(HellionStrings.ChatLog_AutoTellTabs_PreloadHint); + + ImGui.Spacing(); + ImGuiUtil.WarningText(HellionStrings.ChatLog_AutoTellTabs_ConflictHint); + } + } + + private void DrawBehaviourSection() + { + using var tree = ImRaii.TreeNode(HellionStrings.Settings_Chat_Behaviour_Heading); + if (!tree.Success) + { + return; + } + + using (ImRaii.PushIndent(ImGui.GetStyle().IndentSpacing, false)) + { + ImGui.Checkbox(Language.Options_CollapseDuplicateMessages_Name, ref Mutable.CollapseDuplicateMessages); + ImGuiUtil.HelpMarker(Language.Options_CollapseDuplicateMessages_Description); + + if (Mutable.CollapseDuplicateMessages) + { + ImGui.Checkbox(Language.Options_CollapseDuplicateMsgUniqueLink_Name, ref Mutable.CollapseKeepUniqueLinks); + ImGuiUtil.HelpMarker(Language.Options_CollapseDuplicateMsgUniqueLink_Description); + } + } + } + + private void DrawPreviewSection() + { + using var tree = ImRaii.TreeNode(HellionStrings.Settings_Chat_Preview_Heading); + if (!tree.Success) + { + return; + } + + using (ImRaii.PushIndent(ImGui.GetStyle().IndentSpacing, false)) + { + using (var combo = ImGuiUtil.BeginComboVertical(Language.Options_Preview_Name, Mutable.PreviewPosition.Name())) + { + if (combo) + { + foreach (var position in Enum.GetValues()) + { + if (ImGui.Selectable(position.Name(), Mutable.PreviewPosition == position)) + { + Mutable.PreviewPosition = position; + } + } + } + } + ImGuiUtil.HelpMarker(Language.Options_Preview_Description); + + if (ImGuiUtil.InputIntVertical(Language.Options_PreviewMinimum_Name, Language.Options_PreviewMinimum_Description, ref Mutable.PreviewMinimum)) + { + Mutable.PreviewMinimum = Math.Clamp(Mutable.PreviewMinimum, 1, 250); + } + + ImGui.Checkbox(Language.Options_PreviewOnlyIf_Name, ref Mutable.OnlyPreviewIf); + ImGuiUtil.HelpMarker(Language.Options_PreviewOnlyIf_Description); + } + } + + private void DrawEmotesSection() + { + using var tree = ImRaii.TreeNode(HellionStrings.Settings_Chat_Emotes_Heading); + if (!tree.Success) + { + return; + } + + using (ImRaii.PushIndent(ImGui.GetStyle().IndentSpacing, false)) + { + ImGui.Checkbox(Language.Options_ShowEmotes_Name, ref Mutable.ShowEmotes); + ImGuiUtil.HelpMarker(Language.Options_ShowEmotes_Desc); + + ImGui.Spacing(); + ImGui.TextUnformatted(Language.Options_Emote_BlockedEmotes); + ImGui.Spacing(); + + if (EmoteCache.State is EmoteCache.LoadingState.Done && WordPopupOptions.FilteredSheet.Length == 0) + { + WordPopupOptions = RefillSheet(); + } + + var buttonWidth = ImGui.GetContentRegionAvail().X / 3; + using (Plugin.FontManager.FontAwesome.Push()) + ImGui.Button(FontAwesomeIcon.Plus.ToIconString(), new Vector2(buttonWidth, 0)); + + if (SearchSelector.SelectorPopup("WordAddPopup", out var newWord, WordPopupOptions)) + { + Mutable.BlockedEmotes.Add(newWord); + } + + using (var table = ImRaii.Table("##BlockedWords", 2, ImGuiTableFlags.RowBg | ImGuiTableFlags.BordersInner)) + { + if (table) + { + ImGui.TableSetupColumn(Language.Options_Emote_EmoteTable); + ImGui.TableSetupColumn("##Del", ImGuiTableColumnFlags.WidthStretch, 0.07f); + + ImGui.TableHeadersRow(); + + var copiedList = Mutable.BlockedEmotes.ToArray(); + foreach (var word in copiedList) + { + ImGui.TableNextColumn(); + ImGui.TextUnformatted(word); + + ImGui.TableNextColumn(); + if (ImGuiUtil.Button($"##{word}Del", FontAwesomeIcon.Trash, !ImGui.GetIO().KeyCtrl)) + { + Mutable.BlockedEmotes.Remove(word); + } + } + } + } + + ImGui.Spacing(); + ImGui.Separator(); + ImGui.Spacing(); + + ImGui.TextUnformatted(Language.Options_Emote_EmoteStats); + ImGui.Spacing(); + + if (EmoteCache.State is EmoteCache.LoadingState.Done) + { + ImGui.TextColored(ImGuiColors.HealerGreen, Language.Options_Emote_Ready); + } + else + { + ImGui.TextColored(ImGuiColors.DPSRed, Language.Options_Emote_NotReady); + } + + ImGui.TextUnformatted($"{Language.Options_Emote_Loaded} {EmoteCache.SortedCodeArray.Length}"); + using (var emoteTable = ImRaii.Table("##LoadedEmotes", 5, ImGuiTableFlags.RowBg | ImGuiTableFlags.BordersInner)) + { + if (emoteTable) + { + ImGui.TableSetupColumn("##word1"); + ImGui.TableSetupColumn("##word2"); + ImGui.TableSetupColumn("##word3"); + ImGui.TableSetupColumn("##word4"); + ImGui.TableSetupColumn("##word5"); + + foreach (var word in EmoteCache.SortedCodeArray) + { + ImGui.TableNextColumn(); + ImGui.TextUnformatted(word); + } + } + } + } } }