Files
coa-bartender/Options/Options.lua
T
florian.berthold 57a5cdabdf ascension: 4.4.2 → vendored 4.4.2-2-g3b02ee4 (in-game AddOns dir)
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).
2026-05-08 03:45:58 +02:00

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