Version 1.1.3
- bumped version for all versions of WoW (Classic Era, Season of Mastery, BCC, Retail) - error on missing options at first start - updated Ace3.0 libraries for latest Shadowlands patch
This commit is contained in:
parent
68da0b15bb
commit
551744a2eb
@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## Version 1.1.3 - 2021-10-06
|
||||||
|
### Changed
|
||||||
|
- bumped version for all versions of WoW (Classic Era, Season of Mastery, BCC, Retail)
|
||||||
|
### Fixed
|
||||||
|
- error on missing options at first start
|
||||||
|
- updated Ace3.0 libraries for latest Shadowlands patch
|
||||||
|
|
||||||
## Version 1.1.2 - 2021-05-23
|
## Version 1.1.2 - 2021-05-23
|
||||||
### Changed
|
### Changed
|
||||||
- adopted to BigWigs release script to better support different game packages
|
- adopted to BigWigs release script to better support different game packages
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
## Interface: 11307
|
## Interface: 11401
|
||||||
## Interface-Classic: 11307
|
## Interface-Classic: 11401
|
||||||
## Interface-BCC: 20501
|
## Interface-BCC: 20502
|
||||||
## Interface-Retail: 90005
|
## Interface-Retail: 90100
|
||||||
|
|
||||||
## Title: Grichelde
|
## Title: Grichelde
|
||||||
## Notes: Replaces characters of your chat input line before sending.
|
## Notes: Replaces characters of your chat input line before sending.
|
||||||
## Notes-de: Ersetzt eingegebene Zeichen in der Chat-Zeile vor dem Versenden.
|
## Notes-de: Ersetzt eingegebene Zeichen in der Chat-Zeile vor dem Versenden.
|
||||||
#@debug@
|
#@debug@
|
||||||
## Version: 1.1.2
|
## Version: 1.1.3
|
||||||
#@end-debug@
|
#@end-debug@
|
||||||
#@non-debug@
|
#@non-debug@
|
||||||
# ## Version: @project-version@
|
# ## Version: @project-version@
|
||||||
@ -17,19 +17,19 @@
|
|||||||
|
|
||||||
#@version-classic@
|
#@version-classic@
|
||||||
## X-Build: Classic
|
## X-Build: Classic
|
||||||
## X-Compatible: 20501
|
## X-Compatible: 20502
|
||||||
## X-Compatible: 90005
|
## X-Compatible: 90100
|
||||||
#@end-version-classic@
|
#@end-version-classic@
|
||||||
#@non-version-classic@
|
#@non-version-classic@
|
||||||
#@version-bcc@
|
#@version-bcc@
|
||||||
# ## X-Build: BCC
|
# ## X-Build: BCC
|
||||||
# ## X-Compatible: 11307
|
# ## X-Compatible: 11401
|
||||||
# ## X-Compatible: 90005
|
# ## X-Compatible: 90100
|
||||||
#@end-version-bcc@
|
#@end-version-bcc@
|
||||||
#@version-retail@
|
#@version-retail@
|
||||||
# ## X-Build: Retail
|
# ## X-Build: Retail
|
||||||
# ## X-Compatible: 11307
|
# ## X-Compatible: 11401
|
||||||
# ## X-Compatible: 20501
|
# ## X-Compatible: 20502
|
||||||
#@end-version-retail@
|
#@end-version-retail@
|
||||||
#@end-non-version-classic@
|
#@end-non-version-classic@
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ function Grichelde:CreateOptionsUI()
|
|||||||
name = self.L.Options_Help_Examples_Import_Name,
|
name = self.L.Options_Help_Examples_Import_Name,
|
||||||
-- desc = self.L.Options_Help_Examples_Import_Desc,
|
-- desc = self.L.Options_Help_Examples_Import_Desc,
|
||||||
desc = function() return format(self.L.Options_Help_Examples_Import_Desc, cPrefix(self.L.Options_Help_Examples[selectedExample].name)) end,
|
desc = function() return format(self.L.Options_Help_Examples_Import_Desc, cPrefix(self.L.Options_Help_Examples[selectedExample].name)) end,
|
||||||
func = function(info) self:ImportExample(selectedExample) end,
|
func = function(_) self:ImportExample(selectedExample) end,
|
||||||
},
|
},
|
||||||
|
|
||||||
spacer4 = {
|
spacer4 = {
|
||||||
@ -617,17 +617,19 @@ function Grichelde:RefreshOptions(replacementsTable)
|
|||||||
self:TracePrint("RefreshOptions : DB table:")
|
self:TracePrint("RefreshOptions : DB table:")
|
||||||
self:TracePrint(replacementsTable)
|
self:TracePrint(replacementsTable)
|
||||||
|
|
||||||
-- remove all previous replacements from options (not DB), except header and buttons
|
if (self.options ~= nil) then
|
||||||
local replacements = self.options.args.replacements.args or {}
|
-- remove all previous replacements from options (not DB), except header and buttons
|
||||||
for k, _ in pairs(replacements) do
|
local replacements = self.options.args.replacements.args or {}
|
||||||
if (k and (find(k, "^replacement_") ~= nil)) then
|
for k, _ in pairs(replacements) do
|
||||||
replacements[k] = nil
|
if (k and (find(k, "^replacement_") ~= nil)) then
|
||||||
|
replacements[k] = nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
for replName, _ in pairs(replacementsTable or {}) do
|
for replName, _ in pairs(replacementsTable or {}) do
|
||||||
local _, replNumber = self:SplitOnFirstMatch(replName, "_")
|
local _, replNumber = self:SplitOnFirstMatch(replName, "_")
|
||||||
replacements[replName] = self:CreateMapping(toNumber(replNumber))
|
replacements[replName] = self:CreateMapping(toNumber(replNumber))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- self:TracePrint("RefreshOptions : UI options:")
|
-- self:TracePrint("RefreshOptions : UI options:")
|
||||||
@ -635,7 +637,9 @@ function Grichelde:RefreshOptions(replacementsTable)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Grichelde:RefreshDialog()
|
function Grichelde:RefreshDialog()
|
||||||
self.dialog:ConfigTableChanged(nil, self.name)
|
if (self.dialog ~= nil) then
|
||||||
|
self.dialog:ConfigTableChanged(nil, self.name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Grichelde:AddEmptyMapping()
|
function Grichelde:AddEmptyMapping()
|
||||||
|
@ -28,9 +28,9 @@
|
|||||||
-- end
|
-- end
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceAddon-3.0.lua
|
-- @name AceAddon-3.0.lua
|
||||||
-- @release $Id: AceAddon-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceAddon-3.0.lua 1238 2020-08-28 16:18:42Z nevcairiel $
|
||||||
|
|
||||||
local MAJOR, MINOR = "AceAddon-3.0", 12
|
local MAJOR, MINOR = "AceAddon-3.0", 13
|
||||||
local AceAddon, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
local AceAddon, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
if not AceAddon then return end -- No Upgrade needed.
|
if not AceAddon then return end -- No Upgrade needed.
|
||||||
@ -601,10 +601,20 @@ function AceAddon:IterateAddonStatus() return pairs(self.statuses) end
|
|||||||
function AceAddon:IterateEmbedsOnAddon(addon) return pairs(self.embeds[addon]) end
|
function AceAddon:IterateEmbedsOnAddon(addon) return pairs(self.embeds[addon]) end
|
||||||
function AceAddon:IterateModulesOfAddon(addon) return pairs(addon.modules) end
|
function AceAddon:IterateModulesOfAddon(addon) return pairs(addon.modules) end
|
||||||
|
|
||||||
|
-- Blizzard AddOns which can load very early in the loading process and mess with Ace3 addon loading
|
||||||
|
local BlizzardEarlyLoadAddons = {
|
||||||
|
Blizzard_DebugTools = true,
|
||||||
|
Blizzard_TimeManager = true,
|
||||||
|
Blizzard_BattlefieldMap = true,
|
||||||
|
Blizzard_MapCanvas = true,
|
||||||
|
Blizzard_SharedMapDataProviders = true,
|
||||||
|
Blizzard_CombatLog = true,
|
||||||
|
}
|
||||||
|
|
||||||
-- Event Handling
|
-- Event Handling
|
||||||
local function onEvent(this, event, arg1)
|
local function onEvent(this, event, arg1)
|
||||||
-- 2011-08-17 nevcairiel - ignore the load event of Blizzard_DebugTools, so a potential startup error isn't swallowed up
|
-- 2020-08-28 nevcairiel - ignore the load event of Blizzard addons which occur early in the loading process
|
||||||
if (event == "ADDON_LOADED" and arg1 ~= "Blizzard_DebugTools") or event == "PLAYER_LOGIN" then
|
if (event == "ADDON_LOADED" and (arg1 == nil or not BlizzardEarlyLoadAddons[arg1])) or event == "PLAYER_LOGIN" then
|
||||||
-- if a addon loads another addon, recursion could happen here, so we need to validate the table on every iteration
|
-- if a addon loads another addon, recursion could happen here, so we need to validate the table on every iteration
|
||||||
while(#AceAddon.initializequeue > 0) do
|
while(#AceAddon.initializequeue > 0) do
|
||||||
local addon = tremove(AceAddon.initializequeue, 1)
|
local addon = tremove(AceAddon.initializequeue, 1)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||||
..\FrameXML\UI.xsd">
|
..\FrameXML\UI.xsd">
|
||||||
<Script file="AceAddon-3.0.lua"/>
|
<Script file="AceAddon-3.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
-- as well as associate it with a slash command.
|
-- as well as associate it with a slash command.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceConfig-3.0
|
-- @name AceConfig-3.0
|
||||||
-- @release $Id: AceConfig-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $
|
-- @release $Id: AceConfig-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
AceConfig-3.0
|
AceConfig-3.0
|
||||||
@ -45,7 +45,7 @@ local pcall, error, type, pairs = pcall, error, type, pairs
|
|||||||
function AceConfig:RegisterOptionsTable(appName, options, slashcmd)
|
function AceConfig:RegisterOptionsTable(appName, options, slashcmd)
|
||||||
local ok,msg = pcall(cfgreg.RegisterOptionsTable, self, appName, options)
|
local ok,msg = pcall(cfgreg.RegisterOptionsTable, self, appName, options)
|
||||||
if not ok then error(msg, 2) end
|
if not ok then error(msg, 2) end
|
||||||
|
|
||||||
if slashcmd then
|
if slashcmd then
|
||||||
if type(slashcmd) == "table" then
|
if type(slashcmd) == "table" then
|
||||||
for _,cmd in pairs(slashcmd) do
|
for _,cmd in pairs(slashcmd) do
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
--- AceConfigCmd-3.0 handles access to an options table through the "command line" interface via the ChatFrames.
|
--- AceConfigCmd-3.0 handles access to an options table through the "command line" interface via the ChatFrames.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceConfigCmd-3.0
|
-- @name AceConfigCmd-3.0
|
||||||
-- @release $Id: AceConfigCmd-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $
|
-- @release $Id: AceConfigCmd-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
AceConfigCmd-3.0
|
AceConfigCmd-3.0
|
||||||
@ -63,7 +63,7 @@ local funcmsg = "expected function or member name"
|
|||||||
|
|
||||||
-- pickfirstset() - picks the first non-nil value and returns it
|
-- pickfirstset() - picks the first non-nil value and returns it
|
||||||
|
|
||||||
local function pickfirstset(...)
|
local function pickfirstset(...)
|
||||||
for i=1,select("#",...) do
|
for i=1,select("#",...) do
|
||||||
if select(i,...)~=nil then
|
if select(i,...)~=nil then
|
||||||
return select(i,...)
|
return select(i,...)
|
||||||
@ -120,7 +120,7 @@ local function callfunction(info, tab, methodtype, ...)
|
|||||||
info.arg = tab.arg
|
info.arg = tab.arg
|
||||||
info.option = tab
|
info.option = tab
|
||||||
info.type = tab.type
|
info.type = tab.type
|
||||||
|
|
||||||
if type(method)=="function" then
|
if type(method)=="function" then
|
||||||
return method(info, ...)
|
return method(info, ...)
|
||||||
else
|
else
|
||||||
@ -131,7 +131,7 @@ end
|
|||||||
-- do_final() - do the final step (set/execute) along with validation and confirmation
|
-- do_final() - do the final step (set/execute) along with validation and confirmation
|
||||||
|
|
||||||
local function do_final(info, inputpos, tab, methodtype, ...)
|
local function do_final(info, inputpos, tab, methodtype, ...)
|
||||||
if info.validate then
|
if info.validate then
|
||||||
local res = callmethod(info,inputpos,tab,"validate",...)
|
local res = callmethod(info,inputpos,tab,"validate",...)
|
||||||
if type(res)=="string" then
|
if type(res)=="string" then
|
||||||
usererr(info, inputpos, "'"..strsub(info.input, inputpos).."' - "..res)
|
usererr(info, inputpos, "'"..strsub(info.input, inputpos).."' - "..res)
|
||||||
@ -139,7 +139,7 @@ local function do_final(info, inputpos, tab, methodtype, ...)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- console ignores .confirm
|
-- console ignores .confirm
|
||||||
|
|
||||||
callmethod(info,inputpos,tab,methodtype, ...)
|
callmethod(info,inputpos,tab,methodtype, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -152,8 +152,8 @@ local function getparam(info, inputpos, tab, depth, paramname, types, errormsg)
|
|||||||
if val~=nil then
|
if val~=nil then
|
||||||
if val==false then
|
if val==false then
|
||||||
val=nil
|
val=nil
|
||||||
elseif not types[type(val)] then
|
elseif not types[type(val)] then
|
||||||
err(info, inputpos, "'" .. paramname.. "' - "..errormsg)
|
err(info, inputpos, "'" .. paramname.. "' - "..errormsg)
|
||||||
end
|
end
|
||||||
info[paramname] = val
|
info[paramname] = val
|
||||||
info[paramname.."_at"] = depth
|
info[paramname.."_at"] = depth
|
||||||
@ -166,13 +166,13 @@ end
|
|||||||
local dummytable={}
|
local dummytable={}
|
||||||
|
|
||||||
local function iterateargs(tab)
|
local function iterateargs(tab)
|
||||||
if not tab.plugins then
|
if not tab.plugins then
|
||||||
return pairs(tab.args)
|
return pairs(tab.args)
|
||||||
end
|
end
|
||||||
|
|
||||||
local argtabkey,argtab=next(tab.plugins)
|
local argtabkey,argtab=next(tab.plugins)
|
||||||
local v
|
local v
|
||||||
|
|
||||||
return function(_, k)
|
return function(_, k)
|
||||||
while argtab do
|
while argtab do
|
||||||
k,v = next(argtab, k)
|
k,v = next(argtab, k)
|
||||||
@ -206,18 +206,18 @@ local function showhelp(info, inputpos, tab, depth, noHead)
|
|||||||
if not noHead then
|
if not noHead then
|
||||||
print("|cff33ff99"..info.appName.."|r: Arguments to |cffffff78/"..info[0].."|r "..strsub(info.input,1,inputpos-1)..":")
|
print("|cff33ff99"..info.appName.."|r: Arguments to |cffffff78/"..info[0].."|r "..strsub(info.input,1,inputpos-1)..":")
|
||||||
end
|
end
|
||||||
|
|
||||||
local sortTbl = {} -- [1..n]=name
|
local sortTbl = {} -- [1..n]=name
|
||||||
local refTbl = {} -- [name]=tableref
|
local refTbl = {} -- [name]=tableref
|
||||||
|
|
||||||
for k,v in iterateargs(tab) do
|
for k,v in iterateargs(tab) do
|
||||||
if not refTbl[k] then -- a plugin overriding something in .args
|
if not refTbl[k] then -- a plugin overriding something in .args
|
||||||
tinsert(sortTbl, k)
|
tinsert(sortTbl, k)
|
||||||
refTbl[k] = v
|
refTbl[k] = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
tsort(sortTbl, function(one, two)
|
tsort(sortTbl, function(one, two)
|
||||||
local o1 = refTbl[one].order or 100
|
local o1 = refTbl[one].order or 100
|
||||||
local o2 = refTbl[two].order or 100
|
local o2 = refTbl[two].order or 100
|
||||||
if type(o1) == "function" or type(o1) == "string" then
|
if type(o1) == "function" or type(o1) == "string" then
|
||||||
@ -240,7 +240,7 @@ local function showhelp(info, inputpos, tab, depth, noHead)
|
|||||||
if o1==o2 then return tostring(one)<tostring(two) end -- compare names
|
if o1==o2 then return tostring(one)<tostring(two) end -- compare names
|
||||||
return o1<o2
|
return o1<o2
|
||||||
end)
|
end)
|
||||||
|
|
||||||
for i = 1, #sortTbl do
|
for i = 1, #sortTbl do
|
||||||
local k = sortTbl[i]
|
local k = sortTbl[i]
|
||||||
local v = refTbl[k]
|
local v = refTbl[k]
|
||||||
@ -327,7 +327,7 @@ local function keybindingValidateFunc(text)
|
|||||||
return s
|
return s
|
||||||
end
|
end
|
||||||
|
|
||||||
-- handle() - selfrecursing function that processes input->optiontable
|
-- handle() - selfrecursing function that processes input->optiontable
|
||||||
-- - depth - starts at 0
|
-- - depth - starts at 0
|
||||||
-- - retfalse - return false rather than produce error if a match is not found (used by inlined groups)
|
-- - retfalse - return false rather than produce error if a match is not found (used by inlined groups)
|
||||||
|
|
||||||
@ -346,16 +346,16 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
local oldfunc,oldfunc_at = getparam(info,inputpos,tab,depth,"func",functypes,funcmsg)
|
local oldfunc,oldfunc_at = getparam(info,inputpos,tab,depth,"func",functypes,funcmsg)
|
||||||
local oldvalidate,oldvalidate_at = getparam(info,inputpos,tab,depth,"validate",functypes,funcmsg)
|
local oldvalidate,oldvalidate_at = getparam(info,inputpos,tab,depth,"validate",functypes,funcmsg)
|
||||||
--local oldconfirm,oldconfirm_at = getparam(info,inputpos,tab,depth,"confirm",functypes,funcmsg)
|
--local oldconfirm,oldconfirm_at = getparam(info,inputpos,tab,depth,"confirm",functypes,funcmsg)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
-- Act according to .type of this table
|
-- Act according to .type of this table
|
||||||
|
|
||||||
if tab.type=="group" then
|
if tab.type=="group" then
|
||||||
------------ group --------------------------------------------
|
------------ group --------------------------------------------
|
||||||
|
|
||||||
if type(tab.args)~="table" then err(info, inputpos) end
|
if type(tab.args)~="table" then err(info, inputpos) end
|
||||||
if tab.plugins and type(tab.plugins)~="table" then err(info,inputpos) end
|
if tab.plugins and type(tab.plugins)~="table" then err(info,inputpos) end
|
||||||
|
|
||||||
-- grab next arg from input
|
-- grab next arg from input
|
||||||
local _,nextpos,arg = (info.input):find(" *([^ ]+) *", inputpos)
|
local _,nextpos,arg = (info.input):find(" *([^ ]+) *", inputpos)
|
||||||
if not arg then
|
if not arg then
|
||||||
@ -363,11 +363,11 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
nextpos=nextpos+1
|
nextpos=nextpos+1
|
||||||
|
|
||||||
-- loop .args and try to find a key with a matching name
|
-- loop .args and try to find a key with a matching name
|
||||||
for k,v in iterateargs(tab) do
|
for k,v in iterateargs(tab) do
|
||||||
if not(type(k)=="string" and type(v)=="table" and type(v.type)=="string") then err(info,inputpos, "options table child '"..tostring(k).."' is malformed") end
|
if not(type(k)=="string" and type(v)=="table" and type(v.type)=="string") then err(info,inputpos, "options table child '"..tostring(k).."' is malformed") end
|
||||||
|
|
||||||
-- is this child an inline group? if so, traverse into it
|
-- is this child an inline group? if so, traverse into it
|
||||||
if v.type=="group" and pickfirstset(v.cmdInline, v.inline, false) then
|
if v.type=="group" and pickfirstset(v.cmdInline, v.inline, false) then
|
||||||
info[depth+1] = k
|
info[depth+1] = k
|
||||||
@ -383,8 +383,8 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
return handle(info,nextpos,v,depth+1)
|
return handle(info,nextpos,v,depth+1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- no match
|
-- no match
|
||||||
if retfalse then
|
if retfalse then
|
||||||
-- restore old infotable members and return false to indicate failure
|
-- restore old infotable members and return false to indicate failure
|
||||||
info.handler,info.handler_at = oldhandler,oldhandler_at
|
info.handler,info.handler_at = oldhandler,oldhandler_at
|
||||||
@ -395,23 +395,23 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
--info.confirm,info.confirm_at = oldconfirm,oldconfirm_at
|
--info.confirm,info.confirm_at = oldconfirm,oldconfirm_at
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- couldn't find the command, display error
|
-- couldn't find the command, display error
|
||||||
usererr(info, inputpos, "'"..arg.."' - " .. L["unknown argument"])
|
usererr(info, inputpos, "'"..arg.."' - " .. L["unknown argument"])
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local str = strsub(info.input,inputpos);
|
local str = strsub(info.input,inputpos);
|
||||||
|
|
||||||
if tab.type=="execute" then
|
if tab.type=="execute" then
|
||||||
------------ execute --------------------------------------------
|
------------ execute --------------------------------------------
|
||||||
do_final(info, inputpos, tab, "func")
|
do_final(info, inputpos, tab, "func")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
elseif tab.type=="input" then
|
elseif tab.type=="input" then
|
||||||
------------ input --------------------------------------------
|
------------ input --------------------------------------------
|
||||||
|
|
||||||
local res = true
|
local res = true
|
||||||
if tab.pattern then
|
if tab.pattern then
|
||||||
if not(type(tab.pattern)=="string") then err(info, inputpos, "'pattern' - expected a string") end
|
if not(type(tab.pattern)=="string") then err(info, inputpos, "'pattern' - expected a string") end
|
||||||
@ -420,11 +420,11 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do_final(info, inputpos, tab, "set", str)
|
|
||||||
|
|
||||||
|
|
||||||
|
do_final(info, inputpos, tab, "set", str)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
elseif tab.type=="toggle" then
|
elseif tab.type=="toggle" then
|
||||||
------------ toggle --------------------------------------------
|
------------ toggle --------------------------------------------
|
||||||
local b
|
local b
|
||||||
@ -444,7 +444,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
else
|
else
|
||||||
b = not b
|
b = not b
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif str==L["on"] then
|
elseif str==L["on"] then
|
||||||
b = true
|
b = true
|
||||||
elseif str==L["off"] then
|
elseif str==L["off"] then
|
||||||
@ -459,9 +459,9 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
do_final(info, inputpos, tab, "set", b)
|
do_final(info, inputpos, tab, "set", b)
|
||||||
|
|
||||||
|
|
||||||
elseif tab.type=="range" then
|
elseif tab.type=="range" then
|
||||||
------------ range --------------------------------------------
|
------------ range --------------------------------------------
|
||||||
@ -481,21 +481,21 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
usererr(info, inputpos, val.." - "..format(L["must be equal to or lower than %s"], tostring(info.max)) )
|
usererr(info, inputpos, val.." - "..format(L["must be equal to or lower than %s"], tostring(info.max)) )
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
do_final(info, inputpos, tab, "set", val)
|
do_final(info, inputpos, tab, "set", val)
|
||||||
|
|
||||||
|
|
||||||
elseif tab.type=="select" then
|
elseif tab.type=="select" then
|
||||||
------------ select ------------------------------------
|
------------ select ------------------------------------
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(str))
|
||||||
|
|
||||||
local values = tab.values
|
local values = tab.values
|
||||||
if type(values) == "function" or type(values) == "string" then
|
if type(values) == "function" or type(values) == "string" then
|
||||||
info.values = values
|
info.values = values
|
||||||
values = callmethod(info, inputpos, tab, "values")
|
values = callmethod(info, inputpos, tab, "values")
|
||||||
info.values = nil
|
info.values = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if str == "" then
|
if str == "" then
|
||||||
local b = callmethod(info, inputpos, tab, "get")
|
local b = callmethod(info, inputpos, tab, "get")
|
||||||
local fmt = "|cffffff78- [%s]|r %s"
|
local fmt = "|cffffff78- [%s]|r %s"
|
||||||
@ -512,7 +512,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local ok
|
local ok
|
||||||
for k,v in pairs(values) do
|
for k,v in pairs(values) do
|
||||||
if strlower(k)==str then
|
if strlower(k)==str then
|
||||||
str = k -- overwrite with key (in case of case mismatches)
|
str = k -- overwrite with key (in case of case mismatches)
|
||||||
ok = true
|
ok = true
|
||||||
@ -523,20 +523,20 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
usererr(info, inputpos, "'"..str.."' - "..L["unknown selection"])
|
usererr(info, inputpos, "'"..str.."' - "..L["unknown selection"])
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
do_final(info, inputpos, tab, "set", str)
|
do_final(info, inputpos, tab, "set", str)
|
||||||
|
|
||||||
elseif tab.type=="multiselect" then
|
elseif tab.type=="multiselect" then
|
||||||
------------ multiselect -------------------------------------------
|
------------ multiselect -------------------------------------------
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(str))
|
||||||
|
|
||||||
local values = tab.values
|
local values = tab.values
|
||||||
if type(values) == "function" or type(values) == "string" then
|
if type(values) == "function" or type(values) == "string" then
|
||||||
info.values = values
|
info.values = values
|
||||||
values = callmethod(info, inputpos, tab, "values")
|
values = callmethod(info, inputpos, tab, "values")
|
||||||
info.values = nil
|
info.values = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if str == "" then
|
if str == "" then
|
||||||
local fmt = "|cffffff78- [%s]|r %s"
|
local fmt = "|cffffff78- [%s]|r %s"
|
||||||
local fmt_sel = "|cffffff78- [%s]|r %s |cffff0000*|r"
|
local fmt_sel = "|cffffff78- [%s]|r %s |cffff0000*|r"
|
||||||
@ -550,7 +550,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
--build a table of the selections, checking that they exist
|
--build a table of the selections, checking that they exist
|
||||||
--parse for =on =off =default in the process
|
--parse for =on =off =default in the process
|
||||||
--table will be key = true for options that should toggle, key = [on|off|default] for options to be set
|
--table will be key = true for options that should toggle, key = [on|off|default] for options to be set
|
||||||
@ -559,25 +559,25 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
--parse option=on etc
|
--parse option=on etc
|
||||||
local opt, val = v:match('(.+)=(.+)')
|
local opt, val = v:match('(.+)=(.+)')
|
||||||
--get option if toggling
|
--get option if toggling
|
||||||
if not opt then
|
if not opt then
|
||||||
opt = v
|
opt = v
|
||||||
end
|
end
|
||||||
|
|
||||||
--check that the opt is valid
|
--check that the opt is valid
|
||||||
local ok
|
local ok
|
||||||
for k,v in pairs(values) do
|
for k,v in pairs(values) do
|
||||||
if strlower(k)==opt then
|
if strlower(k)==opt then
|
||||||
opt = k -- overwrite with key (in case of case mismatches)
|
opt = k -- overwrite with key (in case of case mismatches)
|
||||||
ok = true
|
ok = true
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if not ok then
|
if not ok then
|
||||||
usererr(info, inputpos, "'"..opt.."' - "..L["unknown selection"])
|
usererr(info, inputpos, "'"..opt.."' - "..L["unknown selection"])
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
--check that if val was supplied it is valid
|
--check that if val was supplied it is valid
|
||||||
if val then
|
if val then
|
||||||
if val == L["on"] or val == L["off"] or (tab.tristate and val == L["default"]) then
|
if val == L["on"] or val == L["off"] or (tab.tristate and val == L["default"]) then
|
||||||
@ -596,14 +596,14 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
sels[opt] = true
|
sels[opt] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for opt, val in pairs(sels) do
|
for opt, val in pairs(sels) do
|
||||||
local newval
|
local newval
|
||||||
|
|
||||||
if (val == true) then
|
if (val == true) then
|
||||||
--toggle the option
|
--toggle the option
|
||||||
local b = callmethod(info, inputpos, tab, "get", opt)
|
local b = callmethod(info, inputpos, tab, "get", opt)
|
||||||
|
|
||||||
if tab.tristate then
|
if tab.tristate then
|
||||||
--cycle in true, nil, false order
|
--cycle in true, nil, false order
|
||||||
if b then
|
if b then
|
||||||
@ -627,11 +627,11 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
newval = nil
|
newval = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do_final(info, inputpos, tab, "set", opt, newval)
|
do_final(info, inputpos, tab, "set", opt, newval)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
elseif tab.type=="color" then
|
elseif tab.type=="color" then
|
||||||
------------ color --------------------------------------------
|
------------ color --------------------------------------------
|
||||||
local str = strtrim(strlower(str))
|
local str = strtrim(strlower(str))
|
||||||
@ -639,16 +639,16 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
--TODO: Show current value
|
--TODO: Show current value
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local r, g, b, a
|
local r, g, b, a
|
||||||
|
|
||||||
local hasAlpha = tab.hasAlpha
|
local hasAlpha = tab.hasAlpha
|
||||||
if type(hasAlpha) == "function" or type(hasAlpha) == "string" then
|
if type(hasAlpha) == "function" or type(hasAlpha) == "string" then
|
||||||
info.hasAlpha = hasAlpha
|
info.hasAlpha = hasAlpha
|
||||||
hasAlpha = callmethod(info, inputpos, tab, 'hasAlpha')
|
hasAlpha = callmethod(info, inputpos, tab, 'hasAlpha')
|
||||||
info.hasAlpha = nil
|
info.hasAlpha = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if hasAlpha then
|
if hasAlpha then
|
||||||
if str:len() == 8 and str:find("^%x*$") then
|
if str:len() == 8 and str:find("^%x*$") then
|
||||||
--parse a hex string
|
--parse a hex string
|
||||||
@ -662,7 +662,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
usererr(info, inputpos, format(L["'%s' - expected 'RRGGBBAA' or 'r g b a'."], str))
|
usererr(info, inputpos, format(L["'%s' - expected 'RRGGBBAA' or 'r g b a'."], str))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if r >= 0.0 and r <= 1.0 and g >= 0.0 and g <= 1.0 and b >= 0.0 and b <= 1.0 and a >= 0.0 and a <= 1.0 then
|
if r >= 0.0 and r <= 1.0 and g >= 0.0 and g <= 1.0 and b >= 0.0 and b <= 1.0 and a >= 0.0 and a <= 1.0 then
|
||||||
--values are valid
|
--values are valid
|
||||||
elseif r >= 0 and r <= 255 and g >= 0 and g <= 255 and b >= 0 and b <= 255 and a >= 0 and a <= 255 then
|
elseif r >= 0 and r <= 255 and g >= 0 and g <= 255 and b >= 0 and b <= 255 and a >= 0 and a <= 255 then
|
||||||
@ -701,7 +701,7 @@ local function handle(info, inputpos, tab, depth, retfalse)
|
|||||||
usererr(info, inputpos, format(L["'%s' - values must all be either in the range 0-1 or 0-255."], str))
|
usererr(info, inputpos, format(L["'%s' - values must all be either in the range 0-1 or 0-255."], str))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do_final(info, inputpos, tab, "set", r,g,b,a)
|
do_final(info, inputpos, tab, "set", r,g,b,a)
|
||||||
|
|
||||||
elseif tab.type=="keybinding" then
|
elseif tab.type=="keybinding" then
|
||||||
@ -737,7 +737,7 @@ end
|
|||||||
-- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceConsole-3.0")
|
-- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceConsole-3.0")
|
||||||
-- -- Use AceConsole-3.0 to register a Chat Command
|
-- -- Use AceConsole-3.0 to register a Chat Command
|
||||||
-- MyAddon:RegisterChatCommand("mychat", "ChatCommand")
|
-- MyAddon:RegisterChatCommand("mychat", "ChatCommand")
|
||||||
--
|
--
|
||||||
-- -- Show the GUI if no input is supplied, otherwise handle the chat input.
|
-- -- Show the GUI if no input is supplied, otherwise handle the chat input.
|
||||||
-- function MyAddon:ChatCommand(input)
|
-- function MyAddon:ChatCommand(input)
|
||||||
-- -- Assuming "MyOptions" is the appName of a valid options table
|
-- -- Assuming "MyOptions" is the appName of a valid options table
|
||||||
@ -754,7 +754,7 @@ function AceConfigCmd:HandleCommand(slashcmd, appName, input)
|
|||||||
error([[Usage: HandleCommand("slashcmd", "appName", "input"): 'appName' - no options table "]]..tostring(appName)..[[" has been registered]], 2)
|
error([[Usage: HandleCommand("slashcmd", "appName", "input"): 'appName' - no options table "]]..tostring(appName)..[[" has been registered]], 2)
|
||||||
end
|
end
|
||||||
local options = assert( optgetter("cmd", MAJOR) )
|
local options = assert( optgetter("cmd", MAJOR) )
|
||||||
|
|
||||||
local info = { -- Don't try to recycle this, it gets handed off to callbacks and whatnot
|
local info = { -- Don't try to recycle this, it gets handed off to callbacks and whatnot
|
||||||
[0] = slashcmd,
|
[0] = slashcmd,
|
||||||
appName = appName,
|
appName = appName,
|
||||||
@ -765,7 +765,7 @@ function AceConfigCmd:HandleCommand(slashcmd, appName, input)
|
|||||||
uiType = "cmd",
|
uiType = "cmd",
|
||||||
uiName = MAJOR,
|
uiName = MAJOR,
|
||||||
}
|
}
|
||||||
|
|
||||||
handle(info, 1, options, 0) -- (info, inputpos, table, depth)
|
handle(info, 1, options, 0) -- (info, inputpos, table, depth)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables.
|
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceConfigDialog-3.0
|
-- @name AceConfigDialog-3.0
|
||||||
-- @release $Id: AceConfigDialog-3.0.lua 1169 2018-02-27 16:18:28Z nevcairiel $
|
-- @release $Id: AceConfigDialog-3.0.lua 1248 2021-02-05 14:27:49Z funkehdude $
|
||||||
|
|
||||||
local LibStub = LibStub
|
local LibStub = LibStub
|
||||||
local gui = LibStub("AceGUI-3.0")
|
local gui = LibStub("AceGUI-3.0")
|
||||||
local reg = LibStub("AceConfigRegistry-3.0")
|
local reg = LibStub("AceConfigRegistry-3.0")
|
||||||
|
|
||||||
local MAJOR, MINOR = "AceConfigDialog-3.0", 66
|
local MAJOR, MINOR = "AceConfigDialog-3.0", 81
|
||||||
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
if not AceConfigDialog then return end
|
if not AceConfigDialog then return end
|
||||||
@ -15,22 +15,23 @@ if not AceConfigDialog then return end
|
|||||||
AceConfigDialog.OpenFrames = AceConfigDialog.OpenFrames or {}
|
AceConfigDialog.OpenFrames = AceConfigDialog.OpenFrames or {}
|
||||||
AceConfigDialog.Status = AceConfigDialog.Status or {}
|
AceConfigDialog.Status = AceConfigDialog.Status or {}
|
||||||
AceConfigDialog.frame = AceConfigDialog.frame or CreateFrame("Frame")
|
AceConfigDialog.frame = AceConfigDialog.frame or CreateFrame("Frame")
|
||||||
|
AceConfigDialog.tooltip = AceConfigDialog.tooltip or CreateFrame("GameTooltip", "AceConfigDialogTooltip", UIParent, "GameTooltipTemplate")
|
||||||
|
|
||||||
AceConfigDialog.frame.apps = AceConfigDialog.frame.apps or {}
|
AceConfigDialog.frame.apps = AceConfigDialog.frame.apps or {}
|
||||||
AceConfigDialog.frame.closing = AceConfigDialog.frame.closing or {}
|
AceConfigDialog.frame.closing = AceConfigDialog.frame.closing or {}
|
||||||
AceConfigDialog.frame.closeAllOverride = AceConfigDialog.frame.closeAllOverride or {}
|
AceConfigDialog.frame.closeAllOverride = AceConfigDialog.frame.closeAllOverride or {}
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local tconcat, tinsert, tsort, tremove, tsort = table.concat, table.insert, table.sort, table.remove, table.sort
|
local tinsert, tsort, tremove, wipe = table.insert, table.sort, table.remove, table.wipe
|
||||||
local strmatch, format = string.match, string.format
|
local strmatch, format = string.match, string.format
|
||||||
local assert, loadstring, error = assert, loadstring, error
|
local error = error
|
||||||
local pairs, next, select, type, unpack, wipe, ipairs = pairs, next, select, type, unpack, wipe, ipairs
|
local pairs, next, select, type, unpack, ipairs = pairs, next, select, type, unpack, ipairs
|
||||||
local rawset, tostring, tonumber = rawset, tostring, tonumber
|
local tostring, tonumber = tostring, tonumber
|
||||||
local math_min, math_max, math_floor = math.min, math.max, math.floor
|
local math_min, math_max, math_floor = math.min, math.max, math.floor
|
||||||
|
|
||||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
||||||
-- List them here for Mikk's FindGlobals script
|
-- List them here for Mikk's FindGlobals script
|
||||||
-- GLOBALS: NORMAL_FONT_COLOR, GameTooltip, StaticPopupDialogs, ACCEPT, CANCEL, StaticPopup_Show
|
-- GLOBALS: NORMAL_FONT_COLOR, ACCEPT, CANCEL
|
||||||
-- GLOBALS: PlaySound, GameFontHighlight, GameFontHighlightSmall, GameFontHighlightLarge
|
-- GLOBALS: PlaySound, GameFontHighlight, GameFontHighlightSmall, GameFontHighlightLarge
|
||||||
-- GLOBALS: CloseSpecialWindows, InterfaceOptions_AddCategory, geterrorhandler
|
-- GLOBALS: CloseSpecialWindows, InterfaceOptions_AddCategory, geterrorhandler
|
||||||
|
|
||||||
@ -45,39 +46,10 @@ local function errorhandler(err)
|
|||||||
return geterrorhandler()(err)
|
return geterrorhandler()(err)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function CreateDispatcher(argCount)
|
|
||||||
local code = [[
|
|
||||||
local xpcall, eh = ...
|
|
||||||
local method, ARGS
|
|
||||||
local function call() return method(ARGS) end
|
|
||||||
|
|
||||||
local function dispatch(func, ...)
|
|
||||||
method = func
|
|
||||||
if not method then return end
|
|
||||||
ARGS = ...
|
|
||||||
return xpcall(call, eh)
|
|
||||||
end
|
|
||||||
|
|
||||||
return dispatch
|
|
||||||
]]
|
|
||||||
|
|
||||||
local ARGS = {}
|
|
||||||
for i = 1, argCount do ARGS[i] = "arg"..i end
|
|
||||||
code = code:gsub("ARGS", tconcat(ARGS, ", "))
|
|
||||||
return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(xpcall, errorhandler)
|
|
||||||
end
|
|
||||||
|
|
||||||
local Dispatchers = setmetatable({}, {__index=function(self, argCount)
|
|
||||||
local dispatcher = CreateDispatcher(argCount)
|
|
||||||
rawset(self, argCount, dispatcher)
|
|
||||||
return dispatcher
|
|
||||||
end})
|
|
||||||
Dispatchers[0] = function(func)
|
|
||||||
return xpcall(func, errorhandler)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function safecall(func, ...)
|
local function safecall(func, ...)
|
||||||
return Dispatchers[select("#", ...)](func, ...)
|
if func then
|
||||||
|
return xpcall(func, errorhandler, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local width_multiplier = 170
|
local width_multiplier = 170
|
||||||
@ -85,18 +57,18 @@ local width_multiplier = 170
|
|||||||
--[[
|
--[[
|
||||||
Group Types
|
Group Types
|
||||||
Tree - All Descendant Groups will all become nodes on the tree, direct child options will appear above the tree
|
Tree - All Descendant Groups will all become nodes on the tree, direct child options will appear above the tree
|
||||||
- Descendant Groups with inline=true and thier children will not become nodes
|
- Descendant Groups with inline=true and thier children will not become nodes
|
||||||
|
|
||||||
Tab - Direct Child Groups will become tabs, direct child options will appear above the tab control
|
Tab - Direct Child Groups will become tabs, direct child options will appear above the tab control
|
||||||
- Grandchild groups will default to inline unless specified otherwise
|
- Grandchild groups will default to inline unless specified otherwise
|
||||||
|
|
||||||
Select- Same as Tab but with entries in a dropdown rather than tabs
|
Select- Same as Tab but with entries in a dropdown rather than tabs
|
||||||
|
|
||||||
|
|
||||||
Inline Groups
|
Inline Groups
|
||||||
- Will not become nodes of a select group, they will be effectivly part of thier parent group seperated by a border
|
- Will not become nodes of a select group, they will be effectivly part of thier parent group seperated by a border
|
||||||
- If declared on a direct child of a root node of a select group, they will appear above the group container control
|
- If declared on a direct child of a root node of a select group, they will appear above the group container control
|
||||||
- When a group is displayed inline, all descendants will also be inline members of the group
|
- When a group is displayed inline, all descendants will also be inline members of the group
|
||||||
|
|
||||||
]]
|
]]
|
||||||
|
|
||||||
@ -197,11 +169,11 @@ local allIsLiteral = {
|
|||||||
local function GetOptionsMemberValue(membername, option, options, path, appName, ...)
|
local function GetOptionsMemberValue(membername, option, options, path, appName, ...)
|
||||||
--get definition for the member
|
--get definition for the member
|
||||||
local inherits = isInherited[membername]
|
local inherits = isInherited[membername]
|
||||||
|
|
||||||
|
|
||||||
--get the member of the option, traversing the tree if it can be inherited
|
--get the member of the option, traversing the tree if it can be inherited
|
||||||
local member
|
local member
|
||||||
|
|
||||||
if inherits then
|
if inherits then
|
||||||
local group = options
|
local group = options
|
||||||
if group[membername] ~= nil then
|
if group[membername] ~= nil then
|
||||||
@ -216,7 +188,7 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
|
|||||||
else
|
else
|
||||||
member = option[membername]
|
member = option[membername]
|
||||||
end
|
end
|
||||||
|
|
||||||
--check if we need to call a functon, or if we have a literal value
|
--check if we need to call a functon, or if we have a literal value
|
||||||
if ( not allIsLiteral[membername] ) and ( type(member) == "function" or ((not stringIsLiteral[membername]) and type(member) == "string") ) then
|
if ( not allIsLiteral[membername] ) and ( type(member) == "function" or ((not stringIsLiteral[membername]) and type(member) == "string") ) then
|
||||||
--We have a function to call
|
--We have a function to call
|
||||||
@ -225,13 +197,13 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
|
|||||||
local handler
|
local handler
|
||||||
local group = options
|
local group = options
|
||||||
handler = group.handler or handler
|
handler = group.handler or handler
|
||||||
|
|
||||||
for i = 1, #path do
|
for i = 1, #path do
|
||||||
group = GetSubOption(group, path[i])
|
group = GetSubOption(group, path[i])
|
||||||
info[i] = path[i]
|
info[i] = path[i]
|
||||||
handler = group.handler or handler
|
handler = group.handler or handler
|
||||||
end
|
end
|
||||||
|
|
||||||
info.options = options
|
info.options = options
|
||||||
info.appName = appName
|
info.appName = appName
|
||||||
info[0] = appName
|
info[0] = appName
|
||||||
@ -241,8 +213,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
|
|||||||
info.type = option.type
|
info.type = option.type
|
||||||
info.uiType = "dialog"
|
info.uiType = "dialog"
|
||||||
info.uiName = MAJOR
|
info.uiName = MAJOR
|
||||||
|
|
||||||
local a, b, c ,d
|
local a, b, c ,d
|
||||||
--using 4 returns for the get of a color type, increase if a type needs more
|
--using 4 returns for the get of a color type, increase if a type needs more
|
||||||
if type(member) == "function" then
|
if type(member) == "function" then
|
||||||
--Call the function
|
--Call the function
|
||||||
@ -259,8 +231,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
|
|||||||
return a,b,c,d
|
return a,b,c,d
|
||||||
else
|
else
|
||||||
--The value isnt a function to call, return it
|
--The value isnt a function to call, return it
|
||||||
return member
|
return member
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[calls an options function that could be inherited, method name or function ref
|
--[[calls an options function that could be inherited, method name or function ref
|
||||||
@ -325,7 +297,7 @@ local function compareOptions(a,b)
|
|||||||
return NameA:upper() < NameB:upper()
|
return NameA:upper() < NameB:upper()
|
||||||
end
|
end
|
||||||
if OrderA < 0 then
|
if OrderA < 0 then
|
||||||
if OrderB > 0 then
|
if OrderB >= 0 then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -344,7 +316,7 @@ end
|
|||||||
local function BuildSortedOptionsTable(group, keySort, opts, options, path, appName)
|
local function BuildSortedOptionsTable(group, keySort, opts, options, path, appName)
|
||||||
tempOrders = new()
|
tempOrders = new()
|
||||||
tempNames = new()
|
tempNames = new()
|
||||||
|
|
||||||
if group.plugins then
|
if group.plugins then
|
||||||
for plugin, t in pairs(group.plugins) do
|
for plugin, t in pairs(group.plugins) do
|
||||||
for k, v in pairs(t) do
|
for k, v in pairs(t) do
|
||||||
@ -360,7 +332,7 @@ local function BuildSortedOptionsTable(group, keySort, opts, options, path, appN
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for k, v in pairs(group.args) do
|
for k, v in pairs(group.args) do
|
||||||
if not opts[k] then
|
if not opts[k] then
|
||||||
tinsert(keySort, k)
|
tinsert(keySort, k)
|
||||||
@ -391,7 +363,7 @@ local function DelTree(tree)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function CleanUserData(widget, event)
|
local function CleanUserData(widget, event)
|
||||||
|
|
||||||
local user = widget:GetUserDataTable()
|
local user = widget:GetUserDataTable()
|
||||||
|
|
||||||
if user.path then
|
if user.path then
|
||||||
@ -431,7 +403,7 @@ end
|
|||||||
-- - Gets a status table for the given appname and options path.
|
-- - Gets a status table for the given appname and options path.
|
||||||
-- @param appName The application name as given to `:RegisterOptionsTable()`
|
-- @param appName The application name as given to `:RegisterOptionsTable()`
|
||||||
-- @param path The path to the options (a table with all group keys)
|
-- @param path The path to the options (a table with all group keys)
|
||||||
-- @return
|
-- @return
|
||||||
function AceConfigDialog:GetStatusTable(appName, path)
|
function AceConfigDialog:GetStatusTable(appName, path)
|
||||||
local status = self.Status
|
local status = self.Status
|
||||||
|
|
||||||
@ -465,7 +437,7 @@ end
|
|||||||
function AceConfigDialog:SelectGroup(appName, ...)
|
function AceConfigDialog:SelectGroup(appName, ...)
|
||||||
local path = new()
|
local path = new()
|
||||||
|
|
||||||
|
|
||||||
local app = reg:GetOptionsTable(appName)
|
local app = reg:GetOptionsTable(appName)
|
||||||
if not app then
|
if not app then
|
||||||
error(("%s isn't registed with AceConfigRegistry, unable to open config"):format(appName), 2)
|
error(("%s isn't registed with AceConfigRegistry, unable to open config"):format(appName), 2)
|
||||||
@ -477,9 +449,9 @@ function AceConfigDialog:SelectGroup(appName, ...)
|
|||||||
status.groups = {}
|
status.groups = {}
|
||||||
end
|
end
|
||||||
status = status.groups
|
status = status.groups
|
||||||
local treevalue
|
local treevalue
|
||||||
local treestatus
|
local treestatus
|
||||||
|
|
||||||
for n = 1, select("#",...) do
|
for n = 1, select("#",...) do
|
||||||
local key = select(n, ...)
|
local key = select(n, ...)
|
||||||
|
|
||||||
@ -506,12 +478,12 @@ function AceConfigDialog:SelectGroup(appName, ...)
|
|||||||
--the selected group will be overwritten if a child is the final target but still needs to be open
|
--the selected group will be overwritten if a child is the final target but still needs to be open
|
||||||
treestatus.selected = treevalue
|
treestatus.selected = treevalue
|
||||||
treestatus.groups[treevalue] = true
|
treestatus.groups[treevalue] = true
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--move to the next group in the path
|
--move to the next group in the path
|
||||||
group = GetSubOption(group, key)
|
group = GetSubOption(group, key)
|
||||||
if not group then
|
if not group then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
tinsert(path, key)
|
tinsert(path, key)
|
||||||
@ -521,10 +493,10 @@ function AceConfigDialog:SelectGroup(appName, ...)
|
|||||||
end
|
end
|
||||||
status = status.groups
|
status = status.groups
|
||||||
end
|
end
|
||||||
|
|
||||||
del(path)
|
del(path)
|
||||||
reg:NotifyChange(appName)
|
reg:NotifyChange(appName)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function OptionOnMouseOver(widget, event)
|
local function OptionOnMouseOver(widget, event)
|
||||||
--show a tooltip/set the status bar to the desc text
|
--show a tooltip/set the status bar to the desc text
|
||||||
@ -533,32 +505,33 @@ local function OptionOnMouseOver(widget, event)
|
|||||||
local options = user.options
|
local options = user.options
|
||||||
local path = user.path
|
local path = user.path
|
||||||
local appName = user.appName
|
local appName = user.appName
|
||||||
|
local tooltip = AceConfigDialog.tooltip
|
||||||
|
|
||||||
GameTooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT")
|
tooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT")
|
||||||
local name = GetOptionsMemberValue("name", opt, options, path, appName)
|
local name = GetOptionsMemberValue("name", opt, options, path, appName)
|
||||||
local desc = GetOptionsMemberValue("desc", opt, options, path, appName)
|
local desc = GetOptionsMemberValue("desc", opt, options, path, appName)
|
||||||
local usage = GetOptionsMemberValue("usage", opt, options, path, appName)
|
local usage = GetOptionsMemberValue("usage", opt, options, path, appName)
|
||||||
local descStyle = opt.descStyle
|
local descStyle = opt.descStyle
|
||||||
|
|
||||||
if descStyle and descStyle ~= "tooltip" then return end
|
if descStyle and descStyle ~= "tooltip" then return end
|
||||||
|
|
||||||
GameTooltip:SetText(name, 1, .82, 0, true)
|
tooltip:SetText(name, 1, .82, 0, true)
|
||||||
|
|
||||||
if opt.type == "multiselect" then
|
if opt.type == "multiselect" then
|
||||||
GameTooltip:AddLine(user.text, 0.5, 0.5, 0.8, true)
|
tooltip:AddLine(user.text, 0.5, 0.5, 0.8, true)
|
||||||
end
|
end
|
||||||
if type(desc) == "string" then
|
if type(desc) == "string" then
|
||||||
GameTooltip:AddLine(desc, 1, 1, 1, true)
|
tooltip:AddLine(desc, 1, 1, 1, true)
|
||||||
end
|
end
|
||||||
if type(usage) == "string" then
|
if type(usage) == "string" then
|
||||||
GameTooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, true)
|
tooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
GameTooltip:Show()
|
tooltip:Show()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function OptionOnMouseLeave(widget, event)
|
local function OptionOnMouseLeave(widget, event)
|
||||||
GameTooltip:Hide()
|
AceConfigDialog.tooltip:Hide()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function GetFuncName(option)
|
local function GetFuncName(option)
|
||||||
@ -569,71 +542,127 @@ local function GetFuncName(option)
|
|||||||
return "set"
|
return "set"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local function confirmPopup(appName, rootframe, basepath, info, message, func, ...)
|
do
|
||||||
if not StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] then
|
local frame = AceConfigDialog.popup
|
||||||
StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] = {}
|
if not frame or oldminor < 81 then
|
||||||
end
|
frame = CreateFrame("Frame", nil, UIParent)
|
||||||
local t = StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"]
|
AceConfigDialog.popup = frame
|
||||||
for k in pairs(t) do
|
frame:Hide()
|
||||||
t[k] = nil
|
frame:SetPoint("CENTER", UIParent, "CENTER")
|
||||||
end
|
frame:SetSize(320, 72)
|
||||||
t.text = message
|
frame:EnableMouse(true) -- Do not allow click-through on the frame
|
||||||
t.button1 = ACCEPT
|
frame:SetFrameStrata("TOOLTIP")
|
||||||
t.button2 = CANCEL
|
frame:SetFrameLevel(100) -- Lots of room to draw under it
|
||||||
t.preferredIndex = STATICPOPUP_NUMDIALOGS
|
frame:SetScript("OnKeyDown", function(self, key)
|
||||||
local dialog, oldstrata
|
if key == "ESCAPE" then
|
||||||
t.OnAccept = function()
|
self:SetPropagateKeyboardInput(false)
|
||||||
safecall(func, unpack(t))
|
if self.cancel:IsShown() then
|
||||||
if dialog and oldstrata then
|
self.cancel:Click()
|
||||||
dialog:SetFrameStrata(oldstrata)
|
else -- Showing a validation error
|
||||||
end
|
self:Hide()
|
||||||
AceConfigDialog:Open(appName, rootframe, unpack(basepath or emptyTbl))
|
end
|
||||||
del(info)
|
else
|
||||||
end
|
self:SetPropagateKeyboardInput(true)
|
||||||
t.OnCancel = function()
|
end
|
||||||
if dialog and oldstrata then
|
end)
|
||||||
dialog:SetFrameStrata(oldstrata)
|
|
||||||
end
|
|
||||||
AceConfigDialog:Open(appName, rootframe, unpack(basepath or emptyTbl))
|
|
||||||
del(info)
|
|
||||||
end
|
|
||||||
for i = 1, select("#", ...) do
|
|
||||||
t[i] = select(i, ...) or false
|
|
||||||
end
|
|
||||||
t.timeout = 0
|
|
||||||
t.whileDead = 1
|
|
||||||
t.hideOnEscape = 1
|
|
||||||
|
|
||||||
dialog = StaticPopup_Show("ACECONFIGDIALOG30_CONFIRM_DIALOG")
|
if not frame.SetFixedFrameStrata then -- API capability check (classic check)
|
||||||
if dialog then
|
frame:SetBackdrop({
|
||||||
oldstrata = dialog:GetFrameStrata()
|
bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]],
|
||||||
dialog:SetFrameStrata("TOOLTIP")
|
edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]],
|
||||||
|
tile = true,
|
||||||
|
tileSize = 32,
|
||||||
|
edgeSize = 32,
|
||||||
|
insets = { left = 11, right = 11, top = 11, bottom = 11 },
|
||||||
|
})
|
||||||
|
else
|
||||||
|
local border = CreateFrame("Frame", nil, frame, "DialogBorderOpaqueTemplate")
|
||||||
|
border:SetAllPoints(frame)
|
||||||
|
frame:SetFixedFrameStrata(true)
|
||||||
|
frame:SetFixedFrameLevel(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
local text = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
|
||||||
|
text:SetSize(290, 0)
|
||||||
|
text:SetPoint("TOP", 0, -16)
|
||||||
|
frame.text = text
|
||||||
|
|
||||||
|
local function newButton(text)
|
||||||
|
local button = CreateFrame("Button", nil, frame)
|
||||||
|
button:SetSize(128, 21)
|
||||||
|
button:SetNormalFontObject(GameFontNormal)
|
||||||
|
button:SetHighlightFontObject(GameFontHighlight)
|
||||||
|
button:SetNormalTexture(130763) -- "Interface\\Buttons\\UI-DialogBox-Button-Up"
|
||||||
|
button:GetNormalTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875)
|
||||||
|
button:SetPushedTexture(130761) -- "Interface\\Buttons\\UI-DialogBox-Button-Down"
|
||||||
|
button:GetPushedTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875)
|
||||||
|
button:SetHighlightTexture(130762) -- "Interface\\Buttons\\UI-DialogBox-Button-Highlight"
|
||||||
|
button:GetHighlightTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875)
|
||||||
|
button:SetText(text)
|
||||||
|
return button
|
||||||
|
end
|
||||||
|
|
||||||
|
local accept = newButton(ACCEPT)
|
||||||
|
accept:SetPoint("BOTTOMRIGHT", frame, "BOTTOM", -6, 16)
|
||||||
|
frame.accept = accept
|
||||||
|
|
||||||
|
local cancel = newButton(CANCEL)
|
||||||
|
cancel:SetPoint("LEFT", accept, "RIGHT", 13, 0)
|
||||||
|
frame.cancel = cancel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local function confirmPopup(appName, rootframe, basepath, info, message, func, ...)
|
||||||
|
local frame = AceConfigDialog.popup
|
||||||
|
frame:Show()
|
||||||
|
frame.text:SetText(message)
|
||||||
|
-- From StaticPopup.lua
|
||||||
|
-- local height = 32 + text:GetHeight() + 2;
|
||||||
|
-- height = height + 6 + accept:GetHeight()
|
||||||
|
-- We add 32 + 2 + 6 + 21 (button height) == 61
|
||||||
|
local height = 61 + frame.text:GetHeight()
|
||||||
|
frame:SetHeight(height)
|
||||||
|
|
||||||
|
frame.accept:ClearAllPoints()
|
||||||
|
frame.accept:SetPoint("BOTTOMRIGHT", frame, "BOTTOM", -6, 16)
|
||||||
|
frame.cancel:Show()
|
||||||
|
|
||||||
|
local t = {...}
|
||||||
|
local tCount = select("#", ...)
|
||||||
|
frame.accept:SetScript("OnClick", function(self)
|
||||||
|
safecall(func, unpack(t, 1, tCount)) -- Manually set count as unpack() stops on nil (bug with #table)
|
||||||
|
AceConfigDialog:Open(appName, rootframe, unpack(basepath or emptyTbl))
|
||||||
|
frame:Hide()
|
||||||
|
self:SetScript("OnClick", nil)
|
||||||
|
frame.cancel:SetScript("OnClick", nil)
|
||||||
|
del(info)
|
||||||
|
end)
|
||||||
|
frame.cancel:SetScript("OnClick", function(self)
|
||||||
|
AceConfigDialog:Open(appName, rootframe, unpack(basepath or emptyTbl))
|
||||||
|
frame:Hide()
|
||||||
|
self:SetScript("OnClick", nil)
|
||||||
|
frame.accept:SetScript("OnClick", nil)
|
||||||
|
del(info)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
local function validationErrorPopup(message)
|
local function validationErrorPopup(message)
|
||||||
if not StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] then
|
local frame = AceConfigDialog.popup
|
||||||
StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] = {}
|
frame:Show()
|
||||||
end
|
frame.text:SetText(message)
|
||||||
local t = StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"]
|
-- From StaticPopup.lua
|
||||||
t.text = message
|
-- local height = 32 + text:GetHeight() + 2;
|
||||||
t.button1 = OKAY
|
-- height = height + 6 + accept:GetHeight()
|
||||||
t.preferredIndex = STATICPOPUP_NUMDIALOGS
|
-- We add 32 + 2 + 6 + 21 (button height) == 61
|
||||||
local dialog, oldstrata
|
local height = 61 + frame.text:GetHeight()
|
||||||
t.OnAccept = function()
|
frame:SetHeight(height)
|
||||||
if dialog and oldstrata then
|
|
||||||
dialog:SetFrameStrata(oldstrata)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
t.timeout = 0
|
|
||||||
t.whileDead = 1
|
|
||||||
t.hideOnEscape = 1
|
|
||||||
|
|
||||||
dialog = StaticPopup_Show("ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG")
|
frame.accept:ClearAllPoints()
|
||||||
if dialog then
|
frame.accept:SetPoint("BOTTOM", frame, "BOTTOM", 0, 16)
|
||||||
oldstrata = dialog:GetFrameStrata()
|
frame.cancel:Hide()
|
||||||
dialog:SetFrameStrata("TOOLTIP")
|
|
||||||
end
|
frame.accept:SetScript("OnClick", function()
|
||||||
|
frame:Hide()
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function ActivateControl(widget, event, ...)
|
local function ActivateControl(widget, event, ...)
|
||||||
@ -704,7 +733,7 @@ local function ActivateControl(widget, event, ...)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local success
|
local success
|
||||||
if validated and option.type ~= "execute" then
|
if validated and option.type ~= "execute" then
|
||||||
if type(validate) == "string" then
|
if type(validate) == "string" then
|
||||||
@ -719,7 +748,7 @@ local function ActivateControl(widget, event, ...)
|
|||||||
if not success then validated = false end
|
if not success then validated = false end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local rootframe = user.rootframe
|
local rootframe = user.rootframe
|
||||||
if not validated or type(validated) == "string" then
|
if not validated or type(validated) == "string" then
|
||||||
if not validated then
|
if not validated then
|
||||||
@ -744,7 +773,7 @@ local function ActivateControl(widget, event, ...)
|
|||||||
del(info)
|
del(info)
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
|
|
||||||
local confirmText = option.confirmText
|
local confirmText = option.confirmText
|
||||||
--call confirm func/method
|
--call confirm func/method
|
||||||
if type(confirm) == "string" then
|
if type(confirm) == "string" then
|
||||||
@ -785,10 +814,10 @@ local function ActivateControl(widget, event, ...)
|
|||||||
confirmText = confirmText.." - "..desc
|
confirmText = confirmText.." - "..desc
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local iscustom = user.rootframe:GetUserData("iscustom")
|
local iscustom = user.rootframe:GetUserData("iscustom")
|
||||||
local rootframe
|
local rootframe
|
||||||
|
|
||||||
if iscustom then
|
if iscustom then
|
||||||
rootframe = user.rootframe
|
rootframe = user.rootframe
|
||||||
end
|
end
|
||||||
@ -825,7 +854,7 @@ local function ActivateControl(widget, event, ...)
|
|||||||
--full refresh of the frame, some controls dont cause this on all events
|
--full refresh of the frame, some controls dont cause this on all events
|
||||||
if option.type == "color" then
|
if option.type == "color" then
|
||||||
if event == "OnValueConfirmed" then
|
if event == "OnValueConfirmed" then
|
||||||
|
|
||||||
if iscustom then
|
if iscustom then
|
||||||
AceConfigDialog:Open(user.appName, user.rootframe, unpack(basepath))
|
AceConfigDialog:Open(user.appName, user.rootframe, unpack(basepath))
|
||||||
else
|
else
|
||||||
@ -886,7 +915,7 @@ end
|
|||||||
|
|
||||||
local function MultiControlOnClosed(widget, event, ...)
|
local function MultiControlOnClosed(widget, event, ...)
|
||||||
local user = widget:GetUserDataTable()
|
local user = widget:GetUserDataTable()
|
||||||
if user.valuechanged then
|
if user.valuechanged and not widget:IsReleasing() then
|
||||||
local iscustom = user.rootframe:GetUserData("iscustom")
|
local iscustom = user.rootframe:GetUserData("iscustom")
|
||||||
local basepath = user.rootframe:GetUserData("basepath") or emptyTbl
|
local basepath = user.rootframe:GetUserData("basepath") or emptyTbl
|
||||||
if iscustom then
|
if iscustom then
|
||||||
@ -1064,6 +1093,23 @@ local function InjectInfo(control, options, option, path, rootframe, appName)
|
|||||||
control:SetCallback("OnEnter", OptionOnMouseOver)
|
control:SetCallback("OnEnter", OptionOnMouseOver)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function CreateControl(userControlType, fallbackControlType)
|
||||||
|
local control
|
||||||
|
if userControlType then
|
||||||
|
control = gui:Create(userControlType)
|
||||||
|
if not control then
|
||||||
|
geterrorhandler()(("Invalid Custom Control Type - %s"):format(tostring(userControlType)))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not control then
|
||||||
|
control = gui:Create(fallbackControlType)
|
||||||
|
end
|
||||||
|
return control
|
||||||
|
end
|
||||||
|
|
||||||
|
local function sortTblAsStrings(x,y)
|
||||||
|
return tostring(x) < tostring(y) -- Support numbers as keys
|
||||||
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
options - root of the options table being fed
|
options - root of the options table being fed
|
||||||
@ -1095,7 +1141,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
else
|
else
|
||||||
GroupContainer = gui:Create("SimpleGroup")
|
GroupContainer = gui:Create("SimpleGroup")
|
||||||
end
|
end
|
||||||
|
|
||||||
GroupContainer.width = "fill"
|
GroupContainer.width = "fill"
|
||||||
GroupContainer:SetLayout("flow")
|
GroupContainer:SetLayout("flow")
|
||||||
container:AddChild(GroupContainer)
|
container:AddChild(GroupContainer)
|
||||||
@ -1104,16 +1150,17 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
else
|
else
|
||||||
--Control to feed
|
--Control to feed
|
||||||
local control
|
local control
|
||||||
|
|
||||||
local name = GetOptionsMemberValue("name", v, options, path, appName)
|
local name = GetOptionsMemberValue("name", v, options, path, appName)
|
||||||
|
|
||||||
if v.type == "execute" then
|
if v.type == "execute" then
|
||||||
|
|
||||||
local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
|
local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
|
||||||
local image, width, height = GetOptionsMemberValue("image",v, options, path, appName)
|
local image, width, height = GetOptionsMemberValue("image",v, options, path, appName)
|
||||||
|
|
||||||
if type(image) == "string" or type(image) == "number" then
|
local iconControl = type(image) == "string" or type(image) == "number"
|
||||||
control = gui:Create("Icon")
|
control = CreateControl(v.dialogControl or v.control, iconControl and "Icon" or "Button")
|
||||||
|
if iconControl then
|
||||||
if not width then
|
if not width then
|
||||||
width = GetOptionsMemberValue("imageWidth",v, options, path, appName)
|
width = GetOptionsMemberValue("imageWidth",v, options, path, appName)
|
||||||
end
|
end
|
||||||
@ -1134,19 +1181,13 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
control:SetImageSize(width, height)
|
control:SetImageSize(width, height)
|
||||||
control:SetLabel(name)
|
control:SetLabel(name)
|
||||||
else
|
else
|
||||||
control = gui:Create("Button")
|
|
||||||
control:SetText(name)
|
control:SetText(name)
|
||||||
end
|
end
|
||||||
control:SetCallback("OnClick",ActivateControl)
|
control:SetCallback("OnClick",ActivateControl)
|
||||||
|
|
||||||
elseif v.type == "input" then
|
elseif v.type == "input" then
|
||||||
local controlType = v.dialogControl or v.control or (v.multiline and "MultiLineEditBox") or "EditBox"
|
control = CreateControl(v.dialogControl or v.control, v.multiline and "MultiLineEditBox" or "EditBox")
|
||||||
control = gui:Create(controlType)
|
|
||||||
if not control then
|
|
||||||
geterrorhandler()(("Invalid Custom Control Type - %s"):format(tostring(controlType)))
|
|
||||||
control = gui:Create(v.multiline and "MultiLineEditBox" or "EditBox")
|
|
||||||
end
|
|
||||||
|
|
||||||
if v.multiline and control.SetNumLines then
|
if v.multiline and control.SetNumLines then
|
||||||
control:SetNumLines(tonumber(v.multiline) or 4)
|
control:SetNumLines(tonumber(v.multiline) or 4)
|
||||||
end
|
end
|
||||||
@ -1159,21 +1200,21 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
control:SetText(text)
|
control:SetText(text)
|
||||||
|
|
||||||
elseif v.type == "toggle" then
|
elseif v.type == "toggle" then
|
||||||
control = gui:Create("CheckBox")
|
control = CreateControl(v.dialogControl or v.control, "CheckBox")
|
||||||
control:SetLabel(name)
|
control:SetLabel(name)
|
||||||
control:SetTriState(v.tristate)
|
control:SetTriState(v.tristate)
|
||||||
local value = GetOptionsMemberValue("get",v, options, path, appName)
|
local value = GetOptionsMemberValue("get",v, options, path, appName)
|
||||||
control:SetValue(value)
|
control:SetValue(value)
|
||||||
control:SetCallback("OnValueChanged",ActivateControl)
|
control:SetCallback("OnValueChanged",ActivateControl)
|
||||||
|
|
||||||
if v.descStyle == "inline" then
|
if v.descStyle == "inline" then
|
||||||
local desc = GetOptionsMemberValue("desc", v, options, path, appName)
|
local desc = GetOptionsMemberValue("desc", v, options, path, appName)
|
||||||
control:SetDescription(desc)
|
control:SetDescription(desc)
|
||||||
end
|
end
|
||||||
|
|
||||||
local image = GetOptionsMemberValue("image", v, options, path, appName)
|
local image = GetOptionsMemberValue("image", v, options, path, appName)
|
||||||
local imageCoords = GetOptionsMemberValue("imageCoords", v, options, path, appName)
|
local imageCoords = GetOptionsMemberValue("imageCoords", v, options, path, appName)
|
||||||
|
|
||||||
if type(image) == "string" or type(image) == "number" then
|
if type(image) == "string" or type(image) == "number" then
|
||||||
if type(imageCoords) == "table" then
|
if type(imageCoords) == "table" then
|
||||||
control:SetImage(image, unpack(imageCoords))
|
control:SetImage(image, unpack(imageCoords))
|
||||||
@ -1182,7 +1223,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif v.type == "range" then
|
elseif v.type == "range" then
|
||||||
control = gui:Create("Slider")
|
control = CreateControl(v.dialogControl or v.control, "Slider")
|
||||||
control:SetLabel(name)
|
control:SetLabel(name)
|
||||||
control:SetSliderValues(v.softMin or v.min or 0, v.softMax or v.max or 100, v.bigStep or v.step or 0)
|
control:SetSliderValues(v.softMin or v.min or 0, v.softMax or v.max or 100, v.bigStep or v.step or 0)
|
||||||
control:SetIsPercent(v.isPercent)
|
control:SetIsPercent(v.isPercent)
|
||||||
@ -1196,6 +1237,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
|
|
||||||
elseif v.type == "select" then
|
elseif v.type == "select" then
|
||||||
local values = GetOptionsMemberValue("values", v, options, path, appName)
|
local values = GetOptionsMemberValue("values", v, options, path, appName)
|
||||||
|
local sorting = GetOptionsMemberValue("sorting", v, options, path, appName)
|
||||||
if v.style == "radio" then
|
if v.style == "radio" then
|
||||||
local disabled = CheckOptionDisabled(v, options, path, appName)
|
local disabled = CheckOptionDisabled(v, options, path, appName)
|
||||||
local width = GetOptionsMemberValue("width",v,options,path,appName)
|
local width = GetOptionsMemberValue("width",v,options,path,appName)
|
||||||
@ -1206,12 +1248,14 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
|
|
||||||
control:PauseLayout()
|
control:PauseLayout()
|
||||||
local optionValue = GetOptionsMemberValue("get",v, options, path, appName)
|
local optionValue = GetOptionsMemberValue("get",v, options, path, appName)
|
||||||
local t = {}
|
if not sorting then
|
||||||
for value, text in pairs(values) do
|
sorting = {}
|
||||||
t[#t+1]=value
|
for value, text in pairs(values) do
|
||||||
|
sorting[#sorting+1]=value
|
||||||
|
end
|
||||||
|
tsort(sorting, sortTblAsStrings)
|
||||||
end
|
end
|
||||||
tsort(t)
|
for k, value in ipairs(sorting) do
|
||||||
for k, value in ipairs(t) do
|
|
||||||
local text = values[value]
|
local text = values[value]
|
||||||
local radio = gui:Create("CheckBox")
|
local radio = gui:Create("CheckBox")
|
||||||
radio:SetLabel(text)
|
radio:SetLabel(text)
|
||||||
@ -1238,19 +1282,14 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
control:ResumeLayout()
|
control:ResumeLayout()
|
||||||
control:DoLayout()
|
control:DoLayout()
|
||||||
else
|
else
|
||||||
local controlType = v.dialogControl or v.control or "Dropdown"
|
control = CreateControl(v.dialogControl or v.control, "Dropdown")
|
||||||
control = gui:Create(controlType)
|
|
||||||
if not control then
|
|
||||||
geterrorhandler()(("Invalid Custom Control Type - %s"):format(tostring(controlType)))
|
|
||||||
control = gui:Create("Dropdown")
|
|
||||||
end
|
|
||||||
local itemType = v.itemControl
|
local itemType = v.itemControl
|
||||||
if itemType and not gui:GetWidgetVersion(itemType) then
|
if itemType and not gui:GetWidgetVersion(itemType) then
|
||||||
geterrorhandler()(("Invalid Custom Item Type - %s"):format(tostring(itemType)))
|
geterrorhandler()(("Invalid Custom Item Type - %s"):format(tostring(itemType)))
|
||||||
itemType = nil
|
itemType = nil
|
||||||
end
|
end
|
||||||
control:SetLabel(name)
|
control:SetLabel(name)
|
||||||
control:SetList(values, nil, itemType)
|
control:SetList(values, sorting, itemType)
|
||||||
local value = GetOptionsMemberValue("get",v, options, path, appName)
|
local value = GetOptionsMemberValue("get",v, options, path, appName)
|
||||||
if not values[value] then
|
if not values[value] then
|
||||||
value = nil
|
value = nil
|
||||||
@ -1262,9 +1301,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
elseif v.type == "multiselect" then
|
elseif v.type == "multiselect" then
|
||||||
local values = GetOptionsMemberValue("values", v, options, path, appName)
|
local values = GetOptionsMemberValue("values", v, options, path, appName)
|
||||||
local disabled = CheckOptionDisabled(v, options, path, appName)
|
local disabled = CheckOptionDisabled(v, options, path, appName)
|
||||||
|
|
||||||
local controlType = v.dialogControl or v.control
|
|
||||||
|
|
||||||
local valuesort = new()
|
local valuesort = new()
|
||||||
if values then
|
if values then
|
||||||
for value, text in pairs(values) do
|
for value, text in pairs(values) do
|
||||||
@ -1272,7 +1309,8 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
tsort(valuesort)
|
tsort(valuesort)
|
||||||
|
|
||||||
|
local controlType = v.dialogControl or v.control
|
||||||
if controlType then
|
if controlType then
|
||||||
control = gui:Create(controlType)
|
control = gui:Create(controlType)
|
||||||
if not control then
|
if not control then
|
||||||
@ -1340,13 +1378,13 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
control:ResumeLayout()
|
control:ResumeLayout()
|
||||||
control:DoLayout()
|
control:DoLayout()
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
del(valuesort)
|
del(valuesort)
|
||||||
|
|
||||||
elseif v.type == "color" then
|
elseif v.type == "color" then
|
||||||
control = gui:Create("ColorPicker")
|
control = CreateControl(v.dialogControl or v.control, "ColorPicker")
|
||||||
control:SetLabel(name)
|
control:SetLabel(name)
|
||||||
control:SetHasAlpha(GetOptionsMemberValue("hasAlpha",v, options, path, appName))
|
control:SetHasAlpha(GetOptionsMemberValue("hasAlpha",v, options, path, appName))
|
||||||
control:SetColor(GetOptionsMemberValue("get",v, options, path, appName))
|
control:SetColor(GetOptionsMemberValue("get",v, options, path, appName))
|
||||||
@ -1354,20 +1392,20 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
control:SetCallback("OnValueConfirmed",ActivateControl)
|
control:SetCallback("OnValueConfirmed",ActivateControl)
|
||||||
|
|
||||||
elseif v.type == "keybinding" then
|
elseif v.type == "keybinding" then
|
||||||
control = gui:Create("Keybinding")
|
control = CreateControl(v.dialogControl or v.control, "Keybinding")
|
||||||
control:SetLabel(name)
|
control:SetLabel(name)
|
||||||
control:SetKey(GetOptionsMemberValue("get",v, options, path, appName))
|
control:SetKey(GetOptionsMemberValue("get",v, options, path, appName))
|
||||||
control:SetCallback("OnKeyChanged",ActivateControl)
|
control:SetCallback("OnKeyChanged",ActivateControl)
|
||||||
|
|
||||||
elseif v.type == "header" then
|
elseif v.type == "header" then
|
||||||
control = gui:Create("Heading")
|
control = CreateControl(v.dialogControl or v.control, "Heading")
|
||||||
control:SetText(name)
|
control:SetText(name)
|
||||||
control.width = "fill"
|
control.width = "fill"
|
||||||
|
|
||||||
elseif v.type == "description" then
|
elseif v.type == "description" then
|
||||||
control = gui:Create("Label")
|
control = CreateControl(v.dialogControl or v.control, "Label")
|
||||||
control:SetText(name)
|
control:SetText(name)
|
||||||
|
|
||||||
local fontSize = GetOptionsMemberValue("fontSize",v, options, path, appName)
|
local fontSize = GetOptionsMemberValue("fontSize",v, options, path, appName)
|
||||||
if fontSize == "medium" then
|
if fontSize == "medium" then
|
||||||
control:SetFontObject(GameFontHighlight)
|
control:SetFontObject(GameFontHighlight)
|
||||||
@ -1376,10 +1414,10 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
else -- small or invalid
|
else -- small or invalid
|
||||||
control:SetFontObject(GameFontHighlightSmall)
|
control:SetFontObject(GameFontHighlightSmall)
|
||||||
end
|
end
|
||||||
|
|
||||||
local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
|
local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
|
||||||
local image, width, height = GetOptionsMemberValue("image",v, options, path, appName)
|
local image, width, height = GetOptionsMemberValue("image",v, options, path, appName)
|
||||||
|
|
||||||
if type(image) == "string" or type(image) == "number" then
|
if type(image) == "string" or type(image) == "number" then
|
||||||
if not width then
|
if not width then
|
||||||
width = GetOptionsMemberValue("imageWidth",v, options, path, appName)
|
width = GetOptionsMemberValue("imageWidth",v, options, path, appName)
|
||||||
@ -1428,7 +1466,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
|
|||||||
InjectInfo(control, options, v, path, rootframe, appName)
|
InjectInfo(control, options, v, path, rootframe, appName)
|
||||||
container:AddChild(control)
|
container:AddChild(control)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
tremove(path)
|
tremove(path)
|
||||||
@ -1453,7 +1491,8 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button)
|
|||||||
local option = user.option
|
local option = user.option
|
||||||
local path = user.path
|
local path = user.path
|
||||||
local appName = user.appName
|
local appName = user.appName
|
||||||
|
local tooltip = AceConfigDialog.tooltip
|
||||||
|
|
||||||
local feedpath = new()
|
local feedpath = new()
|
||||||
for i = 1, #path do
|
for i = 1, #path do
|
||||||
feedpath[i] = path[i]
|
feedpath[i] = path[i]
|
||||||
@ -1468,49 +1507,50 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button)
|
|||||||
|
|
||||||
local name = GetOptionsMemberValue("name", group, options, feedpath, appName)
|
local name = GetOptionsMemberValue("name", group, options, feedpath, appName)
|
||||||
local desc = GetOptionsMemberValue("desc", group, options, feedpath, appName)
|
local desc = GetOptionsMemberValue("desc", group, options, feedpath, appName)
|
||||||
|
|
||||||
GameTooltip:SetOwner(button, "ANCHOR_NONE")
|
tooltip:SetOwner(button, "ANCHOR_NONE")
|
||||||
|
tooltip:ClearAllPoints()
|
||||||
if widget.type == "TabGroup" then
|
if widget.type == "TabGroup" then
|
||||||
GameTooltip:SetPoint("BOTTOM",button,"TOP")
|
tooltip:SetPoint("BOTTOM",button,"TOP")
|
||||||
else
|
else
|
||||||
GameTooltip:SetPoint("LEFT",button,"RIGHT")
|
tooltip:SetPoint("LEFT",button,"RIGHT")
|
||||||
end
|
end
|
||||||
|
|
||||||
GameTooltip:SetText(name, 1, .82, 0, true)
|
tooltip:SetText(name, 1, .82, 0, true)
|
||||||
|
|
||||||
if type(desc) == "string" then
|
if type(desc) == "string" then
|
||||||
GameTooltip:AddLine(desc, 1, 1, 1, true)
|
tooltip:AddLine(desc, 1, 1, 1, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
GameTooltip:Show()
|
tooltip:Show()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function TreeOnButtonLeave(widget, event, value, button)
|
local function TreeOnButtonLeave(widget, event, value, button)
|
||||||
GameTooltip:Hide()
|
AceConfigDialog.tooltip:Hide()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function GroupExists(appName, options, path, uniquevalue)
|
local function GroupExists(appName, options, path, uniquevalue)
|
||||||
if not uniquevalue then return false end
|
if not uniquevalue then return false end
|
||||||
|
|
||||||
local feedpath = new()
|
local feedpath = new()
|
||||||
local temppath = new()
|
local temppath = new()
|
||||||
for i = 1, #path do
|
for i = 1, #path do
|
||||||
feedpath[i] = path[i]
|
feedpath[i] = path[i]
|
||||||
end
|
end
|
||||||
|
|
||||||
BuildPath(feedpath, ("\001"):split(uniquevalue))
|
BuildPath(feedpath, ("\001"):split(uniquevalue))
|
||||||
|
|
||||||
local group = options
|
local group = options
|
||||||
for i = 1, #feedpath do
|
for i = 1, #feedpath do
|
||||||
local v = feedpath[i]
|
local v = feedpath[i]
|
||||||
temppath[i] = v
|
temppath[i] = v
|
||||||
group = GetSubOption(group, v)
|
group = GetSubOption(group, v)
|
||||||
|
|
||||||
if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then
|
if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then
|
||||||
del(feedpath)
|
del(feedpath)
|
||||||
del(temppath)
|
del(temppath)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
del(feedpath)
|
del(feedpath)
|
||||||
@ -1533,10 +1573,6 @@ local function GroupSelected(widget, event, uniquevalue)
|
|||||||
end
|
end
|
||||||
|
|
||||||
BuildPath(feedpath, ("\001"):split(uniquevalue))
|
BuildPath(feedpath, ("\001"):split(uniquevalue))
|
||||||
local group = options
|
|
||||||
for i = 1, #feedpath do
|
|
||||||
group = GetSubOption(group, feedpath[i])
|
|
||||||
end
|
|
||||||
widget:ReleaseChildren()
|
widget:ReleaseChildren()
|
||||||
AceConfigDialog:FeedGroup(user.appName,options,widget,rootframe,feedpath)
|
AceConfigDialog:FeedGroup(user.appName,options,widget,rootframe,feedpath)
|
||||||
|
|
||||||
@ -1633,7 +1669,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
|
|||||||
tab:SetCallback("OnGroupSelected", GroupSelected)
|
tab:SetCallback("OnGroupSelected", GroupSelected)
|
||||||
tab:SetCallback("OnTabEnter", TreeOnButtonEnter)
|
tab:SetCallback("OnTabEnter", TreeOnButtonEnter)
|
||||||
tab:SetCallback("OnTabLeave", TreeOnButtonLeave)
|
tab:SetCallback("OnTabLeave", TreeOnButtonLeave)
|
||||||
|
|
||||||
local status = AceConfigDialog:GetStatusTable(appName, path)
|
local status = AceConfigDialog:GetStatusTable(appName, path)
|
||||||
if not status.groups then
|
if not status.groups then
|
||||||
status.groups = {}
|
status.groups = {}
|
||||||
@ -1653,7 +1689,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
|
|||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
container:AddChild(tab)
|
container:AddChild(tab)
|
||||||
|
|
||||||
elseif grouptype == "select" then
|
elseif grouptype == "select" then
|
||||||
@ -1676,7 +1712,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
|
|||||||
if firstgroup then
|
if firstgroup then
|
||||||
select:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup)
|
select:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup)
|
||||||
end
|
end
|
||||||
|
|
||||||
select.width = "fill"
|
select.width = "fill"
|
||||||
select.height = "fill"
|
select.height = "fill"
|
||||||
|
|
||||||
@ -1688,14 +1724,14 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
|
|||||||
local tree = gui:Create("TreeGroup")
|
local tree = gui:Create("TreeGroup")
|
||||||
InjectInfo(tree, options, group, path, rootframe, appName)
|
InjectInfo(tree, options, group, path, rootframe, appName)
|
||||||
tree:EnableButtonTooltips(false)
|
tree:EnableButtonTooltips(false)
|
||||||
|
|
||||||
tree.width = "fill"
|
tree.width = "fill"
|
||||||
tree.height = "fill"
|
tree.height = "fill"
|
||||||
|
|
||||||
tree:SetCallback("OnGroupSelected", GroupSelected)
|
tree:SetCallback("OnGroupSelected", GroupSelected)
|
||||||
tree:SetCallback("OnButtonEnter", TreeOnButtonEnter)
|
tree:SetCallback("OnButtonEnter", TreeOnButtonEnter)
|
||||||
tree:SetCallback("OnButtonLeave", TreeOnButtonLeave)
|
tree:SetCallback("OnButtonLeave", TreeOnButtonLeave)
|
||||||
|
|
||||||
local status = AceConfigDialog:GetStatusTable(appName, path)
|
local status = AceConfigDialog:GetStatusTable(appName, path)
|
||||||
if not status.groups then
|
if not status.groups then
|
||||||
status.groups = {}
|
status.groups = {}
|
||||||
@ -1736,7 +1772,7 @@ local function RefreshOnUpdate(this)
|
|||||||
end
|
end
|
||||||
this.closing[appName] = nil
|
this.closing[appName] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if this.closeAll then
|
if this.closeAll then
|
||||||
for k, v in pairs(AceConfigDialog.OpenFrames) do
|
for k, v in pairs(AceConfigDialog.OpenFrames) do
|
||||||
if not this.closeAllOverride[k] then
|
if not this.closeAllOverride[k] then
|
||||||
@ -1746,7 +1782,7 @@ local function RefreshOnUpdate(this)
|
|||||||
this.closeAll = nil
|
this.closeAll = nil
|
||||||
wipe(this.closeAllOverride)
|
wipe(this.closeAllOverride)
|
||||||
end
|
end
|
||||||
|
|
||||||
for appName in pairs(this.apps) do
|
for appName in pairs(this.apps) do
|
||||||
if AceConfigDialog.OpenFrames[appName] then
|
if AceConfigDialog.OpenFrames[appName] then
|
||||||
local user = AceConfigDialog.OpenFrames[appName]:GetUserDataTable()
|
local user = AceConfigDialog.OpenFrames[appName]:GetUserDataTable()
|
||||||
@ -1831,10 +1867,10 @@ function AceConfigDialog:Open(appName, container, ...)
|
|||||||
local options = app("dialog", MAJOR)
|
local options = app("dialog", MAJOR)
|
||||||
|
|
||||||
local f
|
local f
|
||||||
|
|
||||||
local path = new()
|
local path = new()
|
||||||
local name = GetOptionsMemberValue("name", options, options, path, appName)
|
local name = GetOptionsMemberValue("name", options, options, path, appName)
|
||||||
|
|
||||||
--If an optional path is specified add it to the path table before feeding the options
|
--If an optional path is specified add it to the path table before feeding the options
|
||||||
--as container is optional as well it may contain the first element of the path
|
--as container is optional as well it may contain the first element of the path
|
||||||
if type(container) == "string" then
|
if type(container) == "string" then
|
||||||
@ -1844,7 +1880,7 @@ function AceConfigDialog:Open(appName, container, ...)
|
|||||||
for n = 1, select("#",...) do
|
for n = 1, select("#",...) do
|
||||||
tinsert(path, (select(n, ...)))
|
tinsert(path, (select(n, ...)))
|
||||||
end
|
end
|
||||||
|
|
||||||
local option = options
|
local option = options
|
||||||
if type(container) == "table" and container.type == "BlizOptionsGroup" and #path > 0 then
|
if type(container) == "table" and container.type == "BlizOptionsGroup" and #path > 0 then
|
||||||
for i = 1, #path do
|
for i = 1, #path do
|
||||||
@ -1852,7 +1888,7 @@ function AceConfigDialog:Open(appName, container, ...)
|
|||||||
end
|
end
|
||||||
name = format("%s - %s", name, GetOptionsMemberValue("name", option, options, path, appName))
|
name = format("%s - %s", name, GetOptionsMemberValue("name", option, options, path, appName))
|
||||||
end
|
end
|
||||||
|
|
||||||
--if a container is given feed into that
|
--if a container is given feed into that
|
||||||
if container then
|
if container then
|
||||||
f = container
|
f = container
|
||||||
@ -1946,19 +1982,19 @@ end
|
|||||||
-- @param name A descriptive name to display in the options tree (defaults to appName)
|
-- @param name A descriptive name to display in the options tree (defaults to appName)
|
||||||
-- @param parent The parent to use in the interface options tree.
|
-- @param parent The parent to use in the interface options tree.
|
||||||
-- @param ... The path in the options table to feed into the interface options panel.
|
-- @param ... The path in the options table to feed into the interface options panel.
|
||||||
-- @return The reference to the frame registered into the Interface Options.
|
-- @return The reference to the frame registered into the Interface Options.
|
||||||
function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...)
|
function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...)
|
||||||
local BlizOptions = AceConfigDialog.BlizOptions
|
local BlizOptions = AceConfigDialog.BlizOptions
|
||||||
|
|
||||||
local key = appName
|
local key = appName
|
||||||
for n = 1, select("#", ...) do
|
for n = 1, select("#", ...) do
|
||||||
key = key.."\001"..select(n, ...)
|
key = key.."\001"..select(n, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not BlizOptions[appName] then
|
if not BlizOptions[appName] then
|
||||||
BlizOptions[appName] = {}
|
BlizOptions[appName] = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
if not BlizOptions[appName][key] then
|
if not BlizOptions[appName][key] then
|
||||||
local group = gui:Create("BlizOptionsGroup")
|
local group = gui:Create("BlizOptionsGroup")
|
||||||
BlizOptions[appName][key] = group
|
BlizOptions[appName][key] = group
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
-- * Valid **uiTypes**: "cmd", "dropdown", "dialog". This is verified by the library at call time. \\
|
-- * Valid **uiTypes**: "cmd", "dropdown", "dialog". This is verified by the library at call time. \\
|
||||||
-- * The **uiName** field is expected to contain the full name of the calling addon, including version, e.g. "FooBar-1.0". This is verified by the library at call time.\\
|
-- * The **uiName** field is expected to contain the full name of the calling addon, including version, e.g. "FooBar-1.0". This is verified by the library at call time.\\
|
||||||
-- * The **appName** field is the options table name as given at registration time \\
|
-- * The **appName** field is the options table name as given at registration time \\
|
||||||
--
|
--
|
||||||
-- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName".
|
-- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName".
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceConfigRegistry-3.0
|
-- @name AceConfigRegistry-3.0
|
||||||
-- @release $Id: AceConfigRegistry-3.0.lua 1169 2018-02-27 16:18:28Z nevcairiel $
|
-- @release $Id: AceConfigRegistry-3.0.lua 1207 2019-06-23 12:08:33Z nevcairiel $
|
||||||
local CallbackHandler = LibStub("CallbackHandler-1.0")
|
local CallbackHandler = LibStub("CallbackHandler-1.0")
|
||||||
|
|
||||||
local MAJOR, MINOR = "AceConfigRegistry-3.0", 18
|
local MAJOR, MINOR = "AceConfigRegistry-3.0", 20
|
||||||
local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR)
|
local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
if not AceConfigRegistry then return end
|
if not AceConfigRegistry then return end
|
||||||
@ -33,7 +33,7 @@ local error, assert = error, assert
|
|||||||
|
|
||||||
|
|
||||||
AceConfigRegistry.validated = {
|
AceConfigRegistry.validated = {
|
||||||
-- list of options table names ran through :ValidateOptionsTable automatically.
|
-- list of options table names ran through :ValidateOptionsTable automatically.
|
||||||
-- CLEARED ON PURPOSE, since newer versions may have newer validators
|
-- CLEARED ON PURPOSE, since newer versions may have newer validators
|
||||||
cmd = {},
|
cmd = {},
|
||||||
dropdown = {},
|
dropdown = {},
|
||||||
@ -59,7 +59,6 @@ local optstring={["nil"]=true,["string"]=true, _="string"}
|
|||||||
local optstringfunc={["nil"]=true,["string"]=true,["function"]=true, _="string or funcref"}
|
local optstringfunc={["nil"]=true,["string"]=true,["function"]=true, _="string or funcref"}
|
||||||
local optstringnumberfunc={["nil"]=true,["string"]=true,["number"]=true,["function"]=true, _="string, number or funcref"}
|
local optstringnumberfunc={["nil"]=true,["string"]=true,["number"]=true,["function"]=true, _="string, number or funcref"}
|
||||||
local optnumber={["nil"]=true,["number"]=true, _="number"}
|
local optnumber={["nil"]=true,["number"]=true, _="number"}
|
||||||
local optmethod={["nil"]=true,["string"]=true,["function"]=true, _="methodname or funcref"}
|
|
||||||
local optmethodfalse={["nil"]=true,["string"]=true,["function"]=true,["boolean"]={[false]=true}, _="methodname, funcref or false"}
|
local optmethodfalse={["nil"]=true,["string"]=true,["function"]=true,["boolean"]={[false]=true}, _="methodname, funcref or false"}
|
||||||
local optmethodnumber={["nil"]=true,["string"]=true,["function"]=true,["number"]=true, _="methodname, funcref or number"}
|
local optmethodnumber={["nil"]=true,["string"]=true,["function"]=true,["number"]=true, _="methodname, funcref or number"}
|
||||||
local optmethodtable={["nil"]=true,["string"]=true,["function"]=true,["table"]=true, _="methodname, funcref or table"}
|
local optmethodtable={["nil"]=true,["string"]=true,["function"]=true,["table"]=true, _="methodname, funcref or table"}
|
||||||
@ -95,13 +94,20 @@ local basekeys={
|
|||||||
}
|
}
|
||||||
|
|
||||||
local typedkeys={
|
local typedkeys={
|
||||||
header={},
|
header={
|
||||||
|
control=optstring,
|
||||||
|
dialogControl=optstring,
|
||||||
|
dropdownControl=optstring,
|
||||||
|
},
|
||||||
description={
|
description={
|
||||||
image=optstringnumberfunc,
|
image=optstringnumberfunc,
|
||||||
imageCoords=optmethodtable,
|
imageCoords=optmethodtable,
|
||||||
imageHeight=optnumber,
|
imageHeight=optnumber,
|
||||||
imageWidth=optnumber,
|
imageWidth=optnumber,
|
||||||
fontSize=optstringfunc,
|
fontSize=optstringfunc,
|
||||||
|
control=optstring,
|
||||||
|
dialogControl=optstring,
|
||||||
|
dropdownControl=optstring,
|
||||||
},
|
},
|
||||||
group={
|
group={
|
||||||
args=istable,
|
args=istable,
|
||||||
@ -118,6 +124,9 @@ local typedkeys={
|
|||||||
imageCoords=optmethodtable,
|
imageCoords=optmethodtable,
|
||||||
imageHeight=optnumber,
|
imageHeight=optnumber,
|
||||||
imageWidth=optnumber,
|
imageWidth=optnumber,
|
||||||
|
control=optstring,
|
||||||
|
dialogControl=optstring,
|
||||||
|
dropdownControl=optstring,
|
||||||
},
|
},
|
||||||
input={
|
input={
|
||||||
pattern=optstring,
|
pattern=optstring,
|
||||||
@ -131,6 +140,9 @@ local typedkeys={
|
|||||||
tristate=optbool,
|
tristate=optbool,
|
||||||
image=optstringnumberfunc,
|
image=optstringnumberfunc,
|
||||||
imageCoords=optmethodtable,
|
imageCoords=optmethodtable,
|
||||||
|
control=optstring,
|
||||||
|
dialogControl=optstring,
|
||||||
|
dropdownControl=optstring,
|
||||||
},
|
},
|
||||||
tristate={
|
tristate={
|
||||||
},
|
},
|
||||||
@ -142,12 +154,16 @@ local typedkeys={
|
|||||||
step=optnumber,
|
step=optnumber,
|
||||||
bigStep=optnumber,
|
bigStep=optnumber,
|
||||||
isPercent=optbool,
|
isPercent=optbool,
|
||||||
|
control=optstring,
|
||||||
|
dialogControl=optstring,
|
||||||
|
dropdownControl=optstring,
|
||||||
},
|
},
|
||||||
select={
|
select={
|
||||||
values=ismethodtable,
|
values=ismethodtable,
|
||||||
|
sorting=optmethodtable,
|
||||||
style={
|
style={
|
||||||
["nil"]=true,
|
["nil"]=true,
|
||||||
["string"]={dropdown=true,radio=true},
|
["string"]={dropdown=true,radio=true},
|
||||||
_="string: 'dropdown' or 'radio'"
|
_="string: 'dropdown' or 'radio'"
|
||||||
},
|
},
|
||||||
control=optstring,
|
control=optstring,
|
||||||
@ -165,9 +181,14 @@ local typedkeys={
|
|||||||
},
|
},
|
||||||
color={
|
color={
|
||||||
hasAlpha=optmethodbool,
|
hasAlpha=optmethodbool,
|
||||||
|
control=optstring,
|
||||||
|
dialogControl=optstring,
|
||||||
|
dropdownControl=optstring,
|
||||||
},
|
},
|
||||||
keybinding={
|
keybinding={
|
||||||
-- TODO
|
control=optstring,
|
||||||
|
dialogControl=optstring,
|
||||||
|
dropdownControl=optstring,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,13 +225,13 @@ local function validate(options,errlvl,...)
|
|||||||
if type(options.type)~="string" then
|
if type(options.type)~="string" then
|
||||||
err(".type: expected a string, got a "..type(options.type), errlvl,...)
|
err(".type: expected a string, got a "..type(options.type), errlvl,...)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- get type and 'typedkeys' member
|
-- get type and 'typedkeys' member
|
||||||
local tk = typedkeys[options.type]
|
local tk = typedkeys[options.type]
|
||||||
if not tk then
|
if not tk then
|
||||||
err(".type: unknown type '"..options.type.."'", errlvl,...)
|
err(".type: unknown type '"..options.type.."'", errlvl,...)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- make sure that all options[] are known parameters
|
-- make sure that all options[] are known parameters
|
||||||
for k,v in pairs(options) do
|
for k,v in pairs(options) do
|
||||||
if not (tk[k] or basekeys[k]) then
|
if not (tk[k] or basekeys[k]) then
|
||||||
@ -303,7 +324,7 @@ function AceConfigRegistry:RegisterOptionsTable(appName, options, skipValidation
|
|||||||
AceConfigRegistry:ValidateOptionsTable(options, appName, errlvl) -- upgradable
|
AceConfigRegistry:ValidateOptionsTable(options, appName, errlvl) -- upgradable
|
||||||
AceConfigRegistry.validated[uiType][appName] = true
|
AceConfigRegistry.validated[uiType][appName] = true
|
||||||
end
|
end
|
||||||
return options
|
return options
|
||||||
end
|
end
|
||||||
elseif type(options)=="function" then
|
elseif type(options)=="function" then
|
||||||
AceConfigRegistry.tables[appName] = function(uiType, uiName, errlvl)
|
AceConfigRegistry.tables[appName] = function(uiType, uiName, errlvl)
|
||||||
@ -341,7 +362,7 @@ function AceConfigRegistry:GetOptionsTable(appName, uiType, uiName)
|
|||||||
if not f then
|
if not f then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if uiType then
|
if uiType then
|
||||||
return f(uiType,uiName,1) -- get the table for us
|
return f(uiType,uiName,1) -- get the table for us
|
||||||
else
|
else
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||||
..\FrameXML\UI.xsd">
|
..\FrameXML\UI.xsd">
|
||||||
<Script file="AceConsole-3.0.lua"/>
|
<Script file="AceConsole-3.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
||||||
|
@ -40,15 +40,15 @@
|
|||||||
-- end
|
-- end
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceDB-3.0.lua
|
-- @name AceDB-3.0.lua
|
||||||
-- @release $Id: AceDB-3.0.lua 1142 2016-07-11 08:36:19Z nevcairiel $
|
-- @release $Id: AceDB-3.0.lua 1217 2019-07-11 03:06:18Z funkydude $
|
||||||
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 26
|
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 27
|
||||||
local AceDB, oldminor = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR)
|
local AceDB = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR)
|
||||||
|
|
||||||
if not AceDB then return end -- No upgrade needed
|
if not AceDB then return end -- No upgrade needed
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local type, pairs, next, error = type, pairs, next, error
|
local type, pairs, next, error = type, pairs, next, error
|
||||||
local setmetatable, getmetatable, rawset, rawget = setmetatable, getmetatable, rawset, rawget
|
local setmetatable, rawset, rawget = setmetatable, rawset, rawget
|
||||||
|
|
||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local _G = _G
|
local _G = _G
|
||||||
@ -397,7 +397,7 @@ AceDB.frame:SetScript("OnEvent", logoutHandler)
|
|||||||
-- @param defaults A table of defaults for this database
|
-- @param defaults A table of defaults for this database
|
||||||
function DBObjectLib:RegisterDefaults(defaults)
|
function DBObjectLib:RegisterDefaults(defaults)
|
||||||
if defaults and type(defaults) ~= "table" then
|
if defaults and type(defaults) ~= "table" then
|
||||||
error("Usage: AceDBObject:RegisterDefaults(defaults): 'defaults' - table or nil expected.", 2)
|
error(("Usage: AceDBObject:RegisterDefaults(defaults): 'defaults' - table or nil expected, got %q."):format(type(defaults)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
validateDefaults(defaults, self.keys)
|
validateDefaults(defaults, self.keys)
|
||||||
@ -429,7 +429,7 @@ end
|
|||||||
-- @param name The name of the profile to set as the current profile
|
-- @param name The name of the profile to set as the current profile
|
||||||
function DBObjectLib:SetProfile(name)
|
function DBObjectLib:SetProfile(name)
|
||||||
if type(name) ~= "string" then
|
if type(name) ~= "string" then
|
||||||
error("Usage: AceDBObject:SetProfile(name): 'name' - string expected.", 2)
|
error(("Usage: AceDBObject:SetProfile(name): 'name' - string expected, got %q."):format(type(name)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- changing to the same profile, dont do anything
|
-- changing to the same profile, dont do anything
|
||||||
@ -471,7 +471,7 @@ end
|
|||||||
-- @param tbl A table to store the profile names in (optional)
|
-- @param tbl A table to store the profile names in (optional)
|
||||||
function DBObjectLib:GetProfiles(tbl)
|
function DBObjectLib:GetProfiles(tbl)
|
||||||
if tbl and type(tbl) ~= "table" then
|
if tbl and type(tbl) ~= "table" then
|
||||||
error("Usage: AceDBObject:GetProfiles(tbl): 'tbl' - table or nil expected.", 2)
|
error(("Usage: AceDBObject:GetProfiles(tbl): 'tbl' - table or nil expected, got %q."):format(type(tbl)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Clear the container table
|
-- Clear the container table
|
||||||
@ -509,15 +509,15 @@ end
|
|||||||
-- @param silent If true, do not raise an error when the profile does not exist
|
-- @param silent If true, do not raise an error when the profile does not exist
|
||||||
function DBObjectLib:DeleteProfile(name, silent)
|
function DBObjectLib:DeleteProfile(name, silent)
|
||||||
if type(name) ~= "string" then
|
if type(name) ~= "string" then
|
||||||
error("Usage: AceDBObject:DeleteProfile(name): 'name' - string expected.", 2)
|
error(("Usage: AceDBObject:DeleteProfile(name): 'name' - string expected, got %q."):format(type(name)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.keys.profile == name then
|
if self.keys.profile == name then
|
||||||
error("Cannot delete the active profile in an AceDBObject.", 2)
|
error(("Cannot delete the active profile (%q) in an AceDBObject."):format(name), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not rawget(self.profiles, name) and not silent then
|
if not rawget(self.profiles, name) and not silent then
|
||||||
error("Cannot delete profile '" .. name .. "'. It does not exist.", 2)
|
error(("Cannot delete profile %q as it does not exist."):format(name), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
self.profiles[name] = nil
|
self.profiles[name] = nil
|
||||||
@ -548,15 +548,15 @@ end
|
|||||||
-- @param silent If true, do not raise an error when the profile does not exist
|
-- @param silent If true, do not raise an error when the profile does not exist
|
||||||
function DBObjectLib:CopyProfile(name, silent)
|
function DBObjectLib:CopyProfile(name, silent)
|
||||||
if type(name) ~= "string" then
|
if type(name) ~= "string" then
|
||||||
error("Usage: AceDBObject:CopyProfile(name): 'name' - string expected.", 2)
|
error(("Usage: AceDBObject:CopyProfile(name): 'name' - string expected, got %q."):format(type(name)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if name == self.keys.profile then
|
if name == self.keys.profile then
|
||||||
error("Cannot have the same source and destination profiles.", 2)
|
error(("Cannot have the same source and destination profiles (%q)."):format(name), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not rawget(self.profiles, name) and not silent then
|
if not rawget(self.profiles, name) and not silent then
|
||||||
error("Cannot copy profile '" .. name .. "'. It does not exist.", 2)
|
error(("Cannot copy profile %q as it does not exist."):format(name), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Reset the profile before copying
|
-- Reset the profile before copying
|
||||||
@ -611,7 +611,7 @@ end
|
|||||||
-- @param defaultProfile The profile name to use as the default
|
-- @param defaultProfile The profile name to use as the default
|
||||||
function DBObjectLib:ResetDB(defaultProfile)
|
function DBObjectLib:ResetDB(defaultProfile)
|
||||||
if defaultProfile and type(defaultProfile) ~= "string" then
|
if defaultProfile and type(defaultProfile) ~= "string" then
|
||||||
error("Usage: AceDBObject:ResetDB(defaultProfile): 'defaultProfile' - string or nil expected.", 2)
|
error(("Usage: AceDBObject:ResetDB(defaultProfile): 'defaultProfile' - string or nil expected, got %q."):format(type(defaultProfile)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
local sv = self.sv
|
local sv = self.sv
|
||||||
@ -619,8 +619,6 @@ function DBObjectLib:ResetDB(defaultProfile)
|
|||||||
sv[k] = nil
|
sv[k] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local parent = self.parent
|
|
||||||
|
|
||||||
initdb(sv, self.defaults, defaultProfile, self)
|
initdb(sv, self.defaults, defaultProfile, self)
|
||||||
|
|
||||||
-- fix the child namespaces
|
-- fix the child namespaces
|
||||||
@ -647,13 +645,13 @@ end
|
|||||||
-- @param defaults A table of values to use as defaults
|
-- @param defaults A table of values to use as defaults
|
||||||
function DBObjectLib:RegisterNamespace(name, defaults)
|
function DBObjectLib:RegisterNamespace(name, defaults)
|
||||||
if type(name) ~= "string" then
|
if type(name) ~= "string" then
|
||||||
error("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - string expected.", 2)
|
error(("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - string expected, got %q."):format(type(name)), 2)
|
||||||
end
|
end
|
||||||
if defaults and type(defaults) ~= "table" then
|
if defaults and type(defaults) ~= "table" then
|
||||||
error("Usage: AceDBObject:RegisterNamespace(name, defaults): 'defaults' - table or nil expected.", 2)
|
error(("Usage: AceDBObject:RegisterNamespace(name, defaults): 'defaults' - table or nil expected, got %q."):format(type(defaults)), 2)
|
||||||
end
|
end
|
||||||
if self.children and self.children[name] then
|
if self.children and self.children[name] then
|
||||||
error ("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - a namespace with that name already exists.", 2)
|
error(("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - a namespace called %q already exists."):format(name), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
local sv = self.sv
|
local sv = self.sv
|
||||||
@ -677,10 +675,10 @@ end
|
|||||||
-- @return the namespace object if found
|
-- @return the namespace object if found
|
||||||
function DBObjectLib:GetNamespace(name, silent)
|
function DBObjectLib:GetNamespace(name, silent)
|
||||||
if type(name) ~= "string" then
|
if type(name) ~= "string" then
|
||||||
error("Usage: AceDBObject:GetNamespace(name): 'name' - string expected.", 2)
|
error(("Usage: AceDBObject:GetNamespace(name): 'name' - string expected, got %q."):format(type(name)), 2)
|
||||||
end
|
end
|
||||||
if not silent and not (self.children and self.children[name]) then
|
if not silent and not (self.children and self.children[name]) then
|
||||||
error ("Usage: AceDBObject:GetNamespace(name): 'name' - namespace does not exist.", 2)
|
error(("Usage: AceDBObject:GetNamespace(name): 'name' - namespace %q does not exist."):format(name), 2)
|
||||||
end
|
end
|
||||||
if not self.children then self.children = {} end
|
if not self.children then self.children = {} end
|
||||||
return self.children[name]
|
return self.children[name]
|
||||||
@ -719,15 +717,15 @@ function AceDB:New(tbl, defaults, defaultProfile)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if type(tbl) ~= "table" then
|
if type(tbl) ~= "table" then
|
||||||
error("Usage: AceDB:New(tbl, defaults, defaultProfile): 'tbl' - table expected.", 2)
|
error(("Usage: AceDB:New(tbl, defaults, defaultProfile): 'tbl' - table expected, got %q."):format(type(tbl)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if defaults and type(defaults) ~= "table" then
|
if defaults and type(defaults) ~= "table" then
|
||||||
error("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaults' - table expected.", 2)
|
error(("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaults' - table expected, got %q."):format(type(defaults)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
if defaultProfile and type(defaultProfile) ~= "string" and defaultProfile ~= true then
|
if defaultProfile and type(defaultProfile) ~= "string" and defaultProfile ~= true then
|
||||||
error("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaultProfile' - string or true expected.", 2)
|
error(("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaultProfile' - string or true expected, got %q."):format(type(defaultProfile)), 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
return initdb(tbl, defaults, defaultProfile)
|
return initdb(tbl, defaults, defaultProfile)
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
--- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles.
|
--- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceDBOptions-3.0
|
-- @name AceDBOptions-3.0
|
||||||
-- @release $Id: AceDBOptions-3.0.lua 1140 2016-07-03 07:53:29Z nevcairiel $
|
-- @release $Id: AceDBOptions-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
||||||
local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15
|
local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15
|
||||||
local AceDBOptions, oldminor = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR)
|
local AceDBOptions = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR)
|
||||||
|
|
||||||
if not AceDBOptions then return end -- No upgrade needed
|
if not AceDBOptions then return end -- No upgrade needed
|
||||||
|
|
||||||
@ -240,22 +240,22 @@ local tmpprofiles = {}
|
|||||||
-- @return Hashtable of all profiles with the internal name as keys and the display name as value.
|
-- @return Hashtable of all profiles with the internal name as keys and the display name as value.
|
||||||
local function getProfileList(db, common, nocurrent)
|
local function getProfileList(db, common, nocurrent)
|
||||||
local profiles = {}
|
local profiles = {}
|
||||||
|
|
||||||
-- copy existing profiles into the table
|
-- copy existing profiles into the table
|
||||||
local currentProfile = db:GetCurrentProfile()
|
local currentProfile = db:GetCurrentProfile()
|
||||||
for i,v in pairs(db:GetProfiles(tmpprofiles)) do
|
for i,v in pairs(db:GetProfiles(tmpprofiles)) do
|
||||||
if not (nocurrent and v == currentProfile) then
|
if not (nocurrent and v == currentProfile) then
|
||||||
profiles[v] = v
|
profiles[v] = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- add our default profiles to choose from ( or rename existing profiles)
|
-- add our default profiles to choose from ( or rename existing profiles)
|
||||||
for k,v in pairs(defaultProfiles) do
|
for k,v in pairs(defaultProfiles) do
|
||||||
if (common or profiles[k]) and not (nocurrent and k == currentProfile) then
|
if (common or profiles[k]) and not (nocurrent and k == currentProfile) then
|
||||||
profiles[k] = v
|
profiles[k] = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return profiles
|
return profiles
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -280,11 +280,11 @@ function OptionsHandlerPrototype:GetCurrentProfile()
|
|||||||
return self.db:GetCurrentProfile()
|
return self.db:GetCurrentProfile()
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
List all active profiles
|
List all active profiles
|
||||||
you can control the output with the .arg variable
|
you can control the output with the .arg variable
|
||||||
currently four modes are supported
|
currently four modes are supported
|
||||||
|
|
||||||
(empty) - return all available profiles
|
(empty) - return all available profiles
|
||||||
"nocurrent" - returns all available profiles except the currently active profile
|
"nocurrent" - returns all available profiles except the currently active profile
|
||||||
"common" - returns all avaialble profiles + some commonly used profiles ("char - realm", "realm", "class", "Default")
|
"common" - returns all avaialble profiles + some commonly used profiles ("char - realm", "realm", "class", "Default")
|
||||||
@ -302,7 +302,7 @@ function OptionsHandlerPrototype:ListProfiles(info)
|
|||||||
else
|
else
|
||||||
profiles = getProfileList(self.db)
|
profiles = getProfileList(self.db)
|
||||||
end
|
end
|
||||||
|
|
||||||
return profiles
|
return profiles
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -336,19 +336,19 @@ local function getOptionsHandler(db, noDefaultProfiles)
|
|||||||
if not defaultProfiles then
|
if not defaultProfiles then
|
||||||
generateDefaultProfiles(db)
|
generateDefaultProfiles(db)
|
||||||
end
|
end
|
||||||
|
|
||||||
local handler = AceDBOptions.handlers[db] or { db = db, noDefaultProfiles = noDefaultProfiles }
|
local handler = AceDBOptions.handlers[db] or { db = db, noDefaultProfiles = noDefaultProfiles }
|
||||||
|
|
||||||
for k,v in pairs(OptionsHandlerPrototype) do
|
for k,v in pairs(OptionsHandlerPrototype) do
|
||||||
handler[k] = v
|
handler[k] = v
|
||||||
end
|
end
|
||||||
|
|
||||||
AceDBOptions.handlers[db] = handler
|
AceDBOptions.handlers[db] = handler
|
||||||
return handler
|
return handler
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
the real options table
|
the real options table
|
||||||
]]
|
]]
|
||||||
local optionsTable = {
|
local optionsTable = {
|
||||||
desc = {
|
desc = {
|
||||||
@ -436,7 +436,7 @@ local optionsTable = {
|
|||||||
--- Get/Create a option table that you can use in your addon to control the profiles of AceDB-3.0.
|
--- Get/Create a option table that you can use in your addon to control the profiles of AceDB-3.0.
|
||||||
-- @param db The database object to create the options table for.
|
-- @param db The database object to create the options table for.
|
||||||
-- @return The options table to be used in AceConfig-3.0
|
-- @return The options table to be used in AceConfig-3.0
|
||||||
-- @usage
|
-- @usage
|
||||||
-- -- Assuming `options` is your top-level options table and `self.db` is your database:
|
-- -- Assuming `options` is your top-level options table and `self.db` is your database:
|
||||||
-- options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db)
|
-- options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db)
|
||||||
function AceDBOptions:GetOptionsTable(db, noDefaultProfiles)
|
function AceDBOptions:GetOptionsTable(db, noDefaultProfiles)
|
||||||
@ -445,7 +445,7 @@ function AceDBOptions:GetOptionsTable(db, noDefaultProfiles)
|
|||||||
name = L["profiles"],
|
name = L["profiles"],
|
||||||
desc = L["profiles_sub"],
|
desc = L["profiles_sub"],
|
||||||
}
|
}
|
||||||
|
|
||||||
tbl.handler = getOptionsHandler(db, noDefaultProfiles)
|
tbl.handler = getOptionsHandler(db, noDefaultProfiles)
|
||||||
tbl.args = optionsTable
|
tbl.args = optionsTable
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||||
..\FrameXML\UI.xsd">
|
..\FrameXML\UI.xsd">
|
||||||
<Script file="AceEvent-3.0.lua"/>
|
<Script file="AceEvent-3.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
||||||
|
@ -24,14 +24,14 @@
|
|||||||
-- f:AddChild(btn)
|
-- f:AddChild(btn)
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceGUI-3.0
|
-- @name AceGUI-3.0
|
||||||
-- @release $Id: AceGUI-3.0.lua 1228 2019-09-06 08:51:17Z nevcairiel $
|
-- @release $Id: AceGUI-3.0.lua 1247 2021-01-23 23:16:39Z funkehdude $
|
||||||
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 40
|
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 41
|
||||||
local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR)
|
local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR)
|
||||||
|
|
||||||
if not AceGUI then return end -- No upgrade needed
|
if not AceGUI then return end -- No upgrade needed
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local tinsert = table.insert
|
local tinsert, wipe = table.insert, table.wipe
|
||||||
local select, pairs, next, type = select, pairs, next, type
|
local select, pairs, next, type = select, pairs, next, type
|
||||||
local error, assert = error, assert
|
local error, assert = error, assert
|
||||||
local setmetatable, rawget = setmetatable, rawget
|
local setmetatable, rawget = setmetatable, rawget
|
||||||
@ -212,6 +212,22 @@ function AceGUI:Release(widget)
|
|||||||
delWidget(widget, widget.type)
|
delWidget(widget, widget.type)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Check if a widget is currently in the process of being released
|
||||||
|
-- This function check if this widget, or any of its parents (in which case it'll be released shortly as well)
|
||||||
|
-- are currently being released. This allows addon to handle any callbacks accordingly.
|
||||||
|
-- @param widget The widget to check
|
||||||
|
function AceGUI:IsReleasing(widget)
|
||||||
|
if widget.isQueuedForRelease then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if widget.parent and widget.parent.AceGUIWidgetVersion then
|
||||||
|
return AceGUI:IsReleasing(widget.parent)
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-----------
|
-----------
|
||||||
-- Focus --
|
-- Focus --
|
||||||
-----------
|
-----------
|
||||||
@ -338,6 +354,10 @@ do
|
|||||||
AceGUI:Release(self)
|
AceGUI:Release(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
WidgetBase.IsReleasing = function(self)
|
||||||
|
return AceGUI:IsReleasing(self)
|
||||||
|
end
|
||||||
|
|
||||||
WidgetBase.SetPoint = function(self, ...)
|
WidgetBase.SetPoint = function(self, ...)
|
||||||
return self.frame:SetPoint(...)
|
return self.frame:SetPoint(...)
|
||||||
end
|
end
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
BlizOptionsGroup Container
|
BlizOptionsGroup Container
|
||||||
Simple container widget for the integration of AceGUI into the Blizzard Interface Options
|
Simple container widget for the integration of AceGUI into the Blizzard Interface Options
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "BlizOptionsGroup", 21
|
local Type, Version = "BlizOptionsGroup", 22
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ local methods = {
|
|||||||
Constructor
|
Constructor
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local function Constructor()
|
local function Constructor()
|
||||||
local frame = CreateFrame("Frame")
|
local frame = CreateFrame("Frame", nil, InterfaceOptionsFramePanelContainer)
|
||||||
frame:Hide()
|
frame:Hide()
|
||||||
|
|
||||||
-- support functions for the Blizzard Interface Options
|
-- support functions for the Blizzard Interface Options
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
DropdownGroup Container
|
DropdownGroup Container
|
||||||
Container controlled by a dropdown on the top.
|
Container controlled by a dropdown on the top.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "DropdownGroup", 21
|
local Type, Version = "DropdownGroup", 22
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ local function Constructor()
|
|||||||
dropdown.frame:Show()
|
dropdown.frame:Show()
|
||||||
dropdown:SetLabel("")
|
dropdown:SetLabel("")
|
||||||
|
|
||||||
local border = CreateFrame("Frame", nil, frame)
|
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
border:SetPoint("TOPLEFT", 0, -26)
|
border:SetPoint("TOPLEFT", 0, -26)
|
||||||
border:SetPoint("BOTTOMRIGHT", 0, 3)
|
border:SetPoint("BOTTOMRIGHT", 0, 3)
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
--[[-----------------------------------------------------------------------------
|
--[[-----------------------------------------------------------------------------
|
||||||
Frame Container
|
Frame Container
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "Frame", 26
|
local Type, Version = "Frame", 28
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -83,6 +83,7 @@ local methods = {
|
|||||||
["OnAcquire"] = function(self)
|
["OnAcquire"] = function(self)
|
||||||
self.frame:SetParent(UIParent)
|
self.frame:SetParent(UIParent)
|
||||||
self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
||||||
|
self.frame:SetFrameLevel(100) -- Lots of room to draw under it
|
||||||
self:SetTitle()
|
self:SetTitle()
|
||||||
self:SetStatusText()
|
self:SetStatusText()
|
||||||
self:ApplyStatus()
|
self:ApplyStatus()
|
||||||
@ -179,13 +180,14 @@ local PaneBackdrop = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
local function Constructor()
|
local function Constructor()
|
||||||
local frame = CreateFrame("Frame", nil, UIParent)
|
local frame = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
frame:Hide()
|
frame:Hide()
|
||||||
|
|
||||||
frame:EnableMouse(true)
|
frame:EnableMouse(true)
|
||||||
frame:SetMovable(true)
|
frame:SetMovable(true)
|
||||||
frame:SetResizable(true)
|
frame:SetResizable(true)
|
||||||
frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
||||||
|
frame:SetFrameLevel(100) -- Lots of room to draw under it
|
||||||
frame:SetBackdrop(FrameBackdrop)
|
frame:SetBackdrop(FrameBackdrop)
|
||||||
frame:SetBackdropColor(0, 0, 0, 1)
|
frame:SetBackdropColor(0, 0, 0, 1)
|
||||||
frame:SetMinResize(400, 200)
|
frame:SetMinResize(400, 200)
|
||||||
@ -201,7 +203,7 @@ local function Constructor()
|
|||||||
closebutton:SetWidth(100)
|
closebutton:SetWidth(100)
|
||||||
closebutton:SetText(CLOSE)
|
closebutton:SetText(CLOSE)
|
||||||
|
|
||||||
local statusbg = CreateFrame("Button", nil, frame)
|
local statusbg = CreateFrame("Button", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
statusbg:SetPoint("BOTTOMLEFT", 15, 15)
|
statusbg:SetPoint("BOTTOMLEFT", 15, 15)
|
||||||
statusbg:SetPoint("BOTTOMRIGHT", -132, 15)
|
statusbg:SetPoint("BOTTOMRIGHT", -132, 15)
|
||||||
statusbg:SetHeight(24)
|
statusbg:SetHeight(24)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
InlineGroup Container
|
InlineGroup Container
|
||||||
Simple container widget that creates a visible "box" with an optional title.
|
Simple container widget that creates a visible "box" with an optional title.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "InlineGroup", 21
|
local Type, Version = "InlineGroup", 22
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ local function Constructor()
|
|||||||
titletext:SetJustifyH("LEFT")
|
titletext:SetJustifyH("LEFT")
|
||||||
titletext:SetHeight(18)
|
titletext:SetHeight(18)
|
||||||
|
|
||||||
local border = CreateFrame("Frame", nil, frame)
|
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
border:SetPoint("TOPLEFT", 0, -17)
|
border:SetPoint("TOPLEFT", 0, -17)
|
||||||
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
TabGroup Container
|
TabGroup Container
|
||||||
Container that uses tabs on top to switch between groups.
|
Container that uses tabs on top to switch between groups.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "TabGroup", 36
|
local Type, Version = "TabGroup", 37
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, wipe
|
local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, table.wipe
|
||||||
|
|
||||||
-- WoW APIs
|
-- WoW APIs
|
||||||
local PlaySound = PlaySound
|
local PlaySound = PlaySound
|
||||||
@ -316,7 +316,7 @@ local function Constructor()
|
|||||||
titletext:SetHeight(18)
|
titletext:SetHeight(18)
|
||||||
titletext:SetText("")
|
titletext:SetText("")
|
||||||
|
|
||||||
local border = CreateFrame("Frame", nil, frame)
|
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
border:SetPoint("TOPLEFT", 1, -27)
|
border:SetPoint("TOPLEFT", 1, -27)
|
||||||
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
border:SetPoint("BOTTOMRIGHT", -1, 3)
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -2,12 +2,10 @@
|
|||||||
TreeGroup Container
|
TreeGroup Container
|
||||||
Container that uses a tree control to switch between groups.
|
Container that uses a tree control to switch between groups.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "TreeGroup", 44
|
local Type, Version = "TreeGroup", 45
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
local WoW80 = select(4, GetBuildInfo()) >= 80000
|
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type
|
local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type
|
||||||
local math_min, math_max, floor = math.min, math.max, floor
|
local math_min, math_max, floor = math.min, math.max, floor
|
||||||
@ -422,8 +420,7 @@ local methods = {
|
|||||||
local maxlines = (floor(((self.treeframe:GetHeight()or 0) - 20 ) / 18))
|
local maxlines = (floor(((self.treeframe:GetHeight()or 0) - 20 ) / 18))
|
||||||
if maxlines <= 0 then return end
|
if maxlines <= 0 then return end
|
||||||
|
|
||||||
-- workaround for lag spikes on WoW 8.0
|
if self.frame:GetParent() == UIParent and not fromOnUpdate then
|
||||||
if WoW80 and self.frame:GetParent() == UIParent and not fromOnUpdate then
|
|
||||||
self.frame:SetScript("OnUpdate", FirstFrameUpdate)
|
self.frame:SetScript("OnUpdate", FirstFrameUpdate)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -632,7 +629,7 @@ local PaneBackdrop = {
|
|||||||
local DraggerBackdrop = {
|
local DraggerBackdrop = {
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
||||||
edgeFile = nil,
|
edgeFile = nil,
|
||||||
tile = true, tileSize = 16, edgeSize = 0,
|
tile = true, tileSize = 16, edgeSize = 1,
|
||||||
insets = { left = 3, right = 3, top = 7, bottom = 7 }
|
insets = { left = 3, right = 3, top = 7, bottom = 7 }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,7 +637,7 @@ local function Constructor()
|
|||||||
local num = AceGUI:GetNextWidgetNum(Type)
|
local num = AceGUI:GetNextWidgetNum(Type)
|
||||||
local frame = CreateFrame("Frame", nil, UIParent)
|
local frame = CreateFrame("Frame", nil, UIParent)
|
||||||
|
|
||||||
local treeframe = CreateFrame("Frame", nil, frame)
|
local treeframe = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
treeframe:SetPoint("TOPLEFT")
|
treeframe:SetPoint("TOPLEFT")
|
||||||
treeframe:SetPoint("BOTTOMLEFT")
|
treeframe:SetPoint("BOTTOMLEFT")
|
||||||
treeframe:SetWidth(DEFAULT_TREE_WIDTH)
|
treeframe:SetWidth(DEFAULT_TREE_WIDTH)
|
||||||
@ -655,7 +652,7 @@ local function Constructor()
|
|||||||
treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged)
|
treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged)
|
||||||
treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel)
|
treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel)
|
||||||
|
|
||||||
local dragger = CreateFrame("Frame", nil, treeframe)
|
local dragger = CreateFrame("Frame", nil, treeframe, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
dragger:SetWidth(8)
|
dragger:SetWidth(8)
|
||||||
dragger:SetPoint("TOP", treeframe, "TOPRIGHT")
|
dragger:SetPoint("TOP", treeframe, "TOPRIGHT")
|
||||||
dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT")
|
dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT")
|
||||||
@ -680,7 +677,7 @@ local function Constructor()
|
|||||||
scrollbg:SetAllPoints(scrollbar)
|
scrollbg:SetAllPoints(scrollbar)
|
||||||
scrollbg:SetColorTexture(0,0,0,0.4)
|
scrollbg:SetColorTexture(0,0,0,0.4)
|
||||||
|
|
||||||
local border = CreateFrame("Frame",nil,frame)
|
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT")
|
border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT")
|
||||||
border:SetPoint("BOTTOMRIGHT")
|
border:SetPoint("BOTTOMRIGHT")
|
||||||
border:SetBackdrop(PaneBackdrop)
|
border:SetBackdrop(PaneBackdrop)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--[[ $Id: AceGUIWidget-DropDown.lua 1209 2019-06-24 21:01:01Z nevcairiel $ ]]--
|
--[[ $Id: AceGUIWidget-DropDown.lua 1239 2020-09-20 10:22:02Z nevcairiel $ ]]--
|
||||||
local AceGUI = LibStub("AceGUI-3.0")
|
local AceGUI = LibStub("AceGUI-3.0")
|
||||||
|
|
||||||
-- Lua APIs
|
-- Lua APIs
|
||||||
@ -39,7 +39,7 @@ end
|
|||||||
|
|
||||||
do
|
do
|
||||||
local widgetType = "Dropdown-Pullout"
|
local widgetType = "Dropdown-Pullout"
|
||||||
local widgetVersion = 3
|
local widgetVersion = 5
|
||||||
|
|
||||||
--[[ Static data ]]--
|
--[[ Static data ]]--
|
||||||
|
|
||||||
@ -193,12 +193,7 @@ do
|
|||||||
|
|
||||||
local height = 8
|
local height = 8
|
||||||
for i, item in pairs(items) do
|
for i, item in pairs(items) do
|
||||||
if i == 1 then
|
item:SetPoint("TOP", itemFrame, "TOP", 0, -2 + (i - 1) * -16)
|
||||||
item:SetPoint("TOP", itemFrame, "TOP", 0, -2)
|
|
||||||
else
|
|
||||||
item:SetPoint("TOP", items[i-1].frame, "BOTTOM", 0, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
item:Show()
|
item:Show()
|
||||||
|
|
||||||
height = height + 16
|
height = height + 16
|
||||||
@ -258,7 +253,7 @@ do
|
|||||||
|
|
||||||
local function Constructor()
|
local function Constructor()
|
||||||
local count = AceGUI:GetNextWidgetNum(widgetType)
|
local count = AceGUI:GetNextWidgetNum(widgetType)
|
||||||
local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent)
|
local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
local self = {}
|
local self = {}
|
||||||
self.count = count
|
self.count = count
|
||||||
self.type = widgetType
|
self.type = widgetType
|
||||||
@ -309,7 +304,7 @@ do
|
|||||||
scrollFrame.obj = self
|
scrollFrame.obj = self
|
||||||
itemFrame.obj = self
|
itemFrame.obj = self
|
||||||
|
|
||||||
local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame)
|
local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
slider:SetOrientation("VERTICAL")
|
slider:SetOrientation("VERTICAL")
|
||||||
slider:SetHitRectInsets(0, 0, -10, 0)
|
slider:SetHitRectInsets(0, 0, -10, 0)
|
||||||
slider:SetBackdrop(sliderBackdrop)
|
slider:SetBackdrop(sliderBackdrop)
|
||||||
@ -356,7 +351,7 @@ end
|
|||||||
|
|
||||||
do
|
do
|
||||||
local widgetType = "Dropdown"
|
local widgetType = "Dropdown"
|
||||||
local widgetVersion = 34
|
local widgetVersion = 35
|
||||||
|
|
||||||
--[[ Static data ]]--
|
--[[ Static data ]]--
|
||||||
|
|
||||||
@ -465,6 +460,7 @@ do
|
|||||||
self:SetWidth(200)
|
self:SetWidth(200)
|
||||||
self:SetLabel()
|
self:SetLabel()
|
||||||
self:SetPulloutWidth(nil)
|
self:SetPulloutWidth(nil)
|
||||||
|
self.list = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
-- exported, AceGUI callback
|
-- exported, AceGUI callback
|
||||||
@ -535,9 +531,7 @@ do
|
|||||||
|
|
||||||
-- exported
|
-- exported
|
||||||
local function SetValue(self, value)
|
local function SetValue(self, value)
|
||||||
if self.list then
|
self:SetText(self.list[value] or "")
|
||||||
self:SetText(self.list[value] or "")
|
|
||||||
end
|
|
||||||
self.value = value
|
self.value = value
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -601,7 +595,7 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
local function SetList(self, list, order, itemType)
|
local function SetList(self, list, order, itemType)
|
||||||
self.list = list
|
self.list = list or {}
|
||||||
self.pullout:Clear()
|
self.pullout:Clear()
|
||||||
self.hasClose = nil
|
self.hasClose = nil
|
||||||
if not list then return end
|
if not list then return end
|
||||||
@ -629,10 +623,8 @@ do
|
|||||||
|
|
||||||
-- exported
|
-- exported
|
||||||
local function AddItem(self, value, text, itemType)
|
local function AddItem(self, value, text, itemType)
|
||||||
if self.list then
|
self.list[value] = text
|
||||||
self.list[value] = text
|
AddListItem(self, value, text, itemType)
|
||||||
AddListItem(self, value, text, itemType)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- exported
|
-- exported
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Keybinding Widget
|
Keybinding Widget
|
||||||
Set Keybindings in the Config UI.
|
Set Keybindings in the Config UI.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "Keybinding", 25
|
local Type, Version = "Keybinding", 26
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ local function Constructor()
|
|||||||
label:SetJustifyH("CENTER")
|
label:SetJustifyH("CENTER")
|
||||||
label:SetHeight(18)
|
label:SetHeight(18)
|
||||||
|
|
||||||
local msgframe = CreateFrame("Frame", nil, UIParent)
|
local msgframe = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
msgframe:SetHeight(30)
|
msgframe:SetHeight(30)
|
||||||
msgframe:SetBackdrop(ControlBackdrop)
|
msgframe:SetBackdrop(ControlBackdrop)
|
||||||
msgframe:SetBackdropColor(0,0,0)
|
msgframe:SetBackdropColor(0,0,0)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Label Widget
|
Label Widget
|
||||||
Displays text and optionally an icon.
|
Displays text and optionally an icon.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "Label", 26
|
local Type, Version = "Label", 27
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -130,6 +130,7 @@ local methods = {
|
|||||||
|
|
||||||
["SetFont"] = function(self, font, height, flags)
|
["SetFont"] = function(self, font, height, flags)
|
||||||
self.label:SetFont(font, height, flags)
|
self.label:SetFont(font, height, flags)
|
||||||
|
UpdateImageAnchor(self)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["SetFontObject"] = function(self, font)
|
["SetFontObject"] = function(self, font)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
local Type, Version = "MultiLineEditBox", 28
|
local Type, Version = "MultiLineEditBox", 29
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -297,7 +297,7 @@ local function Constructor()
|
|||||||
text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1)
|
text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1)
|
||||||
text:SetJustifyV("MIDDLE")
|
text:SetJustifyV("MIDDLE")
|
||||||
|
|
||||||
local scrollBG = CreateFrame("Frame", nil, frame)
|
local scrollBG = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
scrollBG:SetBackdrop(backdrop)
|
scrollBG:SetBackdrop(backdrop)
|
||||||
scrollBG:SetBackdropColor(0, 0, 0)
|
scrollBG:SetBackdropColor(0, 0, 0)
|
||||||
scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4)
|
scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Slider Widget
|
Slider Widget
|
||||||
Graphical Slider, like, for Range values.
|
Graphical Slider, like, for Range values.
|
||||||
-------------------------------------------------------------------------------]]
|
-------------------------------------------------------------------------------]]
|
||||||
local Type, Version = "Slider", 22
|
local Type, Version = "Slider", 23
|
||||||
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
||||||
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ local function Constructor()
|
|||||||
label:SetJustifyH("CENTER")
|
label:SetJustifyH("CENTER")
|
||||||
label:SetHeight(15)
|
label:SetHeight(15)
|
||||||
|
|
||||||
local slider = CreateFrame("Slider", nil, frame)
|
local slider = CreateFrame("Slider", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
slider:SetOrientation("HORIZONTAL")
|
slider:SetOrientation("HORIZONTAL")
|
||||||
slider:SetHeight(15)
|
slider:SetHeight(15)
|
||||||
slider:SetHitRectInsets(0, 0, -10, 0)
|
slider:SetHitRectInsets(0, 0, -10, 0)
|
||||||
@ -247,7 +247,7 @@ local function Constructor()
|
|||||||
local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
|
local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
|
||||||
hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3)
|
hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3)
|
||||||
|
|
||||||
local editbox = CreateFrame("EditBox", nil, frame)
|
local editbox = CreateFrame("EditBox", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil)
|
||||||
editbox:SetAutoFocus(false)
|
editbox:SetAutoFocus(false)
|
||||||
editbox:SetFontObject(GameFontHighlightSmall)
|
editbox:SetFontObject(GameFontHighlightSmall)
|
||||||
editbox:SetPoint("TOP", slider, "BOTTOM")
|
editbox:SetPoint("TOP", slider, "BOTTOM")
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
-- make into AceHook.
|
-- make into AceHook.
|
||||||
-- @class file
|
-- @class file
|
||||||
-- @name AceHook-3.0
|
-- @name AceHook-3.0
|
||||||
-- @release $Id: AceHook-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
|
-- @release $Id: AceHook-3.0.lua 1243 2020-10-18 00:00:19Z nevcairiel $
|
||||||
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 8
|
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 9
|
||||||
local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR)
|
local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR)
|
||||||
|
|
||||||
if not AceHook then return end -- No upgrade needed
|
if not AceHook then return end -- No upgrade needed
|
||||||
@ -478,10 +478,10 @@ function AceHook:UnhookAll()
|
|||||||
for key, value in pairs(registry[self]) do
|
for key, value in pairs(registry[self]) do
|
||||||
if type(key) == "table" then
|
if type(key) == "table" then
|
||||||
for method in pairs(value) do
|
for method in pairs(value) do
|
||||||
self:Unhook(key, method)
|
AceHook.Unhook(self, key, method)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
self:Unhook(key)
|
AceHook.Unhook(self, key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||||
..\FrameXML\UI.xsd">
|
..\FrameXML\UI.xsd">
|
||||||
<Script file="AceHook-3.0.lua"/>
|
<Script file="AceHook-3.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||||
..\FrameXML\UI.xsd">
|
..\FrameXML\UI.xsd">
|
||||||
<Script file="AceLocale-3.0.lua"/>
|
<Script file="AceLocale-3.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--[[ $Id: CallbackHandler-1.0.lua 22 2018-07-21 14:17:22Z nevcairiel $ ]]
|
--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]]
|
||||||
local MAJOR, MINOR = "CallbackHandler-1.0", 7
|
local MAJOR, MINOR = "CallbackHandler-1.0", 7
|
||||||
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
|
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||||
..\FrameXML\UI.xsd">
|
..\FrameXML\UI.xsd">
|
||||||
<Script file="CallbackHandler-1.0.lua"/>
|
<Script file="CallbackHandler-1.0.lua"/>
|
||||||
</Ui>
|
</Ui>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
--
|
--
|
||||||
|
|
||||||
local DBICON10 = "LibDBIcon-1.0"
|
local DBICON10 = "LibDBIcon-1.0"
|
||||||
local DBICON10_MINOR = 43 -- Bump on changes
|
local DBICON10_MINOR = 44 -- Bump on changes
|
||||||
if not LibStub then error(DBICON10 .. " requires LibStub.") end
|
if not LibStub then error(DBICON10 .. " requires LibStub.") end
|
||||||
local ldb = LibStub("LibDataBroker-1.1", true)
|
local ldb = LibStub("LibDataBroker-1.1", true)
|
||||||
if not ldb then error(DBICON10 .. " requires LibDataBroker-1.1.") end
|
if not ldb then error(DBICON10 .. " requires LibDataBroker-1.1.") end
|
||||||
@ -18,8 +18,8 @@ lib.callbackRegistered = lib.callbackRegistered or nil
|
|||||||
lib.callbacks = lib.callbacks or LibStub("CallbackHandler-1.0"):New(lib)
|
lib.callbacks = lib.callbacks or LibStub("CallbackHandler-1.0"):New(lib)
|
||||||
lib.notCreated = lib.notCreated or {}
|
lib.notCreated = lib.notCreated or {}
|
||||||
lib.radius = lib.radius or 5
|
lib.radius = lib.radius or 5
|
||||||
|
local next, Minimap, CreateFrame = next, Minimap, CreateFrame
|
||||||
lib.tooltip = lib.tooltip or CreateFrame("GameTooltip", "LibDBIconTooltip", UIParent, "GameTooltipTemplate")
|
lib.tooltip = lib.tooltip or CreateFrame("GameTooltip", "LibDBIconTooltip", UIParent, "GameTooltipTemplate")
|
||||||
local next, Minimap = next, Minimap
|
|
||||||
local isDraggingButton = false
|
local isDraggingButton = false
|
||||||
|
|
||||||
function lib:IconCallback(event, name, key, value)
|
function lib:IconCallback(event, name, key, value)
|
||||||
@ -218,8 +218,14 @@ local function createButton(name, object, db)
|
|||||||
button.dataObject = object
|
button.dataObject = object
|
||||||
button.db = db
|
button.db = db
|
||||||
button:SetFrameStrata("MEDIUM")
|
button:SetFrameStrata("MEDIUM")
|
||||||
button:SetSize(31, 31)
|
if button.SetFixedFrameStrata then -- Classic support
|
||||||
|
button:SetFixedFrameStrata(true)
|
||||||
|
end
|
||||||
button:SetFrameLevel(8)
|
button:SetFrameLevel(8)
|
||||||
|
if button.SetFixedFrameLevel then -- Classic support
|
||||||
|
button:SetFixedFrameLevel(true)
|
||||||
|
end
|
||||||
|
button:SetSize(31, 31)
|
||||||
button:RegisterForClicks("anyUp")
|
button:RegisterForClicks("anyUp")
|
||||||
button:RegisterForDrag("LeftButton")
|
button:RegisterForDrag("LeftButton")
|
||||||
button:SetHighlightTexture(136477) --"Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight"
|
button:SetHighlightTexture(136477) --"Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight"
|
||||||
|
@ -1,13 +1,22 @@
|
|||||||
|
-- $Id: LibStub.lua 76 2007-09-03 01:50:17Z mikk $
|
||||||
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
|
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
|
||||||
-- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
|
-- LibStub is hereby placed in the Public Domain
|
||||||
|
-- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
|
||||||
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
|
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
|
||||||
local LibStub = _G[LIBSTUB_MAJOR]
|
local LibStub = _G[LIBSTUB_MAJOR]
|
||||||
|
|
||||||
|
-- Check to see is this version of the stub is obsolete
|
||||||
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
||||||
LibStub = LibStub or {libs = {}, minors = {} }
|
LibStub = LibStub or {libs = {}, minors = {} }
|
||||||
_G[LIBSTUB_MAJOR] = LibStub
|
_G[LIBSTUB_MAJOR] = LibStub
|
||||||
LibStub.minor = LIBSTUB_MINOR
|
LibStub.minor = LIBSTUB_MINOR
|
||||||
|
|
||||||
|
-- LibStub:NewLibrary(major, minor)
|
||||||
|
-- major (string) - the major version of the library
|
||||||
|
-- minor (string or number ) - the minor version of the library
|
||||||
|
--
|
||||||
|
-- returns nil if a newer or same version of the lib is already present
|
||||||
|
-- returns empty library object or old library object if upgrade is needed
|
||||||
function LibStub:NewLibrary(major, minor)
|
function LibStub:NewLibrary(major, minor)
|
||||||
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
|
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
|
||||||
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
|
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
|
||||||
@ -18,6 +27,12 @@ if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
|||||||
return self.libs[major], oldminor
|
return self.libs[major], oldminor
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- LibStub:GetLibrary(major, [silent])
|
||||||
|
-- major (string) - the major version of the library
|
||||||
|
-- silent (boolean) - if true, library is optional, silently return nil if its not found
|
||||||
|
--
|
||||||
|
-- throws an error if the library can not be found (except silent is set)
|
||||||
|
-- returns the library object if found
|
||||||
function LibStub:GetLibrary(major, silent)
|
function LibStub:GetLibrary(major, silent)
|
||||||
if not self.libs[major] and not silent then
|
if not self.libs[major] and not silent then
|
||||||
error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
|
error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
|
||||||
@ -25,6 +40,12 @@ if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
|||||||
return self.libs[major], self.minors[major]
|
return self.libs[major], self.minors[major]
|
||||||
end
|
end
|
||||||
|
|
||||||
function LibStub:IterateLibraries() return pairs(self.libs) end
|
-- LibStub:IterateLibraries()
|
||||||
|
--
|
||||||
|
-- Returns an iterator for the currently registered libraries
|
||||||
|
function LibStub:IterateLibraries()
|
||||||
|
return pairs(self.libs)
|
||||||
|
end
|
||||||
|
|
||||||
setmetatable(LibStub, { __call = LibStub.GetLibrary })
|
setmetatable(LibStub, { __call = LibStub.GetLibrary })
|
||||||
end
|
end
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
## Interface: 20400
|
|
||||||
## Title: Lib: LibStub
|
|
||||||
## Notes: Universal Library Stub
|
|
||||||
## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel
|
|
||||||
## X-Website: http://jira.wowace.com/browse/LS
|
|
||||||
## X-Category: Library
|
|
||||||
## X-License: Public Domain
|
|
||||||
|
|
||||||
LibStub.lua
|
|
Loading…
x
Reference in New Issue
Block a user