You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

382 lines
9.0 KiB

--[[
This file is part of 'Masque', an add-on for World of Warcraft. For bug reports,
documentation and license information, please visit https://github.com/SFX-WoW/Masque.
* File...: Options\General.lua
* Author.: StormFX
'General Settings' Group/Panel
]]
local MASQUE, Core = ...
----------------------------------------
-- WoW API
---
local ReloadUI = _G.ReloadUI
----------------------------------------
-- Libraries
---
local LIB_DBI = Core.LIB_DBI
----------------------------------------
-- Internal
---
-- @ Masque
local WOW_RETAIL = Core.WOW_RETAIL
-- @ Core\Groups
local Groups = Core.Groups
-- @ Options\Core
local GetOption, SetOption, Setup = Core.GetOption, Core.SetOption, Core.Setup
----------------------------------------
-- Locals
---
-- Animation Events
local Effects = {
Castbar = {
"UNIT_SPELLCAST_CHANNEL_START",
"UNIT_SPELLCAST_CHANNEL_STOP",
"UNIT_SPELLCAST_EMPOWER_START",
"UNIT_SPELLCAST_EMPOWER_STOP",
"UNIT_SPELLCAST_START",
"UNIT_SPELLCAST_STOP",
},
Interrupt = {
"UNIT_SPELLCAST_INTERRUPTED",
"UNIT_SPELLCAST_SUCCEEDED",
},
Reticle = {
"UNIT_SPELLCAST_FAILED",
"UNIT_SPELLCAST_RETICLE_CLEAR",
"UNIT_SPELLCAST_RETICLE_TARGET",
"UNIT_SPELLCAST_SENT",
},
SpellAlert = {
"SPELL_ACTIVATION_OVERLAY_GLOW_HIDE",
"SPELL_ACTIVATION_OVERLAY_GLOW_SHOW",
},
}
----------------------------------------
-- Functions
---
-- Registers/unregisters events that trigger animations.
local function UpdateEffect(Name, Value)
local Frame = _G.ActionBarActionEventsFrame
local Events = Effects[Name]
if Value then
if Name == "SpellAlert" then
if Value > 0 then
Frame:RegisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_HIDE")
Frame:RegisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_SHOW")
else
Frame:UnregisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_HIDE")
Frame:UnregisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_SHOW")
end
else
for i = 1, #Events do
local Event = Events[i]
if Event == "UNIT_SPELLCAST_SENT" then
Frame:RegisterEvent(Event)
else
Frame:RegisterUnitEvent(Event, "player")
end
end
end
else
for i = 1, #Events do
Frame:UnregisterEvent(Events[i])
end
end
end
----------------------------------------
-- Setup
---
-- Creates the 'General Settings' group/panel.
function Setup.General(self)
-- @ Locales\enUS
local L = self.Locale
-- @ Masque
local CRLF = Core.CRLF
local Reload = "\n|cff0099ff"..L["Requires an interface reload."].."|r"
local Tooltip = "|cffffffff"..L["Select to view."].."|r"
local Options = {
type = "group",
name = L["General Settings"],
order = 2,
args = {
Head = {
type = "header",
name = MASQUE.." - "..L["General Settings"],
hidden = self.GetStandAlone,
order = 0,
disabled = true,
dialogControl = "SFX-Header",
},
Desc = {
type = "description",
name = L["This section will allow you to adjust Masque's interface and performance settings."]..CRLF,
order = 1,
fontSize = "medium",
},
Interface = {
type = "group",
name = L["Interface"],
desc = Tooltip,
get = GetOption,
set = SetOption,
order = 2,
args = {
Head = {
type = "header",
name = L["Interface Settings"],
order = 0,
disabled = true,
dialogControl = "SFX-Header",
},
Desc = {
type = "description",
name = L["This section will allow you to adjust settings that affect Masque's interface."]..CRLF,
order = 1,
fontSize = "medium",
},
Icon = {
type = "select",
name = L["Menu Icon"],
desc = L["Select where Masque's menu icon is displayed."],
get = function(i) return Core.db.profile.LDB.position end,
set = function(i, Value) Core:UpdateIconPosition(Value) end,
values = {
[0] = L["None"],
[1] = L["Minimap"],
[2] = (WOW_RETAIL and L["Add-On Compartment"]) or nil,
},
order = 2,
disabled = function() return not LIB_DBI end,
},
SPC01 = {
type = "description",
name = " ",
order = 3,
},
StandAlone = {
type = "toggle",
name = L["Stand-Alone GUI"],
desc = L["Use a resizable, stand-alone options window."],
order = 4,
},
SPC02 = {
type = "description",
name = " ",
order = 5,
},
AltSort = {
type = "toggle",
name = L["Alternate Sorting"],
desc = L["Causes the skins included with Masque to be listed above third-party skins."],
order = 6,
},
SPC03 = {
type = "description",
name = " ",
order = 7,
},
SkinInfo = {
type = "toggle",
name = L["Skin Information"],
desc = L["Load the skin information panel."]..Reload,
set = function(i, Value)
Core.db.profile.Interface.SkinInfo = Value
Core.Setup("Info")
end,
order = 8,
},
SPC04 = {
type = "description",
name = " ",
order = 10,
},
Reload = {
type = "execute",
name = L["Reload Interface"],
desc = L["Click to reload the interface."],
func = function(i) ReloadUI() end,
order = -1,
},
},
},
Effects = Core.WOW_RETAIL and {
type = "group",
name = L["Advanced"],
desc = Tooltip,
get = GetOption,
set = function(Info, Value)
local Name = Info[#Info]
if Name ~= "Cooldown" then
UpdateEffect(Name, Value)
end
Core.db.profile.Effects[Name] = Value
end,
order = 3,
args = {
Head = {
type = "header",
name = L["Advanced Settings"],
order = 0,
disabled = true,
dialogControl = "SFX-Header",
},
Desc = {
type = "description",
name = L["This section will allow you to adjust button settings for the default interface."]..CRLF,
order = 1,
fontSize = "medium",
},
SpellAlert = {
type = "select",
name = L["Spell Alerts"],
desc = L["Select which spell alert animations are enabled."],
values = {
[0] = L["None"],
[1] = L["Flash and Loop"],
[2] = L["Loop Only"],
},
order = 2,
},
SPC01 = {
type = "description",
name = " ",
order = 3,
},
Castbar = {
type = "toggle",
name = L["Cast Animations"],
desc = L["Enable cast animations on action buttons."],
order = 4,
},
SPC02 = {
type = "description",
name = " ",
order = 5,
},
Cooldown = {
type = "toggle",
name = L["Cooldown Animations"],
desc = L["Enable animations when action button cooldowns finish."],
order = 6,
hidden = true,
},
SPC03 = {
type = "description",
name = " ",
order = 7,
hidden = true,
},
Interrupt = {
type = "toggle",
name = L["Interrupt Animations"],
desc = L["Enable interrupt animations on action buttons."],
order = 8,
},
SPC04 = {
type = "description",
name = " ",
order = 9,
},
Reticle = {
type = "toggle",
name = L["Targeting Reticles"],
desc = L["Enable targeting reticles on action buttons."],
order = 10,
},
},
} or nil,
Developer = {
type = "group",
name = L["Developer"],
desc = Tooltip,
order = 10,
args = {
Head = {
type = "header",
name = L["Developer Settings"],
order = 0,
disabled = true,
dialogControl = "SFX-Header",
},
Desc = {
type = "description",
name = L["This section will allow you to adjust settings that affect working with Masque's API."]..CRLF,
order = 1,
fontSize = "medium",
},
Debug = {
type = "toggle",
name = L["Debug Mode"],
desc = L["Causes Masque to throw Lua errors whenever it encounters a problem with an add-on or skin."],
get = GetOption,
set = self.ToggleDebug,
order = 2,
},
SPC01 = {
type = "description",
name = " ",
order = 10,
},
Purge = {
type = "execute",
name = L["Clean Database"],
desc = L["Click to purge the settings of all unused add-ons and groups."],
func = function(i)
local db = Core.db.profile.Groups
for ID in pairs(db) do
if not Groups[ID] then
db[ID] = nil
end
end
end,
order = -1,
confirm = true,
confirmText = L["This action cannot be undone. Continue?"],
},
},
},
},
}
self.Options.args.General = Options
local Path = "General"
self:AddOptionsPanel(Path, self.LIB_ACD:AddToBlizOptions(MASQUE, L["General Settings"], MASQUE, Path))
-- GC
Setup.General = nil
end
----------------------------------------
-- Core
---
Core.UpdateEffect = UpdateEffect