diff --git a/aux-addon.lua b/aux-addon.lua index a8a8d4b..f7d1e6f 100644 --- a/aux-addon.lua +++ b/aux-addon.lua @@ -1,27 +1,16 @@ +aux = module + +include (green_t) + --aux_account_settings = {} -- TODO clean up the mess of savedvariables --aux_character_settings = {} -do - local modules = {} - local mt = {__metatable=false, __index=function(_, key) return modules[key]._I end, __newindex=error} - aux = function(name) - if not modules[name] then - (function() - modules[name] = module and _E - import (green_t) - private.aux = setmetatable(t, mt) - private.p.set = function(v) inspect(nil, v) end - end)() - end - modules[name].import (modules.core._I) - setfenv(2, modules[name]) - end -end - -aux 'core' - public.version = '5.0.0' +function public.p.set(v) + inspect(nil, v) +end + function public.print(...) auto[arg] = true DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE .. '[aux] ' .. join(map(arg, tostring), ' ')) end @@ -56,23 +45,28 @@ do for _, f in handlers2 do f() end print('v' .. version .. ' loaded.') else - _E[event]() + _M[event]() end end) end +function LOAD() + include (aux_util) + include (aux_control) + include (aux_util_color) + aux_frame.create() +end + private.tab_info = t -do - for _, info in temp-A(temp-A('search_tab', 'Search'), temp-A('post_tab', 'Post'), temp-A('auctions_tab', 'Auctions'), temp-A('bids_tab', 'Bids')) do - local tab = T('name', info[2]) - local env = (function() _G.aux(info[1]) return _E end)() - function env.private.OPEN.set(f) tab.OPEN = f end - function env.private.CLOSE.set(f) tab.CLOSE = f end - function env.private.USE_ITEM.set(f) tab.USE_ITEM = f end - function env.private.CLICK_LINK.set(f) tab.CLICK_LINK = f end - function env.public.ACTIVE.get() return tab == active_tab end - tinsert(tab_info, tab) - end +function public.TAB(name) + local tab = T('name', name) + local env = getfenv(2) + function env.private.OPEN.set(f) tab.OPEN = f end + function env.private.CLOSE.set(f) tab.CLOSE = f end + function env.private.USE_ITEM.set(f) tab.USE_ITEM = f end + function env.private.CLICK_LINK.set(f) tab.CLICK_LINK = f end + function env.public.ACTIVE.get() return tab == active_tab end + tinsert(tab_info, tab) end do @@ -89,7 +83,7 @@ function private.SetItemRef(...) auto[arg] = true if arg[3] ~= 'RightButton' or not index(active_tab, 'CLICK_LINK') or not strfind(arg[1], '^item:%d+') then return orig.SetItemRef(unpack(arg)) end - for item_info in present(aux.info.item(tonumber(select(3, strfind(arg[1], '^item:(%d+)'))))) do + for item_info in present(aux_info.item(tonumber(select(3, strfind(arg[1], '^item:(%d+)'))))) do return active_tab.CLICK_LINK(item_info) end end @@ -98,7 +92,7 @@ function private.UseContainerItem(...) auto[arg] = true if modified or not index(active_tab, 'USE_ITEM') then return orig.UseContainerItem(unpack(arg)) end - for item_info in present(aux.info.container_item(arg[1], arg[2])) do + for item_info in present(aux_info.container_item(arg[1], arg[2])) do return active_tab.USE_ITEM(item_info) end end @@ -170,18 +164,18 @@ end function private.AUCTION_HOUSE_SHOW() AuctionFrame:Hide() - aux_frame:Show() + AuxFrame:Show() tab = 1 end function private.AUCTION_HOUSE_CLOSED() bids_loaded = false current_owner_page = nil - aux.post.stop() - aux.stack.stop() - aux.scan.abort() + aux_post.stop() + aux_stack.stop() + aux_scan.abort() tab = nil - aux_frame:Hide() + AuxFrame:Hide() end function private.AUCTION_BIDDER_LIST_UPDATE() @@ -213,7 +207,7 @@ end do local function cost_label(cost) local label = LIGHTYELLOW_FONT_COLOR_CODE .. '(Total Cost: ' .. FONT_COLOR_CODE_CLOSE - label = label .. (cost and aux.money.to_string2(cost, nil, LIGHTYELLOW_FONT_COLOR_CODE) or GRAY_FONT_COLOR_CODE .. '---' .. FONT_COLOR_CODE_CLOSE) + label = label .. (cost and aux_money.to_string2(cost, nil, LIGHTYELLOW_FONT_COLOR_CODE) or GRAY_FONT_COLOR_CODE .. '---' .. FONT_COLOR_CODE_CLOSE) label = label .. LIGHTYELLOW_FONT_COLOR_CODE .. ')' .. FONT_COLOR_CODE_CLOSE return label end @@ -229,10 +223,10 @@ do total_cost = nil break end - local item_id, suffix_id = aux.info.parse_link(link) + local item_id, suffix_id = aux_info.parse_link(link) local count = select(3, GetCraftReagentInfo(id, i)) - local _, price, limited = aux.cache.merchant_info(item_id) - local value = price and not limited and price or aux.history.value(item_id .. ':' .. suffix_id) + local _, price, limited = aux_cache.merchant_info(item_id) + local value = price and not limited and price or aux_history.value(item_id .. ':' .. suffix_id) if not value then total_cost = nil break @@ -256,10 +250,10 @@ do total_cost = nil break end - local item_id, suffix_id = aux.info.parse_link(link) + local item_id, suffix_id = aux_info.parse_link(link) local count = select(3, GetTradeSkillReagentInfo(id, i)) - local _, price, limited = aux.cache.merchant_info(item_id) - local value = price and not limited and price or aux.history.value(item_id .. ':' .. suffix_id) + local _, price, limited = aux_cache.merchant_info(item_id) + local value = price and not limited and price or aux_history.value(item_id .. ':' .. suffix_id) if not value then total_cost = nil break diff --git a/control.lua b/control.lua index 9bd08ff..a91a30e 100644 --- a/control.lua +++ b/control.lua @@ -1,4 +1,8 @@ -aux 'core' +aux_control = module + +include (green_t) +include (aux) +include (aux_util) local event_frame = CreateFrame('Frame') diff --git a/core/cache.lua b/core/cache.lua index 3405c6e..3e79874 100644 --- a/core/cache.lua +++ b/core/cache.lua @@ -1,4 +1,12 @@ -aux 'cache' local info, persistence = aux.info, aux.persistence +aux_cache = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local info, persistence = aux_info, aux_persistence local MIN_ITEM_ID = 1 local MAX_ITEM_ID = 30000 @@ -28,7 +36,7 @@ function LOAD() event_listener('NEW_AUCTION_UPDATE', function() for info in present(info.auction_sell_item()) do for item_id in present(item_id(info.name)) do - aux_merchant_sell[_E.item_id(info.name)] = info.vendor_price / (aux.info.max_item_charges(item_id) or info.count) + aux_merchant_sell[_M.item_id(info.name)] = info.vendor_price / (aux_info.max_item_charges(item_id) or info.count) end end end) diff --git a/core/disenchant.lua b/core/disenchant.lua index 536cb4f..690c9d2 100644 --- a/core/disenchant.lua +++ b/core/disenchant.lua @@ -1,4 +1,10 @@ -aux 'disenchant' +aux_disenchant = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) local UNCOMMON, RARE, EPIC = 2, 3, 4 @@ -69,7 +75,7 @@ local WEAPON = S( function public.value(slot, quality, level) local expectation for _, event in distribution(slot, quality, level) do - local value = aux.history.value(event.item_id .. ':' .. 0) + local value = aux_history.value(event.item_id .. ':' .. 0) if not value then return else diff --git a/core/history.lua b/core/history.lua index 2351072..5f21770 100644 --- a/core/history.lua +++ b/core/history.lua @@ -1,4 +1,12 @@ -aux 'history' local persistence = aux.persistence +aux_history = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local persistence = aux_persistence local history_schema = {'record', '#', {next_push='number'}, {daily_min_buyout='number'}, {daily_max_price='number'}, {data_points={'list', ';', {'record', '@', {market_value='number'}, {time='number'}}}} } diff --git a/core/post.lua b/core/post.lua index 159fabc..a77640f 100644 --- a/core/post.lua +++ b/core/post.lua @@ -1,4 +1,10 @@ -aux 'post' +aux_post = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) local state @@ -17,15 +23,15 @@ function private.process() end end) - return aux.stack.start(state.item_key, state.stack_size, send_signal) + return aux_stack.start(state.item_key, state.stack_size, send_signal) end return stop() end function private.post_auction(slot, k) - local item_info = aux.info.container_item(unpack(slot)) - if item_info.item_key == state.item_key and aux.info.auctionable(item_info.tooltip) and item_info.aux_quantity == state.stack_size then + local item_info = aux_info.container_item(unpack(slot)) + if item_info.item_key == state.item_key and aux_info.auctionable(item_info.tooltip) and item_info.aux_quantity == state.stack_size then ClearCursor() ClickAuctionSellItemButton() diff --git a/core/scan.lua b/core/scan.lua index 6d4ae1d..0946114 100644 --- a/core/scan.lua +++ b/core/scan.lua @@ -1,4 +1,12 @@ -aux 'scan' local info, history = aux.info, aux.history +aux_scan = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local info, history = aux_info, aux_history local PAGE_SIZE = 50 diff --git a/core/slash.lua b/core/slash.lua index 6b0f9e0..483573c 100644 --- a/core/slash.lua +++ b/core/slash.lua @@ -1,4 +1,12 @@ -aux 'slash' local persistence = aux.persistence +aux_slash = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local persistence = aux_persistence aux_ignore_owner = true @@ -27,7 +35,7 @@ function SlashCmdList.AUX(command) aux_auctionable_items = t print 'Item cache cleared.' elseif arguments[1] == 'populate' and arguments[2] == 'wdb' then - aux.cache.populate_wdb() + aux_cache.populate_wdb() elseif arguments[1] == 'tooltip' and arguments[2] == 'value' then aux_tooltip_value = not aux_tooltip_value print('Historical value in tooltip ' .. (aux_tooltip_value and 'enabled' or 'disabled') .. '.') diff --git a/core/stack.lua b/core/stack.lua index 5b78be9..aeab808 100644 --- a/core/stack.lua +++ b/core/stack.lua @@ -1,4 +1,12 @@ -aux 'stack' local info = aux.info +aux_stack = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local info = aux_info local state diff --git a/core/tooltip.lua b/core/tooltip.lua index c8d9742..f3beafa 100644 --- a/core/tooltip.lua +++ b/core/tooltip.lua @@ -1,4 +1,12 @@ -aux 'tooltip' local info, disenchant, cache, money, history = aux.info, aux.disenchant, aux.cache, aux.money, aux.history +aux_tooltip = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local info, disenchant, cache, money, history = aux_info, aux_disenchant, aux_cache, aux_money, aux_history aux_tooltip_value = true @@ -101,7 +109,7 @@ function extend_tooltip(tooltip, link, quantity) end if aux_tooltip_daily then local market_value = history.market_value(item_key) - tooltip:AddLine('Today: ' .. (market_value and money.to_string2(market_value * quantity) .. ' (' .. aux.auction_listing.percentage_historical(round(market_value / value * 100)) .. ')' or GRAY_FONT_COLOR_CODE .. '---' .. FONT_COLOR_CODE_CLOSE), color.r, color.g, color.b) + tooltip:AddLine('Today: ' .. (market_value and money.to_string2(market_value * quantity) .. ' (' .. aux_auction_listing.percentage_historical(round(market_value / value * 100)) .. ')' or GRAY_FONT_COLOR_CODE .. '---' .. FONT_COLOR_CODE_CLOSE), color.r, color.g, color.b) end end diff --git a/frame.lua b/frame.lua index 33612b8..9331fb9 100644 --- a/frame.lua +++ b/frame.lua @@ -1,49 +1,53 @@ -aux 'core' local gui = aux.gui +aux_frame = module -function LOAD() - for _, info in tab_info do tabs:create_tab(info.name) end -end +local gui = aux_gui -do - local frame = CreateFrame('Frame', 'aux_frame', UIParent) - tinsert(UISpecialFrames, 'aux_frame') - gui.set_window_style(frame) - gui.set_size(frame, 768, 447) - frame:SetPoint('LEFT', 100, 0) - frame:SetToplevel(true) - frame:SetMovable(true) - frame:EnableMouse(true) - frame:SetClampedToScreen(true) - frame:RegisterForDrag('LeftButton') - frame:SetScript('OnDragStart', function() this:StartMoving() end) - frame:SetScript('OnDragStop', function() this:StopMovingOrSizing() end) - frame:SetScript('OnShow', function() PlaySound('AuctionWindowOpen') end) - frame:SetScript('OnHide', function() PlaySound('AuctionWindowClose'); CloseAuctionHouse() end) - frame.content = CreateFrame('Frame', nil, frame) - frame.content:SetPoint('TOPLEFT', 4, -80) - frame.content:SetPoint('BOTTOMRIGHT', -4, 35) - frame:Hide() - public.aux_frame = frame -end -do - private.tabs = gui.tabs(aux_frame, 'DOWN') - tabs._on_select = on_tab_click - function public.tab.set(id) tabs:select(id) end -end -do - local btn = gui.button(aux_frame) - btn:SetPoint('BOTTOMRIGHT', -5, 5) - gui.set_size(btn, 60, 24) - btn:SetText('Close') - btn:SetScript('OnClick', papply(aux_frame.Hide, aux_frame)) - public.close_button = btn -end -do - local btn = gui.button(aux_frame, gui.font_size.small) - btn:SetPoint('RIGHT', close_button, 'LEFT' , -5, 0) - gui.set_size(btn, 60, 24) - btn:SetText(color.blizzard'Blizzard UI') - btn:SetScript('OnClick',function() - if AuctionFrame:IsVisible() then HideUIPanel(AuctionFrame) else ShowUIPanel(AuctionFrame) end - end) +function public.create() + setfenv(1, getfenv(2)) + do + local frame = CreateFrame('Frame', 'AuxFrame', UIParent) + tinsert(UISpecialFrames, 'AuxFrame') + gui.set_window_style(frame) + gui.set_size(frame, 768, 447) + frame:SetPoint('LEFT', 100, 0) + frame:SetToplevel(true) + frame:SetMovable(true) + frame:EnableMouse(true) + frame:SetClampedToScreen(true) + frame:RegisterForDrag('LeftButton') + frame:SetScript('OnDragStart', function() this:StartMoving() end) + frame:SetScript('OnDragStop', function() this:StopMovingOrSizing() end) + frame:SetScript('OnShow', function() PlaySound('AuctionWindowOpen') end) + frame:SetScript('OnHide', function() PlaySound('AuctionWindowClose'); CloseAuctionHouse() end) + frame.content = CreateFrame('Frame', nil, frame) + frame.content:SetPoint('TOPLEFT', 4, -80) + frame.content:SetPoint('BOTTOMRIGHT', -4, 35) + frame:Hide() + public.AuxFrame = frame + end + do + private.tabs = gui.tabs(AuxFrame, 'DOWN') + tabs._on_select = on_tab_click + function public.tab.set(id) tabs:select(id) end + end + do + local btn = gui.button(AuxFrame) + btn:SetPoint('BOTTOMRIGHT', -5, 5) + gui.set_size(btn, 60, 24) + btn:SetText('Close') + btn:SetScript('OnClick', papply(AuxFrame.Hide, AuxFrame)) + public.close_button = btn + end + do + local btn = gui.button(AuxFrame, gui.font_size.small) + btn:SetPoint('RIGHT', close_button, 'LEFT' , -5, 0) + gui.set_size(btn, 60, 24) + btn:SetText(color.blizzard'Blizzard UI') + btn:SetScript('OnClick',function() + if AuctionFrame:IsVisible() then HideUIPanel(AuctionFrame) else ShowUIPanel(AuctionFrame) end + end) + end + for _, info in tab_info do + tabs:create_tab(info.name) + end end \ No newline at end of file diff --git a/gui/auction_listing.lua b/gui/auction_listing.lua index c80074a..4fdbd42 100644 --- a/gui/auction_listing.lua +++ b/gui/auction_listing.lua @@ -1,4 +1,12 @@ -aux 'auction_listing' local gui, sorting, money, info = aux.gui, aux.sorting, aux.money, aux.info +aux_auction_listing = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local gui, sorting, money, info = aux_gui, aux_sorting, aux_money, aux_info aux_price_per_unit = false @@ -521,7 +529,7 @@ public.bids_config = { function private.record_percentage(record) if not record then return end - local historical_value = aux.history.value(record.item_key) or 0 + local historical_value = aux_history.value(record.item_key) or 0 if historical_value > 0 then if record.unit_buyout_price > 0 then return round(100 * record.unit_buyout_price / historical_value, 1) @@ -634,8 +642,8 @@ local methods = { ChatFrameEditBox:Insert(this.row.data.record.link) elseif not modified and button == 'RightButton' then -- TODO not when alt (how?) tab = 1 - aux.search_tab.set_filter(strlower(info.item(this.row.data.record.item_id).name) .. '/exact') - aux.search_tab.execute(nil, false) + aux_search_tab.set_filter(strlower(info.item(this.row.data.record.item_id).name) .. '/exact') + aux_search_tab.execute(nil, false) else local selection = this.rt:GetSelection() if not selection or selection.record ~= this.row.data.record then diff --git a/gui/core.lua b/gui/core.lua index 37b53b9..28da991 100644 --- a/gui/core.lua +++ b/gui/core.lua @@ -1,4 +1,10 @@ -aux 'gui' +aux_gui = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) public.font = [[Fonts\ARIALN.TTF]] @@ -25,7 +31,7 @@ function LOAD() hook('ToggleDropDownMenu', function(...) auto[arg] = true local ret = temp-A(orig.ToggleDropDownMenu(unpack(arg))) local dropdown = _G[arg[4] or ''] or this:GetParent() - if strfind(dropdown:GetName() or '', '^aux_frame%d+$') then + if strfind(dropdown:GetName() or '', '^AuxFrame%d+$') then set_aux_dropdown_style(dropdown) else set_blizzard_dropdown_style() @@ -87,7 +93,7 @@ do local id = 1 function public.name.get() id = id + 1 - return 'aux_frame' .. id + return 'AuxFrame' .. id end end diff --git a/gui/item_listing.lua b/gui/item_listing.lua index 3685caf..17a49a8 100644 --- a/gui/item_listing.lua +++ b/gui/item_listing.lua @@ -1,4 +1,12 @@ -aux 'item_listing' local gui, info = aux.gui, aux.info +aux_item_listing = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local gui, info = aux_gui, aux_info local ROW_HEIGHT = 39 diff --git a/gui/listing.lua b/gui/listing.lua index e9c2121..05be724 100644 --- a/gui/listing.lua +++ b/gui/listing.lua @@ -1,4 +1,12 @@ -aux 'listing' local gui = aux.gui +aux_listing = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local gui = aux_gui local ST_COUNT = 0 diff --git a/libs/module.lua b/libs/module.lua index 0f254ad..0207f31 100644 --- a/libs/module.lua +++ b/libs/module.lua @@ -5,7 +5,6 @@ local PRIVATE, PUBLIC, FIELD, ACCESSOR, MUTATOR = 0, 1, 2, 4, 6 local TYPES = { FIELD, ACCESSOR, MUTATOR } local READ, WRITE = '', '=' local OPERATION = { [FIELD]=READ, [ACCESSOR]=READ, [MUTATOR]=WRITE } -local ACCESS = { private=PRIVATE, public=PUBLIC } local META = { get=ACCESSOR, set=MUTATOR } local function error(msg, ...) return _G.error(format(msg or '', unpack(arg)) .. '\n' .. debugstack(), 0) end @@ -19,7 +18,7 @@ local function proxy_mt(fields, mutators, lt) return { __metatable=false, __index=fields, __newindex=function(_, k, v) return mutators[k](v) end, __lt=lt } end -local _module, _modifiers = {}, {} +local _module, _access, _modifiers = {}, {}, {} local definition_helper_mt = { __metatable=false } function definition_helper_mt:__index(k) @@ -27,17 +26,16 @@ function definition_helper_mt:__index(k) return self end function definition_helper_mt:__newindex(k, v) local module, modifiers = _module[self], _modifiers[self] - local access = ACCESS[tremove(modifiers, 1)] or error'Definition missing access modifier.' local name = META[k] and (tremove(modifiers) or error'Definition missing identifier.') or k if type(name) ~= 'string' or not strfind(name, '^[_%a][_%w]*') then error('Invalid identifier "%s".', name) end local type = META[k] or FIELD module.defined[name .. OPERATION[type]] = module.defined[name .. OPERATION[type]] and error('Duplicate identifier "%s".', name) or true for i = getn(modifiers), 1, -1 do v = module[FIELD][modifiers[i]](v) end - module[type][name], module[access+type][name] = v, v + module[type][name], module[_access[self]+type][name] = v, v setn(modifiers, 0) end -local function import(self, interface) +local function include(self, interface) local module = (interface < INTERFACE or error'Import error.') and _module[interface] for _, type in TYPES do for k, v in module[PUBLIC+type] do @@ -50,35 +48,40 @@ end local nop_default_mt = { __index=function() return nop end } -local global_mt = { __metatable=false } -function global_mt:__index(key) - if key ~= 'module' then return end - local module, environment, interface, definition_helper, accessors, mutators, fields, public_accessors, public_mutators, public_fields - environment, interface, definition_helper = {}, {}, setmetatable({}, definition_helper_mt) - accessors = { private=function() return definition_helper.private end, public=function() return definition_helper.public end } - mutators = setmetatable({ _=nop }, { __index=function(_, k) return function(v) _G[k] = v == interface and _G[k] ~= nil and _G.error(nil) or v end end }) - fields = setmetatable( - { _E=environment, _I=interface, _G=_G, import=function(interface) import(module, interface) end, error=error, nop=nop, id=id }, - { __index=function(_, key) local accessor = accessors[key]; if accessor then return accessor() else return _G[key] end end } - ) - public_accessors = setmetatable({}, nop_default_mt) - public_mutators = setmetatable({}, nop_default_mt) - public_fields = setmetatable({}, { __index=function(_, key) return public_accessors[key]() end }) - setmetatable(environment, proxy_mt(fields, mutators)) - setmetatable(interface, proxy_mt(public_fields, public_mutators, interface_lt)) - module = { - defined = { _E=true, _I=true, _G=true, import=true, error=true, nop=true, id=true, public=true, private=true, ['_=']=true }, - [ACCESSOR] = accessors, - [MUTATOR] = mutators, - [FIELD] = fields, - [PUBLIC+ACCESSOR] = public_accessors, - [PUBLIC+MUTATOR] = public_mutators, - [PUBLIC+FIELD] = public_fields, - interface = interface, - } - _module[definition_helper], _module[interface] = module, module - _modifiers[definition_helper] = {} - setfenv(2, environment) - return interface -end -setmetatable(_G, global_mt) \ No newline at end of file +local env = setmetatable({}, { + __metatable = false, + __newindex = function(_, k) + if _G[k] then _G.error(nil) end + local module, environment, interface, definition_helper, modifiers, accessors, mutators, fields, public_accessors, public_mutators, public_fields + environment, interface, definition_helper, modifiers = {}, {}, setmetatable({}, definition_helper_mt), {} + accessors = { private=function() _access[definition_helper] = PRIVATE; return definition_helper end, public=function() _access[definition_helper] = PUBLIC; return definition_helper end } + mutators = setmetatable({ _=nop }, { __index=function(_, k) return function(v) _G[k] = v end end }) + fields = setmetatable( + { _M=environment, _G=_G, include=function(interface) include(module, interface) end, error=error, nop=nop, id=id }, + { __index=function(_, k) local accessor = accessors[k]; if accessor then return accessor() else return _G[k] end end } + ) + public_accessors = setmetatable({}, nop_default_mt) + public_mutators = setmetatable({}, nop_default_mt) + public_fields = setmetatable({}, { __index=function(_, k) return public_accessors[k]() end }) + setmetatable(environment, proxy_mt(fields, mutators)) + setmetatable(interface, proxy_mt(public_fields, public_mutators, interface_lt)) + module = { + defined = { _M=true, _G=true, include=true, error=true, nop=true, id=true, public=true, private=true, ['_=']=true }, + [ACCESSOR] = accessors, + [MUTATOR] = mutators, + [FIELD] = fields, + [PUBLIC+ACCESSOR] = public_accessors, + [PUBLIC+MUTATOR] = public_mutators, + [PUBLIC+FIELD] = public_fields, + } + _module[definition_helper], _module[interface] = module, module + _modifiers[definition_helper] = modifiers + _G[k] = interface + setfenv(2, environment) + end, +}) + +setmetatable(_G, { + __metatable = false, + __index = function(_, k) if k == 'module' then setfenv(2, env) end end, +}) \ No newline at end of file diff --git a/tabs/auctions/core.lua b/tabs/auctions/core.lua index 9995d62..9af44e1 100644 --- a/tabs/auctions/core.lua +++ b/tabs/auctions/core.lua @@ -1,9 +1,19 @@ -aux 'auctions_tab' local scan = aux.scan +aux_auctions_tab = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +TAB 'Auctions' + +local scan = aux_scan private.auction_records = t function LOAD() - create_frames() + aux_auctions_tab_frame.create() end function OPEN() @@ -51,7 +61,7 @@ end function private.test(record) return function(index) - local auction_info = aux.info.auction(index, 'owner') + local auction_info = aux_info.auction(index, 'owner') return auction_info and auction_info.search_signature == record.search_signature end end @@ -67,7 +77,7 @@ do scan.abort(scan_id) state = SEARCHING - scan_id = aux.scan_util.find( + scan_id = aux_scan_util.find( record, status_bar, function() state = IDLE end, diff --git a/tabs/auctions/frame.lua b/tabs/auctions/frame.lua index 901be3c..15a5637 100644 --- a/tabs/auctions/frame.lua +++ b/tabs/auctions/frame.lua @@ -1,18 +1,21 @@ -aux 'auctions_tab' local gui, auction_listing = aux.gui, aux.auction_listing +aux_auctions_tab_frame = module -function private.create_frames() - private.frame = CreateFrame('Frame', nil, aux_frame) +local gui, auction_listing = aux_gui, aux_auction_listing + +function public.create() + setfenv(1, getfenv(2)) + private.frame = CreateFrame('Frame', nil, AuxFrame) frame:SetAllPoints() frame:SetScript('OnUpdate', on_update) frame:Hide() frame.listing = gui.panel(frame) frame.listing:SetPoint('TOP', frame, 'TOP', 0, -8) - frame.listing:SetPoint('BOTTOMLEFT', aux_frame.content, 'BOTTOMLEFT', 0, 0) - frame.listing:SetPoint('BOTTOMRIGHT', aux_frame.content, 'BOTTOMRIGHT', 0, 0) + frame.listing:SetPoint('BOTTOMLEFT', AuxFrame.content, 'BOTTOMLEFT', 0, 0) + frame.listing:SetPoint('BOTTOMRIGHT', AuxFrame.content, 'BOTTOMRIGHT', 0, 0) private.listing = auction_listing.CreateAuctionResultsTable(frame.listing, auction_listing.auctions_config) - listing:SetSort(1,2,3,4,5,6,7,8) + listing:SetSort(1, 2, 3, 4, 5, 6, 7, 8) listing:Reset() listing:SetHandler('OnCellClick', function(cell, button) if IsAltKeyDown() and listing:GetSelection().record == cell.row.data.record and cancel_button:IsEnabled() then @@ -28,7 +31,7 @@ function private.create_frames() private.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:SetPoint('TOPLEFT', AuxFrame.content, 'BOTTOMLEFT', 0, -6) status_bar:update_status(100, 100) status_bar:set_text('') end diff --git a/tabs/bids/core.lua b/tabs/bids/core.lua index 7439e00..bb3bfc6 100644 --- a/tabs/bids/core.lua +++ b/tabs/bids/core.lua @@ -1,9 +1,19 @@ -aux 'bids_tab' local scan = aux.scan +aux_bids_tab = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +TAB 'Bids' + +local scan = aux_scan private.auction_records = t function LOAD() - create_frames() + aux_bids_tab_frame.create() end function OPEN() @@ -51,7 +61,7 @@ end function private.test(record) return function(index) - local auction_info = aux.info.auction(index, 'bidder') + local auction_info = aux_info.auction(index, 'bidder') return auction_info and auction_info.search_signature == record.search_signature end end @@ -67,7 +77,7 @@ do scan.abort(scan_id) state = SEARCHING - scan_id = aux.scan_util.find( + scan_id = aux_scan_util.find( record, status_bar, function() state = IDLE end, @@ -83,7 +93,7 @@ do bid_button:SetScript('OnClick', function() if test(record)(index) and listing:ContainsRecord(record) then place_bid('bidder', index, record.bid_price, record.bid_price < record.buyout_price and function() - aux.info.bid_update(record) + aux_info.bid_update(record) listing:SetDatabase() end or papply(listing.RemoveAuctionRecord, listing, record)) end diff --git a/tabs/bids/frame.lua b/tabs/bids/frame.lua index 78e45de..85581ae 100644 --- a/tabs/bids/frame.lua +++ b/tabs/bids/frame.lua @@ -1,18 +1,21 @@ -aux 'bids_tab' local gui, auction_listing = aux.gui, aux.auction_listing +aux_bids_tab_frame = module -function private.create_frames() - private.frame = CreateFrame('Frame', nil, aux_frame) +local gui, auction_listing = aux_gui, aux_auction_listing + +function public.create() + setfenv(1, getfenv(2)) + private.frame = CreateFrame('Frame', nil, AuxFrame) frame:SetAllPoints() frame:SetScript('OnUpdate', on_update) frame:Hide() frame.listing = gui.panel(frame) frame.listing:SetPoint('TOP', frame, 'TOP', 0, -8) - frame.listing:SetPoint('BOTTOMLEFT', aux_frame.content, 'BOTTOMLEFT', 0, 0) - frame.listing:SetPoint('BOTTOMRIGHT', aux_frame.content, 'BOTTOMRIGHT', 0, 0) + frame.listing:SetPoint('BOTTOMLEFT', AuxFrame.content, 'BOTTOMLEFT', 0, 0) + frame.listing:SetPoint('BOTTOMRIGHT', AuxFrame.content, 'BOTTOMRIGHT', 0, 0) private.listing = auction_listing.CreateAuctionResultsTable(frame.listing, auction_listing.bids_config) - listing:SetSort(1,2,3,4,5,6,7,8) + listing:SetSort(1, 2, 3, 4, 5, 6, 7, 8) listing:Reset() listing:SetHandler('OnCellClick', function(cell, button) if IsAltKeyDown() and listing:GetSelection().record == cell.row.data.record then @@ -32,7 +35,7 @@ function private.create_frames() private.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:SetPoint('TOPLEFT', AuxFrame.content, 'BOTTOMLEFT', 0, -6) status_bar:update_status(100, 0) status_bar:set_text('') end diff --git a/tabs/post/core.lua b/tabs/post/core.lua index e5e31b4..31a149c 100644 --- a/tabs/post/core.lua +++ b/tabs/post/core.lua @@ -1,4 +1,14 @@ -aux 'post_tab' local scan, scan_util, history, info, persistence, item_listing, al, sorting = aux.scan, aux.scan_util, aux.history, aux.info, aux.persistence, aux.item_listing, aux.auction_listing, aux.sorting +aux_post_tab = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +TAB 'Post' + +local scan, scan_util, history, info, persistence, item_listing, al, sorting = aux_scan, aux_scan_util, aux_history, aux_info, aux_persistence, aux_item_listing, aux_auction_listing, aux_sorting local DURATION_4, DURATION_8, DURATION_24 = 120, 480, 1440 @@ -33,7 +43,7 @@ end local scan_id, inventory_records, existing_auctions = 0, t, t function private.refresh_button_click() - aux.scan.abort(scan_id) + aux_scan.abort(scan_id) refresh_entries() refresh = true end @@ -51,7 +61,7 @@ do end function LOAD() - create_frames() + aux_post_tab_frame.create() end function OPEN() @@ -71,20 +81,20 @@ end function private.get_unit_start_price() local money_text = unit_start_price:GetText() - return aux.money.from_string(money_text) or 0 + return aux_money.from_string(money_text) or 0 end function private.set_unit_start_price(amount) - unit_start_price:SetText(aux.money.to_string(amount, true, nil, 3, nil, true)) + unit_start_price:SetText(aux_money.to_string(amount, true, nil, 3, nil, true)) end function private.get_unit_buyout_price() local money_text = unit_buyout_price:GetText() - return aux.money.from_string(money_text) or 0 + return aux_money.from_string(money_text) or 0 end function private.set_unit_buyout_price(amount) - unit_buyout_price:SetText(aux.money.to_string(amount, true, nil, 3, nil, true)) + unit_buyout_price:SetText(aux_money.to_string(amount, true, nil, 3, nil, true)) end function private.update_inventory_listing() @@ -105,12 +115,12 @@ function private.update_auction_listing() for i, auction_record in existing_auctions[selected_item.key] or tt do local blizzard_bid_undercut, buyout_price_undercut = undercut(auction_record, stack_size_slider:GetValue()) - blizzard_bid_undercut = aux.money.from_string(aux.money.to_string(blizzard_bid_undercut, true, nil, 3)) - buyout_price_undercut = aux.money.from_string(aux.money.to_string(buyout_price_undercut, true, nil, 3)) + blizzard_bid_undercut = aux_money.from_string(aux_money.to_string(blizzard_bid_undercut, true, nil, 3)) + buyout_price_undercut = aux_money.from_string(aux_money.to_string(buyout_price_undercut, true, nil, 3)) local stack_blizzard_bid_undercut, stack_buyout_price_undercut = undercut(auction_record, stack_size_slider:GetValue(), true) - stack_blizzard_bid_undercut = aux.money.from_string(aux.money.to_string(stack_blizzard_bid_undercut, true, nil, 3)) - stack_buyout_price_undercut = aux.money.from_string(aux.money.to_string(stack_buyout_price_undercut, true, nil, 3)) + stack_blizzard_bid_undercut = aux_money.from_string(aux_money.to_string(stack_blizzard_bid_undercut, true, nil, 3)) + stack_buyout_price_undercut = aux_money.from_string(aux_money.to_string(stack_buyout_price_undercut, true, nil, 3)) local stack_size = stack_size_slider:GetValue() local historical_value = history.value(selected_item.key) @@ -138,9 +148,9 @@ function private.update_auction_listing() {value=auction_record.own and color.yellow(auction_record.count) or auction_record.count}, {value=al.time_left(auction_record.duration)}, {value=auction_record.stack_size == stack_size and color.yellow(auction_record.stack_size) or auction_record.stack_size}, - {value=aux.money.to_string(auction_record.unit_blizzard_bid, true, nil, 3, bid_color)}, + {value=aux_money.to_string(auction_record.unit_blizzard_bid, true, nil, 3, bid_color)}, {value=historical_value and al.percentage_historical(round(auction_record.unit_blizzard_bid / historical_value * 100)) or '---'}, - {value=auction_record.unit_buyout_price > 0 and aux.money.to_string(auction_record.unit_buyout_price, true, nil, 3, buyout_color) or '---'}, + {value=auction_record.unit_buyout_price > 0 and aux_money.to_string(auction_record.unit_buyout_price, true, nil, 3, buyout_color) or '---'}, {value=auction_record.unit_buyout_price > 0 and historical_value and al.percentage_historical(round(auction_record.unit_buyout_price / historical_value * 100)) or '---'}, }, record = auction_record, @@ -214,7 +224,7 @@ function private.post_auctions() duration_code = 4 end - aux.post.start( + aux_post.start( key, stack_size, duration, @@ -307,7 +317,7 @@ function private.update_item_configuration() local deposit_factor = neutral_faction() and .25 or .05 local stack_size, stack_count = stack_size_slider:GetValue(), stack_count_slider:GetValue() local amount = floor(selected_item.unit_vendor_price * deposit_factor * (selected_item.max_charges and 1 or stack_size)) * stack_count * UIDropDownMenu_GetSelectedValue(duration_dropdown) / 120 - deposit:SetText('Deposit: ' .. aux.money.to_string(amount, nil, nil, nil, inline_color.text.enabled)) + deposit:SetText('Deposit: ' .. aux_money.to_string(amount, nil, nil, nil, inline_color.text.enabled)) end refresh_button:Enable() @@ -359,7 +369,7 @@ function private.update_historical_value_button() if selected_item then local historical_value = history.value(selected_item.key) historical_value_button.amount = historical_value - historical_value_button:SetText(historical_value and aux.money.to_string(historical_value, true, nil, 3) or '---') + historical_value_button:SetText(historical_value and aux_money.to_string(historical_value, true, nil, 3) or '---') end end @@ -387,8 +397,8 @@ function private.set_item(item) stack_size_slider:SetValue(settings.stack_size) quantity_update(true) - unit_start_price:SetText(aux.money.to_string(settings.start_price, true, nil, 3, nil, true)) - unit_buyout_price:SetText(aux.money.to_string(settings.buyout_price, true, nil, 3, nil, true)) + unit_start_price:SetText(aux_money.to_string(settings.start_price, true, nil, 3, nil, true)) + unit_buyout_price:SetText(aux_money.to_string(settings.buyout_price, true, nil, 3, nil, true)) if not existing_auctions[selected_item.key] then refresh_entries() diff --git a/tabs/post/frame.lua b/tabs/post/frame.lua index 86a8c81..68ab9e5 100644 --- a/tabs/post/frame.lua +++ b/tabs/post/frame.lua @@ -1,15 +1,18 @@ -aux 'post_tab' local gui, listing, item_listing, money, search_tab = aux.gui, aux.listing, aux.item_listing, aux.money, aux.search_tab +aux_post_tab_frame = module -function private.create_frames() - private.frame = CreateFrame('Frame', nil, aux_frame) +local gui, listing, item_listing, money, search_tab = aux_gui, aux_listing, aux_item_listing, aux_money, aux_search_tab + +function public.create() + setfenv(1, getfenv(2)) + private.frame = CreateFrame('Frame', nil, AuxFrame) 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.content:SetPoint('BOTTOMLEFT', AuxFrame.content, 'BOTTOMLEFT', 0, 0) + frame.content:SetPoint('BOTTOMRIGHT', AuxFrame.content, 'BOTTOMRIGHT', 0, 0) frame.inventory = gui.panel(frame.content) frame.inventory:SetWidth(212) @@ -47,7 +50,7 @@ function private.create_frames() set_item(this.item_record) elseif arg1 == 'RightButton' then tab = 1 - search_tab.set_filter(strlower(aux.info.item(this.item_record.item_id).name) .. '/exact') + search_tab.set_filter(strlower(aux_info.item(this.item_record.item_id).name) .. '/exact') search_tab.execute(nil, false) end end, @@ -84,7 +87,7 @@ function private.create_frames() private.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:SetPoint('TOPLEFT', AuxFrame.content, 'BOTTOMLEFT', 0, -6) status_bar:update_status(100, 100) status_bar:set_text('') end @@ -107,7 +110,7 @@ function private.create_frames() item:SetPoint('TOPLEFT', 10, -6) item.button:SetScript('OnEnter', function() if selected_item then - aux.info.set_tooltip(selected_item.itemstring, this, 'ANCHOR_RIGHT') + aux_info.set_tooltip(selected_item.itemstring, this, 'ANCHOR_RIGHT') end end) item.button:SetScript('OnLeave', function() diff --git a/tabs/search/core.lua b/tabs/search/core.lua index e3a453e..3a45825 100644 --- a/tabs/search/core.lua +++ b/tabs/search/core.lua @@ -1,13 +1,21 @@ -aux 'search_tab' local scan, scan_util = aux.scan, aux.scan_util +aux_search_tab = module -StaticPopupDialogs['AUX_SEARCH_TABLE_FULL'] = { +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +TAB 'Search' + +StaticPopupDialogs.AUX_SEARCH_TABLE_FULL = { text = 'Table full!\nFurther results from this search will still be processed but no longer displayed in the table.', button1 = 'Ok', showAlert = 1, timeout = 0, hideOnEscape = 1, } -StaticPopupDialogs['AUX_SEARCH_AUTO_BUY'] = { +StaticPopupDialogs.AUX_SEARCH_AUTO_BUY = { text = 'Are you sure you want to activate automatic buyout?', button1 = 'Yes', button2 = 'No', @@ -20,10 +28,10 @@ StaticPopupDialogs['AUX_SEARCH_AUTO_BUY'] = { do local function action() aux_auto_buy_filter = _G[this:GetParent():GetName() .. 'EditBox']:GetText() - update_auto_buy_filter() + aux_search_tab_results.update_auto_buy_filter() end - StaticPopupDialogs['AUX_SEARCH_AUTO_BUY_FILTER'] = { + StaticPopupDialogs.AUX_SEARCH_AUTO_BUY_FILTER = { text = 'Enter a filter for automatic buyout.', button1 = 'Accept', button2 = 'Cancel', @@ -52,10 +60,10 @@ private.SAVED = 2 private.FILTER = 3 function LOAD() - create_frames() + aux_search_tab_frame.create() subtab = SAVED - update_auto_buy_filter() - new_search('') + aux_search_tab_results.update_auto_buy_filter() + aux_search_tab_results.new_search('') current_search.placeholder = true end diff --git a/tabs/search/filter.lua b/tabs/search/filter.lua index dd4fbef..1a7bf3b 100644 --- a/tabs/search/filter.lua +++ b/tabs/search/filter.lua @@ -1,4 +1,12 @@ -aux 'search_tab' local filter_util = aux.filter_util +aux_search_tab_filter = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local filter_util = aux_filter_util function private.valid_level(str) local level = tonumber(str) @@ -73,7 +81,7 @@ function private.update_form() if blizzard_query.exact then for key in temp-S('class', 'subclass', 'slot', 'quality') do - _E[key .. '_dropdown'].button:Disable() + _M[key .. '_dropdown'].button:Disable() end else class_dropdown.button:Enable() @@ -81,9 +89,9 @@ function private.update_form() end for key in temp-S('min_level', 'max_level') do if blizzard_query.exact then - _E[key .. '_input']:EnableMouse(false) + _M[key .. '_input']:EnableMouse(false) else - _E[key .. '_input']:EnableMouse(true) + _M[key .. '_input']:EnableMouse(true) end end if blizzard_query.exact then @@ -210,9 +218,9 @@ function public.formatted_post_filter(components) elseif component[1] == 'filter' then for parameter in present(component[3]) do if component[2] == 'item' then - parameter = aux.info.display_name(aux.cache.item_id(parameter)) or '[' .. parameter .. ']' + parameter = aux_info.display_name(aux_cache.item_id(parameter)) or '[' .. parameter .. ']' elseif filter_util.filters[component[2]].input_type == 'money' then - parameter = aux.money.to_string(aux.money.from_string(parameter), nil, true) + parameter = aux_money.to_string(aux_money.from_string(parameter), nil, true) end component_text = component_text .. filter_color(': ') .. parameter end diff --git a/tabs/search/frame.lua b/tabs/search/frame.lua index 7da833a..efb9305 100644 --- a/tabs/search/frame.lua +++ b/tabs/search/frame.lua @@ -1,21 +1,24 @@ -aux 'search_tab' local gui, completion, listing, auction_listing, filter_util = aux.gui, aux.completion, aux.listing, aux.auction_listing, aux.filter_util +aux_search_tab_frame = module -FILTER_SPACING = 28.5 +local gui, completion, listing, auction_listing, filter_util = aux_gui, aux_completion, aux_listing, aux_auction_listing, aux_filter_util -function private.create_frames() - private.frame = CreateFrame('Frame', nil, aux_frame) +local FILTER_SPACING = 28.5 + +function public.create() + setfenv(1, getfenv(2)) + private.frame = CreateFrame('Frame', nil, AuxFrame) frame:SetAllPoints() frame:SetScript('OnUpdate', on_update) frame:Hide() frame.filter = gui.panel(frame) - frame.filter:SetAllPoints(aux_frame.content) + frame.filter:SetAllPoints(AuxFrame.content) frame.results = gui.panel(frame) - frame.results:SetAllPoints(aux_frame.content) + frame.results:SetAllPoints(AuxFrame.content) frame.saved = CreateFrame('Frame', nil, frame) - frame.saved:SetAllPoints(aux_frame.content) + frame.saved:SetAllPoints(AuxFrame.content) frame.saved.favorite = gui.panel(frame.saved) frame.saved.favorite:SetWidth(378.5) @@ -149,9 +152,9 @@ function private.create_frames() btn:SetScript('OnClick', function() if this:GetChecked() then this:SetChecked(false) - aux_auto_buy_filter = nil + aux_search_tab_results.aux_auto_buy_filter = nil this.prettified = nil - auto_buy_validator = nil + aux_search_tab_results.auto_buy_validator = nil else StaticPopup_Show('AUX_SEARCH_AUTO_BUY_FILTER') end @@ -208,7 +211,7 @@ function private.create_frames() btn:SetHeight(25) btn:SetText('Stop') btn:SetScript('OnClick', function() - aux.scan.abort(search_scan_id) + aux_scan.abort(aux_search_tab_results.search_scan_id) end) private.stop_button = btn end @@ -227,7 +230,7 @@ function private.create_frames() local editbox = gui.editbox(controls) editbox:EnableMouse(1) editbox.formatter = function(str) - local queries = aux.filter_util.queries(str) + local queries = aux_filter_util.queries(str) return queries and join(map(copy(queries), function(query) return query.prettified end), ';') or color.red(str) end editbox.complete = completion.complete_filter @@ -247,7 +250,7 @@ function private.create_frames() end do local btn = gui.button(frame, gui.font_size.large) - btn:SetPoint('BOTTOMLEFT', aux_frame.content, 'TOPLEFT', 10, 8) + btn:SetPoint('BOTTOMLEFT', AuxFrame.content, 'TOPLEFT', 10, 8) btn:SetWidth(243) btn:SetHeight(22) btn:SetText('Search Results') @@ -276,7 +279,7 @@ function private.create_frames() local frame = CreateFrame('Frame', nil, frame) frame:SetWidth(265) frame:SetHeight(25) - frame:SetPoint('TOPLEFT', aux_frame.content, 'BOTTOMLEFT', 0, -6) + frame:SetPoint('TOPLEFT', AuxFrame.content, 'BOTTOMLEFT', 0, -6) private.status_bar_frame = frame end do @@ -583,8 +586,8 @@ function private.create_frames() private.filter_display = scroll_child end - private.status_bars = t - private.tables = t + public.status_bars = t + public.tables = t for _ = 1, 5 do local status_bar = gui.status_bar(frame) status_bar:SetAllPoints(status_bar_frame) diff --git a/tabs/search/results.lua b/tabs/search/results.lua index f518582..77cdce0 100644 --- a/tabs/search/results.lua +++ b/tabs/search/results.lua @@ -1,16 +1,24 @@ -aux 'search_tab' local info, scan = aux.info, aux.scan +aux_search_tab_results = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local info, scan = aux_info, aux_scan aux_auto_buy_filter = '' do local id = 0 - function private.search_scan_id.get() return id end - function private.search_scan_id.set(v) id = v end + function public.search_scan_id.get() return id end + function public.search_scan_id.set(v) id = v end end do local validator - function private.auto_buy_validator.get() return validator end - function private.auto_buy_validator.set(v) validator = v end + function public.auto_buy_validator.get() return validator end + function public.auto_buy_validator.set(v) validator = v end end do @@ -46,7 +54,7 @@ do update_continuation() end - function private.new_search(filter_string) + function public.new_search(filter_string) while getn(searches) > search_index do tremove(searches) end @@ -54,16 +62,16 @@ do tinsert(searches, search) if getn(searches) > 5 then tremove(searches, 1) - tinsert(status_bars, tremove(status_bars, 1)) - tinsert(tables, tremove(tables, 1)) + tinsert(aux_search_tab.status_bars, tremove(aux_search_tab.status_bars, 1)) + tinsert(aux_search_tab.tables, tremove(aux_search_tab.tables, 1)) search_index = 4 end - search.status_bar = status_bars[getn(searches)] + search.status_bar = aux_search_tab.status_bars[getn(searches)] search.status_bar:update_status(100, 100) search.status_bar:set_text('') - search.table = tables[getn(searches)] + search.table = aux_search_tab.tables[getn(searches)] search.table:SetSort(1, 2, 3, 4, 5, 6, 7, 8, 9) search.table:Reset() search.table:SetDatabase(search.records) @@ -116,9 +124,9 @@ function update_start_stop() end end -function private.update_auto_buy_filter() +function public.update_auto_buy_filter() if aux_auto_buy_filter ~= '' then - local queries, error = aux.filter_util.queries(aux_auto_buy_filter) + local queries, error = aux_filter_util.queries(aux_auto_buy_filter) if queries then if getn(queries) > 1 then print 'Error: The automatic buyout filter does not support multi-queries' @@ -312,7 +320,7 @@ function public.execute(resume, real_time) end local filter_string = search_box:GetText() - local queries, error = aux.filter_util.queries(filter_string) + local queries, error = aux_filter_util.queries(filter_string) if not queries then print('Invalid filter:', error) return @@ -338,7 +346,7 @@ function public.execute(resume, real_time) else new_search(filter_string) end - new_recent_search(filter_string, join(map(copy(queries), function(filter) return filter.prettified end), ';')) + aux_search_tab_saved.new_recent_search(filter_string, join(map(copy(queries), function(filter) return filter.prettified end), ';')) else current_search.records = t current_search.table:SetDatabase(current_search.records) @@ -390,7 +398,7 @@ do scan.abort(scan_id) state = SEARCHING - scan_id = aux.scan_util.find( + scan_id = aux_scan_util.find( record, current_search.status_bar, function() diff --git a/tabs/search/saved.lua b/tabs/search/saved.lua index fb4c06a..c81f1b6 100644 --- a/tabs/search/saved.lua +++ b/tabs/search/saved.lua @@ -1,4 +1,10 @@ -aux 'search_tab' +aux_search_tab_saved = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) aux_favorite_searches = t aux_recent_searches = t @@ -13,7 +19,7 @@ function private.update_search_listings() index = i, }) end - favorite_searches_listing:SetData(favorite_search_rows) + aux_search_tab.favorite_searches_listing:SetData(favorite_search_rows) local recent_search_rows = t for i, recent_search in aux_recent_searches do @@ -24,10 +30,10 @@ function private.update_search_listings() index = i, }) end - recent_searches_listing:SetData(recent_search_rows) + aux_search_tab.recent_searches_listing:SetData(recent_search_rows) end -function private.new_recent_search(filter_string, prettified) +function public.new_recent_search(filter_string, prettified) tinsert(aux_recent_searches, 1, { filter_string = filter_string, prettified = prettified, diff --git a/util/color.lua b/util/color.lua index 0f2649a..9c00f2a 100644 --- a/util/color.lua +++ b/util/color.lua @@ -1,4 +1,9 @@ -aux 'core' +aux_util_color = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) local COLORS = { text = {enabled = {255, 254, 250, 1}, disabled = {147, 151, 139, 1}}, diff --git a/util/completion.lua b/util/completion.lua index 51183a0..b6a8080 100644 --- a/util/completion.lua +++ b/util/completion.lua @@ -1,4 +1,12 @@ -aux 'completion' local filter_util = aux.filter_util +aux_completion = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local filter_util = aux_filter_util function public:complete_filter() if IsControlKeyDown() then -- TODO problem is ctrl-v, maybe find a better solution diff --git a/util/core.lua b/util/core.lua index 27da4f2..7bd5da1 100644 --- a/util/core.lua +++ b/util/core.lua @@ -1,29 +1,42 @@ -aux 'core' +aux_util = module + +include (green_t) +include (aux) do - local state = setmetatable({}, { __mode='k' }) - - function class(object, ...) - local interface = {} - for i = 1, arg.n do - local key = arg[i] - interface[key] = function(self, ...) - local object = state[self] - return object[key](object, unpack(arg)) - end - end - return function() - local proxy = setmetatable({}, { __metatable=false, __index=interface }) - state[proxy] = setmetatable({}, { __index=object }) - return proxy + local classes, interfaces, objects = {}, {}, setmetatable({}, { __mode='k' }) + local private_mt = { __metatable=false } + function private_mt:__newindex(k, v) + classes[self][k] = v + end + local public_mt = { __metatable=false } + function public_mt:__newindex(k, v) + classes[self][k] = v + interfaces[self][k] = function(self, ...) + return classes[self][k](objects[self][k], unpack(arg)) end end + local proxy_mt = { __metatable=false } + function proxy_mt:__call() + local proxy = setmetatable({}, { __metatable=false, __index=interfaces[self] }) + objects[proxy] = setmetatable({}, { __index=classes[self] }) + return proxy + end + function public.class() + local class, interface = {}, {} + local private, public, proxy = setmetatable({}, private_mt), setmetatable({}, public_mt), setmetatable({}, proxy_mt) + classes[private], classes[public], classes[proxy] = class, class, class + interfaces[public], interfaces[proxy] = interface, interface + return private, public, proxy + end end +-- alternatively rely on module encapsulation, modifier "method" to declare methods + do local _state = setmetatable(t, T('__mode', 'kv')) - local __index = function(self, key) - return _state[self].handler({ public=self, private=_state[self].state }, key) + local __index = function(self, k) + return _state[self].handler({ public=self, private=_state[self].state }, k) end function public.index_function(state, handler) -- TODO rename table-accessor, use predicate to stop local state, self = { handler=handler, state=state }, t @@ -89,7 +102,7 @@ function public.modified.get() end function public.copy(t) - local copy = _E.t + local copy = _M.t for k, v in t do copy[k] = v end table.setn(copy, getn(t)) return setmetatable(copy, getmetatable(t)) @@ -106,13 +119,13 @@ function public.key(value, t) end function public.keys(t) - local keys = _E.t + local keys = _M.t for k in t do tinsert(keys, k) end return keys end function public.values(t) - local values = _E.t + local values = _M.t for _, v in t do tinsert(values, v) end return values end diff --git a/util/filter.lua b/util/filter.lua index c49ad80..34e7b4b 100644 --- a/util/filter.lua +++ b/util/filter.lua @@ -1,4 +1,12 @@ -aux 'filter_util' local info = aux.info +aux_filter_util = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local info = aux_info function private.default_filter(str) return { @@ -116,7 +124,7 @@ public.filters = { input_type = 'number', validator = function(pct) return function(auction_record) - return aux.history.value(auction_record.item_key) and auction_record.unit_bid_price / aux.history.value(auction_record.item_key) * 100 <= pct + return aux_history.value(auction_record.item_key) and auction_record.unit_bid_price / aux_history.value(auction_record.item_key) * 100 <= pct end end }, @@ -126,8 +134,8 @@ public.filters = { validator = function(pct) return function(auction_record) return auction_record.unit_buyout_price > 0 - and aux.history.value(auction_record.item_key) - and auction_record.unit_buyout_price / aux.history.value(auction_record.item_key) * 100 <= pct + and aux_history.value(auction_record.item_key) + and auction_record.unit_buyout_price / aux_history.value(auction_record.item_key) * 100 <= pct end end }, @@ -136,7 +144,7 @@ public.filters = { input_type = 'money', validator = function(amount) return function(auction_record) - return aux.history.value(auction_record.item_key) and aux.history.value(auction_record.item_key) * auction_record.aux_quantity - auction_record.bid_price >= amount + return aux_history.value(auction_record.item_key) and aux_history.value(auction_record.item_key) * auction_record.aux_quantity - auction_record.bid_price >= amount end end }, @@ -145,7 +153,7 @@ public.filters = { input_type = 'money', validator = function(amount) return function(auction_record) - return auction_record.buyout_price > 0 and aux.history.value(auction_record.item_key) and aux.history.value(auction_record.item_key) * auction_record.aux_quantity - auction_record.buyout_price >= amount + return auction_record.buyout_price > 0 and aux_history.value(auction_record.item_key) and aux_history.value(auction_record.item_key) * auction_record.aux_quantity - auction_record.buyout_price >= amount end end }, @@ -154,7 +162,7 @@ public.filters = { input_type = 'money', validator = function(amount) return function(auction_record) - local disenchant_value = aux.disenchant.value(auction_record.slot, auction_record.quality, auction_record.level) + local disenchant_value = aux_disenchant.value(auction_record.slot, auction_record.quality, auction_record.level) return disenchant_value and disenchant_value - auction_record.bid_price >= amount end end @@ -164,7 +172,7 @@ public.filters = { input_type = 'money', validator = function(amount) return function(auction_record) - local disenchant_value = aux.disenchant.value(auction_record.slot, auction_record.quality, auction_record.level) + local disenchant_value = aux_disenchant.value(auction_record.slot, auction_record.quality, auction_record.level) return auction_record.buyout_price > 0 and disenchant_value and disenchant_value - auction_record.buyout_price >= amount end end @@ -174,7 +182,7 @@ public.filters = { input_type = 'money', validator = function(amount) return function(auction_record) - local vendor_price = aux.cache.merchant_info(auction_record.item_id) + local vendor_price = aux_cache.merchant_info(auction_record.item_id) return vendor_price and vendor_price * auction_record.aux_quantity - auction_record.bid_price >= amount end end @@ -184,7 +192,7 @@ public.filters = { input_type = 'money', validator = function(amount) return function(auction_record) - local vendor_price = aux.cache.merchant_info(auction_record.item_id) + local vendor_price = aux_cache.merchant_info(auction_record.item_id) return auction_record.buyout_price > 0 and vendor_price and vendor_price * auction_record.aux_quantity - auction_record.buyout_price >= amount end end @@ -261,7 +269,7 @@ end function private.parse_parameter(input_type, str) if input_type == 'money' then - local money = aux.money.from_string(str) + local money = aux_money.from_string(str) return money and money > 0 and money or nil elseif input_type == 'number' then local number = tonumber(str) @@ -352,7 +360,7 @@ function public.query(filter_string) blizzard_query = blizzard_query(filter), validator = validator(filter), prettified = prettified_filter_string(filter), - }, _E.suggestions(filter) + }, _M.suggestions(filter) end function public.queries(filter_string) @@ -427,8 +435,8 @@ function public.filter_string(components) elseif component[1] == 'filter' then query_builder.append(component[2]) for parameter in present(component[3]) do - if aux.filter_util.filters[component[2]].input_type == 'money' then - parameter = aux.money.to_string(aux.money.from_string(parameter), nil, true, nil, nil, true) + if aux_filter_util.filters[component[2]].input_type == 'money' then + parameter = aux_money.to_string(aux_money.from_string(parameter), nil, true, nil, nil, true) end query_builder.append(parameter) end @@ -445,7 +453,7 @@ function private.prettified_filter_string(filter) if component[1] == 'blizzard' then if component[2] == 'name' then if filter.blizzard.exact then - prettified.append(info.display_name(aux.cache.item_id(component[4])) or color.blizzard('[' .. component[4] .. ']')) + prettified.append(info.display_name(aux_cache.item_id(component[4])) or color.blizzard('[' .. component[4] .. ']')) elseif component[4] ~= '' then prettified.append(color.blizzard(component[4])) end @@ -460,10 +468,10 @@ function private.prettified_filter_string(filter) end for parameter in present(component[3]) do if component[2] == 'item' then - prettified.append(info.display_name(aux.cache.item_id(parameter)) or color.label.enabled('[' .. parameter .. ']')) + prettified.append(info.display_name(aux_cache.item_id(parameter)) or color.label.enabled('[' .. parameter .. ']')) else if filters[component[2]].input_type == 'money' then - prettified.append(aux.money.to_string(aux.money.from_string(parameter), nil, true, nil, inline_color.label.enabled)) + prettified.append(aux_money.to_string(aux_money.from_string(parameter), nil, true, nil, inline_color.label.enabled)) else prettified.append(color.label.enabled(parameter)) end @@ -490,7 +498,7 @@ function private.blizzard_query(filter) local filters = filter.blizzard local query = T('name', filters.name and filters.name[2]) local item_info, class_index, subclass_index, slot_index - local item_id = filters.name and aux.cache.item_id(filters.name[2]) + local item_id = filters.name and aux_cache.item_id(filters.name[2]) item_info = item_id and info.item(item_id) if filters.exact and item_info then item_info = info.item(item_id) diff --git a/util/info.lua b/util/info.lua index 63c6868..a88029b 100644 --- a/util/info.lua +++ b/util/info.lua @@ -1,4 +1,10 @@ -aux 'info' +aux_info = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) CreateFrame('GameTooltip', 'AuxTooltip', nil, 'GameTooltipTemplate') AuxTooltip:SetScript('OnTooltipAddMoney', function() @@ -365,7 +371,7 @@ function public.item(item_id, suffix_id) 'slot', slot, 'max_stack', max_stack, 'texture', texture - ) or aux.cache.item_info(item_id) + ) or aux_cache.item_info(item_id) end function public.item_class_index(item_class) diff --git a/util/money.lua b/util/money.lua index 628ad37..60bcca7 100644 --- a/util/money.lua +++ b/util/money.lua @@ -1,4 +1,10 @@ -aux 'money' +aux_money = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) public.GOLD_TEXT = '|cffffd70ag|r' public.SILVER_TEXT = '|cffc7c7cfs|r' diff --git a/util/persistence.lua b/util/persistence.lua index a0b88f3..33b8192 100644 --- a/util/persistence.lua +++ b/util/persistence.lua @@ -1,4 +1,10 @@ -aux 'persistence' +aux_persistence = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) aux_datasets = t diff --git a/util/scan.lua b/util/scan.lua index f5eb2fe..70acef9 100644 --- a/util/scan.lua +++ b/util/scan.lua @@ -1,4 +1,12 @@ -aux 'scan_util' local info , filter_util = aux.info, aux.filter_util +aux_scan_util = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) + +local info , filter_util = aux_info, aux_filter_util function public.find(auction_record, status_bar, on_abort, on_failure, on_success) @@ -31,7 +39,7 @@ function public.find(auction_record, status_bar, on_abort, on_failure, on_succes end local found - return aux.scan.start{ + return aux_scan.start{ type = auction_record.query_type, queries = queries, on_scan_start = function() diff --git a/util/sort.lua b/util/sort.lua index b47d362..a8f85b6 100644 --- a/util/sort.lua +++ b/util/sort.lua @@ -1,4 +1,10 @@ -aux 'sorting' +aux_sorting = module + +include (green_t) +include (aux) +include (aux_util) +include (aux_control) +include (aux_util_color) public.EQ = 0 public.LT = 1