local NAME, ADDON = ... ADDON.bagController = {} ADDON.bagController.__index = ADDON.bagController local controller = ADDON.bagController function controller:Init() ADDON.events:Add('MERCHANT_SHOW', self) end function DJBagsBagContainer_OnShow() DJBagsBagContainer.mainBar:Show() ADDON.events:Add('INVENTORY_SEARCH_UPDATE', controller) ADDON.events:Add('BAG_UPDATE', controller) ADDON.events:Add('BAG_UPDATE_COOLDOWN', controller) ADDON.events:Add('ITEM_LOCK_CHANGED', controller) ADDON.events:Add('BAG_UPDATE_DELAYED', controller) ADDON.events:Add('DJBAGS_BAG_HOVER', controller) end function DJBagsBagContainer_OnHide() ADDON.events:Remove('INVENTORY_SEARCH_UPDATE', controller) ADDON.events:Remove('BAG_UPDATE', controller) ADDON.events:Remove('BAG_UPDATE_COOLDOWN', controller) ADDON.events:Remove('ITEM_LOCK_CHANGED', controller) ADDON.events:Remove('BAG_UPDATE_DELAYED', controller) ADDON.events:Remove('DJBAGS_BAG_HOVER', controller) end function DJDBagsBagsButton_OnClick(self) if self:GetChecked() then controller:ShowBagBar() else controller:HideBagBar() end end function controller:Update() ADDON:UpdateBags({0, 1, 2, 3, 4}) DJBagsBagContainer:Arrange() end function controller:Toggle() if DJBagsBagContainer:IsVisible() then self:Close() else self:Open() end end function controller:Open() self:Update() DJBagsBagContainer:Show() end function controller:Close() DJBagsBagContainer:Hide() end function controller:OnItemsCleared() if DJBagsBagContainer:IsVisible() then self:Update() end end function controller:BAG_UPDATE(bag) ADDON:UpdateBags({bag}) DJBagsBagContainer:Arrange() end function controller:MERCHANT_SHOW() if ADDON.settings:GetSettings(DJBags_TYPE_MAIN)[DJBags_SETTING_SELL_JUNK] then local price = 0 for bag = 0, NUM_BAG_SLOTS do for slot = 1 , GetContainerNumSlots(bag) do if select(4, GetContainerItemInfo(bag, slot)) == LE_ITEM_QUALITY_POOR then ShowMerchantSellCursor(1) UseContainerItem(bag, slot) price = price + select(11, GetItemInfo(GetContainerItemID(bag, slot))) end end end ResetCursor() if price ~= 0 then DEFAULT_CHAT_FRAME:AddMessage(string.format(DJBags_LOCALE_SOLD_JUNK, GetCoinTextureString(price))) end end end function controller:INVENTORY_SEARCH_UPDATE() for bag = 0, NUM_BAG_SLOTS do for slot = 1, GetContainerNumSlots(bag) do ADDON.cache:GetItem(bag, slot):UpdateSearch() end end end function controller:BAG_UPDATE_COOLDOWN() for bag = 0, NUM_BAG_SLOTS do for slot = 1, GetContainerNumSlots(bag) do ADDON.cache:GetItem(bag, slot):UpdateCooldown() end end end function controller:ITEM_LOCK_CHANGED(bag, slot) if bag then if bag >= 0 and bag <= NUM_BAG_SLOTS and slot then ADDON.cache:GetItem(bag, slot):UpdateLock() end if DJBagsBagContainer.mainBar.bagBar and DJBagsBagContainer.mainBar.bagBar.bags[bag] then DJBagsBagContainer.mainBar.bagBar.bags[bag]:UpdateLock() end end end function controller:DJBAGS_BAG_HOVER(bag, locked) if bag and bag >= 0 and bag <= NUM_BAG_SLOTS then for bagSlot = 0, NUM_BAG_SLOTS do if bagSlot ~= bag then for slot = 1, GetContainerNumSlots(bagSlot) do ADDON.cache:GetItem(bagSlot, slot):SetFiltered(locked) end end end end end function controller:BAG_UPDATE_DELAYED() if DJBagsBagContainer.mainBar.bagBar then for _, bagItem in pairs(DJBagsBagContainer.mainBar.bagBar.bags) do bagItem:Update() end end end function controller:ShowBagBar() self:GetBagBar():Show() end function controller:HideBagBar() self:GetBagBar():Hide() end function controller:GetBagBar() if not DJBagsBagContainer.mainBar.bagBar then local bagBar = CreateFrame('Frame', 'DJBagsBagBar', DJBagsBagContainer.mainBar, 'DJBagsContainerTemplate') bagBar.bags = {} local prevBag for bag = 1, NUM_BAG_SLOTS do local bagItem = ADDON:NewBagItem('DJBagsBag_' .. bag, bag, GetInventorySlotInfo("Bag" .. (bag-1) .. "Slot")) bagItem:SetParent(bagBar.container) bagItem:SetPoint('TOPRIGHT', prevBag or bagBar.container, prevBag and 'TOPLEFT' or 'TOPRIGHT', prevBag and -5 or 0, 0) bagItem:Update() bagItem:Show() prevBag = bagItem bagBar.bags[bagItem:GetID()] = bagItem end bagBar:SetSize((prevBag:GetWidth() + 5) * NUM_BAG_SLOTS - 5 + bagBar.padding * 2, prevBag:GetHeight() + bagBar.padding * 2) bagBar:SetPoint('TOPRIGHT', DJBagsBagContainer.mainBar, 'BOTTOMRIGHT', 0, -5) DJBagsBagContainer.mainBar.bagBar = bagBar end return DJBagsBagContainer.mainBar.bagBar end