Fix addObject() by renaming to addChild() #84
@@ -74,12 +74,12 @@ local getObjects = function()
|
||||
return moddedObjects
|
||||
end
|
||||
|
||||
local getObject = function(id)
|
||||
return getObjects()[id]
|
||||
local getObject = function(objectName)
|
||||
return getObjects()[objectName]
|
||||
end
|
||||
|
||||
local createObject = function(self, objectName, id)
|
||||
return getObject(objectName)(id, self)
|
||||
local createObject = function(basalt, objectName, id)
|
||||
return getObject(objectName)(id, basalt)
|
||||
end
|
||||
|
||||
local bInstance = {
|
||||
@@ -437,6 +437,11 @@ basalt = {
|
||||
setVariable = setVariable,
|
||||
getVariable = getVariable,
|
||||
|
||||
getObjects = getObjects,
|
||||
getObject = getObject,
|
||||
|
||||
createObject = createObject,
|
||||
|
||||
setBaseTerm = function(_baseTerm)
|
||||
baseTerm = _baseTerm
|
||||
end,
|
||||
|
||||
@@ -120,10 +120,10 @@ return function(name, basalt)
|
||||
if(self:isVisible())then
|
||||
if(updateRender)then
|
||||
base.render(self)
|
||||
local objects = self:getObjects()
|
||||
for _, obj in ipairs(objects) do
|
||||
if (obj.element.render ~= nil) then
|
||||
obj.element:render()
|
||||
local children = self:getChildren()
|
||||
for _, child in ipairs(children) do
|
||||
if (child.element.render ~= nil) then
|
||||
child.element:render()
|
||||
end
|
||||
end
|
||||
updateRender = false
|
||||
|
||||
@@ -5,13 +5,13 @@ return function(name, basalt)
|
||||
local base = basalt.getObject("VisualObject")(name, basalt)
|
||||
local objectType = "Container"
|
||||
|
||||
local elements = {}
|
||||
local children = {}
|
||||
|
||||
local events = {}
|
||||
|
||||
local container = {}
|
||||
|
||||
local focusedObject
|
||||
local focusedChild
|
||||
local sorted = true
|
||||
local objId, evId = 0, 0
|
||||
|
||||
@@ -30,48 +30,78 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
|
||||
local function getObject(self, name)
|
||||
if(type(name)=="table")then name = name:getName() end
|
||||
for i, v in ipairs(elements) do
|
||||
if v.element:getName() == name then
|
||||
return v.element
|
||||
end
|
||||
end
|
||||
local function getChildren(self)
|
||||
self:sortChildren()
|
||||
return children
|
||||
end
|
||||
|
||||
local function getDeepObject(self, name)
|
||||
local o = getObject(name)
|
||||
if(o~=nil)then return o end
|
||||
for _, value in pairs(objects) do
|
||||
if (b:getType() == "Container") then
|
||||
local oF = b:getDeepObject(name)
|
||||
if(oF~=nil)then return oF 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
|
||||
return v.element
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function addObject(self, element, el2)
|
||||
if (getObject(element:getName()) ~= nil) then
|
||||
local function getDeepChild(self, name)
|
||||
local maybeChild = getChild(name)
|
||||
if (maybeChild ~= nil) then
|
||||
return maybeChild
|
||||
end
|
||||
for _, child in ipairs(children) do
|
||||
if (child:getType() == "Container") then
|
||||
local maybeDeepChild = child:getDeepChild(name)
|
||||
if (maybeDeepChild ~= nil) then
|
||||
return maybeDeepChild
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function addChild(self, element)
|
||||
if (getChild(element:getName()) ~= nil) then
|
||||
return
|
||||
end
|
||||
objId = objId + 1
|
||||
local zIndex = element:getZIndex()
|
||||
table.insert(elements, {element = element, zIndex = zIndex, objId = objId})
|
||||
table.insert(children, {element = element, zIndex = zIndex, objId = objId})
|
||||
sorted = false
|
||||
element:setParent(self, true)
|
||||
for event, _ in pairs(element:getRegisteredEvents()) do
|
||||
self:addEvent(event, element)
|
||||
end
|
||||
|
||||
if(element.init~=nil)then element:init() end
|
||||
if(element.load~=nil)then element:load() end
|
||||
if(element.draw~=nil)then element:draw() end
|
||||
|
||||
return element
|
||||
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)
|
||||
objId = objId + 1
|
||||
evId = evId + 1
|
||||
for _,v in pairs(elements)do
|
||||
for _,v in pairs(children)do
|
||||
if(v.element==element)then
|
||||
v.zIndex = newZ
|
||||
v.objId = objId
|
||||
@@ -90,19 +120,6 @@ return function(name, basalt)
|
||||
self:updateDraw()
|
||||
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 parent = self:getParent()
|
||||
for a, b in pairs(events) do
|
||||
@@ -158,11 +175,6 @@ return function(name, basalt)
|
||||
sorted = false
|
||||
end
|
||||
|
||||
local function getObjects(self)
|
||||
self:sortElementOrder()
|
||||
return elements
|
||||
end
|
||||
|
||||
local function getEvents(self, event)
|
||||
return event~=nil and events[event] or events
|
||||
end
|
||||
@@ -192,24 +204,24 @@ return function(name, basalt)
|
||||
return self
|
||||
end,
|
||||
|
||||
searchObjects = function(self, name)
|
||||
local t = {}
|
||||
for k,v in pairs(elements)do
|
||||
if(string.find(k:getName(), name))then
|
||||
table.insert(t, v)
|
||||
searchChildren = function(self, name)
|
||||
local results = {}
|
||||
for _, child in pairs(children) do
|
||||
if (string.find(child.element:getName(), name)) then
|
||||
table.insert(results, child)
|
||||
end
|
||||
end
|
||||
return t
|
||||
return results
|
||||
end,
|
||||
|
||||
getObjectsByType = function(self, t)
|
||||
local t = {}
|
||||
for k,v in pairs(elements)do
|
||||
if(v:isType(t))then
|
||||
table.insert(t, v)
|
||||
getChildrenByType = function(self, type)
|
||||
local results = {}
|
||||
for _, child in pairs(children) do
|
||||
if (child.element:isType(type)) then
|
||||
table.insert(results, child)
|
||||
end
|
||||
end
|
||||
return t
|
||||
return results
|
||||
end,
|
||||
|
||||
setImportant = function(self, element)
|
||||
@@ -225,11 +237,11 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
end
|
||||
for i, v in ipairs(elements) do
|
||||
for i, v in ipairs(children) do
|
||||
if v.element == element then
|
||||
v.objId = objId
|
||||
table.remove(elements, i)
|
||||
table.insert(elements, v)
|
||||
table.remove(children, i)
|
||||
table.insert(children, v)
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -239,52 +251,54 @@ return function(name, basalt)
|
||||
sorted = false
|
||||
end,
|
||||
|
||||
sortElementOrder = function(self)
|
||||
if(sorted)then return end
|
||||
table.sort(elements, objSort)
|
||||
for a, b in pairs(events) do
|
||||
table.sort(events[a], evSort)
|
||||
sortChildren = function(self)
|
||||
if (sorted) then
|
||||
return
|
||||
end
|
||||
table.sort(children, objSort)
|
||||
for event, _ in pairs(events) do
|
||||
table.sort(events[event], evSort)
|
||||
end
|
||||
sorted = true
|
||||
end,
|
||||
|
||||
removeFocusedObject = function(self)
|
||||
if(focusedObject~=nil)then
|
||||
if(getObject(self, focusedObject)~=nil)then
|
||||
focusedObject:loseFocusHandler()
|
||||
clearFocusedChild = function(self)
|
||||
if(focusedChild~=nil)then
|
||||
if(getChild(self, focusedChild)~=nil)then
|
||||
focusedChild:loseFocusHandler()
|
||||
end
|
||||
end
|
||||
focusedObject = nil
|
||||
focusedChild = nil
|
||||
return self
|
||||
end,
|
||||
|
||||
setFocusedObject = function(self, obj)
|
||||
if(focusedObject~=obj)then
|
||||
if(focusedObject~=nil)then
|
||||
if(getObject(self, focusedObject)~=nil)then
|
||||
focusedObject:loseFocusHandler()
|
||||
setFocusedChild = function(self, obj)
|
||||
if(focusedChild~=obj)then
|
||||
if(focusedChild~=nil)then
|
||||
if(getChild(self, focusedChild)~=nil)then
|
||||
focusedChild:loseFocusHandler()
|
||||
end
|
||||
end
|
||||
if(obj~=nil)then
|
||||
if(getObject(self, obj)~=nil)then
|
||||
if(getChild(self, obj)~=nil)then
|
||||
obj:getFocusHandler()
|
||||
end
|
||||
end
|
||||
focusedObject = obj
|
||||
focusedChild = obj
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
|
||||
getFocusedObject = function(self)
|
||||
return focusedObject
|
||||
getFocused = function(self)
|
||||
return focusedChild
|
||||
end,
|
||||
|
||||
getObject = getObject,
|
||||
getObjects = getObjects,
|
||||
getDeepObject = getDeepObject,
|
||||
addObject = addObject,
|
||||
removeObject = removeObject,
|
||||
getChild = getChild,
|
||||
getChildren = getChildren,
|
||||
getDeepChildren = getDeepChild,
|
||||
addChild = addChild,
|
||||
removeChild = removeChild,
|
||||
getEvents = getEvents,
|
||||
getEvent = getEvent,
|
||||
addEvent = addEvent,
|
||||
@@ -300,7 +314,7 @@ return function(name, basalt)
|
||||
|
||||
customEventHandler = function(self, ...)
|
||||
base.customEventHandler(self, ...)
|
||||
for _, o in pairs(elements) do
|
||||
for _, o in pairs(children) do
|
||||
if (o.element.customEventHandler ~= nil) then
|
||||
o.element:customEventHandler(...)
|
||||
end
|
||||
@@ -309,7 +323,7 @@ return function(name, basalt)
|
||||
|
||||
loseFocusHandler = function(self)
|
||||
base.loseFocusHandler(self)
|
||||
if(focusedObject~=nil)then focusedObject:loseFocusHandler() focusedObject = nil end
|
||||
if(focusedChild~=nil)then focusedChild:loseFocusHandler() focusedChild = nil end
|
||||
end,
|
||||
|
||||
getBasalt = function(self)
|
||||
@@ -326,7 +340,7 @@ return function(name, basalt)
|
||||
if(base.eventHandler~=nil)then
|
||||
base.eventHandler(self, ...)
|
||||
if(events["other_event"]~=nil)then
|
||||
self:sortElementOrder()
|
||||
self:sortChildren()
|
||||
for _, obj in ipairs(events["other_event"]) do
|
||||
if (obj.element.eventHandler ~= nil) then
|
||||
obj.element.eventHandler(obj.element, ...)
|
||||
@@ -342,7 +356,7 @@ return function(name, basalt)
|
||||
if(base[v[1]]~=nil)then
|
||||
if(base[v[1]](self, btn, x, y, ...))then
|
||||
if(events[k]~=nil)then
|
||||
self:sortElementOrder()
|
||||
self:sortChildren()
|
||||
for _, obj in ipairs(events[k]) do
|
||||
if (obj.element[v[1]] ~= nil) then
|
||||
local xO, yO = 0, 0
|
||||
@@ -360,7 +374,7 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
if(v[2])then
|
||||
self:removeFocusedObject()
|
||||
self:clearFocusedChild()
|
||||
end
|
||||
end
|
||||
return true
|
||||
@@ -373,8 +387,8 @@ return function(name, basalt)
|
||||
container[v] = function(self, ...)
|
||||
if(base[v]~=nil)then
|
||||
if(base[v](self, ...))then
|
||||
if(events[k]~=nil)then
|
||||
self:sortElementOrder()
|
||||
if(events[k]~=nil)then
|
||||
self:sortChildren()
|
||||
for _, obj in ipairs(events[k]) do
|
||||
if (obj.element[v] ~= nil) then
|
||||
if (obj.element[v](obj.element, ...)) then
|
||||
@@ -390,7 +404,7 @@ return function(name, basalt)
|
||||
|
||||
for objectName, _ in pairs(basalt.getObjects()) do
|
||||
container["add" .. objectName] = function(self, id)
|
||||
return addObject(self, basalt:createObject(objectName, id))
|
||||
return self:addChild(basalt:createObject(objectName, id))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -21,12 +21,12 @@ return function(name, basalt)
|
||||
end
|
||||
|
||||
local function applyLayout(self)
|
||||
local objects = self:getObjects()
|
||||
local totalElements = #objects
|
||||
local children = self:getChildren()
|
||||
local totalChildren = #children
|
||||
local width, height = self:getSize()
|
||||
|
||||
|
||||
local mainAxisTotalChildSize = 0
|
||||
for _, obj in ipairs(objects) do
|
||||
for _, obj in ipairs(children) do
|
||||
local objWidth, objHeight = obj.element:getSize()
|
||||
if flexDirection == "row" then
|
||||
mainAxisTotalChildSize = mainAxisTotalChildSize + objWidth
|
||||
@@ -34,15 +34,15 @@ return function(name, basalt)
|
||||
mainAxisTotalChildSize = mainAxisTotalChildSize + objHeight
|
||||
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
|
||||
if justifyContent == "center" then
|
||||
justifyContentOffset = 1 + mainAxisAvailableSpace / 2
|
||||
elseif justifyContent == "flex-end" then
|
||||
justifyContentOffset = 1 + mainAxisvailableSpace
|
||||
justifyContentOffset = 1 + mainAxisAvailableSpace
|
||||
end
|
||||
|
||||
for _, obj in ipairs(objects) do
|
||||
|
||||
for _, obj in ipairs(children) do
|
||||
local alignItemsOffset = getObjectOffAxisOffset(self, obj)
|
||||
if flexDirection == "row" then
|
||||
obj.element:setPosition(justifyContentOffset, alignItemsOffset)
|
||||
@@ -55,7 +55,7 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
local object = {
|
||||
getType = function()
|
||||
@@ -71,7 +71,7 @@ return function(name, basalt)
|
||||
applyLayout(self)
|
||||
return self
|
||||
end,
|
||||
|
||||
|
||||
getSpacing = function(self)
|
||||
return spacing
|
||||
end,
|
||||
|
||||
@@ -64,10 +64,10 @@ return function(name, basalt)
|
||||
if(base.render~=nil)then
|
||||
if(self:isVisible())then
|
||||
base.render(self)
|
||||
local objects = self:getObjects()
|
||||
for _, obj in ipairs(objects) do
|
||||
if (obj.element.render ~= nil) then
|
||||
obj.element:render()
|
||||
local children = self:getChildren()
|
||||
for _, child in ipairs(children) do
|
||||
if (child.element.render ~= nil) then
|
||||
child.element:render()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -162,7 +162,7 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
if (key == keys.enter) then
|
||||
parent:removeFocusedObject(self)
|
||||
parent:clearFocusedChild(self)
|
||||
end
|
||||
if (key == keys.right) then
|
||||
local tLength = tostring(base.getValue()):len()
|
||||
@@ -263,7 +263,7 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
local parent = self:getParent()
|
||||
parent:removeFocusedObject()
|
||||
parent:clearFocusedChild()
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ return function(name, basalt)
|
||||
if(noRemove)then parent = newParent return self end
|
||||
if (newParent.getType ~= nil and newParent:isType("Container")) then
|
||||
self:remove()
|
||||
newParent:addObject(self)
|
||||
newParent:addChild(self)
|
||||
if (self.show) then
|
||||
self:show()
|
||||
end
|
||||
@@ -113,7 +113,7 @@ return function(name, basalt)
|
||||
|
||||
remove = function(self)
|
||||
if (parent ~= nil) then
|
||||
parent:removeObject(self)
|
||||
parent:removeChild(self)
|
||||
end
|
||||
self:updateDraw()
|
||||
return self
|
||||
|
||||
@@ -11,8 +11,8 @@ return function(name, basalt)
|
||||
|
||||
local function getHorizontalScrollAmount(self)
|
||||
local amount = 0
|
||||
local objects = self:getObjects()
|
||||
for _, b in pairs(objects) do
|
||||
local children = self:getChildren()
|
||||
for _, b in pairs(children) do
|
||||
if(b.element.getWidth~=nil)and(b.element.getX~=nil)then
|
||||
local w, x = b.element:getWidth(), b.element:getX()
|
||||
local width = self:getWidth()
|
||||
@@ -35,8 +35,8 @@ return function(name, basalt)
|
||||
|
||||
local function getVerticalScrollAmount(self)
|
||||
local amount = 0
|
||||
local objects = self:getObjects()
|
||||
for _, b in pairs(objects) do
|
||||
local children = self:getChildren()
|
||||
for _, b in pairs(children) do
|
||||
if(b.element.getHeight~=nil)and(b.element.getY~=nil)then
|
||||
local h, y = b.element:getHeight(), b.element:getY()
|
||||
local height = self:getHeight()
|
||||
@@ -106,7 +106,7 @@ return function(name, basalt)
|
||||
|
||||
scrollHandler = function(self, dir, x, y)
|
||||
if(base:getBase().scrollHandler(self, dir, x, y))then
|
||||
self:sortElementOrder()
|
||||
self:sortChildren()
|
||||
for _, obj in ipairs(self:getEvents("mouse_scroll")) do
|
||||
if (obj.element.scrollHandler ~= nil) then
|
||||
local xO, yO = 0, 0
|
||||
@@ -122,7 +122,7 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
scrollHandler(self, dir, x, y)
|
||||
self:removeFocusedObject()
|
||||
self:clearFocusedChild()
|
||||
return true
|
||||
end
|
||||
end,
|
||||
|
||||
@@ -3,7 +3,7 @@ local tHex = require("tHex")
|
||||
|
||||
local sub, find, insert = string.sub, string.find, table.insert
|
||||
|
||||
return function(name, basalt)
|
||||
return function(name, basalt)
|
||||
local base = basalt.getObject("Object")(name, basalt)
|
||||
-- Base object
|
||||
local objectType = "VisualObject" -- not changeable
|
||||
@@ -94,7 +94,7 @@ return function(name, basalt)
|
||||
|
||||
setFocus = function(self)
|
||||
if (parent ~= nil) then
|
||||
parent:setFocusedObject(self)
|
||||
parent:setFocusedChild(self)
|
||||
end
|
||||
return self
|
||||
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)
|
||||
if(val==false)then return false end
|
||||
if(parent~=nil)then
|
||||
parent:setFocusedObject(self)
|
||||
parent:setFocusedChild(self)
|
||||
end
|
||||
isClicked = true
|
||||
isDragging = true
|
||||
@@ -343,7 +343,7 @@ return function(name, basalt)
|
||||
dragStartX, dragStartY = x, y
|
||||
if(val~=nil)then return val end
|
||||
if(parent~=nil)then
|
||||
parent:setFocusedObject(self)
|
||||
parent:setFocusedChild(self)
|
||||
end
|
||||
return true
|
||||
end
|
||||
@@ -361,7 +361,7 @@ return function(name, basalt)
|
||||
local val = self:sendEvent("mouse_scroll", dir, x - (objX-1), y - (objY-1))
|
||||
if(val==false)then return false end
|
||||
if(parent~=nil)then
|
||||
parent:setFocusedObject(self)
|
||||
parent:setFocusedChild(self)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user