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.
227 lines
7.6 KiB
227 lines
7.6 KiB
local ADDON, ns = ...
|
|
local Addon = ns.Addon
|
|
local L = ns.L
|
|
local AceConfigRegistry = LibStub('AceConfigRegistry-3.0')
|
|
local AceConfigDialog = LibStub('AceConfigDialog-3.0')
|
|
local AceGUISharedMediaWidgets = LibStub('AceGUISharedMediaWidgets-1.0')
|
|
local LibSharedMedia = LibStub("LibSharedMedia-3.0")
|
|
local Options = Addon:NewModule('Options')
|
|
local PluginManager = ns.PluginManager
|
|
|
|
local function orderGen()
|
|
local order = 0
|
|
return function()
|
|
order = order + 1
|
|
return order
|
|
end
|
|
end
|
|
|
|
function Options:OnEnable()
|
|
self:InitOptions()
|
|
end
|
|
|
|
function Options:InitOptions()
|
|
self.optionsArgs = {}
|
|
local options = {
|
|
type = 'group',
|
|
args = self.optionsArgs
|
|
}
|
|
AceConfigRegistry:RegisterOptionsTable(L.ADDON_NAME, options)
|
|
AceConfigDialog:AddToBlizOptions(L.ADDON_NAME, L.ADDON_NAME)
|
|
|
|
self:UpdateOptions()
|
|
end
|
|
|
|
function Options:UpdateOptions()
|
|
local order = orderGen()
|
|
|
|
local function defaultGet(item)
|
|
return Addon:GetSetting(item[#item])
|
|
end
|
|
|
|
local function defaultSet(item, value)
|
|
return Addon:SetSetting(item[#item], value)
|
|
end
|
|
|
|
local function makeBase(name, type, extra)
|
|
local tab = extra or {}
|
|
tab.order = order()
|
|
tab.width = tab.width or 'full'
|
|
tab.name = name
|
|
tab.type = type
|
|
|
|
local set = (extra and extra.set) or defaultSet
|
|
local get = (extra and extra.get) or defaultGet
|
|
|
|
if extra and extra.needsReload then
|
|
extra.needsReload = nil
|
|
set = function(item, value)
|
|
set(item, value)
|
|
C_UI.Reload()
|
|
end
|
|
end
|
|
|
|
tab.set = set
|
|
tab.get = get
|
|
|
|
return tab
|
|
end
|
|
local function makeHeader(name, extra)
|
|
local tab = makeBase(name, 'header', extra)
|
|
return tab
|
|
end
|
|
local function makeToggle(name, extra)
|
|
local tab = makeBase(name, 'toggle', extra)
|
|
return tab
|
|
end
|
|
local function makeExecute(name, func, extra)
|
|
local tab = makeBase(name, 'execute', extra)
|
|
tab.func = func
|
|
return tab
|
|
end
|
|
local function makeKeybinding(name, extra)
|
|
local tab = makeBase(name, 'keybinding', extra)
|
|
return tab
|
|
end
|
|
local function makeSelect(name, values, extra)
|
|
local tab = makeBase(name, 'select', extra)
|
|
tab.values = LibSharedMedia:HashTable(values)
|
|
tab.dialogControl = 'LSM30_' .. ((values:gsub("^%l", string.upper)))
|
|
return tab
|
|
end
|
|
local function makeDescription(name, extra)
|
|
local tab = makeBase(name, 'description', extra)
|
|
tab.fontSize = 'medium'
|
|
tab.image = [[Interface\Common\help-i]]
|
|
tab.imageWidth = 16
|
|
tab.imageHeight = 16
|
|
tab.imageCoords = {.2, .8, .2, .8}
|
|
return tab
|
|
end
|
|
local function makeRange(name, min, max, step, extra)
|
|
local tab = makeBase(name, 'range', extra)
|
|
tab.min = min
|
|
tab.max = max
|
|
tab.step = step
|
|
return tab
|
|
end
|
|
local function makePadding(width)
|
|
local tab = makeBase('', 'description', {})
|
|
tab.width = width
|
|
return tab
|
|
end
|
|
|
|
local optionsArgs = wipe(self.optionsArgs)
|
|
|
|
--- General
|
|
optionsArgs.autoButtonHotKey = makeKeybinding(L.OPTION_AUTOBUTTON_HOTKEY)
|
|
optionsArgs.notifyButtonActive = makeToggle(L.OPTION_NOTIFY_BUTTON_ACTIVE, {width = 'double'})
|
|
optionsArgs.notifyButtonActivePadding = makePadding(0.2)
|
|
optionsArgs.notifyButtonActiveSound = makeSelect(L.OPTION_NOTIFY_BUTTON_ACTIVE_SOUND, LibSharedMedia.MediaType.SOUND, {width = 'normal',})
|
|
optionsArgs.testBreak = makeToggle(L.OPTION_TEST_BREAK)
|
|
|
|
optionsArgs.noWaitDeleteScript = makeToggle(L.OPTION_NO_WAIT_DELETE_SCRIPT)
|
|
optionsArgs.hideMinimap = makeToggle(L.OPTION_HIDE_MINIMAP)
|
|
optionsArgs.scriptSelectorResetPos = makeExecute(L.OPTION_RESET_FRAMES, function() Addon:ResetFrames() end)
|
|
|
|
--- Script Selector
|
|
optionsArgs.headerPlugins = makeHeader(L.SCRIPT_SELECTOR_TITLE)
|
|
|
|
optionsArgs.autoSelect = makeToggle(L.OPTION_AUTO_SELECT_SCRIPT_BY_ORDER)
|
|
optionsArgs.hideNoScript = makeToggle(L.OPTION_HIDE_SELECTOR_NO_SCRIPT)
|
|
optionsArgs.lockScriptSelector = makeToggle(L.OPTION_LOCK_SCRIPT_SELECTOR)
|
|
|
|
optionsArgs.descriptionPlugins = makeDescription(L.OPTION_SCRIPTSELECTOR_NOTES)
|
|
self:FillInstalledPlugins(optionsArgs, order)
|
|
|
|
--- Script Editor
|
|
optionsArgs.headerScriptEditor = makeHeader(L.SCRIPT_EDITOR_TITLE)
|
|
|
|
optionsArgs.editorFontFace = makeSelect(L.OPTION_EDITOR_FONT_FACE, LibSharedMedia.MediaType.FONT, {width = 'double',
|
|
set = function(item, value)
|
|
return defaultSet(item, LibSharedMedia:Fetch(LibSharedMedia.MediaType.FONT, value))
|
|
end,
|
|
get = function(item, value)
|
|
local val = defaultGet(item)
|
|
for k, v in pairs(LibSharedMedia:HashTable(LibSharedMedia.MediaType.FONT)) do
|
|
if v == val then
|
|
return k
|
|
end
|
|
end
|
|
return nil
|
|
end,
|
|
})
|
|
optionsArgs.editorFontPadding = makePadding(0.2)
|
|
optionsArgs.editorFontSize = makeRange(L.OPTION_EDITOR_FONT_SIZE, 9, 32, 1, {width = 'normal'})
|
|
|
|
AceConfigRegistry:NotifyChange(ADDON)
|
|
end
|
|
|
|
function Options:FillInstalledPlugins(args, order)
|
|
local pluginCount = #PluginManager:GetPluginList()
|
|
|
|
for i, plugin in PluginManager:IteratePlugins() do
|
|
local name = plugin:GetPluginName()
|
|
local isFirst = i == 1
|
|
local isLast = i == pluginCount
|
|
|
|
args[name] = {
|
|
type = 'toggle',
|
|
name = function()
|
|
return PluginManager:IsPluginAllowed(name) and plugin:GetPluginTitle() or
|
|
format('|cff808080%s (%s)|r', plugin:GetPluginTitle(), DISABLE)
|
|
end,
|
|
desc = plugin:GetPluginNotes(),
|
|
width = 'double',
|
|
order = order(),
|
|
get = function(item)
|
|
return PluginManager:IsPluginAllowed(name)
|
|
end,
|
|
set = function(item, value)
|
|
return PluginManager:SetPluginAllowed(name, value)
|
|
end,
|
|
}
|
|
|
|
args[name .. 'Up'] = {
|
|
type = 'execute',
|
|
name = '',
|
|
width = 0.3,
|
|
disabled = isFirst,
|
|
image = function()
|
|
return isFirst and [[Interface\MINIMAP\MiniMap-VignetteArrow]] or
|
|
[[Interface\MINIMAP\MiniMap-QuestArrow]]
|
|
end,
|
|
imageCoords = {0.1875, 0.8125, 0.1875, 0.8125},
|
|
imageWidth = 16,
|
|
imageHeight = 16,
|
|
order = order(),
|
|
func = function()
|
|
PluginManager:MoveUpPlugin(name)
|
|
self:UpdateOptions()
|
|
end
|
|
}
|
|
|
|
args[name .. 'Down'] = {
|
|
type = 'execute',
|
|
name = '',
|
|
width = 0.3,
|
|
disabled = isLast,
|
|
image = function()
|
|
return isLast and [[Interface\MINIMAP\MiniMap-VignetteArrow]] or
|
|
[[Interface\MINIMAP\MiniMap-QuestArrow]]
|
|
end,
|
|
imageCoords = {0.1875, 0.8125, 0.8125, 0.1875},
|
|
imageWidth = 16,
|
|
imageHeight = 16,
|
|
order = order(),
|
|
func = function()
|
|
PluginManager:MoveDownPlugin(name)
|
|
self:UpdateOptions()
|
|
end
|
|
}
|
|
end
|
|
end
|
|
|
|
function Addon:OpenOptionsFrame()
|
|
InterfaceOptionsFrame_OpenToCategory(L.ADDON_NAME)
|
|
end
|
|
|