local name, addon = ... local embed = addon:LibInit("zzCommon-ldb", 13, {'AddLDB','AddLDBIconOptions','OnText','GetLDB'}) if(type(embed) ~= 'function') then return end local ldb = LibStub:GetLibrary("LibDataBroker-1.1") local ldbicon = LibStub:GetLibrary("LibDBIcon-1.0") local defaults = { ['hide'] = false, } local function ldbiconUpdate(objname) local ldbobj = ldb:GetDataObjectByName(objname) if(ldbicon) then local db = ldbobj['zzInfo']['db'] db[objname] = db[objname] or CopyTable(defaults) if(db[objname]['hide']) then ldbicon:Hide(objname) else ldbicon:Show(objname) end end end --[[ local function ldbOnClick(self, button) local objname = self['objname'] if(IsShiftKeyDown() and button == "LeftButton") then if(not ldbicon) then return end local db = self['zzInfo']['db'] db[objname]['hide'] = not db[objname]['hide'] ldbiconUpdate(objname) else if(InterfaceOptionsFrame:IsVisible() and not InCombatLockdown()) then InterfaceOptionsFrame:Hide() else InterfaceOptionsFrame_OpenToCategory(objname) InterfaceOptionsFrame_OpenToCategory(objname) -- Twice because of a bug in InterfaceOptionsFrame_OpenToCategory end end end ]] local function minimapGet(pref) local objname = pref[#pref - 2] local ldbobj = ldb:GetDataObjectByName(objname) local db = ldbobj['zzInfo']['db'] return db[objname][pref[#pref]] end local function minimapSet(pref,value) local objname = pref[#pref - 2] local ldbobj = ldb:GetDataObjectByName(objname) local db = ldbobj['zzInfo']['db'] db[objname][pref[#pref]] = value ldbiconUpdate(objname) end local lib = {} function lib:AddLDB(objname, obj) obj = obj or {} local modsDir = self['parentName'] if(self['modsDir']) then modsDir = modsDir .. "\\" .. self['modsDir'] end local icon = ((self['name'] and objname~=self['parentName']) and "Interface\\AddOns\\"..modsDir.."\\"..objname.."\\icon2.tga" or "Interface\\AddOns\\"..objname.."\\icon2.tga") local ldbobj = ldb:GetDataObjectByName(objname) or ldb:NewDataObject(objname, { ['type'] = obj['type'] or 'launcher', ['text'] = obj['text'] or objname, ['icon'] = obj['icon'] or icon, ['iconCoords'] = obj['iconCoords'], ['OnLeave'] = obj['OnLeave'], ['OnEnter'] = obj['OnEnter'], ['zzInfo'] = {} }) ldbobj['OnClick'] = type(obj['OnClick']) == 'function' and function(self, button) obj['OnClick'](self, button) end -- ldbobj['OnClick'] = type(obj['OnClick']) == 'function' and function(self, button) obj['OnClick'](self, button) end or function(self, button) ldbOnClick(self, button) end ldbobj['OnTooltipShow'] = type(obj['OnTooltipShow']) == 'function' and obj['OnTooltipShow'] or nil if(ldbobj and ldbicon) then self['db']['global']['ldbicons'] = self['db']['global']['ldbicons'] or {} local db = self['db']['global']['ldbicons'] ldbobj['zzInfo']['db'] = self['db']['global']['ldbicons'] db[objname] = db[objname] or CopyTable(defaults) if(not ldbicon:IsRegistered(objname)) then ldbicon:Register(objname,ldbobj,db[objname]) end ldbiconUpdate(objname) end end function lib:GetLDB(objname) return ldb:GetDataObjectByName(objname) end function lib:OnText(objname, message) ldb:GetDataObjectByName(objname)['text'] = message end function lib:AddLDBIconOptions() return { ['name']="Minimapicon", ['type']='group', ['inline']=true, ['get'] = minimapGet, ['set'] = minimapSet, ['order'] = 100, ['args']={ ['hide'] ={ ['type'] = 'toggle', ['name'] = "Hide Minimapicon", }, ['minimapPos'] ={ ['type'] = 'range', ['name'] = "Minimapicon Position", ['min'] = 1, ['max'] = 250, ['step']=1, } } } end embed(lib)