diff --git a/HellionChat/PayloadHandler.cs b/HellionChat/PayloadHandler.cs index dfb1bba..aebf615 100644 --- a/HellionChat/PayloadHandler.cs +++ b/HellionChat/PayloadHandler.cs @@ -1,15 +1,66 @@ using Dalamud.Bindings.ImGui; using Dalamud.Game.Text.SeStringHandling; +using HellionChat.Themes; +using HellionChat.Ui.Components; +using HellionChat.Ui.Windows; +using Microsoft.Extensions.Logging; namespace HellionChat; -// TODO(E): full PayloadHandler implementation — click/hover routing, tooltip -// positioning, party-finder and URI handling. This forward-stub exists only to -// satisfy the DrawChunks/DrawChunk and ImGuiUtil.PostPayload signatures while -// Sub-Task E is pending. -public sealed class PayloadHandler +internal sealed class PayloadHandler { + private const string PopupId = "hellionchat-context-popup"; + + private readonly ThemeRegistry _themes; + private readonly IpcManager _ipc; + private readonly GameFunctions.GameFunctions _functions; + private readonly InputBar _inputBar; + private readonly MainWindow _mainWindow; + private readonly ChunkRenderer _chunkRenderer; + private readonly ILogger _logger; + + public bool HandleTooltips; + public uint HoveredItem; + public uint HoverCounter; + public uint LastHoverCounter; + +#pragma warning disable CS0169 // used in DrawPopups (E2) + private (Chunk, Payload?)? _popup; +#pragma warning restore CS0169 + + public PayloadHandler( + ThemeRegistry themes, + IpcManager ipc, + GameFunctions.GameFunctions functions, + InputBar inputBar, + MainWindow mainWindow, + ChunkRenderer chunkRenderer, + ILogger logger + ) + { + _themes = themes; + _ipc = ipc; + _functions = functions; + _inputBar = inputBar; + _mainWindow = mainWindow; + _chunkRenderer = chunkRenderer; + _logger = logger; + } + + internal void Draw() + { + // TODO(E2): DrawPopups(); + + if (HandleTooltips && ++HoverCounter - LastHoverCounter > 1) + { + GameFunctions.GameFunctions.CloseItemTooltip(); + HoveredItem = 0; + HoverCounter = LastHoverCounter = 0; + HandleTooltips = false; + } + } + internal void Hover(Payload payload) { } - internal void Click(Chunk chunk, Payload? payload, ImGuiMouseButton button) { } + internal unsafe void Click(Chunk chunk, Payload? payload, ImGuiMouseButton button) { } }