------------------------------------------------------------------------------- -- AuctionFrame.lua -- -- UI functions for modifying the parent auction frame. ------------------------------------------------------------------------------- local _ -- Index of our tab in the auction frame. local BuyTabIndex = nil; local SellTabIndex = nil; -- Currently open AH tab. local CurrentTab = nil; -- Use this update event to do a bunch of housekeeping. function AuctionLite:AuctionFrame_OnUpdate() -- Continue pending auction queries. self:QueryUpdate(); end -- Handle tab clicks by showing or hiding our frame as appropriate. function AuctionLite:AuctionFrameTab_OnClick_Hook(tab, arg) local index = (tab and tab:GetID()) or arg; CurrentTab = index; AuctionFrameBuy:Hide(); AuctionFrameSell:Hide(); if index == BuyTabIndex then AuctionFrameTopLeft:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-TopLeft"); AuctionFrameTop:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Auction-Top"); AuctionFrameTopRight:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Auction-TopRight"); AuctionFrameBotLeft:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-BotLeft"); AuctionFrameBot:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Auction-Bot"); AuctionFrameBotRight:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-BotRight"); AuctionFrameBuy:Show(); BuyName:SetFocus(); elseif index == SellTabIndex then AuctionFrameTopLeft:SetTexture("Interface\\AddOns\\AuctionLite-classic\\Images\\SellFrame-TopLeft"); AuctionFrameTop:SetTexture("Interface\\AddOns\\AuctionLite-classic\\Images\\SellFrame-Top"); AuctionFrameTopRight:SetTexture("Interface\\AddOns\\AuctionLite-classic\\Images\\SellFrame-TopRight"); AuctionFrameBotLeft:SetTexture("Interface\\AddOns\\AuctionLite-classic\\Images\\SellFrame-BotLeft"); AuctionFrameBot:SetTexture("Interface\\AddOns\\AuctionLite-classic\\Images\\SellFrame-Bot"); AuctionFrameBotRight:SetTexture("Interface\\AddOns\\AuctionLite-classic\\Images\\SellFrame-BotRight"); AuctionFrameSell:Show(); end end -- Adds our hook to the main auction frame's update handler. function AuctionLite:HookAuctionFrameUpdate() local frameUpdate = AuctionFrame:GetScript("OnUpdate"); AuctionFrame:SetScript("OnUpdate", function() if frameUpdate ~= nil then frameUpdate(); end AuctionLite:AuctionFrame_OnUpdate(); end); end -- Handle modified clicks on bag spaces. function AuctionLite:ContainerFrameItemButton_OnModifiedClick_Hook(widget, button) if AuctionFrame:IsShown() then local container = widget:GetParent():GetID(); local slot = widget:GetID(); if IsAltKeyDown() and button == "RightButton" then AuctionFrameTab_OnClick(_G["AuctionFrameTab" .. SellTabIndex]); self:BagClickSell(container, slot); elseif IsControlKeyDown() and button == "RightButton" then AuctionFrameTab_OnClick(_G["AuctionFrameTab" .. BuyTabIndex]); self:BagClickBuy(container, slot); end end end -- Intercept calls to ChatEdit_InsertLink to handle shift-click in the -- "Buy" frame. We use a raw hook so that the stack-splitting frame -- doesn't show up. function AuctionLite:ChatEdit_InsertLink_Hook(link) local handled = false; -- Is this click ours? if AuctionFrame:IsShown() and CurrentTab == BuyTabIndex and link:find("item:", 1, true) then local name = GetItemInfo(link); if name ~= nil then self:NameClickBuy(name); handled = true; end end -- It wasn't, so let the existing handler take it. if not handled then handled = self.hooks["ChatEdit_InsertLink"](link); end return handled; end -- Jump to the selected tab on opening the AH. function AuctionLite:AUCTION_HOUSE_SHOW() local jumpTab = nil; if self.db.profile.startTab == "b_buy" then jumpTab = BuyTabIndex; elseif self.db.profile.startTab == "c_sell" then jumpTab = SellTabIndex; elseif self.db.profile.startTab == "d_last" then jumpTab = self.db.profile.lastTab; end if jumpTab ~= nil and _G["AuctionFrameTab" .. jumpTab] ~= nil then AuctionFrameTab_OnClick(_G["AuctionFrameTab" .. jumpTab]); end if self.db.profile.openBags then OpenAllBags(); end end -- Clean up if the auction house is closed. function AuctionLite:AUCTION_HOUSE_CLOSED() self.db.profile.lastTab = CurrentTab; self:ClearBuyFrame(); self:ClearSellFrame(); self:ClearSavedPrices(); self:ResetAuctionCreation(); collectgarbage("collect"); end -- Create a new tab on the auction frame. Caller provides the name of the -- tab and the frame object to which it will be linked. function AuctionLite:CreateTab(name, frame) -- Find a free index. local tabIndex = 1; while getglobal("AuctionFrameTab" .. tabIndex) ~= nil do tabIndex = tabIndex + 1; end -- Create the tab itself. local tab = CreateFrame("Button", "AuctionFrameTab" .. tabIndex, AuctionFrame, "AuctionTabTemplate"); tab:SetID(tabIndex); tab:SetText(name); tab:SetPoint("TOPLEFT", "AuctionFrameTab" .. (tabIndex - 1), "TOPRIGHT", -8, 0); -- Link it into the auction frame. PanelTemplates_DeselectTab(tab); PanelTemplates_SetNumTabs(AuctionFrame, tabIndex); frame:SetParent(AuctionFrame); frame:ClearAllPoints(); frame:SetPoint("TOPLEFT", AuctionFrame, "TOPLEFT", 0, 0); return tabIndex; end -- Add our tabs. function AuctionLite:AddAuctionFrameTabs() BuyTabIndex = self:CreateBuyFrame(); SellTabIndex = self:CreateSellFrame(); end -- Initialize auction duration to avoid Lua errors when we call into -- Blizzard code. function AuctionLite:InitializeAuctionDuration() AuctionFrameAuctions.duration = 0; end