local lib, oldminor = LibStub:NewLibrary("zzConfig", 2) if not lib then return end oldminor = oldminor or 0 local ldb = LibStub:GetLibrary("LibDataBroker-1.1") local ldbicon = LibStub:GetLibrary("LibDBIcon-1.0") local mixins = {'AddConfigMenu','AddConfigEntry','InitConfig'} lib['configs'] = lib['configs'] or {} local function getDB(objname) if(ldbicon) then ldbicon:Show(objname) local iconbtn = ldbicon:GetMinimapButton(objname) local db = iconbtn['db'] if(db['hide']) then ldbicon:Hide(objname) end return db end end local function ldbiconUpdate(objname) local db = getDB(objname) end local function minimapGet(pref) local objname = pref[#pref - 2] -- print('gp', objname, pref) local db = getDB(objname) return db[pref[#pref]] end local function minimapSet(pref,value) local objname = pref[#pref - 2] local db = getDB(objname) db[pref[#pref]] = value ldbiconUpdate(objname) end local function notify(pref, value, oldvalue) if(type(pref['handler'].PrefChanged) == 'function') then pref['handler']:PrefChanged(pref, value, oldvalue) end end local function getPref(pref) if(type(pref['handler']['GetPref']) == 'function') then -- print("use handler getpref", pref[#pref]) return pref['handler']:GetPref(pref) end -- for i = 1, #pref do -- print(i, pref[i]) -- end -- print("use default getpref", pref[#pref], pref['handler']['db']['profile'][pref[#pref]]) return pref['handler']['db']['profile'][pref[#pref-1]][pref[#pref]] end local function setPref(pref,value) if(type(pref['handler']['SetPref']) == 'function') then pref['handler']:SetPref(pref,value) else local oldvalue = pref['handler']['db']['profile'][pref[#pref-1]][pref[#pref]] pref['handler']['db']['profile'][pref[#pref-1]][pref[#pref]] = value if(value ~= oldvalue) then notify(pref, value, oldvalue) end end end function lib:AddLDBIconOptions(options, conf) options['args'][conf] = { ['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 function lib:AddConfigEntry(options, ...) local input = {...} if(input) then local menu = { ['type'] = input[2], ['name'] = input[3], ['desc'] = input[4], ['order'] = input[5] } if(input[2] == 'range') then menu['min'] = input[6] menu['max'] = input[7] menu['step'] = input[8] menu['isPercent'] = input[9] elseif(input[2] == 'execute') then menu['func'] = input[6] elseif(input[2] == 'color') then menu['get'] = input[6] menu['set'] = input[7] menu['hasAlpha'] = true elseif(input[2] == 'select') then menu['values'] = input[6] elseif(input[2] == 'group') then menu['inline'] = input[6] menu['args'] = { ['description'] = { ['name'] = input[4], ['type'] = 'header', ['order'] = 0 } } end options['args'][input[1]] = menu return menu end end function lib:AddConfigMenu(options, parentName, handler, order, more) local menu = { ['name'] = parentName, ['type'] = 'group', ['handler'] = handler or self['handler'], ['order'] = order or 1, ['args'] = {} } if(more) then for k, v in pairs(more) do menu[k] = v end end options['args'][parentName] = menu return options['args'][parentName] end function lib:InitConfig(addon, parentName, gp, sp) addon['options'] = { ['type']='group', ['handler']=addon, ['get']=gp or getPref, ['set']=sp or setPref, ['childGroups']='tab', ['args']={} } local options = addon['options'] local par = self:AddConfigMenu(options, parentName) self:AddLDBIconOptions(par, 'minimap') LibStub("AceConfig-3.0"):RegisterOptionsTable(parentName, options) LibStub("AceConfigDialog-3.0"):AddToBlizOptions(parentName, parentName, self['parentName']) return options end function lib:Embed(target) for _,name in pairs(mixins) do target[name] = lib[name] end end for target, _ in pairs(lib['configs']) do lib:Embed(target) end