298 lines
10 KiB
Lua
298 lines
10 KiB
Lua
-- ------------------------------------------------------------------------------ --
|
|
-- TradeSkillMaster --
|
|
-- http://www.curse.com/addons/wow/tradeskill-master --
|
|
-- --
|
|
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
|
|
-- All Rights Reserved* - Detailed license information included with addon. --
|
|
-- ------------------------------------------------------------------------------ --
|
|
|
|
local TSM = select(2, ...)
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster") -- loads the localization table
|
|
|
|
local private = {auctionTabs={}, queuedTabs={}}
|
|
TSMAPI:RegisterForTracing(private, "TradeSkillMaster.AuctionFrame_private")
|
|
LibStub("AceEvent-3.0"):Embed(private)
|
|
LibStub("AceHook-3.0"):Embed(private)
|
|
|
|
local registeredModules = {}
|
|
function TSM:RegisterAuctionFunction(moduleName, callbackShow, callbackHide)
|
|
if registeredModules[moduleName] then return end
|
|
registeredModules[moduleName] = true
|
|
if AuctionFrame then
|
|
private:CreateTSMAHTab(moduleName, callbackShow, callbackHide)
|
|
else
|
|
tinsert(private.queuedTabs, {moduleName, callbackShow, callbackHide})
|
|
end
|
|
end
|
|
|
|
function private:CreateTSMAHTab(moduleName, callbackShow, callbackHide)
|
|
local auctionTab = CreateFrame("Frame", nil, AuctionFrame)
|
|
auctionTab:Hide()
|
|
auctionTab:SetAllPoints()
|
|
auctionTab:EnableMouse(true)
|
|
auctionTab:SetMovable(true)
|
|
auctionTab:SetScript("OnMouseDown", function() if AuctionFrame:IsMovable() then AuctionFrame:StartMoving() end end)
|
|
auctionTab:SetScript("OnMouseUp", function() if AuctionFrame:IsMovable() then AuctionFrame:StopMovingOrSizing() end end)
|
|
|
|
TSMAPI:CancelFrame("blizzAHLoadedDelay")
|
|
local n = AuctionFrame.numTabs + 1
|
|
|
|
local tab = CreateFrame("Button", "AuctionFrameTab"..n, AuctionFrame, "AuctionTabTemplate")
|
|
tab:Hide()
|
|
tab:SetID(n)
|
|
tab:SetText(TSMAPI.Design:GetInlineColor("link2")..moduleName.."|r")
|
|
tab:SetNormalFontObject(GameFontHighlightSmall)
|
|
tab.isTSMTab = moduleName
|
|
tab:SetPoint("LEFT", _G["AuctionFrameTab"..n-1], "RIGHT", -8, 0)
|
|
tab:Show()
|
|
PanelTemplates_SetNumTabs(AuctionFrame, n)
|
|
PanelTemplates_EnableTab(AuctionFrame, n)
|
|
auctionTab.tab = tab
|
|
|
|
local closeBtn = TSMAPI.GUI:CreateButton(auctionTab, 18)
|
|
closeBtn:SetPoint("BOTTOMRIGHT", -5, 5)
|
|
closeBtn:SetWidth(75)
|
|
closeBtn:SetHeight(24)
|
|
closeBtn:SetText(CLOSE)
|
|
closeBtn:SetScript("OnClick", CloseAuctionHouse)
|
|
|
|
local iconFrame = CreateFrame("Frame", nil, auctionTab)
|
|
iconFrame:SetPoint("CENTER", auctionTab, "TOPLEFT", 30, -30)
|
|
iconFrame:SetHeight(100)
|
|
iconFrame:SetWidth(100)
|
|
local icon = iconFrame:CreateTexture(nil, "ARTWORK")
|
|
icon:SetAllPoints()
|
|
icon:SetTexture("Interface\\Addons\\TradeSkillMaster\\Media\\TSM_Icon_Big")
|
|
local textFrame = CreateFrame("Frame", nil, auctionTab)
|
|
local iconText = textFrame:CreateFontString(nil, "OVERLAY")
|
|
iconText:SetPoint("CENTER", iconFrame)
|
|
iconText:SetHeight(15)
|
|
iconText:SetJustifyH("CENTER")
|
|
iconText:SetJustifyV("CENTER")
|
|
iconText:SetFont(TSMAPI.Design:GetContentFont("normal"))
|
|
iconText:SetTextColor(165/255, 168/255, 188/255, .7)
|
|
local version = TSM._version
|
|
iconText:SetText(version)
|
|
local ag = iconFrame:CreateAnimationGroup()
|
|
local spin = ag:CreateAnimation("Rotation")
|
|
spin:SetOrder(1)
|
|
spin:SetDuration(2)
|
|
spin:SetDegrees(90)
|
|
local spin = ag:CreateAnimation("Rotation")
|
|
spin:SetOrder(2)
|
|
spin:SetDuration(4)
|
|
spin:SetDegrees(-180)
|
|
local spin = ag:CreateAnimation("Rotation")
|
|
spin:SetOrder(3)
|
|
spin:SetDuration(2)
|
|
spin:SetDegrees(90)
|
|
ag:SetLooping("REPEAT")
|
|
iconFrame:SetScript("OnEnter", function() ag:Play() end)
|
|
iconFrame:SetScript("OnLeave", function() ag:Stop() end)
|
|
|
|
local moneyText = TSMAPI.GUI:CreateTitleLabel(auctionTab, 16)
|
|
moneyText:SetJustifyH("CENTER")
|
|
moneyText:SetJustifyV("CENTER")
|
|
moneyText:SetPoint("CENTER", auctionTab, "BOTTOMLEFT", 85, 17)
|
|
TSMAPI.Design:SetIconRegionColor(moneyText)
|
|
moneyText.SetMoney = function(self, money)
|
|
self:SetText(TSMAPI:FormatTextMoneyIcon(money))
|
|
end
|
|
auctionTab.moneyText = moneyText
|
|
|
|
local moneyTextFrame = CreateFrame("Frame", nil, auctionTab)
|
|
moneyTextFrame:SetAllPoints(moneyText)
|
|
moneyTextFrame:EnableMouse(true)
|
|
moneyTextFrame:SetScript("OnEnter", function(self)
|
|
local currentTotal = 0
|
|
local incomingTotal = 0
|
|
for i=1, GetNumAuctionItems("owner") do
|
|
-- local count, _, _, _, _, _, _, buyoutAmount = select(3, GetAuctionItemInfo("owner", i))
|
|
local count, _, _, _, _, _, buyoutAmount = select(3, GetAuctionItemInfo("owner", i))
|
|
if count == 0 then
|
|
incomingTotal = incomingTotal + buyoutAmount
|
|
else
|
|
currentTotal = currentTotal + buyoutAmount
|
|
end
|
|
end
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
|
|
GameTooltip:AddLine("Gold Info:")
|
|
GameTooltip:AddDoubleLine("Player Gold", TSMAPI:FormatTextMoneyIcon(GetMoney()), 1, 1, 1, 1, 1, 1)
|
|
GameTooltip:AddDoubleLine("Incoming Auction Sales", TSMAPI:FormatTextMoneyIcon(incomingTotal), 1, 1, 1, 1, 1, 1)
|
|
GameTooltip:AddDoubleLine("Current Auctions Value", TSMAPI:FormatTextMoneyIcon(currentTotal), 1, 1, 1, 1, 1, 1)
|
|
GameTooltip:Show()
|
|
end)
|
|
moneyTextFrame:SetScript("OnLeave", function()
|
|
GameTooltip:ClearLines()
|
|
GameTooltip:Hide()
|
|
end)
|
|
|
|
auctionTab:SetScript("OnShow", function(self)
|
|
self:SetAllPoints()
|
|
if not self.minimized then
|
|
callbackShow(self)
|
|
end
|
|
end)
|
|
auctionTab:SetScript("OnHide", function(self)
|
|
if not self.minimized then
|
|
callbackHide()
|
|
end
|
|
end)
|
|
|
|
local contentFrame = CreateFrame("Frame", nil, auctionTab)
|
|
contentFrame:SetPoint("TOPLEFT", 4, -80)
|
|
contentFrame:SetPoint("BOTTOMRIGHT", -4, 35)
|
|
TSMAPI.Design:SetContentColor(contentFrame)
|
|
auctionTab.content = contentFrame
|
|
|
|
tinsert(private.auctionTabs, auctionTab)
|
|
end
|
|
|
|
function private:InitializeAuctionFrame(auctionTab)
|
|
-- make the AH movable if this option is enabled
|
|
AuctionFrame:SetMovable(TSM.db.profile.auctionFrameMovable)
|
|
AuctionFrame:EnableMouse(true)
|
|
AuctionFrame:SetScript("OnMouseDown", function(self) if self:IsMovable() then self:StartMoving() end end)
|
|
AuctionFrame:SetScript("OnMouseUp", function(self) if self:IsMovable() then self:StopMovingOrSizing() end end)
|
|
|
|
-- scale the auction frame according to the TSM option
|
|
if AuctionFrame:GetScale() ~= 1 and TSM.db.profile.auctionFrameScale == 1 then TSM.db.profile.auctionFrameScale = AuctionFrame:GetScale() end
|
|
AuctionFrame:SetScale(TSM.db.profile.auctionFrameScale)
|
|
|
|
local prevTab
|
|
local function TabChangeHook(self)
|
|
if self.isTSMTab then
|
|
for _, tabFrame in ipairs(private.auctionTabs) do
|
|
if tabFrame.minimized and tabFrame.tab ~= self then
|
|
tabFrame:Show()
|
|
tabFrame.minimized = nil
|
|
tabFrame:Hide()
|
|
elseif tabFrame:IsShown() then
|
|
tabFrame:Hide()
|
|
end
|
|
end
|
|
local tabAuctionFrame = private:GetAuctionFrame(self)
|
|
private:OnTabClick(tabAuctionFrame)
|
|
AuctionFrame:SetFrameLevel(1)
|
|
tabAuctionFrame:SetFrameStrata(AuctionFrame:GetFrameStrata())
|
|
tabAuctionFrame:SetFrameLevel(AuctionFrame:GetFrameLevel() + 1)
|
|
elseif prevTab and prevTab.isTSMTab then
|
|
local prevTabAuctionFrame = private:GetAuctionFrame(prevTab)
|
|
prevTabAuctionFrame.minimized = true
|
|
prevTabAuctionFrame:Hide()
|
|
private:TabHidden()
|
|
end
|
|
prevTab = self
|
|
|
|
end
|
|
private:Hook("AuctionFrameTab_OnClick", TabChangeHook, true)
|
|
|
|
-- Makes sure the TSM tab hides correctly when used with addons that hook this function to change tabs (ie Auctionator)
|
|
-- This probably doesn't have to be a SecureHook, but does need to be a Post-Hook.
|
|
private:SecureHook("ContainerFrameItemButton_OnModifiedClick", function()
|
|
if _G["AuctionFrameTab"..PanelTemplates_GetSelectedTab(AuctionFrame)].isTSMTab then return end
|
|
TabChangeHook(_G["AuctionFrameTab"..PanelTemplates_GetSelectedTab(AuctionFrame)])
|
|
end)
|
|
end
|
|
|
|
function private:GetAuctionFrame(targetTab)
|
|
for _, tabFrame in ipairs(private.auctionTabs) do
|
|
if tabFrame.tab == targetTab then
|
|
return tabFrame
|
|
end
|
|
end
|
|
end
|
|
|
|
function private:InitializeAHTab()
|
|
for _, info in ipairs(private.queuedTabs) do
|
|
private:CreateTSMAHTab(unpack(info))
|
|
end
|
|
private.queuedTabs = {}
|
|
private:InitializeAuctionFrame()
|
|
private.isInitialized = true
|
|
if AuctionHouse and AuctionHouse:IsVisible() then
|
|
private:AUCTION_HOUSE_SHOW()
|
|
end
|
|
end
|
|
|
|
function TSMAPI:AHTabIsVisible(module)
|
|
return module and _G["AuctionFrameTab"..AuctionFrame.selectedTab].isTSMTab == module
|
|
end
|
|
|
|
function private:AUCTION_HOUSE_SHOW()
|
|
if private.isInitialized then
|
|
for i = AuctionFrame.numTabs, 1, -1 do
|
|
local text = gsub(_G["AuctionFrameTab"..i]:GetText(), "|r", "")
|
|
text = gsub(text, "|c[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]", "")
|
|
if text == TSM.db.profile.defaultAuctionTab then
|
|
_G["AuctionFrameTab"..i]:Click()
|
|
return
|
|
end
|
|
end
|
|
_G["AuctionFrameTab1"]:Click()
|
|
end
|
|
end
|
|
|
|
function private:OnTabClick(tab)
|
|
AuctionFrameTopLeft:Hide()
|
|
AuctionFrameTop:Hide()
|
|
AuctionFrameTopRight:Hide()
|
|
AuctionFrameBotLeft:Hide()
|
|
AuctionFrameBot:Hide()
|
|
AuctionFrameBotRight:Hide()
|
|
AuctionFrameMoneyFrame:Hide()
|
|
AuctionFrameCloseButton:Hide()
|
|
private:RegisterEvent("PLAYER_MONEY")
|
|
|
|
if TSM.db.profile.openAllBags then
|
|
OpenAllBags(true)
|
|
end
|
|
TSMAPI:CreateTimeDelay("hideAHMoneyFrame", 0.1, function() AuctionFrameMoneyFrame:Hide() end)
|
|
|
|
TSMAPI.Design:SetFrameBackdropColor(tab)
|
|
AuctionFrameTab1:SetPoint("TOPLEFT", AuctionFrame, "BOTTOMLEFT", 15, 1)
|
|
|
|
tab:Show()
|
|
tab.minimized = nil
|
|
tab.moneyText:SetMoney(GetMoney())
|
|
end
|
|
|
|
function private:TabHidden()
|
|
AuctionFrameTopLeft:Show()
|
|
AuctionFrameTop:Show()
|
|
AuctionFrameTopRight:Show()
|
|
AuctionFrameBotLeft:Show()
|
|
AuctionFrameBot:Show()
|
|
AuctionFrameBotRight:Show()
|
|
AuctionFrameMoneyFrame:Show()
|
|
AuctionFrameCloseButton:Show()
|
|
AuctionFrameTab1:SetPoint("TOPLEFT", AuctionFrame, "BOTTOMLEFT", 15, 12)
|
|
end
|
|
|
|
function private:PLAYER_MONEY()
|
|
for _, tab in ipairs(private.auctionTabs) do
|
|
if tab:IsVisible() then
|
|
tab.moneyText:SetMoney(GetMoney())
|
|
end
|
|
end
|
|
end
|
|
|
|
function private:ADDON_LOADED(event, addonName)
|
|
if addonName == "Blizzard_AuctionUI" then
|
|
private:UnregisterEvent("ADDON_LOADED")
|
|
if TSM.db then
|
|
private:InitializeAHTab()
|
|
else
|
|
TSMAPI:CreateTimeDelay("blizzAHLoadedDelay", 0.2, private.InitializeAHTab, 0.2)
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
private:RegisterEvent("AUCTION_HOUSE_SHOW")
|
|
if IsAddOnLoaded("Blizzard_AuctionUI") then
|
|
private:InitializeAHTab()
|
|
else
|
|
private:RegisterEvent("ADDON_LOADED")
|
|
end
|
|
end |