mirror of
https://github.com/Relintai/Relintais-Enemy-Kooldown-Tracker-WotLK.git
synced 2024-11-14 10:27:30 +01:00
106 lines
3.8 KiB
Lua
106 lines
3.8 KiB
Lua
|
--- AceConfigTab-3.0 provides support for tab-completion to AceConfig tables.
|
||
|
-- Note: This library is not yet finalized.
|
||
|
-- @class file
|
||
|
-- @name AceConfigTab-3.0
|
||
|
-- @release $Id: AceConfigTab-3.0.lua 769 2009-04-04 11:05:08Z nevcairiel $
|
||
|
|
||
|
local MAJOR, MINOR = "AceConfigTab-3.0", 1
|
||
|
local lib = LibStub:NewLibrary(MAJOR, MINOR)
|
||
|
|
||
|
if not lib then return end
|
||
|
|
||
|
local ac = LibStub("AceConsole-3.0")
|
||
|
|
||
|
local function printf(...)
|
||
|
DEFAULT_CHAT_FRAME:AddMessage(string.format(...))
|
||
|
end
|
||
|
|
||
|
-- getChildren(opt, ...)
|
||
|
--
|
||
|
-- Retrieve the next valid group args in an AceConfig table.
|
||
|
--
|
||
|
-- opt - AceConfig options table
|
||
|
-- ... - args following the slash command
|
||
|
--
|
||
|
-- opt will need to be determined by the slash-command
|
||
|
-- The args will be obtained using AceConsole:GetArgs() or something similar on the remainder of the line.
|
||
|
--
|
||
|
-- Returns arg1, arg2, ...
|
||
|
local function getLevel(opt, ...)
|
||
|
-- Walk down the options tree to the last arg in the commandline, or return if it does not follow the tree.
|
||
|
local path = ""
|
||
|
local lastChild
|
||
|
for i = 1, select('#', ...) do
|
||
|
local arg = select(i, ...)
|
||
|
if not arg or type(arg) == 'number' then break end
|
||
|
if opt.plugins then
|
||
|
for k in pairs(opt.plugins) do
|
||
|
if string.lower(k) == string.lower(arg) then
|
||
|
opt = opt.plugins[k]
|
||
|
path = path..arg.." "
|
||
|
lastChild = arg
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
elseif opt.args then
|
||
|
for k in pairs(opt.args) do
|
||
|
if string.lower(k) == string.lower(arg) then
|
||
|
opt = opt.args[k]
|
||
|
path = path..arg.." "
|
||
|
lastChild = arg
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
return opt, path
|
||
|
end
|
||
|
|
||
|
local function getChildren(opt, ...)
|
||
|
local lastChild, path
|
||
|
opt, path, lastChild = getLevel(opt, ...)
|
||
|
local args = {}
|
||
|
for _, field in ipairs({"args", "plugins"}) do
|
||
|
if type(opt[field]) == 'table' then
|
||
|
for k in pairs(opt[field]) do
|
||
|
if opt[field].type ~= 'header' then
|
||
|
table.insert(args, k)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
return args, path
|
||
|
end
|
||
|
|
||
|
--LibStub("AceConfig-3.0"):RegisterOptionsTable("ag_UnitFrames", aUF.Options.table)
|
||
|
local function createWordlist(t, cmdline, pos)
|
||
|
local cmd = string.match(cmdline, "(/[^ \t\n]+)")
|
||
|
local argslist = string.sub(cmdline, pos, this:GetCursorPosition())
|
||
|
local opt -- TODO: figure out options table using cmd
|
||
|
opt = LibStub("AceConfigRegistry-3.0"):GetOptionsTable("ag_UnitFrames", "cmd", "AceTab-3.0") -- hardcoded temporarily for testing
|
||
|
if not opt then return end
|
||
|
local args, path = getChildren(opt, ac:GetArgs(argslist, #argslist/2)) -- largest # of args representable by a string of length #argslist, since they must be separated by spaces
|
||
|
for _, v in ipairs(args) do
|
||
|
table.insert(t, path..v)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function usage(t, matches, _, cmdline)
|
||
|
local cmd = string.match(cmdline, "(/[^ \t\n]+)")
|
||
|
local argslist = string.sub(cmdline, #cmd, this:GetCursorPosition())
|
||
|
local opt -- TODO: figure out options table using cmd
|
||
|
opt = LibStub("AceConfigRegistry-3.0"):GetOptionsTable("ag_UnitFrames")("cmd", "AceTab-3.0") -- hardcoded temporarily for testing
|
||
|
if not opt then return end
|
||
|
local level = getLevel(opt, ac:GetArgs(argslist, #argslist/2)) -- largest # of args representable by a string of length #argslist, since they must be separated by spaces
|
||
|
local option
|
||
|
for _, m in pairs(matches) do
|
||
|
local tail = string.match(m, "([^ \t\n]+)$")
|
||
|
option = level.plugins and level.plugins[tail] or level.args and level.args[tail]
|
||
|
printf("%s - %s", tail, option.desc)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
LibStub("AceTab-3.0"):RegisterTabCompletion("aguftest", "%/%w+ ", createWordlist, usage)
|