lots of post tab refactoring

This commit is contained in:
Manuel Simon Hirsig
2016-01-25 03:07:51 +01:00
parent ed6f65277e
commit 7cbb349cd6
7 changed files with 427 additions and 502 deletions
+29 -65
View File
@@ -12,6 +12,7 @@ local refresh
function public.on_close() function public.on_close()
private.clear_selection() private.clear_selection()
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
end end
function public.on_open() function public.on_open()
@@ -109,33 +110,7 @@ function public.on_load()
cell.text:SetText(getn(Aux.util.filter(group, function(auction) return not auction.gone end))) cell.text:SetText(getn(Aux.util.filter(group, function(auction) return not auction.gone end)))
end, end,
}, },
{ Aux.listing_util.percentage_market_column(function(group) return group[1].item_key end, function(group) return group[1].buyout_price_per_unit end),
title = 'Pct',
width = 40,
comparator = function(group1, group2)
local market_price1 = Aux.history.market_value(group1[1].item_key)
local market_price2 = Aux.history.market_value(group2[1].item_key)
local factor1 = market_price1 > 0 and group1[1].buyout_price_per_unit / market_price1
local factor2 = market_price2 > 0 and group2[1].buyout_price_per_unit / market_price2
return Aux.util.compare(factor1, factor2, Aux.util.GT)
end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, group)
local market_price = Aux.history.market_value(group[1].item_key)
local pct = market_price > 0 and ceil(100 / market_price * group[1].buyout_price_per_unit)
if not pct then
cell.text:SetText('N/A')
elseif pct > 999 then
cell.text:SetText('>999%')
else
cell.text:SetText(pct..'%')
end
if pct then
cell.text:SetTextColor(Aux.price_level_color(pct))
end
end,
},
}, },
sort_order = {{column = 1, order = 'ascending' }, {column = 4, order = 'ascending'}}, sort_order = {{column = 1, order = 'ascending' }, {column = 4, order = 'ascending'}},
}, },
@@ -394,33 +369,7 @@ function public.on_load()
cell.text:SetText(datum.owner) cell.text:SetText(datum.owner)
end, end,
}, },
{ Aux.listing_util.percentage_market_column(function(entry) return entry.item_key end, function(entry) return entry.buyout_price_per_unit end),
title = 'Pct',
width = 40,
comparator = function(row1, row2)
local market_price1 = Aux.history.market_value(row1.item_key)
local market_price2 = Aux.history.market_value(row2.item_key)
local factor1 = market_price1 > 0 and row1.buyout_price_per_unit and row1.buyout_price_per_unit / market_price1
local factor2 = market_price2 > 0 and row2.buyout_price_per_unit and row2.buyout_price_per_unit / market_price2
return Aux.util.compare(factor1, factor2, Aux.util.GT)
end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
local market_price = Aux.history.market_value(datum.item_key)
local pct = market_price > 0 and datum.buyout_price_per_unit and ceil(100 / market_price * datum.buyout_price_per_unit)
if not pct then
cell.text:SetText('N/A')
elseif pct > 999 then
cell.text:SetText('>999%')
else
cell.text:SetText(pct..'%')
end
if pct then
cell.text:SetTextColor(Aux.price_level_color(pct))
end
end,
},
}, },
sort_order = {{column = 1, order = 'ascending' }, {column = 7, order = 'ascending' }}, sort_order = {{column = 1, order = 'ascending' }, {column = 7, order = 'ascending' }},
}, },
@@ -461,7 +410,7 @@ function public.on_load()
status_bar:SetWidth(265) status_bar:SetWidth(265)
status_bar:SetHeight(30) status_bar:SetHeight(30)
status_bar:SetPoint('BOTTOMLEFT', AuxFilterSearchFrame, 'BOTTOMLEFT', 6, 6) status_bar:SetPoint('BOTTOMLEFT', AuxFilterSearchFrame, 'BOTTOMLEFT', 6, 6)
status_bar:update_status(0,0) status_bar:update_status(100, 0)
status_bar:set_text('') status_bar:set_text('')
private.status_bar = status_bar private.status_bar = status_bar
end end
@@ -474,6 +423,15 @@ function public.on_load()
btn:Disable() btn:Disable()
private.buyout_button = btn private.buyout_button = btn
end end
do
local btn = Aux.gui.button(AuxFilterSearchFrame, 15)
btn:SetPoint('TOPLEFT', private.buyout_button, 'TOPRIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Bid')
btn:Disable()
private.bid_button = btn
end
do do
local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentNameInputBox') local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentNameInputBox')
editbox:SetPoint('TOPLEFT', 14, -20) editbox:SetPoint('TOPLEFT', 14, -20)
@@ -510,7 +468,7 @@ function public.on_load()
local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentMinLevel') local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentMinLevel')
editbox:SetNumeric(true) editbox:SetNumeric(true)
editbox:SetMaxLetters(2) editbox:SetMaxLetters(2)
editbox:SetPoint('TOPLEFT', 14, -135) editbox:SetPoint('TOPLEFT', 14, -140)
editbox:SetWidth(30) editbox:SetWidth(30)
editbox:SetScript('OnTabPressed', function() editbox:SetScript('OnTabPressed', function()
if IsShiftKeyDown() then if IsShiftKeyDown() then
@@ -534,7 +492,7 @@ function public.on_load()
local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentMaxLevel') local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentMaxLevel')
editbox:SetNumeric(true) editbox:SetNumeric(true)
editbox:SetMaxLetters(2) editbox:SetMaxLetters(2)
editbox:SetPoint('TOPLEFT', 54, -135) editbox:SetPoint('TOPLEFT', 54, -140)
editbox:SetWidth(30) editbox:SetWidth(30)
editbox:SetScript('OnTabPressed', function() editbox:SetScript('OnTabPressed', function()
if IsShiftKeyDown() then if IsShiftKeyDown() then
@@ -556,12 +514,12 @@ function public.on_load()
end end
do do
local label = Aux.gui.label(AuxFilterSearchFrameFiltersUsableCheckButton, 13) local label = Aux.gui.label(AuxFilterSearchFrameFiltersUsableCheckButton, 13)
label:SetPoint('BOTTOMLEFT', AuxFilterSearchFrameFiltersUsableCheckButton, 'TOPLEFT', -2, 1) label:SetPoint('BOTTOMLEFT', AuxFilterSearchFrameFiltersUsableCheckButton, 'TOPLEFT', 1, -3)
label:SetText('Usable') label:SetText('Usable')
end end
do do
local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox1') local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox1')
editbox:SetPoint('TOPLEFT', 14, -170) editbox:SetPoint('TOPLEFT', 14, -177)
editbox:SetWidth(150) editbox:SetWidth(150)
editbox:SetScript('OnTabPressed', function() editbox:SetScript('OnTabPressed', function()
if IsShiftKeyDown() then if IsShiftKeyDown() then
@@ -583,7 +541,7 @@ function public.on_load()
end end
do do
local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox2') local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox2')
editbox:SetPoint('TOPLEFT', 14, -191) editbox:SetPoint('TOPLEFT', 14, -198)
editbox:SetWidth(150) editbox:SetWidth(150)
editbox:SetScript('OnTabPressed', function() editbox:SetScript('OnTabPressed', function()
if IsShiftKeyDown() then if IsShiftKeyDown() then
@@ -602,7 +560,7 @@ function public.on_load()
end end
do do
local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox3') local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox3')
editbox:SetPoint('TOPLEFT', 14, -212) editbox:SetPoint('TOPLEFT', 14, -219)
editbox:SetWidth(150) editbox:SetWidth(150)
editbox:SetScript('OnTabPressed', function() editbox:SetScript('OnTabPressed', function()
if IsShiftKeyDown() then if IsShiftKeyDown() then
@@ -621,7 +579,7 @@ function public.on_load()
end end
do do
local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox4') local editbox = Aux.gui.editbox(AuxFilterSearchFrameFilters, '$parentTooltipInputBox4')
editbox:SetPoint('TOPLEFT', 14, -233) editbox:SetPoint('TOPLEFT', 14, -240)
editbox:SetWidth(150) editbox:SetWidth(150)
editbox:SetScript('OnTabPressed', function() editbox:SetScript('OnTabPressed', function()
if IsShiftKeyDown() then if IsShiftKeyDown() then
@@ -699,6 +657,7 @@ end
function public.set_view(view) function public.set_view(view)
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
private.clear_selection() private.clear_selection()
aux_view = view aux_view = view
update_listing() update_listing()
@@ -816,7 +775,7 @@ function find_auction(entry, express_mode, buyout_mode)
Aux.scan_util.find_auction(test, search_query, entry.page, private.status_bar, function(index) Aux.scan_util.find_auction(test, search_query, entry.page, private.status_bar, function(index)
if not index then if not index then
entry.gone = true entry.gone = true
private.selected = nil private.clear_selection()
refresh = true refresh = true
return return
end end
@@ -834,7 +793,8 @@ function find_auction(entry, express_mode, buyout_mode)
entry.gone = true entry.gone = true
end end
Aux.place_bid('list', index, amount) Aux.place_bid('list', index, amount)
private.selected = nil
private.clear_selection()
refresh = true refresh = true
else else
private.buyout_button:SetScript('OnClick', function() private.buyout_button:SetScript('OnClick', function()
@@ -844,6 +804,7 @@ function find_auction(entry, express_mode, buyout_mode)
if not test(index) then if not test(index) then
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
return find_auction(entry, express_mode, buyout_mode) -- try again return find_auction(entry, express_mode, buyout_mode) -- try again
end end
@@ -853,10 +814,12 @@ function find_auction(entry, express_mode, buyout_mode)
Aux.place_bid('list', index, entry.buyout_price) Aux.place_bid('list', index, entry.buyout_price)
private.buyout_button:Disable() private.buyout_button:Disable()
private.selected = nil private.bid_button:Disable()
private.clear_selection()
refresh = true refresh = true
end) end)
private.buyout_button:Enable() private.buyout_button:Enable()
private.bid_button:Enable()
end end
end) end)
end end
@@ -882,6 +845,7 @@ function private.on_row_click(sheet, datum, grouped)
elseif not entry.gone then elseif not entry.gone then
if not express_mode then if not express_mode then
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
sheet:clear_selection() sheet:clear_selection()
sheet:select(datum) sheet:select(datum)
end end
+3 -3
View File
@@ -22,7 +22,7 @@
</Scripts> </Scripts>
<Frames> <Frames>
<Frame name="$parentCategoryDropDown" inherits="UIDropDownMenuTemplate"> <Frame name="$parentCategoryDropDown" inherits="UIDropDownMenuTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="-8" y="-55" /></Offset></Anchor></Anchors> <Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="-8" y="-56" /></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnLoad> <OnLoad>
UIDropDownMenu_SetWidth(140) UIDropDownMenu_SetWidth(140)
@@ -35,7 +35,7 @@
</Frame> </Frame>
<Frame name="$parentQualityDropDown" inherits="UIDropDownMenuTemplate"> <Frame name="$parentQualityDropDown" inherits="UIDropDownMenuTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="-8" y="-95" /></Offset></Anchor></Anchors> <Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="-8" y="-98" /></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnLoad> <OnLoad>
UIDropDownMenu_SetWidth(140) UIDropDownMenu_SetWidth(140)
@@ -48,7 +48,7 @@
</Frame> </Frame>
<CheckButton name="$parentUsableCheckButton" inherits="UICheckButtonTemplate"> <CheckButton name="$parentUsableCheckButton" inherits="UICheckButtonTemplate">
<Size><AbsDimension x="22" y="22"/></Size> <Size><AbsDimension x="22" y="22"/></Size>
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="87" y="-135" /></Offset></Anchor></Anchors> <Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="87" y="-136" /></Offset></Anchor></Anchors>
</CheckButton> </CheckButton>
<CheckButton name="$parentAllPagesCheckButton" inherits="UICheckButtonTemplate" checked="true"> <CheckButton name="$parentAllPagesCheckButton" inherits="UICheckButtonTemplate" checked="true">
<Size><AbsDimension x="22" y="22"/></Size> <Size><AbsDimension x="22" y="22"/></Size>
+18 -55
View File
@@ -19,6 +19,7 @@ end
function public.on_close() function public.on_close()
private.clear_selection() private.clear_selection()
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
end end
function public.on_open() function public.on_open()
@@ -132,33 +133,7 @@ function public.on_load()
cell.text:SetText(getn(Aux.util.filter(group, function(auction) return not auction.gone end))) cell.text:SetText(getn(Aux.util.filter(group, function(auction) return not auction.gone end)))
end, end,
}, },
{ Aux.listing_util.percentage_market_column(function(group) return group[1].item_key end, function(group) return group[1].buyout_price_per_unit end),
title = 'Pct',
width = 40,
comparator = function(group1, group2)
local market_price1 = Aux.history.market_value(group1[1].item_key)
local market_price2 = Aux.history.market_value(group2[1].item_key)
local factor1 = market_price1 > 0 and group1[1].buyout_price_per_unit / market_price1
local factor2 = market_price2 > 0 and group2[1].buyout_price_per_unit / market_price2
return Aux.util.compare(factor1, factor2, Aux.util.GT)
end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, group)
local market_price = Aux.history.market_value(group[1].item_key)
local pct = market_price > 0 and ceil(100 / market_price * group[1].buyout_price_per_unit)
if not pct then
cell.text:SetText('N/A')
elseif pct > 999 then
cell.text:SetText('>999%')
else
cell.text:SetText(pct..'%')
end
if pct then
cell.text:SetTextColor(Aux.price_level_color(pct))
end
end,
},
}, },
sort_order = {{column = 3, order = 'ascending' }}, sort_order = {{column = 3, order = 'ascending' }},
}, },
@@ -344,33 +319,7 @@ function public.on_load()
cell.text:SetText(datum.page) cell.text:SetText(datum.page)
end, end,
}, },
{ Aux.listing_util.percentage_market_column(function(entry) return entry.item_key end, function(entry) return entry.buyout_price_per_unit end),
title = 'Pct',
width = 40,
comparator = function(row1, row2)
local market_price1 = Aux.history.market_value(row1.item_key)
local market_price2 = Aux.history.market_value(row2.item_key)
local factor1 = market_price1 > 0 and row1.buyout_price_per_unit and row1.buyout_price_per_unit / market_price1
local factor2 = market_price2 > 0 and row2.buyout_price_per_unit and row2.buyout_price_per_unit / market_price2
return Aux.util.compare(factor1, factor2, Aux.util.GT)
end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
local market_price = Aux.history.market_value(datum.item_key)
local pct = market_price > 0 and datum.buyout_price_per_unit and ceil(100 / market_price * datum.buyout_price_per_unit)
if not pct then
cell.text:SetText('N/A')
elseif pct > 999 then
cell.text:SetText('>999%')
else
cell.text:SetText(pct..'%')
end
if pct then
cell.text:SetTextColor(Aux.price_level_color(pct))
end
end,
},
}, },
sort_order = {{column = 5, order = 'ascending'}}, sort_order = {{column = 5, order = 'ascending'}},
}, },
@@ -448,7 +397,7 @@ function public.on_load()
status_bar:SetWidth(265) status_bar:SetWidth(265)
status_bar:SetHeight(30) status_bar:SetHeight(30)
status_bar:SetPoint('BOTTOMLEFT', AuxItemSearchFrame, 'BOTTOMLEFT', 6, 6) status_bar:SetPoint('BOTTOMLEFT', AuxItemSearchFrame, 'BOTTOMLEFT', 6, 6)
status_bar:update_status(0,0) status_bar:update_status(100, 0)
status_bar:set_text('') status_bar:set_text('')
private.status_bar = status_bar private.status_bar = status_bar
end end
@@ -461,6 +410,15 @@ function public.on_load()
btn:Disable() btn:Disable()
private.buyout_button = btn private.buyout_button = btn
end end
do
local btn = Aux.gui.button(AuxItemSearchFrame, 15)
btn:SetPoint('TOPLEFT', private.buyout_button, 'TOPRIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Bid')
btn:Disable()
private.bid_button = btn
end
do do
local editbox = Aux.gui.editbox(AuxItemSearchFrameItem, '$parentPageEditBox') local editbox = Aux.gui.editbox(AuxItemSearchFrameItem, '$parentPageEditBox')
editbox:SetNumeric(true) editbox:SetNumeric(true)
@@ -528,6 +486,7 @@ end
function public.set_view(view) function public.set_view(view)
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
private.clear_selection() private.clear_selection()
aux_view = view aux_view = view
update_listing() update_listing()
@@ -708,6 +667,7 @@ function find_auction(entry, express_mode, buyout_mode)
if not test(index) then if not test(index) then
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
return find_auction(entry, express_mode, buyout_mode) -- try again return find_auction(entry, express_mode, buyout_mode) -- try again
end end
@@ -717,10 +677,12 @@ function find_auction(entry, express_mode, buyout_mode)
Aux.place_bid('list', index, entry.buyout_price) Aux.place_bid('list', index, entry.buyout_price)
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
private.clear_selection() private.clear_selection()
refresh = true refresh = true
end) end)
private.buyout_button:Enable() private.buyout_button:Enable()
private.bid_button:Enable()
end end
end) end)
end end
@@ -746,6 +708,7 @@ function private.on_row_click(sheet, datum, grouped)
elseif not entry.gone then elseif not entry.gone then
if not express_mode then if not express_mode then
private.buyout_button:Disable() private.buyout_button:Disable()
private.bid_button:Disable()
sheet:clear_selection() sheet:clear_selection()
sheet:select(datum) sheet:select(datum)
end end
+30
View File
@@ -12,4 +12,34 @@ function m.money_column(name, getter)
-- group_alpha_setter(cell, getter(datum)) -- group_alpha_setter(cell, getter(datum))
end, end,
} }
end
function m.percentage_market_column(item_key_getter, value_getter)
return {
title = 'Pct',
width = 40,
comparator = function(datum1, datum2)
local market_price1 = Aux.history.market_value(item_key_getter(datum1))
local market_price2 = Aux.history.market_value(item_key_getter(datum2))
local factor1 = market_price1 > 0 and value_getter(datum1) / market_price1
local factor2 = market_price2 > 0 and value_getter(datum2) / market_price2
return Aux.util.compare(factor1, factor2, Aux.util.GT)
end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
local market_price = Aux.history.market_value(item_key_getter(datum))
local pct = market_price > 0 and ceil(100 / market_price * value_getter(datum))
if not pct then
cell.text:SetText('N/A')
elseif pct > 999 then
cell.text:SetText('>999%')
else
cell.text:SetText(pct..'%')
end
if pct then
cell.text:SetTextColor(Aux.price_level_color(pct))
end
end,
}
end end
+306 -322
View File
@@ -6,187 +6,198 @@ local existing_auctions = {}
local inventory_data local inventory_data
local bestPriceOurStackSize local update_auction_listing, undercut, refresh_entries, auction_candidates, charge_classes, get_stack_size_slider_value
local current_auction --local LIVE, HISTORICAL, FIXED = {}, {}, {}
local set_auction, update_auction_listing, record_auction, undercut, item_class_index, item_subclass_index, report, select_entry, update_recommendation, refresh_entries, auction_candidates, charge_classes, get_stack_size_slider_value function private.update_inventory_listing()
Aux.sheet.populate(private.listings.inventory, Aux.util.filter(inventory_data, function(item) return item.aux_quantity > 0 end))
local LIVE, HISTORICAL, FIXED = 1, 2, 3
Aux.sell.inventory_listing_config = {
on_row_click = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
set_auction(sheet.data[data_index])
end,
on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_tooltip(sheet.rows[row_index].itemstring, nil, this, 'ANCHOR_LEFT', 0, 0)
end,
on_row_leave = function (sheet, row_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
AuxTooltip:Hide()
end,
row_setter = function(row, datum)
if current_auction and datum == current_auction then
row.highlight:SetAlpha(.5)
else
row.highlight:SetAlpha(0)
end
row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id)
end,
columns = {
{
title = 'Qty',
width = 25,
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)
icon:EnableMouse(false)
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)
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' }},
}
Aux.sell.auction_listing_config = {
on_row_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_row_enter = function (sheet, row_index, column_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
end,
on_row_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{existing_auctions, current_auction.key, '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{existing_auctions, current_auction.key, '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 = 'Qty',
width = 25,
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 == get_stack_size_slider_value() and GREEN_FONT_COLOR_CODE..row.stack_size..FONT_COLOR_CODE_CLOSE or row.stack_size)
end,
},
{
title = 'Buy/ea',
width = 80,
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,
},
},
sort_order = {{column = 5, order = 'ascending' }},
}
function private.parse_inventory()
Aux.sheet.populate(AuxSellInventoryListing.sheet, Aux.util.filter(inventory_data, function(item) return item.aux_quantity > 0 end))
end end
function update_auction_listing() function update_auction_listing()
Aux.sheet.populate(AuxSellAuctionsListing.sheet, current_auction and existing_auctions[current_auction.key] or {}) Aux.sheet.populate(private.listings.auctions, private.current_item() and existing_auctions[private.current_item().key] or {})
end end
function Aux.sell.on_open() function private.current_item()
return private.listings.inventory:get_selected()
end
function private.current_auction()
return private.listings.auctions:get_selected()
end
function public.on_load()
private.inventory_listing_config = {
frame = AuxSellInventoryListing,
on_row_click = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
private.set_item(sheet.data[data_index])
end,
on_row_enter = function (sheet, row_index)
Aux.info.set_tooltip(sheet.rows[row_index].itemstring, nil, this, 'ANCHOR_LEFT', 0, 0)
end,
on_row_leave = function (sheet, row_index)
AuxTooltip:Hide()
end,
row_setter = function(row, datum)
row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id)
end,
columns = {
{
title = 'Qty',
width = 25,
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)
icon:EnableMouse(false)
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)
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' }},
}
private.auction_listing_config = {
frame = AuxSellAuctionsListing,
on_row_click = function (sheet, row_index, column_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
private.set_auction(sheet.data[data_index])
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 = 'Qty',
width = 25,
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 == get_stack_size_slider_value() and GREEN_FONT_COLOR_CODE..row.stack_size..FONT_COLOR_CODE_CLOSE or row.stack_size)
end,
},
{
title = 'Buy/ea',
width = 80,
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,
},
Aux.listing_util.percentage_market_column(function(entry) return entry.item_key end, function(entry) return entry.unit_buyout_price end),
},
sort_order = {{column = 5, order = 'ascending' }},
}
private.listings = {
inventory = Aux.sheet.create(private.inventory_listing_config),
auctions = Aux.sheet.create(private.auction_listing_config),
}
do
local status_bar = Aux.gui.status_bar(AuxSellFrame)
status_bar:SetWidth(265)
status_bar:SetHeight(30)
status_bar:SetPoint('BOTTOMLEFT', AuxSellFrame, 'BOTTOMLEFT', 6, 6)
status_bar:update_status(100, 0)
status_bar:set_text('')
private.status_bar = status_bar
end
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentPostButton')
btn:SetPoint('TOPLEFT', private.status_bar, 'TOPRIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Post')
btn:SetScript('OnClick', private.post_auctions)
private.post_button = btn
end
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentRefreshButton')
btn:SetPoint('TOPLEFT', private.post_button, 'TOPRIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Refresh')
btn:SetScript('OnClick', private.refresh)
private.refresh_button = btn
end
end
function public.on_open()
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0) MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0)
AuxSellInventory:SetWidth(AuxSellInventoryListing:GetWidth() + 40) AuxSellInventory:SetWidth(AuxSellInventoryListing:GetWidth() + 40)
AuxSellAuctions:SetWidth(AuxSellAuctionsListing:GetWidth() + 40) AuxSellAuctions:SetWidth(AuxSellAuctionsListing:GetWidth() + 40)
@@ -211,37 +222,18 @@ function Aux.sell.on_open()
Aux.sell.validate_parameters() Aux.sell.validate_parameters()
update_inventory_data() private.update_inventory_data()
private.parse_inventory() private.update_inventory_listing()
update_auction_listing() update_auction_listing()
update_recommendation() private.update_recommendation()
end end
function Aux.sell.on_close() function public.on_close()
end end
function public.on_load()
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentPostButton')
btn:SetPoint('BOTTOMLEFT', 8, 15)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Post')
btn:SetScript('OnClick', private.post_auctions)
end
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentRefreshButton')
btn:SetPoint('LEFT', AuxSellParametersPostButton,'RIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Refresh')
btn:SetScript('OnClick', private.refresh)
end
end
function Aux.sell.duration_radio_button_on_click(index) function Aux.sell.duration_radio_button_on_click(index)
AuxSellParametersShortDurationRadio:SetChecked(false) AuxSellParametersShortDurationRadio:SetChecked(false)
AuxSellParametersMediumDurationRadio:SetChecked(false) AuxSellParametersMediumDurationRadio:SetChecked(false)
@@ -259,7 +251,7 @@ function Aux.sell.duration_radio_button_on_click(index)
AuctionFrameAuctions.duration = 1440 AuctionFrameAuctions.duration = 1440
AUX_AUCTION_DURATION = 'long' AUX_AUCTION_DURATION = 'long'
end end
update_recommendation() private.update_recommendation()
end end
function Aux_Sell_SetAuctionDuration(duration) function Aux_Sell_SetAuctionDuration(duration)
@@ -272,8 +264,8 @@ function Aux_Sell_SetAuctionDuration(duration)
end end
end end
function Aux.sell.post_auctions() function private.post_auctions()
local auction = current_auction local auction = private.current_item()
if auction then if auction then
local key, hyperlink, stack_size, buyout_price, stack_count = auction.key, auction.hyperlink, get_stack_size_slider_value(), MoneyInputFrame_GetCopper(AuxSellParametersBuyoutPrice), AuxSellStackCountSlider:GetValue() local key, hyperlink, stack_size, buyout_price, stack_count = auction.key, auction.hyperlink, get_stack_size_slider_value(), MoneyInputFrame_GetCopper(AuxSellParametersBuyoutPrice), AuxSellStackCountSlider:GetValue()
local duration local duration
@@ -284,7 +276,7 @@ function Aux.sell.post_auctions()
elseif AuctionFrameAuctions.duration == 1440 then elseif AuctionFrameAuctions.duration == 1440 then
duration = 4 duration = 4
end end
Aux.post.start( Aux.post.start(
key, key,
stack_size, stack_size,
@@ -294,12 +286,13 @@ function Aux.sell.post_auctions()
stack_count, stack_count,
function(posted) function(posted)
for i = 1, posted do for i = 1, posted do
record_auction(key, stack_size, buyout_price, duration, UnitName('player')) private.record_auction(key, stack_size, buyout_price, duration, UnitName('player'))
end end
if existing_auctions[key] then if existing_auctions[key] then
for _, entry in ipairs(existing_auctions[key]) do for _, entry in ipairs(existing_auctions[key]) do
if entry.buyout_price == buyout_price and entry.stack_size == stack_size then if entry.buyout_price == buyout_price and entry.stack_size == stack_size then
existing_auctions[key].selected = entry existing_auctions[key].selected = entry
private.listings.auctions:select(entry)
end end
end end
end end
@@ -308,41 +301,37 @@ function Aux.sell.post_auctions()
local charge_class = auction.charges or 0 local charge_class = auction.charges or 0
auction.availability[charge_class] = auction.availability[charge_class] - (posted * (auction.charges and 1 or stack_size)) auction.availability[charge_class] = auction.availability[charge_class] - (posted * (auction.charges and 1 or stack_size))
private.parse_inventory() private.update_inventory_listing()
report(hyperlink, stack_size, buyout_price, posted)
end end
) )
end end
end end
function select_entry() function private.select_auction()
if current_auction and existing_auctions[current_auction.key] and not existing_auctions[current_auction.key].selected then if not private.current_auction() and getn(existing_auctions[private.current_item().key]) > 0 then
local bestPrice = {} -- a table with one entry per stack_size that is the cheapest auction for that particular stack_size local cheapest_for_size = {}
local absoluteBest -- the overall cheapest auction local cheapest
----- find the best price per stacksize and overall ----- for _, auction_entry in ipairs(existing_auctions[private.current_item().key]) do
if not cheapest_for_size[auction_entry.stack_size] or cheapest_for_size[auction_entry.stack_size].unit_buyout_price >= auction_entry.unit_buyout_price then
for _, auction_datum in ipairs(existing_auctions[current_auction.key]) do cheapest_for_size[auction_entry.stack_size] = auction_entry
if not bestPrice[auction_datum.stack_size] or bestPrice[auction_datum.stack_size].unit_buyout_price >= auction_datum.unit_buyout_price then
bestPrice[auction_datum.stack_size] = auction_datum
end end
if not absoluteBest or absoluteBest.unit_buyout_price > auction_datum.unit_buyout_price then
absoluteBest = auction_datum
end
end
existing_auctions[current_auction.key].selected = absoluteBest
if bestPrice[get_stack_size_slider_value()] then if not cheapest or cheapest.unit_buyout_price > auction_entry.unit_buyout_price then
existing_auctions[current_auction.key].selected = bestPrice[get_stack_size_slider_value()] cheapest = auction_entry
bestPriceOurStackSize = bestPrice[get_stack_size_slider_value()] end
end end
local auction = cheapest_for_size[get_stack_size_slider_value()] or cheapest
existing_auctions[private.current_item().key].selected = auction
private.listings.auctions:clear_selection()
private.listings.auctions:select(auction)
end end
end end
function get_stack_size_slider_value() function get_stack_size_slider_value()
if current_auction.charges then if private.current_item().charges then
return AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()] return AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()]
else else
return AuxSellStackSizeSlider:GetValue() return AuxSellStackSizeSlider:GetValue()
@@ -350,10 +339,10 @@ function get_stack_size_slider_value()
end end
function Aux.sell.validate_parameters() function Aux.sell.validate_parameters()
AuxSellParametersPostButton:Disable() private.post_button:Disable()
AuxSellParametersBuyoutPriceErrorText:Hide() AuxSellParametersBuyoutPriceErrorText:Hide()
if not current_auction then if not private.current_item() then
return return
end end
@@ -366,15 +355,14 @@ function Aux.sell.validate_parameters()
return return
end end
AuxSellParametersPostButton:Enable() private.post_button:Enable()
end end
function update_recommendation() function private.update_recommendation()
-- AuxSellParametersStrategyDropDownStaleWarning:SetText()
if not private.current_item() then
private.refresh_button:Disable()
if not current_auction then
AuxSellParametersRefreshButton:Disable()
AuxSellParametersItemIconTexture:SetTexture(nil) AuxSellParametersItemIconTexture:SetTexture(nil)
AuxSellParametersItemCount:SetText() AuxSellParametersItemCount:SetText()
AuxSellParametersItemName:SetText() AuxSellParametersItemName:SetText()
@@ -382,51 +370,55 @@ function update_recommendation()
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, 0) MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, 0)
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, 0) MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, 0)
AuxSellStackSizeSlider:SetMinMaxValues(0,0) AuxSellStackSizeSlider:SetMinMaxValues(0, 0)
AuxSellStackSize:SetNumber(0) AuxSellStackSize:SetNumber(0)
AuxSellStackCountSlider:SetMinMaxValues(0,0) AuxSellStackCountSlider:SetMinMaxValues(0, 0)
AuxSellStackCount:SetNumber(0) AuxSellStackCount:SetNumber(0)
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0) MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0)
else else
AuxSellStackSize:SetNumber(current_auction.charges and AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()] or AuxSellStackSizeSlider:GetValue()) AuxSellStackSize:SetNumber(private.current_item().charges and AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()] or AuxSellStackSizeSlider:GetValue())
AuxSellStackCount:SetNumber(AuxSellStackCountSlider:GetValue()) AuxSellStackCount:SetNumber(AuxSellStackCountSlider:GetValue())
AuxSellParametersItemIconTexture:SetTexture(current_auction.texture) AuxSellParametersItemIconTexture:SetTexture(private.current_item().texture)
AuxSellParametersItemName:SetText(current_auction.name) AuxSellParametersItemName:SetText(private.current_item().name)
local color = ITEM_QUALITY_COLORS[current_auction.quality] local color = ITEM_QUALITY_COLORS[private.current_item().quality]
AuxSellParametersItemName:SetTextColor(color.r, color.g, color.b) AuxSellParametersItemName:SetTextColor(color.r, color.g, color.b)
if current_auction.aux_quantity > 1 then if private.current_item().aux_quantity > 1 then
AuxSellParametersItemCount:SetText(current_auction.aux_quantity) AuxSellParametersItemCount:SetText(private.current_item().aux_quantity)
else else
AuxSellParametersItemCount:SetText() AuxSellParametersItemCount:SetText()
end end
AuxSellParametersRefreshButton:Enable() private.refresh_button:Enable()
-- TODO neutral AH deposit formula -- TODO neutral AH deposit formula
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', floor(current_auction.unit_vendor_price * 0.05 * (current_auction.charges and 1 or get_stack_size_slider_value())) * AuxSellStackCountSlider:GetValue() * AuctionFrameAuctions.duration / 120) MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', floor(private.current_item().unit_vendor_price * 0.05 * (private.current_item().charges and 1 or get_stack_size_slider_value())) * AuxSellStackCountSlider:GetValue() * AuctionFrameAuctions.duration / 120)
if existing_auctions[current_auction.key] and existing_auctions[current_auction.key].selected then
local new_buyout_price = existing_auctions[current_auction.key].selected.unit_buyout_price * get_stack_size_slider_value() if existing_auctions[private.current_item().key] then
private.select_auction()
if existing_auctions[current_auction.key].selected.yours == 0 then if private.current_auction() then
new_buyout_price = undercut(new_buyout_price)
end
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(new_buyout_price * 0.95))) local new_buyout_price = private.current_auction().unit_buyout_price * get_stack_size_slider_value()
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(new_buyout_price)))
elseif existing_auctions[current_auction.key] then -- unsuccessful search if private.current_auction().yours == 0 then
new_buyout_price = undercut(new_buyout_price)
end
local market_value = Aux.history.market_value(current_auction.key) MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(new_buyout_price * 0.95)))
if market_value then MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(new_buyout_price)))
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(market_value * 0.95)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(market_value))) elseif existing_auctions[private.current_item().key] then -- unsuccessful search
else
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(current_auction.unit_vendor_price * (current_auction.charges and 1 or get_stack_size_slider_value()) * 1.053))) local market_value = Aux.history.market_value(private.current_item().key)
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(current_auction.unit_vendor_price * (current_auction.charges and 1 or get_stack_size_slider_value()) * 4))) if market_value then
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(market_value * 0.95)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(market_value)))
else
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(private.current_item().unit_vendor_price * (private.current_item().charges and 1 or get_stack_size_slider_value()) * 1.053)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(private.current_item().unit_vendor_price * (private.current_item().charges and 1 or get_stack_size_slider_value()) * 4)))
end
end end
else -- no search yet else -- no search yet
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, 0) MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, 0)
@@ -436,46 +428,49 @@ function update_recommendation()
end end
function Aux.sell.quantity_update() function Aux.sell.quantity_update()
if current_auction then if private.current_item() then
AuxSellStackCountSlider:SetMinMaxValues(1, current_auction.charges and current_auction.availability[AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()]] or floor(current_auction.availability[0] / get_stack_size_slider_value())) AuxSellStackCountSlider:SetMinMaxValues(1, private.current_item().charges and private.current_item().availability[AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()]] or floor(private.current_item().availability[0] / get_stack_size_slider_value()))
end end
select_entry() private.update_recommendation()
update_recommendation()
update_auction_listing() update_auction_listing()
end end
function Aux.sell.clear_auction() function Aux.sell.clear_auction()
current_auction = nil private.listings.inventory:clear_selection()
select_entry() private.update_recommendation()
update_recommendation()
end end
function set_auction(auction_candidate) function private.set_item(item)
private.listings.auctions:clear_selection()
private.listings.inventory:clear_selection()
private.listings.inventory:select(item)
local new_auction = Aux.util.safe_index{existing_auctions, item.key, 'selected' }
if new_auction then
private.listings.auctions:select(new_auction)
end
PlaySound('igMainMenuOptionCheckBoxOn') PlaySound('igMainMenuOptionCheckBoxOn')
Aux.scan.abort(function() Aux.scan.abort(function()
current_auction = auction_candidate private.update_inventory_listing()
private.parse_inventory()
local charge_classes = charge_classes(current_auction.availability) local charge_classes = charge_classes(private.current_item().availability)
AuxSellStackSizeSlider.charge_classes = current_auction.charges and charge_classes AuxSellStackSizeSlider.charge_classes = private.current_item().charges and charge_classes
local stack_size_slider_max = current_auction.charges and getn(charge_classes) or min(current_auction.max_stack, current_auction.availability[0]) local stack_size_slider_max = private.current_item().charges and getn(charge_classes) or min(private.current_item().max_stack, private.current_item().availability[0])
AuxSellStackSizeSlider:SetMinMaxValues(1, stack_size_slider_max) AuxSellStackSizeSlider:SetMinMaxValues(1, stack_size_slider_max)
AuxSellStackSizeSlider:SetValue(stack_size_slider_max) AuxSellStackSizeSlider:SetValue(stack_size_slider_max)
Aux.sell.quantity_update() Aux.sell.quantity_update()
AuxSellStackCountSlider:SetValue(current_auction.aux_quantity) -- reduced to max possible AuxSellStackCountSlider:SetValue(private.current_item().aux_quantity) -- reduced to max possible
if not existing_auctions[current_auction.key] then if not existing_auctions[private.current_item().key] then
refresh_entries() refresh_entries()
end end
select_entry() private.update_recommendation()
update_recommendation()
update_auction_listing() update_auction_listing()
end) end)
end end
@@ -489,9 +484,9 @@ function charge_classes(availability)
return charge_classes return charge_classes
end end
function update_inventory_data() function private.update_inventory_data()
inventory_data = {} inventory_data = {}
private.parse_inventory() private.update_inventory_listing()
local auction_candidate_map = {} local auction_candidate_map = {}
@@ -535,7 +530,7 @@ function update_inventory_data()
key = item_info.item_key, key = item_info.item_key,
hyperlink = item_info.hyperlink, hyperlink = item_info.hyperlink,
name = item_info.name, name = item_info.name,
texture = item_info.texture, texture = item_info.texture,
quality = item_info.quality, quality = item_info.quality,
@@ -567,13 +562,13 @@ function update_inventory_data()
tinsert(auction_candidates, auction_candidate) tinsert(auction_candidates, auction_candidate)
end end
inventory_data = auction_candidates inventory_data = auction_candidates
private.parse_inventory() private.update_inventory_listing()
end) end)
end end
function refresh_entries() function refresh_entries()
if current_auction then if private.current_item() then
local item_id, suffix_id = current_auction.item_id, current_auction.suffix_id local item_id, suffix_id = private.current_item().item_id, private.current_item().suffix_id
local item_key = item_id..':'..suffix_id local item_key = item_id..':'..suffix_id
local item_info = Aux.info.item(item_id, suffix_id) local item_info = Aux.info.item(item_id, suffix_id)
@@ -594,29 +589,32 @@ function refresh_entries()
usable = item_info.usable, usable = item_info.usable,
} }
Aux.log('Scanning auctions ...') private.status_bar:update_status(0,0)
private.status_bar:set_text('Scanning auctions...')
Aux.scan.start{ Aux.scan.start{
query = search_query, query = search_query,
page = 0, page = 0,
on_page_loaded = function(page, total_pages) on_page_loaded = function(page, total_pages)
Aux.log('Scanning page '..(page + 1)..' out of '..total_pages..' ...') private.status_bar:update_status(100 * (page + 1) / total_pages, 100 * (page + 1) / total_pages) -- TODO
private.status_bar:set_text(string.format('Scanning (Page %d / %d)', page + 1, total_pages))
end, end,
on_read_auction = function(auction_info) on_read_auction = function(auction_info)
if auction_info.name == item_info.name then if auction_info.item_key == item_key then
local aux_quantity = auction_info.charges or auction_info.count private.record_auction(auction_info.item_key, auction_info.aux_quantity, auction_info.buyout_price, auction_info.duration, auction_info.owner)
record_auction(auction_info.item_key, aux_quantity, auction_info.buyout_price, auction_info.duration, auction_info.owner)
end end
end, end,
on_abort = function() on_abort = function()
existing_auctions[item_key] = nil existing_auctions[item_key] = nil
Aux.log('Scan aborted.') private.status_bar:update_status(100, 100)
private.status_bar:set_text('Done Scanning')
end, end,
on_complete = function() on_complete = function()
existing_auctions[item_key] = existing_auctions[item_key] or { created = GetTime() } existing_auctions[item_key] = existing_auctions[item_key] or { created = time() }
select_entry() private.update_recommendation()
update_recommendation()
update_auction_listing() update_auction_listing()
Aux.log('Scan complete: '..getn(existing_auctions[item_key])..' '..Aux_PluralizeIf('auction', getn(existing_auctions[item_key]))..' found.') private.status_bar:update_status(100, 100)
private.status_bar:set_text('Done Scanning')
end, end,
next_page = function(page, total_pages) next_page = function(page, total_pages)
local last_page = max(total_pages - 1, 0) local last_page = max(total_pages - 1, 0)
@@ -628,12 +626,13 @@ function refresh_entries()
end end
end end
function AuxSellEntry_OnClick(entry) function private.set_auction(entry)
existing_auctions[current_auction.key].selected = entry existing_auctions[private.current_item().key].selected = entry
private.listings.auctions:clear_selection()
private.listings.auctions:select(entry)
update_auction_listing() private.update_recommendation()
update_recommendation()
PlaySound('igMainMenuOptionCheckBoxOn') PlaySound('igMainMenuOptionCheckBoxOn')
end end
@@ -641,38 +640,34 @@ end
function private.refresh() function private.refresh()
Aux.scan.abort(function() Aux.scan.abort(function()
refresh_entries() refresh_entries()
select_entry() private.update_recommendation()
update_recommendation()
update_auction_listing() update_auction_listing()
end) end)
end end
function record_auction(key, aux_quantity, buyout_price, duration, owner) function private.record_auction(key, aux_quantity, buyout_price, duration, owner)
if buyout_price > 0 then if buyout_price > 0 then
existing_auctions[key] = existing_auctions[key] or { created = GetTime() } existing_auctions[key] = existing_auctions[key] or { created = GetTime() }
local entry local entry
for _, existingEntry in ipairs(existing_auctions[key]) do for _, existing_entry in ipairs(existing_auctions[key]) do
if existingEntry.buyout_price == buyout_price and existingEntry.stack_size == aux_quantity then if buyout_price == existing_entry.buyout_price and aux_quantity == existing_entry.stack_size then
entry = existingEntry entry = existing_entry
end end
end end
if entry then if entry then
entry.count = entry.count + 1 entry.count = entry.count + 1
entry.yours = entry.yours + (owner == UnitName("player") and 1 or 0) entry.yours = entry.yours + (owner == UnitName('player') and 1 or 0)
entry.max_time_left = max(entry.max_time_left, duration) entry.max_time_left = max(entry.max_time_left, duration)
else else
entry = { tinsert(existing_auctions[key], {
key = aux_quantity..':'..buyout_price, item_key = key,
stack_size = aux_quantity, stack_size = aux_quantity,
buyout_price = buyout_price, buyout_price = buyout_price,
unit_buyout_price = buyout_price / aux_quantity, unit_buyout_price = buyout_price / aux_quantity,
max_time_left = duration, max_time_left = duration,
count = 1, count = 1,
yours = owner == UnitName("player") and 1 or 0, yours = owner == UnitName('player') and 1 or 0,
} })
tinsert(existing_auctions[key], entry)
table.sort(existing_auctions[key], function(a,b) return a.unit_buyout_price < b.unit_buyout_price end)
end end
end end
end end
@@ -681,17 +676,6 @@ function undercut(price)
return math.max(0, price - 1) return math.max(0, price - 1)
end end
function report(hyperlink, aux_quantity, buyout_price, posted)
Aux.log(string.format(
'%i %s of %s (%i) posted at %s.',
posted,
Aux_PluralizeIf('auction', posted),
hyperlink,
aux_quantity,
Aux.util.money_string(buyout_price)
))
end
--function Aux.sell.initialize_strategy_dropdown() --function Aux.sell.initialize_strategy_dropdown()
-- --
-- local function on_click() -- local function on_click()
+15 -43
View File
@@ -11,42 +11,28 @@
<Frame name="AuxSellInventory" inherits="AuxFrameBoxTemplate"> <Frame name="AuxSellInventory" inherits="AuxFrameBoxTemplate">
<Size><AbsDimension x="260" y="326"/></Size> <Size><AbsDimension x="260" y="326"/></Size>
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="5" y="-35"/></Offset></Anchor></Anchors> <Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="5" y="-35"/></Offset></Anchor></Anchors>
<Scripts> <!--<Scripts>-->
<OnLoad> <!--<OnLoad>-->
getglobal(this:GetName().."Title"):SetText('Inventory') <!--getglobal(this:GetName().."Title"):SetText('Inventory')-->
</OnLoad> <!--</OnLoad>-->
</Scripts> <!--</Scripts>-->
<Frames> <Frames>
<Frame name="$parentListing"> <Frame name="$parentListing">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor> <Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
<Anchor point="BOTTOM"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor> <Anchor point="BOTTOM"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
</Anchors> </Anchors>
<Scripts>
<OnLoad>
local config = Aux.sell.inventory_listing_config
this.sheet = Aux.sheet.create{
frame = this,
columns = config.columns,
sort_order = config.sort_order,
row_setter = config.row_setter,
on_row_click = config.on_row_click,
on_row_enter = config.on_row_enter,
on_row_leave = config.on_row_leave,
}
</OnLoad>
</Scripts>
</Frame> </Frame>
</Frames> </Frames>
</Frame> </Frame>
<frame name="AuxSellParameters" inherits="AuxFrameBoxTemplate"> <frame name="AuxSellParameters" inherits="AuxFrameBoxTemplate">
<Size><AbsDimension x="213" y="326"/></Size> <Size><AbsDimension x="213" y="326"/></Size>
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPRIGHT" relativeTo="AuxSellInventory"><Offset><AbsDimension x="3" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="TOPLEFT" relativePoint="TOPRIGHT" relativeTo="AuxSellInventory"><Offset><AbsDimension x="3" y="0"/></Offset></Anchor></Anchors>
<Scripts> <!--<Scripts>-->
<OnLoad> <!--<OnLoad>-->
getglobal(this:GetName().."Title"):SetText('Parameters') <!--getglobal(this:GetName().."Title"):SetText('Parameters')-->
</OnLoad> <!--</OnLoad>-->
</Scripts> <!--</Scripts>-->
<Layers> <Layers>
<Layer level="BACKGROUND"> <Layer level="BACKGROUND">
<FontString name="$parentDepositLabel" inherits="GameFontNormal" text="Deposit:"> <FontString name="$parentDepositLabel" inherits="GameFontNormal" text="Deposit:">
@@ -247,31 +233,17 @@
<Frame name="AuxSellAuctions" inherits="AuxFrameBoxTemplate"> <Frame name="AuxSellAuctions" inherits="AuxFrameBoxTemplate">
<Size><AbsDimension x="361" y="326"/></Size> <Size><AbsDimension x="361" y="326"/></Size>
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPRIGHT" relativeTo="AuxSellParameters"><Offset><AbsDimension x="3" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="TOPLEFT" relativePoint="TOPRIGHT" relativeTo="AuxSellParameters"><Offset><AbsDimension x="3" y="0"/></Offset></Anchor></Anchors>
<Scripts> <!--<Scripts>-->
<OnLoad> <!--<OnLoad>-->
getglobal(this:GetName().."Title"):SetText('Existing Auctions') <!--getglobal(this:GetName().."Title"):SetText('Existing Auctions')-->
</OnLoad> <!--</OnLoad>-->
</Scripts> <!--</Scripts>-->
<Frames> <Frames>
<Frame name="$parentListing"> <Frame name="$parentListing">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor> <Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
<Anchor point="BOTTOM"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor> <Anchor point="BOTTOM"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
</Anchors> </Anchors>
<Scripts>
<OnLoad>
local config = Aux.sell.auction_listing_config
this.sheet = Aux.sheet.create{
frame = this,
columns = config.columns,
sort_order = config.sort_order,
row_setter = config.row_setter,
on_row_click = config.on_row_click,
on_row_enter = config.on_row_enter,
on_row_leave = config.on_row_leave,
}
</OnLoad>
</Scripts>
</Frame> </Frame>
</Frames> </Frames>
</Frame> </Frame>
+26 -14
View File
@@ -28,7 +28,7 @@ function public.render(sheet)
sheet.labels[i].sort_texture:Show() sheet.labels[i].sort_texture:Show()
end end
else else
sheet.labels[i].texture:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") sheet.labels[i].texture:SetTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]])
sheet.labels[i].sort_texture:Hide() sheet.labels[i].sort_texture:Hide()
end end
end end
@@ -47,12 +47,12 @@ function public.render(sheet)
local datum = data[i + offset] local datum = data[i + offset]
if datum then if datum then
if sheet.selected[datum] then
row.highlight:SetAlpha(0.5)
else
row.highlight:SetAlpha(0)
end
if sheet.row_setter then if sheet.row_setter then
if sheet.selected[datum] then
row.highlight:SetAlpha(0.5)
else
row.highlight:SetAlpha(0)
end
sheet.row_setter(row, datum) sheet.row_setter(row, datum)
end end
row:Show() row:Show()
@@ -130,18 +130,18 @@ function public.create(params)
button:SetWidth(column_width) button:SetWidth(column_width)
button:SetHeight(16) button:SetHeight(16)
button:SetID(i) button:SetID(i)
button:SetHighlightTexture('Interface\\QuestFrame\\UI-QuestTitleHighlight') button:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]])
button:SetScript("OnMouseDown", function() Aux.sheet.sort(sheet, this:GetID()) end) button:SetScript('OnMouseDown', function() Aux.sheet.sort(sheet, this:GetID()) end)
button:RegisterForClicks("LeftButtonDown", "RightButtonDown") button:RegisterForClicks('LeftButtonDown', 'RightButtonDown')
local texture = content:CreateTexture(nil, 'ARTWORK') local texture = content:CreateTexture(nil, 'ARTWORK')
texture:SetTexture('Interface\\QuestFrame\\UI-QuestTitleHighlight') texture:SetTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]])
texture:SetTexCoord(0.1, 0.8, 0, 1) texture:SetTexCoord(0.1, 0.8, 0, 1)
texture:SetAllPoints(button) texture:SetAllPoints(button)
button.texture = texture button.texture = texture
local sort_texture = button:CreateTexture(nil, 'ARTWORK') local sort_texture = button:CreateTexture(nil, 'ARTWORK')
sort_texture:SetTexture('Interface\\Buttons\\UI-SortArrow') sort_texture:SetTexture([[Interface\Buttons\UI-SortArrow]])
sort_texture:SetPoint('TOPRIGHT', button, 'TOPRIGHT', 0, 0) sort_texture:SetPoint('TOPRIGHT', button, 'TOPRIGHT', 0, 0)
sort_texture:SetPoint('BOTTOM', button, 'BOTTOM', 0, 0) sort_texture:SetPoint('BOTTOM', button, 'BOTTOM', 0, 0)
sort_texture:SetWidth(12) sort_texture:SetWidth(12)
@@ -149,7 +149,7 @@ function public.create(params)
button.sort_texture = sort_texture button.sort_texture = sort_texture
local background = content:CreateTexture(nil, 'ARTWORK') local background = content:CreateTexture(nil, 'ARTWORK')
background:SetTexture('Interface\\QuestFrame\\UI-QuestTitleHighlight') background:SetTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]])
-- background:SetTextCoord(0.2, 0.9, 0, 0.9) -- background:SetTextCoord(0.2, 0.9, 0, 0.9)
background:SetPoint('TOPLEFT', button, 'BOTTOMLEFT', 0, 0) background:SetPoint('TOPLEFT', button, 'BOTTOMLEFT', 0, 0)
background:SetPoint('TOPRIGHT', button, 'BOTTOMRIGHT', 0, 0) background:SetPoint('TOPRIGHT', button, 'BOTTOMRIGHT', 0, 0)
@@ -186,7 +186,7 @@ function public.create(params)
local row = CreateFrame('Button', nil, content) local row = CreateFrame('Button', nil, content)
row:SetPoint('TOPLEFT', labels[1], 'BOTTOMLEFT', 0, -((row_index-1) * 14)) row:SetPoint('TOPLEFT', labels[1], 'BOTTOMLEFT', 0, -((row_index-1) * 14))
row:SetPoint('TOPRIGHT', labels[getn(params.columns)], 'BOTTOMRIGHT', 0, -((row_index-1) * 14)) row:SetPoint('TOPRIGHT', labels[getn(params.columns)], 'BOTTOMRIGHT', 0, -((row_index-1) * 14))
row:RegisterForClicks("LeftButtonDown", "RightButtonDown") row:RegisterForClicks('LeftButtonDown', 'RightButtonDown')
row:SetHeight(14) row:SetHeight(14)
local row_idx = row_index local row_idx = row_index
@@ -274,6 +274,18 @@ function public.create(params)
self.selected[datum] = false self.selected[datum] = false
public.render(self) public.render(self)
end end
function sheet:get_selection()
local selection = {}
for datum, _ in pairs(self.selected) do
tinsert(selection, datum)
end
return selection
end
function sheet:get_selected()
return self:get_selection()[1]
end
return sheet return sheet
end end
@@ -306,7 +318,7 @@ end
function public.populate(sheet, data) function public.populate(sheet, data)
sheet.data = data sheet.data = data
sheet.selected = {} -- sheet.selected = {}
Aux.util.merge_sort(sheet.data, private.row_comparator(sheet)) Aux.util.merge_sort(sheet.data, private.row_comparator(sheet))