Fix addObject() by renaming to addChild() #84

Merged
thesabinelim merged 3 commits from fix-add-object into master 2023-05-18 00:53:55 +08:00
9 changed files with 141 additions and 122 deletions

View File

@@ -74,12 +74,12 @@ local getObjects = function()
return moddedObjects return moddedObjects
end end
local getObject = function(id) local getObject = function(objectName)
return getObjects()[id] return getObjects()[objectName]
end end
local createObject = function(self, objectName, id) local createObject = function(basalt, objectName, id)
return getObject(objectName)(id, self) return getObject(objectName)(id, basalt)
end end
local bInstance = { local bInstance = {
@@ -437,6 +437,11 @@ basalt = {
setVariable = setVariable, setVariable = setVariable,
getVariable = getVariable, getVariable = getVariable,
getObjects = getObjects,
getObject = getObject,
createObject = createObject,
setBaseTerm = function(_baseTerm) setBaseTerm = function(_baseTerm)
baseTerm = _baseTerm baseTerm = _baseTerm
end, end,

View File

@@ -120,10 +120,10 @@ return function(name, basalt)
if(self:isVisible())then if(self:isVisible())then
if(updateRender)then if(updateRender)then
base.render(self) base.render(self)
local objects = self:getObjects() local children = self:getChildren()
for _, obj in ipairs(objects) do for _, child in ipairs(children) do
if (obj.element.render ~= nil) then if (child.element.render ~= nil) then
obj.element:render() child.element:render()
end end
end end
updateRender = false updateRender = false

View File

@@ -5,13 +5,13 @@ return function(name, basalt)
local base = basalt.getObject("VisualObject")(name, basalt) local base = basalt.getObject("VisualObject")(name, basalt)
local objectType = "Container" local objectType = "Container"
local elements = {} local children = {}
local events = {} local events = {}
local container = {} local container = {}
local focusedObject local focusedChild
local sorted = true local sorted = true
local objId, evId = 0, 0 local objId, evId = 0, 0
@@ -30,48 +30,78 @@ return function(name, basalt)
end end
end end
local function getObject(self, name) local function getChildren(self)
if(type(name)=="table")then name = name:getName() end self:sortChildren()
for i, v in ipairs(elements) do return children
end
local function getChild(self, name)
if (type(name)=="table") then
name = name:getName()
end
for _, v in ipairs(children) do
if v.element:getName() == name then if v.element:getName() == name then
return v.element return v.element
end end
end end
end end
local function getDeepObject(self, name) local function getDeepChild(self, name)
local o = getObject(name) local maybeChild = getChild(name)
if(o~=nil)then return o end if (maybeChild ~= nil) then
for _, value in pairs(objects) do return maybeChild
if (b:getType() == "Container") then end
local oF = b:getDeepObject(name) for _, child in ipairs(children) do
if(oF~=nil)then return oF end if (child:getType() == "Container") then
local maybeDeepChild = child:getDeepChild(name)
if (maybeDeepChild ~= nil) then
return maybeDeepChild
end
end end
end end
end end
local function addObject(self, element, el2) local function addChild(self, element)
if (getObject(element:getName()) ~= nil) then if (getChild(element:getName()) ~= nil) then
return return
end end
objId = objId + 1 objId = objId + 1
local zIndex = element:getZIndex() local zIndex = element:getZIndex()
table.insert(elements, {element = element, zIndex = zIndex, objId = objId}) table.insert(children, {element = element, zIndex = zIndex, objId = objId})
sorted = false sorted = false
element:setParent(self, true) element:setParent(self, true)
for event, _ in pairs(element:getRegisteredEvents()) do for event, _ in pairs(element:getRegisteredEvents()) do
self:addEvent(event, element) self:addEvent(event, element)
end end
if(element.init~=nil)then element:init() end if(element.init~=nil)then element:init() end
if(element.load~=nil)then element:load() end if(element.load~=nil)then element:load() end
if(element.draw~=nil)then element:draw() end if(element.draw~=nil)then element:draw() end
return element return element
end end
local function removeChild(self, element)
if (type(element)=="string") then
element = getChild(element:getName())
end
if (element==nil) then
return
end
for i, v in ipairs(children) do
if v.element == element then
table.remove(children, i)
return true
end
end
self:removeEvents(element)
sorted = false
end
local function updateZIndex(self, element, newZ) local function updateZIndex(self, element, newZ)
objId = objId + 1 objId = objId + 1
evId = evId + 1 evId = evId + 1
for _,v in pairs(elements)do for _,v in pairs(children)do
if(v.element==element)then if(v.element==element)then
v.zIndex = newZ v.zIndex = newZ
v.objId = objId v.objId = objId
@@ -90,19 +120,6 @@ return function(name, basalt)
self:updateDraw() self:updateDraw()
end end
local function removeObject(self, element)
if(type(element)=="string")then element = getObject(element:getName()) end
if(element==nil)then return end
for i, v in ipairs(elements) do
if v.element == element then
table.remove(elements, i)
return true
end
end
self:removeEvents(element)
sorted = false
end
local function removeEvents(self, element) local function removeEvents(self, element)
local parent = self:getParent() local parent = self:getParent()
for a, b in pairs(events) do for a, b in pairs(events) do
@@ -158,11 +175,6 @@ return function(name, basalt)
sorted = false sorted = false
end end
local function getObjects(self)
self:sortElementOrder()
return elements
end
local function getEvents(self, event) local function getEvents(self, event)
return event~=nil and events[event] or events return event~=nil and events[event] or events
end end
@@ -192,24 +204,24 @@ return function(name, basalt)
return self return self
end, end,
searchObjects = function(self, name) searchChildren = function(self, name)
local t = {} local results = {}
for k,v in pairs(elements)do for _, child in pairs(children) do
if(string.find(k:getName(), name))then if (string.find(child.element:getName(), name)) then
table.insert(t, v) table.insert(results, child)
end end
end end
return t return results
end, end,
getObjectsByType = function(self, t) getChildrenByType = function(self, type)
local t = {} local results = {}
for k,v in pairs(elements)do for _, child in pairs(children) do
if(v:isType(t))then if (child.element:isType(type)) then
table.insert(t, v) table.insert(results, child)
end end
end end
return t return results
end, end,
setImportant = function(self, element) setImportant = function(self, element)
@@ -225,11 +237,11 @@ return function(name, basalt)
end end
end end
end end
for i, v in ipairs(elements) do for i, v in ipairs(children) do
if v.element == element then if v.element == element then
v.objId = objId v.objId = objId
table.remove(elements, i) table.remove(children, i)
table.insert(elements, v) table.insert(children, v)
break break
end end
end end
@@ -239,52 +251,54 @@ return function(name, basalt)
sorted = false sorted = false
end, end,
sortElementOrder = function(self) sortChildren = function(self)
if(sorted)then return end if (sorted) then
table.sort(elements, objSort) return
for a, b in pairs(events) do end
table.sort(events[a], evSort) table.sort(children, objSort)
for event, _ in pairs(events) do
table.sort(events[event], evSort)
end end
sorted = true sorted = true
end, end,
removeFocusedObject = function(self) clearFocusedChild = function(self)
if(focusedObject~=nil)then if(focusedChild~=nil)then
if(getObject(self, focusedObject)~=nil)then if(getChild(self, focusedChild)~=nil)then
focusedObject:loseFocusHandler() focusedChild:loseFocusHandler()
end end
end end
focusedObject = nil focusedChild = nil
return self return self
end, end,
setFocusedObject = function(self, obj) setFocusedChild = function(self, obj)
if(focusedObject~=obj)then if(focusedChild~=obj)then
if(focusedObject~=nil)then if(focusedChild~=nil)then
if(getObject(self, focusedObject)~=nil)then if(getChild(self, focusedChild)~=nil)then
focusedObject:loseFocusHandler() focusedChild:loseFocusHandler()
end end
end end
if(obj~=nil)then if(obj~=nil)then
if(getObject(self, obj)~=nil)then if(getChild(self, obj)~=nil)then
obj:getFocusHandler() obj:getFocusHandler()
end end
end end
focusedObject = obj focusedChild = obj
return true return true
end end
return false return false
end, end,
getFocusedObject = function(self) getFocused = function(self)
return focusedObject return focusedChild
end, end,
getObject = getObject, getChild = getChild,
getObjects = getObjects, getChildren = getChildren,
getDeepObject = getDeepObject, getDeepChildren = getDeepChild,
addObject = addObject, addChild = addChild,
removeObject = removeObject, removeChild = removeChild,
getEvents = getEvents, getEvents = getEvents,
getEvent = getEvent, getEvent = getEvent,
addEvent = addEvent, addEvent = addEvent,
@@ -300,7 +314,7 @@ return function(name, basalt)
customEventHandler = function(self, ...) customEventHandler = function(self, ...)
base.customEventHandler(self, ...) base.customEventHandler(self, ...)
for _, o in pairs(elements) do for _, o in pairs(children) do
if (o.element.customEventHandler ~= nil) then if (o.element.customEventHandler ~= nil) then
o.element:customEventHandler(...) o.element:customEventHandler(...)
end end
@@ -309,7 +323,7 @@ return function(name, basalt)
loseFocusHandler = function(self) loseFocusHandler = function(self)
base.loseFocusHandler(self) base.loseFocusHandler(self)
if(focusedObject~=nil)then focusedObject:loseFocusHandler() focusedObject = nil end if(focusedChild~=nil)then focusedChild:loseFocusHandler() focusedChild = nil end
end, end,
getBasalt = function(self) getBasalt = function(self)
@@ -326,7 +340,7 @@ return function(name, basalt)
if(base.eventHandler~=nil)then if(base.eventHandler~=nil)then
base.eventHandler(self, ...) base.eventHandler(self, ...)
if(events["other_event"]~=nil)then if(events["other_event"]~=nil)then
self:sortElementOrder() self:sortChildren()
for _, obj in ipairs(events["other_event"]) do for _, obj in ipairs(events["other_event"]) do
if (obj.element.eventHandler ~= nil) then if (obj.element.eventHandler ~= nil) then
obj.element.eventHandler(obj.element, ...) obj.element.eventHandler(obj.element, ...)
@@ -342,7 +356,7 @@ return function(name, basalt)
if(base[v[1]]~=nil)then if(base[v[1]]~=nil)then
if(base[v[1]](self, btn, x, y, ...))then if(base[v[1]](self, btn, x, y, ...))then
if(events[k]~=nil)then if(events[k]~=nil)then
self:sortElementOrder() self:sortChildren()
for _, obj in ipairs(events[k]) do for _, obj in ipairs(events[k]) do
if (obj.element[v[1]] ~= nil) then if (obj.element[v[1]] ~= nil) then
local xO, yO = 0, 0 local xO, yO = 0, 0
@@ -360,7 +374,7 @@ return function(name, basalt)
end end
end end
if(v[2])then if(v[2])then
self:removeFocusedObject() self:clearFocusedChild()
end end
end end
return true return true
@@ -374,7 +388,7 @@ return function(name, basalt)
if(base[v]~=nil)then if(base[v]~=nil)then
if(base[v](self, ...))then if(base[v](self, ...))then
if(events[k]~=nil)then if(events[k]~=nil)then
self:sortElementOrder() self:sortChildren()
for _, obj in ipairs(events[k]) do for _, obj in ipairs(events[k]) do
if (obj.element[v] ~= nil) then if (obj.element[v] ~= nil) then
if (obj.element[v](obj.element, ...)) then if (obj.element[v](obj.element, ...)) then
@@ -390,7 +404,7 @@ return function(name, basalt)
for objectName, _ in pairs(basalt.getObjects()) do for objectName, _ in pairs(basalt.getObjects()) do
container["add" .. objectName] = function(self, id) container["add" .. objectName] = function(self, id)
return addObject(self, basalt:createObject(objectName, id)) return self:addChild(basalt:createObject(objectName, id))
end end
end end

View File

@@ -21,12 +21,12 @@ return function(name, basalt)
end end
local function applyLayout(self) local function applyLayout(self)
local objects = self:getObjects() local children = self:getChildren()
local totalElements = #objects local totalChildren = #children
local width, height = self:getSize() local width, height = self:getSize()
local mainAxisTotalChildSize = 0 local mainAxisTotalChildSize = 0
for _, obj in ipairs(objects) do for _, obj in ipairs(children) do
local objWidth, objHeight = obj.element:getSize() local objWidth, objHeight = obj.element:getSize()
if flexDirection == "row" then if flexDirection == "row" then
mainAxisTotalChildSize = mainAxisTotalChildSize + objWidth mainAxisTotalChildSize = mainAxisTotalChildSize + objWidth
@@ -34,15 +34,15 @@ return function(name, basalt)
mainAxisTotalChildSize = mainAxisTotalChildSize + objHeight mainAxisTotalChildSize = mainAxisTotalChildSize + objHeight
end end
end end
local mainAxisAvailableSpace = (flexDirection == "row" and width or height) - mainAxisTotalChildSize - (spacing * (totalElements - 1)) local mainAxisAvailableSpace = (flexDirection == "row" and width or height) - mainAxisTotalChildSize - (spacing * (totalChildren - 1))
local justifyContentOffset = 1 local justifyContentOffset = 1
if justifyContent == "center" then if justifyContent == "center" then
justifyContentOffset = 1 + mainAxisAvailableSpace / 2 justifyContentOffset = 1 + mainAxisAvailableSpace / 2
elseif justifyContent == "flex-end" then elseif justifyContent == "flex-end" then
justifyContentOffset = 1 + mainAxisvailableSpace justifyContentOffset = 1 + mainAxisAvailableSpace
end end
for _, obj in ipairs(objects) do for _, obj in ipairs(children) do
local alignItemsOffset = getObjectOffAxisOffset(self, obj) local alignItemsOffset = getObjectOffAxisOffset(self, obj)
if flexDirection == "row" then if flexDirection == "row" then
obj.element:setPosition(justifyContentOffset, alignItemsOffset) obj.element:setPosition(justifyContentOffset, alignItemsOffset)

View File

@@ -64,10 +64,10 @@ return function(name, basalt)
if(base.render~=nil)then if(base.render~=nil)then
if(self:isVisible())then if(self:isVisible())then
base.render(self) base.render(self)
local objects = self:getObjects() local children = self:getChildren()
for _, obj in ipairs(objects) do for _, child in ipairs(children) do
if (obj.element.render ~= nil) then if (child.element.render ~= nil) then
obj.element:render() child.element:render()
end end
end end
end end

View File

@@ -162,7 +162,7 @@ return function(name, basalt)
end end
end end
if (key == keys.enter) then if (key == keys.enter) then
parent:removeFocusedObject(self) parent:clearFocusedChild(self)
end end
if (key == keys.right) then if (key == keys.right) then
local tLength = tostring(base.getValue()):len() local tLength = tostring(base.getValue()):len()
@@ -263,7 +263,7 @@ return function(name, basalt)
end end
end end
local parent = self:getParent() local parent = self:getParent()
parent:removeFocusedObject() parent:clearFocusedChild()
end end
end, end,

View File

@@ -61,7 +61,7 @@ return function(name, basalt)
if(noRemove)then parent = newParent return self end if(noRemove)then parent = newParent return self end
if (newParent.getType ~= nil and newParent:isType("Container")) then if (newParent.getType ~= nil and newParent:isType("Container")) then
self:remove() self:remove()
newParent:addObject(self) newParent:addChild(self)
if (self.show) then if (self.show) then
self:show() self:show()
end end
@@ -113,7 +113,7 @@ return function(name, basalt)
remove = function(self) remove = function(self)
if (parent ~= nil) then if (parent ~= nil) then
parent:removeObject(self) parent:removeChild(self)
end end
self:updateDraw() self:updateDraw()
return self return self

View File

@@ -11,8 +11,8 @@ return function(name, basalt)
local function getHorizontalScrollAmount(self) local function getHorizontalScrollAmount(self)
local amount = 0 local amount = 0
local objects = self:getObjects() local children = self:getChildren()
for _, b in pairs(objects) do for _, b in pairs(children) do
if(b.element.getWidth~=nil)and(b.element.getX~=nil)then if(b.element.getWidth~=nil)and(b.element.getX~=nil)then
local w, x = b.element:getWidth(), b.element:getX() local w, x = b.element:getWidth(), b.element:getX()
local width = self:getWidth() local width = self:getWidth()
@@ -35,8 +35,8 @@ return function(name, basalt)
local function getVerticalScrollAmount(self) local function getVerticalScrollAmount(self)
local amount = 0 local amount = 0
local objects = self:getObjects() local children = self:getChildren()
for _, b in pairs(objects) do for _, b in pairs(children) do
if(b.element.getHeight~=nil)and(b.element.getY~=nil)then if(b.element.getHeight~=nil)and(b.element.getY~=nil)then
local h, y = b.element:getHeight(), b.element:getY() local h, y = b.element:getHeight(), b.element:getY()
local height = self:getHeight() local height = self:getHeight()
@@ -106,7 +106,7 @@ return function(name, basalt)
scrollHandler = function(self, dir, x, y) scrollHandler = function(self, dir, x, y)
if(base:getBase().scrollHandler(self, dir, x, y))then if(base:getBase().scrollHandler(self, dir, x, y))then
self:sortElementOrder() self:sortChildren()
for _, obj in ipairs(self:getEvents("mouse_scroll")) do for _, obj in ipairs(self:getEvents("mouse_scroll")) do
if (obj.element.scrollHandler ~= nil) then if (obj.element.scrollHandler ~= nil) then
local xO, yO = 0, 0 local xO, yO = 0, 0
@@ -122,7 +122,7 @@ return function(name, basalt)
end end
end end
scrollHandler(self, dir, x, y) scrollHandler(self, dir, x, y)
self:removeFocusedObject() self:clearFocusedChild()
return true return true
end end
end, end,

View File

@@ -94,7 +94,7 @@ return function(name, basalt)
setFocus = function(self) setFocus = function(self)
if (parent ~= nil) then if (parent ~= nil) then
parent:setFocusedObject(self) parent:setFocusedChild(self)
end end
return self return self
end, end,
@@ -312,7 +312,7 @@ return function(name, basalt)
local val = self:sendEvent("mouse_click", button, x - (objX-1), y - (objY-1), x, y, isMon) local val = self:sendEvent("mouse_click", button, x - (objX-1), y - (objY-1), x, y, isMon)
if(val==false)then return false end if(val==false)then return false end
if(parent~=nil)then if(parent~=nil)then
parent:setFocusedObject(self) parent:setFocusedChild(self)
end end
isClicked = true isClicked = true
isDragging = true isDragging = true
@@ -343,7 +343,7 @@ return function(name, basalt)
dragStartX, dragStartY = x, y dragStartX, dragStartY = x, y
if(val~=nil)then return val end if(val~=nil)then return val end
if(parent~=nil)then if(parent~=nil)then
parent:setFocusedObject(self) parent:setFocusedChild(self)
end end
return true return true
end end
@@ -361,7 +361,7 @@ return function(name, basalt)
local val = self:sendEvent("mouse_scroll", dir, x - (objX-1), y - (objY-1)) local val = self:sendEvent("mouse_scroll", dir, x - (objX-1), y - (objY-1))
if(val==false)then return false end if(val==false)then return false end
if(parent~=nil)then if(parent~=nil)then
parent:setFocusedObject(self) parent:setFocusedChild(self)
end end
return true return true
end end