287 lines
7.1 KiB
Lua
287 lines
7.1 KiB
Lua
--[[
|
|
Copyright (c) 2009, Hendrik "Nevcairiel" Leppkes < h.leppkes at gmail dot com >
|
|
All rights reserved.
|
|
]]
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("Bartender4")
|
|
|
|
local Bar = Bartender4.Bar.prototype
|
|
local ButtonBar = Bartender4.ButtonBar.prototype
|
|
local StateBar = Bartender4.StateBar.prototype
|
|
|
|
local optGetter, optSetter, getBar
|
|
do
|
|
local optionMap, callFunc
|
|
local barregistry = Bartender4.Bar.barregistry
|
|
|
|
optionMap = {
|
|
stance = "StanceStateOption",
|
|
enabled = "StateOption",
|
|
def_state = "DefaultState",
|
|
states = "StateOption",
|
|
actionbar = "StateOption",
|
|
possess = "StateOption",
|
|
autoassist = "ConfigAutoAssist",
|
|
customEnabled = "StateOption",
|
|
custom = "StateOption",
|
|
customCopy = "CopyCustomConditionals",
|
|
}
|
|
-- retrieves a valid bar object from the barregistry table
|
|
function getBar(id)
|
|
local bar = barregistry[tostring(id)]
|
|
assert(bar, ("Invalid bar id in options table. (%s)"):format(id))
|
|
return bar
|
|
end
|
|
|
|
-- calls a function on the bar
|
|
function callFunc(bar, type, option, ...)
|
|
local func = type .. (optionMap[option] or option)
|
|
assert(bar[func], ("Invalid get/set function %s in bar %s."):format(func, bar.id))
|
|
return bar[func](bar, ...)
|
|
end
|
|
|
|
-- universal function to get a option
|
|
function optGetter(info)
|
|
local bar = getBar(info[2])
|
|
local option = info.arg or info[#info]
|
|
return callFunc(bar, "Get", option, info[#info])
|
|
end
|
|
|
|
-- universal function to set a option
|
|
function optSetter(info, ...)
|
|
local bar = getBar(info[2])
|
|
local option = info.arg or info[#info]
|
|
return callFunc(bar, "Set", option, info[#info], ...)
|
|
end
|
|
end
|
|
|
|
|
|
local hasStances
|
|
|
|
local validStanceTable = {
|
|
[0] = L["Don't Page"],
|
|
(L["Page %2d"]):format(1),
|
|
(L["Page %2d"]):format(2),
|
|
(L["Page %2d"]):format(3),
|
|
(L["Page %2d"]):format(4),
|
|
(L["Page %2d"]):format(5),
|
|
(L["Page %2d"]):format(6),
|
|
(L["Page %2d"]):format(7),
|
|
(L["Page %2d"]):format(8),
|
|
(L["Page %2d"]):format(9),
|
|
(L["Page %2d"]):format(10)
|
|
}
|
|
|
|
|
|
local _, playerclass = UnitClass("player")
|
|
|
|
local function createOptionGroup(k, id)
|
|
local tbl = {
|
|
order = 10 * k,
|
|
type = "select",
|
|
arg = "stance",
|
|
values = validStanceTable,
|
|
name = Bartender4.StanceMap[playerclass][k].name,
|
|
}
|
|
return tbl
|
|
end
|
|
|
|
local disabledFunc = function(info)
|
|
local bar = getBar(info[2])
|
|
return not bar:GetStateOption("enabled")
|
|
end
|
|
|
|
local stateOffOrCustomOn = function(info)
|
|
local bar = getBar(info[2])
|
|
return (not bar:GetStateOption("enabled")) or (bar:GetStateOption("customEnabled"))
|
|
end
|
|
|
|
local stateOffOrCustomOff = function(info)
|
|
local bar = getBar(info[2])
|
|
return (not bar:GetStateOption("enabled")) or (not bar:GetStateOption("customEnabled"))
|
|
end
|
|
|
|
function StateBar:GetOptionObject()
|
|
local obj = ButtonBar.GetOptionObject()
|
|
local options = {
|
|
enabled = {
|
|
order = 1,
|
|
type = "toggle",
|
|
name = L["Enabled"],
|
|
desc = L["Enable State-based Button Swaping"],
|
|
get = optGetter,
|
|
set = optSetter,
|
|
},
|
|
sep1 = {
|
|
order = 2,
|
|
type = "description",
|
|
name = "",
|
|
},
|
|
autoassist = {
|
|
order = 3,
|
|
type = "toggle",
|
|
name = L["Auto-Assist"],
|
|
desc = L["Enable Auto-Assist for this bar.\n Auto-Assist will automatically try to cast on your target's target if your target is no valid target for the selected spell."],
|
|
get = optGetter,
|
|
set = optSetter,
|
|
width = "full",
|
|
},
|
|
possess = {
|
|
order = 5,
|
|
type = "toggle",
|
|
name = L["Possess Bar"],
|
|
desc = L["Switch this bar to the Possess Bar when possessing a npc (eg. Mind Control)"],
|
|
get = optGetter,
|
|
set = optSetter,
|
|
disabled = stateOffOrCustomOn,
|
|
},
|
|
actionbar = {
|
|
order = 6,
|
|
type = "toggle",
|
|
name = L["ActionBar Paging"],
|
|
desc = L["Enable Bar Switching based on the actionbar controls provided by the game. \nSee Blizzard Key Bindings for assignments - Usually Shift-Mouse Wheel and Shift+1 - Shift+6."],
|
|
get = optGetter,
|
|
set = optSetter,
|
|
disabled = stateOffOrCustomOn,
|
|
},
|
|
def_desc = {
|
|
order = 10,
|
|
type = "description",
|
|
name = L["The default behaviour of this bar when no state-based paging option affects it."],
|
|
},
|
|
def_state = {
|
|
order = 11,
|
|
type = "select",
|
|
name = L["Default Bar State"],
|
|
values = validStanceTable,
|
|
get = optGetter,
|
|
set = optSetter,
|
|
disabled = stateOffOrCustomOn,
|
|
},
|
|
modifiers = {
|
|
order = 30,
|
|
type = "group",
|
|
inline = true,
|
|
name = "",
|
|
get = optGetter,
|
|
set = optSetter,
|
|
disabled = stateOffOrCustomOn,
|
|
args = {
|
|
header = {
|
|
order = 1,
|
|
type = "header",
|
|
name = L["Modifier Based Switching"],
|
|
},
|
|
ctrl = {
|
|
order = 10,
|
|
type = "select",
|
|
name = L["CTRL"],
|
|
arg = "states",
|
|
values = validStanceTable,
|
|
desc = (L["Configure actionbar paging when the %s key is down."]):format(L["CTRL"]),
|
|
--width = "half",
|
|
},
|
|
alt = {
|
|
order = 15,
|
|
type = "select",
|
|
name = L["ALT"],
|
|
arg = "states",
|
|
values = validStanceTable,
|
|
desc = (L["Configure actionbar paging when the %s key is down."]):format(L["ALT"]),
|
|
--width = "half",
|
|
},
|
|
shift = {
|
|
order = 20,
|
|
type = "select",
|
|
name = L["SHIFT"],
|
|
arg = "states",
|
|
values = validStanceTable,
|
|
desc = (L["Configure actionbar paging when the %s key is down."]):format(L["SHIFT"]),
|
|
--width = "half",
|
|
},
|
|
},
|
|
},
|
|
stances = {
|
|
order = 20,
|
|
type = "group",
|
|
inline = true,
|
|
name = "",
|
|
hidden = function() return not (Bartender4.StanceMap[playerclass]) end,
|
|
get = optGetter,
|
|
set = optSetter,
|
|
disabled = stateOffOrCustomOn,
|
|
args = {
|
|
stance_header = {
|
|
order = 1,
|
|
type = "header",
|
|
name = L["Stance Configuration"],
|
|
},
|
|
},
|
|
},
|
|
customNl = {
|
|
order = 48,
|
|
type = "description",
|
|
name = "\n",
|
|
},
|
|
customHeader = {
|
|
order = 49,
|
|
type = "header",
|
|
name = L["Custom Conditionals"],
|
|
},
|
|
customEnabled = {
|
|
order = 50,
|
|
type = "toggle",
|
|
name = L["Use Custom Condition"],
|
|
desc = L["Enable the use of a custom condition, disabling all of the above."],
|
|
get = optGetter,
|
|
set = optSetter,
|
|
disabled = disabledFunc,
|
|
--width = "double",
|
|
},
|
|
customCopy = {
|
|
order = 51,
|
|
type = "execute",
|
|
name = L["Copy Conditionals"],
|
|
desc = L["Create a copy of the auto-generated conditionals in the custom configuration as a base template."],
|
|
func = optSetter,
|
|
disabled = disabledFunc,
|
|
},
|
|
customDesc = {
|
|
order = 52,
|
|
type = "description",
|
|
name = L["Note: Enabling Custom Conditionals will disable all of the above settings!"],
|
|
},
|
|
custom = {
|
|
order = 55,
|
|
type = "input",
|
|
name = L["Custom Conditionals"],
|
|
desc = L["You can use any macro conditionals in the custom string, using the number of the bar as target value.\nExample: [form:1]9;0"],
|
|
width = "full",
|
|
get = optGetter,
|
|
set = optSetter,
|
|
disabled = stateOffOrCustomOff,
|
|
multiline = true,
|
|
},
|
|
}
|
|
|
|
do
|
|
local defstancemap = Bartender4.StanceMap[playerclass]
|
|
if defstancemap then
|
|
for k,v in pairs(defstancemap) do
|
|
if not options.stances.args[v.id] then
|
|
options.stances.args[v.id] = createOptionGroup(k, v.id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local states = {
|
|
type = "group",
|
|
name = L["State Configuration"],
|
|
order = 5,
|
|
args = options,
|
|
}
|
|
obj:NewCategory("state", states)
|
|
|
|
return obj
|
|
end
|