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)