86 lines
2.4 KiB
Lua
86 lines
2.4 KiB
Lua
|
--[[------------------------------------------------
|
||
|
-- 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
|