57a5cdabdf
Imported from /srv/add01/wow-ascension/Interface/AddOns/Bartender4 — the build Ascension's WotLK 3.3.5 client ships. Single vendored drop: Ascension's build process bundles their custom patches with the standard CurseForge packager output (embedded libs), and the individual patches aren't published separately. Net delta vs Nevcairiel 4.4.2, excluding bundled libs and CRLF normalization: 21 files, 2213+/52- — the Ascension-specific adaptations for WotLK 3.3.5 hero classes / custom action systems. License: All rights reserved (per .toc).
317 lines
10 KiB
Lua
317 lines
10 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 AceConfigDialog = LibStub("AceConfigDialog-3.0")
|
|
|
|
local getFunc, setFunc
|
|
do
|
|
function getFunc(info)
|
|
return (info.arg and Bartender4.db.profile[info.arg] or Bartender4.db.profile[info[#info]])
|
|
end
|
|
|
|
function setFunc(info, value)
|
|
local key = info.arg or info[#info]
|
|
Bartender4.db.profile[key] = value
|
|
end
|
|
end
|
|
|
|
local KB = LibStub("LibKeyBound-1.0")
|
|
local LDBIcon = LibStub("LibDBIcon-1.0", true)
|
|
local function getOptions()
|
|
if not Bartender4.options then
|
|
Bartender4.options = {
|
|
type = "group",
|
|
name = "Bartender4",
|
|
icon = "Interface\\Icons\\INV_Drink_05",
|
|
childGroups = "tree",
|
|
plugins = {},
|
|
args = {
|
|
lock = {
|
|
order = 1,
|
|
type = "toggle",
|
|
name = L["Lock"],
|
|
desc = L["Lock all bars."],
|
|
get = function() return Bartender4.Locked end,
|
|
set = function(info, value) Bartender4[value and "Lock" or "Unlock"](Bartender4) end,
|
|
width = "half",
|
|
},
|
|
buttonlock = {
|
|
order = 2,
|
|
type = "toggle",
|
|
name = L["Button Lock"],
|
|
desc = L["Lock the buttons."],
|
|
get = function() return Bartender4.db.profile.buttonlock end,
|
|
set = function(info, value)
|
|
Bartender4.db.profile.buttonlock = value
|
|
Bartender4.Bar:ForAll("ForAll", "SetAttribute", "buttonlock", value)
|
|
end,
|
|
},
|
|
minimapIcon = {
|
|
order = 3,
|
|
type = "toggle",
|
|
name = L["Minimap Icon"],
|
|
desc = L["Show a Icon to open the config at the Minimap"],
|
|
get = function() return not Bartender4.db.profile.minimapIcon.hide end,
|
|
set = function(info, value) Bartender4.db.profile.minimapIcon.hide = not value; LDBIcon[value and "Show" or "Hide"](LDBIcon, "Bartender4") end,
|
|
disabled = function() return not LDBIcon end,
|
|
},
|
|
kb = {
|
|
order = 4,
|
|
type = "execute",
|
|
name = L["Key Bindings"],
|
|
desc = L["Switch to key-binding mode"],
|
|
func = function()
|
|
KB:Toggle()
|
|
AceConfigDialog:Close("Bartender4")
|
|
end,
|
|
},
|
|
bars = {
|
|
order = 20,
|
|
type = "group",
|
|
name = L["Bars"],
|
|
args = {
|
|
options = {
|
|
type = "group",
|
|
order = 0,
|
|
name = function(info) if info.uiType == "dialog" then return "" else return L["Bar Options"] end end,
|
|
guiInline = true,
|
|
args = {
|
|
blizzardVehicle = {
|
|
order = 1,
|
|
type = "toggle",
|
|
name = L["Use Blizzard Vehicle UI"],
|
|
desc = L["Enable the use of the Blizzard Vehicle UI, hiding any Bartender4 bars in the meantime."],
|
|
width = "full",
|
|
get = getFunc,
|
|
set = function(info, value)
|
|
if UnitHasVehicleUI("player") then
|
|
Bartender4:Print(L["You have to exit the vehicle in order to be able to change the Vehicle UI settings."])
|
|
return
|
|
end
|
|
Bartender4.db.profile.blizzardVehicle = value
|
|
Bartender4:UpdateBlizzardVehicle()
|
|
end,
|
|
},
|
|
selfcastmodifier = {
|
|
order = 10,
|
|
type = "toggle",
|
|
name = L["Self-Cast by modifier"],
|
|
desc = L["Toggle the use of the modifier-based self-cast functionality."],
|
|
get = getFunc,
|
|
set = function(info, value)
|
|
Bartender4.db.profile.selfcastmodifier = value
|
|
Bartender4.Bar:ForAll("UpdateSelfCast")
|
|
end,
|
|
},
|
|
setselfcastmod = {
|
|
order = 20,
|
|
type = "select",
|
|
name = L["Self-Cast Modifier"],
|
|
desc = L["Select the Self-Cast Modifier"],
|
|
get = function(info) return GetModifiedClick("SELFCAST") end,
|
|
set = function(info, value) SetModifiedClick("SELFCAST", value); SaveBindings(GetCurrentBindingSet() or 1) end,
|
|
values = { NONE = L["None"], ALT = L["ALT"], SHIFT = L["SHIFT"], CTRL = L["CTRL"] },
|
|
},
|
|
selfcast_nl = {
|
|
order = 30,
|
|
type = "description",
|
|
name = "",
|
|
},
|
|
focuscastmodifier = {
|
|
order = 50,
|
|
type = "toggle",
|
|
name = L["Focus-Cast by modifier"],
|
|
desc = L["Toggle the use of the modifier-based focus-cast functionality."],
|
|
get = getFunc,
|
|
set = function(info, value)
|
|
Bartender4.db.profile.focuscastmodifier = value
|
|
Bartender4.Bar:ForAll("UpdateSelfCast")
|
|
end,
|
|
},
|
|
setfocuscastmod = {
|
|
order = 60,
|
|
type = "select",
|
|
name = L["Focus-Cast Modifier"],
|
|
desc = L["Select the Focus-Cast Modifier"],
|
|
get = function(info) return GetModifiedClick("FOCUSCAST") end,
|
|
set = function(info, value) SetModifiedClick("FOCUSCAST", value); SaveBindings(GetCurrentBindingSet() or 1) end,
|
|
values = { NONE = L["None"], ALT = L["ALT"], SHIFT = L["SHIFT"], CTRL = L["CTRL"] },
|
|
},
|
|
focuscast_nl = {
|
|
order = 70,
|
|
type = "description",
|
|
name = "",
|
|
},
|
|
selfcastrightclick = {
|
|
order = 80,
|
|
type = "toggle",
|
|
name = L["Right-click Self-Cast"],
|
|
desc = L["Toggle the use of the right-click self-cast functionality."],
|
|
get = getFunc,
|
|
set = function(info, value)
|
|
Bartender4.db.profile.selfcastrightclick = value
|
|
Bartender4.Bar:ForAll("UpdateSelfCast")
|
|
end,
|
|
},
|
|
rightclickselfcast_nl = {
|
|
order = 90,
|
|
type = "description",
|
|
name = "",
|
|
},
|
|
range = {
|
|
order = 100,
|
|
name = L["Out of Range Indicator"],
|
|
desc = L["Configure how the Out of Range Indicator should display on the buttons."],
|
|
type = "select",
|
|
style = "dropdown",
|
|
get = function()
|
|
return Bartender4.db.profile.outofrange
|
|
end,
|
|
set = function(info, value)
|
|
Bartender4.db.profile.outofrange = value
|
|
Bartender4.Bar:ForAll("ApplyConfig")
|
|
end,
|
|
values = { none = L["No Display"], button = L["Full Button Mode"], hotkey = L["Hotkey Mode"] },
|
|
},
|
|
colors = {
|
|
order = 130,
|
|
type = "group",
|
|
guiInline = true,
|
|
name = L["Colors"],
|
|
get = function(info)
|
|
local color = Bartender4.db.profile.colors[info[#info]]
|
|
return color.r, color.g, color.b
|
|
end,
|
|
set = function(info, r, g, b)
|
|
local color = Bartender4.db.profile.colors[info[#info]]
|
|
color.r, color.g, color.b = r, g, b
|
|
Bartender4.Bar:ForAll("ApplyConfig")
|
|
end,
|
|
args = {
|
|
range = {
|
|
order = 1,
|
|
type = "color",
|
|
name = L["Out of Range Indicator"],
|
|
desc = L["Specify the Color of the Out of Range Indicator"],
|
|
},
|
|
mana = {
|
|
order = 2,
|
|
type = "color",
|
|
name = L["Out of Mana Indicator"],
|
|
desc = L["Specify the Color of the Out of Mana Indicator"],
|
|
},
|
|
},
|
|
},
|
|
tooltip = {
|
|
order = 200,
|
|
name = L["Button Tooltip"],
|
|
type = "select",
|
|
desc = L["Configure the Button Tooltip."],
|
|
values = { ["disabled"] = L["Disabled"], ["nocombat"] = L["Disabled in Combat"], ["enabled"] = L["Enabled"] },
|
|
get = function() return Bartender4.db.profile.tooltip end,
|
|
set = function(info, value) Bartender4.db.profile.tooltip = value end,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
faq = {
|
|
name = L["FAQ"],
|
|
desc = L["Frequently Asked Questions"],
|
|
type = "group",
|
|
order = 200,
|
|
args = {
|
|
faq = {
|
|
type = "description",
|
|
name = L["FAQ_TEXT"],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
Bartender4.options.plugins.profiles = { profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(Bartender4.db) }
|
|
for k,v in Bartender4:IterateModules() do
|
|
if v.SetupOptions then
|
|
v:SetupOptions()
|
|
end
|
|
end
|
|
end
|
|
return Bartender4.options
|
|
end
|
|
|
|
function Bartender4:ChatCommand(input)
|
|
if InCombatLockdown() then
|
|
self:Print(L["Cannot access options during combat."])
|
|
return
|
|
end
|
|
if not input or input:trim() == "" then
|
|
LibStub("AceConfigDialog-3.0"):Open("Bartender4")
|
|
else
|
|
LibStub("AceConfigCmd-3.0").HandleCommand(Bartender4, "bt", "Bartender4", input)
|
|
end
|
|
end
|
|
|
|
function Bartender4:SetupOptions()
|
|
LibStub("AceConfig-3.0"):RegisterOptionsTable("Bartender4", getOptions)
|
|
AceConfigDialog:SetDefaultSize("Bartender4", 680,525)
|
|
self:RegisterChatCommand( "bar", "ChatCommand")
|
|
self:RegisterChatCommand( "bt", "ChatCommand")
|
|
self:RegisterChatCommand( "bt4", "ChatCommand")
|
|
self:RegisterChatCommand( "bartender", "ChatCommand")
|
|
self:RegisterChatCommand( "bartender4", "ChatCommand")
|
|
end
|
|
|
|
function Bartender4:RegisterModuleOptions(key, table)
|
|
if not self.options then
|
|
error("Options table has not been created yet, respond to the callback!", 2)
|
|
end
|
|
self.options.plugins[key] = { [key] = table }
|
|
end
|
|
|
|
function Bartender4:RegisterBarOptions(id, table)
|
|
if not self.options then
|
|
error("Options table has not been created yet, respond to the callback!", 2)
|
|
end
|
|
self.options.args.bars.args[id] = table
|
|
end
|
|
|
|
local optionParent = {}
|
|
function optionParent:NewCategory(category, data)
|
|
self.table[category] = data
|
|
end
|
|
|
|
local ov = nil
|
|
function optionParent:AddElement(category, element, data, ...)
|
|
local lvl = self.table[category]
|
|
for i = 1, select('#', ...) do
|
|
local key = select(i, ...)
|
|
if not (lvl.args[key] and lvl.args[key].args) then
|
|
error(("Sub-Level Key %s does not exist in options group or is no sub-group."):format(key), ov and 3 or 2)
|
|
end
|
|
lvl = lvl.args[key]
|
|
end
|
|
|
|
lvl.args[element] = data
|
|
end
|
|
|
|
function optionParent:AddElementGroup(category, data, ...)
|
|
ov = true
|
|
for k,v in pairs(data) do
|
|
self:AddElement(category, k, v, ...)
|
|
end
|
|
ov = nil
|
|
end
|
|
|
|
function Bartender4:NewOptionObject(otbl)
|
|
if not otbl then otbl = {} end
|
|
local tbl = { table = otbl }
|
|
for k, v in pairs(optionParent) do
|
|
tbl[k] = v
|
|
end
|
|
|
|
return tbl
|
|
end
|