Refactors, update script behaviour

This commit is contained in:
Sabine Lim
2023-05-13 16:20:24 +10:00
parent 24087454fc
commit 5326008a2f

View File

@@ -144,18 +144,14 @@ function XmlParser:ParseXmlText(xmlText)
return top return top
end end
local function executeScript(scripts) local function maybeExecuteScript(renderContext)
for k,v in pairs(scripts)do if (renderContext.script ~= nil) then
if(k~="env")then load(renderContext.script, nil, "t", renderContext.env)()
for a,b in pairs(v)do
load(b, nil, "t", scripts.env)()
end
end
end end
end end
local function registerFunctionEvent(self, data, event, scripts) local function registerFunctionEvent(self, data, event, renderContext)
local eventEnv = scripts.env local eventEnv = renderContext.env
if(data:sub(1,1)=="$")then if(data:sub(1,1)=="$")then
local data = data:sub(2) local data = data:sub(2)
event(self, self:getBasalt().getVariable(data)) event(self, self:getBasalt().getVariable(data))
@@ -175,7 +171,7 @@ return {
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
local x, y = self:getPosition() local x, y = self:getPosition()
local w, h = self:getSize() local w, h = self:getSize()
if (name == "x") then if (name == "x") then
@@ -202,8 +198,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
scripts.env[self:getName()] = self renderContext.env[self:getName()] = self
for k,v in pairs(data:reactiveProperties()) do for k,v in pairs(data:reactiveProperties()) do
local parts, nParts = utils.splitString(v, "%.") local parts, nParts = utils.splitString(v, "%.")
if (nParts ~= 2) then if (nParts ~= 2) then
@@ -212,9 +208,9 @@ return {
local tableName = parts[1] local tableName = parts[1]
local entryName = parts[2] local entryName = parts[2]
if (tableName == "props") then if (tableName == "props") then
self:updateValue(k, scripts.env.props[entryName]) self:updateValue(k, renderContext.env.props[entryName])
elseif (tableName == "shared") then elseif (tableName == "shared") then
local sharedObservers = scripts.env.sharedObservers local sharedObservers = renderContext.sharedObservers
if (sharedObservers[entryName]) == nil then if (sharedObservers[entryName]) == nil then
sharedObservers[entryName] = {} sharedObservers[entryName] = {}
end end
@@ -238,16 +234,13 @@ return {
if(xmlValue("script", data)~=nil)then if(xmlValue("script", data)~=nil)then
if(scripts[1]==nil)then renderContext.script = xmlValue("script", data)
scripts[1] = {}
end
table.insert(scripts[1], xmlValue("script", data))
end end
local events = {"onClick", "onClickUp", "onHover", "onScroll", "onDrag", "onKey", "onKeyUp", "onRelease", "onChar", "onGetFocus", "onLoseFocus", "onResize", "onReposition", "onEvent", "onLeave"} local events = {"onClick", "onClickUp", "onHover", "onScroll", "onDrag", "onKey", "onKeyUp", "onRelease", "onChar", "onGetFocus", "onLoseFocus", "onResize", "onReposition", "onEvent", "onLeave"}
for _,v in pairs(events)do for _,v in pairs(events)do
if(xmlValue(v, data)~=nil)then if(xmlValue(v, data)~=nil)then
registerFunctionEvent(self, xmlValue(v, data), self[v], scripts) registerFunctionEvent(self, xmlValue(v, data), self[v], renderContext)
end end
end end
@@ -260,20 +253,20 @@ return {
ChangeableObject = function(base, basalt) ChangeableObject = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "value") then if (name == "value") then
self:setValue(value) self:setValue(value)
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"value" "value"
}) })
if(xmlValue("onChange", data)~=nil)then if(xmlValue("onChange", data)~=nil)then
registerFunctionEvent(self, xmlValue("onChange", data), self.onChange, scripts) registerFunctionEvent(self, xmlValue("onChange", data), self.onChange, renderContext)
end end
return self return self
end, end,
@@ -284,28 +277,28 @@ return {
BaseFrame = function(base, basalt) BaseFrame = function(base, basalt)
local lastXMLReferences = {} local lastXMLReferences = {}
local function xmlDefaultValues(data, obj, scripts) local function xmlDefaultValues(data, obj, renderContext)
if(obj~=nil)then if(obj~=nil)then
obj:setValuesByXMLData(data, scripts) obj:setValuesByXMLData(data, renderContext)
end end
end end
local function addXMLObjectType(tab, f, self, scripts) local function addXMLObjectType(tab, f, self, renderContext)
if(tab~=nil)then if(tab~=nil)then
if(tab.properties~=nil)then tab = {tab} end if(tab.properties~=nil)then tab = {tab} end
for k,v in pairs(tab)do for _,v in pairs(tab)do
local obj = f(self, v["@id"] or uuid()) local obj = f(self, v["@id"] or uuid())
lastXMLReferences[obj:getName()] = obj lastXMLReferences[obj:getName()] = obj
xmlDefaultValues(v, obj, scripts) xmlDefaultValues(v, obj, renderContext)
end end
end end
end end
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local xOffset, yOffset = self:getOffset() local _, yOffset = self:getOffset()
if (name == "layout") then if (name == "layout") then
self:setLayout(value) self:setLayout(value)
elseif (name == "xOffset") then elseif (name == "xOffset") then
@@ -313,9 +306,9 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
lastXMLReferences = {} lastXMLReferences = {}
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"layout", "layout",
"xOffset" "xOffset"
@@ -323,17 +316,17 @@ return {
local objectList = data:children() local objectList = data:children()
local _OBJECTS = basalt.getObjects() local _OBJECTS = basalt.getObjects()
for k,v in pairs(objectList)do for _,v in pairs(objectList)do
if(v.___name~="animation")then if(v.___name~="animation")then
local name = v.___name:gsub("^%l", string.upper) local name = v.___name:gsub("^%l", string.upper)
if(_OBJECTS[name]~=nil)then if(_OBJECTS[name]~=nil)then
addXMLObjectType(v, self["add"..name], self, scripts) addXMLObjectType(v, self["add"..name], self, renderContext)
end end
end end
end end
addXMLObjectType(data["animation"], self.addAnimation, self, scripts) addXMLObjectType(data["animation"], self.addAnimation, self, renderContext)
return self return self
end, end,
@@ -343,19 +336,19 @@ return {
loadLayout = function(self, path, props) loadLayout = function(self, path, props)
if(fs.exists(path))then if(fs.exists(path))then
local scripts = {} local renderContext = {}
scripts.env = _ENV renderContext.env = _ENV
scripts.env.basalt = basalt renderContext.env.basalt = basalt
scripts.env.props = props renderContext.env.props = props
scripts.env.shared = {} renderContext.env.shared = {}
scripts.env.sharedObservers = {} renderContext.sharedObservers = {}
local shared = {} local shared = {}
setmetatable(scripts.env.shared, { setmetatable(renderContext.env.shared, {
__index = function(_, k) __index = function(_, k)
return shared[k] return shared[k]
end, end,
__newindex = function(_, k, v) __newindex = function(_, k, v)
local observers = scripts.env.sharedObservers[k] local observers = renderContext.sharedObservers[k]
if observers ~= nil then if observers ~= nil then
for _,observer in pairs(observers) do for _,observer in pairs(observers) do
observer(v) observer(v)
@@ -368,8 +361,8 @@ return {
local data = XmlParser:ParseXmlText(f.readAll()) local data = XmlParser:ParseXmlText(f.readAll())
f.close() f.close()
lastXMLReferences = {} lastXMLReferences = {}
self:setValuesByXMLData(data, scripts) maybeExecuteScript(renderContext)
executeScript(scripts) self:setValuesByXMLData(data, renderContext)
end end
return self return self
end, end,
@@ -381,26 +374,26 @@ return {
Frame = function(base, basalt) Frame = function(base, basalt)
local lastXMLReferences = {} local lastXMLReferences = {}
local function xmlDefaultValues(data, obj, scripts) local function xmlDefaultValues(data, obj, renderContext)
if(obj~=nil)then if(obj~=nil)then
obj:setValuesByXMLData(data, scripts) obj:setValuesByXMLData(data, renderContext)
end end
end end
local function addXMLObjectType(tab, f, self, scripts) local function addXMLObjectType(tab, f, self, renderContext)
if(tab~=nil)then if(tab~=nil)then
if(tab.properties~=nil)then tab = {tab} end if(tab.properties~=nil)then tab = {tab} end
for k,v in pairs(tab)do for _,v in pairs(tab)do
local obj = f(self, v["@id"] or uuid()) local obj = f(self, v["@id"] or uuid())
lastXMLReferences[obj:getName()] = obj lastXMLReferences[obj:getName()] = obj
xmlDefaultValues(v, obj, scripts) xmlDefaultValues(v, obj, renderContext)
end end
end end
end end
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local xOffset, yOffset = self:getOffset() local xOffset, yOffset = self:getOffset()
if (name == "layout") then if (name == "layout") then
@@ -412,8 +405,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"layout", "layout",
"xOffset", "xOffset",
@@ -423,16 +416,16 @@ return {
local objectList = data:children() local objectList = data:children()
local _OBJECTS = basalt.getObjects() local _OBJECTS = basalt.getObjects()
for k,v in pairs(objectList)do for _,v in pairs(objectList)do
if(v.___name~="animation")then if(v.___name~="animation")then
local name = v.___name:gsub("^%l", string.upper) local name = v.___name:gsub("^%l", string.upper)
if(_OBJECTS[name]~=nil)then if(_OBJECTS[name]~=nil)then
addXMLObjectType(v, self["add"..name], self, scripts) addXMLObjectType(v, self["add"..name], self, renderContext)
end end
end end
end end
addXMLObjectType(data["animation"], self.addAnimation, self, scripts) addXMLObjectType(data["animation"], self.addAnimation, self, renderContext)
return self return self
end, end,
@@ -442,20 +435,20 @@ return {
loadLayout = function(self, path, props) loadLayout = function(self, path, props)
if(fs.exists(path))then if(fs.exists(path))then
local scripts = {} local renderContext = {}
scripts.env = _ENV renderContext.env = _ENV
scripts.env.basalt = basalt renderContext.env.basalt = basalt
scripts.env.main = self renderContext.env.main = self
scripts.env.props = props renderContext.env.props = props
scripts.env.shared = {} renderContext.env.shared = {}
scripts.env.sharedObservers = {} renderContext.sharedObservers = {}
local shared = {} local shared = {}
setmetatable(scripts.env.shared, { setmetatable(renderContext.env.shared, {
__index = function(_, k) __index = function(_, k)
return shared[k] return shared[k]
end, end,
__newindex = function(_, k, v) __newindex = function(_, k, v)
local observers = scripts.env.sharedObservers[k] local observers = renderContext.sharedObservers[k]
if observers ~= nil then if observers ~= nil then
for _,observer in pairs(observers) do for _,observer in pairs(observers) do
observer(v) observer(v)
@@ -468,8 +461,8 @@ return {
local data = XmlParser:ParseXmlText(f.readAll()) local data = XmlParser:ParseXmlText(f.readAll())
f.close() f.close()
lastXMLReferences = {} lastXMLReferences = {}
self:setValuesByXMLData(data, scripts) maybeExecuteScript(renderContext)
executeScript(scripts) self:setValuesByXMLData(data, renderContext)
end end
return self return self
end, end,
@@ -480,7 +473,7 @@ return {
Flexbox = function(base, basalt) Flexbox = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "flexDirection") then if (name == "flexDirection") then
self:setFlexDirection(value) self:setFlexDirection(value)
@@ -493,8 +486,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"flexDirection", "flexDirection",
"justifyContent", "justifyContent",
@@ -510,7 +503,7 @@ return {
Button = function(base, basalt) Button = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "text") then if (name == "text") then
self:setText(value) self:setText(value)
@@ -521,8 +514,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"text", "text",
"horizontalAlign", "horizontalAlign",
@@ -537,7 +530,7 @@ return {
Label = function(base, basalt) Label = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "text") then if (name == "text") then
self:setText(value) self:setText(value)
@@ -546,8 +539,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"text", "text",
"align" "align"
@@ -561,7 +554,7 @@ return {
Input = function(base, basalt) Input = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local defaultText, defaultFG, defaultBG = self:getDefaultText() local defaultText, defaultFG, defaultBG = self:getDefaultText()
if (name == "defaultText") then if (name == "defaultText") then
@@ -581,8 +574,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"defaultText", "defaultText",
"defaultFG", "defaultFG",
@@ -601,7 +594,7 @@ return {
Image = function(base, basalt) Image = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local xOffset, yOffset = self:getOffset() local xOffset, yOffset = self:getOffset()
if (name == "xOffset") then if (name == "xOffset") then
@@ -617,9 +610,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
local xOffset, yOffset = self:getOffset()
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"xOffset", "xOffset",
"yOffset", "yOffset",
@@ -636,7 +628,7 @@ return {
Checkbox = function(base, basalt) Checkbox = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local activeSymbol, inactiveSymbol = self:getSymbol() local activeSymbol, inactiveSymbol = self:getSymbol()
if (name == "text") then if (name == "text") then
@@ -652,8 +644,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, dat, scriptsa) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"text", "text",
"checked", "checked",
@@ -670,15 +662,15 @@ return {
Program = function(base, basalt) Program = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "execute") then if (name == "execute") then
self:execute(value) self:execute(value)
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"execute" "execute"
}) })
@@ -691,7 +683,7 @@ return {
Progressbar = function(base, basalt) Progressbar = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local activeBarColor, activeBarSymbol, activeBarSymbolCol = self:getProgressBar() local activeBarColor, activeBarSymbol, activeBarSymbolCol = self:getProgressBar()
if (name == "direction") then if (name == "direction") then
@@ -709,8 +701,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"direction", "direction",
"activeBarColor", "activeBarColor",
@@ -728,7 +720,7 @@ return {
Slider = function(base, basalt) Slider = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "symbol") then if (name == "symbol") then
self:setSymbol(value) self:setSymbol(value)
@@ -743,8 +735,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"symbol", "symbol",
"symbolColor", "symbolColor",
@@ -761,7 +753,7 @@ return {
Scrollbar = function(base, basalt) Scrollbar = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "symbol") then if (name == "symbol") then
self:setSymbol(value) self:setSymbol(value)
@@ -780,8 +772,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"symbol", "symbol",
"symbolColor", "symbolColor",
@@ -800,15 +792,15 @@ return {
MonitorFrame = function(base, basalt) MonitorFrame = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "monitor") then if (name == "monitor") then
self:setMonitor(value) self:setMonitor(value)
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"monitor" "monitor"
}) })
@@ -821,7 +813,7 @@ return {
Switch = function(base, basalt) Switch = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "symbol") then if (name == "symbol") then
self:setSymbol(value) self:setSymbol(value)
@@ -832,8 +824,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"symbol", "symbol",
"activeBackground", "activeBackground",
@@ -848,7 +840,7 @@ return {
Textfield = function(base, basalt) Textfield = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local fgSel, bgSel = self:getSelection() local fgSel, bgSel = self:getSelection()
local xOffset, yOffset = self:getOffset() local xOffset, yOffset = self:getOffset()
@@ -863,8 +855,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"bgSelection", "bgSelection",
"fgSelection", "fgSelection",
@@ -876,7 +868,7 @@ return {
if(data["lines"]~=nil)then if(data["lines"]~=nil)then
local l = data["lines"]["line"] local l = data["lines"]["line"]
if(l.properties~=nil)then l = {l} end if(l.properties~=nil)then l = {l} end
for k,v in pairs(l)do for _,v in pairs(l)do
self:addLine(v:value()) self:addLine(v:value())
end end
end end
@@ -917,9 +909,10 @@ return {
Thread = function(base, basalt) Thread = function(base, basalt)
local object = { local object = {
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
if(xmlValue("start", data)~=nil)then local script = xmlValue("start", data)~=nil
local f = load(xmlValue("start", data), nil, "t", scripts.env) if(script~=nil)then
local f = load(script, nil, "t", renderContext.env)
self:start(f) self:start(f)
end end
return self return self
@@ -931,7 +924,7 @@ return {
Timer = function(base, basalt) Timer = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "start") then if (name == "start") then
self:start(value) self:start(value)
@@ -940,15 +933,15 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"start", "start",
"time" "time"
}) })
if(xmlValue("onCall", data)~=nil)then if(xmlValue("onCall", data)~=nil)then
registerFunctionEvent(self, xmlValue("onCall", data), self.onCall, scripts) registerFunctionEvent(self, xmlValue("onCall", data), self.onCall, renderContext)
end end
return self return self
end, end,
@@ -959,7 +952,7 @@ return {
List = function(base, basalt) List = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local selBg, selFg = self:getSelectionColor() local selBg, selFg = self:getSelectionColor()
if (name == "align") then if (name == "align") then
@@ -975,8 +968,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"align", "align",
"offset", "offset",
@@ -988,7 +981,7 @@ return {
if(data["item"]~=nil)then if(data["item"]~=nil)then
local tab = data["item"] local tab = data["item"]
if(tab.properties~=nil)then tab = {tab} end if(tab.properties~=nil)then tab = {tab} end
for k,v in pairs(tab)do for _,v in pairs(tab)do
if(self:getType()~="Radio")then if(self:getType()~="Radio")then
self:addItem(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) self:addItem(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)])
end end
@@ -1003,7 +996,7 @@ return {
Dropdown = function(base, basalt) Dropdown = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local w, h = self:getDropdownSize() local w, h = self:getDropdownSize()
if (name == "dropdownWidth") then if (name == "dropdownWidth") then
@@ -1013,8 +1006,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"dropdownWidth", "dropdownWidth",
"dropdownHeight" "dropdownHeight"
@@ -1028,7 +1021,7 @@ return {
Radio = function(base, basalt) Radio = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local selBg, selFg = self:getBoxSelectionColor() local selBg, selFg = self:getBoxSelectionColor()
local defBg, defFg = self:setBoxDefaultColor() local defBg, defFg = self:setBoxDefaultColor()
@@ -1043,8 +1036,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"selectionBg", "selectionBg",
"selectionFg", "selectionFg",
@@ -1055,7 +1048,7 @@ return {
if(data["item"]~=nil)then if(data["item"]~=nil)then
local tab = data["item"] local tab = data["item"]
if(tab.properties~=nil)then tab = {tab} end if(tab.properties~=nil)then tab = {tab} end
for k,v in pairs(tab)do for _,v in pairs(tab)do
self:addItem(xmlValue("text", v), xmlValue("x", v), xmlValue("y", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) self:addItem(xmlValue("text", v), xmlValue("x", v), xmlValue("y", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)])
end end
end end
@@ -1068,7 +1061,7 @@ return {
Menubar = function(base, basalt) Menubar = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
if (name == "space") then if (name == "space") then
self:setSpace(value) self:setSpace(value)
@@ -1077,8 +1070,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"space", "space",
"scrollable" "scrollable"
@@ -1092,7 +1085,7 @@ return {
Graph = function(base, basalt) Graph = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local symbol, symbolCol = self:getGraphSymbol() local symbol, symbolCol = self:getGraphSymbol()
if (name == "maxEntries") then if (name == "maxEntries") then
@@ -1110,8 +1103,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"maxEntries", "maxEntries",
"type", "type",
@@ -1123,7 +1116,7 @@ return {
if(data["item"]~=nil)then if(data["item"]~=nil)then
local tab = data["item"] local tab = data["item"]
if(tab.properties~=nil)then tab = {tab} end if(tab.properties~=nil)then tab = {tab} end
for k,v in pairs(tab)do for _,_ in pairs(tab)do
self:addDataPoint(xmlValue("value")) self:addDataPoint(xmlValue("value"))
end end
end end
@@ -1136,7 +1129,7 @@ return {
Treeview = function(base, basalt) Treeview = function(base, basalt)
local object = { local object = {
updateValue = function(self, name, value) updateValue = function(self, name, value)
if (value == null) then return end if (value == nil) then return end
base.updateValue(self, name, value) base.updateValue(self, name, value)
local selBg, selFg = self:getSelectionColor() local selBg, selFg = self:getSelectionColor()
local xOffset, yOffset = self:getOffset() local xOffset, yOffset = self:getOffset()
@@ -1155,10 +1148,8 @@ return {
end end
end, end,
setValuesByXMLData = function(self, data, scripts) setValuesByXMLData = function(self, data, renderContext)
base.setValuesByXMLData(self, data, scripts) base.setValuesByXMLData(self, data, renderContext)
local selBg, selFg = self:getSelectionColor()
local xOffset, yOffset = self:getOffset()
self:updateSpecifiedValuesByXMLData(data, { self:updateSpecifiedValuesByXMLData(data, {
"space", "space",
"scrollable", "scrollable",
@@ -1171,7 +1162,7 @@ return {
if(data["node"]~=nil)then if(data["node"]~=nil)then
local tab = data["node"] local tab = data["node"]
if(tab.properties~=nil)then tab = {tab} end if(tab.properties~=nil)then tab = {tab} end
for k,v in pairs(tab)do for _,v in pairs(tab)do
local n = node:addNode(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) local n = node:addNode(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)])
addNode(n, v) addNode(n, v)
end end
@@ -1180,7 +1171,7 @@ return {
if(data["node"]~=nil)then if(data["node"]~=nil)then
local tab = data["node"] local tab = data["node"]
if(tab.properties~=nil)then tab = {tab} end if(tab.properties~=nil)then tab = {tab} end
for k,v in pairs(tab)do for _,v in pairs(tab)do
local n = self:addNode(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) local n = self:addNode(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)])
addNode(n, v) addNode(n, v)
end end