-------------------------------------------------------------------------- |
-- LibDefaults.lua |
-------------------------------------------------------------------------- |
--[[ |
LibDefaults |
|
author: AnduinLothar <karlkfi@cosmosui.org> |
|
-Saved Variable Initialization Library |
|
Change List |
v1.0 |
- Hopefully one version is enough! |
|
$Date: 2007-07-03 21:22:03 -0500 (Tue, 03 Jul 2007) $ |
$Rev: 5009 $ |
|
]]-- |
|
local lib, oldminor = LibStub:NewLibrary("LibDefaults", 1) |
if not lib then return end |
|
-- <= == == == == == == == == == == == == => |
-- => Public |
-- <= == == == == == == == == == == == == => |
|
--[[ |
Register a saved variable to be initialized to a default value |
if it is nil once the addon's saved variables are loaded. |
Can handle N-depth table values as well without requiring initialization of the tables themselves. |
The addon saved variable defaults will be automatically initialized at the addon's ADDON_LOADED event, |
or they can be forced to load using lib:InitAddOn(addonName). |
|
Usage: |
loader:SetDefault("MyAddOn", "SavedVar(Table)Name", [key1, [key2, [...] ] ], value) |
Example Usage: |
local loader = LibStub("LibDefaults") |
loader:SetDefault("MyAddOn", "SavedVarName", SavedVarValue) |
]]-- |
function lib:SetDefault(addonName, varName, ...) |
if not self.addonVarList[addonName] then |
self.addonVarList[addonName] = {} |
end |
tinsert(self.addonVarList[addonName], { varName = varName; value = {...}; } ) |
end |
|
--[[ |
Register a function to be executed once an addon's variables have been loaded. |
Fires after addon defaults have been set. |
|
Usage: |
SetDefault("MyAddOn", "SavedVar(Table)Name", [key1, [key2, [...] ] ], value) |
Example Usage: |
local loader = LibStub("LibDefaults") |
loader:SetScript("MyAddOn", function(addonName) dostuff() end) |
]]-- |
function lib:SetScript(addonName, func) |
if not self.addonScriptList[addonName] then |
self.addonScriptList[addonName] = {} |
end |
tinsert(self.addonScriptList[addonName], func) |
end |
|
-- <= == == == == == == == == == == == == => |
-- => Private |
-- <= == == == == == == == == == == == == => |
|
lib.addonVarList = {} |
lib.addonScriptList = {} |
|
-- Initialization of Defaults |
local function recursInit(t, key, keyOrValue, ...) |
if select("#", ...) > 0 then |
if t[key] == nil then |
t[key] = {} |
end |
recursInit(t[key], keyOrValue, ...) |
elseif t[key] == nil then |
t[key] = keyOrValue |
end |
end |
|
function lib:InitAddOn(addonName) |
if self.addonVarList[addonName] then |
-- Initialize Variables that are nil |
for i, set in ipairs(self.addonVarList[addonName]) do |
recursInit(_G, set.varName, unpack(set.value)) |
end |
-- Empty the list |
self.addonVarList[addonName] = nil |
end |
if self.addonScriptList[addonName] then |
-- execute scripts |
for i, func in ipairs(self.addonScriptList[addonName]) do |
func(addonName) |
end |
-- Empty the list |
self.addonScriptList[addonName] = nil |
end |
end |
|
local frame = CreateFrame("Frame") |
frame:RegisterEvent("ADDON_LOADED") |
frame:SetScript("OnEvent", function(self, event, addonName) lib:InitAddOn(addonName) end) |
|
lib.frame = frame |