vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
        -- registers the mod with Cosmos
function CooldownCount_Register_Cosmos()
        if ( ( Cosmos_UpdateValue ) and ( Cosmos_RegisterConfiguration ) and ( CooldownCount_Cosmos_Registered == 0 ) ) then
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT",
                        "SECTION",
                        TEXT(COOLDOWNCOUNT_CONFIG_HEADER),
                        TEXT(COOLDOWNCOUNT_CONFIG_HEADER_INFO)
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_HEADER",
                        "SEPARATOR",
                        TEXT(COOLDOWNCOUNT_CONFIG_HEADER),
                        TEXT(COOLDOWNCOUNT_CONFIG_HEADER_INFO)
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_ENABLED",
                        "CHECKBOX",
                        TEXT(COOLDOWNCOUNT_ENABLED),
                        TEXT(COOLDOWNCOUNT_ENABLED_INFO),
                        CooldownCount_Toggle_Enabled,
                        CooldownCount_Enabled
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_ROGUE_STEALTH",
                        "CHECKBOX",
                        TEXT(COOLDOWNCOUNT_ROGUE_STEALTH),
                        TEXT(COOLDOWNCOUNT_ROGUE_STEALTH_INFO),
                        CooldownCount_Toggle_RogueStealth,
                        CooldownCount_RogueStealth
                );
                
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_NOSPACES",
                        "CHECKBOX",
                        TEXT(COOLDOWNCOUNT_NOSPACES),
                        TEXT(COOLDOWNCOUNT_NOSPACES_INFO),
                        CooldownCount_Toggle_NoSpaces,
                        CooldownCount_NoSpaces
                );
                CooldownCount_UseLongTimerDescriptions = 0;
                --[[
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_USELONGTIMERS",
                        "CHECKBOX",
                        TEXT(COOLDOWNCOUNT_USELONGTIMERS),
                        TEXT(COOLDOWNCOUNT_USELONGTIMERS_INFO),
                        CooldownCount_Toggle_UseLongTimers,
                        CooldownCount_UseLongTimerDescriptions
                );
                ]]--
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_FLASHSPEED",
                        "SLIDER",
                        TEXT(COOLDOWNCOUNT_FLASHSPEED),
                        TEXT(COOLDOWNCOUNT_FLASHSPEED_INFO),
                        function (checked, value) CooldownCount_SetFlashSpeed(value, true); end,
                        1,
                        CooldownCount_TimeBetweenFlashes,
                        0.1,
                        1,
                        COOLDOWNCOUNT_FLASHSPEED_SLIDER_DESCRIPTION,
                        0.1,
                        1,
                        COOLDOWNCOUNT_FLASHSPEED_SLIDER_APPEND,
                        1
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_USERSCALE",
                        "SLIDER",
                        TEXT(COOLDOWNCOUNT_USERSCALE),
                        TEXT(COOLDOWNCOUNT_USERSCALE_INFO),
                        function (checked, value) CooldownCount_SetUserScale(value, true); end,
                        1,
                        CooldownCount_UserScale,
                        0.1,
                        5,
                        COOLDOWNCOUNT_USERSCALE_SLIDER_DESCRIPTION,
                        0.1,
                        1,
                        COOLDOWNCOUNT_USERSCALE_SLIDER_APPEND,
                        100
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_ALPHA",
                        "SLIDER",
                        TEXT(COOLDOWNCOUNT_ALPHA),
                        TEXT(COOLDOWNCOUNT_ALPHA_INFO),
                        function (checked, value) CooldownCount_Set_Alpha(value, true); end,
                        1,
                        CooldownCountOptions.alpha,
                        0.01,
                        1,
                        COOLDOWNCOUNT_ALPHA_SLIDER_DESCRIPTION,
                        0.01,
                        1,
                        COOLDOWNCOUNT_ALPHA_SLIDER_APPEND,
                        100
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_HIDEUNTILTIMELEFT",
                        "SLIDER",
                        TEXT(COOLDOWNCOUNT_HIDEUNTILTIMELEFT),
                        TEXT(COOLDOWNCOUNT_HIDEUNTILTIMELEFT_INFO),
                        function (checked, value) CooldownCount_SetHideUntilTimeLeft(value, true); end,
                        1,
                        CooldownCount_HideUntilTimeLeft,
                        0,
                        60,
                        COOLDOWNCOUNT_FLASHSPEED_SLIDER_DESCRIPTION,
                        1,
                        1,
                        COOLDOWNCOUNT_FLASHSPEED_SLIDER_APPEND,
                        1
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_NORMALCOLORSET",
                        "BUTTON",
                        COOLDOWNCOUNT_NORMALCOLOR_SET,
                        COOLDOWNCOUNT_NORMALCOLOR_SET_INFO,
                        CooldownCount_NormalColorSetButton,
                        0,
                        0,
                        0,
                        0,
                        COOLDOWNCOUNT_SETTEXT
                );
                Cosmos_RegisterConfiguration(
                        "COS_COOLDOWNCOUNT_FLASHCOLORSET",
                        "BUTTON",
                        COOLDOWNCOUNT_FLASHCOLOR_SET,
                        COOLDOWNCOUNT_FLASHCOLOR_SET_INFO,
                        CooldownCount_FlashColorSetButton,
                        0,
                        0,
                        0,
                        0,
                        COOLDOWNCOUNT_SETTEXT
                );
                CooldownCount_Cosmos_Registered = 1;
        end
end


function CooldownCount_Extract_NextParameter(msg)
        local params = msg;
        local command = params;
        local index = strfind(command, " ");
        if ( index ) then
                command = strsub(command, 1, index-1);
                params = strsub(params, index+1);
        else
                params = "";
        end
        return command, params;
end


-- registers the mod with the system, integrating it with slash commands and "master" AddOns
function CooldownCount_Register()
        if ( Cosmos_RegisterConfiguration ) then
                CooldownCount_Register_Cosmos();
        else
                SlashCmdList["COOLDOWNCOUNTSLASHMAIN"] = CooldownCount_Main_ChatCommandHandler;
                SLASH_COOLDOWNCOUNTSLASHMAIN1 = "/cooldowncount";
                SLASH_COOLDOWNCOUNTSLASHMAIN2 = "/cc";
                --[[
                SlashCmdList["COOLDOWNCOUNTSLASHENABLE"] = CooldownCount_Enable_ChatCommandHandler;
                SLASH_COOLDOWNCOUNTSLASHENABLE1 = "/cooldowncountenable";
                SLASH_COOLDOWNCOUNTSLASHENABLE2 = "/ccenable";
                SLASH_COOLDOWNCOUNTSLASHENABLE3 = "/cce";
                SLASH_COOLDOWNCOUNTSLASHENABLE4 = "/cooldowncountdisable";
                SLASH_COOLDOWNCOUNTSLASHENABLE5 = "/ccdisable";
                SLASH_COOLDOWNCOUNTSLASHENABLE6 = "/ccd";
                SLASH_COOLDOWNCOUNTSLASHENABLE7 = "/cooldowncounttoggle";
                SLASH_COOLDOWNCOUNTSLASHENABLE8 = "/cctoggle";
                SLASH_COOLDOWNCOUNTSLASHENABLE9 = "/cct";
                SlashCmdList["COOLDOWNCOUNTSLASHFLASHSPEED"] = CooldownCount_FlashSpeed_ChatCommandHandler;
                SLASH_COOLDOWNCOUNTSLASHFLASHSPEED1 = "/cooldowncountflashspeed";
                SLASH_COOLDOWNCOUNTSLASHFLASHSPEED2 = "/ccflashspeed";
                SLASH_COOLDOWNCOUNTSLASHFLASHSPEED3 = "/ccfs";
                SlashCmdList["COOLDOWNCOUNTSLASHSCALE"] = CooldownCount_Scale_ChatCommandHandler;
                SLASH_COOLDOWNCOUNTSLASHSCALE1 = "/cooldowncountscale";
                SLASH_COOLDOWNCOUNTSLASHSCALE2 = "/ccscale";
                SLASH_COOLDOWNCOUNTSLASHSCALE3 = "/ccs";
                ]]--
        end
        this:RegisterEvent("ACTIONBAR_PAGE_CHANGED");

        if ( Cosmos_RegisterChatCommand ) then
                local CooldownCountMainCommands = {"/cooldowncount", "/cc", "/cooldowncountenable", "/ccenable", "/cce", "/cooldowncountdisable", "/ccdisable", "/ccd","/cooldowncounttoggle","/cctoggle","/cct"};
                Cosmos_RegisterChatCommand (
                        "COOLDOWNCOUNT_MAIN_COMMANDS", -- Some Unique Group ID
                        CooldownCountMainCommands, -- The Commands
                        CooldownCount_Main_ChatCommandHandler,
                        COOLDOWNCOUNT_CHAT_COMMAND_MAIN_INFO -- Description String
                );
                --[[
                local CooldownCountEnableCommands = {"/cooldowncountenable", "/ccenable", "/cce", "/cooldowncountdisable", "/ccdisable", "/ccd","/cooldowncounttoggle","/cctoggle","/cct"};
                Cosmos_RegisterChatCommand (
                        "COOLDOWNCOUNT_ENABLE_COMMANDS", -- Some Unique Group ID
                        CooldownCountEnableCommands, -- The Commands
                        CooldownCount_Enable_ChatCommandHandler,
                        COOLDOWNCOUNT_CHAT_COMMAND_ENABLE_INFO -- Description String
                );
                local CooldownCountFlashSpeedCommands = {"/cooldowncountflashspeed", "/ccflashspeed", "/ccfs"};
                Cosmos_RegisterChatCommand (
                        "COOLDOWNCOUNT_FLASHSPEED_COMMANDS", -- Some Unique Group ID
                        CooldownCountFlashSpeedCommands, -- The Commands
                        CooldownCount_FlashSpeed_ChatCommandHandler,
                        COOLDOWNCOUNT_CHAT_COMMAND_FLASHSPEED_INFO -- Description String
                );
                local CooldownCountScaleCommands = {"/cooldowncountscale", "/ccscale", "/ccs"};
                Cosmos_RegisterChatCommand (
                        "COOLDOWNCOUNT_SCALE_COMMANDS", -- Some Unique Group ID
                        CooldownCountScaleCommands, -- The Commands
                        CooldownCount_Scale_ChatCommandHandler,
                        COOLDOWNCOUNT_CHAT_COMMAND_SCALE_INFO -- Description String
                );
                ]]--
        end
end

function CooldownCount_GetChatValue(msg)
        msg = string.lower(msg);
        -- Toggle appropriately
        if ( (string.find(msg, COOLDOWNCOUNT_PARAM_ON)) or ((string.find(msg, '1')) and (not string.find(msg, '-1')) ) ) then
                return 1;
        else
                if ( (string.find(msg, COOLDOWNCOUNT_PARAM_OFF)) or (string.find(msg, '0')) ) then
                        return 0;
                else
                        return -1;
                end
        end
end


function CooldownCount_Enable_ChatCommandHandler(msg)
        CooldownCount_Toggle_Enabled(1);
end

function CooldownCount_Disable_ChatCommandHandler(msg)
        CooldownCount_Toggle_Enabled(0);
end

function CooldownCount_Set_ChatCommandHandler(msg)
        local value = CooldownCount_GetChatValue(msg);
        CooldownCount_Toggle_Enabled(value);
end

function CooldownCount_NoSpaces_ChatCommandHandler(msg)
        local value = CooldownCount_GetChatValue(msg);
        CooldownCount_Toggle_NoSpaces(value);
end

function CooldownCount_UseLongTimers_ChatCommandHandler(msg)
        local value = CooldownCount_GetChatValue(msg);
        CooldownCount_Toggle_UseLongTimers(value);
end

function CooldownCount_Scale_ChatCommandHandler(msg)
        local scale = nil;
        if ( msg ) and ( strlen(msg) > 0 ) then
                scale = tonumber(msg);
        end
        if ( scale ) then
                CooldownCount_SetUserScale(scale);
        else
                CooldownCount_Print(COOLDOWNCOUNT_CHAT_USERSCALE_NOT_SPECIFIED);
        end
end

function CooldownCount_Alpha_ChatCommandHandler(msg)
        local alpha = nil;
        if ( msg ) and ( strlen(msg) > 0 ) then
                alpha = tonumber(msg);
        end
        if ( alpha ) then
                CooldownCount_Set_Alpha(alpha);
        else
                CooldownCount_Print(COOLDOWNCOUNT_CHAT_ALPHA_NOT_SPECIFIED);
        end
end

function CooldownCount_HideUntilTimeLeft_ChatCommandHandler(msg)
        local timeLeft = nil;
        if ( msg ) and ( strlen(msg) > 0 ) then
                timeLeft = tonumber(msg);
        end
        if ( timeLeft ) then
                CooldownCount_SetHideUntilTimeLeft(timeLeft);
        else
                CooldownCount_Print(COOLDOWNCOUNT_CHAT_HIDEUNTILTIMELEFT_NOT_SPECIFIED);
        end
end

-- Handles chat - e.g. slashcommands - enabling/disabling the CooldownCount
function CooldownCount_FlashSpeed_ChatCommandHandler(msg)
        msg = string.lower(msg);
        
        -- Toggle appropriately
        local num = tonumber(msg);
        if ( num ) then
                CooldownCount_SetFlashSpeed(num);
        end
end

function CooldownCount_PrintUsage()
        for k, v in COOLDOWNCOUNT_SLASH_USAGE do
                CooldownCount_Print(v);
        end
end

function CooldownCount_Main_ChatCommandHandler(msg)
        local cmd, params = CooldownCount_Extract_NextParameter(msg);
        cmd = string.lower(cmd);
        if ( string.find(cmd, COOLDOWNCOUNT_SLASH_ENABLE ) ) then
                return CooldownCount_Enable_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_DISABLE ) ) then
                return CooldownCount_Disable_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_SET ) ) then
                return CooldownCount_Set_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_FLASHSPEED ) ) then
                return CooldownCount_FlashSpeed_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_SCALE ) ) then
                return CooldownCount_Scale_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_ALPHA ) ) then
                return CooldownCount_Alpha_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_NOSPACES ) ) then
                return CooldownCount_NoSpaces_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_NORMALCOLOR ) ) then
                return CooldownCount_NormalColorSetButton(true);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_FLASHCOLOR ) ) then
                return CooldownCount_FlashColorSetButton(true);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_USELONGTIMERS ) ) then
                return CooldownCount_UseLongTimers_ChatCommandHandler(params);
        elseif ( string.find(cmd, COOLDOWNCOUNT_SLASH_HIDEUNTILTIMELEFT ) ) then
                return CooldownCount_HideUntilTimeLeft_ChatCommandHandler(params);
        else
                CooldownCount_PrintUsage();
                return;
        end
end


function CooldownCount_LoadOptions()
        if ( CooldownCount_Cosmos_Registered == 0 ) then
                local value = CooldownCount_Enabled;
                if (value == nil ) then
                        -- defaults to off
                        value = 0;
                end
                CooldownCount_Toggle_Enabled(value);
                
                local value = CooldownCount_TimeBetweenFlashes;
                if (value == nil ) then
                        value = 0.25;
                end
                CooldownCount_SetFlashSpeed(value);
                
                local value = CooldownCount_UserScale;
                if (value == nil ) then
                        value = 2;
                end
                CooldownCount_SetUserScale(value);
                
                local value = CooldownCount_UseLongTimerDescriptions;
                if (value == nil ) then
                        value = 1;
                end
                CooldownCount_Toggle_UseLongTimers(value);
                if ( CooldownCountOptions ) then
                        CooldownCount_Set_Alpha(CooldownCountOptions.alpha);
                        CooldownCount_Set_NormalColor(CooldownCountOptions.color.normal);
                        CooldownCount_Set_FlashColor(CooldownCountOptions.color.flash);
                end
                local value = CooldownCount_NoSpaces;
                if ( value == nil ) then
                        value = 0;
                end
                CooldownCount_Toggle_NoSpaces(value);
                local value = CooldownCount_HideUntilTimeLeft;
                if ( value == nil ) then
                        value = 0;
                end
                CooldownCount_SetHideUntilTimeLeft(value);
        end
end