init
This commit is contained in:
@@ -0,0 +1,957 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster_Auctioning --
|
||||
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
|
||||
-- --
|
||||
-- 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_Auctioning") -- loads the localization table
|
||||
local GUI = TSM:NewModule("GUI", "AceEvent-3.0", "AceHook-3.0")
|
||||
local AceGUI = LibStub("AceGUI-3.0")
|
||||
local private = {}
|
||||
|
||||
function private:CreateButtons(parent)
|
||||
local height = 24
|
||||
local frame = CreateFrame("Frame", nil, parent)
|
||||
frame:SetHeight(height)
|
||||
frame:SetWidth(210)
|
||||
frame:SetPoint("BOTTOMRIGHT", -92, 5)
|
||||
|
||||
frame.Enable = function(self)
|
||||
if private.mode == "Post" then
|
||||
self.post:Enable()
|
||||
elseif private.mode == "Cancel" then
|
||||
self.cancel:Enable()
|
||||
end
|
||||
self.skip:Enable()
|
||||
self.stop:Enable()
|
||||
end
|
||||
|
||||
frame.Disable = function(self)
|
||||
if private.mode == "Post" then
|
||||
self.post:Disable()
|
||||
elseif private.mode == "Cancel" then
|
||||
self.cancel:Disable()
|
||||
end
|
||||
self.skip:Disable()
|
||||
end
|
||||
|
||||
frame.UpdateMode = function(self)
|
||||
if private.mode == "Post" then
|
||||
self.post:Show()
|
||||
self.cancel:Hide()
|
||||
self.cancel:Disable()
|
||||
elseif private.mode == "Cancel" then
|
||||
self.post:Hide()
|
||||
self.post:Disable()
|
||||
self.cancel:Show()
|
||||
end
|
||||
self.stop:Enable()
|
||||
end
|
||||
|
||||
local function OnClick(self)
|
||||
if self.which == "stop" and self.isDone then
|
||||
GUI:HideSelectionFrame()
|
||||
private.selectionFrame:Show()
|
||||
elseif frame:IsVisible() and private.OnAction then
|
||||
private:OnAction(self.which)
|
||||
end
|
||||
end
|
||||
|
||||
local button = TSMAPI.GUI:CreateButton(frame, 22, "TSMAuctioningPostButton")
|
||||
button:SetPoint("TOPLEFT")
|
||||
button:SetWidth(80)
|
||||
button:SetHeight(height)
|
||||
button:SetText(L["Post"])
|
||||
button.which = "action"
|
||||
button:SetScript("OnClick", OnClick)
|
||||
frame.post = button
|
||||
|
||||
local button = TSMAPI.GUI:CreateButton(frame, 22, "TSMAuctioningCancelButton")
|
||||
button:SetPoint("TOPLEFT")
|
||||
button:SetWidth(80)
|
||||
button:SetHeight(height)
|
||||
button:SetText(L["Cancel"])
|
||||
button.which = "action"
|
||||
button:SetScript("OnClick", OnClick)
|
||||
frame.cancel = button
|
||||
|
||||
local button = TSMAPI.GUI:CreateButton(frame, 18)
|
||||
button:SetPoint("TOPLEFT", frame.post, "TOPRIGHT", 5, 0)
|
||||
button:SetWidth(60)
|
||||
button:SetHeight(height)
|
||||
button:SetText(L["Skip"])
|
||||
button.which = "skip"
|
||||
button:SetScript("OnClick", OnClick)
|
||||
frame.skip = button
|
||||
|
||||
local button = TSMAPI.GUI:CreateButton(frame, 18)
|
||||
button:SetPoint("TOPLEFT", frame.skip, "TOPRIGHT", 5, 0)
|
||||
button:SetWidth(70)
|
||||
button:SetHeight(height)
|
||||
button:SetText(L["Stop"])
|
||||
button.which = "stop"
|
||||
button:SetScript("OnClick", OnClick)
|
||||
frame.stop = button
|
||||
|
||||
|
||||
return frame
|
||||
end
|
||||
|
||||
function private:CreateContentButtons(parent)
|
||||
local frame = CreateFrame("Frame", nil, parent)
|
||||
frame:SetAllPoints(parent)
|
||||
|
||||
frame.UpdateMode = function(self)
|
||||
if private.mode == "Post" then
|
||||
self.currAuctionsButton:Show()
|
||||
self.editPriceButton:Show()
|
||||
self.editPriceButton:Disable()
|
||||
elseif private.mode == "Cancel" then
|
||||
self.currAuctionsButton:Show()
|
||||
self.editPriceButton:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
frame.UnlockHighlight = function(self)
|
||||
self.auctionsButton:UnlockHighlight()
|
||||
self.logButton:UnlockHighlight()
|
||||
self.currAuctionsButton:UnlockHighlight()
|
||||
self.editPriceButton:UnlockHighlight()
|
||||
end
|
||||
|
||||
local function OnClick(self)
|
||||
frame:UnlockHighlight()
|
||||
self:LockHighlight()
|
||||
frame.editPriceFrame:Hide()
|
||||
|
||||
if self.which == "log" then
|
||||
private.auctionsST:Hide()
|
||||
private.logST:Show()
|
||||
private:UpdateLogSTData()
|
||||
elseif self.which == "auctions" then
|
||||
private.logST:Hide()
|
||||
private.auctionsST:Show()
|
||||
private.auctionsST.isCurrentItem = nil
|
||||
private:UpdateAuctionsSTData()
|
||||
elseif self.which == "currAuctions" then
|
||||
private.logST:Hide()
|
||||
private.auctionsST:Show()
|
||||
private.auctionsST.isCurrentItem = true
|
||||
private:UpdateAuctionsSTData()
|
||||
elseif self.which == "editPrice" then
|
||||
frame.editPriceFrame:Show()
|
||||
end
|
||||
end
|
||||
|
||||
local auctionsButton = TSMAPI.GUI:CreateButton(frame, 16)
|
||||
auctionsButton:SetPoint("TOPRIGHT", -10, -20)
|
||||
auctionsButton:SetHeight(17)
|
||||
auctionsButton:SetWidth(150)
|
||||
auctionsButton.which = "auctions"
|
||||
auctionsButton:SetScript("OnClick", OnClick)
|
||||
auctionsButton:SetText(L["Show All Auctions"])
|
||||
frame.auctionsButton = auctionsButton
|
||||
|
||||
local currAuctionsButton = TSMAPI.GUI:CreateButton(frame, 16)
|
||||
currAuctionsButton:SetPoint("TOPRIGHT", -170, -20)
|
||||
currAuctionsButton:SetHeight(17)
|
||||
currAuctionsButton:SetWidth(150)
|
||||
currAuctionsButton.which = "currAuctions"
|
||||
currAuctionsButton:SetScript("OnClick", OnClick)
|
||||
currAuctionsButton:SetText(L["Show Item Auctions"])
|
||||
frame.currAuctionsButton = currAuctionsButton
|
||||
|
||||
local logButton = TSMAPI.GUI:CreateButton(frame, 16)
|
||||
logButton:SetPoint("TOPRIGHT", -10, -45)
|
||||
logButton:SetHeight(17)
|
||||
logButton:SetWidth(150)
|
||||
logButton.which = "log"
|
||||
logButton:SetScript("OnClick", OnClick)
|
||||
logButton:SetText(L["Show Log"])
|
||||
frame.logButton = logButton
|
||||
|
||||
local editPriceButton = TSMAPI.GUI:CreateButton(frame, 16)
|
||||
editPriceButton:SetPoint("TOPRIGHT", -170, -45)
|
||||
editPriceButton:SetHeight(17)
|
||||
editPriceButton:SetWidth(150)
|
||||
editPriceButton.which = "editPrice"
|
||||
editPriceButton:SetScript("OnClick", OnClick)
|
||||
editPriceButton:SetText(L["Edit Post Price"])
|
||||
frame.editPriceButton = editPriceButton
|
||||
|
||||
local editPriceFrame = CreateFrame("Frame", nil, frame)
|
||||
TSMAPI.Design:SetFrameBackdropColor(editPriceFrame)
|
||||
editPriceFrame:SetPoint("CENTER")
|
||||
editPriceFrame:SetFrameStrata("DIALOG")
|
||||
editPriceFrame:SetWidth(300)
|
||||
editPriceFrame:SetHeight(150)
|
||||
editPriceFrame:EnableMouse(true)
|
||||
editPriceFrame:SetScript("OnShow", function(self)
|
||||
editPriceFrame:SetFrameStrata("DIALOG")
|
||||
MoneyInputFrame_SetCopper(TSMPostPriceChangeBox, self.info.buyout)
|
||||
self.linkLabel:SetText(self.info.link)
|
||||
end)
|
||||
editPriceFrame:SetScript("OnUpdate", function()
|
||||
if not TSMAPI:AHTabIsVisible("Auctioning") then
|
||||
editPriceFrame:Hide()
|
||||
end
|
||||
end)
|
||||
frame.editPriceFrame = editPriceFrame
|
||||
|
||||
local linkLabel = TSMAPI.GUI:CreateLabel(editPriceFrame)
|
||||
linkLabel:SetPoint("TOP", 0, -14)
|
||||
linkLabel:SetJustifyH("CENTER")
|
||||
linkLabel:SetText("")
|
||||
editPriceFrame.linkLabel = linkLabel
|
||||
|
||||
local bg = editPriceFrame:CreateTexture(nil, "BACKGROUND")
|
||||
bg:SetPoint("TOPLEFT", linkLabel, -2, 2)
|
||||
bg:SetPoint("BOTTOMRIGHT", linkLabel, 2, -2)
|
||||
TSMAPI.Design:SetContentColor(bg)
|
||||
linkLabel.bg = bg
|
||||
|
||||
local priceBoxLabel = TSMAPI.GUI:CreateLabel(editPriceFrame)
|
||||
priceBoxLabel:SetPoint("TOPLEFT", 14, -40)
|
||||
priceBoxLabel:SetText(L["Auction Buyout (Stack Price):"])
|
||||
editPriceFrame.priceBoxLabel = priceBoxLabel
|
||||
|
||||
local priceBox = CreateFrame("Frame", "TSMPostPriceChangeBox", editPriceFrame, "MoneyInputFrameTemplate")
|
||||
priceBox:SetPoint("TOPLEFT", 20, -60)
|
||||
priceBox:SetHeight(20)
|
||||
priceBox:SetWidth(120)
|
||||
editPriceFrame.priceBox = priceBox
|
||||
|
||||
local saveButton = TSMAPI.GUI:CreateButton(editPriceFrame, 16)
|
||||
saveButton:SetPoint("BOTTOMLEFT", 10, 10)
|
||||
saveButton:SetPoint("BOTTOMRIGHT", editPriceFrame, "BOTTOM", -2, 10)
|
||||
saveButton:SetHeight(20)
|
||||
saveButton:SetScript("OnClick", function()
|
||||
TSM.Post:EditPostPrice(editPriceFrame.info.itemString, MoneyInputFrame_GetCopper(TSMPostPriceChangeBox), editPriceFrame.info.operation)
|
||||
editPriceFrame:Hide()
|
||||
end)
|
||||
saveButton:SetText(L["Save New Price"])
|
||||
editPriceFrame.saveButton = saveButton
|
||||
|
||||
local cancelButton = TSMAPI.GUI:CreateButton(editPriceFrame, 16)
|
||||
cancelButton:SetPoint("BOTTOMLEFT", editPriceFrame, "BOTTOM", 2, 10)
|
||||
cancelButton:SetPoint("BOTTOMRIGHT", -10, 10)
|
||||
cancelButton:SetHeight(20)
|
||||
cancelButton:SetScript("OnClick", function()
|
||||
editPriceFrame:Hide()
|
||||
end)
|
||||
cancelButton:SetText(L["Cancel"])
|
||||
editPriceFrame.cancelButton = cancelButton
|
||||
|
||||
return frame
|
||||
end
|
||||
|
||||
function private:CreateInfoText(parent)
|
||||
local frame = CreateFrame("Frame", nil, parent)
|
||||
frame:SetAllPoints()
|
||||
|
||||
frame.SetInfo = function(self, info)
|
||||
private:UpdateLogSTHighlight()
|
||||
if type(info) == "string" then
|
||||
self.icon:Hide()
|
||||
self.linkText:Hide()
|
||||
self.linkText.bg:Hide()
|
||||
self.stackText:Hide()
|
||||
self.bidText:Hide()
|
||||
self.buyoutText:Hide()
|
||||
self.quantityText:Hide()
|
||||
self.statusText:Show()
|
||||
|
||||
local status, _, gold, gold2 = ("\n"):split(info)
|
||||
if gold then
|
||||
self.goldText:Show()
|
||||
self.goldText2:Show()
|
||||
self.goldText:SetText(gold)
|
||||
self.goldText2:SetText(gold2)
|
||||
else
|
||||
self.goldText:Hide()
|
||||
self.goldText2:Hide()
|
||||
end
|
||||
self.statusText:SetText(status)
|
||||
elseif info.isReset then
|
||||
self.icon:Show()
|
||||
self.linkText:Show()
|
||||
self.linkText.bg:Show()
|
||||
self.stackText:Show()
|
||||
self.bidText:Show()
|
||||
self.buyoutText:Show()
|
||||
self.statusText:Hide()
|
||||
self.goldText:Hide()
|
||||
self.goldText2:Hide()
|
||||
|
||||
local itemID = TSMAPI:GetItemID(info.itemString)
|
||||
local total = TSM.Reset:GetTotalQuantity(info.itemString)
|
||||
self.quantityText:Show()
|
||||
self.quantityText:SetText(TSMAPI.Design:GetInlineColor("link")..L["Currently Owned:"].."|r "..total)
|
||||
|
||||
local _,link,_,_,_,_,_,_,_,texture = TSMAPI:GetSafeItemInfo(info.itemString)
|
||||
self.linkText:SetText(link)
|
||||
if self.linkText:GetStringWidth() > 200 then
|
||||
self.linkText:SetWidth(200)
|
||||
else
|
||||
self.linkText:SetWidth(self.linkText:GetStringWidth())
|
||||
end
|
||||
self.icon.link = link
|
||||
self.icon:GetNormalTexture():SetTexture(texture)
|
||||
self.stackText:SetText(format(L["%s item(s) to buy/cancel"], info.num..TSMAPI.Design:GetInlineColor("link")))
|
||||
self.bidText:SetText(TSMAPI.Design:GetInlineColor("link")..L["Target Price:"].."|r "..TSMAPI:FormatTextMoneyIcon(info.targetPrice))
|
||||
self.buyoutText:SetText(TSMAPI.Design:GetInlineColor("link")..L["Profit:"].."|r "..TSMAPI:FormatTextMoneyIcon(info.profit))
|
||||
else
|
||||
self.icon:Show()
|
||||
self.linkText:Show()
|
||||
self.linkText.bg:Show()
|
||||
self.stackText:Show()
|
||||
self.bidText:Show()
|
||||
self.buyoutText:Show()
|
||||
self.statusText:Hide()
|
||||
self.quantityText:Hide()
|
||||
self.goldText:Hide()
|
||||
self.goldText2:Hide()
|
||||
|
||||
local _,link,_,_,_,_,_,_,_,texture = TSMAPI:GetSafeItemInfo(info.itemString)
|
||||
self.linkText:SetText(link)
|
||||
if self.linkText:GetStringWidth() > 200 then
|
||||
self.linkText:SetWidth(200)
|
||||
else
|
||||
self.linkText:SetWidth(self.linkText:GetStringWidth())
|
||||
end
|
||||
self.icon.link = link
|
||||
self.icon:GetNormalTexture():SetTexture(texture)
|
||||
|
||||
local sText = format("%s "..TSMAPI.Design:GetInlineColor("link")..L["auctions of|r %s"], info.numStacks, info.stackSize)
|
||||
self.stackText:SetText(sText)
|
||||
|
||||
self.bidText:SetText(TSMAPI.Design:GetInlineColor("link")..BID..":|r "..TSMAPI:FormatTextMoneyIcon(info.bid))
|
||||
self.buyoutText:SetText(TSMAPI.Design:GetInlineColor("link")..BUYOUT..":|r "..TSMAPI:FormatTextMoneyIcon(info.buyout))
|
||||
|
||||
private.contentButtons.editPriceButton:Enable()
|
||||
private.contentButtons.editPriceFrame.itemString = info.itemString
|
||||
private.contentButtons.editPriceFrame.info = {itemString=info.itemString, link=link, buyout=info.buyout, operation=info.operation}
|
||||
|
||||
TSMAPI:CreateTimeDelay("AuctioningLogHLDelay", 0.01, function() private:UpdateLogSTHighlight(info) end)
|
||||
end
|
||||
end
|
||||
|
||||
frame.UpdateMode = function(self) end
|
||||
|
||||
local icon = CreateFrame("Button", nil, frame)
|
||||
icon:SetPoint("TOPLEFT", 85, -20)
|
||||
icon:SetWidth(50)
|
||||
icon:SetHeight(50)
|
||||
local tex = icon:CreateTexture()
|
||||
tex:SetAllPoints(icon)
|
||||
icon:SetNormalTexture(tex)
|
||||
icon:SetScript("OnEnter", function(self)
|
||||
if self.link and self.link ~= "" then
|
||||
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
|
||||
TSMAPI:SafeTooltipLink(self.link)
|
||||
GameTooltip:Show()
|
||||
end
|
||||
end)
|
||||
icon:SetScript("OnLeave", function()
|
||||
--BattlePetTooltip:Hide()
|
||||
GameTooltip:ClearLines()
|
||||
GameTooltip:Hide()
|
||||
end)
|
||||
frame.icon = icon
|
||||
|
||||
local linkText = TSMAPI.GUI:CreateLabel(frame)
|
||||
linkText:SetPoint("LEFT", icon, "RIGHT", 4, 0)
|
||||
linkText:SetJustifyH("LEFT")
|
||||
linkText:SetJustifyV("CENTER")
|
||||
frame.linkText = linkText
|
||||
|
||||
local bg = frame:CreateTexture(nil, "BACKGROUND")
|
||||
bg:SetPoint("TOPLEFT", linkText, -2, 2)
|
||||
bg:SetPoint("BOTTOMRIGHT", linkText, 2, -2)
|
||||
TSMAPI.Design:SetContentColor(bg)
|
||||
linkText.bg = bg
|
||||
|
||||
local stackText = TSMAPI.GUI:CreateLabel(frame)
|
||||
stackText:SetPoint("TOPLEFT", 350, -18)
|
||||
stackText:SetWidth(175)
|
||||
stackText:SetHeight(18)
|
||||
stackText:SetJustifyH("LEFT")
|
||||
stackText:SetJustifyV("CENTER")
|
||||
frame.stackText = stackText
|
||||
|
||||
local bidText = TSMAPI.GUI:CreateLabel(frame)
|
||||
bidText:SetPoint("TOPLEFT", 350, -38)
|
||||
bidText:SetWidth(175)
|
||||
bidText:SetHeight(18)
|
||||
bidText:SetJustifyH("LEFT")
|
||||
bidText:SetJustifyV("CENTER")
|
||||
frame.bidText = bidText
|
||||
|
||||
local buyoutText = TSMAPI.GUI:CreateLabel(frame)
|
||||
buyoutText:SetPoint("TOPLEFT", 350, -58)
|
||||
buyoutText:SetWidth(175)
|
||||
buyoutText:SetHeight(18)
|
||||
buyoutText:SetJustifyH("LEFT")
|
||||
buyoutText:SetJustifyV("CENTER")
|
||||
frame.buyoutText = buyoutText
|
||||
|
||||
local statusText = TSMAPI.GUI:CreateLabel(frame)
|
||||
statusText:SetPoint("TOP", frame, "TOPLEFT", 300, -15)
|
||||
statusText:SetJustifyH("CENTER")
|
||||
statusText:SetJustifyV("CENTER")
|
||||
frame.statusText = statusText
|
||||
|
||||
local goldText = TSMAPI.GUI:CreateLabel(frame)
|
||||
goldText:SetPoint("TOP", statusText, "BOTTOM", 0, -15)
|
||||
goldText:SetJustifyH("CENTER")
|
||||
goldText:SetJustifyV("CENTER")
|
||||
frame.goldText = goldText
|
||||
|
||||
local goldText2 = TSMAPI.GUI:CreateLabel(frame)
|
||||
goldText2:SetPoint("TOP", goldText, "BOTTOM")
|
||||
goldText2:SetJustifyH("CENTER")
|
||||
goldText2:SetJustifyV("CENTER")
|
||||
frame.goldText2 = goldText2
|
||||
|
||||
local quantityText = TSMAPI.GUI:CreateLabel(frame)
|
||||
quantityText:SetPoint("TOPLEFT", 535, -58)
|
||||
quantityText:SetWidth(175)
|
||||
quantityText:SetHeight(18)
|
||||
quantityText:SetJustifyH("LEFT")
|
||||
quantityText:SetJustifyV("CENTER")
|
||||
frame.quantityText = quantityText
|
||||
|
||||
return frame
|
||||
end
|
||||
|
||||
function private:CreateAuctionsST(parent)
|
||||
local frame = CreateFrame("Frame", nil, parent)
|
||||
frame:SetAllPoints()
|
||||
|
||||
local handlers = {
|
||||
OnClick = function(_, data, self, button)
|
||||
end,
|
||||
}
|
||||
|
||||
local rt = TSMAPI:CreateAuctionResultsTable(frame, handlers)
|
||||
rt:SetData({})
|
||||
rt:SetSort(7, true)
|
||||
rt:Hide()
|
||||
|
||||
return rt
|
||||
end
|
||||
|
||||
function private:CreateLogST(parent)
|
||||
local function GetPriceColumnText()
|
||||
if TSM.db.global.priceColumn == 1 then
|
||||
return L["Your Buyout"]
|
||||
elseif TSM.db.global.priceColumn == 2 then
|
||||
return L["Lowest Buyout"]
|
||||
end
|
||||
end
|
||||
|
||||
local stCols = {
|
||||
{
|
||||
name = L["Item"],
|
||||
width = 0.31,
|
||||
},
|
||||
{
|
||||
name = L["Operation"],
|
||||
width = 0.17,
|
||||
align = "Center"
|
||||
},
|
||||
{
|
||||
name = GetPriceColumnText(),
|
||||
width = 0.12,
|
||||
align = "RIGHT",
|
||||
},
|
||||
{
|
||||
name = L["Seller"],
|
||||
width = 0.11,
|
||||
align = "CENTER",
|
||||
},
|
||||
{
|
||||
name = L["Info"],
|
||||
width = 0.28,
|
||||
align = "LEFT",
|
||||
},
|
||||
{
|
||||
name = "",
|
||||
width = 0,
|
||||
},
|
||||
}
|
||||
|
||||
local handlers = {
|
||||
OnEnter = function(_, data, self)
|
||||
if not data.operation then return end
|
||||
local prices = TSM.Util:GetItemPrices(data.operation, data.itemString)
|
||||
GameTooltip:SetOwner(self, "ANCHOR_NONE")
|
||||
GameTooltip:SetPoint("BOTTOMLEFT", self, "TOPLEFT")
|
||||
GameTooltip:AddLine(data.link)
|
||||
GameTooltip:AddLine("Crafting Cost:".." "..(TSMAPI:FormatTextMoney(prices.cost, "|cffffffff") or "---"))
|
||||
GameTooltip:AddLine(L["Minimum Price:"].." "..(TSMAPI:FormatTextMoney(prices.minPrice, "|cffffffff") or "---"))
|
||||
GameTooltip:AddLine(L["Maximum Price:"].." "..(TSMAPI:FormatTextMoney(prices.maxPrice, "|cffffffff") or "---"))
|
||||
GameTooltip:AddLine(L["Normal Price:"].." "..(TSMAPI:FormatTextMoney(prices.normalPrice, "|cffffffff") or "---"))
|
||||
GameTooltip:AddLine(L["Lowest Buyout:"].." |r"..(TSMAPI:FormatTextMoney(data.lowestBuyout, "|cffffffff") or "---"))
|
||||
GameTooltip:AddLine(L["Log Info:"].." "..data.info)
|
||||
GameTooltip:AddLine("\n"..TSMAPI.Design:GetInlineColor("link2")..L["Click to show auctions for this item."].."|r".." ") -- the blank space is to fix formating.
|
||||
GameTooltip:AddLine(TSMAPI.Design:GetInlineColor("link2")..format(L["Right-Click to add %s to your friends list."], "|r"..(data.seller or "---")..TSMAPI.Design:GetInlineColor("link2")).."|r")
|
||||
GameTooltip:AddLine(TSMAPI.Design:GetInlineColor("link2")..L["Shift-Right-Click to show the options for this operation.".."|r"])
|
||||
GameTooltip:Show()
|
||||
end,
|
||||
OnLeave = function()
|
||||
GameTooltip:Hide()
|
||||
end,
|
||||
OnClick = function(_, data, _, button)
|
||||
if button == "LeftButton" then
|
||||
private.contentButtons:UnlockHighlight()
|
||||
private.logST:Hide()
|
||||
private.auctionsST:Show()
|
||||
private.auctionsST.isCurrentItem = data.itemString
|
||||
private:UpdateAuctionsSTData()
|
||||
elseif button == "RightButton" then
|
||||
if IsShiftKeyDown() then
|
||||
TSMAPI:ShowOperationOptions("Auctioning", TSM.operationNameLookup[data.operation])
|
||||
else
|
||||
if data.seller then
|
||||
AddFriend(data.seller)
|
||||
else
|
||||
TSM:Print(L["This item does not have any seller data."])
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
OnColumnClick = function(self, button)
|
||||
if self.colNum == 3 and button == "RightButton" then
|
||||
TSM.db.global.priceColumn = TSM.db.global.priceColumn + 1
|
||||
TSM.db.global.priceColumn = TSM.db.global.priceColumn > 2 and 1 or TSM.db.global.priceColumn
|
||||
self:SetText(GetPriceColumnText())
|
||||
wipe(private.logST.cache)
|
||||
private:UpdateLogSTData()
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local st = TSMAPI:CreateScrollingTable(parent, stCols, handlers)
|
||||
st:SetParent(parent)
|
||||
st:SetAllPoints()
|
||||
st:EnableSorting(true, 6)
|
||||
st:DisableSelection(true)
|
||||
return st
|
||||
end
|
||||
|
||||
function private:UpdateAuctionsSTData()
|
||||
if not private.auctionsST:IsVisible() or not private.auctionsST.sortInfo then return end
|
||||
|
||||
local results = {}
|
||||
if private.auctionsST.isCurrentItem then
|
||||
local itemString
|
||||
if type(private.auctionsST.isCurrentItem) == "string" or type(private.auctionsST.isCurrentItem) == "number" then
|
||||
itemString = private.auctionsST.isCurrentItem
|
||||
else
|
||||
itemString = TSM[private.mode]:GetCurrentItem().itemString
|
||||
end
|
||||
if itemString and TSM.Scan.auctionData[itemString] then
|
||||
tinsert(results, TSM.Scan.auctionData[itemString])
|
||||
private.auctionsST:SetExpanded(itemString, true)
|
||||
end
|
||||
else
|
||||
for _, auction in pairs(TSM.Scan.auctionData) do
|
||||
-- combine auctions with the same buyout / count / seller
|
||||
tinsert(results, auction)
|
||||
end
|
||||
end
|
||||
|
||||
private.auctionsST:SetData(results)
|
||||
end
|
||||
|
||||
function private:GetLogSTRow(record, recordIndex)
|
||||
if private.logST.cache[record] then
|
||||
return private.logST.cache[record]
|
||||
end
|
||||
|
||||
local name, link = TSMAPI:GetSafeItemInfo(record.itemString)
|
||||
local buyout, seller, isWhitelist, isPlayer, lowestBuyout, _
|
||||
if record.reason ~= "cancelAll" then
|
||||
buyout, _, seller, isWhitelist, isPlayer = TSM.Scan:GetLowestAuction(record.itemString, record.operation)
|
||||
lowestBuyout = buyout
|
||||
if TSM.db.global.priceColumn == 1 then
|
||||
buyout = record.buyout
|
||||
end
|
||||
end
|
||||
|
||||
local sellerText
|
||||
if seller then
|
||||
if isPlayer then
|
||||
sellerText = "|cffffff00"..seller.."|r"
|
||||
elseif isWhiteList then
|
||||
sellerText = TSMAPI.Design:GetInlineColor("link2")..seller.."|r"
|
||||
else
|
||||
sellerText = "|cffffffff"..seller.."|r"
|
||||
end
|
||||
else
|
||||
sellerText = "|cffffffff---|r"
|
||||
end
|
||||
|
||||
local color = TSM.Log:GetColor(record.mode, record.reason)
|
||||
local infoText = (color or "|cffffffff")..(record.info or "---").."|r"
|
||||
|
||||
local row = {
|
||||
cols = {
|
||||
{
|
||||
value = link,
|
||||
sortArg = name or "",
|
||||
},
|
||||
{
|
||||
value = record.operation and TSM.operationNameLookup[record.operation] or "---",
|
||||
sortArg = record.operation and TSM.operationNameLookup[record.operation] or "---",
|
||||
},
|
||||
{
|
||||
value = TSMAPI:FormatTextMoney(buyout, nil, true) or "---",
|
||||
sortArg = buyout or 0,
|
||||
},
|
||||
{
|
||||
value = sellerText,
|
||||
sortArg = seller or "~",
|
||||
},
|
||||
{
|
||||
value = infoText,
|
||||
sortArg = record.info or "~",
|
||||
},
|
||||
{ -- invisible column at the end for default sorting
|
||||
value = "",
|
||||
sortArg = recordIndex,
|
||||
},
|
||||
},
|
||||
link = link or name or itemString,
|
||||
itemString = record.itemString,
|
||||
operation = record.operation,
|
||||
buyout = buyout,
|
||||
lowestBuyout = lowestBuyout,
|
||||
seller = seller,
|
||||
info = infoText,
|
||||
}
|
||||
|
||||
private.logST.cache[record] = row
|
||||
return row
|
||||
end
|
||||
|
||||
function private:UpdateLogSTData()
|
||||
local rows = {}
|
||||
for i, record in ipairs(TSM.Log:GetData()) do
|
||||
tinsert(rows, private:GetLogSTRow(record, i))
|
||||
end
|
||||
private.logST:SetData(rows)
|
||||
|
||||
if #private.logST.rowData > private.logST.NUM_ROWS then
|
||||
TSMAPI:CreateTimeDelay("logSTOffset", 0.08, function()
|
||||
private.logST:SetScrollOffset(#private.logST.rowData - private.logST.NUM_ROWS)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function private:UpdateLogSTHighlight(currentItem)
|
||||
if not currentItem then return private.logST:SetHighlighted() end
|
||||
|
||||
for i=1, #private.logST.rowData do
|
||||
local data = private.logST.rowData[i]
|
||||
if data and data.operation == currentItem.operation and data.itemString == currentItem.itemString then
|
||||
private.logST:SetHighlighted(i)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function private:UpdateSTData()
|
||||
private:UpdateLogSTData()
|
||||
private:UpdateAuctionsSTData()
|
||||
end
|
||||
|
||||
local function SetGoldText()
|
||||
local line1, line2 = TSM.Post:GetAHGoldTotal()
|
||||
local text = format(L["Done Posting\n\nTotal value of your auctions: %s\nIncoming Gold: %s"], line1, line2)
|
||||
private.infoText:SetInfo(text)
|
||||
end
|
||||
|
||||
function private:Stopped(notDone)
|
||||
TSM.Manage:UnregisterAllMessages()
|
||||
private.buttons:Disable(true)
|
||||
private.statusBar:UpdateStatus(100, 100)
|
||||
private.contentButtons.currAuctionsButton:Hide()
|
||||
|
||||
if private.mode == "Post" then
|
||||
TSMAPI:CreateTimeDelay(0.5, SetGoldText)
|
||||
SetGoldText()
|
||||
private.statusBar:SetStatusText(L["Post Scan Finished"])
|
||||
elseif private.mode == "Cancel" then
|
||||
private.infoText:SetInfo(L["Done Canceling"])
|
||||
private.statusBar:SetStatusText(L["Cancel Scan Finished"])
|
||||
elseif private.mode == "Reset" then
|
||||
if not notDone then
|
||||
private.infoText:SetInfo(L["No Items to Reset"])
|
||||
end
|
||||
private.statusBar:SetStatusText(L["Reset Scan Finished"])
|
||||
end
|
||||
private.buttons.stop:SetText(L["Restart"])
|
||||
private.buttons.stop.isDone = true
|
||||
end
|
||||
|
||||
|
||||
function GUI:CreateSelectionFrame(parent)
|
||||
local frame = CreateFrame("Frame", nil, parent.content)
|
||||
frame:SetAllPoints()
|
||||
TSMAPI.Design:SetFrameBackdropColor(frame)
|
||||
|
||||
local stContainer = CreateFrame("Frame", nil, frame)
|
||||
stContainer:SetPoint("TOPLEFT", 5, -20)
|
||||
stContainer:SetPoint("BOTTOMRIGHT", -200, 30)
|
||||
TSMAPI.Design:SetFrameColor(stContainer)
|
||||
frame.groupTree = TSMAPI:CreateGroupTree(stContainer, "Auctioning", "Auctioning_AH")
|
||||
|
||||
-- top row (auto updater)
|
||||
local text = TSMAPI.GUI:CreateLabel(stContainer)
|
||||
text:SetFont(TSMAPI.Design:GetContentFont(), 24)
|
||||
text:SetPoint("TOP", 96, 76)
|
||||
text:SetHeight(24)
|
||||
text:SetJustifyH("CENTER")
|
||||
text:SetJustifyV("CENTER")
|
||||
text:SetText(TSMAPI.Design:GetInlineColor("link").."TSM_Auctioning")
|
||||
local ag = text:CreateAnimationGroup()
|
||||
local a1 = ag:CreateAnimation("Alpha")
|
||||
a1:SetChange(-.5)
|
||||
a1:SetDuration(.5)
|
||||
ag:SetLooping("BOUNCE")
|
||||
ag:Play()
|
||||
|
||||
local helpText = TSMAPI.GUI:CreateLabel(frame)
|
||||
helpText:SetPoint("TOP", stContainer, 0, 20)
|
||||
helpText:SetJustifyH("CENTER")
|
||||
helpText:SetJustifyV("CENTER")
|
||||
helpText:SetText(L["Select the groups which you would like to include in the scan."])
|
||||
frame.helpText = helpText
|
||||
|
||||
local btnWidth = floor((stContainer:GetWidth() - 10)/3)
|
||||
local postBtn = TSMAPI.GUI:CreateButton(frame, 16)
|
||||
postBtn:SetPoint("BOTTOMLEFT", 5, 5)
|
||||
postBtn:SetHeight(20)
|
||||
postBtn:SetWidth(btnWidth)
|
||||
postBtn:SetText(L["Start Post Scan"])
|
||||
postBtn:SetScript("OnClick", function()
|
||||
private.mode = "Post"
|
||||
private.specialMode = nil
|
||||
GUI:StartScan(parent)
|
||||
end)
|
||||
frame.postBtn = postBtn
|
||||
|
||||
local cancelBtn = TSMAPI.GUI:CreateButton(frame, 16)
|
||||
cancelBtn:SetPoint("BOTTOMLEFT", postBtn, "BOTTOMRIGHT", 5, 0)
|
||||
cancelBtn:SetHeight(20)
|
||||
cancelBtn:SetWidth(btnWidth)
|
||||
cancelBtn:SetText(L["Start Cancel Scan"])
|
||||
cancelBtn:SetScript("OnClick", function()
|
||||
private.mode = "Cancel"
|
||||
private.specialMode = nil
|
||||
GUI:StartScan(parent)
|
||||
end)
|
||||
frame.cancelBtn = cancelBtn
|
||||
|
||||
local resetBtn = TSMAPI.GUI:CreateButton(frame, 16)
|
||||
resetBtn:SetPoint("BOTTOMLEFT", cancelBtn, "BOTTOMRIGHT", 5, 0)
|
||||
resetBtn:SetHeight(20)
|
||||
resetBtn:SetWidth(btnWidth)
|
||||
resetBtn:SetText(L["Start Reset Scan"])
|
||||
resetBtn:SetScript("OnClick", function()
|
||||
private.mode = "Reset"
|
||||
private.specialMode = nil
|
||||
GUI:StartScan(parent)
|
||||
end)
|
||||
frame.resetBtn = resetBtn
|
||||
|
||||
local customScanFrame = CreateFrame("Frame", nil, frame)
|
||||
customScanFrame:SetPoint("TOPLEFT", stContainer:GetWidth() + 10, 0)
|
||||
customScanFrame:SetPoint("BOTTOMRIGHT")
|
||||
TSMAPI.Design:SetFrameColor(customScanFrame)
|
||||
private.customScanFrame = customScanFrame
|
||||
|
||||
local title = TSMAPI.GUI:CreateLabel(customScanFrame)
|
||||
title:SetPoint("TOP", 0, -2)
|
||||
title:SetJustifyH("CENTER")
|
||||
title:SetJustifyV("CENTER")
|
||||
title:SetText(L["Other Auctioning Searches"])
|
||||
customScanFrame.title = title
|
||||
|
||||
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -20)
|
||||
|
||||
local cancelAllBtn = TSMAPI.GUI:CreateButton(customScanFrame, 16)
|
||||
cancelAllBtn:SetPoint("TOPLEFT", 4, -24)
|
||||
cancelAllBtn:SetPoint("TOPRIGHT", -4, -24)
|
||||
cancelAllBtn:SetHeight(20)
|
||||
cancelAllBtn:SetText(L["Cancel All Auctions"])
|
||||
cancelAllBtn:SetScript("OnClick", function()
|
||||
private.mode = "Cancel"
|
||||
private.specialMode = "CancelAll"
|
||||
GUI:StartScan(parent)
|
||||
end)
|
||||
cancelAllBtn.tooltip = L["Will cancel all your auctions, including ones which you didn't post with Auctioning."]
|
||||
customScanFrame.cancelAllBtn = cancelAllBtn
|
||||
|
||||
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -48)
|
||||
|
||||
local cancelFilterText = TSMAPI.GUI:CreateLabel(customScanFrame, "small")
|
||||
cancelFilterText:SetPoint("TOPLEFT", 4, -52)
|
||||
cancelFilterText:SetPoint("TOPRIGHT", -4, -52)
|
||||
cancelFilterText:SetJustifyH("LEFT")
|
||||
cancelFilterText:SetJustifyV("CENTER")
|
||||
cancelFilterText:SetText(L["Cancel Filter:"])
|
||||
customScanFrame.cancelFilterText = cancelFilterText
|
||||
|
||||
local filterEditBox = TSMAPI.GUI:CreateInputBox(customScanFrame, "TSMAuctioningFilterSearchEditbox")
|
||||
filterEditBox:SetPoint("TOPLEFT", 4, -72)
|
||||
filterEditBox:SetPoint("TOPRIGHT", -4, -72)
|
||||
filterEditBox:SetHeight(20)
|
||||
customScanFrame.filterEditBox = filterEditBox
|
||||
|
||||
local cancelFilterBtn = TSMAPI.GUI:CreateButton(customScanFrame, 16)
|
||||
cancelFilterBtn:SetPoint("TOPLEFT", 4, -96)
|
||||
cancelFilterBtn:SetPoint("TOPRIGHT", -4, -96)
|
||||
cancelFilterBtn:SetHeight(20)
|
||||
cancelFilterBtn:SetText("Cancel Items Matching Filter")
|
||||
cancelFilterBtn:SetScript("OnClick", function()
|
||||
local filter = filterEditBox:GetText():trim()
|
||||
if filter == "" then return TSM:Print(L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."]) end
|
||||
private.mode = "Cancel"
|
||||
private.specialMode = filterEditBox:GetText()
|
||||
GUI:StartScan(parent)
|
||||
end)
|
||||
cancelFilterBtn.tooltip = L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."]
|
||||
customScanFrame.cancelFilterBtn = cancelFilterBtn
|
||||
|
||||
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -120)
|
||||
|
||||
local durationList = {}
|
||||
local durationText = {L["Under 30min"], L["30min to 2hrs"], L["2 to 12 hrs"]}
|
||||
for i=1, 3 do -- go up to long duration
|
||||
durationList[i] = format("%s (%s)", _G["AUCTION_TIME_LEFT"..i], durationText[i])
|
||||
end
|
||||
local cancelDurationDropdown = TSMAPI.GUI:CreateDropdown(customScanFrame, durationList, L["Select a duration in this dropdown and click on the button below to cancel all auctions at or below this duration."])
|
||||
cancelDurationDropdown:SetPoint("TOPLEFT", 2, -124)
|
||||
cancelDurationDropdown:SetPoint("TOPRIGHT", 0, -124)
|
||||
cancelDurationDropdown:SetHeight(20)
|
||||
cancelDurationDropdown:SetLabel(L["Low Duration"])
|
||||
cancelDurationDropdown:SetValue(1)
|
||||
|
||||
local cancelDurationBtn = TSMAPI.GUI:CreateButton(customScanFrame, 16)
|
||||
cancelDurationBtn:SetPoint("TOPLEFT", 4, -172)
|
||||
cancelDurationBtn:SetPoint("TOPRIGHT", -4, -172)
|
||||
cancelDurationBtn:SetHeight(20)
|
||||
cancelDurationBtn:SetText(L["Cancel Low Duration"])
|
||||
cancelDurationBtn:SetScript("OnClick", function()
|
||||
private.mode = "Cancel"
|
||||
private.specialMode = cancelDurationDropdown:GetValue()
|
||||
GUI:StartScan(parent)
|
||||
end)
|
||||
cancelDurationBtn.tooltip = L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."]
|
||||
customScanFrame.cancelDurationBtn = cancelDurationBtn
|
||||
|
||||
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -196)
|
||||
|
||||
return frame
|
||||
end
|
||||
|
||||
function GUI:CreateScanFrame(parent)
|
||||
local frame = CreateFrame("Frame", nil, parent)
|
||||
frame:SetAllPoints()
|
||||
local contentFrame = CreateFrame("Frame", nil, frame)
|
||||
contentFrame:SetAllPoints(parent.content)
|
||||
TSMAPI.Design:SetFrameColor(contentFrame)
|
||||
frame.content = contentFrame
|
||||
|
||||
local statusBarFrame = CreateFrame("Frame", nil, frame.content)
|
||||
statusBarFrame:SetPoint("TOPLEFT", frame.content, "BOTTOMLEFT", 165, -2)
|
||||
statusBarFrame:SetWidth(355)
|
||||
statusBarFrame:SetHeight(30)
|
||||
private.statusBar = TSMAPI.GUI:CreateStatusBar(statusBarFrame, "TSMAuctioningStatusBar")
|
||||
|
||||
private.buttons = private:CreateButtons(frame)
|
||||
|
||||
private.contentButtons = private.contentButtons or private:CreateContentButtons(frame)
|
||||
private.contentButtons:Show()
|
||||
private.contentButtons:UpdateMode()
|
||||
|
||||
private.infoText = private.infoText or private:CreateInfoText(frame)
|
||||
private.infoText:Show()
|
||||
|
||||
private.auctionsST = private:CreateAuctionsST(frame.content)
|
||||
private.logST = private:CreateLogST(frame.content)
|
||||
return frame
|
||||
end
|
||||
|
||||
function GUI:StartScan(frame)
|
||||
private.selectionFrame:Hide()
|
||||
private.scanFrame = private.scanFrame or GUI:CreateScanFrame(frame)
|
||||
private.scanFrame:Show()
|
||||
private.statusBar:Show()
|
||||
private.buttons:Show()
|
||||
private.buttons:UpdateMode()
|
||||
private.buttons:Disable()
|
||||
private.buttons.stop.isDone = nil
|
||||
private.buttons.stop:SetText(L["Stop"])
|
||||
private.contentButtons:Show()
|
||||
private.contentButtons:UpdateMode()
|
||||
private.infoText:Show()
|
||||
private.contentButtons.logButton:Click()
|
||||
private.auctionsST:SetData({})
|
||||
private.logST:SetData({})
|
||||
private.logST.cache = {}
|
||||
|
||||
if private.mode == "Reset" then
|
||||
private.buttons:Hide()
|
||||
private.contentButtons:Hide()
|
||||
private.auctionsST:Hide()
|
||||
private.logST:Hide()
|
||||
TSM.Reset:Show(frame)
|
||||
end
|
||||
|
||||
|
||||
local options = {itemOperations={}}
|
||||
if private.specialMode then
|
||||
options.specialMode = private.specialMode
|
||||
else
|
||||
for groupName, data in pairs(private.selectionFrame.groupTree:GetSelectedGroupInfo()) do
|
||||
groupName = TSMAPI:FormatGroupPath(groupName, true)
|
||||
for _, opName in ipairs(data.operations) do
|
||||
TSMAPI:UpdateOperation("Auctioning", opName)
|
||||
local opSettings = TSM.operations[opName]
|
||||
if not opSettings then
|
||||
-- operation doesn't exist anymore in Auctioning
|
||||
TSM:Printf(L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."], groupName, opName)
|
||||
else
|
||||
-- it's a valid operation
|
||||
TSM.operationNameLookup[opSettings] = opName
|
||||
for itemString in pairs(data.items) do
|
||||
options.itemOperations[itemString] = options.itemOperations[itemString] or {}
|
||||
tinsert(options.itemOperations[itemString], opSettings)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
TSMAPI:CreateTimeDelay("aucStartDelay", 0.1, function() TSM.Manage:StartScan(private, options) end)
|
||||
end
|
||||
|
||||
function GUI:ShowSelectionFrame(frame)
|
||||
if private.scanFrame then private.scanFrame:Hide() end
|
||||
private.selectionFrame = private.selectionFrame or GUI:CreateSelectionFrame(frame)
|
||||
private.selectionFrame:Show()
|
||||
TSMAPI.AuctionScan:StopScan()
|
||||
end
|
||||
|
||||
function GUI:HideSelectionFrame()
|
||||
private.selectionFrame:Hide()
|
||||
if private.scanFrame then private.scanFrame:Hide() end
|
||||
TSMAPI.AuctionScan:StopScan()
|
||||
TSM.Reset:Hide()
|
||||
end
|
||||
Reference in New Issue
Block a user