diff --git a/Aux-AddOn.toc b/Aux-AddOn.toc
index 1d4be85..1951725 100644
--- a/Aux-AddOn.toc
+++ b/Aux-AddOn.toc
@@ -2,7 +2,7 @@
## 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_database, aux_auctionable_items
+## SavedVariables: aux_database, aux_recently_searched, aux_auctionable_items
core.xml
control.xml
diff --git a/completion.lua b/completion.lua
index f2437a5..571b818 100644
--- a/completion.lua
+++ b/completion.lua
@@ -239,7 +239,6 @@ function Aux.completion.selector(edit_box)
if getn(suggestions) > 0 then
index = math.mod(index, getn(suggestions)) + 1
update_highlighting()
- Aux.item_search_frame.set_item(suggestions[index].value)
end
end
@@ -248,7 +247,6 @@ function Aux.completion.selector(edit_box)
if getn(suggestions) > 0 then
index = index > 1 and index - 1 or getn(suggestions)
update_highlighting()
- Aux.item_search_frame.set_item(suggestions[index].value)
end
end
diff --git a/core.lua b/core.lua
index bf95925..2bf887e 100644
--- a/core.lua
+++ b/core.lua
@@ -1,4 +1,4 @@
-AuxVersion = "2.0.0"
+AuxVersion = "2.1.0"
AuxAuthors = "shirsig; Zerf; Zirco (Auctionator); Nimeral (Auctionator backport)"
local lastRightClickAction = GetTime()
@@ -226,25 +226,19 @@ end
function Aux_ContainerFrameItemButton_OnClick(button)
local bag, slot = this:GetParent():GetID(), this:GetID()
- local container_item = Aux.info.container_item(bag, slot)
+ local container_item_info = Aux.info.container_item(bag, slot)
--- if AuctionFrame:IsVisible() and button == "LeftButton" and container_item then
---
--- if IsShiftKeyDown()
--- and not ChatFrameEditBox:IsVisible()
--- and AuxBuyFrame:IsVisible()
--- then
--- AuxBuyNameInputBox.completor.set_quietly(container_item.name)
--- return
--- elseif AUX_BUY_SHORTCUT and IsAltKeyDown() then
--- if not AuxBuyFrame:IsVisible() then
--- Aux.on_tab_click(1)
--- end
--- AuxBuyNameInputBox.completor.set_quietly(container_item.name)
--- Aux.filter_search_frame.start_search()
--- return
--- end
--- end
+ if AuxFrame:IsVisible() and button == "LeftButton" and container_item_info then
+ if IsAltKeyDown() then
+ if not AuxItemSearchFrame:IsVisible() then
+ Aux.on_tab_click(1)
+ end
+ AuxItemSearchFrameItemItemInputBox:Hide()
+ Aux.item_search_frame.set_item(container_item_info.item_id)
+ return
+ end
+ end
+
return Aux.orig.ContainerFrameItemButton_OnClick(button)
end
@@ -266,4 +260,20 @@ end
function Aux.auction_signature(hyperlink, stack_size, amount)
return hyperlink .. (stack_size or '0') .. '_' .. (amount or '0')
+end
+
+function Aux.item_class_index(item_class)
+ for i, class in ipairs({ GetAuctionItemClasses() }) do
+ if class == item_class then
+ return i
+ end
+ end
+end
+
+function Aux.item_subclass_index(class_index, item_subclass)
+ for i, subclass in ipairs({ GetAuctionItemSubClasses(class_index) }) do
+ if subclass == item_subclass then
+ return i
+ end
+ end
end
\ No newline at end of file
diff --git a/core.xml b/core.xml
index d989b40..6037c02 100644
--- a/core.xml
+++ b/core.xml
@@ -322,12 +322,12 @@
- if this.tooltip then
- Aux.info.set_game_tooltip(this, this.tooltip, 'ANCHOR_LEFT', this.EnhTooltip_info)
+ if this.itemstring then
+ Aux.info.set_tooltip(this.itemstring, this.EnhTooltip_info, this, 'ANCHOR_LEFT')
end
- if this.tooltip then
+ if this.itemstring then
AuxTooltip:Hide()
end
@@ -384,7 +384,7 @@
@@ -326,7 +326,7 @@
local config = Aux.filter_search_frame.views[3]
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_row_click, config.on_row_enter, config.on_row_leave)
+ this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
@@ -340,14 +340,14 @@
-
-
+
+
-
+
@@ -357,7 +357,7 @@
-
+
SmallMoneyFrame_OnLoad()
diff --git a/info.lua b/info.lua
index 5e346ca..071f2bc 100644
--- a/info.lua
+++ b/info.lua
@@ -3,57 +3,70 @@ local TOOLTIP_LENGTH = 30
local private, public = {}, {}
Aux.info = public
-local hyperlink_item, item_id, item_charges, item_signature, parse_item_signature, parse_hyperlink
-
-function Aux.info.container_item(bag, slot)
+function public.container_item(bag, slot)
local hyperlink = GetContainerItemLink(bag, slot)
if not hyperlink then
return
- end
-
- local container_item = hyperlink_item(hyperlink)
- container_item.item_signature = item_signature(hyperlink)
+ end
+
+ local item_id, suffix_id, unique_id, enchant_id = private.parse_hyperlink(hyperlink)
+ local item_info = public.item(item_id, suffix_id, unique_id, enchant_id)
local texture, count, locked, quality, readable, lootable = GetContainerItemInfo(bag, slot)
- container_item.texture = texture
- container_item.count = count
- container_item.locked = locked
- container_item.readable = readable
- container_item.lootable = lootable
- container_item.hyperlink = hyperlink
+ local tooltip = public.tooltip(function(tt) tt:SetBagItem(bag, slot) end)
- container_item.tooltip = Aux.info.tooltip(function(tt) tt:SetBagItem(bag, slot) end)
- container_item.charges = item_charges(container_item.tooltip)
-
- return container_item
+ return {
+ item_id = item_id,
+ suffix_id = suffix_id,
+ unique_id = unique_id,
+ enchant_id = enchant_id,
+
+ hyperlink = hyperlink,
+ itemstring = item_info.itemstring,
+ item_key = item_id..':'..suffix_id,
+
+ name = item_info.name,
+ texture = texture,
+ level = item_info.level,
+ type = item_info.type,
+ subtype = item_info.subtype,
+ quality = quality,
+ max_stack = item_info.max_stack,
+
+ count = count,
+ locked = locked,
+ readable = readable,
+ lootable = lootable,
+
+ tooltip = tooltip,
+ charges = private.item_charges(tooltip),
+ }
end
-function Aux.info.auction_sell_item()
+function public.auction_sell_item()
local name, texture, stack_size, quality, usable, vendor_price = GetAuctionSellItemInfo()
if name then
local unit_vendor_price = vendor_price / stack_size
+ local tooltip = public.tooltip(function(tt) tt:SetAuctionSellItem() end)
- auction_sell_item = {
+ return {
name = name,
texture = texture,
+ quality = quality,
+
stack_size = stack_size,
- quality = quality,
usable = usable,
unit_vendor_price = unit_vendor_price,
- deposit_factor = deposit_factor,
+ tooltip = tooltip,
+ charges = private.item_charges(tooltip),
}
-
- auction_sell_item.tooltip = Aux.info.tooltip(function(tt) tt:SetAuctionSellItem() end)
- auction_sell_item.charges = item_charges(auction_sell_item.tooltip)
-
- return auction_sell_item
end
end
-function Aux.info.auction_item(index, type)
+function public.auction(index, type)
type = type or 'list'
local hyperlink = GetAuctionItemLink(type, index)
@@ -61,36 +74,54 @@ function Aux.info.auction_item(index, type)
if not hyperlink then
return
end
-
- local auction_item = hyperlink_item(hyperlink)
- auction_item.item_signature = item_signature(hyperlink)
-
- local name, texture, count, quality, usable, level, min_bid, min_increment, buyout_price, current_bid, high_bidder, owner, sale_status, id = GetAuctionItemInfo(type, index)
- local duration = GetAuctionItemTimeLeft(type, index)
- auction_item.texture = texture
- auction_item.count = count
- auction_item.min_bid = min_bid
- auction_item.min_increment = min_increment
- auction_item.buyout_price = buyout_price
- auction_item.current_bid = current_bid
- auction_item.high_bidder = high_bidder
- auction_item.owner = owner
- auction_item.sale_status = sale_status
- auction_item.id = id
- auction_item.duration = duration
- auction_item.usable = usable
- auction_item.tooltip = Aux.info.tooltip(function(tt) tt:SetAuctionItem(type, index) end)
- auction_item.charges = item_charges(auction_item.tooltip)
-
- auction_item.EnhTooltip_info = {
- name = auction_item.name,
- hyperlink = auction_item.hyperlink,
- quality = auction_item.quality,
- count = auction_item.count,
- }
-
- return auction_item
+ local item_id, suffix_id, unique_id, enchant_id = private.parse_hyperlink(hyperlink)
+ local item_info = public.item(item_id, suffix_id, unique_id, enchant_id)
+
+ local name, texture, count, quality, usable, level, min_bid, min_increment, buyout_price, current_bid, high_bidder, owner, sale_status = GetAuctionItemInfo(type, index)
+ local duration = GetAuctionItemTimeLeft(type, index)
+ local tooltip = public.tooltip(function(tt) tt:SetAuctionItem(type, index) end)
+
+ return {
+ index = index,
+
+ item_id = item_id,
+ suffix_id = suffix_id,
+ unique_id = unique_id,
+ enchant_id = enchant_id,
+
+ hyperlink = hyperlink,
+ itemstring = item_info.itemstring,
+ item_key = item_id..':'..suffix_id,
+
+ name = name,
+ texture = texture,
+ level = item_info.level,
+ type = item_info.type,
+ subtype = item_info.subtype,
+ quality = quality,
+ max_stack = item_info.max_stack,
+
+ count = count,
+ min_bid = min_bid,
+ min_increment = min_increment,
+ buyout_price = buyout_price,
+ current_bid = current_bid,
+ high_bidder = high_bidder,
+ owner = owner,
+ sale_status = sale_status,
+ duration = duration,
+ usable = usable,
+ tooltip = tooltip,
+ charges = private.item_charges(tooltip),
+
+ EnhTooltip_info = {
+ name = name,
+ hyperlink = hyperlink,
+ quality = quality,
+ count = count,
+ },
+ }
end
function public.reanchor_tooltip()
@@ -102,7 +133,7 @@ function public.reanchor_tooltip()
end
end
-function Aux.info.set_game_tooltip(owner, tooltip, anchor, EnhTooltip_info, x_offset, y_offset)
+function public.set_tooltip(itemstring, EnhTooltip_info, owner, anchor, x_offset, y_offset)
if anchor == 'ANCHOR_CURSOR' and (x_offset or y_offset) then
private.anchor_cursor = true
private.x_offset = x_offset
@@ -112,16 +143,16 @@ function Aux.info.set_game_tooltip(owner, tooltip, anchor, EnhTooltip_info, x_of
private.anchor_cursor = false
end
AuxTooltip:SetOwner(owner, anchor)
- for _, line in ipairs(tooltip) do
- AuxTooltip:AddDoubleLine(line[1].text, line[2].text, line[1].r, line[1].b, line[1].g, line[2].r, line[2].b, line[2].g, true)
- end
+
+ AuxTooltip:SetHyperlink(itemstring)
+
AuxTooltip:Show()
if EnhTooltip and EnhTooltip_info then
- EnhTooltip.TooltipCAux(AuxTooltip, EnhTooltip_info.name, EnhTooltip_info.hyperlink, EnhTooltip_info.quality, EnhTooltip_info.count)
+ EnhTooltip.TooltipCall(AuxTooltip, EnhTooltip_info.name, EnhTooltip_info.hyperlink, EnhTooltip_info.quality, EnhTooltip_info.count)
end
end
-function Aux.info.tooltip_match(patterns, tooltip)
+function public.tooltip_match(patterns, tooltip)
return Aux.util.all(patterns, function(pattern)
return Aux.util.any(tooltip, function(line)
local left_match = line[1].text and strfind(strupper(line[1].text), strupper(pattern), 1, true)
@@ -131,7 +162,7 @@ function Aux.info.tooltip_match(patterns, tooltip)
end)
end
-function Aux.info.tooltip(setter)
+function public.tooltip(setter)
for i = 1, TOOLTIP_LENGTH do
getglobal('AuxInfoTooltipTextLeft'..i):SetText()
getglobal('AuxInfoTooltipTextRight'..i):SetText()
@@ -162,7 +193,7 @@ function Aux.info.tooltip(setter)
return tooltip
end
-function item_charges(tooltip)
+function private.item_charges(tooltip)
for _, line in ipairs(tooltip) do
local _, _, left_charges_string = strfind(line[1].text or '', "^(%d+) Charges")
local _, _, right_charges_string = strfind(line[2].text or '', "^(%d+) Charges$")
@@ -171,33 +202,27 @@ function item_charges(tooltip)
return charges
end
end
-end
-
-function Aux.info.auction(args)
- local index = tremove(args, 1)
-
- local key_set = Aux.util.array_to_set(args)
end
-- not unique!
-function Aux.info.auction_signature(index)
+function public.auction_signature(index)
-- owner not used because waiting for it would slow down the scan too much
local _, _, count, _, _, _, min_bid, _, buyout_price, _, _, owner = GetAuctionItemInfo('list', index)
local hyperlink = GetAuctionItemLink('list', index)
- local item_id, suffix_id, enchant_id, unique_id = parse_hyperlink(hyperlink)
+ local item_id, suffix_id, unique_id, enchant_id = private.parse_hyperlink(hyperlink)
return string.format(
'%s:%s:%s:%s:%s:%s:%s',
item_id or 0,
suffix_id or 0,
- enchant_id or 0,
unique_id or 0,
+ enchant_id or 0,
count or 0,
min_bid or 0,
buyout_price or 0
)
end
-function Aux.info.break_auction_signature(signature)
+function public.break_auction_signature(signature)
local parts = strfind(signature, '^(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)$')
for i=1,2 do
tremove(parts, 1)
@@ -205,36 +230,32 @@ function Aux.info.break_auction_signature(signature)
return unpack(parts)
end
-function item_signature(hyperlink)
- local item_id, suffix_id = parse_hyperlink(hyperlink)
+function public.item_key(hyperlink)
+ local item_id, suffix_id = private.parse_hyperlink(hyperlink)
return item_id..':'..suffix_id
end
-function parse_item_signature(item_signature)
- local _, _, item_id, suffix_id = strfind(item_signature, '^(%d+):(%d+)$')
- return item_id, suffix_id
-end
-
-function item_id(hyperlink)
- local _, _, id_string = strfind(hyperlink, "^.-:(%d*).*")
- return tonumber(id_string)
-end
-
-function parse_hyperlink(hyperlink)
+function private.parse_hyperlink(hyperlink)
local _, _, item_id, enchant_id, suffix_id, unique_id, name = strfind(hyperlink, '|Hitem:(%d+):(%d+):(%d+):(%d+)|h[[]([^]]+)[]]|h')
- return tonumber(item_id) or 0, tonumber(suffix_id) or 0, tonumber(enchant_id) or 0, tonumber(unique_id) or 0, name
+ return tonumber(item_id) or 0, tonumber(suffix_id) or 0, tonumber(unique_id) or 0, tonumber(enchant_id) or 0, name
end
-function hyperlink_item(hyperlink)
- local name, itemstring, quality, level, type, subtype, max_stack = GetItemInfo(item_id(hyperlink))
- return {
- name = name,
- hyperlink = hyperlink,
- itemstring = itemstring,
- quality = quality,
- level = level,
- type = type,
- subtype = subtype,
- max_stack = max_stack,
- }
+function public.itemstring(item_id, suffix_id, unique_id, enchant_id)
+ return 'item:'..(item_id or 0)..':'..(enchant_id or 0)..':'..(suffix_id or 0)..':'..(unique_id or 0)
+end
+
+function public.item(item_id, suffix_id, unique_id, enchant_id)
+ local itemstring = 'item:'..(item_id or 0)..':'..(enchant_id or 0)..':'..(suffix_id or 0)..':'..(unique_id or 0)
+ local name, itemstring, quality, level, class, subclass, max_stack, slot, texture = GetItemInfo(itemstring)
+ return {
+ itemstring = itemstring,
+ name = name,
+ texture = texture,
+ quality = quality,
+ level = level,
+ slot = slot,
+ class = class,
+ subclass = subclass,
+ max_stack = max_stack,
+ }
end
diff --git a/item_search_frame.lua b/item_search_frame.lua
index d20e9fe..d200d9d 100644
--- a/item_search_frame.lua
+++ b/item_search_frame.lua
@@ -1,13 +1,13 @@
local private, public = {}, {}
Aux.item_search_frame = public
+aux_recently_searched = {}
+
local create_auction_record, show_dialog, find_auction, hide_sheet, update_listing, auction_alpha_setter, group_alpha_setter, create_auction_record
local auctions
local search_query
-local tooltip_patterns = {}
local current_page
local refresh
-local recently_searched = {}
function auction_alpha_setter(cell, auction)
cell:SetAlpha(auction.gone and 0.3 or 1)
@@ -22,12 +22,13 @@ local BUYOUT, BID, FULL = 1, 2, 3
public.recently_searched_config = {
on_row_click = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
+ AuxItemSearchFrameItemItemInputBox:Hide()
public.set_item(sheet.data[data_index].item_id)
end,
- on_row_enter = function (sheet, row_index)
+ on_row_enter = function(sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
end,
- on_row_leave = function (sheet, row_index)
+ on_row_leave = function(sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0)
end,
columns = {
@@ -63,10 +64,10 @@ public.recently_searched_config = {
cell.icon = icon
end,
cell_setter = function(cell, datum)
- local info = { GetItemInfo(datum.item_id) }
- cell.icon.icon_texture:SetTexture(info[9])
- cell.text:SetText('['..info[1]..']')
- local color = ITEM_QUALITY_COLORS[info[3]]
+ local item_info = Aux.info.item(datum.item_id)
+ cell.icon.icon_texture:SetTexture(item_info.texture)
+ cell.text:SetText('['..item_info.name..']')
+ local color = ITEM_QUALITY_COLORS[item_info.quality]
cell.text:SetTextColor(color.r, color.g, color.b)
end,
},
@@ -82,24 +83,34 @@ public.views = {
end,
on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
- Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30)
+ Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end,
on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide()
+ ResetCursor()
+ end,
+ on_row_update = function(sheet, row_index)
+ if IsControlKeyDown() then
+ ShowInspectCursor()
+ elseif IsAltKeyDown() then
+ SetCursor('BUY_CURSOR')
+ else
+ ResetCursor()
+ end
end,
row_setter = function(row, group)
- row.tooltip = group[1].tooltip
+ row.itemstring = Aux.info.itemstring(group[1].item_id, group[1].suffix_id, nil, group[1].enchant_id)
row.EnhTooltip_info = group[1].EnhTooltip_info
end,
columns = {
{
title = 'Qty',
- width = 23,
- comparator = function(group1, group2) return Aux.util.compare(group1[1].stack_size, group2[1].stack_size, Aux.util.LT) end,
+ width = 25,
+ comparator = function(group1, group2) return Aux.util.compare(group1[1].aux_quantity, group2[1].aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, group)
- cell.text:SetText(group[1].stack_size)
+ cell.text:SetText(group[1].aux_quantity)
group_alpha_setter(cell, group)
end,
},
@@ -144,24 +155,34 @@ public.views = {
end,
on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
- Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30)
+ Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end,
on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide()
+ ResetCursor()
+ end,
+ on_row_update = function(sheet, row_index)
+ if IsControlKeyDown() then
+ ShowInspectCursor()
+ elseif IsAltKeyDown() then
+ SetCursor('BUY_CURSOR')
+ else
+ ResetCursor()
+ end
end,
row_setter = function(row, datum)
- row.tooltip = datum.tooltip
+ row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id, datum.unique_id, datum.enchant_id)
row.EnhTooltip_info = datum.EnhTooltip_info
end,
columns = {
{
title = 'Qty',
- width = 23,
- comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
+ width = 25,
+ comparator = function(row1, row2) return Aux.util.compare(row1.aux_quantity, row2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
- cell.text:SetText(datum.stack_size)
+ cell.text:SetText(datum.aux_quantity)
auction_alpha_setter(cell, datum)
end,
},
@@ -226,7 +247,7 @@ public.views = {
end,
},
},
- sort_order = {{column = 2, order = 'ascending' }, {column = 6, order = 'ascending' }, {column = 3, order = 'ascending'}},
+ sort_order = {{column = 3, order = 'ascending'}, {column = 5, order = 'ascending'}},
},
[FULL] = {
name = 'Full',
@@ -236,24 +257,34 @@ public.views = {
end,
on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
- Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30)
+ Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end,
on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide()
+ ResetCursor()
+ end,
+ on_row_update = function(sheet, row_index)
+ if IsControlKeyDown() then
+ ShowInspectCursor()
+ elseif IsAltKeyDown() then
+ SetCursor('BUY_CURSOR')
+ else
+ ResetCursor()
+ end
end,
row_setter = function(row, datum)
- row.tooltip = datum.tooltip
+ row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id, datum.unique_id, datum.enchant_id)
row.EnhTooltip_info = datum.EnhTooltip_info
end,
columns = {
{
title = 'Qty',
- width = 23,
- comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
+ width = 25,
+ comparator = function(row1, row2) return Aux.util.compare(row1.aux_quantity, row2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
- cell.text:SetText(datum.stack_size)
+ cell.text:SetText(datum.aux_quantity)
auction_alpha_setter(cell, datum)
end,
},
@@ -299,7 +330,7 @@ public.views = {
},
{
title = 'Lvl',
- width = 23,
+ width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.level, row2.level, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
@@ -346,7 +377,7 @@ public.views = {
},
{
title = 'Owner',
- width = 70,
+ width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('LEFT'),
cell_setter = function(cell, datum)
@@ -381,14 +412,17 @@ function public.on_open()
public.update_item()
private.update_recently_searched()
update_listing()
+ if not private.item_id then
+ AuxItemSearchFrameItemRefreshButton:Disable()
+ end
end
function public.dialog_cancel()
- Aux.log('Canceled.')
+ Aux.log('Aborted.')
Aux.scan.abort()
AuxItemSearchFrameAuctionsConfirmation:Hide()
update_listing()
- AuxItemSearchFrameItemSearchButton:Enable()
+ AuxItemSearchFrameItemRefreshButton:Enable()
end
function public.stop_search()
@@ -403,7 +437,7 @@ function update_listing()
if private.view == BUYOUT then
AuxItemSearchFrameAuctionsBuyListing:Show()
local buy_records = auctions and Aux.util.filter(auctions, function(auction) return auction.owner ~= UnitName('player') and auction.buyout_price end) or {}
- Aux.list.populate(AuxItemSearchFrameAuctionsBuyListing.sheet, auctions and Aux.util.group_by(buy_records, function(a1, a2) return a1.hyperlink == a2.hyperlink and a1.stack_size == a2.stack_size and a1.buyout_price == a2.buyout_price end) or {})
+ Aux.list.populate(AuxItemSearchFrameAuctionsBuyListing.sheet, auctions and Aux.util.group_by(buy_records, function(a1, a2) return a1.item_id == a2.item_id and a1.suffix_id == a2.suffix_id and a1.enchant_id == a2.enchant_id and a1.aux_quantity == a2.aux_quantity and a1.buyout_price == a2.buyout_price end) or {})
AuxItemSearchFrameAuctions:SetWidth(AuxItemSearchFrameAuctionsBuyListing:GetWidth() + 40)
AuxFrame:SetWidth(AuxItemSearchFrameItem:GetWidth() + AuxItemSearchFrameAuctions:GetWidth() + 15)
elseif private.view == BID then
@@ -435,14 +469,18 @@ function public.set_view(view)
end
function private.update_recently_searched()
- Aux.list.populate(AuxItemSearchFrameRecentlySearchedListing.sheet, recently_searched)
+ Aux.list.populate(AuxItemSearchFrameRecentlySearchedListing.sheet, aux_recently_searched)
end
function public.set_item(item_id)
if item_id ~= private.item_id then
+ AuxItemSearchFrameItemRefreshButton:Enable()
private.item_id = item_id
public.update_item()
- tinsert(recently_searched, 1, { item_id=item_id, time=time() })
+ tinsert(aux_recently_searched, 1, { item_id=item_id, time=time() })
+ while getn(aux_recently_searched) > 50 do
+ tremove(aux_recently_searched, getn(aux_recently_searched))
+ end
private.update_recently_searched()
public.start_search()
end
@@ -464,28 +502,32 @@ end
function public.start_search()
- if not AuxItemSearchFrameItemSearchButton:IsVisible() then
+ if not AuxItemSearchFrameItemRefreshButton:IsVisible() then
return
end
- AuxItemSearchFrameItemSearchButton:Hide()
+ AuxItemSearchFrameItemRefreshButton:Hide()
AuxItemSearchFrameItemStopButton:Show()
auctions = nil
refresh = true
- local name = GetItemInfo(private.item_id)
-
+ local item_id = private.item_id
+ local item_info = Aux.info.item(item_id)
+
+ local class_index = Aux.item_class_index(item_info.class)
+ local subclass_index = Aux.item_subclass_index(class_index, item_info.subclass)
+
search_query = {
- name = name,
--- min_level = AuxBuyMinLevel:GetText(),
--- max_level = AuxBuyMaxLevel:GetText(),
--- slot = category and category.slot,
--- class = category and category.class,
--- subclass = category and category.subclass,
--- quality = UIDropDownMenu_GetSelectedValue(AuxBuyQualityDropDown),
--- usable = AuxBuyUsableCheckButton:GetChecked()
+ name = item_info.name,
+ min_level = item_info.level,
+ min_level = item_info.level,
+ slot = item_info.slot,
+ class = Aux.item_class_index(item_info.class),
+ subclass = item_info.subclass,
+ quality = item_info.quality,
+ usable = item_info.usable,
}
Aux.log('Scanning auctions ...')
@@ -499,28 +541,25 @@ function public.start_search()
Aux.log('Scanning page '..(page+1)..' out of '..total_pages..' ...')
current_page = page
end,
- on_read_auction = function(i)
- local auction_item = Aux.info.auction_item(i)
- if auction_item then
- if auction_item.name == search_query.name then
- auctions = auctions or {}
- tinsert(auctions, create_auction_record(auction_item, current_page))
- end
- end
+ on_read_auction = function(auction_info)
+ if auction_info.item_id == item_id then
+ auctions = auctions or {}
+ tinsert(auctions, create_auction_record(auction_info, current_page))
+ end
end,
on_complete = function()
auctions = auctions or {}
Aux.log('Scan complete: '..getn(auctions)..' '..Aux_PluralizeIf('auction', getn(auctions))..' found.')
AuxItemSearchFrameItemStopButton:Hide()
- AuxItemSearchFrameItemSearchButton:Show()
+ AuxItemSearchFrameItemRefreshButton:Show()
refresh = true
end,
on_abort = function()
auctions = auctions or {}
Aux.log('Scan aborted: '..getn(auctions)..' '..Aux_PluralizeIf('auction', getn(auctions))..' found.')
AuxItemSearchFrameItemStopButton:Hide()
- AuxItemSearchFrameItemSearchButton:Show()
+ AuxItemSearchFrameItemRefreshButton:Show()
refresh = true
end,
next_page = function(page, total_pages)
@@ -535,17 +574,17 @@ function public.start_search()
end
function show_dialog(buyout_mode, entry, amount)
- AuxItemSearchFrameAuctionsConfirmationContentItem.tooltip = entry.tooltip
+ AuxItemSearchFrameAuctionsConfirmationContentItem.itemstring = Aux.info.itemstring(entry.item_id, entry.suffix_id, entry.unique_id, entry.enchant_id)
AuxItemSearchFrameAuctionsConfirmationContentItem.EnhTooltip_info = entry.EnhTooltip_info
AuxItemSearchFrameAuctionsConfirmationContentActionButton:Disable()
- AuxItemSearchFrameAuctionsConfirmationContentItemIconTexture:SetTexture(entry.texture)
- AuxItemSearchFrameAuctionsConfirmationContentItemName:SetText(entry.tooltip[1][1].text)
+ AuxItemSearchFrameAuctionsConfirmationContentItemIconTexture:SetTexture(Aux.info.item(entry.item_id).texture)
+ AuxItemSearchFrameAuctionsConfirmationContentItemName:SetText(entry.name)
local color = ITEM_QUALITY_COLORS[entry.quality]
AuxItemSearchFrameAuctionsConfirmationContentItemName:SetTextColor(color.r, color.g, color.b)
- if entry.stack_size > 1 then
- AuxItemSearchFrameAuctionsConfirmationContentItemCount:SetText(entry.stack_size);
+ if entry.aux_quantity > 1 then
+ AuxItemSearchFrameAuctionsConfirmationContentItemCount:SetText(entry.aux_quantity);
AuxItemSearchFrameAuctionsConfirmationContentItemCount:Show()
else
AuxItemSearchFrameAuctionsConfirmationContentItemCount:Hide()
@@ -583,8 +622,8 @@ function find_auction(entry, buyout_mode, express_mode)
amount = entry.bid
end
- Aux.log('Processing '..(buyout_mode and 'buyout' or 'bid')..' request for '..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..' ...')
- AuxItemSearchFrameItemSearchButton:Disable()
+ Aux.log('Processing '..(buyout_mode and 'buyout' or 'bid')..' request for '..entry.hyperlink..' x '..entry.aux_quantity..' at '..Aux.util.money_string(amount)..' ...')
+ AuxItemSearchFrameItemRefreshButton:Disable()
if not express_mode then
show_dialog(buyout_mode, entry, amount)
@@ -603,27 +642,17 @@ function find_auction(entry, buyout_mode, express_mode)
on_page_loaded = function(page)
current_page = page
end,
- on_read_auction = function(i, ctrl)
- local auction_item = Aux.info.auction_item(i)
-
- if not auction_item then
- return
- end
-
- local stack_size = auction_item.charges or auction_item.count
- local bid = (auction_item.current_bid > 0 and auction_item.current_bid or auction_item.min_bid) + auction_item.min_increment
-
- local signature = Aux.auction_signature(auction_item.hyperlink, stack_size, bid, auction_item.buyout_price)
-
- if entry.signature == signature then
+ on_read_auction = function(auction_info, ctrl)
+ local auction_record = create_auction_record(auction_info)
+ if entry.signature == auction_record.signature then
ctrl.suspend()
found = true
Aux.log('Matching auction found.'..(express_mode and '' or ' Awaiting confirmation ...'))
if express_mode then
if GetMoney() >= amount then
- PlaceAuctionBid("list", i, amount)
- Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..'.')
+ PlaceAuctionBid('list', auction_info.index, amount)
+ Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true
refresh = true
else
@@ -631,17 +660,17 @@ function find_auction(entry, buyout_mode, express_mode)
end
Aux.scan.abort()
else
- Aux.buy.dialog_action = function()
+ public.dialog_action = function()
if GetMoney() >= amount then
- PlaceAuctionBid("list", i, amount)
- Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..'.')
+ PlaceAuctionBid('list', auction_info.index, buyout_mode and amount or MoneyInputFrame_GetCopper(AuxItemSearchFrameAuctionsConfirmationContentBid))
+ Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true
refresh = true
else
Aux.log('Not enough money.')
end
Aux.scan.abort()
- AuxItemSearchFrameItemSearchButton:Enable()
+ AuxItemSearchFrameItemRefreshButton:Enable()
AuxItemSearchFrameAuctionsConfirmation:Hide()
update_listing()
end
@@ -657,12 +686,12 @@ function find_auction(entry, buyout_mode, express_mode)
public.dialog_cancel()
end
if express_mode then
- AuxItemSearchFrameItemSearchButton:Enable()
+ AuxItemSearchFrameItemRefreshButton:Enable()
end
end,
on_abort = function()
if express_mode then
- AuxItemSearchFrameItemSearchButton:Enable()
+ AuxItemSearchFrameItemRefreshButton:Enable()
end
end,
next_page = function(page, total_pages)
@@ -685,45 +714,46 @@ function public.on_row_click(entry)
end
end
-function create_auction_record(auction_item, current_page)
+function create_auction_record(auction_info, current_page)
- local stack_size = auction_item.charges or auction_item.count
- local bid = (auction_item.current_bid > 0 and auction_item.current_bid or auction_item.min_bid) + auction_item.min_increment
- local buyout_price = auction_item.buyout_price > 0 and auction_item.buyout_price or nil
- local buyout_price_per_unit = buyout_price and Aux_Round(auction_item.buyout_price/stack_size)
+ local aux_quantity = auction_info.charges or auction_info.count
+ local bid = (auction_info.current_bid > 0 and auction_info.current_bid or auction_info.min_bid) + auction_info.min_increment
+ local buyout_price = auction_info.buyout_price > 0 and auction_info.buyout_price or nil
+ local buyout_price_per_unit = buyout_price and Aux_Round(auction_info.buyout_price / aux_quantity)
local status
- if auction_item.current_bid == 0 then
+ if auction_info.current_bid == 0 then
status = 'No Bid'
- elseif auction_item.high_bidder then
+ elseif auction_info.high_bidder then
status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE
else
status = 'Other Bidder'
end
return {
- key = auction_item.item_signature,
- signature = Aux.auction_signature(auction_item.hyperlink, stack_size, bid, auction_item.buyout_price),
+ item_id = auction_info.item_id,
+ suffix_id = auction_info.suffix_id,
+ unique_id = auction_info.unique_id,
+ enchant_id = auction_info.enchant_id,
- name = auction_item.name,
- level = auction_item.level,
- texture = auction_item.texture,
- tooltip = auction_item.tooltip,
- stack_size = stack_size,
+ signature = Aux.auction_signature(auction_info.hyperlink, aux_quantity, bid, auction_info.buyout_price),
+
+ name = auction_info.name,
+ level = auction_info.level,
+ aux_quantity = aux_quantity,
buyout_price = buyout_price,
buyout_price_per_unit = buyout_price_per_unit,
- quality = auction_item.quality,
- hyperlink = auction_item.hyperlink,
- itemstring = auction_item.itemstring,
+ quality = auction_info.quality,
+ hyperlink = auction_info.hyperlink,
page = current_page,
bid = bid,
- bid_per_unit = Aux_Round(bid/stack_size),
- owner = auction_item.owner,
- duration = auction_item.duration,
- usable = auction_item.usable,
- high_bidder = auction_item.high_bidder,
+ bid_per_unit = Aux_Round(bid/aux_quantity),
+ owner = auction_info.owner,
+ duration = auction_info.duration,
+ usable = auction_info.usable,
+ high_bidder = auction_info.high_bidder,
status = status,
- EnhTooltip_info = auction_item.EnhTooltip_info,
+ EnhTooltip_info = auction_info.EnhTooltip_info,
}
end
diff --git a/item_search_frame.xml b/item_search_frame.xml
index 1e8f5bb..42a6283 100644
--- a/item_search_frame.xml
+++ b/item_search_frame.xml
@@ -76,7 +76,7 @@
-