279 lines
9.3 KiB
Lua
279 lines
9.3 KiB
Lua
local processScanResults
|
|
local processedData
|
|
|
|
function AuctionatorBuySearchButton_OnClick()
|
|
|
|
Auctionator_Scan_Start(Auctionator_Scan_CreateQuery{
|
|
name = AuctionatorBuySearchBox:GetText(),
|
|
exactMatch = true,
|
|
onComplete = function(data)
|
|
processScanResults(data)
|
|
Auctionator_Buy_ScrollbarUpdate()
|
|
end
|
|
})
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function AuctionatorBuyEntry_OnClick()
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function processScanResults(rawData)
|
|
|
|
processedData = {}
|
|
|
|
----- Condense the scan rawData into a table that has only a single entry per stacksize/price combo
|
|
|
|
local condData = {}
|
|
|
|
for _,rawDatum in ipairs(rawData) do
|
|
|
|
local key = "_"..rawDatum.stackSize.."_"..rawDatum.buyoutPrice
|
|
|
|
if condData[key] then
|
|
condData[key].count = condData[key].count + 1
|
|
else
|
|
condData[key] = {
|
|
stackSize = rawDatum.stackSize,
|
|
buyoutPrice = rawDatum.buyoutPrice,
|
|
itemPrice = rawDatum.buyoutPrice / rawDatum.stackSize,
|
|
count = 1,
|
|
numYours = rawDatum.owner == UnitName("player") and 1 or 0
|
|
}
|
|
end
|
|
end
|
|
|
|
----- create a table of these entries sorted by itemPrice
|
|
|
|
local n = 1
|
|
for _,condDatum in pairs(condData) do
|
|
processedData[n] = condDatum
|
|
n = n + 1
|
|
end
|
|
|
|
table.sort(processedData, function(a,b) return a.itemPrice < b.itemPrice end)
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function Auctionator_Buy_ScrollbarUpdate()
|
|
|
|
local line -- 1 through 15 of our window to scroll
|
|
local dataOffset -- an index into our data calculated from the scroll offset
|
|
|
|
local numrows
|
|
if not processedData then
|
|
numrows = 0
|
|
else
|
|
numrows = getn(processedData)
|
|
end
|
|
|
|
FauxScrollFrame_Update(AuctionatorBuyScrollFrame, numrows, 12, 16);
|
|
|
|
for line = 1,12 do
|
|
|
|
dataOffset = line + FauxScrollFrame_GetOffset(AuctionatorBuyScrollFrame)
|
|
local lineEntry = getglobal("AuctionatorBuyEntry"..line)
|
|
|
|
if numrows <= 12 then
|
|
lineEntry:SetWidth(603)
|
|
else
|
|
lineEntry:SetWidth(585)
|
|
end
|
|
|
|
lineEntry:SetID(dataOffset)
|
|
|
|
if dataOffset <= numrows and processedData[dataOffset] then
|
|
|
|
local auctionatorEntry = processedData[dataOffset]
|
|
|
|
local lineEntry_avail = getglobal("AuctionatorBuyEntry"..line.."_Availability")
|
|
local lineEntry_comm = getglobal("AuctionatorBuyEntry"..line.."_Comment")
|
|
local lineEntry_stack = getglobal("AuctionatorBuyEntry"..line.."_StackPrice")
|
|
|
|
if selectedAuctionatorEntry and auctionatorEntry.itemPrice == selectedAuctionatorEntry.itemPrice and auctionatorEntry.stackSize == selectedAuctionatorEntry.stackSize then
|
|
lineEntry:LockHighlight()
|
|
else
|
|
lineEntry:UnlockHighlight()
|
|
end
|
|
|
|
if auctionatorEntry.numYours == 0 then
|
|
lineEntry_comm:SetText("")
|
|
elseif
|
|
auctionatorEntry.numYours == auctionatorEntry.count then
|
|
lineEntry_comm:SetText("yours")
|
|
else
|
|
lineEntry_comm:SetText("yours: "..auctionatorEntry.numYours)
|
|
end
|
|
|
|
local tx = string.format("%i %s of %i", auctionatorEntry.count, Auctionator_PluralizeIf("stack", auctionatorEntry.count), auctionatorEntry.stackSize)
|
|
|
|
MoneyFrame_Update("AuctionatorBuyEntry"..line.."_PerItem_Price", Auctionator_Round(auctionatorEntry.buyoutPrice/auctionatorEntry.stackSize))
|
|
|
|
lineEntry_avail:SetText(tx)
|
|
lineEntry_stack:SetText(Auctionator_PriceToString(auctionatorEntry.buyoutPrice))
|
|
|
|
lineEntry:Show()
|
|
else
|
|
lineEntry:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
-- These functions were meant to be used for a search sorted by buyout price but that actually seems impossible to implement nicely with the vanilla interface
|
|
|
|
-- function Auctionator_AuctionFrameBrowse_Update()
|
|
-- local numBatchAuctions = getn(searchResults)
|
|
-- local totalAuctions = numBatchAuctions
|
|
-- local button, buttonName, iconTexture, itemName, color, itemCount, moneyFrame, buyoutMoneyFrame, buyoutText, buttonHighlight
|
|
-- local offset = FauxScrollFrame_GetOffset(BrowseScrollFrame)
|
|
-- local index
|
|
-- local isLastSlotEmpty
|
|
-- local name, texture, count, quality, canUse, minBid, minIncrement, buyoutPrice, duration, bidAmount, highBidder
|
|
-- BrowseBidButton:Disable()
|
|
-- BrowseBuyoutButton:Disable()
|
|
-- -- Update sort arrows
|
|
-- SortButton_UpdateArrow(BrowseQualitySort, "list", "quality")
|
|
-- SortButton_UpdateArrow(BrowseLevelSort, "list", "level")
|
|
-- SortButton_UpdateArrow(BrowseDurationSort, "list", "duration")
|
|
-- SortButton_UpdateArrow(BrowseHighBidderSort, "list", "status")
|
|
-- SortButton_UpdateArrow(BrowseCurrentBidSort, "list", "bid")
|
|
|
|
-- -- Show the no results text if no items found
|
|
-- if numBatchAuctions == 0 then
|
|
-- BrowseNoResultsText:Show()
|
|
-- else
|
|
-- BrowseNoResultsText:Hide()
|
|
-- end
|
|
|
|
-- for i=1, NUM_BROWSE_TO_DISPLAY do
|
|
-- index = offset + i
|
|
-- button = getglobal("BrowseButton"..i)
|
|
-- -- Show or hide auction buttons
|
|
-- if index > numBatchAuctions then
|
|
-- button:Hide()
|
|
-- -- If the last button is empty then set isLastSlotEmpty var
|
|
-- if i == NUM_BROWSE_TO_DISPLAY then
|
|
-- isLastSlotEmpty = 1
|
|
-- end
|
|
-- else
|
|
-- button:Show()
|
|
|
|
-- buttonName = "BrowseButton"..i
|
|
-- local name, texture, count, quality, canUse, level, minBid, minIncrement, buyoutPrice, bidAmount, highBidder = GetAuctionItemInfo("list", index);
|
|
-- -- duration = GetAuctionItemTimeLeft("list", offset + i)
|
|
-- -- Resize button if there isn't a scrollbar
|
|
-- buttonHighlight = getglobal("BrowseButton"..i.."Highlight")
|
|
-- if numBatchAuctions < NUM_BROWSE_TO_DISPLAY then
|
|
-- button:SetWidth(557)
|
|
-- buttonHighlight:SetWidth(523)
|
|
-- BrowseCurrentBidSort:SetWidth(173)
|
|
-- else
|
|
-- button:SetWidth(532)
|
|
-- buttonHighlight:SetWidth(502)
|
|
-- BrowseCurrentBidSort:SetWidth(157)
|
|
-- end
|
|
-- -- Set name and quality color
|
|
-- color = ITEM_QUALITY_COLORS[searchResults[i].quality]
|
|
-- itemName = getglobal(buttonName.."Name")
|
|
-- itemName:SetText(searchResults[i].name)
|
|
-- itemName:SetVertexColor(color.r, color.g, color.b)
|
|
-- -- Set level
|
|
-- if searchResults[i].level > UnitLevel("player") then
|
|
-- getglobal(buttonName.."Level"):SetText(RED_FONT_COLOR_CODE..level..FONT_COLOR_CODE_CLOSE)
|
|
-- else
|
|
-- getglobal(buttonName.."Level"):SetText(searchResults[i].level)
|
|
-- end
|
|
-- -- Set high bidder
|
|
-- getglobal(buttonName.."HighBidder"):SetText(searchResults[i].highBidder)
|
|
-- -- Set closing time
|
|
-- getglobal(buttonName.."ClosingTimeText"):SetText(AuctionFrame_GetTimeLeftText(searchResults[i].duration))
|
|
-- getglobal(buttonName.."ClosingTime").tooltip = AuctionFrame_GetTimeLeftTooltipText(searchResults[i].duration)
|
|
-- -- Set item texture, count, and usability
|
|
-- iconTexture = getglobal(buttonName.."ItemIconTexture")
|
|
-- iconTexture:SetTexture(searchResults[i].texture)
|
|
-- if not searchResults[i].canUse then
|
|
-- iconTexture:SetVertexColor(1.0, 0.1, 0.1)
|
|
-- else
|
|
-- iconTexture:SetVertexColor(1.0, 1.0, 1.0)
|
|
-- end
|
|
-- itemCount = getglobal(buttonName.."ItemCount")
|
|
-- if searchResults[i].stackSize > 1 then
|
|
-- itemCount:SetText(searchResults[i].stackSize)
|
|
-- itemCount:Show()
|
|
-- else
|
|
-- itemCount:Hide()
|
|
-- end
|
|
-- -- Set high bid
|
|
-- moneyFrame = getglobal(buttonName.."MoneyFrame")
|
|
-- buyoutMoneyFrame = getglobal(buttonName.."BuyoutMoneyFrame")
|
|
-- buyoutText = getglobal(buttonName.."BuyoutText")
|
|
-- -- If not bidAmount set the bid amount to the min bid
|
|
-- if searchResults[i].bidAmount == 0 then
|
|
-- MoneyFrame_Update(moneyFrame:GetName(), searchResults[i].minBid)
|
|
-- else
|
|
-- MoneyFrame_Update(moneyFrame:GetName(), searchResults[i].bidAmount)
|
|
-- end
|
|
|
|
-- if searchResults[i].buyoutPrice > 0 then
|
|
-- moneyFrame:SetPoint("RIGHT", buttonName, "RIGHT", 10, 10)
|
|
-- MoneyFrame_Update(buyoutMoneyFrame:GetName(), searchResults[i].buyoutPrice)
|
|
-- buyoutMoneyFrame:Show()
|
|
-- buyoutText:Show()
|
|
-- else
|
|
-- moneyFrame:SetPoint("RIGHT", buttonName, "RIGHT", 10, 3)
|
|
-- buyoutMoneyFrame:Hide()
|
|
-- buyoutText:Hide()
|
|
-- end
|
|
-- -- Set high bidder
|
|
-- local highBidder = searchResults[i].highBidder
|
|
-- if not highBidder then
|
|
-- highBidder = RED_FONT_COLOR_CODE..NO_BIDS..FONT_COLOR_CODE_CLOSE
|
|
-- end
|
|
-- getglobal(buttonName.."HighBidder"):SetText(highBidder)
|
|
-- -- Set highlight
|
|
-- if GetSelectedAuctionItem("list") and (offset + i) == GetSelectedAuctionItem("list") then
|
|
-- button:LockHighlight()
|
|
-- if highBidder ~= UnitName("player") then
|
|
-- BrowseBidButton:Enable()
|
|
-- end
|
|
|
|
-- if searchResults[i].buyoutPrice > 0 and searchResults[i].buyoutPrice >= searchResults[i].minBid then
|
|
-- BrowseBuyoutButton:Enable()
|
|
-- AuctionFrame.buyoutPrice = searchResults[i].buyoutPrice
|
|
-- else
|
|
-- AuctionFrame.buyoutPrice = nil
|
|
-- end
|
|
-- -- Set bid
|
|
-- local bidAmount = searchResults[i].bidAmount
|
|
-- if bidAmount > 0 then
|
|
-- bidAmount = bidAmount + searchResults[i].minIncrement
|
|
-- MoneyInputFrame_SetCopper(BrowseBidPrice, bidAmount)
|
|
-- else
|
|
-- MoneyInputFrame_SetCopper(BrowseBidPrice, searchResults[i].minBid)
|
|
-- end
|
|
|
|
-- else
|
|
-- button:UnlockHighlight()
|
|
-- end
|
|
-- end
|
|
-- end
|
|
|
|
-- BrowsePrevPageButton:Hide()
|
|
-- BrowseNextPageButton:Hide()
|
|
-- BrowseScanCountText:Hide()
|
|
-- FauxScrollFrame_Update(BrowseScrollFrame, numBatchAuctions, NUM_BROWSE_TO_DISPLAY, AUCTIONS_BUTTON_HEIGHT)
|
|
-- end
|
|
|
|
-- eventFrame:RegisterEvent("AUCTION_ITEM_LIST_UPDATE")
|
|
-- eventFrame:SetScript("OnEvent", function(event)
|
|
-- if state == STATE_POSTQUERY then
|
|
-- processQueryResults()
|
|
-- end
|
|
-- end) |