vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local MYBANK_DEFAULT_OPTIONS = {
        Columns  = 6,
        Replace  = TRUE,
        Bag      = "bar",
        Graphics = "default",
        Count    = "free",
        HlItems  = TRUE,
        HlBags   = TRUE,
        Freeze   = FALSE,
        Lock     = FALSE,
        NoEsc    = FALSE,
        Title    = TRUE,
        Cash     = TRUE,
        Buttons  = TRUE,
        AIOI     = FALSE,
        Border   = TRUE,
        Cache    = nil,
        Player   = FALSE,
        Scale    = FALSE,
        Anchor   = "bottomleft",
        BackColor  = {0.7,0,0,0},
        SlotColor    = nil,
        AmmoColor    = nil,
        EnchantColor = nil,
        EngColor     = nil,
        HerbColor    = nil,
}
MyBankClass = MyBagsCoreClass:new({
        name           = MYBANK_NAME,
        description    = MYBANK_DESCRIPTION,
        db             = AceDbClass:new("MyBankDB"),
        defaults       = MYBANK_DEFAULT_OPTIONS,
        frameName      = "MyBankFrame",
        cmd            = AceChatCmdClass:new(MYBANK_COMMANDS, MYBANK_CMD_OPTIONS),

        totalBags        = 6,
        firstBag         = 5,
        isBank                    = TRUE,
        atBank           = FALSE,

        saveBankFrame    = BankFrame,

        anchorPoint      = "BOTTOMLEFT",
        anchorParent     = "UIParent",
        anchorOffsetX    = 5,
        anchorOffsetY    = 100,
})

function MyBankClass:Enable()
        MyBagsCoreClass.Enable(self)
        MyBankFrameBank.maxIndex = 24
        MyBankFrameBank:SetID(BANK_CONTAINER)
        MyBankFrameBag0:SetID(5)
        MyBankFrameBag1:SetID(6)
        MyBankFrameBag2:SetID(7)
        MyBankFrameBag3:SetID(8)
        MyBankFrameBag4:SetID(9)
        MyBankFrameBag5:SetID(10)
        if self.GetOpt("Replace") then
                BankFrame:UnregisterEvent("BANKFRAME_OPENED")
                BankFrame:UnregisterEvent("BANKFRAME_CLOSED")
                setglobal("BankFrame", self.frame)
        end
        MyBankFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyBankPortait");
        StaticPopupDialogs["PURCHASE_BANKBAG"] = {
                text = TEXT(CONFIRM_BUY_BANK_SLOT),
                button1 = TEXT(YES),
                button2 = TEXT(NO),
                OnAccept = function()
                        if CT_oldPurchaseSlot then
                                CT_oldPurchaseSlot()
                        else
                                PurchaseSlot()
                        end;
                end,
                OnShow = function()
                        MoneyFrame_Update(this:GetName().."MoneyFrame", GetBankSlotCost());
                end,
                showAlert = 1,
                hasMoneyFrame = 1,
                timeout = 0,
                hideOnEscape = 1,
        }
end

function MyBankClass:Disable()
        BankFrame = self.saveBankFrame
        BankFrame:RegisterEvent("BANKFRAME_OPENED")
        BankFrame:RegisterEvent("BANKFRAME_CLOSED")
end
function MyBankClass:RegisterEvents()
        MyBagsCoreClass.RegisterEvents(self)
        self:RegisterEvent("BANKFRAME_OPENED")
        self:RegisterEvent("BANKFRAME_CLOSED")
        self:RegisterEvent("PLAYERBANKSLOTS_CHANGED",   "LayoutFrameOnEvent")
        self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED","LayoutFrameOnEvent")
end

function MyBankClass:HookFunctions()
        MyBagsCoreClass.HookFunctions(self)
        self:Hook("OpenAllBags")
        self:Hook("CloseAllBags")
end
function MyBankClass:OpenAllBags(forceopen)
        self:debug("OpenAllBagsHook")
        if forceopen then OpenBackpack() else ToggleBackpack() end
        local action
        if (IsBagOpen(0) or MyInventory.frame:IsVisible()) then 
                action = "OpenBag" 
        else 
                action = "CloseBag" 
        end
        for i=1, 4, 1 do
                if not (MyInventory.GetOpt("Replace") and MyInventory:IncludeBag(i)) then
                        self.Hooks[action].orig(i)
                end
        end
        for i=5, 10, 1 do
                if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then
                        self.Hooks[action].orig(i)
                end
        end
end
function MyBankClass:CloseAllBags()
        self:debug("CloseAllBagsHook")
        MyInventory:Close()
        CloseBackpack() -- just in case backpack is not contolled by MyInventory
        for i=1, 4, 1 do
                if not MyInventory.GetOpt("Replace") or not MyInventory:IncludeBag(i) then
                        self.Hooks["CloseBag"].orig(i)
                end
        end
        for i=5, 10, 1 do
                if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then
                        self.Hooks["CloseBag"].orig(i)
                end
        end
end

function MyBankClass:BAG_UPDATE()
--      local time = GetTime()
        local bag = arg1
        if self.isLive and (bag == -1 or (bag >= 5 and bag <= 10)) then
                self:LayoutFrame()
        end
--      self:debug(event.." bag" .. (bag or "nil").." ".. GetTime()-time)
end
function MyBankClass:BANKFRAME_OPENED()
        self:debug("BANKFRAME_OPENED")
        MyBank.atBank = TRUE
        SetPortraitTexture(MyBankFramePortrait, "npc")
        if self.Freeze == "always" or (self.Freeze == "sticky" and self.frame:IsVisible()) then
                self.holdOpen = TRUE
        else
                self.holdOpen = nil
        end
        if self.GetOpt("Replace") then
                self:Open()
        else
                self:LayoutFrame()
        end
end
function MyBankClass:BANKFRAME_CLOSED()
        self:debug("BANKFRAME_CLOSED")
        MyBank.atBank = FALSE
        MyBankFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyBankPortait") -- [sic]
        if self.GetOpt("Replace") and not self.holdOpen then
                if self.frame:IsVisible() then 
                        self.frame:Hide()
                end -- calling self:close() would trigger the bank closing twice
        else
                self.holdOpen = nil
                if self.isLive then self:LayoutFrame() end
        end
end

function MyBankClass:GetInfoFunc()
        if self.isLive then
                return self.GetInfoLive
        end
        if IsAddOnLoaded("KC_Items") and KC_Items.bank then
                return self.GetInfoKC
        end
        if IsAddOnLoaded("MyBagsCache") then
                return self.GetInfoMyBagsCache
        end
        return self.GetInfoNone
end
function MyBankClass:GetInfoKC(bag, slot, charID)
        if not MYBAGS_KC_CHARS then return self.GetInfoNone end
        local texture, count, ID, locked, quality, readable = nil
        if not charID then charID = self:GetCurrentPlayer() end
        local faction = MYBAGS_KC_CHARS[charID]["faction"]
        if slot then
                ID,count = KC_Items.bank:SlotInfo(bag, slot, faction, charID)
        else
                ID,count = KC_Items.bank:BagInfo(bag, faction, charID)
        end
        if ID == "" or ID == "nil" then ID = nil end
        if ID then
                local itype,isubtype
                _,_,quality,_,itype,isubtype,_,_,texture = GetItemInfo("item:"..ID)
                _,_,_,quality = GetItemQualityColor(quality or 0)
                if not slot then readable = ace.IsSpecialtyBag(itype,isubtype) end
                quality = (strsub(quality,5)) -- here instead of return to keep nil if empty slot
        end
        count = ace.tonum(count)
        return texture, count, ID, locked, quality, readable, nil
end
function MyBankClass:SetReplace()
        MyBagsCoreClass.SetReplace(self)
        if self.GetOpt("Replace") then
                BankFrame:UnregisterEvent("BANKFRAME_OPENED")
                BankFrame:UnregisterEvent("BANKFRAME_CLOSED")
                setglobal("BankFrame", self.frame)
        else
                setglobal("BankFrame",  self.saveBankFrame)
                BankFrame:RegisterEvent("BANKFRAME_OPENED")
                BankFrame:RegisterEvent("BANKFRAME_CLOSED")
        end
end

MyBank = MyBankClass:new()
MyBank:RegisterForLoad()