mwseMCMTemplate⚓︎
A Template is the top level component in MCM. It determines the overall layout of the menu. Can be created with a table or a string (name).
This type inherits the following: mwseMCMComponent
Properties⚓︎
childIndent
⚓︎
The left padding size in pixels. Used on all the child components.
Returns:
result
(integer, nil)
childSpacing
⚓︎
The bottom border size in pixels. Used on all the child components.
Returns:
result
(integer, nil)
class
⚓︎
Returns:
result
(string)
componentType
⚓︎
The type of this component.
Returns:
result
("Template")
createContentsContainer
⚓︎
This method creates the contents of a component. Not every component implements this method.
Returns:
result
(nil, fun(self: mwseMCMComponent, outerContainer: tes3uiElement))
currentPage
⚓︎
The currently displayed page in this Template.
Returns:
result
(mwseMCMPage)
description
⚓︎
If in a Sidebar Page, the description will be shown on mouseover.
Returns:
result
(string, nil)
elements
⚓︎
This dictionary-style table holds all the UI elements of the Template, for easy access.
Returns:
result
(mwseMCMTemplateElements)
headerImagePath
⚓︎
The path to the header image. It's relative to Data Files/
. The image must have power-of-2 dimensions (i.e. 16, 32, 64, 128, 256, 512, 1024, etc.).
Returns:
result
(string, nil)
indent
⚓︎
The left padding size in pixels. Only used if the childIndent
isn't set on the parent component.
Returns:
result
(integer)
inGameOnly
⚓︎
Used only on components without a variable. For components with a variable, the variable's inGameOnly
field is used. For more info see checkDisabled.
Returns:
result
(boolean)
label
⚓︎
The text of the component. Not all component types have a label.
Returns:
result
(string)
mouseOvers
⚓︎
This array of UI elements will have an event handler registered to trigger "MCM:MouseOver" event. For more info, see registerMouseOverElements method.
Returns:
result
(tes3uiElement[], nil)
name
⚓︎
The name field is the mod name, used to register the MCM, and is displayed in the mod list on the lefthand pane.
Returns:
result
(string)
onClose
⚓︎
A function which will be called when the menu is closed. Useful for saving variables, such as TableVariable.
Returns:
result
(nil, fun(modConfigContainer: tes3uiElement))
onSearch
⚓︎
A custom search handler function. This function should return true if this mod Template should show up in search results for given searchText
.
Returns:
result
(nil, fun(searchText: string): boolean)
paddingBottom
⚓︎
The bottom border size in pixels. Only used if the childSpacing
is unset on the parent component.
Returns:
result
(integer)
pages
⚓︎
Pages in this Template.
Returns:
result
(mwseMCMPage[])
parentComponent
⚓︎
Returns:
result
(mwseMCMComponent, nil)
postCreate
⚓︎
Custom formatting function to make adjustments to any element saved in self.elements
.
Returns:
result
(nil, fun(self: mwseMCMComponent))
sCancel
⚓︎
Set to the value of sCancel
GMST.
Returns:
result
(string)
sNo
⚓︎
Set to the value of sNo
GMST.
Returns:
result
(string)
sOK
⚓︎
Set to the value of sOK
GMST.
Returns:
result
(string)
sYes
⚓︎
Set to the value of sYes
GMST.
Returns:
result
(string)
Methods⚓︎
checkDisabled
⚓︎
Returns true if the component should be disabled.
Componets with a variable:
- True if the Component's variable has
inGameOnly
field set to true, and the game is on the main menu. For components with multiple subcomponent (Category), the check is done for each subcomponent.
Components without a variable:
- True if the Component's
inGameOnly
field is set to true, and the game is on the main menu.
local result = myObject:checkDisabled()
Returns:
result
(boolean)
clickTab
⚓︎
Destroys the currently display page and creates the given page as the new current page.
myObject:clickTab(thisPage)
Parameters:
thisPage
(mwseMCMPage)
create
⚓︎
This method creates the UI elements that comprise a component. To call this method, the mwseMCMComponent-derived type needs to have createContentsContainer
method implemented.
myObject:create(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
createContentsContainer
⚓︎
This method creates the UI elements specific to a Template.
myObject:createContentsContainer(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
createExclusionsPage
⚓︎
Creates a new Exclusions Page in this Template.
local page = myObject:createExclusionsPage({ showHeader = ..., label = ..., variable = ..., filters = ..., description = ..., toggleText = ..., leftListLabel = ..., rightListLabel = ..., showAllBlocked = ..., indent = ..., childIndent = ..., paddingBottom = ..., childSpacing = ..., inGameOnly = ... })
Parameters:
data
(table)showHeader
(boolean): Default:false
. The page's label will only be created if set to true.label
(string): The label field is displayed in the tab for that page at the top of the menu. Defaults to: "Page {number}".variable
(mwseMCMVariable, mwseMCMSettingNewVariable): The Variable used to store blocked list entries.filters
(mwseMCMExclusionsPageFilter[]): A list of filters. Filters control which items will appear in the lists of the Exclusions Page. At least one filter is required. See the filter page for description.description
(string): Optional. Displayed at the top of the page above the lists.toggleText
(string): Optional. The text for the button that toggles filtered items from one list to another. The default is a localised version of "Toggle Filtered".leftListLabel
(string): Optional. The label on the left list. The default is a localised version of "Blocked".rightListLabel
(string): Optional. The label on the right list. The default is a localised version of "Allowed".showAllBlocked
(boolean): Default:false
. When set to true, the left list shows all items in the blocked table, regardless of the filter being used.indent
(integer): Default:6
. The left padding size in pixels. Only used if thechildIndent
isn't set on the parent component.childIndent
(integer): Optional. The left padding size in pixels. Used on all the child components.paddingBottom
(integer): Default:4
. The bottom border size in pixels. Only used if thechildSpacing
is unset on the parent component.childSpacing
(integer): Optional. The bottom border size in pixels. Used on all the child components.inGameOnly
(boolean): Default:false
.
Returns:
page
(mwseMCMExclusionsPage)
createFilterPage
⚓︎
Creates a new Filter Page in this Template.
local page = myObject:createFilterPage({ showHeader = ..., label = ..., noScroll = ..., description = ..., placeholderSearchText = ..., components = ..., indent = ..., childIndent = ..., paddingBottom = ..., childSpacing = ..., inGameOnly = ..., postCreate = ... })
Parameters:
data
(table, string): Optional. If passing only a string, it will be used as the Filter Page's label.showHeader
(boolean): Default:false
. The page's label will only be created if set to true.label
(string): Optional. The label field is displayed in the tab for that page at the top of the menu. Defaults to: "Page {number}".noScroll
(boolean): Default:false
. When set to true, the page will not have a scrollbar. Particularly useful if you want to use a ParagraphField, which is not compatible with scroll panes.description
(string): Optional. Default sidebar text shown when the mouse isn't hovering over a component inside this Sidebar Page. It will be added to right column as a mwseMCMInfo.placeholderSearchText
(string): Default:Search...
. The text shown in the search bar when no text is entered.components
(mwseMCMComponent.getComponent.componentData[]): Optional. Use this if you want to directly create all the nested components in this Page. This table is described at getComponent.indent
(integer): Default:6
. The left padding size in pixels. Only used if thechildIndent
isn't set on the parent component.childIndent
(integer): Optional. The left padding size in pixels. Used on all the child components.paddingBottom
(integer): Default:4
. The bottom border size in pixels. Only used if thechildSpacing
is unset on the parent component.childSpacing
(integer): Optional. The bottom border size in pixels. Used on all the child components.inGameOnly
(boolean): Default:false
.postCreate
(fun(self: mwseMCMFilterPage)): Optional. Can define a custom formatting function to make adjustments to any element saved inself.elements
.
Returns:
page
(mwseMCMFilterPage)
createInnerContainer
⚓︎
Creates component's innerContainer UI element inside given parentBlock
, and stores it in the self.elements.innerContainer
. The innerContainer will add self.indent
additional padding on the left if the component has a label.
myObject:createInnerContainer(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
createLabel
⚓︎
If a Template has headerImagePath defined, this method creates an image UI element from image at given path. If not, creates a label UI block with self.label
text.
myObject:createLabel(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
createLabelBlock
⚓︎
Creates component's labelBlock UI element inside given parentBlock
, and stores it in the self.elements.labelBlock
and self.mouseOvers
.
myObject:createLabelBlock(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
createMouseOverPage
⚓︎
Creates a new MouseOverPage in this Template.
local page = myObject:createMouseOverPage({ showHeader = ..., label = ..., noScroll = ..., components = ..., indent = ..., childIndent = ..., paddingBottom = ..., childSpacing = ..., inGameOnly = ..., postCreate = ... })
Parameters:
data
(table): Optional.showHeader
(boolean): Default:false
. The page's label will only be created if set to true.label
(string): Optional. The page label.noScroll
(boolean): Default:true
. When set to true, the page will not have a scrollbar. Particularly useful if you want to use a ParagraphField, which is not compatible with scroll panes.components
(mwseMCMComponent.getComponent.componentData[]): Optional. Use this if you want to directly create all the nested components in this Page. This table is described at getComponent.indent
(integer): Default:6
. The left padding size in pixels. Only used if thechildIndent
isn't set on the parent component.childIndent
(integer): Optional. The left padding size in pixels. Used on all the child components.paddingBottom
(integer): Default:4
. The bottom border size in pixels. Only used if thechildSpacing
is unset on the parent component.childSpacing
(integer): Optional. The bottom border size in pixels. Used on all the child components.inGameOnly
(boolean): Default:false
.postCreate
(fun(self: mwseMCMMouseOverPage)): Optional. Can define a custom formatting function to make adjustments to any element saved inself.elements
.
Returns:
page
(mwseMCMMouseOverPage)
createOuterContainer
⚓︎
Creates component's outerContainer UI element inside given parentBlock
, and stores it in the self.elements.outerContainer
and self.mouseOvers
. The outerContainer holds all the other UI elements that comprise a component.
myObject:createOuterContainer(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
createPage
⚓︎
Creates a new Page in this Template.
local page = myObject:createPage({ showHeader = ..., label = ..., noScroll = ..., components = ..., indent = ..., childIndent = ..., paddingBottom = ..., childSpacing = ..., inGameOnly = ..., postCreate = ... })
Parameters:
data
(table, string): Optional. If passing only a string, it will be used as the Page's label.showHeader
(boolean): Default:false
. The page's label will only be created if set to true.label
(string): Optional. The label field is displayed in the tab for that page at the top of the menu. Defaults to: "Page {number}".noScroll
(boolean): Default:false
. When set to true, the page will not have a scrollbar. Particularly useful if you want to use a ParagraphField, which is not compatible with scroll panes.components
(mwseMCMComponent.getComponent.componentData[]): Optional. Use this if you want to directly create all the nested components in this Page. This table is described at getComponent.indent
(integer): Default:6
. The left padding size in pixels. Only used if thechildIndent
isn't set on the parent component.childIndent
(integer): Optional. The left padding size in pixels. Used on all the child components.paddingBottom
(integer): Default:4
. The bottom border size in pixels. Only used if thechildSpacing
is unset on the parent component.childSpacing
(integer): Optional. The bottom border size in pixels. Used on all the child components.inGameOnly
(boolean): Default:false
.postCreate
(fun(self: mwseMCMPage)): Optional. Can define a custom formatting function to make adjustments to any element saved inself.elements
.
Returns:
page
(mwseMCMPage)
createSideBarPage
⚓︎
Creates a new Sidebar Page in this Template.
local page = myObject:createSideBarPage({ showHeader = ..., label = ..., noScroll = ..., description = ..., components = ..., indent = ..., childIndent = ..., paddingBottom = ..., childSpacing = ..., inGameOnly = ..., postCreate = ... })
Parameters:
data
(table, string): Optional. If passing only a string, it will be used as the Sidebar Page's label.showHeader
(boolean): Default:false
. The page's label will only be created if set to true.label
(string): Optional. The label field is displayed in the tab for that page at the top of the menu. Defaults to: "Page {number}".noScroll
(boolean): Default:false
. When set to true, the page will not have a scrollbar. Particularly useful if you want to use a ParagraphField, which is not compatible with scroll panes.description
(string): Optional. Default sidebar text shown when the mouse isn't hovering over a component inside this Sidebar Page. It will be added to right column as a mwseMCMInfo.components
(mwseMCMComponent.getComponent.componentData[]): Optional. Use this if you want to directly create all the nested components in this Page. This table is described at getComponent.indent
(integer): Default:6
. The left padding size in pixels. Only used if thechildIndent
isn't set on the parent component.childIndent
(integer): Optional. The left padding size in pixels. Used on all the child components.paddingBottom
(integer): Default:4
. The bottom border size in pixels. Only used if thechildSpacing
is unset on the parent component.childSpacing
(integer): Optional. The bottom border size in pixels. Used on all the child components.inGameOnly
(boolean): Default:false
.postCreate
(fun(self: mwseMCMSideBarPage)): Optional. Can define a custom formatting function to make adjustments to any element saved inself.elements
.
Returns:
page
(mwseMCMSideBarPage)
createSubcomponentsContainer
⚓︎
This method creates the pageBlock UI element and the first page of the Template.
myObject:createSubcomponentsContainer(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
createTab
⚓︎
This method creates a button for given page in the tabsBlock UI elements of the Template. The button has an event handler registered on tes3.uiEvent.mouseClick that calls self:clickTab(page)
.
myObject:createTab(page)
Parameters:
page
(mwseMCMPage)
createTabsBlock
⚓︎
This method creates the outerTabsBlock, previousTabButton, tabsBlock and nextTabButton UI elements of the Template. The page tabs aren't created if the Template contains only one page.
myObject:createTabsBlock(parentBlock)
Parameters:
parentBlock
(tes3uiElement)
disable
⚓︎
This method disables the component's UI elements. That includes: changing the color of the UI elements to the tes3.palette.disabledColor
and setting button widget state to tes3.uiState.disabled
.
myObject:disable()
enable
⚓︎
Enables the component's UI elements. That includes: changing the color of the UI elements to the tes3.palette.normalColor
and registering handlers for tes3.uiEvent.mouseClick
for buttons.
myObject:enable()
getComponent
⚓︎
Creates a new Component of given class or returns the given Component.
local component = myObject:getComponent({ class = ..., label = ..., indent = ..., childIndent = ..., paddingBottom = ..., childSpacing = ..., inGameOnly = ..., postCreate = ..., parentComponent = ... })
Parameters:
componentData
(mwseMCMComponent, table)class
(string): The component type to get. On of the following:"Category"
"SideBySideBlock"
"ActiveInfo"
"Hyperlink"
"Info"
"MouseOverInfo"
"ExclusionsPage"
"FilterPage"
"MouseOverPage"
"Page"
"SideBarPage"
"Button"
"DecimalSlider"
"Dropdown"
"KeyBinder"
"OnOffButton"
"ParagraphField"
"Setting"
"Slider"
"TextField"
"YesNoButton"
"Template"
label
(string): Optional. The label text to set for the new component. Not all component types have a label.indent
(integer): Default:12
. The left padding size in pixels. Only used if thechildIndent
isn't set on the parent component.childIndent
(integer): Optional. The left padding size in pixels. Used on all the child components.paddingBottom
(integer): Default:4
. The bottom border size in pixels. Only used if thechildSpacing
is unset on the parent component.childSpacing
(integer): Optional. The bottom border size in pixels. Used on all the child components.inGameOnly
(boolean): Default:false
.postCreate
(fun(self: mwseMCMComponent)): Optional. Can define a custom formatting function to make adjustments to any element saved inself.elements
.parentComponent
(mwseMCMComponent): Optional.
Returns:
component
(mwseMCMComponent)
new
⚓︎
Creates a new Template.
local template = myObject:new({ name = ..., label = ..., headerImagePath = ..., onClose = ..., onSearch = ..., pages = ..., indent = ..., childIndent = ..., paddingBottom = ..., childSpacing = ..., inGameOnly = ..., postCreate = ..., class = ..., parentComponent = ... })
Parameters:
data
(table)name
(string): Optional. The name field is the mod name, used to register the MCM, and is displayed in the mod list on the lefthand pane.label
(string): Optional. Used in place ofname
if that argument isn't passed. You need to pass at least one of thename
andlabel
arguments. IfheaderImagePath
is not passed, a UI element will be created withlabel
as text.headerImagePath
(string): Optional. Set it to display an image at the top of your menu. Path is relative toData Files/
. The image must have power-of-2 dimensions (i.e. 16, 32, 64, 128, 256, 512, 1024, etc.).onClose
(fun(modConfigContainer: tes3uiElement)): Optional. Set this to a function which will be called when the menu is closed. Useful for saving variables, such as TableVariable.onSearch
(fun(searchText: string): boolean): Optional. A custom search handler function. This function should return true if this mod Template should show up in search results for givensearchText
.pages
(mwseMCMPage.new.data[]): Optional. You can create pages for the template directly here. The entries in the array must specify the class of the page.indent
(integer): Default:12
. The left padding size in pixels. Only used if thechildIndent
isn't set on the parent component.childIndent
(integer): Optional. The left padding size in pixels. Used on all the child components.paddingBottom
(integer): Default:4
. The bottom border size in pixels. Only used if thechildSpacing
is unset on the parent component.childSpacing
(integer): Optional. The bottom border size in pixels. Used on all the child components.inGameOnly
(boolean): Default:false
.postCreate
(fun(self: mwseMCMTemplate)): Optional. Can define a custom formatting function to make adjustments to any element saved inself.elements
.class
(string): Optional.parentComponent
(mwseMCMComponent): Optional.
Returns:
template
(mwseMCMTemplate)
onSearchInternal
⚓︎
This method calls the onSearch
handler if it exists.
local result = myObject:onSearchInternal(searchText)
Parameters:
searchText
(string)
Returns:
result
(boolean)
prepareData
⚓︎
Prepares the provided parameters table and sets the parentComponent
field to mwseMCMComponent
.
local data = myObject:prepareData(data)
Parameters:
data
(string, mwseMCMComponent.new.data): Optional.
Returns:
data
(mwseMCMComponent.new.data)
printComponent
⚓︎
Prints the component table to the mwse.log
. If a component is passed, it will be printed. If called without arguments, the component it was called on will be printed.
myObject:printComponent(component)
Parameters:
component
(table): Default:self
.
register
⚓︎
A convenience function that registers the mod's configuration menu using its Template.
You don't need to call mwse.registerModConfig
or mwse.mcm.register
if calling this function.
myObject:register()
registerMouseOverElements
⚓︎
Registers an event handler on each given UI element for the tes3.uiEvent.mouseOver
and tes3.uiEvent.mouseLeave
that will trigger "MCM:MouseOver" event. That event is used by the MCM to update the sidebar on the mwseMCMSideBarPage.
myObject:registerMouseOverElements(mouseOverList)
Parameters:
mouseOverList
(tes3uiElement[]): Optional. If this argument isn't passed, does nothing.
saveOnClose
⚓︎
This method assigns a new function to onClose
field that calls mwse.saveConfig
with given parameters.
myObject:saveOnClose(fileName, config)
Parameters:
fileName
(string)config
(unknown)
setCustomSearchHandler
⚓︎
This method assigns a custom search handler for the Template. This function should return true if this mod should show up in search results for given searchText
.
myObject:setCustomSearchHandler(callback)
Parameters:
callback
(nil, fun(searchText: string): boolean)