vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        Utility.lua - functions that don't belong anywhere else
--]]

local currentPlayer = UnitName("player");

--[[ Boolean functions ]]--

function Bagnon_IsAddOnEnabled(addon)
        local _, _, _, enabled = GetAddOnInfo(addon);
        return enabled;
end

function Bagnon_IsInventoryBag(bagID)
        return (bagID == KEYRING_CONTAINER or ( bagID >= 0 and bagID < 5) );
end

function Bagnon_IsBankBag(bagID)
        return ( bagID == -1 or (bagID > 4 and bagID < 11) );
end

function Bagnon_FrameHasBag(frameName, bagID)
        if(not (BagnonSets and BagnonSets[frameName] and BagnonSets[frameName].bags ) ) then
                return false;
        end
        
        for i in BagnonSets[frameName].bags do
                if(BagnonSets[frameName].bags[i] == bagID) then
                        return true;
                end
        end
        return false;
end

--returns if the given bag is an ammo bag/soul bag
function Bagnon_IsAmmoBag(bagID, player)
        --bankslots, main bag, and the keyring have IDs -2 to 0
        if( bagID <= 0 ) then return nil; end
        
        local id;
        if(player) then
                if(BagnonDB) then
                        _, id = BagnonDB.GetBagData(player, bagID);
                end
        else
                local link = GetInventoryItemLink("player", ContainerIDToInventoryID(bagID) );
                if(link) then
                        _, _, id = string.find(link, "item:(%d+)");
                end
        end
        
        if(id) then
                local _, _, _, _, itemType, subType = GetItemInfo(id);
                return ( itemType == BAGNON_ITEMTYPE_QUIVER or subType == BAGNON_SUBTYPE_SOULBAG );
        end
        
        return nil;
end

--returns if the given bag is a profession bag (herb bag, engineering bag, etc)
function Bagnon_IsProfessionBag(bagID)
        if( bagID <= 0 ) then
                return nil;
        end
        
        local id;
        if(player) then
                if(BagnonDB) then
                        _, id = BagnonDB.GetBagData(player, bagID);
                end
        else
                local link = GetInventoryItemLink("player", ContainerIDToInventoryID(bagID) );
                if(link) then
                        _, _, id = string.find(link, "item:(%d+)");
                end
        end
        
        if(id) then
                local _, _, _, _, itemType, subType = GetItemInfo(id);
                return ( itemType == BAGNON_ITEMTYPE_CONTAINER and not (subType == BAGNON_SUBTYPE_BAG or subType == BAGNON_SUBTYPE_SOULBAG)  );
        end
                
        return nil;
end

--[[ Detection for Cached Frames.  Only works if we have cached data available ]]--

function Bagnon_IsCachedFrame(frame) 
        if(not BagnonDB) then
                return false;
        end
        
        return ( currentPlayer ~= frame.player or (not bgn_atBank and frame:GetName() == "Banknon") );
end

function Bagnon_IsCachedBag(player, bagID) 
        if(not BagnonDB) then
                return false;
        end
        
        return ( currentPlayer ~= player or (not bgn_atBank and Bagnon_IsBankBag(bagID) ) );
end

--returns true if the item is being viewed from a cache 
function Bagnon_IsCachedItem(item)
        if( not (BagnonDB and item) ) then
                return false;
        end
        --we're not looking at the current player's items
        if( currentPlayer ~= item:GetParent():GetParent().player ) then
                return true;
        end
        
        --the bank frame is visible in the normal way
        if( bgn_atBank ) then
                return false;
        end
        
        --we're looking at the player's bank away from the actual bank
        return ( Bagnon_IsBankBag( item:GetParent():GetID() ) );
end

function Bagnon_AnchorTooltip(frame)
        GameTooltip:ClearAllPoints();
        
        if( frame:GetLeft() < ( UIParent:GetRight() / 2) ) then
                if(frame:GetTop() < (UIParent:GetTop() / 2) ) then
                        GameTooltip:SetPoint("BOTTOMLEFT", frame, "TOPLEFT");
                else
                        GameTooltip:SetPoint("TOPLEFT", frame, "BOTTOMRIGHT");
                end
        else
                if(frame:GetTop() < (UIParent:GetTop() / 2) ) then
                        GameTooltip:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT");
                else
                        GameTooltip:SetPoint("TOPRIGHT", frame, "BOTTOMLEFT");
                end
        end
end

--[[ Messaging ]]--

--send a message to the player
function BagnonMsg(msg, r, g, b)
        if(r and g and b) then
                DEFAULT_CHAT_FRAME:AddMessage(msg or "error", r, g, b);
        else
                DEFAULT_CHAT_FRAME:AddMessage(msg or "error", 0, 0.7, 1);
        end
end

Generated by GNU Enscript 1.6.5.90.