vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
function IMBA_Options_OnLoad()
        this:SetBackdropBorderColor(1, 1, 1, 1);
        this:SetBackdropColor(0.0,0.0,0.0,0.6);
        IMBA_Options_Update();
        this:RegisterEvent("VARIABLES_LOADED");

        IMBA_Options_Title:SetText("IMBA Options "..IMBA_Version);
        this:SetScale(0.9);
end

--Taken from CTRA
function IMBA_SortTable(t1, t2)
        local locs = { };
        for k, v in IMBA_Locations do
                locs[v[1]] = k;
        end
        if ( t1[2] and t2[2] ) then
                return locs[t1[1]] < locs[t2[1]];
        else
                local loc1, loc2;
                if ( t1[2] ) then
                        loc1 = locs[t1[1]];
                else
                        loc1 = locs[t1[4]];
                end
                if ( t2[2] ) then
                        loc2 = locs[t2[1]];
                else
                        loc2 = locs[t2[4]];
                end
                if ( loc1 == loc2 ) then
                        if ( t1[2] or t2[2] ) then
                                return (t1[2]);
                        else
                                return t1[1] < t2[1];
                        end
                else
                        return loc1 < loc2;
                end
        end
end

function IMBA_CalculateEntries()
        local locIndexes = { };
        local tbl = { };
        local numPerLoc = { };
        
        -- Calculate number of mods per location
        for k, v in IMBA_Addons do
                local loc = v.Location;
                if ( not loc ) then
                        loc = "Other";
                end
                if ( not numPerLoc[loc] ) then
                        numPerLoc[loc] = 1;
                else
                        numPerLoc[loc] = numPerLoc[loc] + 1;
                end
        end
        -- Populate the locIndexes table with the locations we have
        for k, v in IMBA_Locations do
                -- Only add if there are mods for it
                if ( numPerLoc[v[1]] ) then
                        locIndexes[v[1]] = v[2];
                        tinsert(tbl, { v[1], 1, v[2] });
                end
        end
        
        -- Calculate which records to add
        for k, v in IMBA_Addons do
                if ( not v.Location ) then
                        v.Location = "Other";
                end
                if ( locIndexes[v.Location] and locIndexes[v.Location] == 1 ) then
                        tinsert(tbl, { k, nil, v, v.Location });
                end
        end
        
        -- Sort the table
        table.sort(tbl, IMBA_SortTable);
        
        return tbl, numPerLoc;
end


function IMBA_Options_Update()
        local tbl, numPerLoc = IMBA_CalculateEntries();
        local numEntries = getn(tbl);
        -- ScrollFrame update
        FauxScrollFrame_Update(IMBA_Options_BossFrame_ScrollFrame, numEntries, 8, 25 );
        
        for i=1, 8, 1 do
                local obj = getglobal("IMBA_Options_BossFrame_BossMod" .. i);
                local nameText = getglobal("IMBA_Options_BossFrame_BossMod" .. i .. "Name");
                local descriptText = getglobal("IMBA_Options_BossFrame_BossMod" .. i .. "Descript");
                local statusText = getglobal("IMBA_Options_BossFrame_BossMod" .. i .. "Status");
                local line = getglobal("IMBA_Options_BossFrame_BossMod" .. i .. "Line");
                local dropdown = getglobal("IMBA_Options_BossFrame_BossMod" .. i .. "Menu");
                local plusMinus = getglobal("IMBA_Options_BossFrame_BossMod" .. i .. "ShowHide");
                local prevLine = getglobal("IMBA_Options_BossFrame_BossMod" .. i-1 .. "Line");
                
                local index = i + FauxScrollFrame_GetOffset(IMBA_Options_BossFrame_ScrollFrame); 

                if ( index <= numEntries ) then
                        obj:Show();
                        line:Hide();
                        if ( not tbl[index][2] ) then
                                -- Not a header
                                obj.header = nil;
                                nameText:SetText(tbl[index][1]);
                                nameText:SetTextColor(0.5, 0.5, 0.5);
                                nameText:ClearAllPoints();
                                nameText:SetPoint("TOPLEFT", obj:GetName(), "TOPLEFT", 45, 0);
                                plusMinus:Hide();
                                if ( tbl[index][3].Active ) then
                                        statusText:SetText("On");
                                        statusText:SetTextColor(0, 1, 0);
                                else                                    
                                        statusText:SetText("Off");
                                        statusText:SetTextColor(1, 0, 0);
                                end

                                if IMBA_CheckIfCanActivate(tbl[index][1]) then
                                        statusText:Show();
                                else
                                        statusText:Hide();
                                end

                                if ( tbl[index][3].Description ) then
                                        descriptText:SetText(tbl[index][3].Description);
                                else
                                        descriptText:SetText("");
                                end
                                obj.index = tbl[index][1];
                                if ( not obj.hasBeenInitialized ) then
                                        UIDropDownMenu_Initialize(dropdown,  IMBA_InitDropDown, "MENU");
                                        obj.hasBeenInitialized = 1;
                                end
                        else
                                if ( prevLine ) then
                                        prevLine:Show();
                                end
                                -- Header
                                obj.header = 1;
                                obj.headername = tbl[index][1];
                                local num = numPerLoc[tbl[index][1]];
                                if ( not num ) then
                                        num = 0;
                                end
                                plusMinus:Show();
                                if ( tbl[index][3] == 1 ) then
                                        if ( obj.mouseIsOver ) then
                                                GameTooltip:SetText("Click to contract");
                                        end
                                        plusMinus:SetText("-");
                                        obj.expanded = 1;
                                else
                                        if ( obj.mouseIsOver ) then
                                                GameTooltip:SetText("Click to expand");
                                        end
                                        plusMinus:SetText("+");
                                        obj.expanded = nil;
                                end
                                nameText:SetText(tbl[index][1] .. " (" .. num .. ")");
                                nameText:SetTextColor(1, 1, 1);
                                nameText:ClearAllPoints();
                                nameText:SetPoint("LEFT", obj:GetName(), "LEFT", 12, 0);
                                statusText:SetText("");
                                descriptText:SetText("");
                        end
                else
                        obj:Hide();
                end
        end
end

function IMBA_AddonVarClicked()
        if IMBA_SavedVariables.Mods[this.value[1]]==nil then
                IMBA_SavedVariables.Mods[this.value[1]]={};
        end
        if IMBA_SavedVariables.Mods[this.value[1]].Var==nil then
                IMBA_SavedVariables.Mods[this.value[1]].Var={};
        end
        if IMBA_SavedVariables.Mods[this.value[1]].Var[this.value[2]] then
                IMBA_SavedVariables.Mods[this.value[1]].Var[this.value[2]]=false;
        else
                IMBA_SavedVariables.Mods[this.value[1]].Var[this.value[2]]=true;
        end
end

function IMBA_InitDropDown()
        local modName = getglobal(UIDROPDOWNMENU_INIT_MENU):GetParent().index;
        local info = {};
        
        info.text = modName;
        info.isTitle = 1;
        info.justifyH = "CENTER";
        info.notCheckable = 1;
        UIDropDownMenu_AddButton(info);
        
        if IMBA_CheckIfCanActivate(modName) then
                info = { };
                info.text = "Enable mod";
                info.tooltipTitle = "Enable mod";
                info.tooltipText = "Enables the mod, turning on all enabled options.";
                info.checked = IMBA_Addons[modName].Active;
                info.func = IMBA_EnableMod;
                info.keepShownOnClick = 1;
                info.value = modName;
                UIDropDownMenu_AddButton(info); 
        end

        if IMBA_Addons[modName].MainFrame then
                info = { };
                info.text = "Visible";
                info.tooltipTitle = "Visible";
                info.tooltipText = "Toggles Visibility on the Addon. (If the addon is enabled it will auto become visible at the beginning of the boss fight)";
                info.checked = IMBA_SavedVariables.Mods[modName].Visible;
                info.func = IMBA_ToggleModVisibility;
                info.keepShownOnClick = 1;
                info.value = modName;
                UIDropDownMenu_AddButton(info); 
        end

        --if IMBA_CheckIfCanActivate(modName) then
        --      info = { };
        --      info.text = "Test mod";
        --      info.tooltipTitle = "Test mod";
        --      info.tooltipText = "Tests the mod, initializing it";
        --      info.keepShownOnClick = 1;
        --      info.checked = 0;
        --      info.func = IMBA_TestMod;
        --      info.value = modName;
        --      UIDropDownMenu_AddButton(info); 
        --end

        if IMBA_Addons[modName].Options then
                for k, v in IMBA_Addons[modName].OptionsOrder do
                        option=IMBA_Addons[modName].Options[v];
                        info = { };
                        info.text = option.text;
                        info.keepShownOnClick = 1;
                        info.checked = option.valuefunc();
                        info.func = option.func;
                        UIDropDownMenu_AddButton(info); 
                end
        end
        if IMBA_Addons[modName].VarText then
                for k, option in IMBA_Addons[modName].OptionsOrder2 do
                        info = { };
                        info.text = IMBA_Addons[modName].VarText[option];
                        info.keepShownOnClick = 1;
                        if IMBA_SavedVariables.Mods[modName].Var==nil then
                                IMBA_SavedVariables.Mods[modName].Var={};
                        end
                        info.checked = IMBA_SavedVariables.Mods[modName].Var[option];
                                                
                        info.func = IMBA_AddonVarClicked;
                        info.value = {modName,option};
                        UIDropDownMenu_AddButton(info); 
                end
        end
end

-- Enable/Disable mod
function IMBA_EnableMod()
        IMBA_Addons[this.value].Active = not IMBA_Addons[this.value].Active;
        IMBA_SavedVariables.Mods[this.value].Active = IMBA_Addons[this.value].Active;
        IMBA_Options_Update();
end

-- Tests the Mod
function IMBA_TestMod()
        if IMBA_Addons[this.value].RegenActivator then
                getglobal(IMBA_Addons[this.value].RegenActivator)();
        elseif IMBA_Addons[this.value].YellActivator then
                getglobal(IMBA_Addons[this.value].YellActivator)(IMBA_Addons[this.value].TestYell);
        end
end

function IMBA_ToggleModVisibility()
        IMBA_SavedVariables.Mods[this.value].Visible = not IMBA_SavedVariables.Mods[this.value].Visible;
        if IMBA_SavedVariables.Mods[this.value].Visible then
                getglobal(IMBA_Addons[this.value].MainFrame):Show();
        else
                getglobal(IMBA_Addons[this.value].MainFrame):Hide();
        end
end


function IMBA_ToggleHeader(name)
        for k, v in IMBA_Locations do
                if ( v[1] == name ) then
                        if ( v[2] == 1 ) then
                                IMBA_Locations[k][2] = 0;
                        else
                                IMBA_Locations[k][2] = 1;
                        end
                        break;
                end
        end
        IMBA_Options_Update();
end

function IMBA_Options_OnEvent(event)
        if event=="VARIABLES_LOADED" then
                IMBA_Options_Update();
        end
end

function IMBA_FrameSettingsDropDown_OnLoad()
        UIDropDownMenu_Initialize(this, IMBA_FrameSettingsDropDown_Initialize);
end

function IMBA_FrameSettingsDropDown_Initialize()        

        for i=1,2,1 do
                info = {};
                info.text = IMBA_BG[i].name;
                info.value = i;
                info.func = IMBA_FrameSettingsDropDown_OnClick;
                UIDropDownMenu_AddButton(info);
        end

        if IMBA_SavedVariables.FrameType==nil then
                IMBA_SavedVariables.FrameType=1;
        end
        
        UIDropDownMenu_SetSelectedID(IMBA_Options_GraphicsFrame_FrameSettings_DropDown,IMBA_SavedVariables.FrameType);
end

function IMBA_FrameSettingsDropDown_OnClick()
        UIDropDownMenu_SetSelectedValue(IMBA_Options_GraphicsFrame_FrameSettings_DropDown, this.value);
        IMBA_SavedVariables.FrameType=this.value;
        IMBA_SetBackdrops(this.value);
end

function IMBA_BarSettingsDropDown_OnLoad()
        UIDropDownMenu_Initialize(this, IMBA_BarSettingsDropDown_Initialize);
end


function IMBA_BarSettingsDropDown_Initialize()  

        for i=1,5,1 do
                info = {};
                info.text = IMBA_BarTextures[i].name;
                info.value = i;
                info.func = IMBA_BarSettingsDropDown_OnClick;
                UIDropDownMenu_AddButton(info);
        end
        
        if IMBA_SavedVariables.BarTextureNum==nil then
                IMBA_SavedVariables.BarTextureNum=1;
        end

        UIDropDownMenu_SetSelectedID(IMBA_Options_GraphicsFrame_BarSettings_DropDown,IMBA_SavedVariables.BarTextureNum);
end

function IMBA_BarSettingsDropDown_OnClick()
        UIDropDownMenu_SetSelectedValue(IMBA_Options_GraphicsFrame_BarSettings_DropDown, this.value);
        IMBA_SavedVariables.BarTextureNum=this.value;
end

function IMBA_ShowModOptions()
        IMBA_Options_BossFrame:Show();
        IMBA_Options_GraphicsFrame:Hide();
end

function IMBA_ShowGraphicsOptions()
        IMBA_SetupOptionColors();
        IMBA_Options_BossFrame:Hide();
        IMBA_Options_GraphicsFrame:Show();
end

function IMBA_SetupOptionColors()
        if IMBA_SavedVariables.Colors["FrameBG"]==nil then
                IMBA_SavedVariables.Colors["FrameBG"]={r=0,g=0,b=0,a=0.6};
        end
        if IMBA_SavedVariables.Colors["FrameBorder"]==nil then
                IMBA_SavedVariables.Colors["FrameBorder"]={r=1,g=1,b=1,a=1};
        end
        if IMBA_SavedVariables.Colors["BarStart"]==nil then
                IMBA_SavedVariables.Colors["BarStart"]={r=1,g=1,b=1};
        end
        if IMBA_SavedVariables.Colors["BarEnd"]==nil then
                IMBA_SavedVariables.Colors["BarEnd"]={r=1,g=1,b=1};
        end
        IMBA_Options_GraphicsFrame_FrameSettings_BGColor.color=IMBA_SavedVariables.Colors["FrameBG"];
        IMBA_Options_GraphicsFrame_FrameSettings_BGColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b);
        IMBA_Options_GraphicsFrame_FrameSettings_BorderColor.color=IMBA_SavedVariables.Colors["FrameBorder"];
        IMBA_Options_GraphicsFrame_FrameSettings_BorderColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b);
        IMBA_Options_GraphicsFrame_BarSettings_StartColor.color=IMBA_SavedVariables.Colors["BarStart"];
        IMBA_Options_GraphicsFrame_BarSettings_StartColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarStart"].r,IMBA_SavedVariables.Colors["BarStart"].g,IMBA_SavedVariables.Colors["BarStart"].b);
        IMBA_Options_GraphicsFrame_BarSettings_EndColor.color=IMBA_SavedVariables.Colors["BarEnd"]
        IMBA_Options_GraphicsFrame_BarSettings_EndColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarEnd"].r,IMBA_SavedVariables.Colors["BarEnd"].g,IMBA_SavedVariables.Colors["BarEnd"].b);
        IMBA_Options_GraphicsFrame_BarSettings_InnerColor.color=IMBA_SavedVariables.Colors["BarInner"];
        IMBA_Options_GraphicsFrame_BarSettings_InnerColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarInner"].r,IMBA_SavedVariables.Colors["BarInner"].g,IMBA_SavedVariables.Colors["BarInner"].b);
        IMBA_Options_GraphicsFrame_BarSettings_BorderColor.color=IMBA_SavedVariables.Colors["BarBorder"]
        IMBA_Options_GraphicsFrame_BarSettings_BorderColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarBorder"].r,IMBA_SavedVariables.Colors["BarBorder"].g,IMBA_SavedVariables.Colors["BarBorder"].b);

        IMBA_Options_GraphicsFrame_BarSettings_CustomColors:SetChecked(IMBA_SavedVariables.CustomBarColors)
        IMBA_Options_GraphicsFrame_FrameSettings_CloseButtons:SetChecked(IMBA_SavedVariables.HideClose)
        IMBA_Options_GraphicsFrame_HideMinimapIcon:SetChecked(IMBA_SavedVariables.HideMinimapIcon)
        IMBA_Options_GraphicsFrame_ShowAlertWindow:SetChecked(IMBA_SavedVariables.ShowAlertWindow)
end

function IMBA_LoadDefault_FrameSettings()
        IMBA_SavedVariables.FrameType=1;
        IMBA_SavedVariables.Colors["FrameBG"]={r=0,g=0,b=0,a=0.6};
        IMBA_SavedVariables.Colors["FrameBorder"]={r=1,g=1,b=1,a=1};
        IMBA_Options_GraphicsFrame_FrameSettings_BGColor.color=IMBA_SavedVariables.Colors["FrameBG"];
        IMBA_Options_GraphicsFrame_FrameSettings_BGColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b);
        IMBA_Options_GraphicsFrame_FrameSettings_BorderColor.color=IMBA_SavedVariables.Colors["FrameBorder"];
        IMBA_Options_GraphicsFrame_FrameSettings_BorderColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b);
        IMBA_SetBackdrops(IMBA_SavedVariables.FrameType);
        IMBA_SavedVariables.HideClose=false;
        IMBA_ShowCloseButtons();
        IMBA_Options_GraphicsFrame_FrameSettings_CloseButtons:SetChecked(false)
end

function IMBA_FrameColorsChanged()
        IMBA_SetBackdrops(IMBA_SavedVariables.FrameType);
end

function IMBA_BarColorsChanged()
        IMBA_SavedVariables.Colors["BarStart"]=IMBA_Options_GraphicsFrame_BarSettings_StartColor.color;
        IMBA_SavedVariables.Colors["BarEnd"]=IMBA_Options_GraphicsFrame_BarSettings_EndColor.color;
end

function IMBA_BarColors2Changed()
        IMBA_SavedVariables.Colors["BarInner"]=IMBA_Options_GraphicsFrame_BarSettings_InnerColor.color;
        IMBA_SavedVariables.Colors["BarBorder"]=IMBA_Options_GraphicsFrame_BarSettings_BorderColor.color;
        IMBA_BarColorNumber=IMBA_BarColorNumber+1;
end

function IMBA_CustomColors_Clicked()
        IMBA_SavedVariables.CustomBarColors=IMBA_Options_GraphicsFrame_BarSettings_CustomColors:GetChecked()
        IMBA_BarColorNumber=IMBA_BarColorNumber+1;
end

function IMBA_LoadDefault_BarSettings()
        IMBA_SavedVariables.Colors["BarStart"]={r=1,g=1,b=1};
        IMBA_SavedVariables.Colors["BarEnd"]={r=1,g=1,b=1};
        IMBA_SavedVariables.Colors["BarInner"]={r=0.4,g=0.4,b=0.4,a=0.6};
        IMBA_SavedVariables.Colors["BarBorder"]={r=0.9,g=0.9,b=0.9,a=0.6};
        IMBA_SavedVariables.CustomBarColors=nil;
        IMBA_BarColorNumber=IMBA_BarColorNumber+1;

        
        IMBA_Options_GraphicsFrame_BarSettings_StartColor.color=IMBA_SavedVariables.Colors["BarStart"]
        IMBA_Options_GraphicsFrame_BarSettings_StartColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarStart"].r,IMBA_SavedVariables.Colors["BarStart"].g,IMBA_SavedVariables.Colors["BarStart"].b);
        IMBA_Options_GraphicsFrame_BarSettings_EndColor.color=IMBA_SavedVariables.Colors["BarEnd"]
        IMBA_Options_GraphicsFrame_BarSettings_EndColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarEnd"].r,IMBA_SavedVariables.Colors["BarEnd"].g,IMBA_SavedVariables.Colors["BarEnd"].b);
        IMBA_Options_GraphicsFrame_BarSettings_InnerColor.color=IMBA_SavedVariables.Colors["BarInner"];
        IMBA_Options_GraphicsFrame_BarSettings_InnerColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarInner"].r,IMBA_SavedVariables.Colors["BarInner"].g,IMBA_SavedVariables.Colors["BarInner"].b);
        IMBA_Options_GraphicsFrame_BarSettings_BorderColor.color=IMBA_SavedVariables.Colors["BarBorder"]
        IMBA_Options_GraphicsFrame_BarSettings_BorderColor_BG:SetVertexColor(IMBA_SavedVariables.Colors["BarBorder"].r,IMBA_SavedVariables.Colors["BarBorder"].g,IMBA_SavedVariables.Colors["BarBorder"].b);

        IMBA_Options_GraphicsFrame_BarSettings_CustomColors:SetChecked(IMBA_SavedVariables.CustomBarColors)
        
end

function IMBA_HideCloseButtons_Clicked()
        IMBA_SavedVariables.HideClose=IMBA_Options_GraphicsFrame_FrameSettings_CloseButtons:GetChecked()
        if IMBA_SavedVariables.HideClose then
                IMBA_HideCloseButtons()
        else
                IMBA_ShowCloseButtons()
        end
end

function IMBA_HideMinimapIcon_Clicked()
        IMBA_SavedVariables.HideMinimapIcon=IMBA_Options_GraphicsFrame_HideMinimapIcon:GetChecked()
        if IMBA_SavedVariables.HideMinimapIcon then
                IMBA_OptionsButton:Hide();
        else
                IMBA_OptionsButton:Show();
        end
end

function IMBA_ShowAlertWindow_Clicked()
        IMBA_SavedVariables.ShowAlertWindow=IMBA_Options_GraphicsFrame_ShowAlertWindow:GetChecked()
        if IMBA_SavedVariables.ShowAlertWindow then
                IMBA_Alerts.isLocked=false;     
                IMBA_Alerts:EnableMouse(true);
                IMBA_Alerts:SetMovable(true);
                IMBA_Alerts:SetBackdropBorderColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,IMBA_SavedVariables.Colors["FrameBorder"].a);    
                IMBA_Alerts:SetBackdropColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b,IMBA_SavedVariables.Colors["FrameBG"].a);  
        else
                IMBA_Alerts.isLocked=true;
                IMBA_Alerts:EnableMouse(false);
                IMBA_Alerts:SetMovable(false);
                IMBA_Alerts:SetBackdropBorderColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,0);      
                IMBA_Alerts:SetBackdropColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b,0);        
        end
end

function IMBA_DontRaidBroadcast_Clicked()
        IMBA_SavedVariables.DontRaidBroadcast=IMBA_Options_GraphicsFrame_DontRaidBroadcast:GetChecked()
end


function IMBA_UseSCTForAlerts_Clicked()
        IMBA_SavedVariables.UseSCTForAlerts=IMBA_Options_GraphicsFrame_UseSCTForAlerts:GetChecked()
end

Generated by GNU Enscript 1.6.5.90.