81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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) |