uimessagebox.lua

main 97 lines · 3.3 KB Raw
Alex Alex Commit Client Upload Part 2 19/10/2026 00:06
1if not UIWindow then dofile 'uiwindow' end
2
3-- @docclass
4UIMessageBox = extends(UIWindow, "UIMessageBox")
5
6-- messagebox cannot be created from otui files
7UIMessageBox.create = nil
8
9function UIMessageBox.display(title, message, buttons, onEnterCallback, onEscapeCallback)
10 local messageBox = UIMessageBox.internalCreate()
11 rootWidget:addChild(messageBox)
12
13 messageBox:setStyle('MainWindow')
14 messageBox:setText(title)
15
16 local messageLabel = g_ui.createWidget('MessageBoxLabel', messageBox)
17 messageLabel:setText(message)
18
19 local buttonsWidth = 0
20 local buttonsHeight = 0
21
22 local anchor = AnchorRight
23 if buttons.anchor then anchor = buttons.anchor end
24
25 local buttonHolder = g_ui.createWidget('MessageBoxButtonHolder', messageBox)
26 buttonHolder:addAnchor(anchor, 'parent', anchor)
27
28 for i=1,#buttons do
29 local button = messageBox:addButton(buttons[i].text, buttons[i].callback)
30 if i == 1 then
31 button:setMarginLeft(0)
32 button:addAnchor(AnchorBottom, 'parent', AnchorBottom)
33 button:addAnchor(AnchorLeft, 'parent', AnchorLeft)
34 buttonsHeight = button:getHeight()
35 else
36 button:addAnchor(AnchorBottom, 'prev', AnchorBottom)
37 button:addAnchor(AnchorLeft, 'prev', AnchorRight)
38 end
39 buttonsWidth = buttonsWidth + button:getWidth() + button:getMarginLeft()
40 end
41
42 buttonHolder:setWidth(buttonsWidth)
43 buttonHolder:setHeight(buttonsHeight)
44
45 if onEnterCallback then connect(messageBox, { onEnter = onEnterCallback }) end
46 if onEscapeCallback then connect(messageBox, { onEscape = onEscapeCallback }) end
47
48 messageBox:setWidth(math.max(messageLabel:getWidth(), messageBox:getTextSize().width, buttonHolder:getWidth()) + messageBox:getPaddingLeft() + messageBox:getPaddingRight())
49 messageBox:setHeight(messageLabel:getHeight() + messageBox:getPaddingTop() + messageBox:getPaddingBottom() + buttonHolder:getHeight() + buttonHolder:getMarginTop())
50 return messageBox
51end
52
53function displayInfoBox(title, message)
54 local messageBox
55 local defaultCallback = function() messageBox:ok() end
56 messageBox = UIMessageBox.display(title, message, {{text='Ok', callback=defaultCallback}}, defaultCallback, defaultCallback)
57 return messageBox
58end
59
60function displayErrorBox(title, message)
61 local messageBox
62 local defaultCallback = function() messageBox:ok() end
63 messageBox = UIMessageBox.display(title, message, {{text='Ok', callback=defaultCallback}}, defaultCallback, defaultCallback)
64 return messageBox
65end
66
67function displayCancelBox(title, message)
68 local messageBox
69 local defaultCallback = function() messageBox:cancel() end
70 messageBox = UIMessageBox.display(title, message, {{text='Cancel', callback=defaultCallback}}, defaultCallback, defaultCallback)
71 return messageBox
72end
73
74function displayGeneralBox(title, message, buttons, onEnterCallback, onEscapeCallback)
75 return UIMessageBox.display(title, message, buttons, onEnterCallback, onEscapeCallback)
76end
77
78function UIMessageBox:addButton(text, callback)
79 local buttonHolder = self:getChildById('buttonHolder')
80 local button = g_ui.createWidget('MessageBoxButton', buttonHolder)
81 button:setText(text)
82 connect(button, { onClick = callback })
83 return button
84end
85
86function UIMessageBox:ok()
87 signalcall(self.onOk, self)
88 self.onOk = nil
89 self:destroy()
90end
91
92function UIMessageBox:cancel()
93 signalcall(self.onCancel, self)
94 self.onCancel = nil
95 self:destroy()
96end
97
Top