vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[

        BuffTimers: Mini timers for the top right buff icons
                copyright 2004 by Telo
        
        - Displays small timer text below each of the top right buff and debuff icons
        
]]

--------------------------------------------------------------------------------------------------
-- Local variables
--------------------------------------------------------------------------------------------------

-- Function hooks
local lOriginal_BuffButton_Update;
local lOriginal_BuffButton_OnUpdate;

-- Track whether we've moved the buff buttons yet or not
local lMovedButtons;

--------------------------------------------------------------------------------------------------
-- Internal functions
--------------------------------------------------------------------------------------------------

local function lSetTimeText(button, time)
        local d, h, m, s;
        local text;
        
        if( time <= 0 ) then
                text = "";
        elseif( time < 3600 ) then
                d, h, m, s = ChatFrame_TimeBreakDown(time);
                text = format("%02d:%02d", m, s);
        else
                text = "1 hr+";
        end
        
        button:SetText(text);
end

local function lGetField(name)
        local s, e, number = string.find(name, "BuffButton(%d+)");
        return getglobal("BuffTimer"..number.."Time");
end

--------------------------------------------------------------------------------------------------
-- OnFoo functions
--------------------------------------------------------------------------------------------------

function BuffTimers_OnLoad()
        -- Hook the button functions we need to override
        lOriginal_BuffButton_Update = BuffButton_Update;
        BuffButton_Update = BuffTimers_BuffButton_Update;
        lOriginal_BuffButton_OnUpdate = BuffButton_OnUpdate;
        BuffButton_OnUpdate = BuffTimers_BuffButton_OnUpdate;

        if( DEFAULT_CHAT_FRAME ) then
                DEFAULT_CHAT_FRAME:AddMessage("Telo's BuffTimers AddOn loaded");
        end
        UIErrorsFrame:AddMessage("Telo's BuffTimers AddOn loaded", 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
end

function BuffTimers_OnShow()
        -- Move the buff buttons slightly to accomodate our timer text
        if( not lMovedButtons ) then
                local iButton;
                
                getglobal("BuffButton8"):SetPoint("TOP", "BuffButton0", "BOTTOM", 0, -11);
                for iButton = 9, 15 do
                        getglobal("BuffButton"..iButton):SetPoint("RIGHT", "BuffButton"..(iButton - 1), "LEFT", -5, 0);
                end
                getglobal("BuffButton16"):SetPoint("TOP", "BuffButton8", "BOTTOM", 0, -11);
                for iButton = 17, 23 do
                        getglobal("BuffButton"..iButton):SetPoint("RIGHT", "BuffButton"..(iButton - 1), "LEFT", -5, 0);
                end
        
                lMovedButtons = 1;
        end
end

function BuffTimers_BuffButton_Update()
        lOriginal_BuffButton_Update();
        
        if( this.untilCancelled ) then
                lGetField(this:GetName()):SetText("");
        end
end

function BuffTimers_BuffButton_OnUpdate()
        lOriginal_BuffButton_OnUpdate();
        
        if( BuffFrameUpdateTime <= 0 ) then
                lSetTimeText(lGetField(this:GetName()), GetPlayerBuffTimeLeft(this.buffIndex));
        end
end