mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 17:26:38 +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,
 | |
| }
 |