diff --git a/Aux-AddOn.toc b/Aux-AddOn.toc
index 33bf9ff..35d9788 100644
--- a/Aux-AddOn.toc
+++ b/Aux-AddOn.toc
@@ -2,10 +2,10 @@
## Title: Aux
## Notes: A lightweight addon designed to help manage auctions
## SavedVariablesPerCharacter: AUX_SELL_SHORTCUT, AUX_BUY_SHORTCUT, AUX_OPEN_SELL, AUX_OPEN_BUY, AUX_INSTANT_BUYOUT, AUX_AUCTION_DURATION
-## SavedVariables: aux_history, aux_snapshot, aux_post_parameters
+## SavedVariables: aux_database
core.xml
control.xml
-store.lua
+persistence.lua
util.lua
scan.lua
diff --git a/core.lua b/core.lua
index 1829896..a1967bc 100644
--- a/core.lua
+++ b/core.lua
@@ -164,6 +164,8 @@ function Aux.on_tab_click(index)
Aux.buy.on_close()
Aux.sell.on_close()
+ Aux.manage_frame.on_close()
+ Aux.history.on_close()
for i=1,5 do
getglobal('AuxTab'..i):SetAlpha(i == index and 1 or 0.5)
@@ -179,11 +181,12 @@ function Aux.on_tab_click(index)
elseif index == 2 then
AuxSellFrame:Show()
Aux.sell.on_open()
- elseif index == 5 then
+ elseif index == 3 then
+ Aux.manage_frame.on_open()
+ elseif index == 4 then
AuxHistoryFrame:Show()
Aux.history.on_open()
end
-
end
function Aux_Round(v)
diff --git a/core.xml b/core.xml
index 5ebb52c..f255ca3 100644
--- a/core.xml
+++ b/core.xml
@@ -250,12 +250,12 @@
- if this:GetParent().tooltip then
- Aux.info.set_game_tooltip(this, this:GetParent().tooltip, 'ANCHOR_LEFT', this:GetParent().EnhTooltip_info)
+ if this.tooltip then
+ Aux.info.set_game_tooltip(this, this.tooltip, 'ANCHOR_LEFT', this.EnhTooltip_info)
end
- if this:GetParent().tooltip then
+ if this.tooltip then
GameTooltip:Hide()
end
diff --git a/manage_frame.lua b/manage_frame.lua
index e69de29..977a80b 100644
--- a/manage_frame.lua
+++ b/manage_frame.lua
@@ -0,0 +1,213 @@
+local on_open, on_close
+
+local bid_records, auctions_records, create_bid_record, create_auction_record
+
+local bid_listing_config = {
+ on_cell_click = function (sheet, row_index, column_index)
+ local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
+ set_auction(sheet.data[data_index])
+ end,
+
+ on_cell_enter = function (sheet, row_index, column_index)
+ sheet.rows[row_index].highlight:SetAlpha(.5)
+ end,
+
+ on_cell_leave = function (sheet, row_index, column_index)
+ local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
+ if not (current_auction and sheet.data[data_index] == current_auction) then
+ sheet.rows[row_index].highlight:SetAlpha(0)
+ end
+ end,
+
+ row_setter = function(row, datum)
+ if current_auction and datum == current_auction then
+ row.highlight:SetAlpha(.5)
+ else
+ row.highlight:SetAlpha(0)
+ end
+ end,
+
+ columns = {
+ {
+ title = 'Qty',
+ width = 23,
+ comparator = function(datum1, datum2) return Aux.util.compare(datum1.aux_quantity, datum2.aux_quantity, Aux.util.LT) end,
+ cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
+ cell_setter = function(cell, datum)
+ cell.text:SetText(datum.aux_quantity)
+ end,
+ },
+ {
+ title = 'Item',
+ width = 186,
+ comparator = function(row1, row2) return Aux.util.compare(row1.name, row2.name, Aux.util.GT) end,
+ cell_initializer = function(cell)
+ local icon = CreateFrame('Button', nil, cell)
+ local icon_texture = icon:CreateTexture(nil, 'BORDER')
+ icon_texture:SetAllPoints(icon)
+ icon.icon_texture = icon_texture
+ local normal_texture = icon:CreateTexture(nil)
+ normal_texture:SetPoint('CENTER', 0, 0)
+ normal_texture:SetWidth(22)
+ normal_texture:SetHeight(22)
+ normal_texture:SetTexture('Interface\\Buttons\\UI-Quickslot2')
+ icon:SetNormalTexture(normal_texture)
+ icon:SetPoint('LEFT', cell)
+ icon:SetWidth(12)
+ icon:SetHeight(12)
+ icon:SetNormalTexture('Interface\\Buttons\\UI-Quickslot2')
+ icon:SetPushedTexture('Interface\\Buttons\\UI-Quickslot-Depress')
+ icon:SetHighlightTexture('Interface\\Buttons\\ButtonHilight-Square')
+ local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall')
+ text:SetPoint("LEFT", icon, "RIGHT", 1, 0)
+ text:SetPoint('TOPRIGHT', cell)
+ text:SetPoint('BOTTOMRIGHT', cell)
+ text:SetJustifyV('TOP')
+ text:SetJustifyH('LEFT')
+ text:SetTextColor(0.8, 0.8, 0.8)
+ cell.text = text
+ cell.icon = icon
+ end,
+ cell_setter = function(cell, datum)
+ cell.icon.icon_texture:SetTexture(datum.texture)
+ cell.text:SetText('['..datum.name..']')
+ local color = ITEM_QUALITY_COLORS[datum.quality]
+ cell.text:SetTextColor(color.r, color.g, color.b)
+ end,
+ },
+ },
+ sort_order = {{column = 2, order = 'ascending' }},
+}
+
+local auction_listing_config = {
+ on_cell_click = function (sheet, row_index, column_index)
+ local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
+ AuxSellEntry_OnClick(sheet.data[data_index])
+ end,
+
+ on_cell_enter = function (sheet, row_index, column_index)
+ sheet.rows[row_index].highlight:SetAlpha(.5)
+ end,
+
+ on_cell_leave = function (sheet, row_index, column_index)
+ local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
+ local datum = sheet.data[data_index]
+ if not (datum and current_auction and Aux.util.safe_index{auxSellEntries, current_auction.name, 'selected', 'key'} == datum.key) then
+ sheet.rows[row_index].highlight:SetAlpha(0)
+ end
+ end,
+
+ row_setter = function(row, datum)
+ if datum and current_auction and Aux.util.safe_index{auxSellEntries, current_auction.name, 'selected', 'key'} == datum.key then
+ row.highlight:SetAlpha(.5)
+ else
+ row.highlight:SetAlpha(0)
+ end
+ end,
+
+ columns = {
+ {
+ title = 'Avail',
+ width = 40,
+ comparator = function(row1, row2) return Aux.util.compare(row1.count, row2.count, Aux.util.LT) end,
+ cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
+ cell_setter = function(cell, row)
+ cell.text:SetText(row.count)
+ end,
+ },
+ {
+ title = 'Yours',
+ width = 40,
+ comparator = function(row1, row2) return Aux.util.compare(row1.yours, row2.yours, Aux.util.LT) end,
+ cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
+ cell_setter = function(cell, row)
+ cell.text:SetText(row.yours)
+ end,
+ },
+ {
+ title = 'Max Left',
+ width = 55,
+ comparator = function(row1, row2) return Aux.util.compare(row1.max_time_left, row2.max_time_left, Aux.util.GT) end,
+ cell_initializer = Aux.sheet.default_cell_initializer('CENTER'),
+ cell_setter = function(cell, datum)
+ local text
+ if datum.max_time_left == 1 then
+ text = '30m'
+ elseif datum.max_time_left == 2 then
+ text = '2h'
+ elseif datum.max_time_left == 3 then
+ text = '8h'
+ elseif datum.max_time_left == 4 then
+ text = '24h'
+ end
+ cell.text:SetText(text)
+ end,
+ },
+ {
+ title = 'Buy/ea',
+ width = 70,
+ comparator = function(row1, row2) return Aux.util.compare(row1.unit_buyout_price, row2.unit_buyout_price, Aux.util.GT) end,
+ cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
+ cell_setter = function(cell, row)
+ cell.text:SetText(Aux.util.money_string(row.unit_buyout_price))
+ end,
+ },
+ {
+ title = 'Qty',
+ width = 23,
+ comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
+ cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
+ cell_setter = function(cell, row)
+ cell.text:SetText(row.stack_size)
+ end,
+ },
+ {
+ title = 'Buy',
+ width = 70,
+ comparator = function(row1, row2) return Aux.util.compare(row1.buyout_price, row2.buyout_price, Aux.util.GT) end,
+ cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
+ cell_setter = function(cell, row)
+ cell.text:SetText(Aux.util.money_string(row.buyout_price))
+ end,
+ },
+ },
+ sort_order = {{column = 4, order = 'ascending' }, {column = 4, order = 'ascending'}},
+}
+
+function on_open()
+
+ if not bid_records then
+ GetBidderAuctionItems()
+ bid_records = {}
+ end
+ AuctionFrameBid.page = 0;
+ AuctionFrameBid_Update();
+
+ if not auctions_records then
+ GetOwnerAuctionItems()
+ auction_records = {}
+ end
+ AuctionFrameAuctions.page = 0;
+ AuctionFrameAuctions_Update();
+end
+
+function on_close()
+end
+
+
+
+
+
+
+
+
+
+
+
+Aux.manage_frame = {
+ on_open = on_open,
+ on_close = on_close,
+ bid_listing_config = bid_listing_config,
+ auction_listing_config = auction_listing_config,
+}
+
diff --git a/manage_frame.xml b/manage_frame.xml
index 1f72630..4803300 100644
--- a/manage_frame.xml
+++ b/manage_frame.xml
@@ -32,8 +32,9 @@
- local sort_order = Aux.util.map(Aux.buy.modes[1].sort_order, function(column_order) return { column = Aux.buy.modes[1].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
- this.sheet = Aux.sheet.create(this, Aux.buy.modes[1].columns, sort_order, Aux.buy.modes[1].row_setter, Aux.buy.modes[1].on_cell_click, Aux.buy.modes[1].on_cell_enter, Aux.buy.modes[1].on_cell_leave)
+ local config = Aux.manage_frame.bid_listing_config
+ local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
+ this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_cell_click, config.on_cell_enter, config.on_cell_leave)
@@ -123,8 +124,9 @@
- local sort_order = Aux.util.map(Aux.buy.modes[1].sort_order, function(column_order) return { column = Aux.buy.modes[1].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
- this.sheet = Aux.sheet.create(this, Aux.buy.modes[1].columns, sort_order, Aux.buy.modes[1].row_setter, Aux.buy.modes[1].on_cell_click, Aux.buy.modes[1].on_cell_enter, Aux.buy.modes[1].on_cell_leave)
+ local config = Aux.manage_frame.auction_listing_config
+ local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
+ this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_cell_click, config.on_cell_enter, config.on_cell_leave)
diff --git a/persistence.lua b/persistence.lua
new file mode 100644
index 0000000..d38943e
--- /dev/null
+++ b/persistence.lua
@@ -0,0 +1,168 @@
+local on_load, load_dataset, new_dataset, get_dataset_key, get_snapshot, save_snapshot, get_item_record, save_item_record
+local encode_median_list, decode_median_list, serialize, deserialize, deserializing_iterator
+
+local DATABASE_VERSION = 0
+
+aux_database = {}
+
+function on_load()
+ perform_migration(aux_database)
+ aux_database.version = DATABASE_VERSION
+end
+
+function get_dataset_key()
+ local realm = GetCVar('realmName')
+ local zone = GetMinimapZoneText()
+ local faction
+ if zone == 'Gadgetzan' or zone == 'Everlook' or zone == 'Booty Bay' then
+ faction = 'Neutral'
+ else
+ faction = UnitFactionGroup('player')
+ end
+ return realm..'|'..faction
+end
+
+function new_dataset()
+ return {
+ snapshot = '',
+ scan_data = '',
+ item_data = {},
+ }
+end
+
+function load_dataset()
+ local dataset_key = get_dataset_key()
+ aux_database[dataset_key] = aux_database[dataset_key] or new_dataset()
+ return aux_database[dataset_key]
+end
+
+function get_snapshot()
+ local dataset = load_dataset()
+ local signatures = deserialize(dataset.snapshot, '#')
+ local snapshot = Aux.util.set()
+ snapshot.add_all(signatures)
+ return snapshot
+end
+
+function save_snapshot(snapshot)
+ local dataset = load_dataset()
+ dataset.snapshot = serialize(snapshot.values(), '#')
+end
+
+--function load_scan_data()
+--
+--end
+--
+--function store_scan_data()
+--
+--end
+
+function get_item_record(item_key)
+ local dataset = load_dataset()
+
+ if dataset.item_data[item_key] then
+ local serialized_record = dataset.item_data[item_key]
+ local count, accumulated_price, encoded_price_list = unpack(deserialize(serialized_record, '|'))
+ local price_list = decode_median_list(encoded_price_list)
+
+ return {
+ count = count,
+ accumulated_price = accumulated_price,
+ price_list = price_list
+ }
+ end
+end
+
+function save_item_record(item_key, record)
+ local dataset = load_dataset()
+
+ local encoded_price_list = encode_median_list(record.price_list)
+ local serialized_record = serialize({record.count, record.acumulated_price, encoded_price_list}, '|')
+
+ dataset.item_data[item_key] = serialized_record
+end
+
+-- AuctionConfig.data[auctKey][itemKey] = string.format("%s|%s", iData.data, hist);
+-- AuctionConfig.info[itemKey] = string.format("%s|%s", iData.category, iData.name);
+-- Auctioneer.Storage.SetHistMed(auctKey, itemKey, Auctioneer.Statistic.GetMedian(iData.buyoutPricesHistoryList))
+
+function encode_median_list(list)
+ local encoded_list = ''
+ local function extend(last, n)
+ if n == 1 then
+ encoded_list = encoded_list == '' and last or string.format('%s:%d', encoded_list, last)
+ elseif n > 1 then
+ encoded_list = encoded_list == '' and string.format('%dx%d', last, n) or string.format('%s:%dx%d', encoded_list, last, n)
+ end
+ end
+ local n = 0
+ local last = 0
+ for i, price in pairs(list) do
+ if i == 1 then
+ last = price
+ elseif price ~= last then
+ extend(last, n)
+ last = price
+ n = 0
+ end
+ n = n + 1
+ end
+ extend(last, n)
+ return encoded_list
+end
+
+function decode_median_list(str)
+ local array = {}
+ for x, c in string.gfind(str, '([^%:]*)(%:?)') do
+ local _, _, y, n = strfind(x, '(%d*)x(%d*)')
+ if y == nil then
+ tinsert(array, tonumber(x))
+ else
+ for i = 1,n do
+ tinsert(array, tonumber(y))
+ end
+ end
+ if c == '' then break end
+ end
+ return array
+end
+
+function serialize(data, separator)
+ local data_string = ''
+ for i, datum in ipairs(data) do
+ data_string = data_string..(i == 1 and separator or '')..datum
+ end
+ return data_string
+end
+
+function deserialize(data_string, separator)
+ local data = {}
+ while true do
+ local start_index, _ = strfind(data_string, separator, 1, true)
+ if start_index then
+ local datum = string.sub(data_string, 1, start_index - 1)
+ tinsert(data, datum)
+ data_string = string.sub(data_string, start_index + 1, strlen(data_string))
+ else
+ return data
+ end
+ end
+end
+
+function deserializing_iterator(data_string, separator)
+ return function()
+ local start_index, _ = strfind(data_string, separator, 1, true)
+ if start_index then
+ local datum = string.sub(data_string, 1, start_index - 1)
+ data_string = string.sub(data_string, start_index, strlen(data_string))
+ return datum
+ end
+ end
+end
+
+Aux.persistence = {
+ get_item_record = get_item_record,
+ save_item_record = save_item_record,
+ get_snapshot = get_snapshot,
+ save_snapshot = save_snapshot,
+}
\ No newline at end of file
diff --git a/scan_frame.lua b/scan_frame.lua
index 66353ff..ac16ab7 100644
--- a/scan_frame.lua
+++ b/scan_frame.lua
@@ -4,15 +4,11 @@ local UNDERCUT_FACTOR = 0.2
Aux.history = {}
-aux_snapshot = {}
-
-aux_history = {}
-
-local cache
-
-local get_history, process_auction, create_balanced_list
+local process_auction, balanced_list, update_snapshot
local get_market_price, get_usable_median, get_historical_median, get_median, get_percentile
+local signature_cache
+
function Aux.history.on_close()
end
@@ -30,7 +26,7 @@ function Aux.history.start_scan()
AuxHistoryScanButton:Hide()
AuxHistoryStopButton:Show()
- cache = {}
+ signature_cache = Aux.util.set()
Aux.log('Scanning auctions ...')
Aux.scan.start{
@@ -43,13 +39,13 @@ function Aux.history.start_scan()
process_auction(i)
end,
on_complete = function()
- remove_old_signatures()
+ update_snapshot()
AuxHistoryStopButton:Hide()
AuxHistoryScanButton:Show()
end,
on_abort = function()
- remove_old_signatures()
+ update_snapshot()
AuxHistoryStopButton:Hide()
AuxHistoryScanButton:Show()
@@ -65,97 +61,54 @@ function Aux.history.start_scan()
}
end
-function remove_old_signatures()
- for sig, _ in ipairs(aux_snapshot) do
- if not cache[sig] then
- Aux.util.set_remove(aux_snapshot, sig)
- end
- end
+function update_snapshot()
+ local snapshot = Aux.persistence.get_snapshot()
+ snapshot.remove_all(signature_cache.values())
+ Aux.persistence.save_snapshot(snapshot)
end
function Aux.history.stop_scan()
Aux.scan.abort()
end
-function get_history()
- local history_key = GetCVar('realmName')
- aux_history[history_key] = aux_history[history_key] or {}
- return aux_history[history_key]
-end
-
function process_auction(index)
local auction_info = Aux.info.auction_item(index)
local buyout_price = Aux.util.safe_index{auction_info, 'buyout_price'}
if buyout_price and buyout_price > 0 then
local aux_quantity = auction_info.charges or auction_info.count
local price = ceil(buyout_price / aux_quantity)
- local key = auction_info.item_signature
+ local item_key = auction_info.item_signature
local signature = Aux.info.auction_signature(index)
- Aux.util.set_add(cache, signature)
+ signature_cache.add(signature)
- if not Aux.util.set_contains(aux_snapshot, signature) then
-
- Aux.util.set_add(aux_snapshot, signature)
-
- local history = get_history()
- history[key] = history[key] or {
- name = auction_info.name,
- count = 0,
- records = {},
- }
-
- local records = create_balanced_list(MAX_HISTORY_SIZE)
- records.add_all(history[key].records)
- records.add(price)
-
- history[key].records = records.values()
- history[key].count = history[key].count + 1
+ local snapshot = Aux.persistence.get_snapshot()
+ if not snapshot.contains(signature) then
+ snapshot.add(signature)
+ Aux.persistence.save_snapshot(snapshot)
+--
+-- local item_record = Aux.persistence.get_item_record(item_key)
+--
+-- item_record = item_record or {
+-- count = 0,
+-- accumulated_price = 0,
+-- price_list = {},
+-- }
+--
+-- local price_list = balanced_list(MAX_HISTORY_SIZE)
+-- price_list.add_all(item_record.price_list)
+-- price_list.add(price)
+--
+-- Aux.persistence.save_item_record(item_key, {
+-- count = item_record.count + 1,
+-- accumulated_price = item_record.accumulated_price + price,
+-- price_list = price_list.values(),
+-- })
+--
end
end
end
---function store_median_list(list)
--- local hist = ''
--- local function grow_list(last, n)
--- if n == 1 then
--- hist = hist == '' and last or string.format('%s:%d', hist, last)
--- elseif n > 1 then
--- hist = hist == '' and string.format('%dx%d', last, n) or string.format('%s:%dx%d', hist, last, n)
--- end
--- end
--- local n = 0
--- local last = 0
--- for i, price in pairs(list) do
--- if i == 1 then
--- last = price
--- elseif price ~= last then
--- grow_list(last, n)
--- last = price
--- n = 0
--- end
--- n = n + 1
--- end
--- grow_list(last, n)
--- return hist
---end
---
---function load_median_list(str)
--- local splut = {}
--- for x, c in string.gfind(str, '([^%:]*)(%:?)') do
--- local _, _, y, n = string.find(x, '(%d*)x(%d*)')
--- if y == nil then
--- table.insert(splut, tonumber(x))
--- else
--- for i = 1,n do
--- table.insert(splut, tonumber(y))
--- end
--- end
--- if c == '' then break end
--- end
--- return splut
---end
-
function Aux.history.get_market_price(key)
local price
@@ -173,18 +126,19 @@ function Aux.history.get_market_price(key)
return price
end
-function get_usable_median(key)
+function get_usable_median(item_key)
- local historical_median, historical_count = get_historical_median(key)
+ local historical_median, historical_count = get_historical_median(item_key)
if historical_count >= MIN_SEEN then
return historical_median, historical_count
end
end
-function get_historical_median(key)
- local historical_prices = Aux.util.safe_index{get_history()[key], 'records'}
- return get_median(historical_prices or {})
+function get_historical_median(item_key)
+ local price_list = Aux.util.safe_index{Aux.persistence.get_item_record(item_key), 'price_list'}
+
+ return get_median(price_list or {})
end
function get_median(values)
@@ -244,7 +198,7 @@ function get_percentile(values, pct)
return _percentile(values, pct, first, last), last - first + 1
end
-function create_balanced_list(max_size, cmp)
+function balanced_list(max_size, cmp)
local self = {}
local values = {}
diff --git a/search_frame.lua b/search_frame.lua
index 6026ac7..fc88cd6 100644
--- a/search_frame.lua
+++ b/search_frame.lua
@@ -571,31 +571,31 @@ function Aux.buy.SearchButton_onclick()
end
function show_dialog(buyout_mode, entry, amount)
- AuxBuyConfirmation.tooltip = entry.tooltip
- AuxBuyConfirmation.EnhTooltip_info = entry.EnhTooltip_info
+ AuxBuyConfirmationContentItem.tooltip = entry.tooltip
+ AuxBuyConfirmationContentItem.EnhTooltip_info = entry.EnhTooltip_info
- AuxBuyConfirmationActionButton:Disable()
- AuxBuyConfirmationItemIconTexture:SetTexture(entry.texture)
- AuxBuyConfirmationItemName:SetText(entry.tooltip[1][1].text)
+ AuxBuyConfirmationContentActionButton:Disable()
+ AuxBuyConfirmationContentItemIconTexture:SetTexture(entry.texture)
+ AuxBuyConfirmationContentItemName:SetText(entry.tooltip[1][1].text)
local color = ITEM_QUALITY_COLORS[entry.quality]
- AuxBuyConfirmationItemName:SetTextColor(color.r, color.g, color.b)
+ AuxBuyConfirmationContentItemName:SetTextColor(color.r, color.g, color.b)
if entry.stack_size > 1 then
- AuxBuyConfirmationItemCount:SetText(entry.stack_size);
- AuxBuyConfirmationItemCount:Show()
+ AuxBuyConfirmationContentItemCount:SetText(entry.stack_size);
+ AuxBuyConfirmationContentItemCount:Show()
else
- AuxBuyConfirmationItemCount:Hide()
+ AuxBuyConfirmationContentItemCount:Hide()
end
if buyout_mode then
- AuxBuyConfirmationActionButton:SetText('Buy')
- MoneyFrame_Update('AuxBuyConfirmationBuyoutPrice', amount)
- AuxBuyConfirmationBid:Hide()
- AuxBuyConfirmationBuyoutPrice:Show()
+ AuxBuyConfirmationContentActionButton:SetText('Buy')
+ MoneyFrame_Update('AuxBuyConfirmationContentBuyoutPrice', amount)
+ AuxBuyConfirmationContentBid:Hide()
+ AuxBuyConfirmationContentBuyoutPrice:Show()
else
- AuxBuyConfirmationActionButton:SetText('Bid')
- MoneyInputFrame_SetCopper(AuxBuyConfirmationBid, amount)
- AuxBuyConfirmationBuyoutPrice:Hide()
- AuxBuyConfirmationBid:Show()
+ AuxBuyConfirmationContentActionButton:SetText('Bid')
+ MoneyInputFrame_SetCopper(AuxBuyConfirmationContentBid, amount)
+ AuxBuyConfirmationContentBuyoutPrice:Hide()
+ AuxBuyConfirmationContentBid:Show()
end
AuxBuyConfirmation:Show()
end
@@ -681,7 +681,7 @@ function find_auction(entry, buyout_mode, express_mode)
AuxBuyConfirmation:Hide()
update_sheet()
end
- AuxBuyConfirmationActionButton:Enable()
+ AuxBuyConfirmationContentActionButton:Enable()
end
end
end,
diff --git a/search_frame.xml b/search_frame.xml
index 256561f..0fcee98 100644
--- a/search_frame.xml
+++ b/search_frame.xml
@@ -280,121 +280,120 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+ this:SetBackdropBorderColor(0.4, 0.4, 0.4)
+ this:SetBackdropColor(0.15, 0.15, 0.15)
+ getglobal(this:GetName().."Title"):SetText('Search Results')
+
+
+
+
+
+
+
+
- this:SetBackdropBorderColor(0.4, 0.4, 0.4)
- this:SetBackdropColor(0.15, 0.15, 0.15)
- getglobal(this:GetName().."Title"):SetText('Search Results')
+ local sort_order = Aux.util.map(Aux.buy.modes[1].sort_order, function(column_order) return { column = Aux.buy.modes[1].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
+ this.sheet = Aux.sheet.create(this, Aux.buy.modes[1].columns, sort_order, Aux.buy.modes[1].row_setter, Aux.buy.modes[1].on_cell_click, Aux.buy.modes[1].on_cell_enter, Aux.buy.modes[1].on_cell_leave)
+
+
+
+
+
+
+
+
+ local sort_order = Aux.util.map(Aux.buy.modes[2].sort_order, function(column_order) return { column = Aux.buy.modes[2].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
+ this.sheet = Aux.sheet.create(this, Aux.buy.modes[2].columns, sort_order, Aux.buy.modes[2].row_setter, Aux.buy.modes[2].on_cell_click, Aux.buy.modes[2].on_cell_enter, Aux.buy.modes[2].on_cell_leave)
+
+
+
+
+
+
+
+
+
+
+ local sort_order = Aux.util.map(Aux.buy.modes[3].sort_order, function(column_order) return { column = Aux.buy.modes[3].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
+ this.sheet = Aux.sheet.create(this, Aux.buy.modes[3].columns, sort_order, Aux.buy.modes[3].row_setter, Aux.buy.modes[3].on_cell_click, Aux.buy.modes[3].on_cell_enter, Aux.buy.modes[3].on_cell_leave)
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- local sort_order = Aux.util.map(Aux.buy.modes[1].sort_order, function(column_order) return { column = Aux.buy.modes[1].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
- this.sheet = Aux.sheet.create(this, Aux.buy.modes[1].columns, sort_order, Aux.buy.modes[1].row_setter, Aux.buy.modes[1].on_cell_click, Aux.buy.modes[1].on_cell_enter, Aux.buy.modes[1].on_cell_leave)
-
-
-
-
-
-
-
-
-
-
- local sort_order = Aux.util.map(Aux.buy.modes[2].sort_order, function(column_order) return { column = Aux.buy.modes[2].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
- this.sheet = Aux.sheet.create(this, Aux.buy.modes[2].columns, sort_order, Aux.buy.modes[2].row_setter, Aux.buy.modes[2].on_cell_click, Aux.buy.modes[2].on_cell_enter, Aux.buy.modes[2].on_cell_leave)
-
-
-
-
-
-
-
-
-
-
- local sort_order = Aux.util.map(Aux.buy.modes[3].sort_order, function(column_order) return { column = Aux.buy.modes[3].columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
- this.sheet = Aux.sheet.create(this, Aux.buy.modes[3].columns, sort_order, Aux.buy.modes[3].row_setter, Aux.buy.modes[3].on_cell_click, Aux.buy.modes[3].on_cell_enter, Aux.buy.modes[3].on_cell_leave)
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SmallMoneyFrame_OnLoad()
- MoneyFrame_SetType("STATIC")
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SmallMoneyFrame_OnLoad()
+ MoneyFrame_SetType("STATIC")
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/util.lua b/util.lua
index efb8fca..4decd8e 100644
--- a/util.lua
+++ b/util.lua
@@ -308,3 +308,51 @@ function Aux.util.group_by(tables, equal)
end
return groups
end
+
+function Aux.util.set()
+ local self = {}
+
+ local data = {}
+
+ function self.set_data(new_data)
+ data = new_data
+ end
+
+ function self.get_data()
+ return data
+ end
+
+ function self.add(value)
+ data[value] = true
+ end
+
+ function self.add_all(values)
+ for _, value in ipairs(values) do
+ self.add(value)
+ end
+ end
+
+ function self.remove(value)
+ data[value] = nil
+ end
+
+ function self.remove_all(values)
+ for _, value in ipairs(values) do
+ self.remove(value)
+ end
+ end
+
+ function self.contains(value)
+ return data[value] ~= nil
+ end
+
+ function self.values()
+ local values = {}
+ for value, _ in pairs(data) do
+ tinsert(values, value)
+ end
+ return values
+ end
+
+ return self
+end