Files
coa-elvui/ElvUI_AddOnSkins/Skins/Addons/QuestGuruTracker.lua
T

445 lines
14 KiB
Lua

local E, L, V, P, G = unpack(ElvUI)
local S = E:GetModule("Skins")
local AS = E:GetModule("AddOnSkins")
if not AS:IsAddonLODorEnabled("QuestGuru_Tracker") then return end
-- QuestGuru_Tracker 1.4.4
S:AddCallbackForAddon("QuestGuru_Tracker", "QuestGuru_Tracker", function()
if not E.private.addOnSkins.QuestGuru_Tracker then return end
E:GetModule("Tooltip"):SetStyle(QGT_QuestWatchFrameTooltip)
QGT_QuestWatchFrameTooltip.SetBackdropColor = E.noop
QGT_QuestWatchFrameTooltip.SetBackdropBorderColor = E.noop
QGT_QuestWatchFrame:SetBackdrop(nil)
QGT_QuestWatchFrame:CreateBackdrop(QGT_Settings.ShowBorder and "Transparent" or "NoBackdrop")
QGT_QuestWatchFrame:SetHitRectInsets(0, 0, 0, 0)
QGT_QuestWatchFrameBackground:Hide()
QGT_AchievementWatchFrame:SetBackdrop(nil)
QGT_AchievementWatchFrame:CreateBackdrop(QGT_Settings.ShowBorder and "Transparent" or "NoBackdrop")
QGT_AchievementWatchFrame:SetHitRectInsets(0, 0, 0, 0)
QGT_AchievementWatchFrameBackground:Hide()
S:HandleButton(QGT_QuestWatchFrameToggle)
S:HandleButton(QGT_QuestWatchFrameMinimize)
S:HandleButton(QGT_QuestWatchFrameOptions)
S:HandleButton(QGT_AchievementWatchFrameToggle)
S:HandleButton(QGT_AchievementWatchFrameMinimize)
S:HandleButton(QGT_AchievementWatchFrameOptions)
QGT_QuestWatchFrameMinimize:Point("RIGHT", QGT_QuestWatchFrameOptions, "LEFT", -1, 0)
QGT_QuestWatchFrameToggle:Point("RIGHT", QGT_QuestWatchFrameMinimize, "LEFT", -2, 0)
QGT_AchievementWatchFrameMinimize:Point("RIGHT", QGT_AchievementWatchFrameOptions, "LEFT", -1, 0)
QGT_AchievementWatchFrameToggle:Point("RIGHT", QGT_AchievementWatchFrameMinimize, "LEFT", -2, 0)
local _SetPoint = QGT_QuestWatchFrameSlider.SetPoint
local function sliderSetPoint(self, point)
if point == "TOPLEFT" then
_SetPoint(self, "TOPLEFT", -12, -17)
else
_SetPoint(self, "TOPRIGHT", 12, -17)
end
end
S:HandleSliderFrame(QGT_QuestWatchFrameSlider)
QGT_QuestWatchFrameSlider.SetPoint = sliderSetPoint
S:HandleSliderFrame(QGT_AchievementWatchFrameSlider)
QGT_AchievementWatchFrameSlider.SetPoint = sliderSetPoint
local function skinOptions(f)
for i = 1, f:GetNumChildren() do
local child = select(i, f:GetChildren())
if child then
if child:IsObjectType("CheckButton") then
S:HandleCheckBox(child)
elseif child:IsObjectType("EditBox") then
S:HandleEditBox(child)
elseif child:IsObjectType("Button") then
S:HandleButton(child)
elseif child:IsObjectType("Slider") then
S:HandleSliderFrame(child)
end
end
end
end
skinOptions(QGT_OptionsFrameTracker)
for i = 1, 40 do
local frame = _G["QGT_AchievementWatchLine"..i]
local icon = _G["QGT_AchievementWatchLine"..i.."Icon"]
icon:Size(14)
icon:SetTexCoord(unpack(E.TexCoords))
frame.statusBar:StripTextures()
frame.statusBar:CreateBackdrop("Transparent")
frame.statusBar:SetStatusBarTexture(E.media.normTex)
E:RegisterStatusBar(frame.statusBar)
end
do
local alpha = QGT_Settings.Alpha
local backdropR, backdropG, backdropB = unpack(E.media.backdropfadecolor, 1, 3)
local borderR, borderG, borderB = unpack(E.media.bordercolor, 1, 3)
QGT_QuestWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
QGT_QuestWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
QGT_AchievementWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
QGT_AchievementWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
end
QGT_SetQuestWatchBorder = function(enabled)
if enabled then
QGT_QuestWatchFrame.backdrop:SetTemplate("Transparent", nil, true)
else
QGT_QuestWatchFrame.backdrop:SetTemplate("NoBackdrop", nil, true)
end
end
QGT_SetAchievementWatchBorder = function(enabled)
if enabled then
QGT_AchievementWatchFrame.backdrop:SetTemplate("Transparent", nil, true)
else
QGT_AchievementWatchFrame.backdrop:SetTemplate("NoBackdrop", nil, true)
end
end
QGT_OptionsFrameTrackerAlpha:SetScript("OnValueChanged", function(self)
local alpha = self:GetValue()
local backdropR, backdropG, backdropB = unpack(E.media.backdropfadecolor, 1, 3)
local borderR, borderG, borderB = unpack(E.media.bordercolor, 1, 3)
QGT_Settings.Alpha = alpha
QGT_QuestWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
QGT_QuestWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
QGT_AchievementWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
QGT_AchievementWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
QGT_OptionsFrameTrackerAlphaText:SetFormattedText("%s (%d%%)", QG_OPT_TRACKER_ALPHA, math.abs(math.ceil(alpha * 100 - 0.5)))
end)
local skinnedButtons = 0
hooksecurefunc("QGT_QuestWatch_Update", function()
local questItemIcons = QGT_Settings.QuestItemIcons
if questItemIcons or QGT_WATCHFRAME_NUM_ITEMS > skinnedButtons then
local leftSide = (QGT_Settings.QuestWatch.Left * QGT_Settings.Scale) < 32
local sliderVisible = QGT_QuestWatchFrameSlider:GetAlpha() > 0
local sliderRightVisible = sliderVisible and ((QGT_Settings.QuestWatch.Left + 256) * QGT_Settings.Scale) > (UIParent:GetWidth() - 16)
for i = questItemIcons and 1 or skinnedButtons + 1, QGT_WATCHFRAME_NUM_ITEMS do
local button = _G["WatchFrameItem"..i]
if button then
if not button.isSkinned then
local icon = _G["WatchFrameItem"..i.."IconTexture"]
local normal = _G["WatchFrameItem"..i.."NormalTexture"]
local cooldown = _G["WatchFrameItem"..i.."Cooldown"]
button:CreateBackdrop()
button.backdrop:SetAllPoints()
button:StyleButton()
button:Size(25)
normal:SetAlpha(0)
icon:SetInside()
icon:SetTexCoord(unpack(E.TexCoords))
E:RegisterCooldown(cooldown)
button.isSkinned = true
end
if questItemIcons then
local _, watchText = button:GetPoint()
if leftSide then
if sliderVisible then
button:Point("TOPLEFT", watchText, "TOPRIGHT", 19, 0)
else
button:Point("TOPLEFT", watchText, "TOPRIGHT", 8, 0)
end
else
if sliderRightVisible then
button:Point("TOPRIGHT", watchText, "TOPLEFT", -19, 0)
else
button:Point("TOPRIGHT", watchText, "TOPLEFT", -8, 0)
end
end
end
end
end
skinnedButtons = QGT_WATCHFRAME_NUM_ITEMS
end
end)
do -- Fixes
local _G = _G
local tonumber = tonumber
local len, sub = string.len, string.sub
local ChatEdit_ChooseBoxForSend = ChatEdit_ChooseBoxForSend
local GetAchievementLink = GetAchievementLink
local GetItemInfo = GetItemInfo
local GetQuestLink = GetQuestLink
local GetQuestLogTitle = GetQuestLogTitle
local IsShiftKeyDown = IsShiftKeyDown
local QuestLog_OpenToQuest = QuestLog_OpenToQuest
local QuestLog_SetSelection = QuestLog_SetSelection
local RemoveTrackedAchievement = RemoveTrackedAchievement
local WatchFrame_Update = WatchFrame_Update
local function questOnClick(self, button)
local qID = self.qID
if button == "LeftButton" then
if IsShiftKeyDown() then
local ChatFrameEditBox = ChatEdit_ChooseBoxForSend()
-- header line
if not qID then
if ChatFrameEditBox:IsVisible() then
ChatFrameEditBox:Insert(self:GetText())
end
-- objective line
elseif not tonumber(qID) then
local objName = sub(self:GetText(), 3 + len(QGT_Settings.Bullet))
local objText
if qID == "item" then
local _, itemLink = GetItemInfo(objName)
if not itemLink then
objText = objName
else
objText = itemLink
end
else
objText = objName
end
if ChatFrameEditBox:IsVisible() then
ChatFrameEditBox:Insert(objText)
end
-- quest number
else
if ChatFrameEditBox:IsVisible() then
ChatFrameEditBox:Insert(GetQuestLink(qID))
end
end
else
-- header line
if not qID then
local headName = self:GetText()
if QGT_WatchHeaders[headName] then
QGT_WatchHeaders[headName] = false
else
QGT_WatchHeaders[headName] = true
end
WatchFrame_Update()
-- objective line
elseif not tonumber(qID) then
local objName = sub(self:GetText(), 3 + len(QGT_Settings.Bullet))
if qID == "item" then
local _, itemLink = GetItemInfo(objName)
if itemLink then
SetItemRef(itemLink, nil, button)
end
end
-- title line
else
QuestLog_OpenToQuest(qID)
if QuestGuru_QuestLogFrame then
QuestGuru_QuestLogFrame:Show()
end
end
end
elseif button == "RightButton" then
if IsShiftKeyDown() then
if qID and tonumber(qID) then
QuestLog_SetSelection(qID, button)
QuestLog_Update()
ToggleDropDownMenu(1, nil, QGT_QuestWatchTitleMenu, self:GetName(), 0, 0)
end
else
-- header line
if not qID then
local headName = self:GetText()
if QGT_WatchHeaders[headName] then
QGT_WatchHeaders[headName] = false
else
QGT_WatchHeaders[headName] = true
end
WatchFrame_Update()
-- title line
elseif tonumber(qID) then
local qName = GetQuestLogTitle(qID)
if QGT_WatchQuests[qName] then
QGT_WatchQuests[qName] = false
else
QGT_WatchQuests[qName] = true
end
WatchFrame_Update()
end
end
end
QGT_ShowQuestTrackerSlider(true)
end
local function achievementOnClick(self)
if self.achievementID then
if IsShiftKeyDown() then
local ChatFrameEditBox = ChatEdit_ChooseBoxForSend()
if ChatFrameEditBox:IsVisible() then
ChatFrameEditBox:Insert(GetAchievementLink(self.achievementID))
else
RemoveTrackedAchievement(self.achievementID)
end
else
if not AchievementFrame then
AchievementFrame_LoadUI()
end
if not AchievementFrame:IsShown() then
AchievementFrame_ToggleAchievementFrame()
AchievementFrame_SelectAchievement(self.achievementID)
elseif AchievementFrameAchievements.selection ~= self.achievementID then
AchievementFrame_SelectAchievement(self.achievementID)
else
AchievementFrame_ToggleAchievementFrame()
end
end
end
end
local frame1, frame2
for i = 1, 40 do
frame1 = _G["QGT_QuestWatchLine"..i]
frame2 = _G["QGT_AchievementWatchLine"..i]
if frame1 then
frame1:SetScript("OnClick", questOnClick)
end
if frame2 then
frame2:SetScript("OnClick", achievementOnClick)
end
end
QGT_QuestWatchButton_OnClick = questOnClick
end
do -- Adjustments
local function updateQuestHeader(flag)
if flag then
local width = 20
QGT_QuestWatchQuestName:ClearAllPoints()
QGT_QuestWatchNumQuests:ClearAllPoints()
if QGT_QuestWatchFrameToggle:IsShown() then
width = width + 60
QGT_QuestWatchNumQuests:Point("TOPRIGHT", -60, -6)
else
width = width + 42
QGT_QuestWatchNumQuests:Point("TOPRIGHT", -42, -6)
end
QGT_QuestWatchQuestName:Point("RIGHT", QGT_QuestWatchNumQuests, "LEFT", -12, 0)
-- width = width + QGT_QuestWatchQuestName:GetWidth() + QGT_QuestWatchNumQuests:GetWidth()
width = width + QGT_QuestWatchQuestName:GetWidth() + 32
QGT_QuestWatchFrame.backdrop:ClearAllPoints()
QGT_QuestWatchFrame.backdrop:Point("TOPRIGHT", 1, 1)
QGT_QuestWatchFrame.backdrop:Point("BOTTOMLEFT", QGT_QuestWatchFrame:GetWidth() - width, 1)
else
QGT_QuestWatchFrame.backdrop:ClearAllPoints()
QGT_QuestWatchFrame.backdrop:Point("TOPLEFT", -1, 1)
QGT_QuestWatchFrame.backdrop:Point("BOTTOMRIGHT", 1, -1)
QGT_QuestWatchQuestName:ClearAllPoints()
QGT_QuestWatchQuestName:Point("TOPLEFT", 8, -6)
QGT_QuestWatchNumQuests:ClearAllPoints()
QGT_QuestWatchNumQuests:Point("LEFT", QGT_QuestWatchQuestName, "RIGHT", 12, 0)
end
end
local function updateAchievemtHeader(flag)
if flag then
local width = 20
QGT_AchievementWatchName:ClearAllPoints()
QGT_AchievementWatchNum:ClearAllPoints()
if QGT_AchievementWatchFrameToggle:IsShown() then
width = width + 60
QGT_AchievementWatchNum:Point("TOPRIGHT", -60, -6)
else
width = width + 42
QGT_AchievementWatchNum:Point("TOPRIGHT", -42, -6)
end
QGT_AchievementWatchName:Point("RIGHT", QGT_AchievementWatchNum, "LEFT", -12, 0)
-- width = width + QGT_AchievementWatchName:GetWidth() + QGT_AchievementWatchNum:GetWidth()
width = width + QGT_AchievementWatchName:GetWidth() + 8
QGT_AchievementWatchFrame.backdrop:ClearAllPoints()
QGT_AchievementWatchFrame.backdrop:Point("TOPRIGHT", 1, 1)
QGT_AchievementWatchFrame.backdrop:Point("BOTTOMLEFT", QGT_AchievementWatchFrame:GetWidth() - width, 1)
else
QGT_AchievementWatchFrame.backdrop:ClearAllPoints()
QGT_AchievementWatchFrame.backdrop:Point("TOPLEFT", -1, 1)
QGT_AchievementWatchFrame.backdrop:Point("BOTTOMRIGHT", 1, -1)
QGT_AchievementWatchName:ClearAllPoints()
QGT_AchievementWatchName:Point("TOPLEFT", 8, -6)
QGT_AchievementWatchNum:ClearAllPoints()
QGT_AchievementWatchNum:Point("LEFT", QGT_AchievementWatchName, "RIGHT", 12, 0)
end
end
QGT_QuestWatchFrameToggle:HookScript("OnClick", function()
updateAchievemtHeader(QGT_Settings.AchievementWatch.Minimized)
end)
QGT_AchievementWatchFrameToggle:HookScript("OnClick", function()
updateQuestHeader(QGT_Settings.QuestWatch.Minimized)
end)
QGT_QuestWatchFrameMinimize:HookScript("OnClick", function(self, button)
if button == "LeftButton" then
updateQuestHeader(QGT_Settings.QuestWatch.Minimized)
end
end)
QGT_AchievementWatchFrameMinimize:HookScript("OnClick", function(self, button)
if button == "LeftButton" then
updateAchievemtHeader(QGT_Settings.AchievementWatch.Minimized)
end
end)
if QGT_Settings.QuestWatch.Minimized then
updateQuestHeader(true)
end
if QGT_Settings.AchievementWatch.Minimized then
updateAchievemtHeader(true)
end
end
end)