Quantcast
--[[
##############################################################################
_____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
 ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
    ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
     _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
      __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
       _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
        ___\///////////___________\///___________\/////////_____\///////////_#
##############################################################################
S U P E R - V I L L A I N - U I   By: Munglunch                              #
##############################################################################

STATS:Extend EXAMPLE USAGE: MOD:Extend(newStat,eventList,onEvents,update,click,focus,blur)

##########################################################
LOCALIZED LUA FUNCTIONS
##########################################################
]]--
--[[ GLOBALS ]]--
local _G = _G;
local unpack 	= _G.unpack;
local select 	= _G.select;
--[[
##########################################################
GET ADDON DATA
##########################################################
]]--
local SuperVillain, L = unpack(select(2, ...));
local LDB = LibStub:GetLibrary("LibDataBroker-1.1");
--[[
##########################################################
GOLD STATS
##########################################################
]]--
local LoadStatBroker = function(MOD)
	local OnEnter, OnLeave, lastObj;
  	for dataName, dataObj in LDB:DataObjectIterator()do
	    OnEnter = nil;
	    OnLeave = nil;
	    lastObj = nil;
	    if dataObj.OnEnter then
	      	OnEnter = function(self)
				MOD:Tip(self)
				dataObj.OnTooltipShow(MOD.tooltip)
				MOD:ShowTip()
			end
	    elseif dataObj.OnTooltipShow then
	      	OnEnter = function(self)
				MOD:Tip(self)
				dataObj.OnTooltipShow(MOD.tooltip)
				MOD:ShowTip()
			end
	    end;
	    if dataObj.OnLeave then
			OnLeave = function(self)
				dataObj.OnLeave(self)
				MOD.tooltip:Hide()
			end
	    end;
	    local OnClick = function(self, e)
	      	dataObj.OnClick(self, e)
	    end;
	    local CallBack = function(_, name, _, value, _)
			if(value == nil or len(value) > 5 or value == "n / a" or name == value) then
				lastObj.text:SetText(value ~= "n / a" and value or name)
			else
				lastObj.text:SetText(name..": "..hexString..value.."|r")
			end
	    end;
	    local OnEvent = function(self)
			lastObj = self;
			LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_text", CallBack)
			LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_value", CallBack)
			LDB.callbacks:Fire("LibDataBroker_AttributeChanged_"..dataName.."_text", dataName, nil, dataObj.text, dataObj)
	    end;
	    MOD:Extend(dataName, {"PLAYER_ENTER_WORLD"}, OnEvent, nil, OnClick, OnEnter, OnLeave)
  	end
end
SuperVillain.Registry:Temp("SVStats", LoadStatBroker)