zzLib/Libs/zzAddOn/zzAddOn.lua

80 lines
2.9 KiB
Lua

local lib, oldminor = LibStub:NewLibrary("zzAddOn", 1)
if not lib then return end
oldminor = oldminor or 0
lib['callbacks'] = lib['callbacks'] or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib)
lib['addons'] = lib['addons'] or {}
lib['events'] = lib['events'] or CreateFrame("FRAME")
local mixins = {'RegisterEvent','IsClassic'}
local events = lib['events']
function lib:RegisterEvent(event)
if(type(event) == 'table') then
for key, ev in pairs(event) do
self:RegisterEvent(ev)
end
else
-- print("[zza] Register CB", event)
if(event ~= 'ADDON_LOADED' and not lib['events']:IsEventRegistered(event)) then
lib['events']:RegisterEvent(event)
end
lib['RegisterCallback'](self['events'], event)
end
end
function lib:IsClassic()
return WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
end
function lib:NewAddOn(addonName, addonTable)
if(type(addonName) == 'string') then
lib['addons'][addonName] = addonTable
lib:Embed(addonTable)
if(addonTable['events']) then
for ev, func in pairs(addonTable['events']) do
if(type(func) == 'function') then
-- print("[zza] Register", ev)
addonTable:RegisterEvent(ev)
end
end
end
return lib['addons'][addonName]
end
end
function lib:Embed(target)
for _,name in pairs(mixins) do
target[name] = lib[name]
end
end
for target, _ in pairs(lib['addons']) do
lib:Embed(target)
end
lib['events']:RegisterEvent('ADDON_LOADED')
lib['events']:SetScript("OnEvent", function(self, event, ...)
-- print("[zza]", self, event, ...)
local addonName = ...
local addon = lib['addons'][addonName]
if(addon) then
if(event == 'ADDON_LOADED') then
if(addon['specs'] and addon['specs']['sv'] and not addon['db']) then
print('dbname',type(addon['specs']['sv']),type(addon['specs']['sv']) == 'boolean' and addonName or addon['specs']['sv'])
local dbname = format('%sDB', type(addon['specs']['sv']) == 'boolean' and addonName or addon['specs']['sv'])
addon['db'] = LibStub("AceDB-3.0"):New(dbname, type(addon['specs']['defaults']) == 'table' and addon['specs']['defaults'] or {}, true)
if(addon['specs']['ldb']) then
local ldbobj = LibStub:GetLibrary("zzLDB"):AddLDB(addon['specs']['name'], addon['specs']['ldb'], addon['db'])
end
if(addon['specs']['cfg']) then
local config = LibStub:GetLibrary("zzConfig")
addon['options'] = config:InitConfig(addon, addonName)
addon['options']['args']['profile'] = LibStub("AceDBOptions-3.0"):GetOptionsTable(addon['db'])
function addon:RefreshConfig()
print('refresh')
addon['db']['profile'][addon['specs']['name']] = {}
if(addon['specs']['cfgRefresh']) then
addon['specs']['cfgRefresh'](addon['db'])
end
end
addon['db'].RegisterCallback(addon, "OnProfileReset", "RefreshConfig")
end
end
end
end
-- print("[zza] Fire", event, ...)
lib['callbacks']:Fire(event, ...)
end)