diff --git a/ChatTwo/Configuration.cs b/ChatTwo/Configuration.cs index 63caf5a..261a8ad 100755 --- a/ChatTwo/Configuration.cs +++ b/ChatTwo/Configuration.cs @@ -9,6 +9,7 @@ internal class Configuration : IPluginConfiguration { public bool HideChat = true; public bool NativeItemTooltips = true; + public bool PrettierTimestamps = true; public bool SidebarTabView; public float FontSize = 17f; public Dictionary ChatColours = new(); diff --git a/ChatTwo/Ui/ChatLog.cs b/ChatTwo/Ui/ChatLog.cs index 8507aba..c47ca55 100755 --- a/ChatTwo/Ui/ChatLog.cs +++ b/ChatTwo/Ui/ChatLog.cs @@ -172,6 +172,16 @@ internal sealed class ChatLog : IUiComponent { private void DrawMessageLog(Tab tab, float childHeight, bool switchedTab) { if (ImGui.BeginChild("##chat2-messages", new Vector2(-1, childHeight))) { ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, Vector2.Zero); + var table = tab.DisplayTimestamp && this.Ui.Plugin.Config.PrettierTimestamps; + + if (table) { + if (!ImGui.BeginTable("timestamp-table", 2, ImGuiTableFlags.PreciseWidths)) { + goto EndChild; + } + + ImGui.TableSetupColumn("timestamps", ImGuiTableColumnFlags.WidthFixed); + ImGui.TableSetupColumn("messages", ImGuiTableColumnFlags.WidthStretch); + } // var clipper = new ImGuiListClipperPtr(ImGuiNative.ImGuiListClipper_ImGuiListClipper()); // int numMessages; @@ -184,10 +194,19 @@ internal sealed class ChatLog : IUiComponent { if (tab.DisplayTimestamp) { var timestamp = message.Date.ToLocalTime().ToString("t"); - this.DrawChunk(new TextChunk(null, null, $"[{timestamp}]") { - Foreground = 0xFFFFFFFF, - }); - ImGui.SameLine(); + if (table) { + ImGui.TableNextColumn(); + ImGui.TextUnformatted(timestamp); + } else { + this.DrawChunk(new TextChunk(null, null, $"[{timestamp}]") { + Foreground = 0xFFFFFFFF, + }); + ImGui.SameLine(); + } + } + + if (table) { + ImGui.TableNextColumn(); } if (message.Sender.Count > 0) { @@ -220,10 +239,15 @@ internal sealed class ChatLog : IUiComponent { // ImGui.SetScrollFromPosY(itemPosY - ImGui.GetWindowPos().Y); ImGui.SetScrollHereY(1f); } + + this.PayloadHandler.Draw(); + + if (table) { + ImGui.EndTable(); + } } - this.PayloadHandler.Draw(); - + EndChild: ImGui.EndChild(); } @@ -421,6 +445,10 @@ internal sealed class ChatLog : IUiComponent { ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, Vector2.Zero); try { for (var i = 0; i < chunks.Count; i++) { + if (chunks[i] is TextChunk text && string.IsNullOrEmpty(text.Content)) { + continue; + } + this.DrawChunk(chunks[i], wrap, handler); if (i < chunks.Count - 1) { diff --git a/ChatTwo/Ui/Settings.cs b/ChatTwo/Ui/Settings.cs index 00d82b5..00a461a 100755 --- a/ChatTwo/Ui/Settings.cs +++ b/ChatTwo/Ui/Settings.cs @@ -13,6 +13,7 @@ internal sealed class Settings : IUiComponent { private bool _hideChat; private bool _nativeItemTooltips; private bool _sidebarTabView; + private bool _prettierTimestamps; private float _fontSize; private Dictionary _chatColours = new(); private List _tabs = new(); @@ -37,6 +38,7 @@ internal sealed class Settings : IUiComponent { this._hideChat = config.HideChat; this._nativeItemTooltips = config.NativeItemTooltips; this._sidebarTabView = config.SidebarTabView; + this._prettierTimestamps = config.PrettierTimestamps; this._fontSize = config.FontSize; this._chatColours = config.ChatColours.ToDictionary(entry => entry.Key, entry => entry.Value); this._tabs = config.Tabs.Select(tab => tab.Clone()).ToList(); @@ -65,6 +67,7 @@ internal sealed class Settings : IUiComponent { ImGui.Checkbox("Hide chat", ref this._hideChat); ImGui.Checkbox("Show native item tooltips", ref this._nativeItemTooltips); ImGui.Checkbox("Show tabs in a sidebar", ref this._sidebarTabView); + ImGui.Checkbox("Use modern timestamp layout", ref this._prettierTimestamps); ImGui.DragFloat("Font size", ref this._fontSize, .0125f, 12f, 36f, "%.1f"); if (ImGui.TreeNodeEx("Chat colours")) { @@ -206,6 +209,7 @@ internal sealed class Settings : IUiComponent { config.HideChat = this._hideChat; config.NativeItemTooltips = this._nativeItemTooltips; config.SidebarTabView = this._sidebarTabView; + config.PrettierTimestamps = this._prettierTimestamps; config.FontSize = this._fontSize; config.ChatColours = this._chatColours; config.Tabs = this._tabs;