-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathevents-lifecycle.lua
More file actions
111 lines (82 loc) · 2.61 KB
/
events-lifecycle.lua
File metadata and controls
111 lines (82 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
local ennui = require("ennui")
local Host = ennui.Widgets.Host
local Rectangle = ennui.Widgets.Rectangle
local StackPanel = ennui.Widgets.Stackpanel
local HorizontalStackPanel = ennui.Widgets.Horizontalstackpanel
local Text = ennui.Widgets.Text
local TextButton = ennui.Widgets.Textbutton
local Window = ennui.Widgets.Window
local host = Host():setSize(love.graphics.getDimensions())
local window = Window("Events - Lifecycle")
:setSize(560, 300)
:setPosition(60, 60)
local root = HorizontalStackPanel()
:setSpacing(10)
:setPadding(10)
:setSize(ennui.Size.fill(), ennui.Size.fill())
local messages = {}
local logText = Text("")
:setColor(0.8, 0.95, 0.8)
:setSize(ennui.Size.fill(), ennui.Size.fill())
local function log(msg)
table.insert(messages, msg)
while #messages > 10 do
table.remove(messages, 1)
end
logText:setText(table.concat(messages, "\n"))
end
-- Demo widget
local demoWidget = Rectangle()
:setSize(ennui.Size.fill(), ennui.Size.fixed(60))
:setColor(0.3, 0.6, 0.9)
:setRadius(6)
local demoLabel = Text("Demo Widget")
:setColor(1, 1, 1)
:setTextHorizontalAlignment("center")
:setTextVerticalAlignment("center")
:setSize(ennui.Size.fill(), ennui.Size.fill())
demoWidget:addChild(demoLabel)
demoWidget:onMount(function()
log("mount fired")
end)
demoWidget:onUnmount(function()
log("unmount fired")
end)
local demoPanel = StackPanel()
:setSize(ennui.Size.fill(), ennui.Size.fixed(68))
demoPanel:addChild(demoWidget)
local removeBtn = TextButton("Remove Widget")
:setSize(ennui.Size.fill(), 34)
local addBtn = TextButton("Add Widget")
:setSize(ennui.Size.fill(), 34)
:setDisabled(true)
removeBtn:onClick(function(self)
if self:isDisabled() then return end
demoPanel:removeChild(demoWidget)
removeBtn:setDisabled(true)
addBtn:setDisabled(false)
end)
addBtn:onClick(function(self)
if self:isDisabled() then return end
demoPanel:addChild(demoWidget)
removeBtn:setDisabled(false)
addBtn:setDisabled(true)
end)
local leftPanel = StackPanel()
:setSpacing(8)
:setSize(ennui.Size.fixed(220), ennui.Size.fill())
leftPanel:addChild(Text("Widget Zone:"):setColor(1, 1, 0.5))
leftPanel:addChild(demoPanel)
leftPanel:addChild(removeBtn)
leftPanel:addChild(addBtn)
local rightPanel = StackPanel()
:setSpacing(6)
:setSize(ennui.Size.fill(), ennui.Size.fill())
rightPanel:addChild(Text("Log:"):setColor(1, 1, 0.5))
rightPanel:addChild(logText)
root:addChild(leftPanel)
root:addChild(rightPanel)
window:setContent(root)
host:addChild(window)
log("Ready - use buttons to mount/unmount.")
return host