fixed sorting

This commit is contained in:
Manuel Simon Hirsig
2016-02-02 00:18:48 +01:00
parent e59a6c76c0
commit 51c6b531ba
+49 -55
View File
@@ -167,21 +167,13 @@ local methods = {
GetRecordPercent = function(self, record)
if not record then return end
-- cache the market value on the record
-- record.market_value = record.market_value or self.GetMarketValue(record.item_key) or 0
-- if record.marketValue > 0 then
-- if record.itemBuyout > 0 then
-- return Aux.round(100 * record.itemBuyout / record.marketValue, 1)
-- end
-- return nil, Aux.round(100 * record.itemDisplayedBid / record.marketValue, 1)
-- end
local market_value = Aux.history.market_value(record.item_key)
if market_value and market_value > 0 then
-- cache the market value on the record
record.market_value = record.market_value or Aux.history.market_value(record.item_key) or 0
if record.market_value > 0 then
if record.unit_buyout_price > 0 then
return Aux.round(100 * record.unit_buyout_price / market_value, 1)
return Aux.round(100 * record.unit_buyout_price / record.market_value, 1)
end
return nil, Aux.round(100 * record.unit_bid_price / market_value, 1)
return nil, Aux.round(100 * record.unit_bid_price / record.market_value, 1)
end
end,
@@ -268,28 +260,30 @@ local methods = {
aVal = a.record
bVal = b.record
end
if aVal.isFake then
return true
elseif bVal.isFake then
return false
end
if sortKey == "percent" then
if sortKey == 'percent' then
aVal = self:GetRecordPercent(aVal)
bVal = self:GetRecordPercent(bVal)
elseif sortKey == "numAuctions" then
elseif sortKey == 'numAuctions' then
aVal = a.totalAuctions
bVal = b.totalAuctions
elseif sortKey == "itemDisplayedBid" or sortKey == "displayedBid" then
aVal = self.GetRowPrices(aVal, sortKey == "itemDisplayedBid")
bVal = self.GetRowPrices(bVal, sortKey == "itemDisplayedBid")
elseif sortKey == "itemBuyout" or sortKey == "buyout" then
aVal = ({ self.GetRowPrices(aVal, sortKey == "itemBuyout") })[2]
bVal = ({ self.GetRowPrices(bVal, sortKey == "itemBuyout") })[2]
elseif sortKey == 'unit_bid_price' or sortKey == 'bid_price' then
aVal = self.GetRowPrices(aVal, sortKey == 'unit_bid_price')
bVal = self.GetRowPrices(bVal, sortKey == 'unit_bid_price')
elseif sortKey == 'buyout_price' or sortKey == 'buyout' then
aVal = ({ self.GetRowPrices(aVal, sortKey == 'buyout_price') })[2]
bVal = ({ self.GetRowPrices(bVal, sortKey == 'buyout_price') })[2]
else
aVal = aVal[sortKey]
bVal = bVal[sortKey]
end
if sortKey == 'buyout' or sortKey == 'itemBuyout' then
if sortKey == 'buyout' or sortKey == 'buyout_price' then
-- for buyout, put bid-only auctions at the bottom
if not aVal or aVal == 0 then
aVal = (self.sortInfo.descending and -1 or 1) * Aux.huge
@@ -297,29 +291,29 @@ local methods = {
if not bVal or bVal == 0 then
bVal = (self.sortInfo.descending and -1 or 1) * Aux.huge
end
elseif sortKey == "percent" then
elseif sortKey == 'percent' then
-- for percent, put bid-only auctions at the bottom
aVal = aVal or ((self.sortInfo.descending and -1 or 1) * Aux.huge)
bVal = bVal or ((self.sortInfo.descending and -1 or 1) * Aux.huge)
end
if type(aVal) == "string" or type(bVal) == "string" then
aVal = aVal or ""
bVal = bVal or ""
if type(aVal) == 'string' or type(bVal) == 'string' then
aVal = aVal or ''
bVal = bVal or ''
else
aVal = tonumber(aVal) or 0
bVal = tonumber(bVal) or 0
end
if aVal == bVal then
if sortKey == "percent" then
if sortKey == 'percent' then
-- sort by buyout
sortKey = aux_price_per_unit and "itemBuyout" or "buyout"
sortKey = aux_price_per_unit and 'buyout_price' or 'buyout'
local result = SortHelperFunc(a, b, sortKey)
if result ~= nil then
return result
end
elseif sortKey == "buyout" or sortKey == "itemBuyout" then
elseif sortKey == 'buyout' or sortKey == 'buyout_price' then
-- sort by bid
sortKey = aux_price_per_unit and "itemDisplayedBid" or "displayedBid"
sortKey = aux_price_per_unit and 'unit_bid_price' or 'bid_price'
local result = SortHelperFunc(a, b, sortKey)
if result ~= nil then
return result
@@ -329,7 +323,7 @@ local methods = {
return
else
-- sort by percent
return SortHelperFunc(a, b, "percent")
return SortHelperFunc(a, b, 'percent')
end
-- sort arbitrarily, but make sure the sort is stable
return tostring(a) < tostring(b)
@@ -341,10 +335,10 @@ local methods = {
end
end
-- sort the row info
-- for i, info in ipairs(self.rowInfo) do
-- sort(info.children, SortHelperFunc)
-- end
-- sort(self.rowInfo, SortHelperFunc)
for i, info in ipairs(self.rowInfo) do
sort(info.children, SortHelperFunc)
end
sort(self.rowInfo, SortHelperFunc)
self.sortInfo.isSorted = true
end
@@ -388,7 +382,7 @@ local methods = {
row.cells[1].icon:SetAlpha(1)
row.cells[1]:GetFontString():SetAlpha(1)
end
row.cells[1]:SetText(gsub(record.hyperlink, "[%[%]]", ""))
row.cells[1]:SetText(gsub(record.hyperlink, '[%[%]]', ''))
row.cells[2]:SetText(record.level)
if record.isFake then
row.cells[3]:SetText(0)
@@ -405,11 +399,11 @@ local methods = {
end
row.cells[3]:SetText(numAuctionsText)
row.cells[4]:SetText(record.aux_quantity)
row.cells[5]:SetText(TIME_LEFT_STRINGS[record.duration or 0] or "---")
row.cells[6]:SetText(Aux.is_player(record.owner) and ("|cffffff00"..record.owner.."|r") or record.owner)
row.cells[5]:SetText(TIME_LEFT_STRINGS[record.duration or 0] or '---')
row.cells[6]:SetText(Aux.is_player(record.owner) and ('|cffffff00'..record.owner..'|r') or record.owner)
local bid, buyout, colorBid, colorBuyout = self.GetRowPrices(record, aux_price_per_unit)
row.cells[7]:SetText(bid > 0 and Aux.money.to_string(bid, true, false, colorBid) or "---")
row.cells[8]:SetText(buyout > 0 and Aux.money.to_string(buyout, true, false, colorBuyout) or "---")
row.cells[7]:SetText(bid > 0 and Aux.money.to_string(bid, true, false, colorBid) or '---')
row.cells[8]:SetText(buyout > 0 and Aux.money.to_string(buyout, true, false, colorBuyout) or '---')
local pct, bidPct = self:GetRecordPercent(record)
local pctColor = '|cffffffff'
if pct then
@@ -528,9 +522,9 @@ local methods = {
SetSort = function(rt, sortIndex)
local sortIndexLookup
if aux_price_per_unit then
sortIndexLookup = {"name", "itemLevel", "numAuctions", "stackSize", "timeLeft", "seller", "itemDisplayedBid", "itemBuyout", "percent"}
sortIndexLookup = {'name', 'level', 'numAuctions', 'aux_quantity', 'duration', 'owner', 'unit_bid_price', 'buyout_price', 'percent'}
else
sortIndexLookup = {"name", "itemLevel", "numAuctions", "stackSize", "timeLeft", "seller", "displayedBid", "buyout", "percent"}
sortIndexLookup = {'name', 'level', 'numAuctions', 'aux_quantity', 'duration', 'owner', 'bid_price', 'buyout', 'percent'}
end
if sortIndex then
if sortIndex == rt.sortInfo.index then return end
@@ -593,18 +587,18 @@ local methods = {
function public.CreateAuctionResultsTable(parent)
local colInfo = {
{name="Item", width=0.35},
{name="Lvl", width=0.035, align="CENTER"},
{name="Auctions", width=0.06, align="CENTER"},
{name="Stack Size", width=0.055, align="CENTER"},
{name='Time Left', width=0.04, align="CENTER"},
{name='Seller', width=0.13, align="CENTER"},
{name={'Auction Bid\n(per item)', 'Auction Bid\n(per stack)'}, width=0.125, align="RIGHT", isPrice=true},
{name={'Auction Buyout\n(per item)', 'Auction Buyout\n(per stack)'}, width=0.125, align="RIGHT", isPrice=true},
{name='% Market Value', width=0.08, align="CENTER"},
{name='Item', width=0.35},
{name='Lvl', width=0.035, align='CENTER'},
{name='Auctions', width=0.06, align='CENTER'},
{name='Stack Size', width=0.055, align='CENTER'},
{name='Time Left', width=0.04, align='CENTER'},
{name='Seller', width=0.13, align='CENTER'},
{name={'Auction Bid\n(per item)', 'Auction Bid\n(per stack)'}, width=0.125, align='RIGHT', isPrice=true},
{name={'Auction Buyout\n(per item)', 'Auction Buyout\n(per stack)'}, width=0.125, align='RIGHT', isPrice=true},
{name='% Market Value', width=0.08, align='CENTER'},
}
local rtName = 'TSMAuctionResultsTable'..RT_COUNT
local rtName = 'AuxAuctionResultsTable'..RT_COUNT
RT_COUNT = RT_COUNT + 1
local rt = CreateFrame('Frame', rtName, parent)
-- local numRows = TSM.db.profile.auctionResultRows
@@ -798,8 +792,8 @@ function public.CreateAuctionResultsTable(parent)
end
rt:SetAllPoints()
this = contentFrame -- TODO hack
arg1 = contentFrame:GetWidth() -- TODO hack
rt:OnContentSizeChanged() -- TODO hack
this = contentFrame -- TODO change, maybe use for resize without scrollbar?
arg1 = contentFrame:GetWidth()
rt:OnContentSizeChanged()
return rt
end