You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

336 lines
12 KiB

-- ========================================================================= --
-- SylingTracker --
-- https://www.curseforge.com/wow/addons/sylingtracker --
-- --
-- Repository: --
-- https://github.com/Skamer/SylingTracker --
-- --
-- ========================================================================= --
Syling "SylingTracker.ContextMenuPatterns" ""
-- ========================================================================= --
import "SLT"
-- ========================================================================= --
export {
RegisterContextMenuPattern = API.RegisterContextMenuPattern,
-- Shared
ChatFrame_OpenChat = ChatFrame_OpenChat,
-- Quest
IsWorldQuest = QuestUtils_IsQuestWorldQuest,
GetSuperTrackedQuestID = C_SuperTrack.GetSuperTrackedQuestID,
SetSuperTrackedQuestID = C_SuperTrack.SetSuperTrackedQuestID,
QuestSuperTracking_ChooseClosestQuest = QuestSuperTracking_ChooseClosestQuest,
GetQuestLink = GetQuestLink,
QuestLogPopupDetailFrame_Show = QuestLogPopupDetailFrame_Show,
ShowQuestComplete = ShowQuestComplete,
LFGListUtil_FindQuestGroup = LFGListUtil_FindQuestGroup,
RemoveQuestWatch = C_QuestLog.RemoveQuestWatch,
QuestMapQuestOptions_AbandonQuest = QuestMapQuestOptions_AbandonQuest,
-- Achievement
GetAchievementLink = GetAchievementLink,
RemoveTrackedAchievement = RemoveTrackedAchievement,
-- Helper
ShowHelperWindow = API.ShowHelperWindow
}
-- ========================================================================= --
local HELPER_QUEST_TYPE = "quest"
local HELPER_ACHIEVEMENT_TYPE = "achievement"
-- ========================================================================= --
-- Quest Pattern
-- ========================================================================= --
do
local questPattern = ContextMenuPattern()
RegisterContextMenuPattern("quest", questPattern)
-- The supertracking part
local supertrack = ContextMenuPatternItemInfo()
supertrack.id = "supertrack-quest"
supertrack.text = "Supertrack"
supertrack.order = 10
supertrack.icon = { atlas = AtlasType("Target-Tracker")}
supertrack.isShown = function(questID)
local supertrackQuestID = GetSuperTrackedQuestID()
if supertrackQuestID and supertrackQuestID == questID then
return false
end
return true
end
supertrack.handler = function(questID) SetSuperTrackedQuestID(questID) end
questPattern:AddAction(supertrack)
local stopSupertracking = ContextMenuPatternItemInfo()
stopSupertracking.id = "stop-supertracking-quest"
stopSupertracking.text = "Stop supertracking"
stopSupertracking.order = 10
stopSupertracking.icon = { atlas = AtlasType("Target-Tracker")}
stopSupertracking.isShown = function(questID)
local supertrackQuestID = GetSuperTrackedQuestID()
if supertrackQuestID and supertrackQuestID == questID then
return true
end
return false
end
stopSupertracking.handler = function()
SetSuperTrackedQuestID(0)
QuestSuperTracking_ChooseClosestQuest()
end
questPattern:AddAction(stopSupertracking)
-- Add Separator
questPattern:AddSeparator(15)
-- The link to chat part
local linkToChat = ContextMenuPatternItemInfo()
linkToChat.id = "link-quest-to-chat"
linkToChat.text = "Link to chat"
linkToChat.order = 20
linkToChat.icon = { atlas = AtlasType("communities-icon-chat")}
linkToChat.handler = function(questID) ChatFrame_OpenChat(GetQuestLink(questID)) end
questPattern:AddAction(linkToChat)
-- The show details part
local showDetails = ContextMenuPatternItemInfo()
showDetails.id = "show-quest-details"
showDetails.text = "Show details"
showDetails.order = 30
showDetails.icon = { atlas = AtlasType("adventureguide-icon-whatsnew")}
showDetails.handler = function(questID)
local quest = QuestCache:Get(questID)
if quest.isAutoComplete and quest:IsComplete() then
ShowQuestComplete(questID)
else
QuestLogPopupDetailFrame_Show(quest:GetQuestLogIndex())
end
end
questPattern:AddAction(showDetails)
-- Add Separator
questPattern:AddSeparator(35)
-- The find a group part
local findAGroup = ContextMenuPatternItemInfo()
findAGroup.id = "find-a-group"
findAGroup.text = "Find a group"
findAGroup.order = 40
findAGroup.icon = { atlas = AtlasType("socialqueuing-icon-group")}
findAGroup.handler = function(questID) LFGListUtil_FindQuestGroup(questID) end
questPattern:AddAction(findAGroup)
-- Add Separator
questPattern:AddSeparator(45)
-- The unwatch quest part
local stopWatching = ContextMenuPatternItemInfo()
stopWatching.id = "stop-watching-quest"
stopWatching.text = "Stop watching"
stopWatching.order = 50
stopWatching.icon = { atlas = AtlasType("transmog-icon-hidden") }
stopWatching.handler = function(questID) RemoveQuestWatch(questID) end
questPattern:AddAction(stopWatching)
-- The abandon quest part
local abandon = ContextMenuPatternItemInfo()
abandon.id = "abandon-quest"
abandon.text = "Abandon"
abandon.order = 60
abandon.icon = { atlas = AtlasType("transmog-icon-remove") }
abandon.handler = function(questID) QuestMapQuestOptions_AbandonQuest(questID) end
questPattern:AddAction(abandon)
-- Add Separator
questPattern:AddSeparator(65)
--- The help part
local help = ContextMenuPatternItemInfo()
help.id = "help-quest"
help.text = "Help"
help.order = 70
help.icon = { atlas = AtlasType("QuestTurnin") }
help.handler = function(questID) ShowHelperWindow(HELPER_QUEST_TYPE, questID) end
questPattern:AddAction(help)
end
-- ========================================================================= --
-- World Quest Pattern
-- ========================================================================= --
do
local worldQuestPattern = ContextMenuPattern()
RegisterContextMenuPattern("world-quest", worldQuestPattern)
-- The link to chat part
local linkToChat = ContextMenuPatternItemInfo()
linkToChat.id = "link-quest-to-chat"
linkToChat.text = "Link to chat"
linkToChat.order = 10
linkToChat.icon = { atlas = AtlasType("communities-icon-chat")}
linkToChat.handler = function(questID) ChatFrame_OpenChat(GetQuestLink(questID)) end
worldQuestPattern:AddAction(linkToChat)
-- The show details part
local showDetails = ContextMenuPatternItemInfo()
showDetails.id = "show-quest-details"
showDetails.text = "Show details"
showDetails.order = 20
showDetails.icon = { atlas = AtlasType("adventureguide-icon-whatsnew")}
showDetails.handler = function(questID)
local quest = QuestCache:Get(questID)
if quest.isAutoComplete and quest:IsComplete() then
ShowQuestComplete(questID)
else
QuestLogPopupDetailFrame_Show(quest:GetQuestLogIndex())
end
end
worldQuestPattern:AddAction(showDetails)
-- Add Separator
worldQuestPattern:AddSeparator(25)
-- The find a group part
local findAGroup = ContextMenuPatternItemInfo()
findAGroup.id = "find-a-group"
findAGroup.text = "Find a group"
findAGroup.order = 30
findAGroup.icon = { atlas = AtlasType("socialqueuing-icon-group")}
findAGroup.handler = function(questID) LFGListUtil_FindQuestGroup(questID) end
worldQuestPattern:AddAction(findAGroup)
-- Add Separator
worldQuestPattern:AddSeparator(35)
--- The help part
local help = ContextMenuPatternItemInfo()
help.id = "help-quest"
help.text = "Help"
help.order = 40
help.icon = { atlas = AtlasType("QuestTurnin") }
help.handler = function(questID) ShowHelperWindow(HELPER_QUEST_TYPE, questID) end
worldQuestPattern:AddAction(help)
end
-- ========================================================================= --
-- World Quest Pattern
-- ========================================================================= --
do
local taskPattern = ContextMenuPattern()
RegisterContextMenuPattern("task", taskPattern)
-- The link to chat part
local linkToChat = ContextMenuPatternItemInfo()
linkToChat.id = "link-quest-to-chat"
linkToChat.text = "Link to chat"
linkToChat.order = 10
linkToChat.icon = { atlas = AtlasType("communities-icon-chat")}
linkToChat.handler = function(questID) ChatFrame_OpenChat(GetQuestLink(questID)) end
taskPattern:AddAction(linkToChat)
-- The show details part
local showDetails = ContextMenuPatternItemInfo()
showDetails.id = "show-quest-details"
showDetails.text = "Show details"
showDetails.order = 20
showDetails.icon = { atlas = AtlasType("adventureguide-icon-whatsnew")}
showDetails.handler = function(questID)
local quest = QuestCache:Get(questID)
if quest.isAutoComplete and quest:IsComplete() then
ShowQuestComplete(questID)
else
QuestLogPopupDetailFrame_Show(quest:GetQuestLogIndex())
end
end
taskPattern:AddAction(showDetails)
-- Add Separator
taskPattern:AddSeparator(25)
-- The find a group part
local findAGroup = ContextMenuPatternItemInfo()
findAGroup.id = "find-a-group"
findAGroup.text = "Find a group"
findAGroup.order = 30
findAGroup.icon = { atlas = AtlasType("socialqueuing-icon-group")}
findAGroup.handler = function(questID) LFGListUtil_FindQuestGroup(questID) end
taskPattern:AddAction(findAGroup)
-- Add Separator
taskPattern:AddSeparator(35)
--- The help part
local help = ContextMenuPatternItemInfo()
help.id = "help-quest"
help.text = "Help"
help.order = 40
help.icon = { atlas = AtlasType("QuestTurnin") }
help.handler = function(questID) ShowHelperWindow(HELPER_QUEST_TYPE, questID) end
taskPattern:AddAction(help)
end
-- ========================================================================= --
-- Achievement Pattern
-- ========================================================================= --
do
local achievementPattern = ContextMenuPattern()
RegisterContextMenuPattern("achievement", achievementPattern)
-- The link to chat part
local linkToChat = ContextMenuPatternItemInfo()
linkToChat.id = "link-achievement-to-chat"
linkToChat.text = "Link to chat"
linkToChat.order = 10
linkToChat.icon = { atlas = AtlasType("communities-icon-chat")}
linkToChat.handler = function(achievementID)
local achievementLink = GetAchievementLink(achievementID);
if achievementLink then
ChatFrame_OpenChat(achievementLink);
end
end
achievementPattern:AddAction(linkToChat)
-- The show details part
local showDetails = ContextMenuPatternItemInfo()
showDetails.id = "show-achievement-details"
showDetails.text = "Show details"
showDetails.order = 20
showDetails.icon = { atlas = AtlasType("adventureguide-icon-whatsnew")}
showDetails.handler = function(achievementID)
if not AchievementFrame then
AchievementFrame_LoadUI()
end
if not AchievementFrame:IsShown() then
AchievementFrame_ToggleAchievementFrame()
end
AchievementFrame_SelectAchievement(achievementID)
end
achievementPattern:AddAction(showDetails)
-- Add Separator
achievementPattern:AddSeparator(25)
-- The unwatch quest part
local stopWatching = ContextMenuPatternItemInfo()
stopWatching.id = "stop-watching-achievement"
stopWatching.text = "Stop watching"
stopWatching.order = 30
stopWatching.icon = { atlas = AtlasType("transmog-icon-hidden") }
stopWatching.handler = function(achievementID)
RemoveTrackedAchievement(achievementID)
end
achievementPattern:AddAction(stopWatching)
-- Add Separator
achievementPattern:AddSeparator(35)
--- The help part
local help = ContextMenuPatternItemInfo()
help.id = "help-achievement"
help.text = "Help"
help.order = 40
help.icon = { atlas = AtlasType("QuestTurnin") }
help.handler = function(achievementID) ShowHelperWindow(HELPER_ACHIEVEMENT_TYPE, achievementID) end
achievementPattern:AddAction(help)
end