02cfc420dd
this commit does two things 1. it implements auto bid just like auto buy 2. it has some minimum pricing heuristics when posting items. this behavoiur actiaves when the post bid price is set to 0, the buyout price behaves like a minimum
326 lines
11 KiB
Lua
326 lines
11 KiB
Lua
module 'aux.tabs.post'
|
|
|
|
local aux = require 'aux'
|
|
local info = require 'aux.util.info'
|
|
local money = require 'aux.util.money'
|
|
local gui = require 'aux.gui'
|
|
local listing = require 'aux.gui.listing'
|
|
local item_listing = require 'aux.gui.item_listing'
|
|
local search_tab = require 'aux.tabs.search'
|
|
|
|
frame = CreateFrame('Frame', nil, aux.frame)
|
|
frame:SetAllPoints()
|
|
frame:SetScript('OnUpdate', on_update)
|
|
frame:Hide()
|
|
|
|
frame.content = CreateFrame('Frame', nil, frame)
|
|
frame.content:SetPoint('TOP', frame, 'TOP', 0, -8)
|
|
frame.content:SetPoint('BOTTOMLEFT', aux.frame.content, 'BOTTOMLEFT', 0, 0)
|
|
frame.content:SetPoint('BOTTOMRIGHT', aux.frame.content, 'BOTTOMRIGHT', 0, 0)
|
|
|
|
frame.inventory = gui.panel(frame.content)
|
|
frame.inventory:SetWidth(212)
|
|
frame.inventory:SetPoint('TOPLEFT', 0, 0)
|
|
frame.inventory:SetPoint('BOTTOMLEFT', 0, 0)
|
|
|
|
frame.parameters = gui.panel(frame.content)
|
|
frame.parameters:SetHeight(173)
|
|
frame.parameters:SetPoint('TOPLEFT', frame.inventory, 'TOPRIGHT', 2.5, 0)
|
|
frame.parameters:SetPoint('TOPRIGHT', 0, 0)
|
|
|
|
frame.bid_listing = gui.panel(frame.content)
|
|
frame.bid_listing:SetHeight(228)
|
|
frame.bid_listing:SetWidth(271.5)
|
|
frame.bid_listing:SetPoint('BOTTOMLEFT', frame.inventory, 'BOTTOMRIGHT', 2.5, 0)
|
|
|
|
frame.buyout_listing = gui.panel(frame.content)
|
|
frame.buyout_listing:SetHeight(228)
|
|
frame.buyout_listing:SetWidth(271.5)
|
|
frame.buyout_listing:SetPoint('BOTTOMRIGHT', 0, 0)
|
|
|
|
do
|
|
local checkbox = gui.checkbox(frame.inventory)
|
|
checkbox:SetPoint('TOPLEFT', 49, -15)
|
|
checkbox:SetScript('OnClick', function()
|
|
refresh = true
|
|
end)
|
|
local label = gui.label(checkbox, gui.font_size.small)
|
|
label:SetPoint('LEFT', checkbox, 'RIGHT', 4, 1)
|
|
label:SetText('Show hidden items')
|
|
show_hidden_checkbox = checkbox
|
|
end
|
|
|
|
gui.horizontal_line(frame.inventory, -45)
|
|
|
|
do
|
|
local f = CreateFrame('Frame', nil, frame.inventory)
|
|
f:SetPoint('TOPLEFT', 0, -51)
|
|
f:SetPoint('BOTTOMRIGHT', 0, 0)
|
|
inventory_listing = item_listing.new(
|
|
f,
|
|
function()
|
|
if arg1 == 'LeftButton' then
|
|
update_item(this.item_record)
|
|
elseif arg1 == 'RightButton' then
|
|
aux.set_tab(1)
|
|
search_tab.set_filter(strlower(info.item(this.item_record.item_id).name) .. '/exact')
|
|
search_tab.execute(nil, false)
|
|
end
|
|
end,
|
|
function(item_record)
|
|
return item_record == selected_item
|
|
end
|
|
)
|
|
end
|
|
|
|
bid_listing = listing.new(frame.bid_listing)
|
|
bid_listing:SetColInfo{
|
|
{name='Auctions', width=.17, align='CENTER'},
|
|
{name='Time\nLeft', width=.11, align='CENTER'},
|
|
{name='Stack\nSize', width=.11, align='CENTER'},
|
|
{name='Auction Bid\n(per item)', width=.4, align='RIGHT'},
|
|
{name='% Hist.\nValue', width=.21, align='CENTER'},
|
|
}
|
|
bid_listing:SetSelection(function(data)
|
|
return data.record == get_bid_selection() or data.record.historical_value and get_bid_selection() and get_bid_selection().historical_value
|
|
end)
|
|
bid_listing:SetHandler('OnClick', function(table, row_data, column, button)
|
|
if button == 'RightButton' and row_data.record == get_bid_selection() or row_data.record.historical_value and get_bid_selection() and get_bid_selection().historical_value then
|
|
set_bid_selection()
|
|
else
|
|
set_bid_selection(row_data.record)
|
|
end
|
|
refresh = true
|
|
end)
|
|
bid_listing:SetHandler('OnDoubleClick', function(table, row_data, column, button)
|
|
stack_size_slider:SetValue(row_data.record.stack_size)
|
|
refresh = true
|
|
end)
|
|
|
|
buyout_listing = listing.new(frame.buyout_listing)
|
|
buyout_listing:SetColInfo{
|
|
{name='Auctions', width=.17, align='CENTER'},
|
|
{name='Time\nLeft', width=.11, align='CENTER'},
|
|
{name='Stack\nSize', width=.12, align='CENTER'},
|
|
{name='Auction Buyout\n(per item)', width=.4, align='RIGHT'},
|
|
{name='% Hist.\nValue', width=.20, align='CENTER'},
|
|
}
|
|
buyout_listing:SetSelection(function(data)
|
|
return data.record == get_buyout_selection() or data.record.historical_value and get_buyout_selection() and get_buyout_selection().historical_value
|
|
end)
|
|
buyout_listing:SetHandler('OnClick', function(table, row_data, column, button)
|
|
if button == 'RightButton' and row_data.record == get_buyout_selection() or row_data.record.historical_value and get_buyout_selection() and get_buyout_selection().historical_value then
|
|
set_buyout_selection()
|
|
else
|
|
set_buyout_selection(row_data.record)
|
|
end
|
|
refresh = true
|
|
end)
|
|
buyout_listing:SetHandler('OnDoubleClick', function(table, row_data, column, button)
|
|
stack_size_slider:SetValue(row_data.record.stack_size)
|
|
refresh = true
|
|
end)
|
|
|
|
do
|
|
status_bar = gui.status_bar(frame)
|
|
status_bar:SetWidth(265)
|
|
status_bar:SetHeight(25)
|
|
status_bar:SetPoint('TOPLEFT', aux.frame.content, 'BOTTOMLEFT', 0, -6)
|
|
status_bar:update_status(1, 1)
|
|
status_bar:set_text('')
|
|
end
|
|
do
|
|
local btn = gui.button(frame.parameters)
|
|
btn:SetPoint('TOPLEFT', status_bar, 'TOPRIGHT', 5, 0)
|
|
btn:SetText('Post')
|
|
btn:SetScript('OnClick', post_auctions)
|
|
post_button = btn
|
|
end
|
|
do
|
|
local btn = gui.button(frame.parameters)
|
|
btn:SetPoint('TOPLEFT', post_button, 'TOPRIGHT', 5, 0)
|
|
btn:SetText('Refresh')
|
|
btn:SetScript('OnClick', refresh_button_click)
|
|
refresh_button = btn
|
|
end
|
|
do
|
|
item = gui.item(frame.parameters)
|
|
item:SetPoint('TOPLEFT', 10, -6)
|
|
item.button:SetScript('OnEnter', function()
|
|
if selected_item then
|
|
info.set_tooltip(selected_item.itemstring, this, 'ANCHOR_RIGHT')
|
|
end
|
|
end)
|
|
item.button:SetScript('OnLeave', function()
|
|
GameTooltip:Hide()
|
|
end)
|
|
end
|
|
do
|
|
local slider = gui.slider(frame.parameters)
|
|
slider:SetValueStep(1)
|
|
slider:SetPoint('TOPLEFT', 13, -73)
|
|
slider:SetWidth(190)
|
|
slider:SetScript('OnValueChanged', function()
|
|
quantity_update(true)
|
|
end)
|
|
slider.editbox.change = function()
|
|
slider:SetValue(this:GetNumber())
|
|
quantity_update(true)
|
|
if selected_item then
|
|
local settings = read_settings()
|
|
write_settings(settings)
|
|
end
|
|
end
|
|
slider.editbox:SetScript('OnTabPressed', function()
|
|
if IsShiftKeyDown() then
|
|
unit_buyout_price_input:SetFocus()
|
|
elseif stack_count_slider.editbox:IsVisible() then
|
|
stack_count_slider.editbox:SetFocus()
|
|
else
|
|
unit_start_price_input:SetFocus()
|
|
end
|
|
end)
|
|
slider.editbox:SetNumeric(true)
|
|
slider.editbox:SetMaxLetters(3)
|
|
slider.label:SetText('Stack Size')
|
|
stack_size_slider = slider
|
|
end
|
|
do
|
|
local slider = gui.slider(frame.parameters)
|
|
slider:SetValueStep(1)
|
|
slider:SetPoint('TOPLEFT', stack_size_slider, 'BOTTOMLEFT', 0, -32)
|
|
slider:SetWidth(190)
|
|
slider:SetScript('OnValueChanged', function()
|
|
quantity_update()
|
|
end)
|
|
slider.editbox.change = function()
|
|
slider:SetValue(this:GetNumber())
|
|
quantity_update()
|
|
end
|
|
slider.editbox:SetScript('OnTabPressed', function()
|
|
if IsShiftKeyDown() then
|
|
stack_size_slider.editbox:SetFocus()
|
|
else
|
|
unit_start_price_input:SetFocus()
|
|
end
|
|
end)
|
|
slider.editbox:SetNumeric(true)
|
|
slider.label:SetText('Stack Count')
|
|
stack_count_slider = slider
|
|
end
|
|
do
|
|
local dropdown = gui.dropdown(frame.parameters)
|
|
dropdown:SetPoint('TOPLEFT', stack_count_slider, 'BOTTOMLEFT', 0, -22)
|
|
dropdown:SetWidth(90)
|
|
local label = gui.label(dropdown, gui.font_size.small)
|
|
label:SetPoint('BOTTOMLEFT', dropdown, 'TOPLEFT', -2, -3)
|
|
label:SetText('Duration')
|
|
UIDropDownMenu_Initialize(dropdown, initialize_duration_dropdown)
|
|
dropdown:SetScript('OnShow', function()
|
|
UIDropDownMenu_Initialize(this, initialize_duration_dropdown)
|
|
end)
|
|
duration_dropdown = dropdown
|
|
end
|
|
do
|
|
local checkbox = gui.checkbox(frame.parameters)
|
|
checkbox:SetPoint('TOPRIGHT', -83, -6)
|
|
checkbox:SetScript('OnClick', function()
|
|
local settings = read_settings()
|
|
settings.hidden = this:GetChecked()
|
|
write_settings(settings)
|
|
refresh = true
|
|
end)
|
|
local label = gui.label(checkbox, gui.font_size.small)
|
|
label:SetPoint('LEFT', checkbox, 'RIGHT', 4, 1)
|
|
label:SetText('Hide this item')
|
|
hide_checkbox = checkbox
|
|
end
|
|
do
|
|
local editbox = gui.editbox(frame.parameters)
|
|
editbox:SetPoint('TOPRIGHT', -71, -60)
|
|
editbox:SetWidth(180)
|
|
editbox:SetHeight(22)
|
|
editbox:SetAlignment('RIGHT')
|
|
editbox:SetFontSize(17)
|
|
editbox:SetScript('OnTabPressed', function()
|
|
if IsShiftKeyDown() then
|
|
stack_count_slider.editbox:SetFocus()
|
|
else
|
|
unit_buyout_price_input:SetFocus()
|
|
end
|
|
end)
|
|
editbox.formatter = function() return money.to_string(get_unit_start_price(), true) end
|
|
editbox.char = function() set_bid_selection(); set_buyout_selection(); set_unit_start_price(money.from_string(this:GetText())) end
|
|
editbox.change = function() refresh = true end
|
|
editbox.enter = function() this:ClearFocus() end
|
|
editbox.focus_loss = function()
|
|
this:SetText(money.to_string(get_unit_start_price(), true, nil, nil, true))
|
|
end
|
|
do
|
|
local label = gui.label(editbox, gui.font_size.small)
|
|
label:SetPoint('BOTTOMLEFT', editbox, 'TOPLEFT', -2, 1)
|
|
label:SetText('Unit Starting Price')
|
|
end
|
|
do
|
|
local label = gui.label(editbox, 14)
|
|
label:SetPoint('LEFT', editbox, 'RIGHT', 8, 0)
|
|
label:SetWidth(50)
|
|
label:SetJustifyH('CENTER')
|
|
start_price_percentage = label
|
|
end
|
|
unit_start_price_input = editbox
|
|
end
|
|
do
|
|
local editbox = gui.editbox(frame.parameters)
|
|
editbox:SetPoint('TOPRIGHT', unit_start_price_input, 'BOTTOMRIGHT', 0, -19)
|
|
editbox:SetWidth(180)
|
|
editbox:SetHeight(22)
|
|
editbox:SetAlignment('RIGHT')
|
|
editbox:SetFontSize(17)
|
|
editbox:SetScript('OnTabPressed', function()
|
|
if IsShiftKeyDown() then
|
|
unit_start_price_input:SetFocus()
|
|
else
|
|
stack_size_slider.editbox:SetFocus()
|
|
end
|
|
end)
|
|
editbox.formatter = function() return money.to_string(get_unit_buyout_price(), true) end
|
|
editbox.char = function() set_buyout_selection(); set_unit_buyout_price(money.from_string(this:GetText())) end
|
|
editbox.change = function() refresh = true end
|
|
editbox.enter = function() this:ClearFocus() end
|
|
editbox.focus_loss = function()
|
|
this:SetText(money.to_string(get_unit_buyout_price(), true, nil, nil, true))
|
|
end
|
|
do
|
|
local label = gui.label(editbox, gui.font_size.small)
|
|
label:SetPoint('BOTTOMLEFT', editbox, 'TOPLEFT', -2, 1)
|
|
label:SetText('Unit Buyout Price')
|
|
end
|
|
do
|
|
local label = gui.label(editbox, 14)
|
|
label:SetPoint('LEFT', editbox, 'RIGHT', 8, 0)
|
|
label:SetWidth(50)
|
|
label:SetJustifyH('CENTER')
|
|
buyout_price_percentage = label
|
|
end
|
|
unit_buyout_price_input = editbox
|
|
end
|
|
do
|
|
local label = gui.label(frame.parameters, gui.font_size.medium)
|
|
label:SetPoint('TOPLEFT', unit_buyout_price_input, 'BOTTOMLEFT', 0, -24)
|
|
deposit = label
|
|
end
|
|
|
|
function aux.handle.LOAD()
|
|
if not aux.account_data.post_bid then
|
|
frame.bid_listing:Hide()
|
|
frame.buyout_listing:SetPoint('BOTTOMLEFT', frame.inventory, 'BOTTOMRIGHT', 2.5, 0)
|
|
buyout_listing:SetColInfo{
|
|
{name='Auctions', width=.15, align='CENTER'},
|
|
{name='Time Left', width=.15, align='CENTER'},
|
|
{name='Stack Size', width=.15, align='CENTER'},
|
|
{name='Auction Buyout (per item)', width=.4, align='RIGHT'},
|
|
{name='% Hist. Value', width=.15, align='CENTER'},
|
|
}
|
|
end
|
|
end |