mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 10:56:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			156 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local util = require('openmw.util')
 | 
						|
 | 
						|
local function shallowLayoutCopy(source, target)
 | 
						|
    for k in pairs(target) do
 | 
						|
        target[k] = nil
 | 
						|
    end
 | 
						|
    for k, v in pairs(source) do
 | 
						|
        target[k] = v
 | 
						|
    end
 | 
						|
    return target
 | 
						|
end
 | 
						|
 | 
						|
---
 | 
						|
-- @type Templates
 | 
						|
-- @usage
 | 
						|
-- local I = require('openmw.interfaces')
 | 
						|
-- local ui = require('openmw.ui')
 | 
						|
-- local auxUi = require('openmw_aux.ui')
 | 
						|
-- ui.create {
 | 
						|
--     template = I.MWUI.templates.textNormal,
 | 
						|
--     layer = 'Windows',
 | 
						|
--     type = ui.TYPE.Text,
 | 
						|
--     props = {
 | 
						|
--         text = 'Hello, world!',
 | 
						|
--     },
 | 
						|
-- }
 | 
						|
-- -- important to copy here
 | 
						|
-- local myText = auxUi.deepLayoutCopy(I.MWUI.templates.textNormal)
 | 
						|
-- myText.props.textSize = 20
 | 
						|
-- I.MWUI.templates.textNormal = myText
 | 
						|
-- ui.updateAll()
 | 
						|
 | 
						|
local templatesMeta = {
 | 
						|
    __index = function(self, key)
 | 
						|
        return self.__templates[key]
 | 
						|
    end,
 | 
						|
    __newindex = function(self, key, template)
 | 
						|
        local target = self.__templates[key]
 | 
						|
        if target == template then
 | 
						|
            error("Overriding a template with itself")
 | 
						|
        else
 | 
						|
            shallowLayoutCopy(template, target)
 | 
						|
        end
 | 
						|
    end,
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
-- @module MWUI
 | 
						|
-- @usage require('openmw.interfaces').MWUI
 | 
						|
local function TemplateOverrides(templates)
 | 
						|
    return setmetatable({
 | 
						|
        __templates = util.makeReadOnly(templates),
 | 
						|
    }, templatesMeta)
 | 
						|
end
 | 
						|
 | 
						|
---
 | 
						|
-- @field [parent=#MWUI] #Templates templates
 | 
						|
local templates = {}
 | 
						|
 | 
						|
---
 | 
						|
-- Container that adds padding around its content.
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template padding
 | 
						|
 | 
						|
---
 | 
						|
-- Standard spacing interval
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template interval
 | 
						|
require('scripts.omw.mwui.space')(templates)
 | 
						|
 | 
						|
---
 | 
						|
-- Standard rectangular borders
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template borders
 | 
						|
 | 
						|
---
 | 
						|
-- Container wrapping the content with borders
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template box
 | 
						|
 | 
						|
---
 | 
						|
-- Same as box, but with a semi-transparent background
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template boxTransparent
 | 
						|
 | 
						|
---
 | 
						|
-- Same as box, but with a solid background
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template boxSolid
 | 
						|
 | 
						|
---
 | 
						|
-- Expanding vertical line
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template verticalLine
 | 
						|
 | 
						|
---
 | 
						|
-- Expanding horizontal line
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template horizontalLine
 | 
						|
 | 
						|
---
 | 
						|
-- Standard rectangular borders
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template bordersThick
 | 
						|
 | 
						|
---
 | 
						|
-- Container wrapping the content with borders
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template boxThick
 | 
						|
 | 
						|
---
 | 
						|
-- Same as box, but with a semi-transparent background
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template boxTransparentThick
 | 
						|
 | 
						|
---
 | 
						|
-- Same as box, but with a solid background
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template boxSolidThick
 | 
						|
 | 
						|
---
 | 
						|
-- Expanding vertical line
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template verticalLineThick
 | 
						|
 | 
						|
---
 | 
						|
-- Expanding horizontal line
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template horizontalLineThick
 | 
						|
require('scripts.omw.mwui.borders')(templates)
 | 
						|
 | 
						|
---
 | 
						|
-- Standard "sand" colored text
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template textNormal
 | 
						|
 | 
						|
---
 | 
						|
-- Header white colored text
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template textHeader
 | 
						|
 | 
						|
---
 | 
						|
-- Standard "sand" colored multiline text
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template textParagraph
 | 
						|
require('scripts.omw.mwui.text')(templates)
 | 
						|
 | 
						|
---
 | 
						|
-- Single line text input
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template textEditLine
 | 
						|
 | 
						|
---
 | 
						|
-- Multiline text input
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template textEditBox
 | 
						|
require('scripts.omw.mwui.textEdit')(templates)
 | 
						|
 | 
						|
---
 | 
						|
-- Shades its children and makes them uninteractible
 | 
						|
-- @field [parent=#Templates] openmw.ui#Template disabled
 | 
						|
require('scripts.omw.mwui.filters')(templates)
 | 
						|
 | 
						|
---
 | 
						|
-- Interface version
 | 
						|
-- @field [parent=#MWUI] #number version
 | 
						|
local interface = {
 | 
						|
    version = 0,
 | 
						|
    templates = TemplateOverrides(templates),
 | 
						|
}
 | 
						|
 | 
						|
return {
 | 
						|
    interfaceName = "MWUI",
 | 
						|
    interface = interface,
 | 
						|
}
 |