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.
383 lines
12 KiB
383 lines
12 KiB
--[[
|
|
Option.lua
|
|
@Author : DengSir (tdaddon@163.com)
|
|
@Link : https://dengsir.github.io
|
|
]]
|
|
local ADDON, ns = ...
|
|
local Addon = ns.Addon
|
|
local L = ns.L
|
|
local PluginManager = ns.PluginManager
|
|
local AceConfigRegistry = LibStub('AceConfigRegistry-3.0')
|
|
local AceConfigDialog = LibStub('AceConfigDialog-3.0')
|
|
local GUI = LibStub('tdGUI-1.0')
|
|
local Option = Addon:NewModule('Option')
|
|
|
|
local function orderGen()
|
|
local order = 0
|
|
return function()
|
|
order = order + 1
|
|
return order
|
|
end
|
|
end
|
|
|
|
function Option:OnInitialize()
|
|
self.pluginsOptions = {}
|
|
self.fontChecker = CreateFont('tdBattlePetScriptFontTest')
|
|
end
|
|
|
|
function Option:OnEnable()
|
|
self:InitOptions()
|
|
self:GeneratePluginOptions()
|
|
C_Timer.After(1, function()
|
|
self:CheckNotInstalledPlugins()
|
|
end)
|
|
end
|
|
|
|
function Option:CheckNotInstalledPlugins()
|
|
local notInstallPlugins = PluginManager:GetNotInstalledPlugins()
|
|
if not next(notInstallPlugins) then
|
|
return
|
|
end
|
|
|
|
GUI:Notify{
|
|
text = format('%s\n|cffff0000%s|r', ADDON, L.SCRIPT_SELECTOR_NOTINSTALLED_TEXT),
|
|
icon = ns.ICON,
|
|
help = L.SCRIPT_SELECTOR_NOTINSTALLED_HELP,
|
|
ignore = L['Don\'t ask me'],
|
|
id = format('%s.Plugin.NotInstalled', ADDON),
|
|
storage = Addon.db.global.notifies,
|
|
OnAccept = function()
|
|
self:Open('plugins')
|
|
end
|
|
}
|
|
end
|
|
|
|
function Option:InitOptions()
|
|
local order = orderGen()
|
|
|
|
local checks = {
|
|
editorFontFace = function(value)
|
|
self.fontChecker:SetFont(value, 10)
|
|
local font = self.fontChecker:GetFont()
|
|
return font and font:lower():gsub('/', '\\') == value:lower():gsub('/', '\\')
|
|
end
|
|
}
|
|
|
|
local function check(key, value)
|
|
local fn = checks[key]
|
|
return not fn or fn(value)
|
|
end
|
|
|
|
local function get(item)
|
|
return Addon:GetSetting(item[#item])
|
|
end
|
|
|
|
local function set(item, value)
|
|
local key = item[#item]
|
|
if not check(key, value) then
|
|
return
|
|
end
|
|
return Addon:SetSetting(key, value)
|
|
end
|
|
|
|
local options = {
|
|
type = 'group',
|
|
childGroups = 'tab',
|
|
args = {
|
|
general = {
|
|
type = 'group',
|
|
name = GENERAL,
|
|
order = order(),
|
|
get = get,
|
|
set = set,
|
|
args = {
|
|
description = {
|
|
type = 'description',
|
|
order = order(),
|
|
name = '\n' .. L.OPTION_GENERAL_NOTES .. '\n\n',
|
|
fontSize = 'medium',
|
|
image = [[Interface\Common\help-i]],
|
|
imageWidth = 32,
|
|
imageHeight = 32,
|
|
imageCoords = {.2, .8, .2, .8}
|
|
},
|
|
autoSelect = {
|
|
type = 'toggle',
|
|
name = L.OPTION_SETTINGS_AUTO_SELECT_SCRIPT_BY_ORDER,
|
|
width = 'double',
|
|
order = order()
|
|
},
|
|
hideNoScript = {
|
|
type = 'toggle',
|
|
name = L.OPTION_SETTINGS_HIDE_SELECTOR_NO_SCRIPT,
|
|
width = 'double',
|
|
order = order()
|
|
},
|
|
noWaitDeleteScript = {
|
|
type = 'toggle',
|
|
name = L.OPTION_SETTINGS_NO_WAIT_DELETE_SCRIPT,
|
|
width = 'double',
|
|
order = order()
|
|
},
|
|
hideMinimap = {
|
|
type = 'toggle',
|
|
name = L.OPTION_SETTINGS_HIDE_MINIMAP,
|
|
width = 'double',
|
|
order = order(),
|
|
confirm = true,
|
|
confirmText = L.OPTION_SETTINGS_HIDE_MINIMAP_TOOLTIP,
|
|
set = function(item, value)
|
|
set(item, value)
|
|
C_UI.Reload()
|
|
end
|
|
},
|
|
lockScriptSelector = {
|
|
type = 'toggle',
|
|
name = L.OPTION_SETTINGS_LOCK_SCRIPT_SELECTOR,
|
|
width = 'double',
|
|
order = order()
|
|
},
|
|
testBreak = {
|
|
type = 'toggle',
|
|
name = L.OPTION_SETTINGS_TEST_BREAK,
|
|
width = 'double',
|
|
order = order()
|
|
},
|
|
autoButtonHotKey = {
|
|
type = 'keybinding',
|
|
name = L.OPTION_SETTINGS_AUTOBUTTON_HOTKEY,
|
|
width = 'double',
|
|
order = order()
|
|
},
|
|
scriptSelectorResetPos = {
|
|
type = 'execute',
|
|
name = L.OPTION_SETTINGS_RESET_FRAMES,
|
|
width = 'double',
|
|
order = order(),
|
|
func = function()
|
|
Addon:ResetFrames()
|
|
end
|
|
}
|
|
}
|
|
},
|
|
editor = {
|
|
type = 'group',
|
|
name = L['Script editor'],
|
|
order = order(),
|
|
get = get,
|
|
set = set,
|
|
args = {
|
|
description = {
|
|
type = 'description',
|
|
name = '\n' .. L.OPTION_SCRIPTEDITOR_NOTES .. '\n\n',
|
|
order = order(),
|
|
fontSize = 'medium',
|
|
image = [[Interface\Common\help-i]],
|
|
imageWidth = 32,
|
|
imageHeight = 32,
|
|
imageCoords = {.2, .8, .2, .8}
|
|
},
|
|
editorFontFace = {
|
|
type = 'input',
|
|
name = L['Font face'],
|
|
width = 'double'
|
|
},
|
|
editorFontSize = {
|
|
type = 'range',
|
|
name = L['Font size'],
|
|
width = 'double',
|
|
min = 9,
|
|
max = 32,
|
|
step = 1
|
|
}
|
|
}
|
|
},
|
|
plugins = {
|
|
type = 'group',
|
|
name = L['Script selector'],
|
|
order = order(),
|
|
get = function(item)
|
|
return PluginManager:IsPluginAllowed(item[#item])
|
|
end,
|
|
set = function(item, value)
|
|
return PluginManager:SetPluginAllowed(item[#item], value)
|
|
end,
|
|
args = self.pluginsOptions
|
|
}
|
|
}
|
|
}
|
|
|
|
AceConfigRegistry:RegisterOptionsTable(ADDON, options)
|
|
AceConfigDialog:AddToBlizOptions(ADDON, ADDON)
|
|
end
|
|
|
|
function Option:FillInstalledPlugins(args, order)
|
|
args.installed = {
|
|
type = 'header',
|
|
order = order(),
|
|
name = L['Installed']
|
|
}
|
|
|
|
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()
|
|
}
|
|
|
|
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 = 19,
|
|
imageHeight = 19,
|
|
order = order(),
|
|
func = function()
|
|
PluginManager:MoveUpPlugin(name)
|
|
self:GeneratePluginOptions()
|
|
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 = 19,
|
|
imageHeight = 19,
|
|
order = order(),
|
|
func = function()
|
|
PluginManager:MoveDownPlugin(name)
|
|
self:GeneratePluginOptions()
|
|
end
|
|
}
|
|
|
|
args[name .. 'Fill'] = {
|
|
type = 'description',
|
|
name = '',
|
|
order = order()
|
|
}
|
|
end
|
|
end
|
|
|
|
function Option:FillNotInstalledPlugins(args, order)
|
|
local notInstallPlugins = PluginManager:GetNotInstalledPlugins()
|
|
if not next(notInstallPlugins) then
|
|
return
|
|
end
|
|
|
|
args.notinstalled = {
|
|
type = 'header',
|
|
order = order(),
|
|
name = L['Not Installed']
|
|
}
|
|
|
|
for _, v in ipairs(notInstallPlugins) do
|
|
args[v.addon .. 'NotInstalled'] = {
|
|
type = 'toggle',
|
|
order = order(),
|
|
name = v.addon,
|
|
width = 'double',
|
|
disabled = true,
|
|
get = function()
|
|
return false
|
|
end
|
|
}
|
|
|
|
args[v.addon .. 'Download'] = {
|
|
type = 'execute',
|
|
order = order(),
|
|
name = L['Download'],
|
|
width = 0.7,
|
|
func = function()
|
|
self:CopyUrl(v.url)
|
|
end
|
|
}
|
|
end
|
|
end
|
|
|
|
function Option:GeneratePluginOptions()
|
|
local args = wipe(self.pluginsOptions)
|
|
local order = orderGen()
|
|
|
|
args.description = {
|
|
type = 'description',
|
|
order = order(),
|
|
name = '\n' .. L.OPTION_SCRIPTSELECTOR_NOTES .. '\n\n',
|
|
fontSize = 'medium',
|
|
image = [[Interface\Common\help-i]],
|
|
imageWidth = 32,
|
|
imageHeight = 32,
|
|
imageCoords = {.2, .8, .2, .8}
|
|
}
|
|
|
|
self:FillInstalledPlugins(args, order)
|
|
self:FillNotInstalledPlugins(args, order)
|
|
|
|
AceConfigRegistry:NotifyChange(ADDON)
|
|
end
|
|
|
|
function Option:CopyUrl(url)
|
|
if not StaticPopupDialogs.TDBATTLEPETSCRIPT_COPYURL then
|
|
StaticPopupDialogs.TDBATTLEPETSCRIPT_COPYURL = {}
|
|
end
|
|
local t = StaticPopupDialogs.TDBATTLEPETSCRIPT_COPYURL
|
|
t.text = L.DIALOG_COPY_URL_HELP
|
|
t.button2 = OKAY
|
|
t.whileDead = 1
|
|
t.hideOnEscape = 1
|
|
t.hasEditBox = 1
|
|
t.editBoxWidth = 300
|
|
t.EditBoxOnTextChanged = function(editBox, url)
|
|
if editBox:GetText() ~= url then
|
|
editBox:SetMaxBytes(nil)
|
|
editBox:SetMaxLetters(nil)
|
|
editBox:SetText(url)
|
|
editBox:HighlightText()
|
|
editBox:SetCursorPosition(0)
|
|
editBox:SetFocus()
|
|
end
|
|
end
|
|
StaticPopup_Show('TDBATTLEPETSCRIPT_COPYURL', nil, nil, url)
|
|
end
|
|
|
|
local OpenToCategory = function(key)
|
|
InterfaceOptionsFrame_OpenToCategory(key)
|
|
InterfaceOptionsFrame_OpenToCategory(key)
|
|
OpenToCategory = InterfaceOptionsFrame_OpenToCategory
|
|
end
|
|
|
|
function Option:Open(...)
|
|
OpenToCategory(ADDON)
|
|
if ... then
|
|
AceConfigDialog:SelectGroup(ADDON, ...)
|
|
end
|
|
end
|
|
|
|
----
|
|
|
|
function Addon:OpenOptionFrame(...)
|
|
return Option:Open(...)
|
|
end
|
|
|