Main/resources/[tools]/NativeUI/MenuPool.lua
2025-06-07 08:51:21 +02:00

193 lines
No EOL
4 KiB
Lua

MenuPool = setmetatable({}, MenuPool)
MenuPool.__index = MenuPool
function MenuPool.New()
local _MenuPool = {
Menus = {}
}
return setmetatable(_MenuPool, MenuPool)
end
function MenuPool:AddSubMenu(Menu, Text, Description, KeepPosition, KeepBanner)
if Menu() == "UIMenu" then
local Item = UIMenuItem.New(tostring(Text), Description or "")
Menu:AddItem(Item)
local SubMenu
if KeepPosition then
SubMenu = UIMenu.New(Menu.Title:Text(), Text, Menu.Position.X, Menu.Position.Y)
else
SubMenu = UIMenu.New(Menu.Title:Text(), Text)
end
if KeepBanner then
if Menu.Logo ~= nil then
SubMenu.Logo = Menu.Logo
else
SubMenu.Logo = nil
SubMenu.Banner = Menu.Banner
end
end
self:Add(SubMenu)
Menu:BindMenuToItem(SubMenu, Item)
return SubMenu
end
end
function MenuPool:Add(Menu)
if Menu() == "UIMenu" then
table.insert(self.Menus, Menu)
end
end
function MenuPool:MouseEdgeEnabled(bool)
if bool ~= nil then
for _, Menu in pairs(self.Menus) do
Menu.Settings.MouseEdgeEnabled = tobool(bool)
end
end
end
function MenuPool:ControlDisablingEnabled(bool)
if bool ~= nil then
for _, Menu in pairs(self.Menus) do
Menu.Settings.ControlDisablingEnabled = tobool(bool)
end
end
end
function MenuPool:ResetCursorOnOpen(bool)
if bool ~= nil then
for _, Menu in pairs(self.Menus) do
Menu.Settings.ResetCursorOnOpen = tobool(bool)
end
end
end
function MenuPool:MultilineFormats(bool)
if bool ~= nil then
for _, Menu in pairs(self.Menus) do
Menu.Settings.MultilineFormats = tobool(bool)
end
end
end
function MenuPool:Audio(Attribute, Setting)
if Attribute ~= nil and Setting ~= nil then
for _, Menu in pairs(self.Menus) do
if Menu.Settings.Audio[Attribute] then
Menu.Settings.Audio[Attribute] = Setting
end
end
end
end
function MenuPool:WidthOffset(offset)
if tonumber(offset) then
for _, Menu in pairs(self.Menus) do
Menu:SetMenuWidthOffset(tonumber(offset))
end
end
end
function MenuPool:CounterPreText(str)
if str ~= nil then
for _, Menu in pairs(self.Menus) do
Menu.PageCounter.PreText = tostring(str)
end
end
end
function MenuPool:DisableInstructionalButtons(bool)
if bool ~= nil then
for _, Menu in pairs(self.Menus) do
Menu.Settings.InstructionalButtons = tobool(bool)
end
end
end
function MenuPool:MouseControlsEnabled(bool)
if bool ~= nil then
for _, Menu in pairs(self.Menus) do
Menu.Settings.MouseControlsEnabled = tobool(bool)
end
end
end
function MenuPool:RefreshIndex()
for _, Menu in pairs(self.Menus) do
Menu:RefreshIndex()
end
end
function MenuPool:ProcessMenus()
self:ProcessControl()
self:ProcessMouse()
self:Draw()
end
function MenuPool:ProcessControl()
for _, Menu in pairs(self.Menus) do
if Menu:Visible() then
Menu:ProcessControl()
end
end
end
function MenuPool:ProcessMouse()
for _, Menu in pairs(self.Menus) do
if Menu:Visible() then
Menu:ProcessMouse()
end
end
end
function MenuPool:Draw()
for _, Menu in pairs(self.Menus) do
if Menu:Visible() then
Menu:Draw()
end
end
end
function MenuPool:IsAnyMenuOpen()
local open = false
for _, Menu in pairs(self.Menus) do
if Menu:Visible() then
open = true
break
end
end
return open
end
function MenuPool:CloseAllMenus()
for _, Menu in pairs(self.Menus) do
if Menu:Visible() then
Menu:Visible(false)
Menu.OnMenuClosed(Menu)
end
end
end
function MenuPool:SetBannerSprite(Sprite)
if Sprite() == "Sprite" then
for _, Menu in pairs(self.Menus) do
Menu:SetBannerSprite(Sprite)
end
end
end
function MenuPool:SetBannerRectangle(Rectangle)
if Rectangle() == "Rectangle" then
for _, Menu in pairs(self.Menus) do
Menu:SetBannerRectangle(Rectangle)
end
end
end
function MenuPool:TotalItemsPerPage(Value)
if tonumber(Value) then
for _, Menu in pairs(self.Menus) do
Menu.Pagination.Total = Value - 1
end
end
end