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