Accumulated polish across the v1.7.1 R-Block reviewer findings. Single sweep before Phase-3 Smoke-Gate. Dep-cycle cleanup (Block H + #30): - CommandHelpWindow drops the dead _inputBar ctor-param + discard that was J's speculative prep; this eliminates the InputBar <-> CommandHelpWindow ctor cycle at its root - InputBar replaces Lazy<CommandHelpWindow> wrapper with direct CommandHelpWindow ctor-param now that the cycle is broken - PluginHostFactory InputBar + CommandHelpWindow DI-regs simplified Dead-field removals: - MessageList drops _themes + _resolver (no reads after H's render-path swap to _chunkRenderer.DrawChunks) - InputBar drops FocusedPreview (no consumer wiring in the new architecture) - InputPreview drops SelectedCursorPos (v1.5.6 letter-by-letter renderer artifact, no callers in R1) - InputPreview drops WhitespaceRegex + partial keyword on class (dead GeneratedRegex with no callers) Visibility fixes: - InputPreview + CommandHelpWindow + DebuggerWindow ctors flip public -> internal for consistency with internal sealed class declarations DI helper extraction: - PluginHostFactory MakePayloadHandler private static helper DRYs the 7-arg list shared between PayloadHandler-singleton and Lender<T> factory ImGui-rendering fix: - MessageList.DrawCompactRow uses SameLine(0f, 0f) — eliminates visible ItemSpacing.X gap between sender-prefix and chunk content Bug fixes: - PayloadHandler.LeftClickPayload drops spurious unsafe keyword (no pointer ops in the method body; v1.5.6 had no unsafe here) - PayloadHandler.StringifyMessage Aggregate seeded with string.Empty to fix empty-sequence crash for pure-icon messages - PayloadHandler.MoveTooltip args==null LogWarning template simplified (?.GetType().Name was always null after the null-check — misleading) - InputBar.SlashCommandCallback drops redundant BufTextLen==0 guard (BufTextSpan handles empty correctly) Comment improvements (WHY-not-WHAT): - ImGuiUtil.cs payload-state cluster comment moved below Buttons array - PayloadHandler: §6.9 trimmed to 1 line, FindCharacterForPayload documented, hq symbol marker restored, MoveTooltip guard documented as defensive v1.7.1 addition, NativeItemTooltips branch explained, §4.2 theme colour swap explained - DebuggerWindow class comment mentions PayloadHandler counters section - InitHostedServices StopAsync explains params-overload semantics - InputBar AppendPending null policy vs SetPendingMessage documented, CommandManager leading-slash assumption noted - PluginHostFactory block comment explains singleton+Lender split Build: 0 warnings, 0 errors. csharpier: clean. Version unchanged.
78 lines
3.0 KiB
C#
78 lines
3.0 KiB
C#
using System.Numerics;
|
|
using Dalamud.Bindings.ImGui;
|
|
using Dalamud.Interface.Colors;
|
|
using Dalamud.Interface.Utility;
|
|
using Dalamud.Interface.Windowing;
|
|
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
|
|
using HellionChat.Code;
|
|
using Lumina.Text.ReadOnly;
|
|
|
|
namespace HellionChat.Ui;
|
|
|
|
// Dev tool. Reduced to the parts that survive without the legacy chat
|
|
// window: PayloadHandler counters, current-tab channel state, and the
|
|
// vanilla chat channel label.
|
|
internal sealed class DebuggerWindow : Window, IDisposable
|
|
{
|
|
private readonly Plugin Plugin;
|
|
private readonly PayloadHandler _payloadHandler;
|
|
|
|
internal DebuggerWindow(Plugin plugin, PayloadHandler payloadHandler)
|
|
: base("Debugger###chat2-debugger")
|
|
{
|
|
Plugin = plugin;
|
|
_payloadHandler = payloadHandler;
|
|
|
|
SizeConstraints = new WindowSizeConstraints
|
|
{
|
|
MinimumSize = new Vector2(475, 600),
|
|
MaximumSize = new Vector2(float.MaxValue, float.MaxValue),
|
|
};
|
|
|
|
RespectCloseHotkey = false;
|
|
DisableWindowSounds = true;
|
|
}
|
|
|
|
public void Dispose() { }
|
|
|
|
public override unsafe void Draw()
|
|
{
|
|
var agent = (nint)AgentItemDetail.Instance();
|
|
if (ImGui.Selectable($"Agent Address: {agent:X}"))
|
|
ImGui.SetClipboardText(agent.ToString("X"));
|
|
|
|
ImGuiHelpers.ScaledDummy(5.0f);
|
|
ImGui.TextUnformatted($"Handle Tooltips: {_payloadHandler.HandleTooltips}");
|
|
ImGui.TextUnformatted($"Hovered Item: {_payloadHandler.HoveredItem}");
|
|
ImGui.TextUnformatted($"Hover Counter: {_payloadHandler.HoverCounter}");
|
|
ImGui.TextUnformatted($"Last Hover Counter: {_payloadHandler.LastHoverCounter}");
|
|
|
|
ImGuiHelpers.ScaledDummy(5.0f);
|
|
ImGui.TextColored(ImGuiColors.DalamudOrange, "Current Tab");
|
|
ImGui.TextUnformatted($"Name: {Plugin.CurrentTab.Name}");
|
|
ImGui.TextUnformatted(
|
|
$"Channel: {Plugin.CurrentTab.CurrentChannel.Channel.ToChatType().Name()}"
|
|
);
|
|
ImGui.TextUnformatted(
|
|
$"Tell Target: {Plugin.CurrentTab.CurrentChannel.TellTarget?.ToTargetString() ?? "Null"}"
|
|
);
|
|
ImGui.TextUnformatted($"Use Temp? {Plugin.CurrentTab.CurrentChannel.UseTempChannel}");
|
|
ImGui.TextUnformatted(
|
|
$"Temp Channel: {Plugin.CurrentTab.CurrentChannel.TempChannel.ToChatType().Name()}"
|
|
);
|
|
ImGui.TextUnformatted(
|
|
$"Temp Tell Target: {Plugin.CurrentTab.CurrentChannel.TempTellTarget?.ToTargetString() ?? "Null"}"
|
|
);
|
|
ImGui.TextUnformatted($"Name Set? {Plugin.CurrentTab.CurrentChannel.Name.Count > 0}");
|
|
ImGui.TextUnformatted(
|
|
$"Name {string.Join(" ", Plugin.CurrentTab.CurrentChannel.Name.Select(c => c.StringValue()))}"
|
|
);
|
|
|
|
ImGuiHelpers.ScaledDummy(5.0f);
|
|
ImGui.TextColored(ImGuiColors.DalamudOrange, "Vanilla Chat");
|
|
ImGui.TextUnformatted(
|
|
$"Channel: {new ReadOnlySeString(AgentChatLog.Instance()->ChannelLabel).ExtractText()}"
|
|
);
|
|
}
|
|
}
|