Spaces:
Sleeping
Sleeping
--[[ | |
AlertPopup.lua - Alert popup UI | |
]]-- | |
AlertPopup = Polo { | |
WIDTH = 400, | |
HEIGHT = 200, | |
MIN_CONTENT_WIDTH = 375, | |
BUTTON_WIDTH = 120, | |
DEFAULT_TITLE = 'Alert', | |
} | |
function AlertPopup:init() | |
self.title = self.title or self.DEFAULT_TITLE | |
self.msg = '' | |
end | |
function AlertPopup:show(msg) | |
self.msg = msg | |
self:open() | |
end | |
function AlertPopup:render() | |
local center = {ImGui.Viewport_GetCenter(ImGui.GetWindowViewport(ctx))} | |
ImGui.SetNextWindowPos(ctx, center[1], center[2], ImGui.Cond_Appearing(), 0.5, 0.5) | |
ImGui.SetNextWindowSize(ctx, self.WIDTH, self.HEIGHT, ImGui.Cond_FirstUseEver()) | |
if ImGui.BeginPopupModal(ctx, self.title, true, ImGui.WindowFlags_AlwaysAutoResize()) then | |
app:trap(function () self:render_content() end) | |
ImGui.EndPopup(ctx) | |
else | |
self:close() | |
end | |
end | |
function AlertPopup:render_content() | |
ImGui.Text(ctx, self.msg) | |
self:render_separator() | |
if ImGui.Button(ctx, 'OK', self.BUTTON_WIDTH, 0) then | |
self:close() | |
end | |
end | |
function AlertPopup:render_separator() | |
ImGui.Dummy(ctx, self.MIN_CONTENT_WIDTH, 0) | |
ImGui.Separator(ctx) | |
ImGui.Dummy(ctx, 0, 0) | |
end | |
function AlertPopup:open() | |
ImGui.OpenPopup(ctx, self.title) | |
end | |
function AlertPopup:close() | |
ImGui.CloseCurrentPopup(ctx) | |
if self.onclose then self.onclose() end | |
end | |