vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--## BY: Arina, 60 Warrior on Deathwing EU English.
--## Use With Caution! ;)

CS_ADDONORGANIZER_ADDONS_DISPLAYED = 22;
CS_ADDONORGANIZER_ADDONSLINE_HEIGHT = 16;
CS_AddOnOrganizer_Profiles = {};
CS_ADDONORGANIZER_VERSIONNUMBER = "1.1011";
BINDING_HEADER_CS_ADDONORGANIZER_SEP = "CS AddOnOrganizer";
BINDING_NAME_CS_ADDONORGANIZER_CONFIG = "Show / Hide";

local id;
local CS_AddOnOrganizer_AddOnList = {};

function CS_AddOnOrganizer_OnLoad()
        this:RegisterEvent("PLAYER_LOGIN"); 
        this:RegisterEvent("PLAYER_LOGOUT");
        
        tinsert(UISpecialFrames,"CS_AddOnOrganizer_List");
        
        
        SLASH_CS_ADDONORGANIZER1 = "/aoo";
        SlashCmdList["CS_ADDONORGANIZER"] = function(msg)
                CS_AddOnOrganizer_ListShowHide();
        end

end

function CS_AddOnOrganizer_OnEvent(event)
        if(event == "PLAYER_LOGIN")then
                DEFAULT_CHAT_FRAME:AddMessage("|CFFFFFFFFCS_AddOnOrganizer|r |CFF00FF00Loaded|r");
                --CS_AddOnOrganizer_Profiles = {[1] = {"Default (Only CS_AddOnOrganizer)","CS_AddOnOrganizer",},};
        end
end

function CS_AddOnOrganizer_ListShowHide()

        if (CS_AddOnOrganizer_List:IsVisible()) then
                HideUIPanel(CS_AddOnOrganizer_List_Profiles);
                HideUIPanel(CS_AddOnOrganizer_List);
        else
                CS_AddOnOrganizer_List_Title:SetText ("CS_AddOnOrganizer v."..CS_ADDONORGANIZER_VERSIONNUMBER);
                ShowUIPanel(CS_AddOnOrganizer_List);
                CS_AddOnOrganizer_GetList();
                CS_AddOnOrganizer_List_Update();
        end
end

function CS_AddOnOrganizer_GetList()
        local i;
        for i=1, GetNumAddOns(), 1 do
                local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(i);
                CS_AddOnOrganizer_AddOnList[i] = enabled;
        end
end


function CS_AddOnOrganizer_List_Update()
        local numaddons = GetNumAddOns();
        local i;
        CS_AddOnOrganizer_List_AddOnCount:SetText("AddOns: |CFFFFFFFF"..numaddons.."|r");
        CS_AddOnOrganizer_List_CountMiddle:SetWidth(CS_AddOnOrganizer_List_AddOnCount:GetWidth());

        FauxScrollFrame_Update(CS_AddOnOrganizer_List_Scroll, numaddons, CS_ADDONORGANIZER_ADDONS_DISPLAYED, CS_ADDONORGANIZER_ADDONSLINE_HEIGHT, nil, nil, nil, CS_AddOnOrganizer_List_HighlightFrame, 293, 316 )
        
        for i=1, CS_ADDONORGANIZER_ADDONS_DISPLAYED, 1 do
                local addonIndex = i + FauxScrollFrame_GetOffset(CS_AddOnOrganizer_List_Scroll);
                
                if ( addonIndex <= numaddons ) then
                        local addonLogTitle = getglobal("CS_AddOnOrganizer_List_Title"..i);
                        local addonTitleTag = getglobal("CS_AddOnOrganizer_List_Title"..i.."Tag");
                        local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(addonIndex);
                        
                        addonLogTitle:SetText(title);
                        addonLogTitle:SetNormalTexture("");
                        
                        local color = {r=0.7,g=0.7,b=0.7};
                        if(enabled and loadable)then
                                color = {r=1.0,g=1.0,b=0.5};
                        elseif(enabled and not loadable)then
                                color = {r=1.0,g=0.0,b=0.0};
                        end
                        
                        if(CS_AddOnOrganizer_AddOnList[addonIndex] == 1) then
                                addonTitleTag:SetText("Enabled");
                                if(enabled)then
                                        addonTitleTag:SetTextColor(1.0,0.7,0.0);
                                else
                                        addonTitleTag:SetTextColor(0.0,1.0,0.0);
                                end
                        else
                                addonTitleTag:SetText("Disabled");
                                if(not enabled)then
                                        addonTitleTag:SetTextColor(1.0,0.7,0.0);
                                else
                                        addonTitleTag:SetTextColor(1.0,0.0,0.0);
                                end
                        end
                        
                        addonLogTitle:SetTextColor(color.r, color.g, color.b);
                        addonLogTitle.r = color.r;
                        addonLogTitle.g = color.g;
                        addonLogTitle.b = color.b;
                        addonLogTitle:Show();
                end
        end
end

function CS_AddOnOrganizer_TitleButton_OnClick()
        local AddOnID = this:GetID() + FauxScrollFrame_GetOffset(CS_AddOnOrganizer_List_Scroll);
        local buttonID = this:GetID();
        local addonTitleTag = getglobal("CS_AddOnOrganizer_List_Title"..buttonID.."Tag");
        local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(AddOnID);
        
        if(CS_AddOnOrganizer_AddOnList[AddOnID] == 1) then
                addonTitleTag:SetText("Disabled");
                if(not enabled)then
                        addonTitleTag:SetTextColor(1.0,0.7,0.0);
                else
                        addonTitleTag:SetTextColor(1.0,0.0,0.0);
                end
                CS_AddOnOrganizer_AddOnList[AddOnID] = 0;
        else
                addonTitleTag:SetText("Enabled");
                if(enabled)then
                        addonTitleTag:SetTextColor(1.0,0.7,0.0);
                else
                        addonTitleTag:SetTextColor(0.0,1.0,0.0);
                end
                CS_AddOnOrganizer_AddOnList[AddOnID] = 1;
        end
end

function CS_AddOnOrganizer_TitleButton_OnEnter()
        local buttonID = this:GetID() + FauxScrollFrame_GetOffset(CS_AddOnOrganizer_List_Scroll);
        local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(buttonID);
        local dependencies = GetAddOnDependencies(buttonID);
        local loadondemand = IsAddOnLoadOnDemand(buttonID);
        
        --DEFAULT_CHAT_FRAME:AddMessage(buttonID);
        if (title == nil) then
                title = "No Title";
        end
        if (dependencies == nil) then
                dependencies = "No Dependencies";
        end
        if(notes == nil) then
                notes = "No Notes";
        end
        if(loadondemand) then
                loadondemand = "|CFF00FF00True|r";
        else
                loadondemand = "|CFFFF0000False|r";
        end
        
        if(loadable ~= nil)then
                GameTooltip_AddNewbieTip(name, 1.0, 1.0, 1.0, title.."\n"..notes.."\n|CFFFFFFFFAddon is Loadable:|r|CFF00FF00True|r\n".."|CFFFFFFFFLoadOnDemand:|r "..loadondemand.."\n|CFFFFFFFFDependencies:|r "..dependencies, 1);
        elseif(reason == "DISABLED") then
                GameTooltip_AddNewbieTip(name, 1.0, 1.0, 1.0, title.."\n"..notes.."\n|CFFFFFFFFAddon is Loadable:|r |CFFFF0000False|r\n|CFFFFFFFFReason:|r |CFFFF0000"..reason.."|r\n|CFFFFFFFFYou might still enable this addon.|r\n".."|CFFFFFFFFLoadOnDemand:|r "..loadondemand.."\n|CFFFFFFFFDependencies:|r "..dependencies, 1);
        else
                GameTooltip_AddNewbieTip(name, 1.0, 1.0, 1.0, title.."\n"..notes.."\n|CFFFFFFFFAddon is Loadable:|r|CFFFF0000 False|r\n|CFFFFFFFFReason:|r |CFFFF0000"..reason.."|r\n".."|CFFFFFFFFLoadOnDemand:|r "..loadondemand.."\n|CFFFFFFFFDependencies:|r "..dependencies, 1);
        end
end

function CS_AddOnOrganizer_AcceptButton_OnClick()
        local i;
        local numaddons = GetNumAddOns();
        local IsChanges = 0;
        local SaveIndex = 1;
        for i=1, numaddons, 1 do        
                local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(i);
                if(CS_AddOnOrganizer_AddOnList[i] ~= enabled) then
                        if (CS_AddOnOrganizer_AddOnList[i] == 1) then
                                EnableAddOn(i);
                        else
                                DisableAddOn(i);
                        end
                        IsChanges = 1;
                end
        end
        CS_AddOnOrganizer_ListShowHide();
        if(IsChanges == 1)then
                ReloadUI();
        end
end

function CS_AddOnOrganizer_ReloadUIButton()
        ReloadUI();
end

function CS_AddOnOrganizer_EnableAll()
        local i;
        local numaddons = GetNumAddOns();
        for i=1, numaddons, 1 do
                CS_AddOnOrganizer_AddOnList[i] = 1;
                if( i <= CS_ADDONORGANIZER_ADDONS_DISPLAYED)then
                        local addonTitleTag = getglobal("CS_AddOnOrganizer_List_Title"..i.."Tag");
                        local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(i);
                        addonTitleTag:SetText("Enabled");
                        if(enabled)then
                                addonTitleTag:SetTextColor(1.0,0.7,0.0);
                        else
                                addonTitleTag:SetTextColor(0.0,1.0,0.0);
                        end
                end
        end
end

function CS_AddOnOrganizer_DisableAll()
        local i;
        local numaddons = GetNumAddOns();
        for i=1, numaddons, 1 do
                CS_AddOnOrganizer_AddOnList[i] = 0;
                if( i <= CS_ADDONORGANIZER_ADDONS_DISPLAYED)then
                        local addonTitleTag = getglobal("CS_AddOnOrganizer_List_Title"..i.."Tag");
                        local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(i);
                        
                        addonTitleTag:SetText("Disabled");
                        if(not enabled)then
                                addonTitleTag:SetTextColor(1.0,0.7,0.0);
                        else
                                addonTitleTag:SetTextColor(1.0,0.0,0.0);
                        end
                end
        end
end

function CS_AddOnOrganizer_ProfilesShowHide()
        if (CS_AddOnOrganizer_List_Profiles:IsVisible()) then
                HideUIPanel(CS_AddOnOrganizer_List_Profiles);
        else
                ShowUIPanel(CS_AddOnOrganizer_List_Profiles);
        end
end

function CS_AddOnOrganizer_Profiles_ProfilesDropDown_OnLoad()
        UIDropDownMenu_SetWidth(220);
        UIDropDownMenu_Initialize(this,CS_AddOnOrganizer_InitializeDropDown);
        --DEFAULT_CHAT_FRAME:AddMessage(table.getn(CS_AddOnOrganizer_Profiles));

end

function CS_AddOnOrganizer_InitializeDropDown()
        local info;
        for i=1,table.getn(CS_AddOnOrganizer_Profiles) do       
                info = {};
                info.text = CS_AddOnOrganizer_Profiles[i][1];
                info.func = CS_AddOnOrganizer_LoadProfile;
                UIDropDownMenu_AddButton(info);
        end
end

function CS_AddOnOrganizer_LoadProfile()
        UIDropDownMenu_SetSelectedID(ProfilesDropDown, this:GetID());
        CS_AddOnOrganizer_DisableAll();
        local i;
        local numaddons = GetNumAddOns();
        id = this:GetID();
        for j=2,table.getn(CS_AddOnOrganizer_Profiles[this:GetID()]) do
                local loadname = CS_AddOnOrganizer_Profiles[this:GetID()][j];
                for i=1, numaddons, 1 do
                        local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(i);
                        local addonTitleTag = getglobal("CS_AddOnOrganizer_List_Title"..i.."Tag");
                        if (name == loadname) then
                                CS_AddOnOrganizer_AddOnList[i] = 1;
                        end
                end
        end
        CS_AddOnOrganizer_List_Update();
        SaveProfileEditBox:SetText(CS_AddOnOrganizer_Profiles[this:GetID()][1]);
end

function CS_AddOnOrganizer_SaveProfile()
        local i,j;
        local ProfileText = SaveProfileEditBox:GetText();
        local newKey;
        local found = false;
        
        if(not(ProfileText == "")) then
                
                newKey = table.getn(CS_AddOnOrganizer_Profiles) + 1;
                
                for i=1, table.getn(CS_AddOnOrganizer_Profiles) do
                        if (CS_AddOnOrganizer_Profiles[i][1] == ProfileText) then
                                newKey = i;                             
                                found = true;
                        end
                end
                
                if(not(found))then
                        CS_AddOnOrganizer_Profiles[newKey] = {[1] = SaveProfileEditBox:GetText()};
                        DEFAULT_CHAT_FRAME:AddMessage("|CFF00FF00CS_AddOnOrganizer|r - |CFFFFFFFF"..SaveProfileEditBox:GetText().."|r has been |CFF00FF00ADDED|r to profiles list!");
                else
                        DEFAULT_CHAT_FRAME:AddMessage("|CFF00FF00CS_AddOnOrganizer|r - |CFFFFFFFF"..SaveProfileEditBox:GetText().."|r has been |CFF00FF00MODIFIED|r in the profiles list!");
                end
                
                local numaddons = GetNumAddOns();
                j=2;
                for i=1, numaddons, 1 do
                        if(CS_AddOnOrganizer_AddOnList[i] == 1) then
                                CS_AddOnOrganizer_Profiles[newKey][j] = GetAddOnInfo(i);
                                j = j+1;
                        end             
                end
        else
                DEFAULT_CHAT_FRAME:AddMessage("|CFF00FF00CS_AddOnOrganizer|r - |CFFFF0000You have to write a name for the profile!|r");
        end
end

function CS_AddOnOrganizer_DeleteProfile()
        if (not(id == nil)) then
                
                DEFAULT_CHAT_FRAME:AddMessage("|CFF00FF00CS_AddOnOrganizer|r - |CFFFF0000DELETED ID#"..id.."!|r");
                table.remove(CS_AddOnOrganizer_Profiles,id);
                
                if(table.getn(CS_AddOnOrganizer_Profiles) == 0) then
                        CS_AddOnOrganizer_Profiles = {};
                        id=nil;
                end
        end
end