/
TreeGroup Container |
Container that uses a tree control to switch between groups. |
-------------------------------------------------------------------------------]] |
local Type, Version = "TreeGroup", 44 |
local Type, Version = "TreeGroup", 42 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: FONT_COLOR_CODE_CLOSE |
-- GLOBALS: GameTooltip, FONT_COLOR_CODE_CLOSE |
-- Recycling functions |
local new, del |
self:Fire("OnButtonEnter", frame.uniquevalue, frame) |
if self.enabletooltips then |
local tooltip = AceGUI.tooltip |
tooltip:SetOwner(frame, "ANCHOR_NONE") |
tooltip:ClearAllPoints() |
tooltip:SetPoint("LEFT",frame,"RIGHT") |
tooltip:SetText(frame.text:GetText() or "", 1, .82, 0, true) |
GameTooltip:SetOwner(frame, "ANCHOR_NONE") |
GameTooltip:ClearAllPoints() |
GameTooltip:SetPoint("LEFT",frame,"RIGHT") |
GameTooltip:SetText(frame.text:GetText() or "", 1, .82, 0, true) |
tooltip:Show() |
GameTooltip:Show() |
end |
end |
self:Fire("OnButtonLeave", frame.uniquevalue, frame) |
if self.enabletooltips then |
AceGUI.tooltip:Hide() |
GameTooltip:Hide() |
end |
end |
local function Dragger_OnMouseUp(frame) |
local treeframe = frame:GetParent() |
local self = treeframe.obj |
local treeframeParent = treeframe:GetParent() |
local frame = treeframe:GetParent() |
treeframe:StopMovingOrSizing() |
--treeframe:SetScript("OnUpdate", nil) |
treeframe:SetUserPlaced(false) |
--Without this :GetHeight will get stuck on the current height, causing the tree contents to not resize |
treeframe:SetHeight(0) |
treeframe:ClearAllPoints() |
treeframe:SetPoint("TOPLEFT", treeframeParent, "TOPLEFT",0,0) |
treeframe:SetPoint("BOTTOMLEFT", treeframeParent, "BOTTOMLEFT",0,0) |
treeframe:SetPoint("TOPLEFT", frame, "TOPLEFT",0,0) |
treeframe:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT",0,0) |
local status = self.status or self.localstatus |
status.treewidth = treeframe:GetWidth() |
-- f:AddChild(btn) |
-- @class file |
-- @name AceGUI-3.0 |
-- @release $Id: AceGUI-3.0.lua 1221 2019-07-20 18:23:00Z nevcairiel $ |
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 39 |
-- @release $Id: AceGUI-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ |
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 |
AceGUI.WidgetBase = AceGUI.WidgetBase or {} |
AceGUI.WidgetContainerBase = AceGUI.WidgetContainerBase or {} |
AceGUI.WidgetVersions = AceGUI.WidgetVersions or {} |
AceGUI.tooltip = AceGUI.tooltip or CreateFrame("GameTooltip", "AceGUITooltip", UIParent, "GameTooltipTemplate") |
-- local upvalues |
local WidgetRegistry = AceGUI.WidgetRegistry |
-- @param widget The widget to release |
function AceGUI:Release(widget) |
safecall(widget.PauseLayout, widget) |
widget.frame:Hide() |
widget:Fire("OnRelease") |
safecall(widget.ReleaseChildren, widget) |
if children[1] then |
children[1]:SetWidth(content:GetWidth() or 0) |
children[1]:SetHeight(content:GetHeight() or 0) |
children[1].frame:ClearAllPoints() |
children[1].frame:SetAllPoints(content) |
children[1].frame:Show() |
safecall(content.obj.LayoutFinished, content.obj, nil, children[1].frame:GetHeight()) |
self:Print("No Configs are Registered") |
return |
end |
if not frame then |
frame = gui:Create("Frame") |
frame:ReleaseChildren() |
frame:SetTitle("Ace3 Options") |
frame:SetLayout("FILL") |
frame:SetCallback("OnClose", frameOnClose) |
select = gui:Create("DropdownGroup") |
select:SetGroupList(configs) |
select:SetCallback("OnGroupSelected", ConfigSelected) |
<Bindings> |
<Binding name="RELOADUI" description="Reloads the UI." header="ACE3" category="ADDONS"> |
ReloadUI() |
</Binding> |
</Bindings> |
-- end |
-- @class file |
-- @name AceDB-3.0.lua |
-- @release $Id: AceDB-3.0.lua 1217 2019-07-11 03:06:18Z funkydude $ |
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 27 |
-- @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 = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR) |
if not AceDB then return end -- No upgrade needed |
-- @param defaults A table of defaults for this database |
function DBObjectLib:RegisterDefaults(defaults) |
if defaults and type(defaults) ~= "table" then |
error(("Usage: AceDBObject:RegisterDefaults(defaults): 'defaults' - table or nil expected, got %q."):format(type(defaults)), 2) |
error("Usage: AceDBObject:RegisterDefaults(defaults): 'defaults' - table or nil expected.", 2) |
end |
validateDefaults(defaults, self.keys) |
-- @param name The name of the profile to set as the current profile |
function DBObjectLib:SetProfile(name) |
if type(name) ~= "string" then |
error(("Usage: AceDBObject:SetProfile(name): 'name' - string expected, got %q."):format(type(name)), 2) |
error("Usage: AceDBObject:SetProfile(name): 'name' - string expected.", 2) |
end |
-- changing to the same profile, dont do anything |
-- @param tbl A table to store the profile names in (optional) |
function DBObjectLib:GetProfiles(tbl) |
if tbl and type(tbl) ~= "table" then |
error(("Usage: AceDBObject:GetProfiles(tbl): 'tbl' - table or nil expected, got %q."):format(type(tbl)), 2) |
error("Usage: AceDBObject:GetProfiles(tbl): 'tbl' - table or nil expected.", 2) |
end |
-- Clear the container table |
-- @param silent If true, do not raise an error when the profile does not exist |
function DBObjectLib:DeleteProfile(name, silent) |
if type(name) ~= "string" then |
error(("Usage: AceDBObject:DeleteProfile(name): 'name' - string expected, got %q."):format(type(name)), 2) |
error("Usage: AceDBObject:DeleteProfile(name): 'name' - string expected.", 2) |
end |
if self.keys.profile == name then |
error(("Cannot delete the active profile (%q) in an AceDBObject."):format(name), 2) |
error("Cannot delete the active profile in an AceDBObject.", 2) |
end |
if not rawget(self.profiles, name) and not silent then |
error(("Cannot delete profile %q as it does not exist."):format(name), 2) |
error("Cannot delete profile '" .. name .. "'. It does not exist.", 2) |
end |
self.profiles[name] = nil |
-- @param silent If true, do not raise an error when the profile does not exist |
function DBObjectLib:CopyProfile(name, silent) |
if type(name) ~= "string" then |
error(("Usage: AceDBObject:CopyProfile(name): 'name' - string expected, got %q."):format(type(name)), 2) |
error("Usage: AceDBObject:CopyProfile(name): 'name' - string expected.", 2) |
end |
if name == self.keys.profile then |
error(("Cannot have the same source and destination profiles (%q)."):format(name), 2) |
error("Cannot have the same source and destination profiles.", 2) |
end |
if not rawget(self.profiles, name) and not silent then |
error(("Cannot copy profile %q as it does not exist."):format(name), 2) |
error("Cannot copy profile '" .. name .. "'. It does not exist.", 2) |
end |
-- Reset the profile before copying |
-- @param defaultProfile The profile name to use as the default |
function DBObjectLib:ResetDB(defaultProfile) |
if defaultProfile and type(defaultProfile) ~= "string" then |
error(("Usage: AceDBObject:ResetDB(defaultProfile): 'defaultProfile' - string or nil expected, got %q."):format(type(defaultProfile)), 2) |
error("Usage: AceDBObject:ResetDB(defaultProfile): 'defaultProfile' - string or nil expected.", 2) |
end |
local sv = self.sv |
-- @param defaults A table of values to use as defaults |
function DBObjectLib:RegisterNamespace(name, defaults) |
if type(name) ~= "string" then |
error(("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - string expected, got %q."):format(type(name)), 2) |
error("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - string expected.", 2) |
end |
if defaults and type(defaults) ~= "table" then |
error(("Usage: AceDBObject:RegisterNamespace(name, defaults): 'defaults' - table or nil expected, got %q."):format(type(defaults)), 2) |
error("Usage: AceDBObject:RegisterNamespace(name, defaults): 'defaults' - table or nil expected.", 2) |
end |
if self.children and self.children[name] then |
error(("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - a namespace called %q already exists."):format(name), 2) |
error ("Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - a namespace with that name already exists.", 2) |
end |
local sv = self.sv |
-- @return the namespace object if found |
function DBObjectLib:GetNamespace(name, silent) |
if type(name) ~= "string" then |
error(("Usage: AceDBObject:GetNamespace(name): 'name' - string expected, got %q."):format(type(name)), 2) |
error("Usage: AceDBObject:GetNamespace(name): 'name' - string expected.", 2) |
end |
if not silent and not (self.children and self.children[name]) then |
error(("Usage: AceDBObject:GetNamespace(name): 'name' - namespace %q does not exist."):format(name), 2) |
error ("Usage: AceDBObject:GetNamespace(name): 'name' - namespace does not exist.", 2) |
end |
if not self.children then self.children = {} end |
return self.children[name] |
end |
if type(tbl) ~= "table" then |
error(("Usage: AceDB:New(tbl, defaults, defaultProfile): 'tbl' - table expected, got %q."):format(type(tbl)), 2) |
error("Usage: AceDB:New(tbl, defaults, defaultProfile): 'tbl' - table expected.", 2) |
end |
if defaults and type(defaults) ~= "table" then |
error(("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaults' - table expected, got %q."):format(type(defaults)), 2) |
error("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaults' - table expected.", 2) |
end |
if defaultProfile and type(defaultProfile) ~= "string" and defaultProfile ~= true then |
error(("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaultProfile' - string or true expected, got %q."):format(type(defaultProfile)), 2) |
error("Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaultProfile' - string or true expected.", 2) |
end |
return initdb(tbl, defaults, defaultProfile) |
## Interface: 80200 |
## Interface: 70300 |
## Title: Lib: Ace3 |
## Notes: AddOn development framework |
-- 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 |
-- $Id: LibStub.lua 103 2014-10-16 03:02:50Z mikk $ |
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/addons/libstub/ for more info |
-- 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 = _G[LIBSTUB_MAJOR] |
-- Check to see is this version of the stub is obsolete |
if not LibStub or LibStub.minor < LIBSTUB_MINOR then |
LibStub = LibStub or {libs = {}, minors = {} } |
_G[LIBSTUB_MAJOR] = LibStub |
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) |
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.") |
return self.libs[major], oldminor |
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) |
if not self.libs[major] and not silent then |
error(("Cannot find a library instance of %q."):format(tostring(major)), 2) |
return self.libs[major], self.minors[major] |
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 }) |
end |
--- 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 1222 2019-07-26 22:14:43Z funkydude $ |
-- @release $Id: AceConfigDialog-3.0.lua 1212 2019-06-26 05:53:51Z nevcairiel $ |
local LibStub = LibStub |
local gui = LibStub("AceGUI-3.0") |
local reg = LibStub("AceConfigRegistry-3.0") |
local MAJOR, MINOR = "AceConfigDialog-3.0", 77 |
local MAJOR, MINOR = "AceConfigDialog-3.0", 73 |
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) |
if not AceConfigDialog then return end |
AceConfigDialog.OpenFrames = AceConfigDialog.OpenFrames or {} |
AceConfigDialog.Status = AceConfigDialog.Status or {} |
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.closing = AceConfigDialog.frame.closing or {} |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: NORMAL_FONT_COLOR, ACCEPT, CANCEL |
-- GLOBALS: NORMAL_FONT_COLOR, GameTooltip, StaticPopupDialogs, ACCEPT, CANCEL, StaticPopup_Show |
-- GLOBALS: PlaySound, GameFontHighlight, GameFontHighlightSmall, GameFontHighlightLarge |
-- GLOBALS: CloseSpecialWindows, InterfaceOptions_AddCategory, geterrorhandler |
local options = user.options |
local path = user.path |
local appName = user.appName |
local tooltip = AceConfigDialog.tooltip |
tooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT") |
GameTooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT") |
local name = GetOptionsMemberValue("name", opt, options, path, appName) |
local desc = GetOptionsMemberValue("desc", opt, options, path, appName) |
local usage = GetOptionsMemberValue("usage", opt, options, path, appName) |
if descStyle and descStyle ~= "tooltip" then return end |
tooltip:SetText(name, 1, .82, 0, true) |
GameTooltip:SetText(name, 1, .82, 0, true) |
if opt.type == "multiselect" then |
tooltip:AddLine(user.text, 0.5, 0.5, 0.8, true) |
GameTooltip:AddLine(user.text, 0.5, 0.5, 0.8, true) |
end |
if type(desc) == "string" then |
tooltip:AddLine(desc, 1, 1, 1, true) |
GameTooltip:AddLine(desc, 1, 1, 1, true) |
end |
if type(usage) == "string" then |
tooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, true) |
GameTooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, true) |
end |
tooltip:Show() |
GameTooltip:Show() |
end |
local function OptionOnMouseLeave(widget, event) |
AceConfigDialog.tooltip:Hide() |
GameTooltip:Hide() |
end |
local function GetFuncName(option) |
return "set" |
end |
end |
do |
local frame = AceConfigDialog.popup |
if not frame then |
frame = CreateFrame("Frame", nil, UIParent) |
AceConfigDialog.popup = frame |
frame:Hide() |
frame:SetPoint("CENTER", UIParent, "CENTER") |
frame:SetSize(320, 72) |
frame:SetFrameStrata("TOOLTIP") |
frame:SetScript("OnKeyDown", function(self, key) |
if key == "ESCAPE" then |
self:SetPropagateKeyboardInput(false) |
if self.cancel:IsShown() then |
self.cancel:Click() |
else -- Showing a validation error |
self:Hide() |
end |
else |
self:SetPropagateKeyboardInput(true) |
end |
end) |
local border = CreateFrame("Frame", nil, frame, "DialogBorderDarkTemplate") |
border:SetAllPoints(frame) |
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 |
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) |
if not StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] then |
StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] = {} |
end |
local t = StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] |
for k in pairs(t) do |
t[k] = nil |
end |
t.text = message |
t.button1 = ACCEPT |
t.button2 = CANCEL |
t.preferredIndex = STATICPOPUP_NUMDIALOGS |
local dialog, oldstrata |
t.OnAccept = function() |
safecall(func, unpack(t)) |
if dialog and oldstrata then |
dialog:SetFrameStrata(oldstrata) |
end |
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) |
end |
t.OnCancel = function() |
if dialog and oldstrata then |
dialog:SetFrameStrata(oldstrata) |
end |
AceConfigDialog:Open(appName, rootframe, unpack(basepath or emptyTbl)) |
frame:Hide() |
self:SetScript("OnClick", nil) |
frame.accept:SetScript("OnClick", nil) |
del(info) |
end) |
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 dialog then |
oldstrata = dialog:GetFrameStrata() |
dialog:SetFrameStrata("TOOLTIP") |
end |
end |
local function validationErrorPopup(message) |
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) |
if not StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] then |
StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] = {} |
end |
local t = StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] |
t.text = message |
t.button1 = OKAY |
t.preferredIndex = STATICPOPUP_NUMDIALOGS |
local dialog, oldstrata |
t.OnAccept = function() |
if dialog and oldstrata then |
dialog:SetFrameStrata(oldstrata) |
end |
end |
t.timeout = 0 |
t.whileDead = 1 |
t.hideOnEscape = 1 |
frame.accept:ClearAllPoints() |
frame.accept:SetPoint("BOTTOM", frame, "BOTTOM", 0, 16) |
frame.cancel:Hide() |
frame.accept:SetScript("OnClick", function() |
frame:Hide() |
end) |
dialog = StaticPopup_Show("ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG") |
if dialog then |
oldstrata = dialog:GetFrameStrata() |
dialog:SetFrameStrata("TOOLTIP") |
end |
end |
local function ActivateControl(widget, event, ...) |
local option = user.option |
local path = user.path |
local appName = user.appName |
local tooltip = AceConfigDialog.tooltip |
local feedpath = new() |
for i = 1, #path do |
local name = GetOptionsMemberValue("name", group, options, feedpath, appName) |
local desc = GetOptionsMemberValue("desc", group, options, feedpath, appName) |
tooltip:SetOwner(button, "ANCHOR_NONE") |
tooltip:ClearAllPoints() |
GameTooltip:SetOwner(button, "ANCHOR_NONE") |
GameTooltip:ClearAllPoints() |
if widget.type == "TabGroup" then |
tooltip:SetPoint("BOTTOM",button,"TOP") |
GameTooltip:SetPoint("BOTTOM",button,"TOP") |
else |
tooltip:SetPoint("LEFT",button,"RIGHT") |
GameTooltip:SetPoint("LEFT",button,"RIGHT") |
end |
tooltip:SetText(name, 1, .82, 0, true) |
GameTooltip:SetText(name, 1, .82, 0, true) |
if type(desc) == "string" then |
tooltip:AddLine(desc, 1, 1, 1, true) |
GameTooltip:AddLine(desc, 1, 1, 1, true) |
end |
tooltip:Show() |
GameTooltip:Show() |
end |
local function TreeOnButtonLeave(widget, event, value, button) |
AceConfigDialog.tooltip:Hide() |
GameTooltip:Hide() |
end |
--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]] |
local MAJOR, MINOR = "CallbackHandler-1.0", 7 |
--[[ $Id: CallbackHandler-1.0.lua 1131 2015-06-04 07:29:24Z nevcairiel $ ]] |
local MAJOR, MINOR = "CallbackHandler-1.0", 6 |
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) |
if not CallbackHandler then return end -- No upgrade needed |
return geterrorhandler()(err) |
end |
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 |
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) |
end |
local Dispatchers = setmetatable({}, {__index=function(self, argCount) |
local dispatcher = CreateDispatcher(argCount) |
rawset(self, argCount, dispatcher) |
return dispatcher |
end}) |
-------------------------------------------------------------------------- |
-- CallbackHandler:New |
-- |
local oldrecurse = registry.recurse |
registry.recurse = oldrecurse + 1 |
Dispatch(events[eventname], eventname, ...) |
Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...) |
registry.recurse = oldrecurse |