forked from Softrix/SmartBuff-Retail
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 59229f5
Showing
42 changed files
with
11,542 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# Auto detect text files and perform LF normalization | ||
* text=auto |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<Bindings> | ||
<Binding name="SMARTBUFF_BIND_TRIGGER" header="SMARTBUFF"> | ||
SMARTBUFF_Check(0); | ||
</Binding> | ||
<Binding name="SMARTBUFF_BIND_OPTIONS"> | ||
SMARTBUFF_OptionsFrame_Toggle(); | ||
</Binding> | ||
<Binding name="SMARTBUFF_BIND_RESETBUFFTIMERS"> | ||
SMARTBUFF_ResetBuffTimers(0); | ||
</Binding> | ||
</Bindings> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
------------------------------------------------------------------------------- | ||
-- Broker: SmartBuff | ||
-- Created by Aeldra (EU-Proudmoore) | ||
-- | ||
-- Data Broker support | ||
------------------------------------------------------------------------------- | ||
|
||
if (not SMARTBUFF_TITLE) then return end | ||
|
||
local F = CreateFrame("Frame", "Broker_SmartBuff"); | ||
|
||
function SMARTBUFF_BROKER_SetIcon() | ||
if (not F.LS) then return end | ||
if (SMARTBUFF_Options and SMARTBUFF_Options.Toggle) then | ||
F.LS.icon = "Interface\\AddOns\\SmartBuff\\Icons\\IconEnabled"; | ||
else | ||
F.LS.icon = "Interface\\AddOns\\SmartBuff\\Icons\\IconDisabled"; | ||
end | ||
end | ||
|
||
F.LS = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("SmartBuff", { | ||
type = "launcher", | ||
label = SMARTBUFF_TITLE, | ||
OnClick = function(_, msg) | ||
if (msg == "RightButton") then | ||
SMARTBUFF_OToggle(); | ||
SMARTBUFF_BROKER_SetIcon(); -- bug fix, credit: SunNova | ||
elseif (msg == "LeftButton" and IsAltKeyDown()) then | ||
if (IsAddOnLoaded("SmartDebuff")) then | ||
SMARTDEBUFF_ToggleSF(); | ||
end | ||
elseif (msg == "LeftButton") then | ||
SMARTBUFF_OptionsFrame_Toggle(); | ||
end | ||
end, | ||
icon = "Interface\\AddOns\\SmartBuff\\Icons\\IconDisabled", | ||
OnTooltipShow = function(tooltip) | ||
if (not tooltip or not tooltip.AddLine) then return end | ||
tooltip:AddLine("|cffffffff"..SMARTBUFF_TITLE.."|r"); | ||
tooltip:AddLine(SMARTBUFF_TITAN_TT); | ||
end, | ||
}); | ||
|
||
F:Hide(); | ||
--print("Borker - SmartBuff loaded"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
## Interface: 90207 | ||
## Title: Broker: Smart|cffffffffBuff|r | ||
## Version: 1.90207 | ||
## Notes: SmartBuff support for Data Broker | ||
## Author: |cff20d2ffAeldra|r (EU-Proudmoore) | ||
## Dependencies: SmartBuff | ||
## X-Category: Miscellaneous | ||
|
||
LibDataBroker-1.1.lua | ||
Broker_SmartBuff.lua |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
|
||
assert(LibStub, "LibDataBroker-1.1 requires LibStub") | ||
assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0") | ||
|
||
local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4) | ||
if not lib then return end | ||
oldminor = oldminor or 0 | ||
|
||
|
||
lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib) | ||
lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {} | ||
local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks | ||
|
||
if oldminor < 2 then | ||
lib.domt = { | ||
__metatable = "access denied", | ||
__index = function(self, key) return attributestorage[self] and attributestorage[self][key] end, | ||
} | ||
end | ||
|
||
if oldminor < 3 then | ||
lib.domt.__newindex = function(self, key, value) | ||
if not attributestorage[self] then attributestorage[self] = {} end | ||
if attributestorage[self][key] == value then return end | ||
attributestorage[self][key] = value | ||
local name = namestorage[self] | ||
if not name then return end | ||
callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self) | ||
callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self) | ||
callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self) | ||
callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self) | ||
end | ||
end | ||
|
||
if oldminor < 2 then | ||
function lib:NewDataObject(name, dataobj) | ||
if self.proxystorage[name] then return end | ||
|
||
if dataobj then | ||
assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table") | ||
self.attributestorage[dataobj] = {} | ||
for i,v in pairs(dataobj) do | ||
self.attributestorage[dataobj][i] = v | ||
dataobj[i] = nil | ||
end | ||
end | ||
dataobj = setmetatable(dataobj or {}, self.domt) | ||
self.proxystorage[name], self.namestorage[dataobj] = dataobj, name | ||
self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj) | ||
return dataobj | ||
end | ||
end | ||
|
||
if oldminor < 1 then | ||
function lib:DataObjectIterator() | ||
return pairs(self.proxystorage) | ||
end | ||
|
||
function lib:GetDataObjectByName(dataobjectname) | ||
return self.proxystorage[dataobjectname] | ||
end | ||
|
||
function lib:GetNameByDataObject(dataobject) | ||
return self.namestorage[dataobject] | ||
end | ||
end | ||
|
||
if oldminor < 4 then | ||
local next = pairs(attributestorage) | ||
function lib:pairs(dataobject_or_name) | ||
local t = type(dataobject_or_name) | ||
assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)") | ||
|
||
local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name | ||
assert(attributestorage[dataobj], "Data object not found") | ||
|
||
return next, attributestorage[dataobj], nil | ||
end | ||
|
||
local ipairs_iter = ipairs(attributestorage) | ||
function lib:ipairs(dataobject_or_name) | ||
local t = type(dataobject_or_name) | ||
assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)") | ||
|
||
local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name | ||
assert(attributestorage[dataobj], "Data object not found") | ||
|
||
return ipairs_iter, attributestorage[dataobj], 0 | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,212 @@ | ||
--[[ $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 | ||
|
||
local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end} | ||
|
||
-- Lua APIs | ||
local tconcat = table.concat | ||
local assert, error, loadstring = assert, error, loadstring | ||
local setmetatable, rawset, rawget = setmetatable, rawset, rawget | ||
local next, select, pairs, type, tostring = next, select, pairs, type, tostring | ||
|
||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded | ||
-- List them here for Mikk's FindGlobals script | ||
-- GLOBALS: geterrorhandler | ||
|
||
local xpcall = xpcall | ||
|
||
local function errorhandler(err) | ||
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 | ||
end | ||
|
||
-------------------------------------------------------------------------- | ||
-- CallbackHandler:New | ||
-- | ||
-- target - target object to embed public APIs in | ||
-- RegisterName - name of the callback registration API, default "RegisterCallback" | ||
-- UnregisterName - name of the callback unregistration API, default "UnregisterCallback" | ||
-- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API. | ||
|
||
function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName) | ||
|
||
RegisterName = RegisterName or "RegisterCallback" | ||
UnregisterName = UnregisterName or "UnregisterCallback" | ||
if UnregisterAllName==nil then -- false is used to indicate "don't want this method" | ||
UnregisterAllName = "UnregisterAllCallbacks" | ||
end | ||
|
||
-- we declare all objects and exported APIs inside this closure to quickly gain access | ||
-- to e.g. function names, the "target" parameter, etc | ||
|
||
|
||
-- Create the registry object | ||
local events = setmetatable({}, meta) | ||
local registry = { recurse=0, events=events } | ||
|
||
-- registry:Fire() - fires the given event/message into the registry | ||
function registry:Fire(eventname, ...) | ||
if not rawget(events, eventname) or not next(events[eventname]) then return end | ||
local oldrecurse = registry.recurse | ||
registry.recurse = oldrecurse + 1 | ||
|
||
Dispatch(events[eventname], eventname, ...) | ||
|
||
registry.recurse = oldrecurse | ||
|
||
if registry.insertQueue and oldrecurse==0 then | ||
-- Something in one of our callbacks wanted to register more callbacks; they got queued | ||
for eventname,callbacks in pairs(registry.insertQueue) do | ||
local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. | ||
for self,func in pairs(callbacks) do | ||
events[eventname][self] = func | ||
-- fire OnUsed callback? | ||
if first and registry.OnUsed then | ||
registry.OnUsed(registry, target, eventname) | ||
first = nil | ||
end | ||
end | ||
end | ||
registry.insertQueue = nil | ||
end | ||
end | ||
|
||
-- Registration of a callback, handles: | ||
-- self["method"], leads to self["method"](self, ...) | ||
-- self with function ref, leads to functionref(...) | ||
-- "addonId" (instead of self) with function ref, leads to functionref(...) | ||
-- all with an optional arg, which, if present, gets passed as first argument (after self if present) | ||
target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]]) | ||
if type(eventname) ~= "string" then | ||
error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2) | ||
end | ||
|
||
method = method or eventname | ||
|
||
local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. | ||
|
||
if type(method) ~= "string" and type(method) ~= "function" then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2) | ||
end | ||
|
||
local regfunc | ||
|
||
if type(method) == "string" then | ||
-- self["method"] calling style | ||
if type(self) ~= "table" then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2) | ||
elseif self==target then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2) | ||
elseif type(self[method]) ~= "function" then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2) | ||
end | ||
|
||
if select("#",...)>=1 then -- this is not the same as testing for arg==nil! | ||
local arg=select(1,...) | ||
regfunc = function(...) self[method](self,arg,...) end | ||
else | ||
regfunc = function(...) self[method](self,...) end | ||
end | ||
else | ||
-- function ref with self=object or self="addonId" or self=thread | ||
if type(self)~="table" and type(self)~="string" and type(self)~="thread" then | ||
error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2) | ||
end | ||
|
||
if select("#",...)>=1 then -- this is not the same as testing for arg==nil! | ||
local arg=select(1,...) | ||
regfunc = function(...) method(arg,...) end | ||
else | ||
regfunc = method | ||
end | ||
end | ||
|
||
|
||
if events[eventname][self] or registry.recurse<1 then | ||
-- if registry.recurse<1 then | ||
-- we're overwriting an existing entry, or not currently recursing. just set it. | ||
events[eventname][self] = regfunc | ||
-- fire OnUsed callback? | ||
if registry.OnUsed and first then | ||
registry.OnUsed(registry, target, eventname) | ||
end | ||
else | ||
-- we're currently processing a callback in this registry, so delay the registration of this new entry! | ||
-- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency | ||
registry.insertQueue = registry.insertQueue or setmetatable({},meta) | ||
registry.insertQueue[eventname][self] = regfunc | ||
end | ||
end | ||
|
||
-- Unregister a callback | ||
target[UnregisterName] = function(self, eventname) | ||
if not self or self==target then | ||
error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2) | ||
end | ||
if type(eventname) ~= "string" then | ||
error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2) | ||
end | ||
if rawget(events, eventname) and events[eventname][self] then | ||
events[eventname][self] = nil | ||
-- Fire OnUnused callback? | ||
if registry.OnUnused and not next(events[eventname]) then | ||
registry.OnUnused(registry, target, eventname) | ||
end | ||
end | ||
if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then | ||
registry.insertQueue[eventname][self] = nil | ||
end | ||
end | ||
|
||
-- OPTIONAL: Unregister all callbacks for given selfs/addonIds | ||
if UnregisterAllName then | ||
target[UnregisterAllName] = function(...) | ||
if select("#",...)<1 then | ||
error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2) | ||
end | ||
if select("#",...)==1 and ...==target then | ||
error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2) | ||
end | ||
|
||
|
||
for i=1,select("#",...) do | ||
local self = select(i,...) | ||
if registry.insertQueue then | ||
for eventname, callbacks in pairs(registry.insertQueue) do | ||
if callbacks[self] then | ||
callbacks[self] = nil | ||
end | ||
end | ||
end | ||
for eventname, callbacks in pairs(events) do | ||
if callbacks[self] then | ||
callbacks[self] = nil | ||
-- Fire OnUnused callback? | ||
if registry.OnUnused and not next(callbacks) then | ||
registry.OnUnused(registry, target, eventname) | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
return registry | ||
end | ||
|
||
|
||
-- CallbackHandler purposefully does NOT do explicit embedding. Nor does it | ||
-- try to upgrade old implicit embeds since the system is selfcontained and | ||
-- relies on closures to work. | ||
|
Oops, something went wrong.