vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
BagFu = AceLibrary("AceAddon-2.0"):new("FuBarPlugin-2.0", "AceDB-2.0", "AceEvent-2.0", "AceConsole-2.0")
BagFu:RegisterDB("BagFuDB")
BagFu:RegisterDefaults('profile', {
        showDepletion = false,
        includeProfession = true,
        includeAmmo = false,
})

BagFu.hasIcon = true
BagFu.cannotDetachTooltip = true
BagFu.defaultPosition = "RIGHT"

local L = AceLibrary("AceLocale-2.0"):new("BagFu")
function BagFu:OnInitialize()
        --self.dewdrop = AceLibrary("Dewdrop-2.0")
        self.crayon = AceLibrary("Crayon-2.0")
        self.tablet = AceLibrary("Tablet-2.0")

        self.options = {
                type = "group",
                args = {
                        ammobags = {
                                type = "toggle",
                                name = L["AMMO_BAGS"],
                                desc = L["MENU_INCLUDE_AMMO_BAGS"],
                                get = function() return self.db.profile.includeAmmo end,
                                set = function()
                                        self.db.profile.includeAmmo = not self.db.profile.includeAmmo
                                        self:Update()
                                end,
                                order = 110
                        },
                        professionbags = {
                                type = "toggle",
                                name = L["PROFESSION_BAGS"],
                                desc = L["MENU_INCLUDE_PROFESSION_BAGS"],
                                get = function() return self.db.profile.includeProfession end,
                                set = function()
                                        self.db.profile.includeProfession = not self.db.profile.includeProfession
                                        self:Update()
                                end,
                                order = 120
                        },
                        depletion = {
                                type = "toggle",
                                name = L["BAG_DEPLETION"],
                                desc = L["MENU_SHOW_DEPLETION_OF_BAGS"],
                                get = function() return self.db.profile.showDepletion end,
                                set = function()
                                        self.db.profile.showDepletion = not self.db.profile.showDepletion
                                        self:Update()
                                end,
                                order = 130
                        }
                }
        }
        self.OnMenuRequest = self.options
        self:RegisterChatCommand({ "/bagfu" }, self.options)
end

function BagFu:OnEnable()
        self:RegisterEvent("PLAYER_ENTERING_WORLD", "OnPlayerEnteringWorld")
        self:RegisterEvent("PLAYER_LEAVING_WORLD", "OnPlayerLeavingWorld")
        self:RegisterEvent("BAG_UPDATE", "Update")
end


function BagFu:OnPlayerEnteringWorld()
        self:RegisterEvent("BAG_UPDATE", "Update")
end

function BagFu:OnPlayerLeavingWorld()
        self:UnregisterEvent("BAG_UPDATE")
end

function BagFu:UpdateText()
        local totalSlots = 0
        local takenSlots = 0
        for i = 0, 4 do
                local usable = TRUE
                if i >= 1 then
                        local link = GetInventoryItemLink("player", ContainerIDToInventoryID(i))
                        if link ~= nil then
                                local itemId = tonumber(string.gsub(link, "|cff%x%x%x%x%x%x|Hitem:(%d+):%d+:%d+:%d+|h.*", "%1") or 0)
                                local _,_,_,_,_,subtype = GetItemInfo(itemId)
                                if not self.db.profile.includeAmmo and (subtype == L["TEXT_SOUL_BAG"] or subtype == L["TEXT_AMMO_POUCH"] or subtype == L["TEXT_QUIVER"]) then
                                        usable = FALSE
                                elseif not self.db.profile.includeProfession and (subtype == L["TEXT_ENCHANTING_BAG"] or subtype == L["TEXT_HERB_BAG"] or subtype == L["TEXT_ENGINEERING_BAG"]) then
                                        usable = FALSE
                                end
                        end
                end
                if usable then
                        local size = GetContainerNumSlots(i)
                        
                        if size ~= nil and size > 0 then
                                totalSlots = totalSlots + size
                                for slot = 1, size do
                                        if GetContainerItemInfo(i, slot) then
                                                takenSlots = takenSlots + 1
                                        end
                                end
                        end
                end
        end
        
        local color = self.crayon:GetThresholdHexColor((totalSlots - takenSlots) / totalSlots)
        
        if self.db.profile.showDepletion then
                takenSlots = totalSlots - takenSlots
        end
        
        self:SetText(format("|cff%s%d/%d|r", color, takenSlots, totalSlots))
end

function BagFu:OnTooltipUpdate()
        self.tablet:SetHint(L["TEXT_HINT"])
end

function BagFu:OnClick()
        if not ContainerFrame1:IsShown() then
                for i = 1, 4 do
                        if getglobal("ContainerFrame" .. (i + 1)):IsShown() then
                                getglobal("ContainerFrame" .. (i + 1)):Hide()
                        end
                end
                ToggleBackpack()
                if ContainerFrame1:IsShown() then
                        for i = 1, 4 do
                                local link = GetInventoryItemLink("player", ContainerIDToInventoryID(i))
                                if link ~= nil then
                                        local itemId = tonumber(string.gsub(link, "|cff%x%x%x%x%x%x|Hitem:(%d+):%d+:%d+:%d+|h.*", "%1") or 0)
                                        local _,_,_,_,_,subtype = GetItemInfo(itemId)
                                        local usable = TRUE
                                        if not self.db.profile.includeAmmo and (subtype == L["TEXT_SOUL_BAG"] or subtype == L["TEXT_AMMO_POUCH"] or subtype == L["TEXT_QUIVER"]) then
                                                usable = FALSE
                                        elseif not self.db.profile.includeProfession and (subtype == L["TEXT_ENCHANTING_BAG"] or subtype == L["TEXT_HERB_BAG"] or subtype == L["TEXT_ENGINEERING_BAG"]) then
                                                usable = FALSE
                                        end
                                        if usable then
                                                ToggleBag(i)
                                        end
                                end
                        end
                end
        else
                for i = 0, 4 do
                        if getglobal("ContainerFrame" .. (i + 1)):IsShown() then
                                getglobal("ContainerFrame" .. (i + 1)):Hide()
                        end
                end
        end
end