From c443509808dc910ca2604ffcd32f6a310b6508a0 Mon Sep 17 00:00:00 2001 From: Manuel Simon Hirsig Date: Sat, 20 Aug 2016 05:37:42 +0200 Subject: [PATCH] editbox changes --- components/tooltip.lua | 4 +- gui.lua | 78 ++++++++----- module.lua | 4 +- tabs/post/frames.lua | 65 ++++++----- tabs/search/core.lua | 80 ++++++------- tabs/search/filter.lua | 252 ++++++++++++++++++++-------------------- tabs/search/frames.lua | 200 ++++++++++++++----------------- tabs/search/results.lua | 192 +++++++++++++++--------------- util/core.lua | 12 ++ 9 files changed, 448 insertions(+), 439 deletions(-) diff --git a/components/tooltip.lua b/components/tooltip.lua index 94465ed..fe05d69 100644 --- a/components/tooltip.lua +++ b/components/tooltip.lua @@ -112,10 +112,10 @@ function extend_tooltip(tooltip, link, quantity) local value = aux.history.value(item_key) if auctionable then - if aux_tooltip_value then + if g.aux_tooltip_value then tooltip:AddLine('Value: '..(value and aux.money.to_string2(value * quantity) or GRAY_FONT_COLOR_CODE..'---'..FONT_COLOR_CODE_CLOSE), color.r, color.g, color.b) end - if aux_tooltip_daily then + if g.aux_tooltip_daily then local market_value = aux.history.market_value(item_key) tooltip:AddLine('Today: '..(market_value and aux.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 diff --git a/gui.lua b/gui.lua index b7e5d2e..5b0d6c7 100644 --- a/gui.lua +++ b/gui.lua @@ -153,7 +153,7 @@ do text:SetPoint('BOTTOMRIGHT', -8, 0) local highlight = getglobal('DropDownList1Button'..i..'Highlight') highlight:ClearAllPoints() - highlight:SetDrawLayer('OVERLAY') + highlight:SetDrawLayer 'OVERLAY' highlight:SetHeight(14) highlight:SetPoint('LEFT', 5, 0) highlight:SetPoint('RIGHT', -3, 0) @@ -175,7 +175,7 @@ do text:SetShadowOffset(1, -1) local highlight = getglobal('DropDownList1Button'..i..'Highlight') highlight:SetAllPoints() - highlight:SetDrawLayer('BACKGROUND') + highlight:SetDrawLayer 'BACKGROUND' local check = getglobal('DropDownList1Button'..i..'Check') check:SetWidth(24) check:SetHeight(24) @@ -239,14 +239,14 @@ function public.button(parent, text_height) local highlight = button:CreateTexture(nil, 'HIGHLIGHT') highlight:SetAllPoints() highlight:SetTexture(1, 1, 1, .2) - highlight:SetBlendMode('BLEND') + highlight:SetBlendMode 'BLEND' button.highlight = highlight do local label = button:CreateFontString() label:SetFont(config.font, text_height) label:SetPoint('CENTER', 0, 0) - label:SetJustifyH('CENTER') - label:SetJustifyV('CENTER') + label:SetJustifyH 'CENTER' + label:SetJustifyV 'CENTER' label:SetHeight(text_height) label:SetTextColor(color.text.enabled()) button:SetFontString(label) @@ -368,30 +368,48 @@ end function public.editbox(parent) local editbox = CreateFrame('EditBox', nil, parent) editbox:SetAutoFocus(false) - editbox:SetTextInsets(1, 2, 3, 3) - editbox:SetMaxLetters(256) + editbox:SetTextInsets(1.5, 1.5, 3, 3) + editbox:SetMaxLetters(nil) editbox:SetHeight(24) - editbox:SetFont(config.font, config.medium_font_size) editbox:SetTextColor(0, 0, 0, 0) set_content_style(editbox) - editbox:SetScript('OnEscapePressed', aux.C(editbox.ClearFocus, aux._this)) + local function colorize() this.display:SetText(call(this.colorizer, this:GetText()) or this:GetText()) end + local function format() this.display:SetText(call(this.formatter or this.colorizer, this:GetText()) or this:GetText()) end + editbox:SetScript('OnEscapePressed', function() + this:ClearFocus() + call(this.escape) + end) + editbox:SetScript('OnEnterPressed', function() call(this.enter) end) editbox:SetScript('OnEditFocusGained', function() - this.last_change = GetTime() + colorize() + this.focused = true this:HighlightText() this:SetScript('OnUpdate', function() - this.cursor:SetAlpha(mod(floor((GetTime()-this.last_change) * 2 + 1), 2)) + this.cursor:SetAlpha(mod(floor((GetTime()-this.cursor.last_change) * 2 + 1), 2)) end) + call(this.focus_gain) end) editbox:SetScript('OnEditFocusLost', function() + format() + this.focused = false this.cursor:SetAlpha(0) this:HighlightText(0, 0) this:SetScript('OnUpdate', nil) + call(this.focus_loss) end) editbox:SetScript('OnTextChanged', function() - this.last_change = GetTime() - this.text:SetText(call(this.formatter, this:GetText()) or this:GetText()) - this.cursor:SetPoint('LEFT', this.text, 'LEFT', max(0, this.text:GetStringWidth() - 2), 1) + if this.focused then + colorize() + else + format() + end + call(this.change) end) + editbox:SetScript('OnCursorChanged', function() + this.cursor.last_change = GetTime() + this.cursor:SetPoint(this:GetJustifyH(), this, this:GetJustifyH(), call(arg1 > 0 and max or min, 0, arg1 - 1.5), 1.5) + end) + editbox:SetScript('OnChar', function() call(this.char) end) do local last_click editbox:SetScript('OnMouseDown', function() @@ -414,18 +432,26 @@ function public.editbox(parent) editbox:SetTextColor(color.text.disabled()) editbox:ClearFocus() end - local text = aux.gui.label(editbox, config.medium_font_size) - text:SetPoint('LEFT', 1, 0) - text:SetPoint('RIGHT', -2, 0) - text:SetJustifyH 'LEFT' - text:SetTextColor(color.text.enabled()) - editbox.text = text + function editbox:SetAlignment(alignment) + self:SetJustifyH(alignment) + self.display:SetJustifyH(alignment) + end + function editbox:SetFontSize(size) + self:SetFont(config.font, size) + self.display:SetFont(config.font, size) + end + local display = aux.gui.label(editbox) + display:SetPoint('LEFT', 1.5, 0) + display:SetPoint('RIGHT', -1.5, 0) + display:SetTextColor(color.text.enabled()) + editbox.display = display local cursor = aux.gui.label(editbox, config.large_font_size) - cursor:SetJustifyH 'LEFT' cursor:SetText '|' cursor:SetTextColor(color.text.enabled()) cursor:SetAlpha(0) editbox.cursor = cursor + editbox:SetAlignment 'LEFT' + editbox:SetFontSize(config.medium_font_size) return editbox end @@ -512,7 +538,7 @@ function public.item(parent) item.texture = getglobal(btn:GetName()..'Icon') item.texture:SetTexCoord(.06, .94, .06, .94) item.name = aux.gui.label(btn, 15) - item.name:SetJustifyH('LEFT') + item.name:SetJustifyH 'LEFT' item.name:SetPoint('LEFT', btn, 'RIGHT', 10, 0) item.name:SetPoint('RIGHT', item, 'RIGHT', -10, .5) item.count = getglobal(btn:GetName()..'Count') @@ -591,6 +617,7 @@ function public.slider(parent) thumb_texture:SetTexture(color.content.background()) thumb_texture:SetHeight(18) thumb_texture:SetWidth(8) + set_size(thumb_texture, 8, 18) slider:SetThumbTexture(thumb_texture) local label = slider:CreateFontString(nil, 'OVERLAY') @@ -603,10 +630,9 @@ function public.slider(parent) local editbox = editbox(slider) editbox:SetPoint('LEFT', slider, 'RIGHT', 5, 0) - editbox:SetWidth(45) - editbox:SetHeight(18) - editbox:SetJustifyH 'CENTER' - editbox:SetFont(config.font, 17) + set_size(editbox, 45, 18) + editbox:SetAlignment 'CENTER' + editbox:SetFontSize(17) slider.label = label slider.editbox = editbox diff --git a/module.lua b/module.lua index 04e5733..6e1cc31 100644 --- a/module.lua +++ b/module.lua @@ -2,7 +2,7 @@ local tinsert, setfenv, rawget, rawset, setmetatable, mask, g = tinsert, setfenv local DECLARED, ACCESSOR, MUTABLE, PUBLIC = 1, 2, 4, 8 local ACCESSOR_KEY, MUTABLE_KEY, PUBLIC_KEY = 'accessor', 'mutable', 'public' local PROPERTY = {[ACCESSOR_KEY]=ACCESSOR, [MUTABLE_KEY]=MUTABLE, [PUBLIC_KEY]=PUBLIC} -local _data, _metadata, _modifier_properties, _imports, _interfaces = {}, {}, {}, {}, {} +local _data, _metadata, _modifier_properties, _imports, _envs, _interfaces = {}, {}, {}, {}, {}, {} local metadata_mt = { __index=function() return 0 end, __newindex=function(self, key, value) @@ -83,7 +83,7 @@ function g.aux_module(name) metadata = setmetatable({g=DECLARED, m=DECLARED, import=DECLARED, [ACCESSOR_KEY]=ACCESSOR, [MUTABLE_KEY]=ACCESSOR, [PUBLIC_KEY]=ACCESSOR}, metadata_mt) imports = {} - _interfaces[name] = interface + _envs[name], _interfaces[name] = env, interface _data[modifier], _data[env], _data[interface] = data, data, data _metadata[modifier], _metadata[env], _metadata[interface] = metadata, metadata, metadata _imports[importer], _imports[env] = imports, imports diff --git a/tabs/post/frames.lua b/tabs/post/frames.lua index 32bb275..f5f8bf1 100644 --- a/tabs/post/frames.lua +++ b/tabs/post/frames.lua @@ -130,7 +130,7 @@ function create_frames() slider:SetScript('OnValueChanged', function() quantity_update(true) end) - slider.editbox:SetScript('OnTextChanged', function() + slider.editbox.change = function() slider:SetValue(this:GetNumber()) quantity_update(true) if selected_item then @@ -138,7 +138,7 @@ function create_frames() settings.stack_size = this:GetNumber() write_settings(settings) end - end) + end slider.editbox:SetScript('OnTabPressed', function() if IsShiftKeyDown() then unit_buyout_price:SetFocus() @@ -150,7 +150,7 @@ function create_frames() end) slider.editbox:SetNumeric(true) slider.editbox:SetMaxLetters(3) - slider.label:SetText('Stack Size') + slider.label:SetText 'Stack Size' stack_size_slider = slider end do @@ -161,10 +161,10 @@ function create_frames() slider:SetScript('OnValueChanged', function() quantity_update() end) - slider.editbox:SetScript('OnTextChanged', function() + slider.editbox.change = function() slider:SetValue(this:GetNumber()) quantity_update() - end) + end slider.editbox:SetScript('OnTabPressed', function() if IsShiftKeyDown() then stack_size_slider.editbox:SetFocus() @@ -173,7 +173,7 @@ function create_frames() end end) slider.editbox:SetNumeric(true) - slider.label:SetText('Stack Count') + slider.label:SetText 'Stack Count' stack_count_slider = slider end do @@ -207,6 +207,10 @@ function create_frames() label:SetPoint('LEFT', checkbox, 'RIGHT', 4, 1) label:SetText 'Hide this item' hide_checkbox = checkbox + end + local function money_input() + + end do local frame = CreateFrame('Frame', nil, frame.parameters) @@ -217,12 +221,8 @@ function create_frames() frame:SetHeight(22) local editbox = aux.gui.editbox(frame) editbox:SetAllPoints() - editbox:SetJustifyH 'RIGHT' - editbox:SetFont(aux.gui.config.font, 17) - editbox:SetScript('OnTextChanged', function() - this.pretty:SetText(aux.money.to_string(get_unit_start_price(), true, nil, 3)) - refresh = true - end) + editbox:SetAlignment 'RIGHT' + editbox:SetFontSize(17) editbox:SetScript('OnTabPressed', function() if IsShiftKeyDown() and stack_count_slider.editbox:IsVisible() then stack_count_slider.editbox:SetFocus() @@ -232,22 +232,26 @@ function create_frames() unit_buyout_price:SetFocus() end end) - editbox:SetScript('OnEditFocusGained', function() - this:HighlightText() + editbox.change = function() + this.pretty:SetText(aux.money.to_string(get_unit_start_price(), true, nil, 3)) + refresh = true + end + editbox.enter = function() this:ClearFocus() end + editbox.focus_gain = function() this.pretty:Hide() this:SetAlpha(1) - end) - editbox:SetScript('OnEditFocusLost', function() + end + editbox.focus_loss = function() this:SetText(aux.money.to_string(get_unit_start_price(), true, nil, 3, nil, true)) this.pretty:Show() this:SetAlpha(0) - end) + end editbox:SetAlpha(0) editbox.pretty = aux.gui.label(frame, 17) editbox.pretty:SetPoint('LEFT', 1, 0) editbox.pretty:SetPoint('RIGHT', -2, 0) editbox.pretty:SetJustifyH 'RIGHT' - editbox.pretty:SetTextColor(unpack(aux.gui.color.text.enabled)) + editbox.pretty:SetTextColor(aux.gui.color.text.enabled()) do local label = aux.gui.label(frame, aux.gui.config.small_font_size) label:SetPoint('BOTTOMLEFT', frame, 'TOPLEFT', -2, 1) @@ -271,12 +275,8 @@ function create_frames() frame:SetHeight(22) local editbox = aux.gui.editbox(frame) editbox:SetAllPoints() - editbox:SetJustifyH 'RIGHT' - editbox:SetFont(aux.gui.config.font, 17) - editbox:SetScript('OnTextChanged', function() - this.pretty:SetText(aux.money.to_string(get_unit_buyout_price(), true, nil, 3)) - refresh = true - end) + editbox:SetAlignment 'RIGHT' + editbox:SetFontSize(17) editbox:SetScript('OnTabPressed', function() if IsShiftKeyDown() then unit_start_price:SetFocus() @@ -284,19 +284,20 @@ function create_frames() stack_size_slider.editbox:SetFocus() end end) - editbox:SetScript('OnEnterPressed', function() - this:ClearFocus() - end) - editbox:SetScript('OnEditFocusGained', function() - this:HighlightText() + editbox.change = function() + this.pretty:SetText(aux.money.to_string(get_unit_buyout_price(), true, nil, 3)) + refresh = true + end + editbox.enter = function() this:ClearFocus() end + editbox.focus_gain = function() this.pretty:Hide() this:SetAlpha(1) - end) - editbox:SetScript('OnEditFocusLost', function() + end + editbox.focus_loss = function() this:SetText(aux.money.to_string(get_unit_buyout_price(), true, nil, 3, nil, true)) this.pretty:Show() this:SetAlpha(0) - end) + end editbox:SetAlpha(0) editbox.pretty = aux.gui.label(frame, 17) editbox.pretty:SetPoint('LEFT', 1, 0) diff --git a/tabs/search/core.lua b/tabs/search/core.lua index 8d9d691..ec8c932 100644 --- a/tabs/search/core.lua +++ b/tabs/search/core.lua @@ -13,7 +13,7 @@ StaticPopupDialogs['AUX_SEARCH_AUTO_BUY'] = { button1 = 'Yes', button2 = 'No', OnAccept = function() - m.auto_buy_button:SetChecked(true) + auto_buy_button:SetChecked(true) end, timeout = 0, hideOnEscape = 1, @@ -21,7 +21,7 @@ StaticPopupDialogs['AUX_SEARCH_AUTO_BUY'] = { do local function action() g.aux_auto_buy_filter = getglobal(this:GetParent():GetName()..'EditBox'):GetText() - m.update_auto_buy_filter() + update_auto_buy_filter() end StaticPopupDialogs['AUX_SEARCH_AUTO_BUY_FILTER'] = { @@ -50,69 +50,69 @@ end RESULTS, SAVED, FILTER = 1, 2, 3 -function m.LOAD() - m.create_frames() - m.update_tab(m.SAVED) - m.update_auto_buy_filter() - m.new_search '' - m.current_search().placeholder = true +function LOAD() + create_frames() + set_tab(SAVED) + update_auto_buy_filter() + new_search '' + current_search.placeholder = true end -function m.OPEN() - m.frame:Show() - m.update_search_listings() +function OPEN() + frame:Show() + update_search_listings() end -function m.CLOSE() - m.close_settings() - m.current_search().table:SetSelectedRecord() - m.frame:Hide() +function CLOSE() + close_settings() + current_search.table:SetSelectedRecord() + frame:Hide() end -function m.CLICK_LINK(item_info) - m.set_filter(strlower(item_info.name)..'/exact') - m.execute(nil, false) +function CLICK_LINK(item_info) + set_filter(strlower(item_info.name)..'/exact') + execute(nil, false) end -function m.USE_ITEM(item_info) - m.set_filter(strlower(item_info.name)..'/exact') - m.execute(nil, false) +function USE_ITEM(item_info) + set_filter(strlower(item_info.name)..'/exact') + execute(nil, false) end -function update_tab(tab) +function set_tab(tab) - m.search_results_button:UnlockHighlight() - m.saved_searches_button:UnlockHighlight() - m.new_filter_button:UnlockHighlight() - m.frame.results:Hide() - m.frame.saved:Hide() - m.frame.filter:Hide() + search_results_button:UnlockHighlight() + saved_searches_button:UnlockHighlight() + new_filter_button:UnlockHighlight() + frame.results:Hide() + frame.saved:Hide() + frame.filter:Hide() - if tab == m.RESULTS then - m.frame.results:Show() - m.search_results_button:LockHighlight() - elseif tab == m.SAVED then - m.frame.saved:Show() - m.saved_searches_button:LockHighlight() - elseif tab == m.FILTER then - m.frame.filter:Show() - m.new_filter_button:LockHighlight() + if tab == RESULTS then + frame.results:Show() + search_results_button:LockHighlight() + elseif tab == SAVED then + frame.saved:Show() + saved_searches_button:LockHighlight() + elseif tab == FILTER then + frame.filter:Show() + new_filter_button:LockHighlight() end end function public.set_filter(filter_string) - m.search_box:SetText(filter_string) + search_box:SetText(filter_string) end function public.add_filter(filter_string) - local old_filter_string = m.search_box:GetText() + local old_filter_string = search_box:GetText() old_filter_string = trim(old_filter_string) if old_filter_string ~= '' then old_filter_string = old_filter_string..';' end - m.search_box:SetText(old_filter_string..filter_string) + search_box:SetText(old_filter_string..filter_string) end function blizzard_page_index(str) diff --git a/tabs/search/filter.lua b/tabs/search/filter.lua index 83063b2..aa3661c 100644 --- a/tabs/search/filter.lua +++ b/tabs/search/filter.lua @@ -8,94 +8,94 @@ end blizzard_query = setmetatable({}, { __newindex = function(_, key, value) if key == 'name' then - m.name_input:SetText(value) + name_input:SetText(value) elseif key == 'exact' then - m.exact_checkbox:SetChecked(value) + exact_checkbox:SetChecked(value) elseif key == 'min_level' then - m.min_level_input:SetText(value) + min_level_input:SetText(value) elseif key == 'max_level' then - m.max_level_input:SetText(value) + max_level_input:SetText(value) elseif key == 'usable' then - m.usable_checkbox:SetChecked(value) + usable_checkbox:SetChecked(value) elseif key == 'class' then - UIDropDownMenu_Initialize(m.class_dropdown, m.initialize_class_dropdown) - UIDropDownMenu_SetSelectedValue(m.class_dropdown, value) + UIDropDownMenu_Initialize(class_dropdown, initialize_class_dropdown) + UIDropDownMenu_SetSelectedValue(class_dropdown, value) elseif key == 'subclass' then - UIDropDownMenu_Initialize(m.subclass_dropdown, m.initialize_subclass_dropdown) - UIDropDownMenu_SetSelectedValue(m.subclass_dropdown, value) + UIDropDownMenu_Initialize(subclass_dropdown, initialize_subclass_dropdown) + UIDropDownMenu_SetSelectedValue(subclass_dropdown, value) elseif key == 'slot' then - UIDropDownMenu_Initialize(m.slot_dropdown, m.initialize_slot_dropdown) - UIDropDownMenu_SetSelectedValue(m.slot_dropdown, value) + UIDropDownMenu_Initialize(slot_dropdown, initialize_slot_dropdown) + UIDropDownMenu_SetSelectedValue(slot_dropdown, value) elseif key == 'quality' then - UIDropDownMenu_Initialize(m.quality_dropdown, m.initialize_quality_dropdown) - UIDropDownMenu_SetSelectedValue(m.quality_dropdown, value) + UIDropDownMenu_Initialize(quality_dropdown, initialize_quality_dropdown) + UIDropDownMenu_SetSelectedValue(quality_dropdown, value) end end, __index = function(_, key) if key == 'name' then - return m.name_input:GetText() + return name_input:GetText() elseif key == 'exact' then - return m.exact_checkbox:GetChecked() + return exact_checkbox:GetChecked() elseif key == 'min_level' then - return tonumber(m.min_level_input:GetText()) + return tonumber(min_level_input:GetText()) elseif key == 'max_level' then - return tonumber(m.max_level_input:GetText()) + return tonumber(max_level_input:GetText()) elseif key == 'usable' then - return m.usable_checkbox:GetChecked() + return usable_checkbox:GetChecked() elseif key == 'class' then - local class_index = UIDropDownMenu_GetSelectedValue(m.class_dropdown) + local class_index = UIDropDownMenu_GetSelectedValue(class_dropdown) return (class_index or 0) > 0 and class_index or nil elseif key == 'subclass' then - local subclass_index = UIDropDownMenu_GetSelectedValue(m.subclass_dropdown) + local subclass_index = UIDropDownMenu_GetSelectedValue(subclass_dropdown) return (subclass_index or 0) > 0 and subclass_index or nil elseif key == 'slot' then - local slot_token = UIDropDownMenu_GetSelectedValue(m.slot_dropdown) + local slot_token = UIDropDownMenu_GetSelectedValue(slot_dropdown) return slot_token ~= '' and slot_token or nil elseif key == 'quality' then - local quality_code = UIDropDownMenu_GetSelectedValue(m.quality_dropdown) + local quality_code = UIDropDownMenu_GetSelectedValue(quality_dropdown) return (quality_code or -1) >= 0 and quality_code or nil end end, }) function update_form() - if m.blizzard_query.class and GetAuctionItemSubClasses(m.blizzard_query.class) then - m.subclass_dropdown.button:Enable() + if blizzard_query.class and GetAuctionItemSubClasses(blizzard_query.class) then + subclass_dropdown.button:Enable() else - m.subclass_dropdown.button:Disable() + subclass_dropdown.button:Disable() end - if m.blizzard_query.subclass and GetAuctionInvTypes(m.blizzard_query.class, m.blizzard_query.subclass) then - m.slot_dropdown.button:Enable() + if blizzard_query.subclass and GetAuctionInvTypes(blizzard_query.class, blizzard_query.subclass) then + slot_dropdown.button:Enable() else - m.slot_dropdown.button:Disable() + slot_dropdown.button:Disable() end - if m.blizzard_query.exact then + if blizzard_query.exact then for _, key in {'class', 'subclass', 'slot', 'quality'} do m[key..'_dropdown'].button:Disable() end else - m.class_dropdown.button:Enable() - m.quality_dropdown.button:Enable() + class_dropdown.button:Enable() + quality_dropdown.button:Enable() end for _, key in {'min_level', 'max_level'} do - if m.blizzard_query.exact then + if blizzard_query.exact then m[key..'_input']:Disable() else m[key..'_input']:Enable() end end - if m.blizzard_query.exact then - m.usable_checkbox:Disable() + if blizzard_query.exact then + usable_checkbox:Disable() else - m.usable_checkbox:Enable() + usable_checkbox:Enable() end - if any({'min_level', 'max_level', 'usable', 'class', 'subclass', 'slot', 'quality'}, function(key) return m.blizzard_query[key] end) then - m.exact_checkbox:Disable() + if any({'min_level', 'max_level', 'usable', 'class', 'subclass', 'slot', 'quality'}, function(key) return blizzard_query[key] end) then + exact_checkbox:Disable() else - m.exact_checkbox:Enable() + exact_checkbox:Enable() end end @@ -108,80 +108,80 @@ function get_filter_builder_query() end end - local name = m.blizzard_query.name + local name = blizzard_query.name if not index(aux.filter.parse_query_string(name), 'blizzard', 'name') then name = aux.filter.quote(name) end - add((name ~= '' or m.blizzard_query.exact) and name) + add((name ~= '' or blizzard_query.exact) and name) - add(m.blizzard_query.exact and 'exact') - add(m.blizzard_query.min_level or m.blizzard_query.max_level and 1) - add(m.blizzard_query.max_level) - add(m.blizzard_query.usable and 'usable') + add(blizzard_query.exact and 'exact') + add(blizzard_query.min_level or blizzard_query.max_level and 1) + add(blizzard_query.max_level) + add(blizzard_query.usable and 'usable') - for _, class in {m.blizzard_query.class} do + for _, class in {blizzard_query.class} do local classes = {GetAuctionItemClasses()} add(strlower(classes[class])) - for _, subclass in {m.blizzard_query.subclass} do + for _, subclass in {blizzard_query.subclass} do local subclasses = {GetAuctionItemSubClasses(class)} add(strlower(subclasses[subclass])) - add(m.blizzard_query.slot and strlower(getglobal(m.blizzard_query.slot))) + add(blizzard_query.slot and strlower(getglobal(blizzard_query.slot))) end end - local quality = m.blizzard_query.quality + local quality = blizzard_query.quality if quality and quality >= 0 then add(strlower(getglobal('ITEM_QUALITY'..quality..'_DESC'))) end - local post_filter_string = aux.filter.query_string{blizzard={}, post=m.post_filter} + local post_filter_string = aux.filter.query_string{blizzard={}, post=post_filter} add(post_filter_string ~= '' and post_filter_string) return query_string or '' end function set_form(components) - m.clear_form() + clear_form() for key, filter in components.blizzard do - m.blizzard_query[key] = filter[2] + blizzard_query[key] = filter[2] end for _, component in components.post do - m.add_component(component) + add_component(component) end - m.update_filter_display() + update_filter_display() end function clear_form() - m.blizzard_query.name = '' - m.name_input:ClearFocus() - m.blizzard_query.exact = false - m.blizzard_query.min_level = '' - m.min_level_input:ClearFocus() - m.blizzard_query.max_level = '' - m.max_level_input:ClearFocus() - m.blizzard_query.usable = false - UIDropDownMenu_ClearAll(m.class_dropdown) - UIDropDownMenu_ClearAll(m.subclass_dropdown) - UIDropDownMenu_ClearAll(m.slot_dropdown) - UIDropDownMenu_ClearAll(m.quality_dropdown) - m.filter_parameter_input:ClearFocus() - m.post_filter = {} - m.filter_builder_state = {selected=0} - m.update_filter_display() + blizzard_query.name = '' + name_input:ClearFocus() + blizzard_query.exact = false + blizzard_query.min_level = '' + min_level_input:ClearFocus() + blizzard_query.max_level = '' + max_level_input:ClearFocus() + blizzard_query.usable = false + UIDropDownMenu_ClearAll(class_dropdown) + UIDropDownMenu_ClearAll(subclass_dropdown) + UIDropDownMenu_ClearAll(slot_dropdown) + UIDropDownMenu_ClearAll(quality_dropdown) + filter_parameter_input:ClearFocus() + post_filter = {} + filter_builder_state = {selected=0} + update_filter_display() end function import_query_string() - local components, error = aux.filter.parse_query_string(select(3, strfind(m.search_box:GetText(), '^([^;]*)'))) + local components, error = aux.filter.parse_query_string(select(3, strfind(search_box:GetText(), '^([^;]*)'))) if components then - m.set_form(components) + set_form(components) else log(error) end end function export_query_string() - m.search_box:SetText(m.get_filter_builder_query()) - m.filter_parameter_input:ClearFocus() + search_box:SetText(get_filter_builder_query()) + filter_parameter_input:ClearFocus() end function public.formatted_post_filter(components) @@ -200,7 +200,7 @@ function public.formatted_post_filter(components) end no_line_break = component[1] == 'operator' and component[2] == 'not' - local filter_color = (m.filter_builder_state.selected == i and aux.gui.color.orange or aux.gui.color.aux) + local filter_color = (filter_builder_state.selected == i and aux.gui.color.orange or aux.gui.color.aux) local component_text = filter_color(component[2]) if component[1] == 'operator' and component[2] ~= 'not' then component_text = component_text..filter_color(tonumber(component[3]) or '') @@ -222,7 +222,7 @@ function public.formatted_post_filter(components) end end end - str = str..m.data_link(i, component_text) + str = str..data_link(i, component_text) end return '

'..str..'

' @@ -239,43 +239,43 @@ function data_link_click() local button = arg3 local index = tonumber(arg1) if button == 'LeftButton' then - m.filter_builder_state.selected = index + filter_builder_state.selected = index elseif button == 'RightButton' then - m.remove_component(index) + remove_component(index) end - m.update_filter_display() + update_filter_display() end function remove_component(index) - index = index or m.filter_builder_state.selected - if m.filter_builder_state.selected >= index then - m.filter_builder_state.selected = max(m.filter_builder_state.selected - 1, min(1, getn(m.post_filter))) + index = index or filter_builder_state.selected + if filter_builder_state.selected >= index then + filter_builder_state.selected = max(filter_builder_state.selected - 1, min(1, getn(post_filter))) end - m.filter_builder_state[m.post_filter[index]] = nil - tremove(m.post_filter, index) + filter_builder_state[post_filter[index]] = nil + tremove(post_filter, index) end function add_component(component) - m.filter_builder_state.selected = m.filter_builder_state.selected + 1 - tinsert(m.post_filter, m.filter_builder_state.selected, component) + filter_builder_state.selected = filter_builder_state.selected + 1 + tinsert(post_filter, filter_builder_state.selected, component) end function add_post_filter() - for str in present(m.filter_input:GetText()) do + for str in present(filter_input:GetText()) do for filter in present(aux.filter.filters[str]) do if filter.input_type ~= '' then - str = str..'/'..m.filter_parameter_input:GetText() + str = str..'/'..filter_parameter_input:GetText() end end local components, error, suggestions = aux.filter.parse_query_string(str) if components and getn(components.blizzard) == 0 and getn(components.post) == 1 then - m.add_component(components.post[1]) - m.update_filter_display() - m.filter_parameter_input:SetText('') - m.filter_input:HighlightText() - m.filter_input:SetFocus() + add_component(components.post[1]) + update_filter_display() + filter_parameter_input:SetText('') + filter_input:HighlightText() + filter_input:SetFocus() elseif error then log(error) end @@ -286,30 +286,30 @@ do local text = '' function update_filter_display() - text = m.formatted_post_filter(m.post_filter) - m.filter_display:SetWidth(m.filter_display_size()) - m.set_filter_display_offset() - m.filter_display:SetText(text) + text = formatted_post_filter(post_filter) + filter_display:SetWidth(filter_display_size()) + set_filter_display_offset() + filter_display:SetText(text) end function filter_display_size() - local font, font_size = m.filter_display:GetFont() - m.filter_display.measure:SetFont(font, font_size) + local font, font_size = filter_display:GetFont() + filter_display.measure:SetFont(font, font_size) local lines = 0 local width = 0 for line in string.gfind(text, '

(.-)

') do lines = lines + 1 - m.filter_display.measure:SetText(line) - width = max(width, m.filter_display.measure:GetStringWidth()) + filter_display.measure:SetText(line) + width = max(width, filter_display.measure:GetStringWidth()) end return width, lines * (font_size + .5) end end function set_filter_display_offset(x_offset, y_offset) - local scroll_frame = m.filter_display:GetParent() + local scroll_frame = filter_display:GetParent() x_offset, y_offset = x_offset or scroll_frame:GetHorizontalScroll(), y_offset or scroll_frame:GetVerticalScroll() - local width, height = m.filter_display_size() + local width, height = filter_display_size() local x_lower_bound = min(0, scroll_frame:GetWidth() - width - 10) local x_upper_bound = 0 local y_lower_bound = 0 @@ -324,14 +324,14 @@ function initialize_filter_dropdown() text = filter, value = filter, func = function() - m.filter_input:SetText(this.value) + filter_input:SetText(this.value) if index(aux.filter.filters[this.value], 'input_type') == '' or this.value == 'not' then - m.add_post_filter() + add_post_filter() elseif aux.filter.filters[this.value] then - m.filter_parameter_input:Show() - m.filter_parameter_input:SetFocus() + filter_parameter_input:Show() + filter_parameter_input:SetFocus() else - m.filter_input:SetFocus() + filter_input:SetFocus() end end, } @@ -340,13 +340,13 @@ end function initialize_class_dropdown() local function on_click() - if this.value ~= m.blizzard_query.class then - UIDropDownMenu_SetSelectedValue(m.class_dropdown, this.value) - UIDropDownMenu_ClearAll(m.subclass_dropdown) - UIDropDownMenu_Initialize(m.subclass_dropdown, m.initialize_subclass_dropdown) - UIDropDownMenu_ClearAll(m.slot_dropdown) - UIDropDownMenu_Initialize(m.slot_dropdown, m.initialize_slot_dropdown) - m.update_form() + if this.value ~= blizzard_query.class then + UIDropDownMenu_SetSelectedValue(class_dropdown, this.value) + UIDropDownMenu_ClearAll(subclass_dropdown) + UIDropDownMenu_Initialize(subclass_dropdown, initialize_subclass_dropdown) + UIDropDownMenu_ClearAll(slot_dropdown) + UIDropDownMenu_Initialize(slot_dropdown, initialize_slot_dropdown) + update_form() end end @@ -367,15 +367,15 @@ end function initialize_subclass_dropdown() local function on_click() - if this.value ~= m.blizzard_query.subclass then - UIDropDownMenu_SetSelectedValue(m.subclass_dropdown, this.value) - UIDropDownMenu_ClearAll(m.slot_dropdown) - UIDropDownMenu_Initialize(m.slot_dropdown, m.initialize_slot_dropdown) - m.update_form() + if this.value ~= blizzard_query.subclass then + UIDropDownMenu_SetSelectedValue(subclass_dropdown, this.value) + UIDropDownMenu_ClearAll(slot_dropdown) + UIDropDownMenu_Initialize(slot_dropdown, initialize_slot_dropdown) + update_form() end end - local class_index = UIDropDownMenu_GetSelectedValue(m.class_dropdown) + local class_index = UIDropDownMenu_GetSelectedValue(class_dropdown) if class_index and GetAuctionItemSubClasses(class_index) then UIDropDownMenu_AddButton{ @@ -396,12 +396,12 @@ end function initialize_slot_dropdown() local function on_click() - UIDropDownMenu_SetSelectedValue(m.slot_dropdown, this.value) - m.update_form() + UIDropDownMenu_SetSelectedValue(slot_dropdown, this.value) + update_form() end - local class_index = UIDropDownMenu_GetSelectedValue(m.class_dropdown) - local subclass_index = UIDropDownMenu_GetSelectedValue(m.subclass_dropdown) + local class_index = UIDropDownMenu_GetSelectedValue(class_dropdown) + local subclass_index = UIDropDownMenu_GetSelectedValue(subclass_dropdown) if subclass_index and GetAuctionInvTypes(class_index, subclass_index) then UIDropDownMenu_AddButton{ @@ -422,8 +422,8 @@ end function initialize_quality_dropdown() local function on_click() - UIDropDownMenu_SetSelectedValue(m.quality_dropdown, this.value) - m.update_form() + UIDropDownMenu_SetSelectedValue(quality_dropdown, this.value) + update_form() end UIDropDownMenu_AddButton{ diff --git a/tabs/search/frames.lua b/tabs/search/frames.lua index a414e44..af7f026 100644 --- a/tabs/search/frames.lua +++ b/tabs/search/frames.lua @@ -69,66 +69,46 @@ function create_frames() controls = panel end do - local editbox = aux.gui.editbox(settings) - editbox:SetPoint('LEFT', 75, 0) - editbox:SetWidth(50) - editbox:SetNumeric(true) - editbox:SetMaxLetters(nil) - editbox:SetScript('OnTabPressed', function() - last_page_input:SetFocus() - end) - editbox:SetScript('OnEnterPressed', function() - this:ClearFocus() - execute() - end) - editbox:SetScript('OnTextChanged', function() - local page = tonumber(this:GetText()) - local valid_input = page and tostring(max(1, page)) or '' - if this:GetText() ~= valid_input then - this:SetText(valid_input) - end - if blizzard_page_index(this:GetText()) and not real_time_button:GetChecked() then - this:SetBackdropColor(unpack(aux.gui.color.state.enabled)) - else - this:SetBackdropColor(unpack(aux.gui.color.state.disabled)) - end - end) - local label = aux.gui.label(editbox, 16) - label:SetPoint('RIGHT', editbox, 'LEFT', -6, 0) - label:SetText('Pages') - label:SetTextColor(unpack(aux.gui.color.text.enabled)) - first_page_input = editbox - end - do - local editbox = aux.gui.editbox(settings) - editbox:SetPoint('LEFT', first_page_input, 'RIGHT', 10, 0) - editbox:SetWidth(50) - editbox:SetNumeric(true) - editbox:SetMaxLetters(nil) - editbox:SetScript('OnTabPressed', function() - first_page_input:SetFocus() - end) - editbox:SetScript('OnEnterPressed', function() - this:ClearFocus() - execute() - end) - editbox:SetScript('OnTextChanged', function() - local page = tonumber(this:GetText()) - local valid_input = page and tostring(max(1, page)) or '' - if this:GetText() ~= valid_input then - this:SetText(valid_input) - end - if blizzard_page_index(this:GetText()) and not real_time_button:GetChecked() then - this:SetBackdropColor(unpack(aux.gui.color.state.enabled)) - else - this:SetBackdropColor(unpack(aux.gui.color.state.disabled)) - end - end) - local label = aux.gui.label(editbox, aux.gui.config.medium_font_size) - label:SetPoint('RIGHT', editbox, 'LEFT', -3.5, 0) - label:SetText('-') - label:SetTextColor(unpack(aux.gui.color.text.enabled)) - last_page_input = editbox + local function change() + local page = tonumber(this:GetText()) + local valid_input = page and tostring(max(1, page)) or '' + if this:GetText() ~= valid_input then + this:SetText(valid_input) + end + if blizzard_page_index(this:GetText()) and not real_time_button:GetChecked() then + this:SetBackdropColor(aux.gui.color.state.enabled()) + else + this:SetBackdropColor(aux.gui.color.state.disabled()) + end + end + do + local editbox = aux.gui.editbox(settings) + editbox:SetPoint('LEFT', 75, 0) + editbox:SetWidth(50) + editbox:SetNumeric(true) + editbox:SetScript('OnTabPressed', function() last_page_input:SetFocus() end) + editbox.enter = execute + editbox.change = change + local label = aux.gui.label(editbox, 16) + label:SetPoint('RIGHT', editbox, 'LEFT', -6, 0) + label:SetText('Pages') + label:SetTextColor(aux.gui.color.text.enabled()) + first_page_input = editbox + end + do + local editbox = aux.gui.editbox(settings) + editbox:SetPoint('LEFT', first_page_input, 'RIGHT', 10, 0) + editbox:SetWidth(50) + editbox:SetNumeric(true) + editbox:SetScript('OnTabPressed', function() first_page_input:SetFocus() end) + editbox.enter = execute + editbox.change = change + local label = aux.gui.label(editbox, aux.gui.config.medium_font_size) + label:SetPoint('RIGHT', editbox, 'LEFT', -3.5, 0) + label:SetText('-') + label:SetTextColor(aux.gui.color.text.enabled()) + last_page_input = editbox + end end do local btn = aux.gui.checkbutton(settings) @@ -138,9 +118,9 @@ function create_frames() btn:SetText('Real Time Mode') btn:SetScript('OnClick', function() this:SetChecked(not this:GetChecked()) - this = first_page_input + g.this = first_page_input first_page_input:GetScript('OnTextChanged')() - this = last_page_input + g.this = last_page_input last_page_input:GetScript('OnTextChanged')() end) public.real_time_button = btn @@ -215,7 +195,7 @@ function create_frames() btn:RegisterForClicks('LeftButtonUp', 'RightButtonUp') btn:SetScript('OnClick', function() if arg1 == 'RightButton' then - set_filter(current_search().filter_string) + set_filter(current_search.filter_string) end execute() end) @@ -245,18 +225,17 @@ function create_frames() end do local editbox = aux.gui.editbox(controls) - editbox:SetMaxLetters(nil) editbox:EnableMouse(1) editbox.complete = aux.completion.complete_filter editbox:SetPoint('RIGHT', start_button, 'LEFT', -4, 0) editbox:SetHeight(25) - editbox:SetScript('OnChar', function() + editbox.char = function() this:complete() - end) + end editbox:SetScript('OnTabPressed', function() this:HighlightText(0, 0) end) - editbox:SetScript('OnEnterPressed', execute) + editbox.enter = execute search_box = editbox end do @@ -267,8 +246,8 @@ function create_frames() btn:SetPoint('BOTTOMLEFT', aux.frame.content, 'TOPLEFT', 10, 8) btn:SetWidth(243) btn:SetHeight(22) - btn:SetText('Search Results') - btn:SetScript('OnClick', function() update_tab(RESULTS) end) + btn:SetText 'Search Results' + btn:SetScript('OnClick', function() set_tab(RESULTS) end) search_results_button = btn end do @@ -276,8 +255,8 @@ function create_frames() btn:SetPoint('TOPLEFT', search_results_button, 'TOPRIGHT', 5, 0) btn:SetWidth(243) btn:SetHeight(22) - btn:SetText('Saved Searches') - btn:SetScript('OnClick', function() update_tab(SAVED) end) + btn:SetText 'Saved Searches' + btn:SetScript('OnClick', function() set_tab(SAVED) end) saved_searches_button = btn end do @@ -285,8 +264,8 @@ function create_frames() btn:SetPoint('TOPLEFT', saved_searches_button, 'TOPRIGHT', 5, 0) btn:SetWidth(243) btn:SetHeight(22) - btn:SetText('Filter Builder') - btn:SetScript('OnClick', function() update_tab(FILTER) end) + btn:SetText 'Filter Builder' + btn:SetScript('OnClick', function() set_tab(FILTER) end) new_filter_button = btn end do @@ -301,7 +280,7 @@ function create_frames() btn:SetPoint('TOPLEFT', status_bar_frame, 'TOPRIGHT', 5, 0) btn:SetWidth(80) btn:SetHeight(24) - btn:SetText('Bid') + btn:SetText 'Bid' btn:Disable() bid_button = btn end @@ -310,7 +289,7 @@ function create_frames() btn:SetPoint('TOPLEFT', bid_button, 'TOPRIGHT', 5, 0) btn:SetWidth(80) btn:SetHeight(24) - btn:SetText('Buyout') + btn:SetText 'Buyout' btn:Disable() buyout_button = btn end @@ -319,10 +298,10 @@ function create_frames() btn:SetPoint('TOPLEFT', buyout_button, 'TOPRIGHT', 5, 0) btn:SetWidth(80) btn:SetHeight(24) - btn:SetText('Clear') + btn:SetText 'Clear' btn:SetScript('OnClick', function() - while tremove(current_search().records) do end - current_search().table:SetDatabase() + while tremove(current_search.records) do end + current_search.table:SetDatabase() end) end do @@ -330,7 +309,7 @@ function create_frames() btn:SetPoint('TOPLEFT', status_bar_frame, 'TOPRIGHT', 5, 0) btn:SetWidth(80) btn:SetHeight(24) - btn:SetText('Favorite') + btn:SetText 'Favorite' btn:SetScript('OnClick', function() local filters = aux.filter.queries(search_box:GetText()) if filters then @@ -345,9 +324,8 @@ function create_frames() do local btn1 = aux.gui.button(frame.filter, 16) btn1:SetPoint('TOPLEFT', status_bar_frame, 'TOPRIGHT', 5, 0) - btn1:SetWidth(80) - btn1:SetHeight(24) - btn1:SetText('Search') + aux.gui.set_size(btn1, 80, 24) + btn1:SetText 'Search' btn1:SetScript('OnClick', function() export_query_string() execute() @@ -355,16 +333,14 @@ function create_frames() local btn2 = aux.gui.button(frame.filter, 16) btn2:SetPoint('LEFT', btn1, 'RIGHT', 5, 0) - btn2:SetWidth(80) - btn2:SetHeight(24) - btn2:SetText('Export') + aux.gui.set_size(btn2, 80, 24) + btn2:SetText 'Export' btn2:SetScript('OnClick', export_query_string) local btn3 = aux.gui.button(frame.filter, 16) btn3:SetPoint('LEFT', btn2, 'RIGHT', 5, 0) - btn3:SetWidth(80) - btn3:SetHeight(24) - btn3:SetText('Import') + aux.gui.set_size(btn3, 80, 24) + btn3:SetText 'Import' btn3:SetScript('OnClick', import_query_string) end do @@ -372,11 +348,11 @@ function create_frames() editbox.complete_item = aux.completion.complete(function() return g.aux_auctionable_items end) editbox:SetPoint('TOPLEFT', 14, -FILTER_SPACING) editbox:SetWidth(260) - editbox:SetScript('OnChar', function() + editbox.char = function() if blizzard_query.exact then this:complete_item() end - end) + end editbox:SetScript('OnTabPressed', function() if blizzard_query.exact then return @@ -387,11 +363,11 @@ function create_frames() min_level_input:SetFocus() end end) - editbox:SetScript('OnTextChanged', update_form) - editbox:SetScript('OnEnterPressed', aux.C(editbox.ClearFocus, editbox)) + editbox.change = update_form + editbox.enter = aux.C(editbox.ClearFocus, editbox) local label = aux.gui.label(editbox, aux.gui.config.small_font_size) label:SetPoint('BOTTOMLEFT', editbox, 'TOPLEFT', -2, 1) - label:SetText('Name') + label:SetText 'Name' name_input = editbox end do @@ -415,17 +391,17 @@ function create_frames() max_level_input:SetFocus() end end) - editbox:SetScript('OnEnterPressed', aux.C(editbox.ClearFocus, editbox)) - editbox:SetScript('OnTextChanged', function() + editbox.enter = aux.C(editbox.ClearFocus, editbox) + editbox.change = function() local valid_level = valid_level(this:GetText()) if tostring(valid_level) ~= this:GetText() then this:SetText(valid_level or '') end update_form() - end) + end local label = aux.gui.label(editbox, aux.gui.config.small_font_size) label:SetPoint('BOTTOMLEFT', editbox, 'TOPLEFT', -2, 1) - label:SetText('Level Range') + label:SetText 'Level Range' min_level_input = editbox end do @@ -440,14 +416,14 @@ function create_frames() name_input:SetFocus() end end) - editbox:SetScript('OnEnterPressed', aux.C(editbox.ClearFocus, editbox)) - editbox:SetScript('OnTextChanged', function() + editbox.enter = aux.C(editbox.ClearFocus, editbox) + editbox.change = function() local valid_level = valid_level(this:GetText()) if tostring(valid_level) ~= this:GetText() then this:SetText(valid_level or '') end update_form() - end) + end local label = aux.gui.label(editbox, aux.gui.config.medium_font_size) label:SetPoint('RIGHT', editbox, 'LEFT', -3, 0) label:SetText('-') @@ -533,14 +509,10 @@ function create_frames() local input = aux.gui.editbox(frame.filter) input:SetPoint('CENTER', filter_dropdown, 'CENTER', 0, 0) input:SetWidth(150) - input:SetScript('OnTabPressed', function() - filter_parameter_input:SetFocus() - end) + input:SetScript('OnTabPressed', function() filter_parameter_input:SetFocus() end) input.complete = aux.completion.complete(function() return {'and', 'or', 'not', unpack(keys(aux.filter.filters))} end) - input:SetScript('OnChar', function() - this:complete() - end) - input:SetScript('OnTextChanged', function() + input.char = function() this:complete() end + input.change = function() local filter = this:GetText() if aux.filter.filters[filter] and aux.filter.filters[filter].input_type ~= '' then local _, _, suggestions = aux.filter.parse_query_string(filter..'/') @@ -550,14 +522,14 @@ function create_frames() else filter_parameter_input:Hide() end - end) - input:SetScript('OnEnterPressed', function() + end + input.enter = function() if filter_parameter_input:IsVisible() then filter_parameter_input:SetFocus() else add_post_filter() end - end) + end filter_input = input end do @@ -567,10 +539,8 @@ function create_frames() input:SetScript('OnTabPressed', function() filter_input:SetFocus() end) - input:SetScript('OnChar', function() - this:complete() - end) - input:SetScript('OnEnterPressed', add_post_filter) + input.char = function() this:complete() end + input.enter = add_post_filter input:Hide() filter_parameter_input = input end @@ -628,7 +598,7 @@ function create_frames() local table = aux.auction_listing.CreateAuctionResultsTable(frame.results, aux.auction_listing.search_config) table:SetHandler('OnCellClick', function(cell, button) - if IsAltKeyDown() and current_search().table:GetSelection().record == cell.row.data.record then + if IsAltKeyDown() and current_search.table:GetSelection().record == cell.row.data.record then if button == 'LeftButton' and buyout_button:IsEnabled() then buyout_button:Click() elseif button == 'RightButton' and bid_button:IsEnabled() then diff --git a/tabs/search/results.lua b/tabs/search/results.lua index 9b7cd59..ce60136 100644 --- a/tabs/search/results.lua +++ b/tabs/search/results.lua @@ -9,7 +9,7 @@ do local searches = {} local search_index = 1 - function current_search() + function accessor.current_search() return searches[search_index] end @@ -23,21 +23,21 @@ do searches[search_index].status_bar:Show() searches[search_index].table:Show() - m.search_box:SetText(searches[search_index].filter_string) + search_box:SetText(searches[search_index].filter_string) if search_index == 1 then - m.previous_button:Disable() + previous_button:Disable() else - m.previous_button:Enable() + previous_button:Enable() end if search_index == getn(searches) then - m.next_button:Hide() - m.search_box:SetPoint('LEFT', m.previous_button, 'RIGHT', 4, 0) + next_button:Hide() + search_box:SetPoint('LEFT', previous_button, 'RIGHT', 4, 0) else - m.next_button:Show() - m.search_box:SetPoint('LEFT', m.next_button, 'RIGHT', 4, 0) + next_button:Show() + search_box:SetPoint('LEFT', next_button, 'RIGHT', 4, 0) end - m.update_start_stop() - m.update_continuation() + update_start_stop() + update_continuation() end function new_search(filter_string) @@ -51,65 +51,65 @@ do tinsert(searches, search) if getn(searches) > 5 then tremove(searches, 1) - tinsert(m.status_bars, tremove(m.status_bars, 1)) - tinsert(m.tables, tremove(m.tables, 1)) + tinsert(status_bars, tremove(status_bars, 1)) + tinsert(tables, tremove(tables, 1)) search_index = 4 end - search.status_bar = m.status_bars[getn(searches)] + search.status_bar = status_bars[getn(searches)] search.status_bar:update_status(100, 100) search.status_bar:set_text('') - search.table = m.tables[getn(searches)] + search.table = tables[getn(searches)] search.table:SetSort(1,2,3,4,5,6,7,8,9) search.table:Reset() search.table:SetDatabase(search.records) - m.update_search(getn(searches)) + update_search(getn(searches)) end function previous_search() - m.search_box:ClearFocus() - m.update_search(search_index - 1) - m.update_tab(m.RESULTS) + search_box:ClearFocus() + update_search(search_index - 1) + set_tab(RESULTS) end function next_search() - m.search_box:ClearFocus() - m.update_search(search_index + 1) - m.update_tab(m.RESULTS) + search_box:ClearFocus() + update_search(search_index + 1) + set_tab(RESULTS) end end function close_settings() - if m.settings_button.open then - m.settings_button:Click() + if settings_button.open then + settings_button:Click() end end function update_continuation() - if m.current_search().continuation then - m.resume_button:Show() - m.search_box:SetPoint('RIGHT', m.resume_button, 'LEFT', -4, 0) + if current_search.continuation then + resume_button:Show() + search_box:SetPoint('RIGHT', resume_button, 'LEFT', -4, 0) else - m.resume_button:Hide() - m.search_box:SetPoint('RIGHT', m.start_button, 'LEFT', -4, 0) + resume_button:Hide() + search_box:SetPoint('RIGHT', start_button, 'LEFT', -4, 0) end end function discard_continuation() - aux.scan.abort(m.search_scan_id) - m.current_search().continuation = nil - m.update_continuation() + aux.scan.abort(search_scan_id) + current_search.continuation = nil + update_continuation() end function update_start_stop() - if m.current_search().active then - m.stop_button:Show() - m.start_button:Hide() + if current_search.active then + stop_button:Show() + start_button:Hide() else - m.start_button:Show() - m.stop_button:Hide() + start_button:Show() + stop_button:Hide() end end @@ -122,9 +122,9 @@ function update_auto_buy_filter() elseif size(queries[1].blizzard_query) > 0 then log('Error: The automatic buyout filter does not support Blizzard filters') else - m.auto_buy_validator = queries[1].validator - m.auto_buy_filter_button.prettified = queries[1].prettified - m.auto_buy_filter_button:SetChecked(true) + auto_buy_validator = queries[1].validator + auto_buy_filter_button.prettified = queries[1].prettified + auto_buy_filter_button:SetChecked(true) return end end @@ -136,7 +136,7 @@ function start_real_time_scan(query, search, continuation) local ignore_page if not search then - search = m.current_search() + search = current_search query.blizzard_query.first_page = tonumber(continuation) or 0 query.blizzard_query.last_page = tonumber(continuation) or 0 ignore_page = not tonumber(continuation) @@ -144,7 +144,7 @@ function start_real_time_scan(query, search, continuation) local next_page local new_records = {} - m.search_scan_id = aux.scan.start{ + search_scan_id = aux.scan.start{ type = 'list', queries = {query}, auto_buy_validator = search.auto_buy_validator, @@ -191,7 +191,7 @@ function start_real_time_scan(query, search, continuation) query.blizzard_query.first_page = next_page query.blizzard_query.last_page = next_page - m.start_real_time_scan(query, search) + start_real_time_scan(query, search) end, on_abort = function() search.status_bar:update_status(100, 100) @@ -199,12 +199,12 @@ function start_real_time_scan(query, search, continuation) search.continuation = next_page or not ignore_page and query.blizzard_query.first_page or true - if m.current_search() == search then - m.update_continuation() + if current_search == search then + update_continuation() end search.active = false - m.update_start_stop() + update_start_stop() end, } end @@ -212,7 +212,7 @@ end function start_search(queries, continuation) local current_query, current_page, total_queries, start_query, start_page - local search = m.current_search() + local search = current_search total_queries = getn(queries) @@ -228,7 +228,7 @@ function start_search(queries, continuation) end - m.search_scan_id = aux.scan.start{ + search_scan_id = aux.scan.start{ type = 'list', queries = queries, auto_buy_validator = search.auto_buy_validator, @@ -271,12 +271,12 @@ function start_search(queries, continuation) search.status_bar:update_status(100, 100) search.status_bar:set_text('Scan complete') - if m.current_search() == search and m.frame.results:IsVisible() and getn(search.records) == 0 then - m.update_tab(m.SAVED) + if current_search == search and frame.results:IsVisible() and getn(search.records) == 0 then + set_tab(SAVED) end search.active = false - m.update_start_stop() + update_start_stop() end, on_abort = function() search.status_bar:update_status(100, 100) @@ -287,12 +287,12 @@ function start_search(queries, continuation) else search.continuation = {start_query, start_page} end - if m.current_search() == search then - m.update_continuation() + if current_search == search then + update_continuation() end search.active = false - m.update_start_stop() + update_start_stop() end, } end @@ -300,15 +300,15 @@ end function public.execute(resume, real_time) if resume then - real_time = m.current_search().real_time + real_time = current_search.real_time elseif real_time == nil then - real_time = m.real_time_button:GetChecked() + real_time = real_time_button:GetChecked() end if resume then - m.search_box:SetText(m.current_search().filter_string) + search_box:SetText(current_search.filter_string) end - local filter_string = m.search_box:GetText() + local filter_string = search_box:GetText() local queries = aux.filter.queries(filter_string) if not queries then @@ -323,45 +323,45 @@ function public.execute(resume, real_time) end end - m.search_box:ClearFocus() + search_box:ClearFocus() if resume then - m.current_search().table:SetSelectedRecord() + current_search.table:SetSelectedRecord() else - if filter_string ~= m.current_search().filter_string or m.current_search().placeholder then - if m.current_search().placeholder then - m.current_search().filter_string = filter_string - m.current_search().placeholder = false + if filter_string ~= current_search.filter_string or current_search.placeholder then + if current_search.placeholder then + current_search.filter_string = filter_string + current_search.placeholder = false else - m.new_search(filter_string) + new_search(filter_string) end - m.new_recent_search(filter_string, table.concat(map(queries, function(filter) return filter.prettified end), ';')) + new_recent_search(filter_string, table.concat(map(queries, function(filter) return filter.prettified end), ';')) else - m.current_search().records = {} - m.current_search().table:SetDatabase(m.current_search().records) - if m.current_search().real_time ~= real_time then - m.current_search().table:Reset() + current_search.records = {} + current_search.table:SetDatabase(current_search.records) + if current_search.real_time ~= real_time then + current_search.table:Reset() end end - m.current_search().real_time = m.real_time_button:GetChecked() - m.current_search().auto_buy = m.auto_buy_button:GetChecked() - m.current_search().auto_buy_validator = m.auto_buy_validator + current_search.real_time = real_time_button:GetChecked() + current_search.auto_buy = auto_buy_button:GetChecked() + current_search.auto_buy_validator = auto_buy_validator end - local continuation = resume and m.current_search().continuation - m.discard_continuation() - m.current_search().active = true - m.update_start_stop() + local continuation = resume and current_search.continuation + discard_continuation() + current_search.active = true + update_start_stop() - m.update_tab(m.RESULTS) + set_tab(RESULTS) if real_time then - m.start_real_time_scan(queries[1], nil, continuation) + start_real_time_scan(queries[1], nil, continuation) else for _, query in queries do - query.blizzard_query.first_page = m.blizzard_page_index(m.first_page_input:GetText()) - query.blizzard_query.last_page = m.blizzard_page_index(m.last_page_input:GetText()) + query.blizzard_query.first_page = blizzard_page_index(first_page_input:GetText()) + query.blizzard_query.last_page = blizzard_page_index(last_page_input:GetText()) end - m.start_search(queries, continuation) + start_search(queries, continuation) end end @@ -379,7 +379,7 @@ do local found_index function find_auction(record) - local search = m.current_search() + local search = current_search if not search.table:ContainsRecord(record) or aux.is_player(record.owner) then return @@ -389,7 +389,7 @@ do state = SEARCHING scan_id = aux.scan_util.find( record, - m.current_search().status_bar, + current_search.status_bar, function() state = IDLE end, @@ -406,24 +406,24 @@ do found_index = index if not record.high_bidder then - m.bid_button:SetScript('OnClick', function() - if m.test(record)(index) and search.table:ContainsRecord(record) then + bid_button:SetScript('OnClick', function() + if test(record)(index) and search.table:ContainsRecord(record) then aux.place_bid('list', index, record.bid_price, record.bid_price < record.buyout_price and function() aux.info.bid_update(record) search.table:SetDatabase() end or aux.C(search.table.RemoveAuctionRecord, search.table, record)) end end) - m.bid_button:Enable() + bid_button:Enable() end if record.buyout_price > 0 then - m.buyout_button:SetScript('OnClick', function() - if m.test(record)(index) and search.table:ContainsRecord(record) then + buyout_button:SetScript('OnClick', function() + if test(record)(index) and search.table:ContainsRecord(record) then aux.place_bid('list', index, record.buyout_price, aux.C(search.table.RemoveAuctionRecord, search.table, record)) end end) - m.buyout_button:Enable() + buyout_button:Enable() end end ) @@ -431,22 +431,22 @@ do function on_update() if state == IDLE or state == SEARCHING then - m.buyout_button:Disable() - m.bid_button:Disable() + buyout_button:Disable() + bid_button:Disable() end if state == SEARCHING then return end - local selection = m.current_search().table:GetSelection() + local selection = current_search.table:GetSelection() if not selection then state = IDLE elseif selection and state == IDLE then - m.find_auction(selection.record) - elseif state == FOUND and not m.test(selection.record)(found_index) then - m.buyout_button:Disable() - m.bid_button:Disable() + find_auction(selection.record) + elseif state == FOUND and not test(selection.record)(found_index) then + buyout_button:Disable() + bid_button:Disable() if not aux.bid_in_progress() then state = IDLE end diff --git a/util/core.lua b/util/core.lua index 6cddfdb..a37b5be 100644 --- a/util/core.lua +++ b/util/core.lua @@ -39,6 +39,18 @@ do end end +do + local _state = setmetatable({}, {__mode='kv'}) + local __index = function(self, key) + return _state[self].handler({public=self, private=_state[self].state}, key) + end + function public.index_function(state, handler) + local state, self = {handler=handler, state=state}, {} + _state[self] = state + return setmetatable(self, {__metatable=false, __index=__index, state=state}) + end +end + function public.temp(object) getfenv(2).__ = object return object