Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- AnimalScreen
- AnimationElement
- BitmapElement
- BoxLayoutElement
- BreadcrumbsElement
- ButtonElement
- ButtonOverlay
- ChatWindow
- CheckedOptionElement
- ClearElement
- ContextActionDisplay
- DialogElement
- FieldInfoDisplay
- FillLevelsDisplay
- FlowLayoutElement
- FocusManager
- FrameElement
- FrameReferenceElement
- GameInfoDisplay
- GamePausedDisplay
- Gui
- GuiDataSource
- GuiElement
- GuiMixin
- GuiOverlay
- GuiProfile
- GuiSoundPlayer
- GuiTopDownCamera
- GuiUtils
- HUDDisplayElement
- HUDElement
- HUDFrameElement
- HUDPopupMessage
- HUDTextDisplay
- IndexChangeSubjectMixin
- IndexStateElement
- InGameIcon
- IngameMap
- IngameMapElement
- InputGlyphElement
- InputHelpDisplay
- ListElement
- ListItemElement
- MapHotspot
- MapOverlayGenerator
- MixerWagonHUDExtension
- MultiTextOptionElement
- MultiValueTween
- Overlay
- PagingElement
- PlaySampleMixin
- RenderElement
- RoundStatusBar
- ScreenElement
- SettingsModel
- SideNotification
- SliderElement
- SpeakerDisplay
- SpeedMeterDisplay
- StableListElement
- StatusBar
- TabbedMenu
- TabbedMenuFrameElement
- TabbedMenuWithDetails
- TableElement
- TableHeaderElement
- TextElement
- TextInputElement
- TimerElement
- ToggleButtonElement
- TopNotification
- Tween
- TweenSequence
- VehicleHUDExtension
- VehicleSchemaDisplay
- VideoElement
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- Triggers
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
Foundation Reference
IndexStateElement
DescriptionIndex state display element. Displays a visual element per screen page to let the player see an indication of their current list, page or multi- option selection index. The element points at a UI element which supports indexed access, such as ListElement, PageElement or MultiTextOption. For other cases, UI views directly manipulate the states (e.g. cycling hints in the loading screen).Parent
BoxLayoutElementXML Configuration Parameters
GuiElement#stateElementTemplateId | string ID of a descendant, sibling or sibling's descendant GUI element which is duplicated per page. The element should be configured to have different visuals for normal and selected GuiOverlay states (layers). |
GuiElement#indexableElement | string ID of a descendant, sibling or sibling's descendant GUI element which has an IndexChangeSubjectMixin included. |
Functions
- copyAttributes
- loadFromXML
- loadProfile
- locateIndexableElement
- locateStateElementTemplate
- new
- onGuiSetupFinished
- onIndexChange
- setPageCount
copyAttributes
DescriptionDefinitioncopyAttributes()Code
62 | function IndexStateElement:copyAttributes(src) |
63 | IndexStateElement:superClass().copyAttributes(self, src) |
64 | |
65 | self.stateElementTemplate = src.stateElementTemplate |
66 | self.indexableElement = src.indexableElement |
67 | self.reverseElements = src.reverseElements |
68 | end |
loadFromXML
DescriptionDefinitionloadFromXML()Code
44 | function IndexStateElement:loadFromXML(xmlFile, key) |
45 | IndexStateElement:superClass().loadFromXML(self, xmlFile, key) |
46 | |
47 | self.stateElementTemplateId = getXMLString(xmlFile, key .. "#stateElementTemplateId") |
48 | self.indexableElementId = getXMLString(xmlFile, key .. "#indexableElementId") |
49 | self.reverseElements = getXMLBool(xmlFile, key .. "#reverseElements") or self.reverseElements |
50 | end |
loadProfile
DescriptionDefinitionloadProfile()Code
54 | function IndexStateElement:loadProfile(profile, applyProfile) |
55 | IndexStateElement:superClass().loadProfile(self, profile, applyProfile) |
56 | |
57 | self.reverseElements = profile:getBool("reverseElements", self.reverseElements) |
58 | end |
locateIndexableElement
DescriptionFind and store the indexable element which is configured in #indexableElementId. The function first locates the current view root (if possible) and then searches downwards. The search is broader than locateStateElementTemplate() to allow more flexibility in UI design and configuration.Definition
locateIndexableElement()Code
104 | function IndexStateElement:locateIndexableElement() |
105 | if self.indexableElementId then -- locate indexable element if reference is set |
106 | local root = self.parent |
107 | local levels = 20 |
108 | while root.parent and levels > 0 do |
109 | root = root.parent |
110 | levels = levels - 1 |
111 | end |
112 | |
113 | self.indexableElement = root:getDescendantById(self.indexableElementId) |
114 | |
115 | if self.indexableElement then |
116 | if self.indexableElement:hasIncluded(IndexChangeSubjectMixin) then |
117 | self.indexableElement:addIndexChangeObserver(self, self.onIndexChange) |
118 | else |
119 | print("Warning: Element " .. tostring(self.indexableElement) .. " does not support index change observers and is not valid to be targeted by IndexStateElement " .. tostring(self) ..". Check configuration.") |
120 | end |
121 | else |
122 | print("Warning: IndexStateElement " .. tostring(self) .. " could not find valid indexable element with ID [" .. tostring(self.indexableElementId) .. "]. Check configuration.") |
123 | end |
124 | end -- otherwise assume custom control over this element |
125 | end |
locateStateElementTemplate
DescriptionFind and store the state element template which is configured in #stateElementTemplateId. The function searches from this elements parent downwards, so any descendant of this element or its siblings may contain the state element template.Definition
locateStateElementTemplate()Code
88 | function IndexStateElement:locateStateElementTemplate() |
89 | -- get template element from configured ID |
90 | self.stateElementTemplate = self.parent:getDescendantById(self.stateElementTemplateId) |
91 | if self.stateElementTemplate then |
92 | self.stateElementTemplate:setVisible(false) |
93 | self.stateElementTemplate:setHandleFocus(false) -- no focus, no highlight |
94 | self.stateElementTemplate:unlinkElement() -- take out of hierarchy to avoid further updates |
95 | else |
96 | print("Warning: IndexStateElement " .. tostring(self) .. " could not find state element template with ID [" .. tostring(self.stateElementTemplateId) .. "]. Check configuration.") |
97 | end |
98 | end |
new
DescriptionDefinitionnew()Code
24 | function IndexStateElement:new(target, custom_mt) |
25 | if custom_mt == nil then |
26 | custom_mt = IndexStateElement_mt |
27 | end |
28 | |
29 | local self = BoxLayoutElement:new(target, custom_mt) |
30 | |
31 | self.pageElements = {} |
32 | self.currentPageIndex = 1 |
33 | self.indexableElementId = nil |
34 | self.indexableElement = nil |
35 | self.stateElementTemplateId = nil |
36 | self.stateElementTemplate = nil |
37 | self.reverseElements = false |
38 | |
39 | return self |
40 | end |
onGuiSetupFinished
DescriptionDefinitiononGuiSetupFinished()Code
72 | function IndexStateElement:onGuiSetupFinished() |
73 | IndexStateElement:superClass().onGuiSetupFinished(self) |
74 | |
75 | if not self.stateElementTemplate then |
76 | self:locateStateElementTemplate() |
77 | end |
78 | |
79 | if not self.indexableElement and self.indexableElementId ~= nil then |
80 | self:locateIndexableElement() |
81 | end |
82 | end |
onIndexChange
DescriptionEvent handler for index changes.Definition
onIndexChange(index New, count (New))Arguments
index | New | index |
count | (New) | item count |
131 | function IndexStateElement:onIndexChange(index, count) |
132 | if count ~= #self.pageElements then |
133 | self:setPageCount(count, index) |
134 | end |
135 | |
136 | self:setPageIndex(index) |
137 | end |
setPageCount
DescriptionSet the page count. Clears current page elements and rebuilds as many as needed from the configured template.Definition
setPageCount(count Number, initialIndex [optional])Arguments
count | Number | of page indicators to display |
initialIndex | [optional] | Page index to set after rebuilding |
144 | function IndexStateElement:setPageCount(count, initialIndex) |
145 | -- locate the state element template if page count has been set before GUI finalization |
146 | if not self.stateElementTemplate then |
147 | self:locateStateElementTemplate() |
148 | end |
149 | |
150 | if count ~= #self.pageElements then |
151 | -- clear pages |
152 | for _, element in pairs(self.pageElements) do |
153 | self:removeElement(element) |
154 | element:delete() |
155 | end |
156 | self.pageElements = {} |
157 | |
158 | -- replicate template |
159 | for i = 1, count do |
160 | local stateElement = self.stateElementTemplate:clone(self) |
161 | stateElement:setVisible(true) |
162 | table.insert(self.pageElements, stateElement) |
163 | end |
164 | |
165 | -- rebuild layout |
166 | self:invalidateLayout() |
167 | if initialIndex then |
168 | self:setPageIndex(initialIndex) |
169 | end |
170 | end |
171 | end |