From 1b9da9c1adfece55e225778625db865ced526cb0 Mon Sep 17 00:00:00 2001 From: Manuel Simon Hirsig Date: Tue, 20 Oct 2015 02:06:07 +0200 Subject: [PATCH] implemented buy grouping --- .idea/workspace.xml | 119 +++++++++++++++++++++++++------------------- buy.lua | 88 +++++++++++++------------------- core.lua | 3 -- util.lua | 13 +++-- 4 files changed, 110 insertions(+), 113 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index bf96b9f..b6afce0 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,10 +3,8 @@ - - - + @@ -72,8 +70,8 @@ - - + + @@ -82,8 +80,18 @@ - - + + + + + + + + + + + + @@ -102,8 +110,8 @@ - - + + @@ -119,10 +127,10 @@ - + - + @@ -177,10 +185,11 @@ @@ -418,14 +427,6 @@ - - - - - - - - @@ -434,22 +435,6 @@ - - - - - - - - - - - - - - - - @@ -458,14 +443,6 @@ - - - - - - - - @@ -474,18 +451,58 @@ - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/buy.lua b/buy.lua index 81ef1e1..c033b69 100644 --- a/buy.lua +++ b/buy.lua @@ -33,17 +33,17 @@ Aux.buy.modes = { { title = '#', width = 23, - comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end, + comparator = function(group1, group2) return Aux.util.compare(group1[1].stack_size, group2[1].stack_size, Aux.util.LT) end, cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), - cell_setter = function(cell, datum) - cell.text:SetText(datum.stack_size) - alpha_setter(cell, datum) + cell_setter = function(cell, group) + cell.text:SetText(group[1].stack_size) + -- alpha_setter(cell, group) end, }, { title = 'Auction Item', - width = 157, - comparator = function(row1, row2) return Aux.util.compare(row1.tooltip[1][1].text, row2.tooltip[1][1].text, Aux.util.GT) end, + width = 214, + comparator = function(group1, group2) return Aux.util.compare(group1[1].name, group2[1].name, Aux.util.GT) end, cell_initializer = function(cell) local icon = CreateFrame('Button', nil, cell) local icon_texture = icon:CreateTexture(nil, 'BORDER') @@ -73,28 +73,28 @@ Aux.buy.modes = { cell.text = text cell.icon = icon end, - cell_setter = function(cell, datum) - cell.tooltip = datum.tooltip - cell.EnhTooltip_info = datum.EnhTooltip_info - cell.icon.icon_texture:SetTexture(datum.texture) - if not datum.usable then + cell_setter = function(cell, group) + cell.tooltip = group[1].tooltip + cell.EnhTooltip_info = group[1].EnhTooltip_info + cell.icon.icon_texture:SetTexture(group[1].texture) + if not group[1].usable then cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1) else cell.icon.icon_texture:SetVertexColor(1.0, 1.0, 1.0) end - cell.text:SetText('['..datum.tooltip[1][1].text..']') - local color = ITEM_QUALITY_COLORS[datum.quality] + cell.text:SetText('['..group[1].tooltip[1][1].text..']') + local color = ITEM_QUALITY_COLORS[group[1].quality] cell.text:SetTextColor(color.r, color.g, color.b) - alpha_setter(cell, datum) + -- alpha_setter(cell, group) end, }, { title = 'Lvl', width = 23, - comparator = function(row1, row2) return Aux.util.compare(row1.level, row2.level, Aux.util.GT) end, + comparator = function(group1, group2) return Aux.util.compare(group1[1].level, group2[1].level, Aux.util.GT) end, cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), - cell_setter = function(cell, datum) - local level = max(1, datum.level) + cell_setter = function(cell, group) + local level = max(1, group[1].level) local text if level > UnitLevel('player') then text = RED_FONT_COLOR_CODE..level..FONT_COLOR_CODE_CLOSE @@ -102,57 +102,37 @@ Aux.buy.modes = { text = level end cell.text:SetText(text) - alpha_setter(cell, datum) + -- alpha_setter(cell, datum) end, }, { - title = 'Left', - width = 30, - comparator = function(row1, row2) return Aux.util.compare(row1.duration, row2.duration, Aux.util.GT) end, - cell_initializer = Aux.sheet.default_cell_initializer('CENTER'), - cell_setter = function(cell, datum) - local text - if datum.duration == 1 then - text = '30m' - elseif datum.duration == 2 then - text = '2h' - elseif datum.duration == 3 then - text = '8h' - elseif datum.duration == 4 then - text = '24h' - end - cell.text:SetText(text) - alpha_setter(cell, datum) - end, - }, - { - title = 'Owner', - width = 70, - comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end, - cell_initializer = Aux.sheet.default_cell_initializer('LEFT'), - cell_setter = function(cell, datum) - cell.text:SetText(datum.owner) - alpha_setter(cell, datum) + title = 'No', + width = 43, + comparator = function(group1, group2) return Aux.util.compare(getn(group1), getn(group2), Aux.util.LT) end, + cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), + cell_setter = function(cell, group) + cell.text:SetText(getn(group)) + -- alpha_setter(cell, group) end, }, { title = 'Buy/ea', width = 140, - comparator = function(row1, row2) return Aux.util.compare(row1.buyout_price_per_unit, row2.buyout_price_per_unit, Aux.util.GT) end, + comparator = function(group1, group2) return Aux.util.compare(group1[1].buyout_price_per_unit, group2[1].buyout_price_per_unit, Aux.util.GT) end, cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), - cell_setter = function(cell, datum) - cell.text:SetText(Aux.util.money_string(datum.buyout_price_per_unit)) - alpha_setter(cell, datum) + cell_setter = function(cell, group) + cell.text:SetText(Aux.util.money_string(group[1].buyout_price_per_unit)) + -- alpha_setter(cell, group) end, }, { title = 'Buy', width = 140, - comparator = function(row1, row2) return Aux.util.compare(row1.buyout_price, row2.buyout_price, Aux.util.GT) end, + comparator = function(group1, group2) return Aux.util.compare(group1[1].buyout_price, group2[1].buyout_price, Aux.util.GT) end, cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), - cell_setter = function(cell, datum) - cell.text:SetText(Aux.util.money_string(datum.buyout_price)) - alpha_setter(cell, datum) + cell_setter = function(cell, group) + cell.text:SetText(Aux.util.money_string(group[1].buyout_price)) + -- alpha_setter(cell, group) end, }, }, @@ -811,7 +791,7 @@ end function Aux_Buy_ScrollbarUpdate() local mode = UIDropDownMenu_GetSelectedValue(AuxBuyModeDropDown) if mode == BUY then - Aux.list.populate(AuxBuyBuyList.sheet, auctions or {}) + Aux.list.populate(AuxBuyBuyList.sheet, auctions and Aux.util.group_by(auctions, {'buyout_price', 'stack_size'}) or {}) elseif mode == BID then Aux.list.populate(AuxBuyBidList.sheet, auctions or {}) elseif mode == FULL then diff --git a/core.lua b/core.lua index 9b5f5e3..e8e5165 100644 --- a/core.lua +++ b/core.lua @@ -151,9 +151,6 @@ function Aux_SetupHookFunctions() Aux.orig.AuctionFrameAuctions_OnShow = AuctionFrameAuctions_OnShow AuctionFrameAuctions_OnShow = Aux_Sell_AuctionFrameAuctions_OnShow - Aux.orig.AuctionsRadioButton_OnClick = AuctionsRadioButton_OnClick - AuctionsRadioButton_OnClick = Aux_Sell_AuctionsRadioButton_OnClick - Aux.orig.BrowseButton_OnClick = BrowseButton_OnClick BrowseButton_OnClick = Aux_BrowseButton_OnClick diff --git a/util.lua b/util.lua index ab29bde..1c1c69e 100644 --- a/util.lua +++ b/util.lua @@ -238,14 +238,17 @@ end function Aux.util.group_by(tables, keys) local groups = {} - Aux.util.map(tables, function(table) + for _, table in ipairs(tables) do + local found_group for _, group in ipairs(groups) do if Aux.util.all(keys, function(key) return table[key] == group[1][key] end) then tinsert(group, table) - return + found_group = true end - end - tinsert(groups, { table }) - end) + end + if not found_group then + tinsert(groups, { table }) + end + end return groups end