vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--$Id: OneCore.lua 8409 2006-08-19 02:27:30Z kaelten $
OneCore = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceModuleCore-2.0", "AceHook-2.0")

local L = AceLibrary("AceLocale-2.0"):new("OneBag")

function OneCore:OnInitialize()
        self:Hook("BankFrame_OnEvent", function(event) 
                LoadAddOn("OneBank")
        local module = self:HasModule("OneBank") and self:GetModule("OneBank")
                if not module or not module:IsActive()  then
                        self.hooks.BankFrame_OnEvent.orig(event)
                end
        end)
    
    self.defaults = {
                cols = 10,
                scale = 1,
                alpha = 1,
                colors = {
                        mouseover       = {r = 0, g = .7, b = 1},
                        ammo            = {r = 1, g = 1, b = 0},
                        soul            = {r = .5, g = .5, b = 1}, 
                        prof            = {r = 1, g = 0, b = 1},
            bground     = {r = 0, g = 0, b = 0, a = .45},
            glow        = false,
                        rarity          = true,
                },
                show = {
                        ['*'] = true
                },
                strata = 2,
        locked = false,
        clamped = true,
        bagBreak = false,
        vAlign = L"Top",
        }
    
    
    self.modulePrototype.colWidth               = 39
    self.modulePrototype.rowHeight              = 39
    self.modulePrototype.topBorder              = 2
    self.modulePrototype.bottomBorder   = 24
    self.modulePrototype.rightBorder    = 5
    self.modulePrototype.leftBorder     = 8 
    
    self.modulePrototype.stratas = {
        "LOW",
        "MEDIUM",
        "HIGH",
        "DIALOG",
        "FULLSCREEN",
        "FULLSCREEN_DIALOG",
        "TOOLTIP",
    }

end

function OneCore:GetFreshOptionsTable(module)
    local self = module
    return {
                type="group", 
                args = {
            frame = {
                                name = L"Frame", type = 'group',
                                desc = L"Frame Options", order = 2,
                                args = {
                    cols = { 
                        name = L"Columns", type = "range", step = 1,
                        desc = L"Sets the number of columns to use", 
                        get  = function() return self.db.profile.cols end, 
                        set  = function(num) 
                            self.db.profile.cols = num
                            self:OrganizeFrame(true)
                        end, 
                        min  = 5, max  = 20,
                    },
                    scale = { 
                        name = L"Scale", type = "range", 
                        desc = L"Sets the scale of the frame", 
                        get  = function() return self.db.profile.scale end, 
                        set  = function(num) 
                            self.db.profile.scale = num
                            self.frame:SetScale(num)
                            if self.frame.bagFrame then
                                self.frame.bagFrame:SetScale(num)
                                local shownContainerID = IsBagOpen(KEYRING_CONTAINER)
                                if ( shownContainerID and not self.isBank) then
                                    local frame = getglobal("ContainerFrame"..shownContainerID)
                                    frame:SetScale(num)
                                end
                            end
                        end, 
                        min  = .2, max  = 2,
                        isPercent = true,
                    },
                    strata = { 
                        name = L"Strata", type = "range", 
                        desc = L"Sets the strata of the frame", 
                        get  = function() return self.db.profile.strata end, 
                        set  = function(num) 
                            self.db.profile.strata = num
                            self.frame:SetFrameStrata(self.stratas[num])
                            if self.frame.bagFrame then
                                self.frame.bagFrame:SetFrameStrata(self.stratas[num])
                            end
                            StackSplitFrame:SetFrameStrata(self.stratas[num+1])
                        end, 
                        min  = 1, max  = 5, step = 1,
                    },
                    bagbreak = { 
                        name = L"Bag Break", type = "toggle",
                        desc = L"Sets wether to start a new row at the beginning of a bag.", 
                        get  = function() return self.db.profile.bagBreak end, 
                        set  = function(value) 
                            self.db.profile.bagBreak = value
                            self:OrganizeFrame(true)
                        end, 
                    },
                    valign = { 
                        name = L"Vertical Alignment", type = "text",
                        desc = L"Sets wether to have the extra spaces on the top or bottom.", 
                        get  = function() return self.db.profile.vAlign end, 
                        set  = function(value) 
                            self.db.profile.vAlign = value
                            self:OrganizeFrame(true)
                        end,
                        validate = {L"Top", L"Bottom"}
                    },
                    alpha = { 
                        name = L"Alpha", type = "range", 
                        desc = L"Sets the alpha of the frame", 
                        get  = function() return self.db.profile.alpha end, 
                        set  = function(num) 
                            self.db.profile.alpha = num
                            self.frame:SetAlpha(num)
                            if self.frame.bagFrame then
                                self.frame.bagFrame:SetAlpha(num)
                            
                                local shownContainerID = IsBagOpen(KEYRING_CONTAINER)
                                if ( shownContainerID and not self.isBank) then
                                    local frame = getglobal("ContainerFrame"..shownContainerID)
                                    frame:SetAlpha(num)
                                end
                            end
                        end, 
                        min  = .05, max  = 1,
                        isPercent = true,
                    },
                    locked = {
                        name = L"Locked", 
                        type = 'toggle',
                        desc = L"Toggles the ability to move the frame",
                        get = function() return self.db.profile.locked end,
                        set = function(v) 
                            self.db.profile.locked = v 
                        end,
                    },
                    clamped = {
                        name = L"Clamped",
                        type = 'toggle',
                        desc = L"Toggles the ability to drag the frame off screen.",
                        get = function() return self.db.profile.clamped end,
                        set = function(v) 
                            self.db.profile.clamped = v 
                            self.frame:SetClampedToScreen(v)
                            if self.frame.bagFrame then
                                self.frame.bagFrame:SetClampedToScreen(v)
                            end
                        end,
                    }, 
                }
            },
                        show = {
                                name = L"Show", type = 'group', order = 3,
                                desc = L"Various Display Options",
                                args = {
                     counts = {
                                                name = L"Counts",
                        type = 'toggle', order = 1,
                                                desc = L"Toggles showing the counts for special bags.",
                                                get = function() return self.db.profile.show.counts end,
                                                set = function(v) 
                                                        self.db.profile.show.counts = v 
                            if self.DoBankSlotCounts then
                                self:DoBankSlotCounts()
                                self:DoInventorySlotCounts()
                            else
                                self:DoSlotCounts()
                            end
                                                end,
                                        },
                    direction = {
                                                cmdName = L"Direction", guiName = L"Forward",
                        type = 'toggle', order = 2,
                                                desc = L"Toggles direction the bags are shown",
                                                get = function() return self.db.profile.show.direction end,
                                                set = function(v) 
                                                        self.db.profile.show.direction = v 
                                                        self:OrganizeFrame(true)
                                                end,
                        map = { [false] = L"|cffff0000Reverse|r", [true] = L"|cff00ff00Forward|r" }
                                        },
                    ammo = {
                                                name = L"Ammo Bag", type = 'toggle', order = 3,
                                                desc = L"Turns display of ammo bags on and off.",
                                                get = function() return self.db.profile.show.ammo end,
                                                set = function(v) 
                                                        self.db.profile.show.ammo = v 
                                                        self:OrganizeFrame(true)
                                                end,
                                        },
                                        soul = {
                                                name = L"Soul Bag", type = 'toggle', order = 4,
                                                desc = L"Turns display of soul bags on and off.",
                                                get = function() return self.db.profile.show.soul end,
                                                set = function(v) 
                                                        self.db.profile.show.soul = v 
                                                        self:OrganizeFrame(true)
                                                end,
                                        },
                                        prof = {
                                                name = L"Profession Bag", type = 'toggle', order = 4.5,
                                                desc = L"Turns display of profession bags on and off.",
                                                get = function() return self.db.profile.show.prof end,
                                                set = function(v) 
                                                        self.db.profile.show.prof = v 
                                                        self:OrganizeFrame(true)
                                                end,
                                        },
                                }
                        },
                        colors = {
                                name = L"Colors", type = 'group', order = 1,
                                desc = L"Different color code settings.",
                                args = {
                                        mouseover = {
                                                name = L"Mouseover Color", type = "color", order = 1,
                                                desc = L"Changes the highlight color for when you mouseover a bag slot.",
                                                get = function()
                                                        local color = self.db.profile.colors.mouseover
                                                        return color.r, color.g, color.b
                                                end,
                                                set = function(r, g, b) self.db.profile.colors.mouseover = {r = r, g = g, b = b} end,
                                        },
                                        ammo = {
                                                name = L"Ammo Bag Color", type = "color", order = 2,
                                                desc = L"Changes the highlight color for Ammo Bags.",
                                                get = function() 
                                                        local color = self.db.profile.colors.ammo
                                                        return color.r, color.g, color.b
                                                end, 
                                                set = function(r, g, b) 
                                                        self.db.profile.colors.ammo = {r = r, g = g, b = b} 
                                                        for k, bag in self.fBags do
                                if self.frame.bags[bag] then
                                    for k, v in ipairs(self.frame.bags[bag]) do 
                                        self:SetBorderColor(v)
                                    end
                                end
                                                        end
                                                end,
                                        },
                                        soul = {
                                                name = L"Soul Bag Color", type = "color", order = 3,
                                                desc = L"Changes the highlight color for Soul Bags.",
                                                get = function()
                                                        local color = self.db.profile.colors.soul
                                                        return color.r, color.g, color.b
                                                end,
                                                set = function(r, g, b) 
                                                        self.db.profile.colors.soul = {r = r, g = g, b = b} 
                                                        for k, bag in self.fBags do
                                if self.frame.bags[bag] then
                                    for k, v in ipairs(self.frame.bags[bag]) do 
                                        self:SetBorderColor(v)
                                    end
                                end
                                                        end
                                                end,
                                        },
                                        prof = {
                                                name = L"Profession Bag Color", type = "color", order = 4,
                                                desc = L"Changes the highlight color for Profession Bags.",
                                                get = function()
                                                        local color = self.db.profile.colors.prof
                                                        return color.r, color.g, color.b
                                                end,
                                                set = function(r, g, b) 
                                                        self.db.profile.colors.prof = {r = r, g = g, b = b} 
                                                        for k, bag in self.fBags do
                                if self.frame.bags[bag] then
                                    for k, v in ipairs(self.frame.bags[bag]) do 
                                        self:SetBorderColor(v)
                                    end
                                end
                                                        end
                                                end,
                                        },
                    background = {
                                                name = L"Background Color", type = "color", order = 5,
                                                desc = L"Changes the background color for the frame.",
                                                get = function()
                                                        local color = self.db.profile.colors.bground
                                                        return color.r, color.g, color.b, color.a
                                                end,
                                                set = function(r, g, b, a) 
                                                        self.db.profile.colors.bground = {r = r, g = g, b = b, a = a} 
                                                        self.frame:SetBackdropColor(r, g, b, a)
                            if self.frame.bagFrame then
                                self.frame.bagFrame:SetBackdropColor(r, g, b, a)
                            end
                                                end,
                        hasAlpha = true,
                                        },
                    glow = {
                                                name = L"Highlight Glow", type = 'toggle', order = 6,
                                                desc = L"Turns hightlight glow on and off.",
                                                get = function() return self.db.profile.colors.glow end,
                                                set = function(v) 
                                                        self.db.profile.colors.glow = v 
                            for k, bag in self.fBags do
                                                                if self.frame.bags[bag] then
                                                                        for k, v in ipairs(self.frame.bags[bag]) do 
                                                                                self:SetBorderColor(v)
                                                                        end
                                                                end
                                                        end
                                                end,
                    },
                                        rarity = {
                                                name = L"Rarity Coloring", type = 'toggle', order = 7,
                                                desc = L"Turns rarity coloring on and off.",
                                                get = function() return self.db.profile.colors.rarity end,
                                                set = function(v) 
                                                        self.db.profile.colors.rarity = v 
                                                        for k, bag in self.fBags do
                                                                if self.frame.bags[bag] then
                                                                        for k, v in ipairs(self.frame.bags[bag]) do 
                                                                                self:SetBorderColor(v)
                                                                        end
                                                                end
                                                        end
                                                end,
                    },
                    reset = {
                        name = L'Reset', type = 'group', order = -1,
                        desc = L"Reset the different colors.",
                        args = {
                            mouseover = {
                                name = L"Mouseover Color", type = "execute",
                                desc = L"Returns your mouseover color to the default.",
                                func = function() 
                                    self.db.profile.colors.mouseover = {r = 0, g = .7, b = 1}
                                end,
                                order = 1
                            },
                            ammo = {
                                name = L"Ammo Slot Color", type = "execute",
                                desc = L"Returns your ammo slot color to the default.",
                                func = function() 
                                    self.db.profile.colors.ammo = {r = 1, g = 1, b = 0}
                                    for k, bag in self.fBags do
                                        if self.frame.bags[bag] then
                                            for k, v in ipairs(self.frame.bags[bag]) do 
                                                self:SetBorderColor(v)
                                            end
                                        end
                                    end
                                end,
                                order = 2
                            },
                            soul = {
                                name = L"Soul Slot Color", type = "execute",
                                desc = L"Returns your soul slot color to the default.",
                                func = function() 
                                    self.db.profile.colors.soul = {r = .5, g = .5, b = 1}
                                    for k, bag in self.fBags do
                                        if self.frame.bags[bag] then
                                            for k, v in ipairs(self.frame.bags[bag]) do 
                                                self:SetBorderColor(v)
                                            end
                                        end
                                    end
                                end,
                                order = 3
                            },
                            prof = {
                                name = L"Profession Slot Color", type = "execute",
                                desc = L"Returns your profession slot color to the default.",
                                func = function() 
                                    self.db.profile.colors.prof = {r = 1, g = 0, b = 1}
                                    for k, bag in self.fBags do
                                        if self.frame.bags[bag] then
                                            for k, v in ipairs(self.frame.bags[bag]) do 
                                                self:SetBorderColor(v)
                                            end
                                        end
                                    end
                                end,
                                order = 4
                            },
                            background = {
                                name = L"Background", type = "execute",
                                desc = L"Returns your frame background to the default.",
                                func = function() 
                                    self.db.profile.colors.bground = {r = 0, g = 0, b = 0, a = .45}  
                                    self.frame:SetBackdropColor(0, 0, 0, .45)
                                    if self.frame.bagFrame then
                                        self.frame.bagFrame:SetBackdropColor(0, 0, 0, .45)
                                    end
                                end,
                                order = 5
                            }
                        }
                                        }
                                }
                        }
                }
        }   
end

function OneCore:LoadOptionalCommands(baseArgs, module)
    local self = module
    if IsAddOnLoaded("MrPlow") then
        baseArgs.args.plow = {
                        name = L"Plow!", type = "execute",
                        desc = L"Organizes your bags.",
                        func = function() self:MrPlow() end,
            order = -5,
            notes = L"- Note: This option only appears if you have MrPlow installed"
                }
        end
end

function OneCore:CopyTable(from, into)
    if type(into) ~= "table" then into = {} end
    
        for key, val in from do
                if( type(val) == "table" ) then
                        into[key] = self:CopyTable(val)
                else
                        into[key] = val
                end
        end
        
        if (getn(from)) then
                table.setn(into, getn(from))            
        end

        return into
end

local module = OneCore.modulePrototype

function module:BuildFrame()
        debugprofilestart()    
        if self.isBank then
                if not self.frame.bags[BANK_CONTAINER] then 
                        self.frame.bags[BANK_CONTAINER] = CreateFrame("Frame", "BBankFrame", self.frame)
                        self.frame.bags[BANK_CONTAINER]:SetID(BANK_CONTAINER)
                        self.frame.bags[BANK_CONTAINER].size = 24
                        for slot = 1, 24 do
                                self.frame.bags[BANK_CONTAINER][slot] = CreateFrame("Button", self.frame.bags[BANK_CONTAINER]:GetName().."Item"..slot, self.frame.bags[BANK_CONTAINER], "OneBankItemButtonTemplate")
                                self.frame.bags[BANK_CONTAINER][slot]:SetID(slot)
                        end
                        self.needToOrganize = true
                end
        end
        
        for k, bag in self.fBags do             
                local size = GetContainerNumSlots(bag)
                for slot = 1, size do
                        if not self.frame.bags[bag] then 
                                self.frame.bags[bag] = CreateFrame("Frame", tostring(self)..bag, self.frame)
                                self.frame.bags[bag]:SetID(bag)
                        end
                        if not self.frame.bags[bag][slot] then
                                self.frame.bags[bag][slot] = CreateFrame("Button", tostring(self)..bag.."Item"..slot, self.frame.bags[bag], "OneBagItemButtonTemplate")
                                self.frame.bags[bag][slot]:SetID(slot)
                                self.needToOrganize = true
                        end
                end
                if self.frame.bags[bag] then
                        local curBag = self.frame.bags[bag]
                        local isAmmo, isSoul, isProf = self:GetBagTypes(bag)
                        if curBag.size ~= size or curBag.isAmmo ~= isAmmo or curBag.isSoul ~= isSoul or curBag.isProf ~= isProf then
                                self.needToOrganize = true
                        end
                        curBag.size, curBag.isAmmo, curBag.isSoul, curBag.isProf = size, isAmmo, isSoul, isProf
                end
        end
        self:Debug(L"%s ran in %s", "BuildFrame", debugprofilestop())
end

function module:OrganizeFrame(needs)
        debugprofilestart()
        if not self.needToOrganize and not needs then return end
        self.needToOrganize = false
        
        local cols, curCol, curRow, justinc = self.db.profile.cols, 1, 1, false
        
        self.soulSlots, self.ammoSlots, self.profSlots, self.slotCount, self.totalCount = 0, 0, 0, 0, 0
        
        for k, bag in self.fBags do 
                if self.frame.bags[bag] then
                        for k2, v2 in ipairs(self.frame.bags[bag]) do 
                                v2:Hide()
                        end
            self.totalCount = self.totalCount + (self.frame.bags[bag].size or 0)
        end
        end
        
    if self.db.profile.vAlign == L"Bottom" then
        curCol = math.mod(self.totalCount, cols) > 0 and cols - math.mod(self.totalCount, cols) + 1 or 1
        if self.db.profile.bagBreak then
            for k, bag in self.fBags do 
                if self.frame.bags[bag] and self.frame.bags[bag].size then curCol = curCol - 1 end
            end
            curCol = curCol + 1
        end
    end
    
    
        for k, bag in (self.db.profile.show.direction and self.fBags or self.rBags) do
                local curBag = self.frame.bags[bag]
        
                if curBag and curBag.size and curBag.size > 0 then
            if bag > 0 and math.mod(self.frame.bags[bag-1] and self.frame.bags[bag-1].size or 0, cols) ~= 0 and self.db.profile.bagBreak then 
                curCol = curCol + 1
                if curCol > cols then curCol, curRow, justinc = 1, curRow + 1, true  end
            end
                        if curBag.isAmmo then
                                self.ammoSlots = self.ammoSlots + curBag.size
                        elseif curBag.isSoul then
                                self.soulSlots = self.soulSlots + curBag.size
                        elseif curBag.isProf then
                                self.profSlots = self.profSlots + curBag.size
                        else
                                self.slotCount = self.slotCount + curBag.size
                        end
                        if self:ShouldShow(bag, curBag.isAmmo, curBag.isSoul, curBag.isProf) then
                                for slot = 1, curBag.size do
                    justinc = false
                                        curBag[slot]:ClearAllPoints()
                                        curBag[slot]:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self.leftBorder + (self.colWidth * (curCol - 1)) , 0 - self.topBorder - (self.rowHeight * curRow))
                                        curBag[slot]:Show()                             
                                        curCol = curCol + 1
                                        if curCol > cols then curCol, curRow, justinc = 1, curRow + 1, true  end
                                end
                        end
                end
        end
        self:Debug("CurrentRow: %s", curRow)
        
        if  not justinc then curRow = curRow + 1 end
        self.frame:SetHeight(curRow * self.rowHeight + self.bottomBorder + self.topBorder) 
        self.frame:SetWidth(cols * self.colWidth + self.leftBorder + self.rightBorder)
        
        self:Debug(L"%s ran in %s", "OrganizeFrame", debugprofilestop())
        
end

function module:SetBorderColor(slot)
        local color = {r = 1, g = 1, b = 1}
        
        local bag = slot:GetParent()
        local special = false
    
        if bag.isAmmo then 
                color = self.db.profile.colors.ammo
        special = true
        elseif bag.isSoul then
                color = self.db.profile.colors.soul
        special = true
        elseif bag.isProf then
                color = self.db.profile.colors.prof
        special = true
        elseif self.db.profile.colors.rarity then
                local _, _, hex = strfind(GetContainerItemLink(bag:GetID(), slot:GetID()) or "", "(|cff%x%x%x%x%x%x)")
                
                for k, v in ipairs(ITEM_QUALITY_COLORS) do
                        if hex == v.hex then 
                color = v 
                if k > 1 then
                    special = true 
                end
            end
        end
        end
    
    if special and self.db.profile.colors.glow then        
        slot:SetNormalTexture("Interface\\Buttons\\UI-ActionButton-Border")
        slot:GetNormalTexture():SetBlendMode("ADD")
        slot:GetNormalTexture():SetAlpha(.8)
        slot:GetNormalTexture():SetPoint("CENTER", slot:GetName(), "CENTER", 0, 1)
    elseif special then
        slot:SetNormalTexture("Interface\\AddOns\\OneBag\\BagSlot2")
        slot:GetNormalTexture():SetBlendMode("BLEND")
        slot:GetNormalTexture():SetPoint("CENTER", slot:GetName(), "CENTER", 0, 0)
    else
        slot:SetNormalTexture("Interface\\AddOns\\OneBag\\BagSlot")
        slot:GetNormalTexture():SetBlendMode("BLEND")
        slot:GetNormalTexture():SetPoint("CENTER", slot:GetName(), "CENTER", 0, 0)
    end
        slot:GetNormalTexture():SetVertexColor(color.r, color.g, color.b)
end

function module:GetBagTypes(bag)
        if( bag <= 0 ) then return end
        
        local _, _, id = strfind(GetInventoryItemLink("player", ContainerIDToInventoryID(bag)) or "", "item:(%d+)");
        if id then 
                local _, _, _, _, itemType, subType = GetItemInfo(id);
                return (itemType == L"Quiver" or false), (subType == L"Soul Bag" or false), (( itemType == L"Container" and not (subType == L"Bag" or subType == L"Soul Bag")  ) or false)
        end
end

function module:HighlightBagSlots(bag)
        if not self.frame.bags[bag] then return end
        
        local color = self.db.profile.colors.mouseover 
        for k, v in ipairs(self.frame.bags[bag]) do 
    
        if self.db.profile.colors.glow then        
            v:SetNormalTexture("Interface\\Buttons\\UI-ActionButton-Border")
            v:GetNormalTexture():SetBlendMode("ADD")
            v:GetNormalTexture():SetAlpha(.8)
        else
            v:SetNormalTexture("Interface\\AddOns\\OneBag\\BagSlot2")
            v:GetNormalTexture():SetBlendMode("BLEND")
        end
                v:GetNormalTexture():SetVertexColor(color.r, color.g, color.b)
        end
end

function module:UnhighlightBagSlots(bag)
        if not self.frame.bags[bag] then return end
        for k, v in ipairs(self.frame.bags[bag]) do 
                self:SetBorderColor(v)
        end
end

function module:UpdateBag(bag)
        debugprofilestart()
        if not self.frame.bags[bag] then return end
        
        self:BuildFrame()
        self:OrganizeFrame()
        
        if not self.frame.bags[bag].colorLocked then
                for k, v in ipairs(self.frame.bags[bag]) do 
                        self:SetBorderColor(v)
                end
        end
        
        if self.frame.bags[bag].size and self.frame.bags[bag].size > 0 then
                ContainerFrame_Update(self.frame.bags[bag])
        end
        
        self:DoSlotCounts()
        self:Debug(L"%s ran in %s", "UpdateBag", debugprofilestop())
end

function module:DoSlotCounts()
        local usedSlots, usedAmmoSlots, usedSoulSlots, usedProfSlots, ammoQuantity = 0, 0, 0, 0, 0 
        
        for k, bag in self.fBags do
                if self.frame.bags[bag] then
                        local tmp, qty = 0, 0
                        for slot = 1, GetContainerNumSlots(bag) do
                                local texture, itemCount = GetContainerItemInfo(bag, slot);
                                if( texture) then 
                                        tmp = tmp + 1 
                                        qty = qty + itemCount
                                end
                        end
                        
                        if self.frame.bags[bag].isAmmo then
                                usedAmmoSlots = usedAmmoSlots + tmp
                                ammoQuantity = ammoQuantity + qty
                        elseif self.frame.bags[bag].isSoul then
                                usedSoulSlots = usedSoulSlots + tmp
                        elseif self.frame.bags[bag].isProf then
                                usedProfSlots = usedProfSlots + tmp
                        else
                                usedSlots = usedSlots + tmp
                        end
                end
        end
        
        self:Debug(L"Normal used: %s, Soul used: %s, Prof used: %s, Ammo used %s, Ammo quantity %s.", usedSlots, usedSoulSlots, usedProfSlots, usedAmmoSlots, ammoQuantity)
        
        local info = 1
        local  name = self.frame:GetName() .. "Info"    
        
        
        getglobal(name .. info):SetText(format(L"%s/%s Slots", usedSlots, self.slotCount))

    info = info + 1
    
    for i = 2, 4 do 
        getglobal(name .. i):SetText("")
    end
    
    if self.db.profile.show.counts then        
        if self.ammoSlots > 0 then
            getglobal(name .. info):SetText(format(L"%s/%s Ammo", ammoQuantity, self.ammoSlots * 200))
            info = info + 1
        end
        if self.soulSlots > 0 then
            getglobal(name .. info):SetText(format(L"%s/%s Soul Shards", usedSoulSlots, self.soulSlots))
            info = info + 1
        end
        if self.profSlots > 0 then
            getglobal(name .. info):SetText(format(L"%s/%s Profession Slots", usedProfSlots, self.profSlots))
            info = info + 1
        end
    end
end

function module:ShouldShow(bag, isAmmo, isSoul, isProf) 
        local show = true
        
        show = show and self.db.profile.show[bag] or false
        
        if isAmmo then
                show = show and self.db.profile.show.ammo or false
        elseif isSoul then
                show = show and self.db.profile.show.soul or false
        elseif isProf then
                show = show and self.db.profile.show.prof or false
        end
        return (show or self.frame.bags[bag].colorLocked )
end

function module:OpenMenu()      
        if self.dewdrop:IsOpen(getglobal(self.frame:GetName() .. "ConfigButton")) then
                self.dewdrop:Close()
        else
                self.dewdrop:Open(getglobal(self.frame:GetName() .. "ConfigButton"), self.frame)
        end
end

function module:MrPlow()
        MrPlow:Works(self.isBank and "bank" or nil)
end

function module:OnBaseShow()
    this:SetScale(self.db.profile.scale)
    this:SetAlpha(self.db.profile.alpha)
    this:SetFrameStrata(self.stratas[self.db.profile.strata])
    StackSplitFrame:SetFrameStrata(self.stratas[self.db.profile.strata+1])
    
    local color = self.db.profile.colors.bground
    this:SetBackdropColor(color.r, color.g, color.b, color.a)
    
        self.frame:SetClampedToScreen(self.db.profile.clamped or false)
end

function module:OnShow()
    self:OnBaseShow()
    self:OnCustomShow()
    PlaySound("igBackPackOpen")
    
    if self.frame.bagFrame and self.frame.bagFrame.wasShown then
        self.frame.bagFrame:Show()
        self.frame.bagFrame.wasShown  = false
    end
    
    self:BuildFrame()
    self:OrganizeFrame()
    for k, i in self.fBags do
        self:UpdateBag(i)     
    end
    
    if self.frame.bags[-1] and (not self.frame.bags[-1].colorLocked) then
        for k, v in ipairs(self.frame.bags[-1]) do 
            self:SetBorderColor(v)
        end
    end
    
    self:DoSlotCounts()
end

function module:OnCustomShow() end -- Meant to be overridden

function module:OnBaseHide()
    if self.dewdrop and self.dewdrop:IsOpen(getglobal(self.frame:GetName() .. "ConfigButton")) then
                self.dewdrop:Close()
        end
end

function module:OnHide()
    self:OnBaseHide()
    self:OnCustomHide()
    PlaySound("igBackPackClose")
    if self.frame.bagFrame and self.frame.bagFrame:IsVisible() then
        self.frame.bagFrame:Hide()
        self.frame.bagFrame.wasShown = true
    end
end

function module:OnCustomHide() end -- Meant to be overridden


function module:RegisterDewdrop(baseArgs)
    self.dewdrop = AceLibrary("Dewdrop-2.0")
        self.dewdrop:Register(self.frame,
                        'children', baseArgs,
                        'point', function(parent)
                                if parent:GetTop() < GetScreenHeight() / 2 then
                                        return "BOTTOMRIGHT", "TOPRIGHT"
                                else
                                        return "TOPRIGHT", "BOTTOMRIGHT"
                                end
                        end,
                        'dontHook', true
                )
end

Generated by GNU Enscript 1.6.5.90.