Bring in events external

This commit is contained in:
tekkub ʕ ´ᴥ` ʔ 2016-09-10 19:02:40 -06:00
parent f0aac0b382
commit e85695c348
5 changed files with 209 additions and 96 deletions

View File

@ -7,24 +7,30 @@ local ItemSearch = LibStub('LibItemSearch-1.0')
local NUMROWS, SCROLLSTEP = 14, 5 local NUMROWS, SCROLLSTEP = 14, 5
for _,f in pairs{MerchantNextPageButton, MerchantPrevPageButton, MerchantPageText} do local function Hide(frame)
f:Hide() frame:Hide()
f.Show = f.Hide frame.Show = frame.Hide
end end
local GVS = CreateFrame("frame", nil, MerchantFrame) function ns.OnLoad()
GVS:SetWidth(315) Hide(MerchantNextPageButton)
GVS:SetHeight(294) Hide(MerchantPrevPageButton)
GVS:SetPoint("TOPLEFT", 8, -67) Hide(MerchantPageText)
GVS:SetScript("OnEvent", function(self, event, ...)
local GVS = CreateFrame("frame", nil, MerchantFrame)
GVS:SetWidth(315)
GVS:SetHeight(294)
GVS:SetPoint("TOPLEFT", 8, -67)
GVS:SetScript("OnEvent", function(self, event, ...)
if self[event] then return self[event](self, event, ...) end if self[event] then return self[event](self, event, ...) end
end) end)
GVS:Hide() GVS:Hide()
local rows = {} local rows = {}
for i=1,NUMROWS do for i=1,NUMROWS do
local row = ns.NewMerchantItemFrame(GVS) local row = ns.NewMerchantItemFrame(GVS)
if i == 1 then if i == 1 then
@ -36,12 +42,12 @@ for i=1,NUMROWS do
end end
rows[i] = row rows[i] = row
end end
local scrollbar = LibStub("tekKonfig-Scroll").new(GVS, 0, SCROLLSTEP) local scrollbar = LibStub("tekKonfig-Scroll").new(GVS, 0, SCROLLSTEP)
local offset = 0 local offset = 0
local function Refresh() local function Refresh()
local n = GetMerchantNumItems() local n = GetMerchantNumItems()
local row, n_searchmatch = 1, 0 local row, n_searchmatch = 1, 0
for i=1,n do for i=1,n do
@ -58,27 +64,29 @@ local function Refresh()
for i=row,NUMROWS do for i=row,NUMROWS do
rows[i]:Hide() rows[i]:Hide()
end end
end end
GVS.CURRENCY_DISPLAY_UPDATE = Refresh GVS.CURRENCY_DISPLAY_UPDATE = Refresh
GVS.BAG_UPDATE = Refresh GVS.BAG_UPDATE = Refresh
GVS.MERCHANT_UPDATE = Refresh GVS.MERCHANT_UPDATE = Refresh
ns.MakeSearchField(GVS, Refresh) ns.MakeSearchField(GVS, Refresh)
local f = scrollbar:GetScript("OnValueChanged") local f = scrollbar:GetScript("OnValueChanged")
scrollbar:SetScript("OnValueChanged", function(self, value, ...) scrollbar:SetScript("OnValueChanged", function(self, value, ...)
offset = math.floor(value) offset = math.floor(value)
Refresh() Refresh()
return f(self, value, ...) return f(self, value, ...)
end) end)
local offset = 0 local offset = 0
GVS:EnableMouseWheel(true) GVS:EnableMouseWheel(true)
GVS:SetScript("OnMouseWheel", function(self, value) scrollbar:SetValue(scrollbar:GetValue() - value * SCROLLSTEP) end) GVS:SetScript("OnMouseWheel", function(self, value)
GVS:SetScript("OnShow", function(self, noreset) scrollbar:SetValue(scrollbar:GetValue() - value * SCROLLSTEP)
end)
GVS:SetScript("OnShow", function(self, noreset)
local max = math.max(0, GetMerchantNumItems() - NUMROWS) local max = math.max(0, GetMerchantNumItems() - NUMROWS)
scrollbar:SetMinMaxValues(0, max) scrollbar:SetMinMaxValues(0, max)
scrollbar:SetValue(noreset and math.min(scrollbar:GetValue(), max) or 0) scrollbar:SetValue(noreset and math.min(scrollbar:GetValue(), max) or 0)
@ -87,31 +95,36 @@ GVS:SetScript("OnShow", function(self, noreset)
GVS:RegisterEvent("BAG_UPDATE") GVS:RegisterEvent("BAG_UPDATE")
GVS:RegisterEvent("MERCHANT_UPDATE") GVS:RegisterEvent("MERCHANT_UPDATE")
GVS:RegisterEvent("CURRENCY_DISPLAY_UPDATE") GVS:RegisterEvent("CURRENCY_DISPLAY_UPDATE")
end) end)
GVS:SetScript("OnHide", function() GVS:SetScript("OnHide", function()
GVS:UnregisterEvent("BAG_UPDATE") GVS:UnregisterEvent("BAG_UPDATE")
GVS:UnregisterEvent("MERCHANT_UPDATE") GVS:UnregisterEvent("MERCHANT_UPDATE")
GVS:UnregisterEvent("CURRENCY_DISPLAY_UPDATE") GVS:UnregisterEvent("CURRENCY_DISPLAY_UPDATE")
if StackSplitFrame:IsVisible() then StackSplitFrame:Hide() end if StackSplitFrame:IsVisible() then StackSplitFrame:Hide() end
end) end)
-- Reanchor the buyback button, it acts weird when switching tabs otherwise... -- Reanchor the buyback button, it acts weird when switching tabs otherwise...
MerchantBuyBackItem:ClearAllPoints() MerchantBuyBackItem:ClearAllPoints()
MerchantBuyBackItem:SetPoint("BOTTOMRIGHT", -7, 33) MerchantBuyBackItem:SetPoint("BOTTOMRIGHT", -7, 33)
local function Show() local function Show()
for i=1,12 do _G["MerchantItem"..i]:Hide() end for i=1,12 do _G["MerchantItem"..i]:Hide() end
if GVS:IsShown() then GVS:GetScript("OnShow")(GVS, true) else GVS:Show() end if GVS:IsShown() then GVS:GetScript("OnShow")(GVS, true) else GVS:Show() end
end end
hooksecurefunc("MerchantFrame_UpdateMerchantInfo", Show) hooksecurefunc("MerchantFrame_UpdateMerchantInfo", Show)
hooksecurefunc("MerchantFrame_UpdateBuybackInfo", function() hooksecurefunc("MerchantFrame_UpdateBuybackInfo", function()
GVS:Hide() GVS:Hide()
for i=1,12 do _G["MerchantItem"..i]:Show() end for i=1,12 do _G["MerchantItem"..i]:Show() end
end) end)
if MerchantFrame:IsVisible() and MerchantFrame.selectedTab == 1 then Show() end if MerchantFrame:IsVisible() and MerchantFrame.selectedTab == 1 then Show() end
-- Clean up our frame factories
for i,v in pairs(ns) do if i:match("^New") then ns[i] = nil end end
end

View File

@ -10,6 +10,7 @@
## X-LoadOn-Merchant: true ## X-LoadOn-Merchant: true
## X-LoadOn-InterfaceOptions: GnomishVendorShrinker ## X-LoadOn-InterfaceOptions: GnomishVendorShrinker
externals\events.lua
externals\itemid.lua externals\itemid.lua
externals\size_to_fit.lua externals\size_to_fit.lua
externals\tooltip_scanner.lua externals\tooltip_scanner.lua

View File

@ -1,3 +1,4 @@
events.lua
itemid.lua itemid.lua
size_to_fit.lua size_to_fit.lua
tooltip_scanner.lua tooltip_scanner.lua

94
externals/events.lua vendored Normal file
View File

@ -0,0 +1,94 @@
local myname, ns = ...
local frame = CreateFrame("Frame")
function ns.RegisterEvent(event, func)
frame:RegisterEvent(event)
if func then ns[event] = func end
end
function ns.UnregisterEvent(event)
frame:UnregisterEvent(event)
end
function ns.UnregisterAllEvents()
frame:UnregisterAllEvents()
end
-- Handles special OnLogin code for when the PLAYER_LOGIN event is fired.
-- If our addon is loaded after that event is fired, then we call it immediately
-- after the OnLoad handler is processed.
local function ProcessOnLogin()
if ns.OnLogin then
ns.OnLogin()
ns.OnLogin = nil
end
ProcessOnLogin = nil
if not ns.PLAYER_LOGIN then frame:UnregisterEvent("PLAYER_LOGIN") end
end
-- Handle special OnLoad code when our addon has loaded, if present
-- Also initializes the savedvar for us, if ns.dbname or ns.dbpcname is set
-- If ns.ADDON_LOADED is defined, the ADDON_LOADED event is not unregistered
local function ProcessOnLoad(arg1)
if arg1 ~= myname then return end
if ns.dbname then
local defaults = ns.dbdefaults or {}
_G[ns.dbname] = setmetatable(_G[ns.dbname] or {}, {__index = defaults})
ns.db = _G[ns.dbname]
end
if ns.dbpcname then
local defaults = ns.dbpcdefaults or {}
_G[ns.dbpcname] = setmetatable(_G[ns.dbpcname] or {}, {__index = defaults})
ns.dbpc = _G[ns.dbpcname]
end
if ns.OnLoad then
ns.OnLoad()
ns.OnLoad = nil
end
ProcessOnLoad = nil
if not ns.ADDON_LOADED then frame:UnregisterEvent("ADDON_LOADED") end
if ns.dbdefaults or ns.dbpcdefaults then ns.RegisterEvent("PLAYER_LOGOUT") end
if IsLoggedIn() then ProcessOnLogin()
else frame:RegisterEvent("PLAYER_LOGIN") end
end
-- Removes the default values from the db and dbpc as we're logging out
local function ProcessLogout()
if ns.dbdefaults then
for i,v in pairs(ns.dbdefaults) do
if ns.db[i] == v then ns.db[i] = nil end
end
end
if ns.dbpcdefaults then
for i,v in pairs(ns.dbpcdefaults) do
if ns.dbpc[i] == v then ns.dbpc[i] = nil end
end
end
end
frame:RegisterEvent("ADDON_LOADED")
frame:SetScript("OnEvent", function(self, event, arg1, ...)
if ProcessOnLoad and event == "ADDON_LOADED" then ProcessOnLoad(arg1) end
if ProcessOnLogin and event == "PLAYER_LOGIN" then ProcessOnLogin() end
if event == "PLAYER_LOGOUT" then ProcessLogout() end
if ns[event] then ns[event](event, arg1, ...) end
end)

View File

@ -3,7 +3,7 @@ local myname, ns = ...
local function NewItemFrame(self, i) local function NewItemFrame(self, i)
local item = ns.NewAltCurrencyItemFrame(self.parent) local item = self.NewAltCurrencyItemFrame(self.parent)
if i == 1 then if i == 1 then
item:SetPoint("LEFT") item:SetPoint("LEFT")
@ -39,7 +39,11 @@ function ns.NewAltCurrencyFrame(parent)
local frame = CreateFrame("Frame", nil, parent) local frame = CreateFrame("Frame", nil, parent)
frame:SetSize(1,1) frame:SetSize(1,1)
itemframesets[frame] = setmetatable({parent = frame}, MT) local t = {
parent = frame,
NewAltCurrencyItemFrame = ns.NewAltCurrencyItemFrame,
}
itemframesets[frame] = setmetatable(t, MT)
frame.SetValue = SetValue frame.SetValue = SetValue
frame.SizeToFit = ns.SizeToFit frame.SizeToFit = ns.SizeToFit