serviceCollection.AddSingleton<QuickAccessButtonsComponent>();
serviceCollection.AddSingleton<RemainingTasksComponent>();
+ serviceCollection.AddSingleton<QuestJournalUtils>();
serviceCollection.AddSingleton<QuestJournalComponent>();
serviceCollection.AddSingleton<GatheringJournalComponent>();
serviceCollection.AddSingleton<AlliedSocietyJournalComponent>();
private readonly AlliedSocietyQuestFunctions _alliedSocietyQuestFunctions;
private readonly QuestData _questData;
private readonly QuestRegistry _questRegistry;
+ private readonly QuestJournalUtils _questJournalUtils;
private readonly QuestTooltipComponent _questTooltipComponent;
private readonly UiUtils _uiUtils;
AlliedSocietyQuestFunctions alliedSocietyQuestFunctions,
QuestData questData,
QuestRegistry questRegistry,
+ QuestJournalUtils questJournalUtils,
QuestTooltipComponent questTooltipComponent,
UiUtils uiUtils)
{
_alliedSocietyQuestFunctions = alliedSocietyQuestFunctions;
_questData = questData;
_questRegistry = questRegistry;
+ _questJournalUtils = questJournalUtils;
_questTooltipComponent = questTooltipComponent;
_uiUtils = uiUtils;
}
}
}
- private void DrawQuest(QuestInfo quest)
+ private void DrawQuest(QuestInfo questInfo)
{
- var (color, icon, tooltipText) = _uiUtils.GetQuestStyle(quest.QuestId);
- if (!_questRegistry.IsKnownQuest(quest.QuestId))
+ var (color, icon, tooltipText) = _uiUtils.GetQuestStyle(questInfo.QuestId);
+ if (!_questRegistry.TryGetQuest(questInfo.QuestId, out var quest))
color = ImGuiColors.DalamudGrey;
- if (_uiUtils.ChecklistItem($"{quest.Name} ({tooltipText})", color, icon))
- _questTooltipComponent.Draw(quest);
+ if (_uiUtils.ChecklistItem($"{questInfo.Name} ({tooltipText})", color, icon))
+ _questTooltipComponent.Draw(questInfo);
+
+ _questJournalUtils.ShowContextMenu(questInfo, quest, nameof(AlliedSocietyJournalComponent));
}
}
private readonly UiUtils _uiUtils;
private readonly QuestTooltipComponent _questTooltipComponent;
private readonly IDalamudPluginInterface _pluginInterface;
- private readonly QuestController _questController;
- private readonly ICommandManager _commandManager;
+ private readonly QuestJournalUtils _questJournalUtils;
private readonly QuestValidator _questValidator;
private List<FilteredSection> _filteredSections = [];
public QuestJournalComponent(JournalData journalData, QuestRegistry questRegistry, QuestFunctions questFunctions,
UiUtils uiUtils, QuestTooltipComponent questTooltipComponent, IDalamudPluginInterface pluginInterface,
- QuestController questController, ICommandManager commandManager, QuestValidator questValidator)
+ QuestJournalUtils questJournalUtils, QuestValidator questValidator)
{
_journalData = journalData;
_questRegistry = questRegistry;
_uiUtils = uiUtils;
_questTooltipComponent = questTooltipComponent;
_pluginInterface = pluginInterface;
- _questController = questController;
- _commandManager = commandManager;
+ _questJournalUtils = questJournalUtils;
_questValidator = questValidator;
}
if (ImGui.IsItemHovered())
_questTooltipComponent.Draw(questInfo);
- if (ImGui.BeginPopupContextItem($"##QuestPopup{questInfo.QuestId}", ImGuiPopupFlags.MouseButtonRight))
- {
- if (ImGui.MenuItem("Start as next quest", _questFunctions.IsReadyToAcceptQuest(questInfo.QuestId)))
- {
- _questController.SetNextQuest(quest);
- _questController.Start("SeasonalEventSelection");
- }
-
- bool openInQuestMap = _commandManager.Commands.TryGetValue("/questinfo", out var commandInfo);
- if (ImGui.MenuItem("View in Quest Map", questInfo.QuestId is QuestId && openInQuestMap))
- {
- _commandManager.DispatchCommand("/questinfo", questInfo.QuestId.ToString() ?? string.Empty,
- commandInfo!);
- }
-
- ImGui.EndPopup();
- }
+ _questJournalUtils.ShowContextMenu(questInfo, quest, nameof(QuestJournalComponent));
ImGui.TableNextColumn();
float spacing;
--- /dev/null
+using Dalamud.Interface.Utility.Raii;
+using Dalamud.Plugin.Services;
+using ImGuiNET;
+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)
+ {
+ using var popup = ImRaii.ContextPopup($"##QuestPopup{questInfo.QuestId}", ImGuiPopupFlags.MouseButtonRight);
+ if (!popup)
+ return;
+
+ if (ImGui.MenuItem("Start as next quest", _questFunctions.IsReadyToAcceptQuest(questInfo.QuestId)))
+ {
+ _questController.SetNextQuest(quest);
+ _questController.Start(label);
+ }
+
+ bool openInQuestMap = _commandManager.Commands.TryGetValue("/questinfo", out var commandInfo);
+ if (ImGui.MenuItem("View in Quest Map", questInfo.QuestId is QuestId && openInQuestMap))
+ {
+ _commandManager.DispatchCommand("/questinfo", questInfo.QuestId.ToString() ?? string.Empty,
+ commandInfo!);
+ }
+ }
+}