zz_Bags/Libs/zzLDB/zzLDB.lua

84 lines
2.5 KiB
Lua
Executable File

local lib = LibStub:NewLibrary("zzLDB", 6)
if not lib then return end
local ldb = LibStub:GetLibrary("LibDataBroker-1.1")
local ldbicon = LibStub:GetLibrary("LibDBIcon-1.0")
local mixins = {'AddLDB', 'GetLDB', 'DefaultOnClick', 'DefaultOnText'}
local defaults = {
['hide'] = false,
}
lib['ldbs'] = lib['ldbs'] or {}
local function proto_OnClick(self, button)
-- print("onclick required", self, button)
end
function lib:DefaultOnClick(_, button, addon, childName)
if(IsShiftKeyDown() and button == "LeftButton") then
local sb = addon['db']['global']['ldbicons']
sb[childName]['hide'] = not sb[childName]['hide']
if(ldbicon) then
if(sb[childName]['hide']) then
ldbicon:Hide(childName)
else
ldbicon:Show(childName)
end
end
else
if(not InCombatLockdown()) then
if(SettingsPanel) then
if(SettingsPanel:IsVisible()) then
HideUIPanel(SettingsPanel)
HideUIPanel(GameMenuFrame)
else
Settings.OpenToCategory(childName)
end
elseif(InterfaceOptionsFrame) then
if(InterfaceOptionsFrame:IsVisible()) then
InterfaceOptionsFrame:Hide()
else
InterfaceOptionsFrame_OpenToCategory(childName)
InterfaceOptionsFrame_OpenToCategory(childName) -- Twice because of a bug in InterfaceOptionsFrame_OpenToCategory
end
end
end
end
end
function lib:DefaultOnText(objname, message)
local ldbobj = lib:GetLDB(objname)
if(ldbobj['text'] ~= message) then
ldbobj['text'] = message
end
end
function lib:GetLDB(objname)
return ldb:GetDataObjectByName(objname)
end
function lib:AddLDB(objname, obj, db)
local obj = obj or {}
obj['type'] = obj['type'] or 'launcher'
obj['text'] = obj['text'] or objname
if(obj['type '] == 'launcher') then
obj['OnClick'] = obj['OnClick'] or proto_OnClick
end
if(ldb) then
local ldbobj = ldb:GetDataObjectByName(objname) or ldb:NewDataObject(objname, obj)
if(ldbobj) then
if(not ldbicon:IsRegistered(objname)) then
db['global']['ldbicons'] = db['global']['ldbicons'] or {}
local sb = db['global']['ldbicons']
sb[objname] = sb[objname] or CopyTable(defaults)
local oldstatus = sb[objname]['hide']
sb[objname]['hide'] = false
ldbicon:Register(objname, ldbobj, sb[objname])
sb[objname]['hide'] = oldstatus
end
return ldbobj
end
end
end
function lib:Embed(target)
for _,name in pairs(mixins) do
target[name] = lib[name]
end
lib['ldbs'][target] = true
end
for target, _ in pairs(lib['ldbs']) do
lib:Embed(target)
end