diff --git a/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua b/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua index 66416e8..d5cbc45 100755 --- a/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua +++ b/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua @@ -1,13 +1,13 @@ --- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables. -- @class file -- @name AceConfigDialog-3.0 --- @release $Id: AceConfigDialog-3.0.lua 1169 2018-02-27 16:18:28Z nevcairiel $ +-- @release $Id: AceConfigDialog-3.0.lua 1197 2019-01-21 23:41:10Z nevcairiel $ local LibStub = LibStub local gui = LibStub("AceGUI-3.0") local reg = LibStub("AceConfigRegistry-3.0") -local MAJOR, MINOR = "AceConfigDialog-3.0", 66 +local MAJOR, MINOR = "AceConfigDialog-3.0", 69 local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) if not AceConfigDialog then return end @@ -21,11 +21,11 @@ AceConfigDialog.frame.closing = AceConfigDialog.frame.closing or {} AceConfigDialog.frame.closeAllOverride = AceConfigDialog.frame.closeAllOverride or {} -- Lua APIs -local tconcat, tinsert, tsort, tremove, tsort = table.concat, table.insert, table.sort, table.remove, table.sort +local tinsert, tsort, tremove = table.insert, table.sort, table.remove 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 rawset, tostring, tonumber = rawset, tostring, tonumber +local tostring, tonumber = tostring, tonumber 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 @@ -45,39 +45,10 @@ local function errorhandler(err) return geterrorhandler()(err) 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, ...) - return Dispatchers[select("#", ...)](func, ...) + if func then + return xpcall(func, errorhandler, ...) + end end local width_multiplier = 170 @@ -1064,6 +1035,19 @@ local function InjectInfo(control, options, option, path, rootframe, appName) control:SetCallback("OnEnter", OptionOnMouseOver) 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 --[[ options - root of the options table being fed @@ -1112,8 +1096,9 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) local image, width, height = GetOptionsMemberValue("image",v, options, path, appName) - if type(image) == "string" or type(image) == "number" then - control = gui:Create("Icon") + local iconControl = type(image) == "string" or type(image) == "number" + control = CreateControl(v.dialogControl or v.control, iconControl and "Icon" or "Button") + if iconControl then if not width then width = GetOptionsMemberValue("imageWidth",v, options, path, appName) end @@ -1134,18 +1119,12 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:SetImageSize(width, height) control:SetLabel(name) else - control = gui:Create("Button") control:SetText(name) end control:SetCallback("OnClick",ActivateControl) elseif v.type == "input" then - local controlType = v.dialogControl or v.control or (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 + control = CreateControl(v.dialogControl or v.control, v.multiline and "MultiLineEditBox" or "EditBox") if v.multiline and control.SetNumLines then control:SetNumLines(tonumber(v.multiline) or 4) @@ -1159,7 +1138,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:SetText(text) elseif v.type == "toggle" then - control = gui:Create("CheckBox") + control = CreateControl(v.dialogControl or v.control, "CheckBox") control:SetLabel(name) control:SetTriState(v.tristate) local value = GetOptionsMemberValue("get",v, options, path, appName) @@ -1182,7 +1161,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin end end elseif v.type == "range" then - control = gui:Create("Slider") + control = CreateControl(v.dialogControl or v.control, "Slider") 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:SetIsPercent(v.isPercent) @@ -1238,12 +1217,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:ResumeLayout() control:DoLayout() else - local controlType = v.dialogControl or v.control or "Dropdown" - control = gui:Create(controlType) - if not control then - geterrorhandler()(("Invalid Custom Control Type - %s"):format(tostring(controlType))) - control = gui:Create("Dropdown") - end + control = CreateControl(v.dialogControl or v.control, "Dropdown") local itemType = v.itemControl if itemType and not gui:GetWidgetVersion(itemType) then geterrorhandler()(("Invalid Custom Item Type - %s"):format(tostring(itemType))) @@ -1263,8 +1237,6 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin local values = GetOptionsMemberValue("values", v, options, path, appName) local disabled = CheckOptionDisabled(v, options, path, appName) - local controlType = v.dialogControl or v.control - local valuesort = new() if values then for value, text in pairs(values) do @@ -1273,6 +1245,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin end tsort(valuesort) + local controlType = v.dialogControl or v.control if controlType then control = gui:Create(controlType) if not control then @@ -1346,7 +1319,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin del(valuesort) elseif v.type == "color" then - control = gui:Create("ColorPicker") + control = CreateControl(v.dialogControl or v.control, "ColorPicker") control:SetLabel(name) control:SetHasAlpha(GetOptionsMemberValue("hasAlpha",v, options, path, appName)) control:SetColor(GetOptionsMemberValue("get",v, options, path, appName)) @@ -1354,18 +1327,18 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:SetCallback("OnValueConfirmed",ActivateControl) elseif v.type == "keybinding" then - control = gui:Create("Keybinding") + control = CreateControl(v.dialogControl or v.control, "Keybinding") control:SetLabel(name) control:SetKey(GetOptionsMemberValue("get",v, options, path, appName)) control:SetCallback("OnKeyChanged",ActivateControl) elseif v.type == "header" then - control = gui:Create("Heading") + control = CreateControl(v.dialogControl or v.control, "Heading") control:SetText(name) control.width = "fill" elseif v.type == "description" then - control = gui:Create("Label") + control = CreateControl(v.dialogControl or v.control, "Label") control:SetText(name) local fontSize = GetOptionsMemberValue("fontSize",v, options, path, appName) @@ -1533,10 +1506,6 @@ local function GroupSelected(widget, event, uniquevalue) end BuildPath(feedpath, ("\001"):split(uniquevalue)) - local group = options - for i = 1, #feedpath do - group = GetSubOption(group, feedpath[i]) - end widget:ReleaseChildren() AceConfigDialog:FeedGroup(user.appName,options,widget,rootframe,feedpath) diff --git a/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua b/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua index f8ac3f9..1e40811 100755 --- a/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua +++ b/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua @@ -8,7 +8,7 @@ -- :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 -- @name AceConfigRegistry-3.0 --- @release $Id: AceConfigRegistry-3.0.lua 1169 2018-02-27 16:18:28Z nevcairiel $ +-- @release $Id: AceConfigRegistry-3.0.lua 1193 2018-08-02 12:24:37Z funkydude $ local CallbackHandler = LibStub("CallbackHandler-1.0") local MAJOR, MINOR = "AceConfigRegistry-3.0", 18 @@ -59,7 +59,6 @@ local optstring={["nil"]=true,["string"]=true, _="string"} 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 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 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"} diff --git a/libs/AceDB-3.0/AceDB-3.0.lua b/libs/AceDB-3.0/AceDB-3.0.lua index b42b442..c41e9a4 100755 --- a/libs/AceDB-3.0/AceDB-3.0.lua +++ b/libs/AceDB-3.0/AceDB-3.0.lua @@ -40,15 +40,15 @@ -- end -- @class file -- @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 1193 2018-08-02 12:24:37Z funkydude $ local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 26 -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 -- Lua APIs 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 local _G = _G @@ -619,8 +619,6 @@ function DBObjectLib:ResetDB(defaultProfile) sv[k] = nil end - local parent = self.parent - initdb(sv, self.defaults, defaultProfile, self) -- fix the child namespaces diff --git a/libs/AceDBOptions-3.0/AceDBOptions-3.0.lua b/libs/AceDBOptions-3.0/AceDBOptions-3.0.lua index 5028fef..7477698 100755 --- a/libs/AceDBOptions-3.0/AceDBOptions-3.0.lua +++ b/libs/AceDBOptions-3.0/AceDBOptions-3.0.lua @@ -1,9 +1,9 @@ --- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles. -- @class file -- @name AceDBOptions-3.0 --- @release $Id: AceDBOptions-3.0.lua 1140 2016-07-03 07:53:29Z nevcairiel $ +-- @release $Id: AceDBOptions-3.0.lua 1193 2018-08-02 12:24:37Z funkydude $ 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 diff --git a/libs/AceGUI-3.0/AceGUI-3.0.lua b/libs/AceGUI-3.0/AceGUI-3.0.lua index 08904e4..a31a85a 100755 --- a/libs/AceGUI-3.0/AceGUI-3.0.lua +++ b/libs/AceGUI-3.0/AceGUI-3.0.lua @@ -24,17 +24,17 @@ -- f:AddChild(btn) -- @class file -- @name AceGUI-3.0 --- @release $Id: AceGUI-3.0.lua 1177 2018-06-25 12:12:48Z nevcairiel $ +-- @release $Id: AceGUI-3.0.lua 1193 2018-08-02 12:24:37Z funkydude $ local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 36 local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR) if not AceGUI then return end -- No upgrade needed -- Lua APIs -local tconcat, tremove, tinsert = table.concat, table.remove, table.insert +local tinsert = table.insert local select, pairs, next, type = select, pairs, next, type -local error, assert, loadstring = error, assert, loadstring -local setmetatable, rawget, rawset = setmetatable, rawget, rawset +local error, assert = error, assert +local setmetatable, rawget = setmetatable, rawget local math_max = math.max -- WoW APIs @@ -66,39 +66,10 @@ local function errorhandler(err) return geterrorhandler()(err) 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, ...) - return Dispatchers[select("#", ...)](func, ...) + if func then + return xpcall(func, errorhandler, ...) + end end -- Recycling functions @@ -690,14 +661,12 @@ AceGUI:RegisterLayout("Flow", --height of the current row local rowheight = 0 local rowoffset = 0 - local lastrowoffset local width = content.width or content:GetWidth() or 0 --control at the start of the row local rowstart local rowstartoffset - local lastrowstart local isfullheight local frameoffset diff --git a/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua b/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua index 80fd582..ec98f4b 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua @@ -219,7 +219,7 @@ local function Constructor() statustext:SetText("") local titlebg = frame:CreateTexture(nil, "OVERLAY") - titlebg:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") + titlebg:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header titlebg:SetTexCoord(0.31, 0.67, 0, 0.63) titlebg:SetPoint("TOP", 0, 12) titlebg:SetWidth(100) @@ -235,14 +235,14 @@ local function Constructor() titletext:SetPoint("TOP", titlebg, "TOP", 0, -14) local titlebg_l = frame:CreateTexture(nil, "OVERLAY") - titlebg_l:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") + titlebg_l:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header titlebg_l:SetTexCoord(0.21, 0.31, 0, 0.63) titlebg_l:SetPoint("RIGHT", titlebg, "LEFT") titlebg_l:SetWidth(30) titlebg_l:SetHeight(40) local titlebg_r = frame:CreateTexture(nil, "OVERLAY") - titlebg_r:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") + titlebg_r:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header titlebg_r:SetTexCoord(0.67, 0.77, 0, 0.63) titlebg_r:SetPoint("LEFT", titlebg, "RIGHT") titlebg_r:SetWidth(30) @@ -260,7 +260,7 @@ local function Constructor() line1:SetWidth(14) line1:SetHeight(14) line1:SetPoint("BOTTOMRIGHT", -8, 8) - line1:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + line1:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border local x = 0.1 * 14/17 line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) @@ -268,7 +268,7 @@ local function Constructor() line2:SetWidth(8) line2:SetHeight(8) line2:SetPoint("BOTTOMRIGHT", -8, 8) - line2:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border local x = 0.1 * 8/17 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) diff --git a/libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua b/libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua index 9afb54b..eb8e215 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua @@ -2,13 +2,13 @@ ScrollFrame Container Plain container that scrolls its content and doesn't grow in height. -------------------------------------------------------------------------------]] -local Type, Version = "ScrollFrame", 24 +local Type, Version = "ScrollFrame", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -- Lua APIs local pairs, assert, type = pairs, assert, type -local min, max, floor, abs = math.min, math.max, math.floor, math.abs +local min, max, floor = math.min, math.max, math.floor -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent @@ -53,7 +53,7 @@ local methods = { self.scrollframe:SetPoint("BOTTOMRIGHT") self.scrollbar:Hide() self.scrollBarShown = nil - self.content.height, self.content.width = nil, nil + self.content.height, self.content.width, self.content.original_width = nil, nil, nil end, ["SetScroll"] = function(self, value) @@ -94,7 +94,6 @@ local methods = { local status = self.status or self.localstatus local height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight() local offset = status.offset or 0 - local curvalue = self.scrollbar:GetValue() -- Give us a margin of error of 2 pixels to stop some conditions that i would blame on floating point inaccuracys -- No-one is going to miss 2 pixels at the bottom of the frame, anyhow! if viewheight < height + 2 then @@ -103,6 +102,9 @@ local methods = { self.scrollbar:Hide() self.scrollbar:SetValue(0) self.scrollframe:SetPoint("BOTTOMRIGHT") + if self.content.original_width then + self.content.width = self.content.original_width + end self:DoLayout() end else @@ -110,6 +112,9 @@ local methods = { self.scrollBarShown = true self.scrollbar:Show() self.scrollframe:SetPoint("BOTTOMRIGHT", -20, 0) + if self.content.original_width then + self.content.width = self.content.original_width - 20 + end self:DoLayout() end local value = (offset / (viewheight - height) * 1000) @@ -128,6 +133,11 @@ local methods = { ["LayoutFinished"] = function(self, width, height) self.content:SetHeight(height or 0 + 20) + + -- update the scrollframe + self:FixScroll() + + -- schedule another update when everything has "settled" self.scrollframe:SetScript("OnUpdate", FixScrollOnUpdate) end, @@ -141,7 +151,8 @@ local methods = { ["OnWidthSet"] = function(self, width) local content = self.content - content.width = width + content.width = width - (self.scrollBarShown and 20 or 0) + content.original_width = width end, ["OnHeightSet"] = function(self, height) diff --git a/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua b/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua index 95544c5..9129f9d 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua @@ -165,7 +165,6 @@ local methods = { ["BuildTabs"] = function(self) local hastitle = (self.titletext:GetText() and self.titletext:GetText() ~= "") - local status = self.status or self.localstatus local tablist = self.tablist local tabs = self.tabs diff --git a/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua b/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua index 236f633..ba916d0 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua @@ -59,7 +59,6 @@ end local function UpdateButton(button, treeline, selected, canExpand, isExpanded) local self = button.obj local toggle = button.toggle - local frame = self.frame local text = treeline.text or "" local icon = treeline.icon local iconCoords = treeline.iconCoords @@ -78,8 +77,6 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) button:UnlockHighlight() button.selected = false end - local normalTexture = button:GetNormalTexture() - local line = button.line button.level = level if ( level == 1 ) then button:SetNormalFontObject("GameFontNormal") @@ -114,11 +111,11 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) if canExpand then if not isExpanded then - toggle:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-UP") - toggle:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-DOWN") + toggle:SetNormalTexture(130838) -- Interface\\Buttons\\UI-PlusButton-UP + toggle:SetPushedTexture(130836) -- Interface\\Buttons\\UI-PlusButton-DOWN else - toggle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-UP") - toggle:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-DOWN") + toggle:SetNormalTexture(130821) -- Interface\\Buttons\\UI-MinusButton-UP + toggle:SetPushedTexture(130820) -- Interface\\Buttons\\UI-MinusButton-DOWN end toggle:Show() else @@ -201,7 +198,6 @@ end local function Button_OnDoubleClick(button) local self = button.obj - local status = self.status or self.localstatus local status = (self.status or self.localstatus).groups status[button.uniquevalue] = not status[button.uniquevalue] self:RefreshTree() @@ -376,7 +372,6 @@ local methods = { ["BuildLevel"] = function(self, tree, level, parent) local groups = (self.status or self.localstatus).groups - local hasChildren = self.hasChildren for i, v in ipairs(tree) do if v.children then diff --git a/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua b/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua index 6825420..9818e6d 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua @@ -190,67 +190,67 @@ do frame:SetToplevel(true) local titlebg = frame:CreateTexture(nil, "BACKGROUND") - titlebg:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Title-Background]]) + titlebg:SetTexture(251966) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Title-Background titlebg:SetPoint("TOPLEFT", 9, -6) titlebg:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -28, -24) local dialogbg = frame:CreateTexture(nil, "BACKGROUND") - dialogbg:SetTexture([[Interface\Tooltips\UI-Tooltip-Background]]) + dialogbg:SetTexture(137056) -- Interface\\Tooltips\\UI-Tooltip-Background dialogbg:SetPoint("TOPLEFT", 8, -24) dialogbg:SetPoint("BOTTOMRIGHT", -6, 8) dialogbg:SetVertexColor(0, 0, 0, .75) local topleft = frame:CreateTexture(nil, "BORDER") - topleft:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + topleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border topleft:SetWidth(64) topleft:SetHeight(64) topleft:SetPoint("TOPLEFT") topleft:SetTexCoord(0.501953125, 0.625, 0, 1) local topright = frame:CreateTexture(nil, "BORDER") - topright:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + topright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border topright:SetWidth(64) topright:SetHeight(64) topright:SetPoint("TOPRIGHT") topright:SetTexCoord(0.625, 0.75, 0, 1) local top = frame:CreateTexture(nil, "BORDER") - top:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + top:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border top:SetHeight(64) top:SetPoint("TOPLEFT", topleft, "TOPRIGHT") top:SetPoint("TOPRIGHT", topright, "TOPLEFT") top:SetTexCoord(0.25, 0.369140625, 0, 1) local bottomleft = frame:CreateTexture(nil, "BORDER") - bottomleft:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + bottomleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottomleft:SetWidth(64) bottomleft:SetHeight(64) bottomleft:SetPoint("BOTTOMLEFT") bottomleft:SetTexCoord(0.751953125, 0.875, 0, 1) local bottomright = frame:CreateTexture(nil, "BORDER") - bottomright:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + bottomright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottomright:SetWidth(64) bottomright:SetHeight(64) bottomright:SetPoint("BOTTOMRIGHT") bottomright:SetTexCoord(0.875, 1, 0, 1) local bottom = frame:CreateTexture(nil, "BORDER") - bottom:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + bottom:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottom:SetHeight(64) bottom:SetPoint("BOTTOMLEFT", bottomleft, "BOTTOMRIGHT") bottom:SetPoint("BOTTOMRIGHT", bottomright, "BOTTOMLEFT") bottom:SetTexCoord(0.376953125, 0.498046875, 0, 1) local left = frame:CreateTexture(nil, "BORDER") - left:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + left:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border left:SetWidth(64) left:SetPoint("TOPLEFT", topleft, "BOTTOMLEFT") left:SetPoint("BOTTOMLEFT", bottomleft, "TOPLEFT") left:SetTexCoord(0.001953125, 0.125, 0, 1) local right = frame:CreateTexture(nil, "BORDER") - right:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + right:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border right:SetWidth(64) right:SetPoint("TOPRIGHT", topright, "BOTTOMRIGHT") right:SetPoint("BOTTOMRIGHT", bottomright, "TOPRIGHT") @@ -290,7 +290,7 @@ do line1:SetWidth(14) line1:SetHeight(14) line1:SetPoint("BOTTOMRIGHT", -8, 8) - line1:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + line1:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border local x = 0.1 * 14/17 line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) @@ -299,7 +299,7 @@ do line2:SetWidth(8) line2:SetHeight(8) line2:SetPoint("BOTTOMRIGHT", -8, 8) - line2:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border local x = 0.1 * 8/17 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua index b96ac59..be9ae81 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- Checkbox Widget -------------------------------------------------------------------------------]] -local Type, Version = "CheckBox", 23 +local Type, Version = "CheckBox", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -26,7 +26,7 @@ local function AlignImage(self) self.text:SetPoint("LEFT", self.checkbg, "RIGHT") self.text:SetPoint("RIGHT") else - self.text:SetPoint("LEFT", self.image,"RIGHT", 1, 0) + self.text:SetPoint("LEFT", self.image, "RIGHT", 1, 0) self.text:SetPoint("RIGHT") end end @@ -91,7 +91,7 @@ local methods = { if self.desc then self.desc:SetWidth(width - 30) if self.desc:GetText() and self.desc:GetText() ~= "" then - self:SetHeight(28 + self.desc:GetHeight()) + self:SetHeight(28 + self.desc:GetStringHeight()) end end end, @@ -119,20 +119,20 @@ local methods = { end end, - ["SetValue"] = function(self,value) + ["SetValue"] = function(self, value) local check = self.check self.checked = value if value then - SetDesaturation(self.check, false) - self.check:Show() + SetDesaturation(check, false) + check:Show() else --Nil is the unknown tristate value if self.tristate and value == nil then - SetDesaturation(self.check, true) - self.check:Show() + SetDesaturation(check, true) + check:Show() else - SetDesaturation(self.check, false) - self.check:Hide() + SetDesaturation(check, false) + check:Hide() end end self:SetDisabled(self.disabled) @@ -155,21 +155,21 @@ local methods = { local size if type == "radio" then size = 16 - checkbg:SetTexture("Interface\\Buttons\\UI-RadioButton") + checkbg:SetTexture(130843) -- Interface\\Buttons\\UI-RadioButton checkbg:SetTexCoord(0, 0.25, 0, 1) - check:SetTexture("Interface\\Buttons\\UI-RadioButton") + check:SetTexture(130843) -- Interface\\Buttons\\UI-RadioButton check:SetTexCoord(0.25, 0.5, 0, 1) check:SetBlendMode("ADD") - highlight:SetTexture("Interface\\Buttons\\UI-RadioButton") + highlight:SetTexture(130843) -- Interface\\Buttons\\UI-RadioButton highlight:SetTexCoord(0.5, 0.75, 0, 1) else size = 24 - checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up") + checkbg:SetTexture(130755) -- Interface\\Buttons\\UI-CheckBox-Up checkbg:SetTexCoord(0, 1, 0, 1) - check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + check:SetTexture(130751) -- Interface\\Buttons\\UI-CheckBox-Check check:SetTexCoord(0, 1, 0, 1) check:SetBlendMode("BLEND") - highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight") + highlight:SetTexture(130753) -- Interface\\Buttons\\UI-CheckBox-Highlight highlight:SetTexCoord(0, 1, 0, 1) end checkbg:SetHeight(size) @@ -203,6 +203,7 @@ local methods = { desc:ClearAllPoints() desc:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21) desc:SetWidth(self.frame.width - 30) + desc:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0) desc:SetJustifyH("LEFT") desc:SetJustifyV("TOP") self.desc = desc @@ -210,7 +211,7 @@ local methods = { self.desc:Show() --self.text:SetFontObject(GameFontNormal) self.desc:SetText(desc) - self:SetHeight(28 + self.desc:GetHeight()) + self:SetHeight(28 + self.desc:GetStringHeight()) else if self.desc then self.desc:SetText("") @@ -254,11 +255,11 @@ local function Constructor() checkbg:SetWidth(24) checkbg:SetHeight(24) checkbg:SetPoint("TOPLEFT") - checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up") + checkbg:SetTexture(130755) -- Interface\\Buttons\\UI-CheckBox-Up local check = frame:CreateTexture(nil, "OVERLAY") check:SetAllPoints(checkbg) - check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + check:SetTexture(130751) -- Interface\\Buttons\\UI-CheckBox-Check local text = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight") text:SetJustifyH("LEFT") @@ -267,7 +268,7 @@ local function Constructor() text:SetPoint("RIGHT") local highlight = frame:CreateTexture(nil, "HIGHLIGHT") - highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight") + highlight:SetTexture(130753) -- Interface\\Buttons\\UI-CheckBox-Highlight highlight:SetBlendMode("ADD") highlight:SetAllPoints(checkbg) diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua index 05e2b57..4e911db 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- ColorPicker Widget -------------------------------------------------------------------------------]] -local Type, Version = "ColorPicker", 23 +local Type, Version = "ColorPicker", 24 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -140,10 +140,11 @@ local function Constructor() local colorSwatch = frame:CreateTexture(nil, "OVERLAY") colorSwatch:SetWidth(19) colorSwatch:SetHeight(19) - colorSwatch:SetTexture("Interface\\ChatFrame\\ChatFrameColorSwatch") + colorSwatch:SetTexture(130939) -- Interface\\ChatFrame\\ChatFrameColorSwatch colorSwatch:SetPoint("LEFT") local texture = frame:CreateTexture(nil, "BACKGROUND") + colorSwatch.background = texture texture:SetWidth(16) texture:SetHeight(16) texture:SetColorTexture(1, 1, 1) @@ -151,9 +152,10 @@ local function Constructor() texture:Show() local checkers = frame:CreateTexture(nil, "BACKGROUND") + colorSwatch.checkers = checkers checkers:SetWidth(14) checkers:SetHeight(14) - checkers:SetTexture("Tileset\\Generic\\Checkers") + checkers:SetTexture(188523) -- Tileset\\Generic\\Checkers checkers:SetTexCoord(.25, 0, 0.5, .25) checkers:SetDesaturated(true) checkers:SetVertexColor(1, 1, 1, 0.75) @@ -168,7 +170,7 @@ local function Constructor() text:SetPoint("RIGHT") --local highlight = frame:CreateTexture(nil, "HIGHLIGHT") - --highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + --highlight:SetTexture(136810) -- Interface\\QuestFrame\\UI-QuestTitleHighlight --highlight:SetBlendMode("ADD") --highlight:SetAllPoints(frame) diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua index 5748e4f..549ce3e 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua @@ -1,4 +1,4 @@ ---[[ $Id: AceGUIWidget-DropDown-Items.lua 1167 2017-08-29 22:08:48Z funkydude $ ]]-- +--[[ $Id: AceGUIWidget-DropDown-Items.lua 1192 2018-07-30 18:03:51Z funkydude $ ]]-- local AceGUI = LibStub("AceGUI-3.0") @@ -169,7 +169,7 @@ function ItemBase.Create(type) self.text = text local highlight = frame:CreateTexture(nil, "OVERLAY") - highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + highlight:SetTexture(136810) -- Interface\\QuestFrame\\UI-QuestTitleHighlight highlight:SetBlendMode("ADD") highlight:SetHeight(14) highlight:ClearAllPoints() @@ -182,7 +182,7 @@ function ItemBase.Create(type) check:SetWidth(16) check:SetHeight(16) check:SetPoint("LEFT",frame,"LEFT",3,-1) - check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + check:SetTexture(130751) -- Interface\\Buttons\\UI-CheckBox-Check check:Hide() self.check = check @@ -190,7 +190,7 @@ function ItemBase.Create(type) sub:SetWidth(16) sub:SetHeight(16) sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1) - sub:SetTexture("Interface\\ChatFrame\\ChatFrameExpandArrow") + sub:SetTexture(130940) -- Interface\\ChatFrame\\ChatFrameExpandArrow sub:Hide() self.sub = sub diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua index 1aaf3f5..862ae88 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua @@ -51,14 +51,14 @@ local function Constructor() left:SetHeight(8) left:SetPoint("LEFT", 3, 0) left:SetPoint("RIGHT", label, "LEFT", -5, 0) - left:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + left:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border left:SetTexCoord(0.81, 0.94, 0.5, 1) local right = frame:CreateTexture(nil, "BACKGROUND") right:SetHeight(8) right:SetPoint("RIGHT", -3, 0) right:SetPoint("LEFT", label, "RIGHT", 5, 0) - right:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + right:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border right:SetTexCoord(0.81, 0.94, 0.5, 1) local widget = { diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua index 561da73..bc3d02a 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua @@ -118,7 +118,7 @@ local function Constructor() local highlight = frame:CreateTexture(nil, "HIGHLIGHT") highlight:SetAllPoints(image) - highlight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight") + highlight:SetTexture(136580) -- Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight highlight:SetTexCoord(0, 1, 0.23, 0.77) highlight:SetBlendMode("ADD") diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua index 036efee..255dd97 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua @@ -8,13 +8,6 @@ if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -- Lua APIs local select, pairs = select, pairs --- WoW APIs -local CreateFrame, UIParent = CreateFrame, UIParent - --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontHighlightSmall - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua index 75817a0..7a754f6 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua @@ -2,7 +2,7 @@ Label Widget Displays text and optionally an icon. -------------------------------------------------------------------------------]] -local Type, Version = "Label", 24 +local Type, Version = "Label", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -39,23 +39,28 @@ local function UpdateImageAnchor(self) label:SetPoint("TOP", image, "BOTTOM") label:SetPoint("LEFT") label:SetWidth(width) - height = image:GetHeight() + label:GetHeight() + height = image:GetHeight() + label:GetStringHeight() else -- image on the left image:SetPoint("TOPLEFT") - if image:GetHeight() > label:GetHeight() then + if image:GetHeight() > label:GetStringHeight() then label:SetPoint("LEFT", image, "RIGHT", 4, 0) else label:SetPoint("TOPLEFT", image, "TOPRIGHT", 4, 0) end label:SetWidth(width - imagewidth - 4) - height = max(image:GetHeight(), label:GetHeight()) + height = max(image:GetHeight(), label:GetStringHeight()) end else -- no image shown label:SetPoint("TOPLEFT") label:SetWidth(width) - height = label:GetHeight() + height = label:GetStringHeight() + end + + -- avoid zero-height labels, since they can used as spacers + if not height or height == 0 then + height = 1 end self.resizing = true diff --git a/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua b/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua index 20d0887..5a81759 100755 --- a/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua +++ b/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua @@ -57,10 +57,9 @@ local function Frame_OnMouseDown(frame) AceGUI:ClearFocus() end -local function Slider_OnValueChanged(frame) +local function Slider_OnValueChanged(frame, newvalue) local self = frame.obj if not frame.setup then - local newvalue = frame:GetValue() if self.step and self.step > 0 then local min_value = self.min or 0 newvalue = floor((newvalue - min_value) / self.step + 0.5) * self.step + min_value diff --git a/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua b/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua index 675d7b0..a8377fe 100755 --- a/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua +++ b/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua @@ -1,5 +1,5 @@ ---[[ $Id: CallbackHandler-1.0.lua 1131 2015-06-04 07:29:24Z nevcairiel $ ]] -local MAJOR, MINOR = "CallbackHandler-1.0", 6 +--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]] +local MAJOR, MINOR = "CallbackHandler-1.0", 7 local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) if not CallbackHandler then return end -- No upgrade needed @@ -22,41 +22,15 @@ local function errorhandler(err) return geterrorhandler()(err) end -local function CreateDispatcher(argCount) - local code = [[ - local next, xpcall, eh = ... - - local method, ARGS - local function call() method(ARGS) end - - local function dispatch(handlers, ...) - local index - index, method = next(handlers) - if not method then return end - local OLD_ARGS = ARGS - ARGS = ... - repeat - xpcall(call, eh) - index, method = next(handlers, index) - until not method - ARGS = OLD_ARGS - end - - return dispatch - ]] - - local ARGS, OLD_ARGS = {}, {} - for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end - code = code:gsub("OLD_ARGS", tconcat(OLD_ARGS, ", ")):gsub("ARGS", tconcat(ARGS, ", ")) - return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler) +local function Dispatch(handlers, ...) + local index, method = next(handlers) + if not method then return end + repeat + xpcall(method, errorhandler, ...) + index, method = next(handlers, index) + until not method end -local Dispatchers = setmetatable({}, {__index=function(self, argCount) - local dispatcher = CreateDispatcher(argCount) - rawset(self, argCount, dispatcher) - return dispatcher -end}) - -------------------------------------------------------------------------- -- CallbackHandler:New -- @@ -87,7 +61,7 @@ function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAll local oldrecurse = registry.recurse registry.recurse = oldrecurse + 1 - Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...) + Dispatch(events[eventname], eventname, ...) registry.recurse = oldrecurse