vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

-- Buttonhole Advanced: Swallows Minimap Buttons
-- Copyright (C) 2006  Aaron Griffith

-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License
-- as published by the Free Software Foundation; either version 2
-- of the License, or (at your option) any later version.

-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.

-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

ButtonholeAd_Version = "0.1"; -- Buttonhole Advanced Version. Change at Release

ButtonholeAd_Branch = ""; -- Buttonhole Advanced Branch. Change this all you AddOn ripoff posers! <3

ButtonholeAd_Author = "|cffff0000Swatch|r of Stormrage"; -- Change this too ^^

-- This next block is the text for the help window.
ButtonholeAd_windowtext = [[Welcome to Buttonhole Advanced ]] .. ButtonholeAd_Version .. ButtonholeAd_Branch .. [[
(by ]] .. ButtonholeAd_Author .. [[)

When the original Buttonhole was killed, alot of
people were sent steaming into unknown depths
of anger. Seeing an oppurtunity, I pounced on it.
Hence, Buttonhole Advanced.

Completely rewritten and with more features to
use, it's the ultimate Buttonhole.

        Classic Mode:  |cffff8888(SemiWorking)|r

In classic mode, Buttonhole Advanced behaves
just like it's predicessor. It hides all the
buttons in one, allowing you to scroll through
them with the scrollwheel.

        Menu Mode:     |cffff0000(Not Working)|r

In menu mode, all of the buttons hidden in
the buttonhole are accessable through a menu,
shown when you left click the button.

        Expander Mode:

In expander mode, all of the buttons only
become visible when you toggle the button-
hole.

        Off Mode:

This is obvious. This mode disables button-
holing.]];

ButtonholeAdDetails = {
name = "Buttonhole Advanced",
version = ButtonholeAd_Version,
releaseDate = "June 25, 2006",
author = ButtonholeAd_Author,
email = "aargri@gmail.com",
--website = "fixme",
category = MYADDONS_CATEGORY_OTHERS,
optionsframe = "ButtonholeAdFrame" };

ButtonholeAd_Debug = 0;
ButtonholeAd_Method = 0;
ButtonholeAd_Pos = 97;

ButtonholeAd_SwallowButtons = {};

function BHA_Debug(msg)
        if (ButtonholeAd_Debug == 1) then
                DEFAULT_CHAT_FRAME:AddMessage("Buttonhole Advanced : Debug : " .. msg, 0.2, 0.8, 0.8);
        end
end

-- This is the /bh command
function ButtonholeAd_Command(cmd)
  if (cmd == "debug") then -- Handle a debug call real quick-like
    if (ButtonholeAd_Debug == 1) then
      ButtonholeAd_Debug=0;
      DEFAULT_CHAT_FRAME:AddMessage("Buttonhole Advanced : Debug Off", 0.2, 0.8, 0.8);
    else
      ButtonholeAd_Debug=1;
      DEFAULT_CHAT_FRAME:AddMessage("Buttonhole Advanced : Debug On", 0.2, 0.8, 0.8);
    end
    return nil;
  end
  if (cmd == "") then -- If there is no string, open help
        BHA_Debug("Showing config frame");
    ButtonholeAdFrame:Show();
    return nil;
  end
end

function ButtonholeAd_UpdateMethodUI()
        ButtonholeAdFrameCheckButtonClassic:SetChecked(0);
        ButtonholeAdFrameCheckButtonMenu:SetChecked(0);
        ButtonholeAdFrameCheckButtonExpander:SetChecked(0);
        ButtonholeAdFrameCheckButtonOff:SetChecked(0);
        if (ButtonholeAd_Method == 0) then
                BHA_Debug("Method set to Classic");
                ButtonholeAdFrameCheckButtonClassic:SetChecked(1);
                ButtonholeAd_Off_Init();
                ButtonholeAd_Classic_Init();
                return nil;
        end
        if (ButtonholeAd_Method == 1) then
                BHA_Debug("Method set to Menu");
                ButtonholeAdFrameCheckButtonMenu:SetChecked(1);
                ButtonholeAd_Off_Init();
                ButtonholeAd_Menu_Init();
                return nil;
        end
        if (ButtonholeAd_Method == 2) then
                BHA_Debug("Method set to Expander");
                ButtonholeAdFrameCheckButtonExpander:SetChecked(1);
                ButtonholeAd_Off_Init();
                ButtonholeAd_Expander_Init();
                return nil;
        end
        if (ButtonholeAd_Method == 3) then
                BHA_Debug("Method set to Off");
                ButtonholeAdFrameCheckButtonOff:SetChecked(1);
                ButtonholeAd_Off_Init();
                return nil;
        end
end

function ButtonholeAd_UpdatePosUI()
        ButtonholeAdFramePosSlider:SetValue(ButtonholeAd_Pos);
        
        x = cos(ButtonholeAd_Pos);
        y = sin(ButtonholeAd_Pos);
        x = -x;
        y = -y;
        x = x * 81;
        y = y * 81;
        x = x + 53;
        y = y - 54;
        
        ButtonholeAd_Minimap:SetPoint("TOPLEFT", x, y);
        
        -- BHA_Debug("Setting button position to " .. ButtonholeAd_Pos);
end

function ButtonholeAd_Minimap_OnClick(arg1)
        if (arg1 == "RightButton") then
                if (ButtonholeAdFrame:IsShown()) then
                        BHA_Debug("Hiding config frame");
                ButtonholeAdFrame:Hide();
                return nil;
        end
                BHA_Debug("Showing config frame");
        ButtonholeAdFrame:Show();
        return nil;
    end
    ButtonholeAd_Menu_Click();
    ButtonholeAd_Expander_Click();
end

-- Does this on load (duh)
function ButtonholeAd_OnLoad()
        this:RegisterEvent("VARIABLES_LOADED"); -- Registers for Loaded Variables (standard)
        this:RegisterEvent("PLAYER_LOGIN");
        this:RegisterEvent("ADDON_LOADED");
        SLASH_BUTTONHOLEAD1 = "/buttonhole"; -- Long Command
        SLASH_BUTTONHOLEAD2 = "/bh"; -- Short Command
        SLASH_BUTTONHOLEAD3 = "/buttonholead"; -- Semi-Long Command
        SLASH_BUTTONHOLEAD4 = "/buttonholeadvanced"; -- Really Long Command
        SLASH_BUTTONHOLEAD5 = "/bha"; -- Semi-Short Command
        SlashCmdList["BUTTONHOLEAD"] = ButtonholeAd_Command;
        ButtonholeAdFrameText:SetText(ButtonholeAd_windowtext); -- Sets the Help Text
end


---------------------------------------------------------------------------

function ButtonholeAd_WheelWrapper()
        ButtonholeAd_Classic_Wheel(arg1);
end

function ButtonholeAd_OnEvent()
        if ( event == "VARIABLES_LOADED" ) then
                -- ButtonholeAd_UpdateMethodUI();
                -- ButtonholeAd_UpdatePosUI();
                DEFAULT_CHAT_FRAME:AddMessage("Buttonhole Advanced : Ready for Work!", 0.2, 0.8, 0.8); -- Something need doing?
        end
        if (event == "ADDON_LOADED") and (myAddOnsFrame_Register) then
                myAddOnsFrame_Register(ButtonholeAdDetails);
        end
        if (event == "PLAYER_LOGIN") then
                local kids = { Minimap:GetChildren() };
                for _,child in ipairs(kids) do
                        if (child:GetName() == nil) then
                                -- skip, unamed freaks!
                        else
                                local name = child:GetName();
                                local first = string.find(strlower(name), "minimap");
                                local second = string.find(strlower(name), "gathernote");
                                if (second == 1) then
                                        -- Gatherer Wierdness
                                elseif (first == 1) then
                                        -- skip, original frames
                                else
                                        if not (name == "ButtonholeAd_Minimap") then -- Skip ourselves...
                                                local tmp = {
                                                        ModName = name,
                                                        ModFrame = child,
                                                        ModOriginalX = child:GetLeft(),
                                                        ModOriginalY = child:GetBottom(),
                                                        ModOriginalS = child:GetScale();
                                                        ModOriginalSetPoint = child.SetPoint };
                                                if (name == "CT_OptionBarFrame") then tmp.ModOriginalX = nil; end
                                                if (name == "GathererUI_IconFrame") then
                                                        if (Chronos) then
                                                                Chronos.schedule(1, child.Hide, child); -- Hides teh
                                                        end                                         -- Annoying Icon!
                                                end
                                                child:EnableMouseWheel(1);
                                                child:SetScript("OnMouseWheel", ButtonholeAd_WheelWrapper);
                                                tinsert(ButtonholeAd_SwallowButtons, tmp);
                                                -- DEFAULT_CHAT_FRAME:AddMessage("The new is " .. name);
                                        end
                                end
                        end
                end 
                for _, v in ipairs(ButtonholeAd_SwallowButtons) do
                        -- v.ModFrame.RegisterForClicks = function() end;
                end
                ButtonholeAd_UpdateMethodUI();
                ButtonholeAd_UpdatePosUI();
        end
end


--------------------------------------------------------------------------


ButtonholeAd_Classic_Num = 0;

function ButtonholeAd_Classic_Init()
        if not (ButtonholeAd_Method == 0) then
                return nil;
        end
        ButtonholeAd_Classic_Num = 0;
        for i,v in ipairs(ButtonholeAd_SwallowButtons) do
                if (v.ModOriginalX == nil) or (v.ModOriginalY == nil) then
                        v.ModFrame:Hide();
                        if (i == ButtonholeAd_Classic_Num) then v.ModFrame:Show(); end
                else
                        BHA_Debug("Classic : Jiggering frame " .. v.ModName);
                        
                        v.ModFrame.SetPoint = function() end;
                        
                        v.ModFrame:ClearAllPoints();
                        
                        -- BHA_Debug("Off : X: " .. v.ModOriginalX .. " Y: " .. v.ModOriginalY);
                        v.ModFrame:SetParent(ButtonholeAd_Minimap);
                        v.ModOriginalSetPoint(v.ModFrame, "TOPLEFT", 0, 0);
                        v.ModFrame:SetParent(Minimap);
                        v.ModFrame:Hide();
                        if (i == ButtonholeAd_Classic_Num) then v.ModFrame:Show(); ButtonholeAd_Minimap:Hide(); end
                end
        end
end

function ButtonholeAd_Classic_Wheel(arg1)
        if not (ButtonholeAd_Method == 0) then
                return nil;
        end
        ButtonholeAd_Classic_Num = ButtonholeAd_Classic_Num + arg1;
        if (ButtonholeAd_Classic_Num == -1) then ButtonholeAd_Classic_Num = table.getn(ButtonholeAd_SwallowButtons); end
        if (ButtonholeAd_Classic_Num == table.getn(ButtonholeAd_SwallowButtons)+1) then ButtonholeAd_Classic_Num = 0; end
        if (ButtonholeAd_Classic_Num == 0) then
                BHA_Debug("Classic : Setting frame to Buttonhole");
        else
                BHA_Debug("Classic : Setting frame to " .. ButtonholeAd_SwallowButtons[ButtonholeAd_Classic_Num].ModFrame:GetName() );
        end
        
        for i,v in ipairs(ButtonholeAd_SwallowButtons) do
                v.ModFrame:Hide();
                if (i == ButtonholeAd_Classic_Num) then v.ModFrame:Show(); end
        end
        
        if (ButtonholeAd_Classic_Num == 0) then
                ButtonholeAd_Minimap:Show();
        else
                local tmp = ButtonholeAd_SwallowButtons[ButtonholeAd_Classic_Num];
                if (tmp.ModOriginalX == nil) or (tmp.ModOriginalY == nil) then
                        ButtonholeAd_Minimap:Show();
                else
                        ButtonholeAd_Minimap:Hide();
                end
        end
end


--------------------------------------------------------------------------


function ButtonholeAd_Menu_Init()
        if not (ButtonholeAd_Method == 1) then
                return nil;
        end
end

function ButtonholeAd_Menu_Click()
        if not (ButtonholeAd_Method == 1) then
                return nil;
        end
        BHA_Debug("Menu : Clicked");
end


--------------------------------------------------------------------------


ButtonholeAd_Expander_State = 0;

function ButtonholeAd_Expander_Init()
        if not (ButtonholeAd_Method == 2) then
                return nil;
        end
        ButtonholeAd_Expander_State = 0;
        for i,v in ipairs(ButtonholeAd_SwallowButtons) do
                BHA_Debug("Expander : Hiding frame " .. v.ModName);
                v.ModFrame:Hide();
        end
end

function ButtonholeAd_Expander_Click()
        if not (ButtonholeAd_Method == 2) then
                return nil;
        end
        
        if (ButtonholeAd_Expander_State == 0) then
                for i,v in ipairs(ButtonholeAd_SwallowButtons) do
                        BHA_Debug("Expander : Showing frame " .. v.ModName);
                        v.ModFrame:Show();
                end
                ButtonholeAd_Expander_State = 1;
        else
                for i,v in ipairs(ButtonholeAd_SwallowButtons) do
                        BHA_Debug("Expander : Hiding frame " .. v.ModName);
                        v.ModFrame:Hide();
                end
                ButtonholeAd_Expander_State = 0;
        end
        
        BHA_Debug("Expander : Toggled");
end


--------------------------------------------------------------------------


function ButtonholeAd_Off_Init()
        -- if not (ButtonholeAd_Method == 3) then
        --      return nil;
        -- end
        ButtonholeAd_Minimap:Show();
        for i,v in ipairs(ButtonholeAd_SwallowButtons) do
                BHA_Debug("Off : Reshowing frame " .. v.ModName);
                
                v.ModFrame.SetPoint = v.ModOriginalSetPoint;
                
                if (v.ModOriginalX == nil) or (v.ModOriginalY == nil) then
                        v.ModFrame:Show();
                else
                        BHA_Debug("Off : X: " .. v.ModOriginalX .. " Y: " .. v.ModOriginalY .. " S: " .. v.ModOriginalS);
                        v.ModFrame:ClearAllPoints();
                        v.ModFrame:SetParent(UIParent);
                        v.ModFrame:SetPoint("BOTTOMLEFT", "UIParent", v.ModOriginalX, v.ModOriginalY);
                        v.ModFrame:SetParent(Minimap);
                        v.ModFrame:Show();
                end
        end
end

Generated by GNU Enscript 1.6.5.90.