160 lines
4.2 KiB
Lua
160 lines
4.2 KiB
Lua
local lib, oldminor = LibStub:NewLibrary("zzConfig", 1)
|
|
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
|
|
end
|
|
return menu
|
|
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
|