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);
+ }
+ }
+ }
+ }
}
}