clocktoy/loveframes/libraries/templates.lua

86 lines
2.4 KiB
Lua
Raw Normal View History

--[[------------------------------------------------
-- Love Frames - A GUI library for LOVE --
-- Copyright (c) 2012-2014 Kenny Shields --
--]]------------------------------------------------
return function(loveframes)
---------- module start ----------
-- templates library
loveframes.templates = {}
--[[---------------------------------------------------------
- func: RegisterTemplate(template)
- desc: registers a template
--]]---------------------------------------------------------
function loveframes.RegisterTemplate(template)
-- display an error message if template is not a table
if type(template) ~= "table" then
loveframes.Error("Could not register template: Template argument must be a table.")
end
local name = template.name
local base = loveframes.objects["base"]
-- display an error message if a template name was not given
if not name then
loveframes.Error("Could not register template: No template name given.")
end
if name == "Base" then
base:include(template.properties["*"])
end
-- insert the template into the available templates table
loveframes.templates[name] = template
end
--[[---------------------------------------------------------
- func: ApplyTemplatesToObject(object)
- desc: applies the properties of registered templates
to an object
--]]---------------------------------------------------------
function loveframes.ApplyTemplatesToObject(object)
local templates = loveframes.templates
local type = object.type
-- loop through all available templates
for k, v in pairs(templates) do
-- make sure the base template doesn't get applied more than once
if k ~= "Base" then
local properties = v.properties
local hasall = loveframes.TableHasKey(properties, "*")
local hasobject = false
if not hasall then
hasobject = loveframes.TableHasKey(properties, type)
end
if hasall then
for k, v in pairs(properties["*"]) do
object[k] = v
end
elseif hasobject then
-- apply the template properties to the object
for k, v in pairs(properties[type]) do
object[k] = v
end
end
end
end
end
function loveframes.LoadTemplates(dir)
local templatelist = loveframes.GetDirectoryContents(dir)
-- loop through a list of all gui templates and require them
for k, v in ipairs(templatelist) do
if v.extension == "lua" then
local template = require(v.requirepath)
loveframes.RegisterTemplate(template)
end
end
end
--return templates
---------- module end ----------
end