You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.1 KiB

local _, T = ...
local AB = assert(T.ActionBook:compatible(2, 36), "A compatible version of ActionBook is required")
local EV, L = T.Evie, T.L
local LDB
local function checkLDB()
LDB = LibStub and LibStub:GetLibrary("LibDataBroker-1.1", 1)
end
do -- action handler
local nameMap = {}
local function call(obj, btn)
obj:OnClick(btn)
end
local function describeBroker(name)
local obj = (LDB or checkLDB() or LDB) and LDB:GetDataObjectByName(name)
return "Launcher", obj and obj.label or name, obj and obj.icon or "Interface/Icons/INV_Misc_QuestionMark", obj
end
local function brokerHint(obj)
if not obj then return end
return true, 0, obj.icon, obj.label or obj.text, 0,0,0, obj.OnTooltipShow, nil, obj
end
local function createBroker(name, rightClick)
if type(name) ~= "string" or not (LDB or checkLDB() or LDB) then return end
local pname = name .. "#" .. (rightClick and "R" or "L")
if not nameMap[pname] then
local obj = LDB:GetDataObjectByName(name)
if not obj then return end
nameMap[pname] = AB:CreateActionSlot(brokerHint, obj, "func", call, obj, rightClick and "RightButton" or "LeftButton")
end
return nameMap[pname]
end
AB:RegisterActionType("opie.databroker.launcher", createBroker, describeBroker, {"clickUsingRightButton"})
end
do -- category
local waiting = true
local function hasLaunchers()
for _, o in LDB:DataObjectIterator() do
if o.type == "launcher" then return true end
end
end
local function onRegister()
if waiting and hasLaunchers() then
waiting = nil
AB:AugmentCategory("DataBroker", function(_, add)
for name, obj in LDB:DataObjectIterator() do
if obj.type == "launcher" then
add("opie.databroker.launcher", name)
end
end
end)
elseif not waiting then
AB:NotifyObservers("opie.databroker.launcher")
end
end
function EV.ADDON_LOADED()
if LDB or checkLDB() or LDB then
onRegister()
if waiting then
LDB.RegisterCallback("opie.databroker.launcher", "LibDataBroker_DataObjectCreated", onRegister)
end
return "remove"
end
end
end
AB.CreateSimpleEditorPanel("opie.databroker.launcher", {"clickUsingRightButton", clickUsingRightButton=L"Simulate a right-click"})