mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-02 10:45:34 +00:00
61 lines
1.9 KiB
Lua
61 lines
1.9 KiB
Lua
|
local ui = require('openmw.ui')
|
||
|
local util = require('openmw.util')
|
||
|
|
||
|
local common = require('scripts.omw.settings.common')
|
||
|
|
||
|
local renderers = {}
|
||
|
local function registerRenderer(name, renderFunction)
|
||
|
renderers[name] = renderFunction
|
||
|
end
|
||
|
|
||
|
local groupOptions = {}
|
||
|
|
||
|
local function renderSetting(groupName, setting, value, index)
|
||
|
local renderFunction = renderers[setting.renderer]
|
||
|
if not renderFunction then
|
||
|
error(('Setting %s of %s has unknown renderer %s'):format(setting.name, groupName, setting.renderer))
|
||
|
end
|
||
|
local layout = renderFunction(setting, value or setting.default, function(value)
|
||
|
local group = common.getGroup(groupName)
|
||
|
group:set(setting.name, value)
|
||
|
local element = groupOptions[groupName].element
|
||
|
element.layout.content[setting.name] = renderSetting(groupName, setting, value, index)
|
||
|
element:update()
|
||
|
end)
|
||
|
layout.name = setting.name
|
||
|
-- temporary hacky position and size
|
||
|
layout.props = layout.props or {}
|
||
|
layout.props.position = util.vector2(0, 100 * (index - 1))
|
||
|
layout.props.size = util.vector2(400, 100)
|
||
|
return layout
|
||
|
end
|
||
|
|
||
|
local function onGroupRegistered(groupName)
|
||
|
local group = common.groups:get(groupName)
|
||
|
local layout = {
|
||
|
content = ui.content{},
|
||
|
}
|
||
|
local searchHints = { groupName }
|
||
|
local count = 0
|
||
|
for _, setting in pairs(group) do
|
||
|
count = count + 1
|
||
|
layout.content:add(renderSetting(groupName, setting, setting.default, count))
|
||
|
table.insert(searchHints, setting.name)
|
||
|
end
|
||
|
layout.props = {
|
||
|
size = util.vector2(400, 100 * count)
|
||
|
}
|
||
|
local options = {
|
||
|
name = groupName,
|
||
|
element = ui.create(layout),
|
||
|
searchHints = table.concat(searchHints, ' '),
|
||
|
}
|
||
|
groupOptions[groupName] = options
|
||
|
print(('registering group %s'):format(groupName))
|
||
|
ui.registerSettingsPage(options)
|
||
|
end
|
||
|
|
||
|
return {
|
||
|
onGroupRegistered = onGroupRegistered,
|
||
|
registerRenderer = registerRenderer,
|
||
|
}
|