Files
BusyRabbit/Content/Lua/UI/Common/PopupMenu/PopupMenuPanel.lua

81 lines
2.3 KiB
Lua
Raw Normal View History

2025-07-09 01:08:35 +08:00
local PopupMenuPanel = {}
local UIUtils = require("UI.Utils")
local GameplayStatics = import("GameplayStatics")
local WidgetBlueprintLibrary = import("WidgetBlueprintLibrary")
local KismetSystemLibrary = import("KismetSystemLibrary")
local function delay_adjust_content(menu_panel)
local post_callback = function()
local timer = KismetSystemLibrary.K2_SetTimerForNextTickDelegate(
slua.createDelegate(function ()
menu_panel:AdjustMenuContentSize()
menu_panel.adjust_content_timer = nil
end)
)
menu_panel.adjust_content_timer = timer
end
local timer = KismetSystemLibrary.K2_SetTimerForNextTickDelegate(
slua.createDelegate(function () post_callback() end)
)
menu_panel.adjust_content_timer = timer
end
local function CreateMenuItem(panel)
local pc = GameplayStatics.GetPlayerController(panel, 0)
local widget = WidgetBlueprintLibrary.Create(panel, panel.MenuItemClass, pc)
return widget
end
function PopupMenuPanel:ctor()
self.adjust_content_timer = nil
end
function PopupMenuPanel:OnInitialized()
self.BtnBackground.OnClicked:Add(function()
UIUtils.CloseWidget(self)
end)
end
function PopupMenuPanel:OnDestroy()
print(self, "PopupMenuPanel:OnDestroy")
end
function PopupMenuPanel:PreConstruct(IsDesignTime)
if not IsDesignTime then return end
delay_adjust_content(self)
end
function PopupMenuPanel:Construct()
delay_adjust_content(self)
end
function PopupMenuPanel:AdjustMenuContentSize()
local all_child_height = 0
for _, child in pairs(self.MenuItemContainer:GetAllChildren()) do
local design_size = child:GetDesiredSize()
all_child_height = all_child_height + design_size.Y
end
self.ImgBackground.Brush.ImageSize.Y = all_child_height + 20
end
function PopupMenuPanel:Refresh(args)
self.MainOverlay.Slot:SetPosition(args[1])
self:SetMenuContents(args[2])
end
function PopupMenuPanel:SetMenuContents(contents)
self.MenuItemContainer:ClearChildren()
for _, content in pairs(contents) do
local widget = CreateMenuItem(self)
self.MenuItemContainer:AddChildToVerticalBox(widget)
widget:SetContent(content[1], content[2])
end
self:AdjustMenuContentSize()
end
return Class(nil, nil,PopupMenuPanel)