vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        Events.lua
                The main event handler for Bagnon and Banknon.
                It controls when the frames update, and when and when they are not shown.
                
                The UI by default partially supports showing/hiding at the mailbox, and fully supports the inventory frame showing/hiding at a vendor.
                
                I've extended the behavior in the following ways:
                        If a frame was previously shown by a user, it will not automatically close.
                        The events of showing the bank, tradeskill, auction, and trading can also be set to open the inventory or bank windows.
--]]

bgn_atBank = nil; --a flag for if the player is at the bank or not

function BagnonEvents_OnEvent()
        --[[ 
                Events For Updating Items
        --]]
        if ( event == "BAG_UPDATE" or event == "BAG_UPDATE_COOLDOWN") then
                if( Bagnon and Bagnon:IsVisible() and Bagnon_FrameHasBag("Bagnon", arg1) ) then
                        BagnonFrame_Update(Bagnon, arg1);               
                elseif( Banknon and Banknon:IsVisible() and Bagnon_FrameHasBag("Banknon", arg1) ) then
                        BagnonFrame_Update(Banknon, arg1);
                end
        elseif( event == "PLAYERBANKSLOTS_CHANGED") then
                if( Banknon and Banknon:IsVisible() and Bagnon_FrameHasBag("Banknon", -1) ) then
                        BagnonFrame_Update(Banknon, -1);
                end
        elseif( event == "ITEM_LOCK_CHANGED" ) then
                if( Bagnon and Bagnon:IsVisible() ) then
                        BagnonFrame_UpdateLock(Bagnon);         
                end
                if( Banknon and Banknon:IsVisible() ) then
                        BagnonFrame_UpdateLock(Banknon);
                end
        --the keyring's size changes based on the player's level
        elseif( event == "PLAYER_LEVEL_UP") then
                if( Bagnon and Bagnon:IsVisible() and Bagnon_FrameHasBag("Bagnon", KEYRING_CONTAINER) ) then
                        BagnonFrame_Generate(Bagnon);
                end
        --[[ 
                Automatic Frame Opening/Closing Events 
        --]]
        elseif(event == "BANKFRAME_OPENED") then
                bgn_atBank = 1;
                if(BagnonSets.showBagsAtBank) then
                        BagnonFrame_Open("Bagnon", 1);
                end
                
                if(BagnonSets.showBankAtBank and Bagnon_IsAddOnEnabled("Banknon")) then
                        BagnonFrame_Open("Banknon", 1);
                else
                        BagnonEvents_ShowBlizBank();
                end
        elseif(event == "BANKFRAME_CLOSED") then
                bgn_atBank = nil;
                if(BagnonSets.showBagsAtBank) then
                        BagnonFrame_Close("Bagnon", 1);
                end             
                if(BagnonSets.showBankAtBank) then
                        BagnonFrame_Close("Banknon", 1);
                end
        elseif(event == "TRADE_SHOW") then
                if(BagnonSets.showBagsAtTrade) then
                        BagnonFrame_Open("Bagnon", 1);
                end             
                if(BagnonSets.showBankAtTrade) then
                        BagnonFrame_Open("Banknon", 1);
                end
        elseif(event == "TRADE_CLOSED") then
                if(BagnonSets.showBagsAtTrade) then
                        BagnonFrame_Close("Bagnon", 1);
                end             
                if(BagnonSets.showBankAtTrade) then
                        BagnonFrame_Close("Banknon", 1);
                end
        elseif(event == "TRADE_SKILL_SHOW") then
                if(BagnonSets.showBagsAtCraft) then
                        BagnonFrame_Open("Bagnon", 1);
                end             
                if(BagnonSets.showBankAtCraft) then
                        BagnonFrame_Open("Banknon", 1);
                end
        elseif(event == "TRADE_SKILL_CLOSE") then
                if(BagnonSets.showBagsAtCraft) then
                        BagnonFrame_Close("Bagnon", 1);
                end             
                if(BagnonSets.showBankAtCraft) then
                        BagnonFrame_Close("Banknon", 1);
                end
        elseif(event == "AUCTION_HOUSE_SHOW") then
                if(BagnonSets.showBagsAtAH) then
                        BagnonFrame_Open("Bagnon", 1);
                end             
                if(BagnonSets.showBankAtAH) then
                        BagnonFrame_Open("Banknon", 1);
                end
        elseif(event == "AUCTION_HOUSE_CLOSED") then
                if(BagnonSets.showBagsAtAH) then
                        BagnonFrame_Close("Bagnon", 1);
                end             
                if(BagnonSets.showBankAtAH) then
                        BagnonFrame_Close("Banknon", 1);
                end
        elseif(event == "MAIL_SHOW") then
                if(BagnonSets.showBankAtMail) then
                        BagnonFrame_Open("Banknon", 1);
                end
        elseif(event == "MAIL_CLOSED") then
                BagnonFrame_Close("Bagnon", 1);
                
                if(BagnonSets.showBankAtMail) then
                        BagnonFrame_Close("Banknon", 1);
                end
        elseif(event == "MERCHANT_SHOW") then
                if(BagnonSets.showBankAtVendor) then
                        BagnonFrame_Open("Banknon", 1);
                end
        elseif(event == "MERCHANT_CLOSED") then
                if(BagnonSets.showBankAtVendor) then
                        BagnonFrame_Close("Banknon", 1);
                end
        --[[ Loading Event ]]--
        elseif(event == "ADDON_LOADED" and arg1 == "Bagnon_Core") then
                BagnonEvents:UnregisterEvent("ADDON_LOADED");           
                BagnonEvents_Load(this);
        end
end

function BagnonEvents_Load(eventFrame)
        BankFrame:UnregisterEvent("BANKFRAME_OPENED");
        
        --disable the ItemOnUpdate function for those using KCItems, since it causes a pretty bad memory leak
        if KC_Items then
                BagnonItem_OnUpdate = function() return; end;
        end
        
        BagnonEvents_LoadVariables();
        BagnonEvents_ObtainLocalizedNames();
        Infield.AddRescaleAction(BagnonEvents_RescaleAll);
        
        eventFrame:RegisterEvent("BAG_UPDATE");
        eventFrame:RegisterEvent("PLAYERBANKSLOTS_CHANGED");
        eventFrame:RegisterEvent("ITEM_LOCK_CHANGED");
        eventFrame:RegisterEvent("BAG_UPDATE_COOLDOWN");
        eventFrame:RegisterEvent("PLAYER_LEVEL_UP");
        
        eventFrame:RegisterEvent("BANKFRAME_OPENED");
        eventFrame:RegisterEvent("BANKFRAME_CLOSED");
        eventFrame:RegisterEvent("TRADE_SHOW");
        eventFrame:RegisterEvent("TRADE_CLOSED");
        eventFrame:RegisterEvent("TRADE_SKILL_SHOW");
        eventFrame:RegisterEvent("TRADE_SKILL_CLOSE");
        eventFrame:RegisterEvent("AUCTION_HOUSE_SHOW");
        eventFrame:RegisterEvent("AUCTION_HOUSE_CLOSED");
        eventFrame:RegisterEvent("MAIL_SHOW");
        eventFrame:RegisterEvent("MAIL_CLOSED");
        eventFrame:RegisterEvent("MERCHANT_SHOW");
        eventFrame:RegisterEvent("MERCHANT_CLOSED");
end

function BagnonEvents_LoadVariables()
        if(not BagnonSets) then 
                BagnonSets = {
                        showBagsAtBank = 1,
                        showBagsAtAH = 1,
                        showBankAtBank = 1,
                        showTooltips = 1,
                        qualityBorders = 1,
                        version = BAGNON_VERSION,
                };
                BagnonMsg(BAGNON_INITIALIZED);
        elseif(BagnonSets.version ~= BAGNON_VERSION) then
                
                if(BagnonSets.overrideBank) then
                        BagnonSets.showBankAtBank = 1;
                        BagnonSets.overrideBank = nil;
                end
                
                BagnonSets.version = BAGNON_VERSION;
                BagnonMsg(BAGNON_UPDATED);
        end
end

local function BagnonHasInfo()
        return (GetLocale() == "enUS" or 
                        GetLocale() == "deDE" or 
                        GetLocale() == "frFR" or 
                        GetLocale() == "zhCN" or
                        GetLocale() == "zhTW" or 
                        BagnonSets.noDebug);
end

--try and get localized names, so that its possible to do special bag coloring
function BagnonEvents_ObtainLocalizedNames()
        if( not BagnonHasInfo() ) then
                BagnonMsg("Obtaining localized data.  Please report the following to where you downloaded Bagnon from.");
                BagnonMsg( GetLocale() );
        end
        
        --backpack
        local name, _, _, _, iType, subType = GetItemInfo(4500);                
        if(name) then
                if( not BagnonHasInfo() ) then
                        BagnonMsg( "Backpack:  " .. (iType or "null") .. ", " .. (subType or "null") );
                end
                if(iType) then
                        BAGNON_ITEMTYPE_CONTAINER = iType;
                        BAGNON_SUBTYPE_BAG = subType;
                end
        end

        --ammo  
        name, _, _, _, iType, subType = GetItemInfo(8218); 
        if(name) then
                if( not BagnonHasInfo() ) then
                        BagnonMsg( "Ammo:  " .. (iType or "null") .. ", " .. (subType or "null") );
                end
                if(iType) then
                        BAGNON_ITEMTYPE_QUIVER = iType;
                end
        end

        --soul pouch
        name, _, _, _, iType, subType = GetItemInfo(21340); 
        if(name) then
                if( not BagnonHasInfo() ) then
                        BagnonMsg( "Soul Bag:  " .. (iType or "null") .. ", " .. (subType or "null") );
                end
                if(subType) then
                        BAGNON_SUBTYPE_SOULBAG = subType;
                end
        end
end

function BagnonEvents_RescaleAll()
        if(Bagnon) then
                BagnonFrame_Reposition(Bagnon);
        end
        
        if(Banknon) then
                BagnonFrame_Reposition(Banknon);
        end
end

--[[
        Taken from Blizzard's code
        Shows the normal bank frame
--]]

function BagnonEvents_ShowBlizBank()
        BankFrameTitleText:SetText( UnitName("npc") );
        SetPortraitTexture(BankPortraitTexture,"npc");
        ShowUIPanel(BankFrame);
        
        if( not BankFrame:IsVisible() ) then
                CloseBankFrame();
        end
        UpdateBagSlotStatus();
end

--[[ Create the Event Handler Frame ]]--
CreateFrame("Frame", "BagnonEvents")
BagnonEvents:RegisterEvent("ADDON_LOADED");
BagnonEvents:SetScript("OnEvent", BagnonEvents_OnEvent);
BagnonEvents:Hide();

Generated by GNU Enscript 1.6.5.90.