AuctioneerSuite/Auc-Advanced/Modules/Auc-Util-SimpleAuction/SimpFrame.lua

1295 lines
44 KiB
Lua
Raw Permalink Normal View History

2026-04-13 17:48:13 -04:00
--[[
Auctioneer - Simplified Auction Posting
Version: 5.9.4961 (WhackyWallaby)
Revision: $Id: SimpFrame.lua 4933 2010-10-13 17:16:14Z Nechckn $
URL: http://auctioneeraddon.com/
This is an addon for World of Warcraft that adds a simple dialog for
easy posting of your auctionables when you are at the auction-house.
License:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program(see GPL.txt); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Note:
This AddOn's source code is specifically designed to work with
World of Warcraft's interpreted AddOn system.
You have an implicit license to use this AddOn with these facilities
since that is its designated purpose as per:
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
--]]
if not AucAdvanced then return end
local lib = AucAdvanced.Modules.Util.SimpleAuction
local private = lib.Private
local const = AucAdvanced.Const
local aucPrint,decode,_,_,replicate,_,get,set,default,debugPrint,fill = AucAdvanced.GetModuleLocals()
local Const = const
local wipe = wipe
local pricecache
local frame
local TAB_NAME = "Post"
function private.clearcache()
pricecache = nil
end
function private.postPickupContainerItemHook(_,_,bag, slot)
if (CursorHasItem()) then
frame.CursorItem = {bag = bag, slot = slot}
else
frame.CursorItem = nil
end
end
function private.ShiftFocus(frame, ...)
local dest
if IsShiftKeyDown() then
dest = frame.prevFrame
else
dest = frame.nextFrame
end
if dest and dest.SetFocus then
dest:SetFocus()
else
frame:ClearFocus()
end
end
function private.SetPrevNext(frame, prevFrame, nextFrame)
frame.prevFrame = prevFrame
frame.nextFrame = nextFrame
frame:SetScript("OnTabPressed", private.ShiftFocus)
frame:SetScript("OnEnterPressed", private.ShiftFocus)
end
function private.SigFromLink(link)
local itype, id, suffix, factor, enchant, seed = AucAdvanced.DecodeLink(link)
if itype=="item" then
if enchant ~= 0 then
return ("%d:%d:%d:%d"):format(id, suffix, factor, enchant)
elseif factor ~= 0 then
return ("%d:%d:%d"):format(id, suffix, factor)
elseif suffix ~= 0 then
return ("%d:%d"):format(id, suffix)
end
return tostring(id)
end
-- returns nil
end
function private.GetMyPrice(link, items)
if not link then return end
local uBid, uBuy
local searchname = GetItemInfo (link)
local n = GetNumAuctionItems("owner")
if n and n > 0 then
for i = 1, n do
local item = AucAdvanced.Scan.GetAuctionItem("owner", i)
if item and item[const.NAME] == searchname then
if items then table.insert(items, item) end
local stack = item[const.COUNT]
if stack and stack > 0 then
local bid, buy = item[const.MINBID], item[const.BUYOUT]
if bid and bid > 0 then
bid = bid / stack
uBid = uBid and min(uBid, bid) or bid
-- only check buy value if the bid value is valid
-- avoids including buy prices for "sold" auctions,
-- due to problems with invalid stack counts from Blizzard API
if buy and buy > 0 then
buy = buy / stack
uBuy = uBuy and min(uBuy, buy) or buy
end
end
end
end
end
end
return uBid, uBuy
end
--Returns:
--numitems: number of competing items
--items: table with competition
--uBid: bid matching your current auction
--uBuy: buy matching your current auction
--lBid: bid undercutting competition by 1c
--lBuy: buy undercutting competition by 1c
--aSeen: number of items in competing auctions
--aBuy: average price for current competing auctions
local query = {}
function private.GetItems(link)
local itype, id, suffix, factor, enchant, seed = AucAdvanced.DecodeLink(link)
local aSeen, lBid, lBuy, uBid, uBuy, aBuy, aveBuy = 0
local player = UnitName("player")
local items = {}
local sig = AucAdvanced.API.GetSigFromLink(link)
if pricecache and pricecache[sig] then
uBid, uBuy, lBid, lBuy, aSeen, aveBuy = strsplit(":", pricecache[sig][1])
uBid, uBuy, lBid, lBuy, aSeen, aveBuy = tonumber(uBid), tonumber(uBuy), tonumber(lBid), tonumber(lBuy), tonumber(aSeen), tonumber(aveBuy)
return #pricecache[sig][2], pricecache[sig][2], uBid, uBuy, lBid, lBuy, aSeen, aveBuy
end
query.itemId = id
query.suffix = suffix
query.factor = factor
local matching = AucAdvanced.API.QueryImage(query)
local live = false
if AuctionFrame and AuctionFrame:IsVisible() then
live = true
uBid, uBuy = private.GetMyPrice(link, items)
end
for pos, item in ipairs(matching) do
local bid, buy, owner, stk = item[const.MINBID], item[const.BUYOUT], item[const.SELLER], item[const.COUNT]
stk = stk or 1
local bidea, buyea
if bid and bid > 0 then
bidea = bid/stk
end
if buy and buy > 0 then
buyea = buy/stk
end
if owner and owner == player then
if not live then
if not uBid then uBid = bidea elseif bidea then uBid = min(uBid, bidea) end
if not uBuy then uBuy = buyea elseif buyea then uBuy = min(uBuy, buyea) end
table.insert(items, item)
end
else
if not lBid then
lBid = bidea
elseif bidea then
lBid = min(lBid, bidea)
end
if not lBuy then
lBuy = buyea
elseif buyea then
lBuy = min(lBuy, buyea)
end
if buy then
aBuy = (aBuy or 0) + buy
aSeen = (aSeen or 0)+ stk
end
table.insert(items, item)
end
end
aveBuy = (aBuy and aSeen>=1) and aBuy/aSeen or 0
if not pricecache then pricecache = {} end
pricecache[sig] = {}
pricecache[sig][1] = strjoin(":", tostring(uBid), tostring(uBuy), tostring(lBid), tostring(lBuy), tostring(aSeen), tostring(aveBuy))
pricecache[sig][2] = replicate(items)
return #items, items, uBid, uBuy, lBid, lBuy, aSeen, aveBuy
end
local coins = AucAdvanced.Coins
private.coins = coins
function private.SetIconCount(itemCount)
local size = 18
if itemCount > 999 then
local size = 14
elseif itemCount > 99 then
local size = 16
elseif itemCount > 9 then
local size = 17
end
frame.icon.count:SetFont(AucAdvSimpleNumberFontLarge.font, size, "OUTLINE")
frame.icon.count:SetText(itemCount)
end
function private.UpdateDisplay()
local link = frame.icon.itemLink
if not link then return end
local cBid, cBuy = MoneyInputFrame_GetCopper(frame.minprice), MoneyInputFrame_GetCopper(frame.buyout)
frame.CurItem.buy, frame.CurItem.bid = cBuy, cBid
local cStack = frame.stacks.size:GetNumber() or 1
frame.CurItem.stack = cStack
local cNum = frame.stacks.num:GetNumber() or 1
frame.CurItem.number = cNum
local oStack, oBid, oBuy, oReason, oLink = unpack(frame.detail)
local lStack = frame.stacks.size.lastSize or oStack
local duration = frame.duration.time.selected
local sig = AucAdvanced.API.GetSigFromLink(link)
if not sig then return private.LoadItemLink() end
local _, total, unpostable, _, _, reason = AucAdvanced.Post.CountAvailableItems(sig)
total = total - unpostable
if total < 1 then return private.LoadItemLink() end
private.SetIconCount(total)
local dBid = abs(cBid/lStack*oStack-oBid)
local dBuy = abs(cBuy/lStack*oStack-oBuy)
local priceType = "auto"
if dBid >= 1 or dBuy >= 1 then
priceType = "fixed"
frame.err:SetText("Manual pricing on item")
end
if priceType == "auto" and cStack ~= oStack then
private.UpdatePricing()
return
elseif priceType == "fixed" and cStack ~= lStack then
cBid = cBid / lStack * cStack
cBuy = cBuy / lStack * cStack
cBid = ceil(cBid)
cBuy = ceil(cBuy)
MoneyInputFrame_ResetMoney(frame.minprice)
MoneyInputFrame_SetCopper(frame.minprice, cBid)
frame.CurItem.bid = cBid
frame.CurItem.bidper = cBid/frame.CurItem.stack
MoneyInputFrame_ResetMoney(frame.buyout)
MoneyInputFrame_SetCopper(frame.buyout, cBuy)
frame.CurItem.buy = cBuy
frame.CurItem.buyper = cBuy/frame.CurItem.stack
frame.err:SetText("Adjusted price to new stack size")
end
if GetSellValue then
local vendor = GetSellValue(oLink) or 0
if vendor > cBid / cStack then
frame.err:SetText("Warning: Bid is below vendor price")
end
end
local flagenable = true
local coinsBid, coinsBuy, coinsBidEa, coinsBuyEa
if cBid > 0 then
coinsBid = coins(cBid)
coinsBidEa = coins(cBid/cStack)
else
coinsBid = "no"
coinsBidEa = "no"
frame.err:SetText("Error: No bid price set")
flagenable = false
end
if cBuy > 0 then
coinsBuy = coins(cBuy)
coinsBuyEa = coins(cBuy/cStack)
if cBuy < cBid then
frame.err:SetText("Error: Buyout cannot be less than bid price")
flagenable = false
end
else
coinsBuy = "no"
coinsBuyEa = "no"
end
local lots = "lot"
if cNum > 1 then lots = "lots" end
local text
if (cStack > 1) then
text = string.format("Auctioning %d %s of %d sized stacks at %s bid/%s buyout per stack (%s/%s ea)", cNum, lots, cStack, coinsBid, coinsBuy, coinsBidEa, coinsBuyEa)
else
text = string.format("Auctioning %d %s of this item at %s bid/%s buyout each", cNum, lots, coinsBid, coinsBuy)
end
frame.info:SetText(text)
local faction = "home"
if AucAdvanced.GetFactionGroup() == "Neutral" then
faction = "neutral"
end
local deposit = GetDepositCost(oLink, duration, faction, cStack)
if not deposit then
frame.fees:SetText("Unknown deposit cost")
elseif cNum > 1 then
frame.fees:SetText(("Deposit: %s, %s/stack \n~%s/ea"):format(coins(deposit*cNum), coins(deposit), coins(ceil(deposit/cStack))))
elseif cStack > 1 then
frame.fees:SetText(("Deposit: %s/stack \n~%s/ea"):format(coins(deposit), coins(ceil(deposit/cStack))))
else
frame.fees:SetText(("Deposit: %s"):format(coins(deposit)))
end
frame.stacks.equals:SetText("= "..(cStack * cNum))
if flagenable then
frame.create:Enable()
else
frame.create:Disable()
end
end
function private.UpdateCompetition(image)
local data = {}
local style = {}
for i = 1, #image do
local result = image[i]
local tLeft = result[Const.TLEFT]
if (tLeft == 1) then tLeft = "30m"
elseif (tLeft == 2) then tLeft = "2h"
elseif (tLeft == 3) then tLeft = "12h"
elseif (tLeft == 4) then tLeft = "48h"
end
local count = result[Const.COUNT]
data[i] = {
--result[Const.NAME],
result[Const.SELLER],
tLeft,
count,
math.floor(0.5+result[Const.MINBID]/count),
math.floor(0.5+result[Const.CURBID]/count),
math.floor(0.5+result[Const.BUYOUT]/count),
result[Const.MINBID],
result[Const.CURBID],
result[Const.BUYOUT],
result[Const.LINK]
}
local curbid = result[Const.CURBID]
if curbid == 0 then
curbid = result[Const.MINBID]
end
--color ignored/self sellers
local seller = result[Const.SELLER]
local player = UnitName("player")
if seller == player then
if not style[i] then style[i] = {} end
style[i][1] = { textColor = {0,1,0} }
elseif AucAdvanced.Modules.Filter.Basic and AucAdvanced.Modules.Filter.Basic.IsPlayerIgnored and AucAdvanced.Modules.Filter.Basic.IsPlayerIgnored(result[Const.SELLER]) then
if not style[i] then style[i] = {} end
style[i][1] = { textColor = {1,0,0} }
end
end
frame.imageview.sheet:SetData(data, style)
end
function private.UpdatePricing()
local link = frame.icon.itemLink
if not link then return end
local mid, seen = 0,0
local stack = frame.stacks.size:GetNumber()
local _,_,_,_,_,_,_,stx = GetItemInfo(link)
local sig = AucAdvanced.API.GetSigFromLink(link)
if not sig then return private.LoadItemLink() end
local _, total, unpostable, _, _, reason = AucAdvanced.Post.CountAvailableItems(sig)
total = total - unpostable
if total < 1 then return private.LoadItemLink() end
private.SetIconCount(total)
stx = min(stx, total)
if not stack or stack == 0 or stack > stx then
stack = stx
frame.stacks.size:SetNumber(stack)
frame.CurItem.stack = stack
end
local num = frame.stacks.num:GetNumber()
if not num or num == 0 then
num = 1
frame.stacks.num:SetNumber(num)
frame.CurItem.number = num
end
local buy, bid
local reason = ""
-- We need this out here because it fetches the items from the image
local imgseen, image, matchBid, matchBuy, lowBid, lowBuy, aSeen, aveBuy = private.GetItems(link)
private.UpdateCompetition(image)
--check for fixed price
if frame.CurItem.manual then
buy = frame.CurItem.buyper
bid = frame.CurItem.bidper
reason = "Manual pricing on item"
end
if not buy then
--Check for undercut first
if frame.options.undercut:GetChecked() then
if lowBuy and lowBuy > 0 then
local underBuy, underBid, by = 1,1, "default 1c"
local model = get("util.simpleauc.undercut")
local fixed = get("util.simpleauc.undercut.fixed")
local percent = get("util.simpleauc.undercut.percent")
local pct = tonumber(percent)/100
if model == "fixed" then
underBuy = fixed
underBid = fixed
by = "fixed amount: "..coins(fixed)
else
underBuy = lowBuy*pct
underBid = (lowBid or 0)*pct
by = percent.."% ("..coins(underBuy)..")"
end
buy = lowBuy - underBuy
if lowBid and lowBid > 0 and lowBid <= lowBuy then
bid = lowBid - underBid
else
bid = buy * 0.8
end
reason = "Undercutting market by "..by
end
--then matching current
elseif frame.options.matchmy:GetChecked() then
if matchBuy and matchBuy > 0 then
buy = matchBuy
if matchBid and matchBid > 0 and matchBid <= matchBuy then
bid = matchBid
else
bid = buy * 0.8
end
reason = "Matching your prices"
end
end
--if no buy price yet, look for marketprice
if not buy then
local market, seen = AucAdvanced.API.GetMarketValue(link)
if market and (market > 0) and (seen > 5 or aSeen < 3) then
buy = market
bid = market * 0.8
reason = "Using market value"
end
end
--look for average of current competition
if not buy and aveBuy and aveBuy > 0 then
buy = aveBuy
bid = buy * 0.8
reason = "Using current market data"
end
--Vendor markup
if not buy and GetSellValue then
local vendor = GetSellValue(link)
if vendor and vendor > 0 then
buy = vendor * 3
bid = buy * 0.8
reason = "Marking up vendor"
end
end
end
if not buy then
buy = 0
end
if not bid then
bid = buy * 0.8
end
--multiply by stacksize
bid = bid * stack
buy = buy * stack
--We give up
if bid == 0 then
bid = 1
buy = 0
reason = "Unable to calculate price"
end
if (stack * num) > total then
reason = "Error: You don't have that many"
end
bid, buy = ceil(tonumber(bid) or 1), ceil(tonumber(buy) or 0)
MoneyInputFrame_ResetMoney(frame.minprice)
MoneyInputFrame_SetCopper(frame.minprice, bid)
frame.CurItem.bid = bid
frame.CurItem.bidper = bid/stack
MoneyInputFrame_ResetMoney(frame.buyout)
MoneyInputFrame_SetCopper(frame.buyout, buy)
frame.CurItem.buy = buy
frame.CurItem.buyper = buy/stack
frame.detail = { stack, bid, buy, reason, link }
frame.err:SetText(reason)
private.UpdateDisplay(reason)
end
--function runs when we're alerted to a possible change in one of the controls.
--we check if something is actually different, and if so, update.
--rather than changing ONLY one setting, changed function allow multiple settings to be modified in one round
--this solved issues with alt double click posting items before our onupdate could be called enough cycles to set all the changed values
function private.CheckUpdate()
if not frame.CurItem.link then return end
local buy = MoneyInputFrame_GetCopper(frame.buyout)
local bid = MoneyInputFrame_GetCopper(frame.minprice)
local stack = frame.stacks.size:GetNumber()
local number = frame.stacks.num:GetNumber()
local match = frame.options.matchmy:GetChecked()
local undercut = frame.options.undercut:GetChecked()
local remember = frame.options.remember:GetChecked()
local duration = frame.duration.time.selected
if frame.CurItem.buy ~= buy then --New Buyout manually entered
frame.CurItem.buy = buy
frame.CurItem.buyper = buy/(stack or 1)
frame.CurItem.manual = true
private.UpdateDisplay()
end
if frame.CurItem.bid ~= bid then --New Bid manually entered
frame.CurItem.bid = bid
frame.CurItem.bidper = bid/(stack or 1)
frame.CurItem.manual = true
private.UpdateDisplay()
end
if stack and stack > 0 and frame.CurItem.stack ~= stack then --new stack size entered
frame.CurItem.stack = stack
private.UpdatePricing()
end
if number and number > 0 and frame.CurItem.number ~= number then --new number of stacks entered
frame.CurItem.number = number
private.UpdatePricing()
end
if frame.CurItem.match ~= match then
frame.CurItem.match = match
if match then --turn off other checkboxes
frame.CurItem.manual = false
frame.CurItem.undercut = nil
frame.options.undercut:SetChecked(false)
frame.CurItem.remember = nil
frame.options.remember:SetChecked(false)
end
private.UpdatePricing()
end
if frame.CurItem.undercut ~= undercut then
frame.CurItem.undercut = undercut
if undercut then --turn off other checkboxes
frame.CurItem.manual = false
frame.CurItem.match = nil
frame.options.matchmy:SetChecked(false)
frame.CurItem.remember = nil
frame.options.remember:SetChecked(false)
end
private.UpdatePricing()
end
if frame.CurItem.duration ~= duration then
frame.CurItem.duration = duration
private.UpdatePricing()
end
if frame.CurItem.remember ~= remember then
frame.CurItem.manual = true
frame.CurItem.remember = remember
if remember then
private.SaveConfig()
frame.CurItem.match = nil
frame.options.matchmy:SetChecked(false)
frame.CurItem.undercut = nil
frame.options.undercut:SetChecked(false)
else
private.RemoveConfig()
end
private.UpdatePricing()
end
if frame.CurItem.remember then
private.SaveConfig()
end
end
function private.IconClicked()
local objType, _, itemLink = GetCursorInfo()
local size
if CursorHasItem() and frame.CursorItem then
_, size = GetContainerItemInfo(frame.CursorItem.bag, frame.CursorItem.slot)
end
frame.CursorItem = nil
ClearCursor()
if objType ~= "item" then itemLink = nil end
private.LoadItemLink(itemLink, size)
end
function private.LoadItemLink(itemLink, size)
wipe(frame.CurItem)
if itemLink then
local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemTexture = GetItemInfo(itemLink)
if not itemName then return private.LoadItemLink() end
local sig = AucAdvanced.API.GetSigFromLink(itemLink)
if not sig then
aucPrint(itemLink.." cannot be posted: Not an item")
return private.LoadItemLink()
end
itemLink = AucAdvanced.SanitizeLink(itemLink)
frame.CurItem.link = itemLink
frame.CurItem.name = itemName
frame.icon.itemLink = itemLink
frame.icon:SetNormalTexture(itemTexture)
local _, total, unpostable, _, _, reason = AucAdvanced.Post.CountAvailableItems(sig)
local itemCount = total - unpostable
if itemCount < 1 then
if reason == "Damaged" then
aucPrint(itemLink.." is damaged: you may be able to post it after repairing it")
else
aucPrint(itemLink.." cannot be posted: "..(AucAdvanced.Post.ErrorText[reason] or "Unknown Reason"))
end
return private.LoadItemLink()
end
frame.CurItem.count = itemCount
private.SetIconCount(itemCount)
frame.name:SetText(itemName)
frame.name:SetTextColor(GetItemQualityColor(itemRarity))
else
frame.icon.itemLink = nil
frame.icon:SetNormalTexture(nil)
frame.icon.count:SetText("")
frame.name:SetText("Drop item onto slot")
frame.create:Disable()
end
frame.info:SetText("To auction an item, drag it from your bag.")
frame.fees:SetText("")
frame.err:SetText("-- No item selected --")
frame.stacks.equals:SetText("= 0")
private.ClearSetting()
private.LoadConfig()
if not frame.options.remember:GetChecked() then
local uBid, uBuy = private.GetMyPrice(itemLink)
if uBid and get("util.simpleauc.auto.match") then
frame.options.matchmy:SetChecked(true)
frame.options.undercut:SetChecked(false)
frame.CurItem.match = true
frame.CurItem.undercut = nil
elseif get("util.simpleauc.auto.undercut") then
frame.options.matchmy:SetChecked(false)
frame.options.undercut:SetChecked(true)
frame.CurItem.match = nil
frame.CurItem.undercut = true
end
end
if itemLink and size then
frame.stacks.size:SetNumber(size)
end
--private.UpdatePricing()
end
function private.DoTooltip()
if not frame.CurItem.link then return end
GameTooltip:SetOwner(frame.icon, "ANCHOR_NONE")
GameTooltip:SetHyperlink(frame.CurItem.link)
AucAdvanced.ShowItemLink(GameTooltip, frame.CurItem.link, frame.CurItem.count)
GameTooltip:ClearAllPoints()
GameTooltip:SetPoint("TOPLEFT", frame.icon, "TOPRIGHT", 10, 0)
end
function private.UndoTooltip()
GameTooltip:Hide()
end
function private.OnUpdate()
-- check for valuechanged on update, so that multiple controls changing at once will only yield one check
if frame.CurItem.valuechanged then
frame.CurItem.valuechanged = nil
private.CheckUpdate()
end
-- delayed call to UpdatePricing triggered by "scanstats" (note: UpdatePricing is unsafe from within "scanstats")
-- also avoids unnecessary processing while the frame is hidden
if private.delayedUpdatePricing then
private.delayedUpdatePricing = nil
private.UpdatePricing()
end
end
function private.LoadConfig()
if not frame.CurItem.link then return end
local id = private.SigFromLink(frame.CurItem.link)
local settingstring = get("util.simpleauc."..private.realmKey.."."..id)
if not settingstring then return end
local bid, buy, duration, number, stack = strsplit(":", settingstring)
bid = tonumber(bid)
buy = tonumber(buy)
duration = tonumber(duration)
number = tonumber(number)
stack = tonumber(stack)
MoneyInputFrame_ResetMoney(frame.minprice)
MoneyInputFrame_SetCopper(frame.minprice, bid)
MoneyInputFrame_ResetMoney(frame.buyout)
MoneyInputFrame_SetCopper(frame.buyout, buy)
frame.stacks.size:SetNumber(stack)
frame.stacks.num:SetNumber(number)
frame.options.undercut:SetChecked(false)
frame.options.matchmy:SetChecked(false)
frame.options.remember:SetChecked(true)
frame.duration.time.selected = duration
for i, j in pairs(frame.duration.time.intervals) do
if duration == j then
frame.duration.time[i]:SetChecked(true)
else
frame.duration.time[i]:SetChecked(false)
end
end
frame.CurItem.bid = bid
frame.CurItem.bidper = bid/stack
frame.CurItem.buy = buy
frame.CurItem.buyper = buy/stack
frame.CurItem.duration = duration
frame.CurItem.number = number
frame.CurItem.stack = stack
frame.CurItem.match = nil
frame.CurItem.undercut = nil
frame.CurItem.remember = true
frame.CurItem.manual = true
private.UpdatePricing()
end
function private.RemoveConfig()
if not frame.CurItem.link then return end
local id = private.SigFromLink(frame.CurItem.link)
set("util.simpleauc."..private.realmKey.."."..id, nil)
end
function private.SaveConfig()
if not frame.CurItem.link then return end
local id = private.SigFromLink(frame.CurItem.link)
local settingstring = strjoin(":",
tostring(frame.CurItem.bid),
tostring(frame.CurItem.buy),
tostring(frame.CurItem.duration),
tostring(frame.CurItem.number),
tostring(frame.CurItem.stack)
)
set("util.simpleauc."..private.realmKey.."."..id, settingstring)
end
function private.ClearSetting()
frame.CurItem.bid = nil
frame.CurItem.bidper = nil
frame.CurItem.buy = nil
frame.CurItem.buyper = nil
frame.CurItem.stack = nil
frame.CurItem.number = nil
frame.CurItem.match = nil
frame.CurItem.undercut = nil
frame.CurItem.remember = nil
frame.CurItem.manual = nil
frame.CurItem.duration = nil
MoneyInputFrame_ResetMoney(frame.minprice)
MoneyInputFrame_ResetMoney(frame.buyout)
frame.stacks.num:SetNumber(0)
frame.stacks.size:SetNumber(0)
local under, match, dur =
get("util.simpleauc.auto.undercut"),
get("util.simpleauc.auto.match"),
get("util.simpleauc.auto.duration")
if under then match = false end
frame.options.matchmy:SetChecked(match)
frame.options.undercut:SetChecked(under)
frame.options.remember:SetChecked(false)
frame.duration.time.selected = dur
frame.duration.time[1]:SetChecked(dur == 12)
frame.duration.time[2]:SetChecked(dur == 24)
frame.duration.time[3]:SetChecked(dur == 48)
private.UpdatePricing()
end
function private.PostAuction()
local link = frame.CurItem.link
if not link then
aucPrint("Posting Failed: No Item Selected")
return
end
local sig = private.SigFromLink(link)
local number = frame.CurItem.number
local stack = frame.CurItem.stack
local bid = frame.CurItem.bid
local buy = frame.CurItem.buy
local duration = frame.CurItem.duration or 48
local success, reason = AucAdvanced.Post.PostAuctionClick(sig, stack, bid, buy, duration, number)
if success then
aucPrint("Posting "..number.." stacks of "..stack.."x "..link.." at Bid:"..coins(bid)..", BO:"..coins(buy).." for "..duration.."h")
else
reason = AucAdvanced.Post.ErrorText[reason] or "Unknown Reason"
aucPrint("Posting Failed for "..link..": "..reason)
end
end
function private.Refresh(background)
local link = frame.CurItem.link
if not link then return end
local name, _, rarity, _, itemMinLevel, itemType, itemSubType, stack = GetItemInfo(link)
local itemTypeId, itemSubId
for catId, catName in pairs(AucAdvanced.Const.CLASSES) do
if catName == itemType then
itemTypeId = catId
for subId, subName in pairs(AucAdvanced.Const.SUBCLASSES[itemTypeId]) do
if subName == itemSubType then
itemSubId = subId
break
end
end
break
end
end
aucPrint(("Refreshing view of {{%s}}"):format(name))--Refreshing view of {{%s}}
if background and type(background) == 'boolean' then
AucAdvanced.Scan.StartPushedScan(name, itemMinLevel, itemMinLevel, nil, itemTypeId, itemSubId, nil, rarity)
else
AucAdvanced.Scan.PushScan()
AucAdvanced.Scan.StartScan(name, itemMinLevel, itemMinLevel, nil, itemTypeId, itemSubId, nil, rarity)
end
end
function private.CreateFrames()
if frame then return end
local SelectBox = LibStub:GetLibrary("SelectBox")
local ScrollSheet = LibStub:GetLibrary("ScrollSheet")
frame = CreateFrame("Frame", "AucAdvSimpFrame", AuctionFrame)
private.frame = frame
private.realmKey, private.realm = AucAdvanced.GetFaction()
local DiffFromModel = 0
local MatchString = ""
frame.list = {}
frame.cache = {}
frame.CurItem = {}
frame.detail = {0,0,0,"",""}
Stubby.RegisterFunctionHook("PickupContainerItem", 200, private.postPickupContainerItemHook)
frame.SetButtonTooltip = function(text)
if text and get("util.appraiser.buttontips") then
GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT")
GameTooltip:SetText(text)
end
end
frame:SetParent(AuctionFrame)
frame:SetPoint("TOPLEFT", AuctionFrame, "TOPLEFT")
frame:SetPoint("BOTTOMRIGHT", AuctionFrame, "BOTTOMRIGHT")
frame:SetScript("OnUpdate", private.OnUpdate)
frame.title = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
frame.title:SetPoint("TOP", frame, "TOP", 0, -20)
frame.title:SetText("Simple Auction - Simplified auction posting interface.")
frame.slot = frame:CreateTexture(nil, "BORDER")
frame.slot:SetPoint("TOPLEFT", frame, "TOPLEFT", 80, -45)
frame.slot:SetWidth(50)
frame.slot:SetHeight(50)
frame.slot:SetTexCoord(0.15, 0.85, 0.15, 0.85)
frame.slot:SetTexture("Interface\\Buttons\\UI-EmptySlot")
frame.name = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")
frame.name:SetPoint("TOPLEFT", frame.slot, "TOPRIGHT", 10, -2)
frame.name:SetJustifyV("TOP")
frame.name:SetText("Drop item onto slot")
frame.info = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.info:SetPoint("TOPLEFT", frame.name, "BOTTOMLEFT", 0, -3)
frame.info:SetJustifyV("TOP")
frame.info:SetTextColor(0.0,1,1)
frame.info:SetText("To auction an item, drag it from your bag.")
frame.err = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.err:SetPoint("TOPLEFT", frame.info, "BOTTOMLEFT", 0, 0)
frame.err:SetJustifyV("TOP")
frame.err:SetTextColor(1,0.2,0,1)
frame.err:SetText("-- No item selected --")
frame.icon = CreateFrame("Button", nil, frame)
frame.icon:SetPoint("TOPLEFT", frame.slot, "TOPLEFT", 3, -3)
frame.icon:SetWidth(42)
frame.icon:SetHeight(42)
frame.icon:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square.blp")
frame.icon:SetScript("OnClick", private.IconClicked)
frame.icon:SetScript("OnReceiveDrag", private.IconClicked)
frame.icon:SetScript("OnEnter", private.DoTooltip)
frame.icon:SetScript("OnLeave", private.UndoTooltip)
local numberFont = CreateFont("AucAdvSimpleNumberFontLarge")
numberFont:CopyFontObject(GameFontHighlight)
numberFont.font = numberFont:GetFont()
numberFont:SetFont(numberFont.font, 12, "OUTLINE")
numberFont:SetShadowColor(0,0,0)
numberFont:SetShadowOffset(3,-2)
frame.icon.count = frame.icon:CreateFontString(nil, "OVERLAY", "AucAdvSimpleNumberFontLarge")
frame.icon.count:SetPoint("BOTTOMLEFT", frame.icon, "BOTTOMLEFT", 3, 5)
frame.minprice = CreateFrame("Frame", "AucAdvSimpFrameStart", frame, "MoneyInputFrameTemplate")
frame.minprice.isMoneyFrame = true
frame.minprice:SetPoint("TOPLEFT", frame, "TOPLEFT", 20, -120)
MoneyInputFrame_SetOnValueChangedFunc(frame.minprice, function()
frame.CurItem.valuechanged = true
end)
frame.minprice.label = frame.minprice:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.minprice.label:SetPoint("BOTTOMLEFT", frame.minprice, "TOPLEFT", 0, 0)
frame.minprice.label:SetText("Starting price:")
AucAdvSimpFrameStartGold:SetWidth(50)
frame.buyout = CreateFrame("Frame", "AucAdvSimpFrameBuyout", frame, "MoneyInputFrameTemplate")
frame.buyout.isMoneyFrame = true
frame.buyout:SetPoint("TOPLEFT", frame.minprice, "BOTTOMLEFT", 0, -20)
MoneyInputFrame_SetOnValueChangedFunc(frame.buyout, function()
frame.CurItem.valuechanged = true
end)
frame.buyout.label = frame.buyout:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.buyout.label:SetPoint("BOTTOMLEFT", frame.buyout, "TOPLEFT", 0, 0)
frame.buyout.label:SetText("Buyout price:")
AucAdvSimpFrameBuyoutGold:SetWidth(50)
frame.duration = CreateFrame("Frame", "AucAdvSimpFrameDuration", frame)
frame.duration:SetPoint("TOPLEFT", frame.buyout, "BOTTOMLEFT", 0, -20)
frame.duration:SetWidth(140)
frame.duration:SetHeight(20)
frame.duration.label = frame.duration:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.duration.label:SetPoint("BOTTOMLEFT", frame.duration, "TOPLEFT", 0, 0)
frame.duration.label:SetText("Duration:");
frame.duration.time = {
intervals = {12, 24, 48},
selected = 48,
OnClick = function (obj, ...)
frame.CurItem.valuechanged = true
local self = frame.duration.time
for pos, dur in ipairs(self.intervals) do
if obj == self[pos] then
self.selected = dur
self[pos]:SetChecked(true)
else
self[pos]:SetChecked(false)
end
end
end,
}
local t = frame.duration.time
for pos, dur in ipairs(t.intervals) do
t[pos] = CreateFrame("CheckButton", "AucAdvSimpFrameDuration"..dur, frame.duration, "OptionsCheckButtonTemplate")
t[pos]:SetPoint("TOPLEFT", frame.duration, "TOPLEFT", (pos-1)*53,0)
t[pos]:SetHitRectInsets(-1, -25, -1, -1)
t[pos].label = t[pos]:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
t[pos].label:SetPoint("LEFT", t[pos], "RIGHT", 0, 0)
t[pos].label:SetText(dur.."h")
t[pos].dur = dur
t[pos]:SetScript("OnClick", t.OnClick)
if dur == t.selected then
t[pos]:SetChecked(true)
else
t[pos]:SetChecked(false)
end
end
frame.stacks = CreateFrame("Frame", "AucAdvSimpFrameStacks", frame)
frame.stacks:SetPoint("TOPLEFT", frame.duration, "BOTTOMLEFT", 0, -20)
frame.stacks:SetWidth(140)
frame.stacks:SetHeight(20)
frame.stacks.label = frame.duration:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.stacks.label:SetPoint("BOTTOMLEFT", frame.stacks, "TOPLEFT", 0, 0)
frame.stacks.label:SetText("Stacks: (number x size)");
frame.stacks.num = CreateFrame("EditBox", "AucAdvSimpFrameStackNum", frame.stacks, "InputBoxTemplate")
frame.stacks.num:SetPoint("TOPLEFT", frame.stacks, "TOPLEFT", 5, 0)
frame.stacks.num:SetAutoFocus(false)
frame.stacks.num:SetHeight(18)
frame.stacks.num:SetWidth(40)
frame.stacks.num:SetNumeric(true)
frame.stacks.num:SetScript("OnTextChanged", function() frame.CurItem.valuechanged = true end)
frame.stacks.mult = frame.duration:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.stacks.mult:SetPoint("BOTTOMLEFT", frame.stacks.num, "BOTTOMRIGHT", 5, 0)
frame.stacks.mult:SetText("x")
frame.stacks.size = CreateFrame("EditBox", "AucAdvSimpFrameStackSize", frame.stacks, "InputBoxTemplate")
frame.stacks.size:SetPoint("TOPLEFT", frame.stacks.num, "TOPRIGHT", 20, 0)
frame.stacks.size:SetAutoFocus(false)
frame.stacks.size:SetHeight(18)
frame.stacks.size:SetWidth(30)
frame.stacks.size:SetNumeric(true)
frame.stacks.size:SetScript("OnTextChanged", function() frame.CurItem.valuechanged = true end)
frame.stacks.equals = frame.duration:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.stacks.equals:SetPoint("BOTTOMLEFT", frame.stacks.size, "BOTTOMRIGHT", 5, 0)
frame.stacks.equals:SetText("= 0")
frame.fees = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
frame.fees:SetPoint("TOP", frame.stacks, "BOTTOM", 10, -2)
frame.fees:SetWidth(150)
frame.fees:SetJustifyV("TOP")
frame.fees:SetJustifyH("CENTER")
frame.fees:SetText("")
frame.fees:SetTextColor(0,1,1)
frame.options = CreateFrame("Frame", "AucAdvSimpFrameOptions", frame)
frame.options:SetPoint("TOPLEFT", frame.stacks, "BOTTOMLEFT", 0, -40)
frame.options:SetWidth(140)
frame.options:SetHeight(300)
frame.options.label = frame.options:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
frame.options.label:SetPoint("BOTTOMLEFT", frame.options, "TOPLEFT", 0, 0)
frame.options.label:SetText("Options:")
frame.create = CreateFrame("Button", "AucAdvSimpFrameCreate", frame, "OptionsButtonTemplate")
frame.create:SetPoint("BOTTOMRIGHT", AuctionFrameMoneyFrame, "TOPRIGHT", 0, 10)
frame.create:SetWidth(140)
frame.create:SetText("Create Auction")
frame.create:SetScript("OnClick", private.PostAuction)
frame.create:Disable()
frame.clear = CreateFrame("Button", "AucAdvSimpFrameRemember", frame, "OptionsButtonTemplate")
frame.clear:SetPoint("BOTTOMRIGHT", frame.create, "TOPRIGHT", 0, 5)
frame.clear:SetWidth(140)
frame.clear:SetText("Clear Setting")
frame.clear:SetScript("OnClick", function() private.ClearSetting() private.RemoveConfig() end)
MoneyInputFrame_SetPreviousFocus(frame.minprice, frame.stacks.size)
MoneyInputFrame_SetNextFocus(frame.minprice, AucAdvSimpFrameBuyoutGold)
MoneyInputFrame_SetPreviousFocus(frame.buyout, AucAdvSimpFrameStartCopper)
MoneyInputFrame_SetNextFocus(frame.buyout, frame.stacks.num)
private.SetPrevNext(frame.stacks.num, AucAdvSimpFrameBuyoutCopper, frame.stacks.size)
private.SetPrevNext(frame.stacks.size, frame.stacks.num, AucAdvSimpFrameStartGold)
function frame.options:AddOption(option, text)
local item = CreateFrame("CheckButton", "AucAdvSimpFrameOption_"..option, self, "OptionsCheckButtonTemplate")
if self.last then
item:SetPoint("TOPLEFT", self.last, "BOTTOMLEFT", 0,7)
else
item:SetPoint("TOPLEFT", self, "TOPLEFT", 0,0)
end
self.last = item
item:SetHitRectInsets(-1, -140, 3, 3)
item:SetScript("OnClick", function() frame.CurItem.valuechanged = true end)
item.label = item:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
item.label:SetPoint("LEFT", item, "RIGHT", 0, 0)
item.label:SetText(text)
self[option] = item
end
frame.options:AddOption("matchmy", "Match my current")
frame.options:AddOption("undercut", "Undercut competitors")
frame.options:AddOption("remember", "Remember fixed price")
function frame.ClickBagHook(_,_,self,button)
if not (frame:IsVisible() and get("util.simpleauc.clickhook")) then return end
local bag = self:GetParent():GetID()
local slot = self:GetID()
local link = GetContainerItemLink(bag, slot)
local _, size = GetContainerItemInfo(bag, slot)
if link then
if (button == "LeftButton") and (IsAltKeyDown()) then
private.LoadItemLink(link, size)
--see if double clicking to auto post is allowed
if (not get("util.simpleauc.clickhook.doubleclick")) then return end
if not private.clickdata then private.clickdata = {} end
local last = private.clickdata
local now = GetTime()
if last[1] == bag and last[2] == slot and now - last[3] < 0.5 then
-- Is a double click
aucPrint("Auto auctioning double-alt-clicked item")
if not frame.options.remember:GetChecked() then
frame.options.undercut:SetChecked(true)
end
private.CheckUpdate()
private.PostAuction()
end
last[1] = bag
last[2] = slot
last[3] = now
end
end
end
frame.tab = CreateFrame("Button", "AuctionFrameTabUtilSimple", AuctionFrame, "AuctionTabTemplate")
frame.tab:SetText(TAB_NAME)
frame.tab:Show()
PanelTemplates_DeselectTab(frame.tab)
if get("util.simpleauc.displayauctiontab") then
AucAdvanced.AddTab(frame.tab, frame)
end
function frame.tab.OnClick(self, _, index)
if not index then index = self:GetID() end
local tab = _G["AuctionFrameTab"..index]
if (tab and tab:GetName() == "AuctionFrameTabUtilSimple") then
AuctionFrameTopLeft:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Browse-TopLeft")
AuctionFrameTop:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Browse-Top")
AuctionFrameTopRight:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Browse-TopRight")
AuctionFrameBotLeft:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Browse-BotLeft")
AuctionFrameBot:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Browse-Bot")
AuctionFrameBotRight:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Browse-BotRight")
AuctionFrameMoneyFrame:Show()
frame:Show()
AucAdvanced.Scan.LoadScanData()
private.UpdateDisplay() -- update for any bag changes while frame was hidden
else
AuctionFrameMoneyFrame:Show()
frame:Hide()
end
end
frame.imageview = CreateFrame("Frame", nil, frame)
frame.imageview:SetBackdrop({
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
tile = true, tileSize = 32, edgeSize = 16,
insets = { left = 5, right = 5, top = 5, bottom = 5 }
})
frame.imageview:SetBackdropColor(0, 0, 0, 1)
frame.imageview:SetPoint("TOPLEFT", frame, "TOPLEFT", 185, -100)
frame.imageview:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -5, 0)
frame.imageview:SetPoint("BOTTOM", frame, "BOTTOM", 0, 35)
--records the column width changes
--store width by header name, that way if column reorginizing is added we apply size to proper column
function private.onResize(self, column, width)
if not width then
set("util.simpleauc.columnwidth."..self.labels[column]:GetText(), "default") --reset column if no width is passed. We use CTRL+rightclick to reset column
self.labels[column].button:SetWidth(get("util.simpleauc.columnwidth."..self.labels[column]:GetText()))
else
set("util.simpleauc.columnwidth."..self.labels[column]:GetText(), width)
end
end
function private.onClick(button, row, index)
end
private.buyselection = {}
function private.onSelect()
if frame.imageview.sheet.prevselected ~= frame.imageview.sheet.selected then
frame.imageview.sheet.prevselected = frame.imageview.sheet.selected
local selected = frame.imageview.sheet:GetSelection()
if (not selected) or (not selected[10]) then
private.buyselection = {}
frame.buy:Disable()
frame.bid:Disable()
else
private.buyselection.link = selected[10]
private.buyselection.seller = selected[1]
private.buyselection.stack = selected[3]
private.buyselection.minbid = selected[7]
private.buyselection.curbid = selected[8]
private.buyselection.buyout = selected[9]
-- Make sure that it's not one of our auctions
if (not AucAdvancedConfig["users."..private.realm.."."..private.buyselection.seller]) then
if private.buyselection.buyout and (private.buyselection.buyout > 0) then
frame.buy:Enable()
else
frame.buy:Disable()
end
if private.buyselection.minbid then
frame.bid:Enable()
else
frame.bid:Disable()
end
else
frame.buy:Disable()
frame.bid:Disable()
end
end
end
end
function private.BuyAuction()
AucAdvanced.Buy.QueueBuy(private.buyselection.link, private.buyselection.seller, private.buyselection.stack, private.buyselection.minbid, private.buyselection.buyout, private.buyselection.buyout)
frame.imageview.sheet.selected = nil
private.onSelect()
end
function private.BidAuction()
local bid = private.buyselection.minbid
if private.buyselection.curbid and private.buyselection.curbid > 0 then
bid = math.ceil(private.buyselection.curbid*1.05)
end
AucAdvanced.Buy.QueueBuy(private.buyselection.link, private.buyselection.seller, private.buyselection.stack, private.buyselection.minbid, private.buyselection.buyout, bid)
frame.imageview.sheet.selected = nil
private.onSelect()
end
frame.imageview.sheet = ScrollSheet:Create(frame.imageview, {
{ "Seller", "TEXT", get("util.simpleauc.columnwidth.Seller")}, --89
{ "Left", "INT", get("util.simpleauc.columnwidth.Left")}, --32
{ "Stk", "INT", get("util.simpleauc.columnwidth.Stk")}, --32
{ "Min/ea", "COIN", get("util.simpleauc.columnwidth.Min/ea"), { DESCENDING=true } }, --65
{ "Cur/ea", "COIN", get("util.simpleauc.columnwidth.Cur/ea"), { DESCENDING=true } }, --65
{ "Buy/ea", "COIN", get("util.simpleauc.columnwidth.Buy/ea"), { DESCENDING=true, DEFAULT=true } }, --65
{ "MinBid", "COIN", get("util.simpleauc.columnwidth.MinBid"), { DESCENDING=true } }, --76
{ "CurBid", "COIN", get("util.simpleauc.columnwidth.CurBid"), { DESCENDING=true } }, --76
{ "Buyout", "COIN", get("util.simpleauc.columnwidth.Buyout"), { DESCENDING=true } }, --80
{ "", "TEXT", get("util.simpleauc.columnwidth.BLANK")}, --Hidden column to carry the link --0
}, nil, nil, private.onClick, private.onResize, private.onSelect)
frame.imageview.sheet:EnableSelect(true)
frame.config = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
frame.config:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -25, -13)
frame.config:SetText("Configure")
frame.config:SetScript("OnClick", function()
AucAdvanced.Settings.Show()
private.gui:ActivateTab(private.guiId)
end)
frame.scanbutton = CreateFrame("Button", "AucAdvScanButton", AuctionFrameBrowse, "OptionsButtonTemplate")
frame.scanbutton:SetText("Scan")
frame.scanbutton:SetParent("AuctionFrameBrowse")
frame.scanbutton:SetPoint("LEFT", "AuctionFrameMoneyFrame", "RIGHT", 5,0)
frame.scanbutton:SetScript("OnClick", function()
if not AucAdvanced.Scan.IsScanning() then
AucAdvanced.Scan.StartScan("", "", "", AuctionFrameBrowse.selectedInvtypeIndex, AuctionFrameBrowse.selectedClassIndex, AuctionFrameBrowse.selectedSubclassIndex, nil, nil)
end
end)
frame.refresh = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
frame.refresh:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -167,15)
frame.refresh:SetText("Refresh")
frame.refresh:SetWidth(80)
frame.refresh:SetScript("OnClick", private.Refresh)
frame.bid = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
frame.bid:SetPoint("TOPLEFT", frame.refresh, "TOPRIGHT", 1, 0)
frame.bid:SetWidth(80)
frame.bid:SetText("Bid")--Bid
frame.bid:SetScript("OnClick", private.BidAuction)
frame.bid:Disable()
frame.buy = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
frame.buy:SetPoint("TOPLEFT", frame.bid, "TOPRIGHT", 1, 0)
frame.buy:SetWidth(80)
frame.buy:SetText("Buy")--Buy
frame.buy:SetScript("OnClick", private.BuyAuction)
frame.buy:Disable()
if get("util.simpleauc.scanbutton") then
frame.scanbutton:Show()
else
frame.scanbutton:Hide()
end
Stubby.RegisterFunctionHook("ContainerFrameItemButton_OnModifiedClick", -300, frame.ClickBagHook)
hooksecurefunc("AuctionFrameTab_OnClick", frame.tab.OnClick)
hooksecurefunc("SetItemRef", function (shortlink, hyperlink, mousebutton, chatframe)
if mousebutton == "LeftButton" and IsAltKeyDown() and frame:IsVisible() and get("util.simpleauc.clickhook") then
local link = hyperlink or shortlink
if link then
private.LoadItemLink(link)
end
end
end)
function frame:OnEvent(event, ...)
if event == "BAG_UPDATE" then
if frame:IsVisible() then
private.UpdateDisplay()
end
end
end
frame:SetScript("OnEvent", frame.OnEvent)
frame:RegisterEvent("BAG_UPDATE")
end
AucAdvanced.RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Auc-Util-SimpleAuction/SimpFrame.lua $", "$Rev: 4933 $")