-- ------------------------------------------------------------------------------ -- -- 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