Compare with Previous | Blame | View Log
-- ZAM_Stats © ZAM Network LLC
-- All Rights Reserved
-- API for Modules --
---------------------
-- Creating your module --
-- Usage: control, label = ZAM_Stats:CreateModule(key)
-- key = string; a unique identifier/name of your module
-- control = reference to your module's frame
-- label = reference to your module's text
-- Knowing when your module is ready --
-- Usage: CALLBACK_MANAGER:RegisterCallback(event, method)
-- event = string; the event fired by ZAM_Stats - it is called "ZAM_Stats_Modules_Ready"
-- method = function; the function to call when the event fires
-- Setting the text --
-- Usage: ZAM_Stats:SetModuleText(label, prefix, suffix)
-- label = reference to the module's label
-- prefix = string; the value/data to display in the module
-- suffix = string; any descriptor text after the data (ex. "MB")
-- Letting the options panel force a refresh of the text --
-- Usage: CALLBACK_MANAGER:RegisterCallback(event, method)
-- event = string; the event fired by ZAM_Stats - it is called "ZAM_Stats_Force_Refresh"
-- method = function; the function to call when the event fires (should be your ZAM_Stats:SetModuleText function call)
---------------------------------------------------------------------------
ZAM_Stats = {}
-- UPVALUES --
local ZAM_Stats = ZAM_Stats
local LMP = LibStub("LibMediaProvider-1.0")
local db
local wm = GetWindowManager()
ZAM_Stats.modules = {}
local modules = ZAM_Stats.modules
function ZAM_Stats.ConfigModule(frame)
local name = frame:GetName()
frame:ClearAnchors()
if not db[name].point then
db[name].point = {["a"]=CENTER, ["b"]=CENTER, ["x"]=0, ["y"]=0}
end
local anchor = db[name].point
frame:SetAnchor(anchor.a, GuiRoot, anchor.b or anchor.a, anchor.x, anchor.y)
frame:SetMovable(not db.locked)
frame.bg:SetCenterColor(0,0,0, db.locked and 0 or .4)
frame.text:SetFont(("%s|%s|%s"):format(LMP:Fetch("font", db.font), db.fsize, db.fstyle))
frame.text:SetHorizontalAlignment(_G["TEXT_ALIGN_"..db.align])
end
function ZAM_Stats:CreateModule(module)
local f = wm:CreateTopLevelWindow("ZAM_Stats_"..module)
f:SetDimensions(100, 30)
f:SetMouseEnabled(true)
f:SetHandler("OnReceiveDrag", function(self)
if not db.locked then
self:StartMoving()
end
end)
f:SetHandler("OnMouseUp", function(self)
self:StopMovingOrResizing()
local _,a,_,b,x,y = self:GetAnchor()
db[self:GetName()].point = {["a"]=a, ["b"]=b, ["x"]=x, ["y"]=y}
end)
f:SetClampedToScreen(true)
f:SetDrawLayer(DL_BACKGROUND)
f.bg = wm:CreateControlFromVirtual("ZAM_Stats_"..module.."BG", f, "ZAM_StatsBGTemplate")
local fbg = f.bg
fbg:SetCenterColor(0, 0, 0, .4)
fbg:SetEdgeColor(0, 0, 0, 0)
fbg:SetDimensions(100, 30)
fbg:SetAnchorFill(f)
f.text = wm:CreateControlFromVirtual("ZAM_Stats_"..module.."Text", f, "ZAM_StatsTextTemplate")
local ftext = f.text
ftext:SetDimensions(100, 30)
ftext:SetAnchorFill(f)
ftext:SetVerticalAlignment(TEXT_ALIGN_CENTER)
ftext:SetText("test")
table.insert(modules, f)
--maybe change later to only return module (module.bg and module.text are there now anyway)
return f, ftext
end
function ZAM_Stats.RGBPercToHex(r,g,b)
r = r <= 1 and r >= 0 and r or 0
g = g <= 1 and g >= 0 and g or 0
b = b <= 1 and b >= 0 and b or 0
return string.format("%02x%02x%02x", r*255, g*255, b*255)
end
--maybe change this later so you just need to pass in the module, not its text object
function ZAM_Stats:SetModuleText(ftext, value, suffix)
ftext:SetText("|c"..ZAM_Stats.preHex..value.."|c"..ZAM_Stats.sufHex..suffix)
end
local function AddonLoaded()
db = ZAM_Stats.SetUpSavedVars()
ZAM_Stats.preHex = ZAM_Stats.RGBPercToHex(db.preColor.r,db.preColor.g,db.preColor.b)
ZAM_Stats.sufHex = ZAM_Stats.RGBPercToHex(db.sufColor.r,db.sufColor.g,db.sufColor.b)
--setup each module
for k,v in pairs(modules) do
ZAM_Stats.ConfigModule(v)
end
--send a callback to each module
CALLBACK_MANAGER:FireCallbacks("ZAM_Stats_Modules_Ready") --maybe switch to a per-module callback?
end
EVENT_MANAGER:RegisterForEvent("ZAM_Stats", EVENT_ADD_ON_LOADED, function(event, addon)
--EVENT_MANAGER:RegisterForEvent("ZAM_Stats", EVENT_PLAYER_ACTIVATED, function(event, addon)
if addon == "ZAM_Stats" then
AddonLoaded()
ZAM_Stats.RegisterOptions()
end
end)