using System.Globalization; using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.Colors; using Dalamud.Interface.Utility.Raii; using Dalamud.Interface.Windowing; using Dalamud.Plugin; using FFXIVClientStructs.FFXIV.Common.Math; using LLib.ImGui; using Questionable.Data; using Questionable.Validation; namespace Questionable.Windows; internal sealed class QuestValidationWindow : LWindow { private readonly QuestValidator _questValidator; private readonly QuestData _questData; private readonly IDalamudPluginInterface _pluginInterface; public QuestValidationWindow(QuestValidator questValidator, QuestData questData, IDalamudPluginInterface pluginInterface) : base("Quest Validation###QuestionableValidator") { _questValidator = questValidator; _questData = questData; _pluginInterface = pluginInterface; base.Size = new Vector2(600f, 200f); base.SizeCondition = ImGuiCond.Once; base.SizeConstraints = new WindowSizeConstraints { MinimumSize = new Vector2(600f, 200f) }; } public override void DrawContent() { using ImRaii.IEndObject endObject = ImRaii.Table("QuestSelection", 5, ImGuiTableFlags.Borders | ImGuiTableFlags.ScrollY); if (!endObject) { ImGui.Text("Not table"); return; } ImGui.TableSetupColumn("Quest", ImGuiTableColumnFlags.WidthFixed, 50f); ImGui.TableSetupColumn("", ImGuiTableColumnFlags.WidthFixed, 200f); ImGui.TableSetupColumn("Seq", ImGuiTableColumnFlags.WidthFixed, 30f); ImGui.TableSetupColumn("Step", ImGuiTableColumnFlags.WidthFixed, 30f); ImGui.TableSetupColumn("Issue", ImGuiTableColumnFlags.None, 200f); ImGui.TableHeadersRow(); foreach (ValidationIssue issue in _questValidator.Issues) { ImGui.TableNextRow(); if (ImGui.TableNextColumn()) { ImGui.TextUnformatted(issue.ElementId?.ToString() ?? string.Empty); } if (ImGui.TableNextColumn()) { ImGui.TextUnformatted((issue.ElementId != null) ? _questData.GetQuestInfo(issue.ElementId).Name : issue.AlliedSociety.ToString()); } if (ImGui.TableNextColumn()) { ImGui.TextUnformatted(issue.Sequence?.ToString(CultureInfo.InvariantCulture) ?? string.Empty); } if (ImGui.TableNextColumn()) { ImGui.TextUnformatted(issue.Step?.ToString(CultureInfo.InvariantCulture) ?? string.Empty); } if (!ImGui.TableNextColumn()) { continue; } using (_pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push()) { if (issue.Severity == EIssueSeverity.Error) { using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed)) { ImGui.TextUnformatted(FontAwesomeIcon.ExclamationTriangle.ToIconString()); } } else { using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedBlue)) { ImGui.TextUnformatted(FontAwesomeIcon.InfoCircle.ToIconString()); } } } ImGui.SameLine(); ImGui.TextUnformatted(issue.Description); } } }