You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.0 KiB
123 lines
4.0 KiB
|
4 years ago
|
local TSM = select(2, ...)
|
||
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Shopping") -- loads the localization table
|
||
|
|
|
||
|
|
local private = {}
|
||
|
|
|
||
|
|
function private.Create(parent)
|
||
|
|
local frame = CreateFrame("Frame", nil, parent)
|
||
|
|
frame:Hide()
|
||
|
|
frame:SetAllPoints()
|
||
|
|
frame:SetScript("OnShow", private.UpdateSTData)
|
||
|
|
frame:RegisterEvent("BAG_UPDATE")
|
||
|
|
frame:SetScript("OnEvent", function() TSMAPI:CreateTimeDelay("quickPostingBagUpdate", 0.1, function() private.UpdateSTData(frame) end) end)
|
||
|
|
|
||
|
|
local label = TSMAPI.GUI:CreateLabel(frame, "small")
|
||
|
|
label:SetPoint("TOPLEFT")
|
||
|
|
label:SetPoint("TOPRIGHT")
|
||
|
|
label:SetJustifyH("CENTER")
|
||
|
|
label:SetJustifyV("TOP")
|
||
|
|
label:SetText(L["Click to search for an item.\nShift-Click to post at market value."])
|
||
|
|
|
||
|
|
TSMAPI.GUI:CreateHorizontalLine(frame, -(label:GetHeight()+5))
|
||
|
|
|
||
|
|
local stFrame = CreateFrame("Frame", nil, frame)
|
||
|
|
stFrame:SetPoint("TOPLEFT", label, "BOTTOMLEFT", 0, -10)
|
||
|
|
stFrame:SetPoint("BOTTOMRIGHT", 0, 30)
|
||
|
|
TSMAPI.Design:SetFrameColor(stFrame)
|
||
|
|
|
||
|
|
local stHandlers = {
|
||
|
|
OnClick = function(_, data)
|
||
|
|
if IsShiftKeyDown() then
|
||
|
|
if type(data.buyout) ~= "number" or data.buyout <= 0 then return end
|
||
|
|
local bag, slot
|
||
|
|
for b, s, itemString in TSMAPI:GetBagIterator() do
|
||
|
|
if itemString == data.itemString then
|
||
|
|
bag = b
|
||
|
|
slot = s
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if not bag or not slot then return end
|
||
|
|
if not AuctionFrameAuctions.duration then
|
||
|
|
-- Fix in case Blizzard_AuctionUI hasn't set this value yet (which could cause an error)
|
||
|
|
AuctionFrameAuctions.duration = TSM.db.global.quickPostingDuration
|
||
|
|
end
|
||
|
|
PickupContainerItem(bag, slot)
|
||
|
|
ClickAuctionSellItemButton(AuctionsItemButton, "LeftButton")
|
||
|
|
StartAuction(data.buyout*TSM.db.global.postBidPercent, data.buyout, TSM.db.global.quickPostingDuration, 1, 1)
|
||
|
|
TSM:Printf(L["Posted a %s with a buyout of %s."], data.link, TSMAPI:FormatTextMoney(data.buyout))
|
||
|
|
|
||
|
|
TSM:RegisterMessage("TSM_AH_EVENTS", function() TSMAPI:FireEvent("SHOPPING:QUICKPOST:POSTEDITEM", data) private.UpdateSTData(frame) end)
|
||
|
|
TSMAPI:WaitForAuctionEvents("Post")
|
||
|
|
else
|
||
|
|
TSM.Search:StartFilterSearch(data.name.."/exact")
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
OnEnter = function(_, data, self)
|
||
|
|
if not data then return end
|
||
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
|
||
|
|
TSMAPI:SafeTooltipLink(data.link)
|
||
|
|
GameTooltip:Show()
|
||
|
|
end,
|
||
|
|
OnLeave = function()
|
||
|
|
GameTooltip:ClearLines()
|
||
|
|
GameTooltip:Hide()
|
||
|
|
end
|
||
|
|
}
|
||
|
|
local colInfo = {
|
||
|
|
{name=L["Item"], width=0.56},
|
||
|
|
{name=L["Num"], width=0.14, align="CENTER"},
|
||
|
|
{name=L["Price"], width=0.3, align="RIGHT"},
|
||
|
|
}
|
||
|
|
frame.st = TSMAPI:CreateScrollingTable(stFrame, colInfo, stHandlers, 12)
|
||
|
|
frame.st:DisableSelection(true)
|
||
|
|
frame.st:DisableHighlight(true)
|
||
|
|
|
||
|
|
local checkBox = TSMAPI.GUI:CreateCheckBox(frame)
|
||
|
|
checkBox:SetPoint("BOTTOMLEFT")
|
||
|
|
checkBox:SetPoint("BOTTOMRIGHT")
|
||
|
|
checkBox:SetHeight(30)
|
||
|
|
checkBox:SetLabel(L["Hide Grouped Items"])
|
||
|
|
checkBox:SetValue(TSM.db.global.quickPostingHideGrouped)
|
||
|
|
checkBox:SetCallback("OnValueChanged", function(_, _, value)
|
||
|
|
TSM.db.global.quickPostingHideGrouped = value
|
||
|
|
private.UpdateSTData(frame)
|
||
|
|
end)
|
||
|
|
|
||
|
|
return frame
|
||
|
|
end
|
||
|
|
|
||
|
|
function private.UpdateSTData(frame)
|
||
|
|
local items = {}
|
||
|
|
for bag, slot, itemString, quantity in TSMAPI:GetBagIterator() do
|
||
|
|
if not TSM.db.global.quickPostingHideGrouped or not TSMAPI:GetGroupPath(itemString) then
|
||
|
|
items[itemString] = (items[itemString] or 0) + quantity
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local stData = {}
|
||
|
|
for itemString, quantity in pairs(items) do
|
||
|
|
local name, link = TSMAPI:GetSafeItemInfo(itemString)
|
||
|
|
if name then
|
||
|
|
local buyout = TSM:GetMaxPrice(TSM.db.global.quickPostingPrice, itemString)
|
||
|
|
local row = {
|
||
|
|
cols = {
|
||
|
|
{value=link},
|
||
|
|
{value=quantity},
|
||
|
|
{value=TSMAPI:FormatTextMoney(buyout) or "---"},
|
||
|
|
},
|
||
|
|
itemString = itemString,
|
||
|
|
link = link,
|
||
|
|
name = name,
|
||
|
|
buyout = buyout,
|
||
|
|
}
|
||
|
|
tinsert(stData, row)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
sort(stData, function(a, b) return a.name < b.name end)
|
||
|
|
frame.st:SetData(stData)
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
TSM:AddSidebarFeature(L["Quick Posting"], private.Create)
|
||
|
|
end
|