-- ------------------------------------------------------------------------------ -- -- TradeSkillMaster -- -- https://tradeskillmaster.com -- -- All Rights Reserved - Detailed license information included with addon. -- -- ------------------------------------------------------------------------------ -- --- DefaultUI Functions -- @module DefaultUI local _, TSM = ... local DefaultUI = TSM.Init("Service.DefaultUI") local Event = TSM.Include("Util.Event") local private = { visible = {}, callbacks = {}, callbackFilter = {}, } local FRAMES = { MAIL = "MAIL", AUCTION_HOUSE = "AUCTION_HOUSE", BANK = "BANK", GUILDBANK = "GUILDBANK", MERCHANT = "MERCHANT", } -- ============================================================================ -- Module Loading -- ============================================================================ DefaultUI:OnModuleLoad(function() for _, frame in pairs(FRAMES) do private.visible[frame] = false private.callbacks[frame] = {} private.callbackFilter[frame] = {} end if TSM.IsWowClassic() then Event.Register("MAIL_SHOW", function() private.HandleEvent(FRAMES.MAIL, true) end) Event.Register("MAIL_CLOSED", function() private.HandleEvent(FRAMES.MAIL, false) end) Event.Register("AUCTION_HOUSE_SHOW", function() private.HandleEvent(FRAMES.AUCTION_HOUSE, true) end) Event.Register("AUCTION_HOUSE_CLOSED", function() private.HandleEvent(FRAMES.AUCTION_HOUSE, false) end) Event.Register("BANKFRAME_OPENED", function() private.HandleEvent(FRAMES.BANK, true) end) Event.Register("BANKFRAME_CLOSED", function() private.HandleEvent(FRAMES.BANK, false) end) Event.Register("GUILDBANKFRAME_OPENED", function() private.HandleEvent(FRAMES.GUILDBANK, true) end) Event.Register("GUILDBANKFRAME_CLOSED", function() private.HandleEvent(FRAMES.GUILDBANK, false) end) Event.Register("MERCHANT_SHOW", function() private.HandleEvent(FRAMES.MERCHANT, true) end) Event.Register("MERCHANT_CLOSED", function() private.HandleEvent(FRAMES.MERCHANT, false) end) else Event.Register("PLAYER_INTERACTION_MANAGER_FRAME_SHOW", function(_, frameType) if frameType == Enum.PlayerInteractionType.MailInfo then private.HandleEvent(FRAMES.MAIL, true) elseif frameType == Enum.PlayerInteractionType.Auctioneer then private.HandleEvent(FRAMES.AUCTION_HOUSE, true) elseif frameType == Enum.PlayerInteractionType.Banker then private.HandleEvent(FRAMES.BANK, true) elseif frameType == Enum.PlayerInteractionType.GuildBanker then private.HandleEvent(FRAMES.GUILDBANK, true) elseif frameType == Enum.PlayerInteractionType.Merchant then private.HandleEvent(FRAMES.MERCHANT, true) end end) Event.Register("PLAYER_INTERACTION_MANAGER_FRAME_HIDE", function(_, frameType) if frameType == Enum.PlayerInteractionType.MailInfo then private.HandleEvent(FRAMES.MAIL, false) elseif frameType == Enum.PlayerInteractionType.Auctioneer then private.HandleEvent(FRAMES.AUCTION_HOUSE, false) elseif frameType == Enum.PlayerInteractionType.Banker then private.HandleEvent(FRAMES.BANK, false) elseif frameType == Enum.PlayerInteractionType.GuildBanker then private.HandleEvent(FRAMES.GUILDBANK, false) elseif frameType == Enum.PlayerInteractionType.Merchant then private.HandleEvent(FRAMES.MERCHANT, false) end end) end end) -- ============================================================================ -- Module Functions -- ============================================================================ function DefaultUI.IsMailVisible() return private.visible[FRAMES.MAIL] end function DefaultUI.IsAuctionHouseVisible() return private.visible[FRAMES.AUCTION_HOUSE] end function DefaultUI.IsBankVisible() return private.visible[FRAMES.BANK] end function DefaultUI.IsGuildBankVisible() return private.visible[FRAMES.GUILDBANK] end function DefaultUI.IsMerchantVisible() return private.visible[FRAMES.MERCHANT] end function DefaultUI.RegisterMailVisibleCallback(callback, visibleFilter) private.RegisterCallback(FRAMES.MAIL, callback, visibleFilter) end function DefaultUI.RegisterAuctionHouseVisibleCallback(callback, visibleFilter) private.RegisterCallback(FRAMES.AUCTION_HOUSE, callback, visibleFilter) end function DefaultUI.RegisterBankVisibleCallback(callback, visibleFilter) private.RegisterCallback(FRAMES.BANK, callback, visibleFilter) end function DefaultUI.RegisterGuildBankVisibleCallback(callback, visibleFilter) private.RegisterCallback(FRAMES.GUILDBANK, callback, visibleFilter) end function DefaultUI.RegisterMerchantVisibleCallback(callback, visibleFilter) private.RegisterCallback(FRAMES.MERCHANT, callback, visibleFilter) end -- ============================================================================ -- Private Helper Functions -- ============================================================================ function private.RegisterCallback(frame, callback, visibleFilter) tinsert(private.callbacks[frame], callback) private.callbackFilter[frame][callback] = visibleFilter end function private.HandleEvent(frame, visible) assert(type(visible) == "boolean") if private.visible[frame] == visible then return end private.visible[frame] = visible for _, callback in ipairs(private.callbacks[frame]) do local filter = private.callbackFilter[frame][callback] if filter == nil then callback(visible) elseif filter == visible then callback() end end end