vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        bar.lua
                Scripts used for the Bongos Bag bar

        Saved Variables:
                Bongos.bag = {
                        <All variables from BBar>
                        space
                                The spacing between action buttons, in pixels.  A nil value means that the bar is using default spacing
                        rows
                                How many rows the bar is organized into.
                        oneBag
                                Flag for if we're only showing the main bag.
                }
--]]

--constants
local DEFAULT_SPACING = 4;
local DEFAULT_ROWS = 1;

--[[ UI Functions ]]--

local function Layout(bar, rows, space)
        if not rows or rows == DEFAULT_ROWS then
                rows = nil;
        end
        bar.sets.rows = rows;
        
        if not space or space == DEFAULT_SPACING then
                bar.sets.space = nil;
                space = DEFAULT_SPACING;
        else
                bar.sets.space = space;
        end
        
        --clear all button positions
        for i = 0, 3 do
                getglobal("CharacterBag" .. i .. "Slot"):ClearAllPoints();
        end
        MainMenuBarBackpackButton:ClearAllPoints();
        
        if bar.sets.oneBag then
                --hide all bag buttons, show the main bag
                for i = 0, 3 do
                        getglobal("CharacterBag" .. i .. "Slot"):Hide();
                end     
                MainMenuBarBackpackButton:SetPoint("TOPLEFT", bar);
                
                bar:SetWidth(37);
                bar:SetHeight(37);
        else
                --arrange all bag buttons, and the backpack
                for i = 0, 3 do
                        getglobal("CharacterBag" .. i .. "Slot"):Show();
                end
                CharacterBag3Slot:SetPoint("TOPLEFT", bar);
                
                --vertical alignment
                if rows then
                        for i = 0, 2 do
                                getglobal("CharacterBag" .. i .. "Slot"):SetPoint("TOP", "CharacterBag" .. i+1 .. "Slot", "BOTTOM", 0, -space);
                        end
                        MainMenuBarBackpackButton:SetPoint("TOP", CharacterBag0Slot, "BOTTOM", 0, -space);
                        
                        bar:SetWidth((37 + space) - space);
                        bar:SetHeight((37 + space) * 5 - space);
                --horizontal alignment
                else
                        for i = 0, 2 do
                                getglobal("CharacterBag" .. i .. "Slot"):SetPoint("LEFT", "CharacterBag" .. i+1 .. "Slot", "RIGHT", space, 0);
                        end
                        MainMenuBarBackpackButton:SetPoint("LEFT", CharacterBag0Slot, "RIGHT", space, 0);
                        
                        bar:SetWidth((37 + space) * 5 - space);
                        bar:SetHeight((37 + space) - space);
                end
        end
end

--[[ Config Functions ]]--

local function ShowAsOneBag(enable)
        if enable then
                BBagBar.sets.oneBag = 1;
        else
                BBagBar.sets.oneBag = nil;
        end
        Layout(BBagBar, BBagBar.sets.rows, BBagBar.sets.space);
end

local function CreateConfigMenu(name)
        local menu = CreateFrame("Button", name, UIParent, "BongosRightClickMenu");
        menu:SetText("Bag Bar");
        menu:SetWidth(220);
        menu:SetHeight(250);
        
        local hideButton = CreateFrame("CheckButton", name .. "Hide", menu, "BongosHideButtonTemplate");
        
        local oneBagButton = CreateFrame("CheckButton", name .. "OneBag", menu, "BongosCheckButtonTemplate");
        oneBagButton:SetScript("OnClick", function()
                ShowAsOneBag(this:GetChecked());
        end);
        oneBagButton:SetPoint("TOP", hideButton, "BOTTOM", 0, 4);
        oneBagButton:SetText("One Bag");
        
        local verticalButton = CreateFrame("CheckButton", name .. "Vertical", menu, "BongosCheckButtonTemplate");
        verticalButton:SetScript("OnClick", function()
                if this:GetChecked() then
                        Layout(BBagBar, 5, BBagBar.sets.space);
                else
                        Layout(BBagBar, nil, BBagBar.sets.space);
                end
        end);
        verticalButton:SetPoint("TOP", name .. "OneBag", "BOTTOM", 0, 4);
        verticalButton:SetText("Vertical");
        
        local spacingSlider = CreateFrame("Slider", name .. "Spacing", menu, "BongosSpaceSlider");
        spacingSlider:SetPoint("TOPLEFT", name .. "Vertical", "BOTTOMLEFT", 2, -10);
        spacingSlider:SetScript("OnValueChanged", function()
                if not this:GetParent().onShow then
                        Layout(BBagBar, BBagBar.sets.rows, this:GetValue());
                end
                getglobal(this:GetName() .. "ValText"):SetText( this:GetValue() );
        end);
        
        local scaleSlider = CreateFrame("Slider", name .. "Scale", menu, "BongosScaleSlider");
        scaleSlider:SetPoint("TOP", spacingSlider, "BOTTOM", 0, -24);
        
        local opacitySlider = CreateFrame("Slider", name .. "Opacity", menu, "BongosOpacitySlider");
        opacitySlider:SetPoint("TOP", scaleSlider, "BOTTOM", 0, -24);
end

--Called when the right click menu is shown, loads the correct values to the checkbuttons/sliders/text
local function ShowMenu(bar)
        if not BongosBagBarMenu then
                CreateConfigMenu("BongosBagBarMenu");
        end
        
        BongosBagBarMenu.onShow = 1;
        BongosBagBarMenu.frame = this:GetParent();
        
        BongosBagBarMenuHide:SetChecked(not bar.sets.vis);
        BongosBagBarMenuOneBag:SetChecked(bar.sets.oneBag);
        BongosBagBarMenuVertical:SetChecked(bar.sets.rows);
        BongosBagBarMenuSpacing:SetValue(bar.sets.space or DEFAULT_SPACING);
        
        BongosBagBarMenuScale:SetValue(bar:GetScale() * 100);
        BongosBagBarMenuOpacity:SetValue(bar:GetAlpha() * 100);
        
        BMenu.ShowMenuForBar(BongosBagBarMenu, bar);
        BongosBagBarMenu.onShow = nil;
end

--[[ Startup ]]--

local function AddFrameToBar(frame, parent)
        frame:SetParent(parent);
        frame:SetAlpha(parent:GetAlpha());
        frame:SetFrameLevel(0);
end

BScript.AddStartupAction(function()     
        local bar = BBar.Create("bags", "BBagBar", "BActionSets.bags", ShowMenu);
        if not bar:IsUserPlaced() then
                bar:SetPoint("BOTTOMRIGHT", UIParent);
        end

        for i = 0, 3 do
                AddFrameToBar(getglobal("CharacterBag" .. i .. "Slot"), bar);
        end
        AddFrameToBar(MainMenuBarBackpackButton, bar);
        MainMenuBarBackpackButton:Show();
        
        Layout(bar, bar.sets.rows, bar.sets.space);
end)

Generated by GNU Enscript 1.6.5.90.