qstbak/Questionable/Questionable.Windows.JournalComponents/QuestJournalUtils.cs
2025-10-09 07:53:51 +10:00

92 lines
2.8 KiB
C#

using Dalamud.Bindings.ImGui;
using Dalamud.Interface;
using Dalamud.Interface.Components;
using Dalamud.Interface.Utility.Raii;
using Dalamud.Plugin.Services;
using Questionable.Controller;
using Questionable.Functions;
using Questionable.Model;
using Questionable.Model.Questing;
namespace Questionable.Windows.JournalComponents;
internal sealed class QuestJournalUtils
{
private readonly QuestController _questController;
private readonly QuestFunctions _questFunctions;
private readonly ICommandManager _commandManager;
public QuestJournalUtils(QuestController questController, QuestFunctions questFunctions, ICommandManager commandManager)
{
_questController = questController;
_questFunctions = questFunctions;
_commandManager = commandManager;
}
public void ShowContextMenu(IQuestInfo questInfo, Quest? quest, string label)
{
ImU8String strId;
if (ImGui.IsItemClicked(ImGuiMouseButton.Right))
{
strId = new ImU8String(12, 1);
strId.AppendLiteral("##QuestPopup");
strId.AppendFormatted(questInfo.QuestId);
ImGui.OpenPopup(strId);
}
strId = new ImU8String(12, 1);
strId.AppendLiteral("##QuestPopup");
strId.AppendFormatted(questInfo.QuestId);
using ImRaii.IEndObject endObject = ImRaii.Popup(strId);
if (!endObject)
{
return;
}
using (ImRaii.Disabled(quest == null || (!_questFunctions.IsReadyToAcceptQuest(questInfo.QuestId) && !_questFunctions.IsQuestAccepted(questInfo.QuestId))))
{
if (ImGui.MenuItem("Start as next quest"))
{
if (quest == null)
{
return;
}
if (_questFunctions.IsQuestAccepted(questInfo.QuestId))
{
QuestProgressInfo questProgressInfo = _questFunctions.GetQuestProgressInfo(questInfo.QuestId);
if (questProgressInfo != null)
{
_questController.SetStartedQuest(quest, questProgressInfo.Sequence);
_questController.Start(label);
}
}
else
{
_questController.SetNextQuest(quest);
_questController.Start(label);
}
}
}
bool flag = _commandManager.Commands.ContainsKey("/questinfo");
using (ImRaii.Disabled(!(questInfo.QuestId is QuestId) || !flag))
{
if (ImGui.MenuItem("View in Quest Map"))
{
_commandManager.ProcessCommand($"/questinfo {questInfo.QuestId}");
}
}
}
internal static void ShowFilterContextMenu(QuestJournalComponent journalUi)
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Filter, "Filter"))
{
ImGui.OpenPopup("##QuestFilters");
}
using ImRaii.IEndObject endObject = ImRaii.Popup("##QuestFilters");
if (!(!endObject) && (ImGui.Checkbox("Show only Available Quests", ref journalUi.Filter.AvailableOnly) || ImGui.Checkbox("Hide Quests Without Path", ref journalUi.Filter.HideNoPaths) || ImGui.Checkbox("Hide Unobtainable Quests", ref journalUi.Filter.HideUnobtainable)))
{
journalUi.UpdateFilter();
}
}
}