UIM/src/Shared/Modules/Managers/UIManager/Window.lua
2024-05-01 11:25:02 +02:00

127 lines
No EOL
2.4 KiB
Lua

local types = require(script.Parent.Types)
local window: types.WindowClass = {} :: types.WindowClass
window["__index"] = window
local module = {}
function module.new(name: string): types.Window
local self = setmetatable({
Name= name,
Pages = {
Open = {},
Stored = {},
},
_ = {},
}, window)
return self
end
function window:BuildPages()
for _, page: types.Page in self.Pages.Stored do
page:Build(self)
end
end
function window:AddPage(page: types.Page)
self.Pages.Stored[page.Name] = page
end
function window:GetPage(page: string): types.Page
return self.Pages.Stored[page]
end
function window:OpenPage(page: string)
local pageModule: types.Page = self.Pages.Stored[page]
if pageModule then
pageModule:Build(self)
pageModule:Open()
self.Pages.Open[page] = pageModule
end
end
function window:ClosePage(page: string)
local pageModule: types.Page = self.Pages.Open[page]
if pageModule then
pageModule:Close()
pageModule:Clean()
self.Pages.Open[page] = nil
end
end
function window:CleanPages()
for _, page: types.Page in self.Pages.Open do
page:Close()
page:Clean()
end
self.Pages.Open = {}
end
function window:RemovePages()
for _, page: types.Page in self.Pages.Open do
page:Remove()
end
self.Pages.Open = {}
self.Pages.Stored = {}
end
function window:OnBuild(callback: (self: types.Window) -> ())
self._.OnBuild = callback
end
function window:OnOpen(callback: (self: types.Window) -> ())
self._.OnOpen = callback
end
function window:OnClose(callback: (self: types.Window) -> ())
self._.OnClose = callback
end
function window:Build(manager: types.Manager)
self:Clean()
self.Manager = manager
if self._.OnBuild then
self._.OnBuild(self)
end
end
function window:Open()
if self.ScreenGui then
self.ScreenGui.Enabled = true
end
if self._.OnOpen then
self._.OnOpen(self)
end
end
function window:Close()
if self.ScreenGui then
self.ScreenGui.Enabled = false
end
if self._.OnClose then
self._.OnClose(self)
end
end
function window:Clean()
self:CleanPages()
end
function window:Remove()
self:Clean()
self:RemovePages()
if self.ScreenGui then
self.ScreenGui:Destroy()
end
end
return module