local _, S = ... local pairs, ipairs, string, type, time = pairs, ipairs, string, type, time -- EVENT HANDLING local eventHandlerFrame = CreateFrame("FRAME") eventHandlerFrame:RegisterEvent("BANKFRAME_OPENED") eventHandlerFrame:RegisterEvent("BANKFRAME_CLOSED") eventHandlerFrame:SetScript("OnEvent", function(self, event, param1, param2, param3) if event == "BANKFRAME_OPENED" then S.OpenBag() elseif event == "BANKFRAME_CLOSED" then S.CloseBag() end end) -- BAG OPENING / CLOSING local enabled = true function S.Enable() enabled = true end function S.Disable() enabled = false end local lastToggledTime = 0 local lastShownTime = 0 local lastHiddenTime = 0 local TOGGLE_TIMEOUT = 0.01 local newItemsToRemove = {} function S.ScheduleNewItemToRemove(bag, slot) if not newItemsToRemove[bag] then newItemsToRemove[bag] = {} end newItemsToRemove[bag][slot] = true end -- Function naming at its best function S.IsItemScheduledToBeNotNew(bag, slot) if not newItemsToRemove[bag] then return false end return newItemsToRemove[bag][slot] end S.primaryFrame:SetScript("OnShow", function(self) S.Utils.TriggerEvent("PrimaryFrameOpened") end) S.primaryFrame:SetScript("OnHide", function(self) -- Remove new items that have been hovered over for bag, v in pairs(newItemsToRemove) do for slot, _ in pairs(v) do C_NewItems.RemoveNewItem(bag, slot) end end newItemsToRemove = {} S.Utils.TriggerEvent("PrimaryFrameClosed") end) function S.OpenBag(bag) if enabled then if (force or lastToggledTime < GetTime() - TOGGLE_TIMEOUT) and not S.primaryFrame:IsShown() then -- Make player select a settings profile before using Sorted. if not S.Settings.HasProfile() then S.settingsProfilesFrame:Show() S.settingsProfilesFrame.source = "bags" else PlaySound(SOUNDKIT.IG_BACKPACK_OPEN) --local startTime = debugprofilestop() S.primaryFrame:Show() --print(debugprofilestop() - startTime) lastToggledTime = GetTime() lastShownTime = GetTime() end end --[[if bag == KEYRING_CONTAINER then _G["SortedBag-2Frame"]:Show() end]] end end function S.CloseBag(bag) if (force or lastToggledTime < GetTime() - TOGGLE_TIMEOUT) and S.primaryFrame:IsShown() then PlaySound(SOUNDKIT.IG_BACKPACK_CLOSE) S.primaryFrame:Hide() lastToggledTime = GetTime() lastHiddenTime = GetTime() --[[for k,v in pairs(S.bagFrames) do v:Hide() end]] end end function S.ToggleBag(bag) if S.primaryFrame:IsShown() then S.CloseBag(bag) else S.OpenBag(bag) if S.WoWVersion() == 1 and bag == KEYRING_CONTAINER then S.primaryFrame.SelectSideTab(1, true) elseif S.WoWVersion() <= 3 and bag == KEYRING_CONTAINER then S.primaryFrame.SelectSideTab(3, true) else S.primaryFrame.SelectSideTab(nil) end end end hooksecurefunc('OpenBackpack', S.ToggleBag) hooksecurefunc('CloseBackpack', S.CloseBag) hooksecurefunc('ToggleBackpack', S.ToggleBag) hooksecurefunc('OpenBag', S.ToggleBag) hooksecurefunc('ToggleBag', S.ToggleBag)