Skip to content

Commit a0a7173

Browse files
author
Sabine Lim
authored
Fix addObject() by renaming to addChild() (#84)
* Allow events to be registered on elements without parents * Fix addObject
1 parent 2e5255b commit a0a7173

File tree

9 files changed

+138
-119
lines changed

9 files changed

+138
-119
lines changed

Basalt/main.lua

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@ local getObjects = function()
7474
return moddedObjects
7575
end
7676

77-
local getObject = function(id)
78-
return getObjects()[id]
77+
local getObject = function(objectName)
78+
return getObjects()[objectName]
7979
end
8080

81-
local createObject = function(self, objectName, id)
82-
return getObject(objectName)(id, self)
81+
local createObject = function(basalt, objectName, id)
82+
return getObject(objectName)(id, basalt)
8383
end
8484

8585
local bInstance = {
@@ -437,6 +437,11 @@ basalt = {
437437
setVariable = setVariable,
438438
getVariable = getVariable,
439439

440+
getObjects = getObjects,
441+
getObject = getObject,
442+
443+
createObject = createObject,
444+
440445
setBaseTerm = function(_baseTerm)
441446
baseTerm = _baseTerm
442447
end,

Basalt/objects/BaseFrame.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,10 @@ return function(name, basalt)
120120
if(self:isVisible())then
121121
if(updateRender)then
122122
base.render(self)
123-
local objects = self:getObjects()
124-
for _, obj in ipairs(objects) do
125-
if (obj.element.render ~= nil) then
126-
obj.element:render()
123+
local children = self:getChildren()
124+
for _, child in ipairs(children) do
125+
if (child.element.render ~= nil) then
126+
child.element:render()
127127
end
128128
end
129129
updateRender = false

Basalt/objects/Container.lua

Lines changed: 96 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ return function(name, basalt)
55
local base = basalt.getObject("VisualObject")(name, basalt)
66
local objectType = "Container"
77

8-
local elements = {}
8+
local children = {}
99

1010
local events = {}
1111

1212
local container = {}
1313

14-
local focusedObject
14+
local focusedChild
1515
local sorted = true
1616
local objId, evId = 0, 0
1717

@@ -30,48 +30,78 @@ return function(name, basalt)
3030
end
3131
end
3232

33-
local function getObject(self, name)
34-
if(type(name)=="table")then name = name:getName() end
35-
for i, v in ipairs(elements) do
33+
local function getChildren(self)
34+
self:sortChildren()
35+
return children
36+
end
37+
38+
local function getChild(self, name)
39+
if (type(name)=="table") then
40+
name = name:getName()
41+
end
42+
for _, v in ipairs(children) do
3643
if v.element:getName() == name then
3744
return v.element
3845
end
39-
end
46+
end
4047
end
4148

42-
local function getDeepObject(self, name)
43-
local o = getObject(name)
44-
if(o~=nil)then return o end
45-
for _, value in pairs(objects) do
46-
if (b:getType() == "Container") then
47-
local oF = b:getDeepObject(name)
48-
if(oF~=nil)then return oF end
49+
local function getDeepChild(self, name)
50+
local maybeChild = getChild(name)
51+
if (maybeChild ~= nil) then
52+
return maybeChild
53+
end
54+
for _, child in ipairs(children) do
55+
if (child:getType() == "Container") then
56+
local maybeDeepChild = child:getDeepChild(name)
57+
if (maybeDeepChild ~= nil) then
58+
return maybeDeepChild
59+
end
4960
end
5061
end
5162
end
5263

53-
local function addObject(self, element, el2)
54-
if (getObject(element:getName()) ~= nil) then
64+
local function addChild(self, element)
65+
if (getChild(element:getName()) ~= nil) then
5566
return
5667
end
5768
objId = objId + 1
5869
local zIndex = element:getZIndex()
59-
table.insert(elements, {element = element, zIndex = zIndex, objId = objId})
70+
table.insert(children, {element = element, zIndex = zIndex, objId = objId})
6071
sorted = false
6172
element:setParent(self, true)
6273
for event, _ in pairs(element:getRegisteredEvents()) do
6374
self:addEvent(event, element)
6475
end
76+
6577
if(element.init~=nil)then element:init() end
6678
if(element.load~=nil)then element:load() end
6779
if(element.draw~=nil)then element:draw() end
80+
6881
return element
6982
end
7083

84+
local function removeChild(self, element)
85+
if (type(element)=="string") then
86+
element = getChild(element:getName())
87+
end
88+
if (element==nil) then
89+
return
90+
end
91+
for i, v in ipairs(children) do
92+
if v.element == element then
93+
table.remove(children, i)
94+
return true
95+
end
96+
end
97+
self:removeEvents(element)
98+
sorted = false
99+
end
100+
71101
local function updateZIndex(self, element, newZ)
72102
objId = objId + 1
73103
evId = evId + 1
74-
for _,v in pairs(elements)do
104+
for _,v in pairs(children)do
75105
if(v.element==element)then
76106
v.zIndex = newZ
77107
v.objId = objId
@@ -90,19 +120,6 @@ return function(name, basalt)
90120
self:updateDraw()
91121
end
92122

93-
local function removeObject(self, element)
94-
if(type(element)=="string")then element = getObject(element:getName()) end
95-
if(element==nil)then return end
96-
for i, v in ipairs(elements) do
97-
if v.element == element then
98-
table.remove(elements, i)
99-
return true
100-
end
101-
end
102-
self:removeEvents(element)
103-
sorted = false
104-
end
105-
106123
local function removeEvents(self, element)
107124
local parent = self:getParent()
108125
for a, b in pairs(events) do
@@ -158,11 +175,6 @@ return function(name, basalt)
158175
sorted = false
159176
end
160177

161-
local function getObjects(self)
162-
self:sortElementOrder()
163-
return elements
164-
end
165-
166178
local function getEvents(self, event)
167179
return event~=nil and events[event] or events
168180
end
@@ -192,24 +204,24 @@ return function(name, basalt)
192204
return self
193205
end,
194206

195-
searchObjects = function(self, name)
196-
local t = {}
197-
for k,v in pairs(elements)do
198-
if(string.find(k:getName(), name))then
199-
table.insert(t, v)
207+
searchChildren = function(self, name)
208+
local results = {}
209+
for _, child in pairs(children) do
210+
if (string.find(child.element:getName(), name)) then
211+
table.insert(results, child)
200212
end
201213
end
202-
return t
214+
return results
203215
end,
204216

205-
getObjectsByType = function(self, t)
206-
local t = {}
207-
for k,v in pairs(elements)do
208-
if(v:isType(t))then
209-
table.insert(t, v)
217+
getChildrenByType = function(self, type)
218+
local results = {}
219+
for _, child in pairs(children) do
220+
if (child.element:isType(type)) then
221+
table.insert(results, child)
210222
end
211223
end
212-
return t
224+
return results
213225
end,
214226

215227
setImportant = function(self, element)
@@ -225,11 +237,11 @@ return function(name, basalt)
225237
end
226238
end
227239
end
228-
for i, v in ipairs(elements) do
240+
for i, v in ipairs(children) do
229241
if v.element == element then
230242
v.objId = objId
231-
table.remove(elements, i)
232-
table.insert(elements, v)
243+
table.remove(children, i)
244+
table.insert(children, v)
233245
break
234246
end
235247
end
@@ -239,52 +251,54 @@ return function(name, basalt)
239251
sorted = false
240252
end,
241253

242-
sortElementOrder = function(self)
243-
if(sorted)then return end
244-
table.sort(elements, objSort)
245-
for a, b in pairs(events) do
246-
table.sort(events[a], evSort)
254+
sortChildren = function(self)
255+
if (sorted) then
256+
return
257+
end
258+
table.sort(children, objSort)
259+
for event, _ in pairs(events) do
260+
table.sort(events[event], evSort)
247261
end
248262
sorted = true
249263
end,
250264

251-
removeFocusedObject = function(self)
252-
if(focusedObject~=nil)then
253-
if(getObject(self, focusedObject)~=nil)then
254-
focusedObject:loseFocusHandler()
265+
clearFocusedChild = function(self)
266+
if(focusedChild~=nil)then
267+
if(getChild(self, focusedChild)~=nil)then
268+
focusedChild:loseFocusHandler()
255269
end
256270
end
257-
focusedObject = nil
271+
focusedChild = nil
258272
return self
259273
end,
260274

261-
setFocusedObject = function(self, obj)
262-
if(focusedObject~=obj)then
263-
if(focusedObject~=nil)then
264-
if(getObject(self, focusedObject)~=nil)then
265-
focusedObject:loseFocusHandler()
275+
setFocusedChild = function(self, obj)
276+
if(focusedChild~=obj)then
277+
if(focusedChild~=nil)then
278+
if(getChild(self, focusedChild)~=nil)then
279+
focusedChild:loseFocusHandler()
266280
end
267281
end
268282
if(obj~=nil)then
269-
if(getObject(self, obj)~=nil)then
283+
if(getChild(self, obj)~=nil)then
270284
obj:getFocusHandler()
271285
end
272286
end
273-
focusedObject = obj
287+
focusedChild = obj
274288
return true
275289
end
276290
return false
277291
end,
278292

279-
getFocusedObject = function(self)
280-
return focusedObject
293+
getFocused = function(self)
294+
return focusedChild
281295
end,
282296

283-
getObject = getObject,
284-
getObjects = getObjects,
285-
getDeepObject = getDeepObject,
286-
addObject = addObject,
287-
removeObject = removeObject,
297+
getChild = getChild,
298+
getChildren = getChildren,
299+
getDeepChildren = getDeepChild,
300+
addChild = addChild,
301+
removeChild = removeChild,
288302
getEvents = getEvents,
289303
getEvent = getEvent,
290304
addEvent = addEvent,
@@ -300,7 +314,7 @@ return function(name, basalt)
300314

301315
customEventHandler = function(self, ...)
302316
base.customEventHandler(self, ...)
303-
for _, o in pairs(elements) do
317+
for _, o in pairs(children) do
304318
if (o.element.customEventHandler ~= nil) then
305319
o.element:customEventHandler(...)
306320
end
@@ -309,7 +323,7 @@ return function(name, basalt)
309323

310324
loseFocusHandler = function(self)
311325
base.loseFocusHandler(self)
312-
if(focusedObject~=nil)then focusedObject:loseFocusHandler() focusedObject = nil end
326+
if(focusedChild~=nil)then focusedChild:loseFocusHandler() focusedChild = nil end
313327
end,
314328

315329
getBasalt = function(self)
@@ -326,7 +340,7 @@ return function(name, basalt)
326340
if(base.eventHandler~=nil)then
327341
base.eventHandler(self, ...)
328342
if(events["other_event"]~=nil)then
329-
self:sortElementOrder()
343+
self:sortChildren()
330344
for _, obj in ipairs(events["other_event"]) do
331345
if (obj.element.eventHandler ~= nil) then
332346
obj.element.eventHandler(obj.element, ...)
@@ -342,7 +356,7 @@ return function(name, basalt)
342356
if(base[v[1]]~=nil)then
343357
if(base[v[1]](self, btn, x, y, ...))then
344358
if(events[k]~=nil)then
345-
self:sortElementOrder()
359+
self:sortChildren()
346360
for _, obj in ipairs(events[k]) do
347361
if (obj.element[v[1]] ~= nil) then
348362
local xO, yO = 0, 0
@@ -360,7 +374,7 @@ return function(name, basalt)
360374
end
361375
end
362376
if(v[2])then
363-
self:removeFocusedObject()
377+
self:clearFocusedChild()
364378
end
365379
end
366380
return true
@@ -373,8 +387,8 @@ return function(name, basalt)
373387
container[v] = function(self, ...)
374388
if(base[v]~=nil)then
375389
if(base[v](self, ...))then
376-
if(events[k]~=nil)then
377-
self:sortElementOrder()
390+
if(events[k]~=nil)then
391+
self:sortChildren()
378392
for _, obj in ipairs(events[k]) do
379393
if (obj.element[v] ~= nil) then
380394
if (obj.element[v](obj.element, ...)) then
@@ -390,7 +404,7 @@ return function(name, basalt)
390404

391405
for objectName, _ in pairs(basalt.getObjects()) do
392406
container["add" .. objectName] = function(self, id)
393-
return addObject(self, basalt:createObject(objectName, id))
407+
return self:addChild(basalt:createObject(objectName, id))
394408
end
395409
end
396410

0 commit comments

Comments
 (0)