LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

TabbedMenuWithDetails

Description
A tabbed menu with support for detail pages for a hierarchy Please note that this is a hack to make such a system work with the rest of the UI system. Instead, the UI system should be hierarchycal top-down to begin with automatically supporting something like this (by view controllers in tab controller) TODO: A bug exists regarding pageIndex/pageMappingIndex. When there is an invisible page between the tabs (pageIndex does not match pageMappingIndex), and a player switches from a tab with detail open with Q to the tab that is not ordered 'right', it does nothing and the tab is hidden. To 'fix': reorder tabs in xml if possible
Parent
TabbedMenu
Functions

exitMenu

Description
Exit the menu if allowed.
Definition
exitMenu()
Code
49function TabbedMenuWithDetails:exitMenu()
50 -- Make sure that detail mode is off
51 self:popToRoot()
52
53 TabbedMenuWithDetails:superClass().exitMenu(self)
54end

getBreadcrumbs

Description
Get a list of breadcrumbs for the current page
Definition
getBreadcrumbs()
Code
294function TabbedMenuWithDetails:getBreadcrumbs(page)
295 local list = {}
296
297 for _, item in ipairs(self:getStack(page)) do
298 table.insert(list, item.page.title or "")
299 end
300
301 return list
302end

getIsDetailMode

Description
Definition
getIsDetailMode()
Code
43function TabbedMenuWithDetails:getIsDetailMode()
44 return not self:isAtRoot()
45end

getStack

Description
Get the frame stack of the current tab
Definition
getStack()
Code
136function TabbedMenuWithDetails:getStack(page)
137 local pageId = self.currentPageId
138 if page ~= nil then
139 pageId = self.pagingElement:getPageIndexByElement(page)
140 else
141 page = self.pagingElement:getPageElementByIndex(pageId)
142 end
143
144 if self.stacks[pageId] == nil then
145 self.stacks[pageId] = {}
146
147 local root = {
148 page = page,
149 pageId = pageId,
150 isRoot = true,
151 }
152
153 table.insert(self.stacks[pageId], root)
154 end
155
156 return self.stacks[pageId]
157end

getTopFrame

Description
Get the current top frame (page)
Definition
getTopFrame()
Code
167function TabbedMenuWithDetails:getTopFrame()
168 local stack = self:getStack()
169 return stack[#stack].page
170end

isAtRoot

Description
Get whether the current tab is showing its root page
Definition
isAtRoot()
Code
161function TabbedMenuWithDetails:isAtRoot()
162 return table.getn(self:getStack()) == 1
163end

new

Description
Definition
new()
Code
25function TabbedMenuWithDetails:new(target, customMt, messageCenter, l10n, inputManager)
26 local self = TabbedMenu:new(target, customMt or TabbedMenu_mt, messageCenter, l10n, inputManager)
27
28 self.stacks = {}
29
30 return self
31end

onButtonBack

Description
Button function for backing out of the menu.
Definition
onButtonBack()
Code
109function TabbedMenuWithDetails:onButtonBack()
110 if self:isAtRoot() then
111 self:exitMenu()
112 else
113 self:popDetail()
114 end
115end

onDetailClosed

Description
Abstract function called when a detail closed
Definition
onDetailClosed()
Code
99function TabbedMenuWithDetails:onDetailClosed(detailPage)
100end

onDetailOpened

Description
Abstract function called when a detail opened
Definition
onDetailOpened()
Code
104function TabbedMenuWithDetails:onDetailOpened(detailPage)
105end

onOpen

Description
Definition
onOpen()
Code
58function TabbedMenuWithDetails:onOpen(element)
59 -- HACK: Skip over any code in TabbedMenu. It causes a double blur context and too many sounds
60 -- We still want its super class to be called
61 TabbedMenu:superClass().onOpen(self)
62
63 if self.performBackgroundBlur then
64 g_depthOfFieldManager:setBlurState(true)
65 end
66
67 self:playSample(GuiSoundPlayer.SOUND_SAMPLES.PAGING)
68
69 if self.gameState ~= nil then
70 g_gameStateManager:setGameState(self.gameState)
71 end
72
73 -- Disable all focus sounds. We play our own for opening the menu
74 self:setSoundSuppressed(true)
75
76 local top = self:getTopFrame() -- also creates stack
77
78 if self:isAtRoot() then
79 self:updatePages()
80 self.pageSelector:setState(self.restorePageIndex, true)
81 else
82 top:onFrameOpen()
83 self:updateButtonsPanel(top)
84 end
85
86 self:setSoundSuppressed(false)
87
88 self:onMenuOpened()
89end

onPageChange

Description
Callback form PagingElement
Definition
onPageChange()
Code
119function TabbedMenuWithDetails:onPageChange(pageIndex, pageMappingIndex, element, skipTabVisualUpdate)
120 -- If the new page is a detail page, then do not update
121 if self.isChangingDetail then
122 skipTabVisualUpdate = true
123 else
124 self:popToRoot()
125 end
126
127 TabbedMenuWithDetails:superClass().onPageChange(self, pageIndex, pageMappingIndex, element, skipTabVisualUpdate)
128end

onPageClicked

Description
Override action that happens when a paging tab is clicked
Definition
onPageClicked()
Code
93function TabbedMenuWithDetails:onPageClicked(oldPage)
94 self:popToRoot()
95end

popDetail

Description
Remove current detail and go back to the previous one (or root) We remove the detail onto the context stack, and update the visible frame.
Definition
popDetail()
Code
219function TabbedMenuWithDetails:popDetail()
220 local stack = self:getStack()
221
222 self.isChangingDetail = true
223
224 if #stack == 1 then
225 g_logManager:error("Cannot pop from view stack at root")
226 return
227 end
228
229 local closingPage = stack[#stack].page
230 table.remove(stack)
231
232 -- Disable the popped page
233 closingPage:setVisible(false)
234 closingPage:onFrameClose()
235
236 self:setPageDisabled(closingPage, true)
237
238 self:onDetailClosed(detailPage)
239
240 -- If not at root, show detail again
241 if #stack ~= 1 then
242 local detailPage = stack[#stack].page
243
244 detailPage:onFrameOpen()
245
246 self:setPageDisabled(detailPage, false)
247
248 detailPage:setSoundSuppressed(true) -- avoid playing sound on page focus-triggered selection when opening
249 self.pagingElement:setPage(self.pagingElement:getPageMappingIndexByElement(detailPage))
250 detailPage:setSoundSuppressed(false)
251
252 self:onDetailOpened(detailPage)
253 else
254 -- Set page
255 self.pagingElement:setPage(self.pagingElement:getPageMappingIndexByElement(stack[1].page))
256 end
257
258 self.isChangingDetail = false
259end

popToRoot

Description
Pop everything from the stack until only the root is kept. Used for resetting the hierarchy with clicking a tab
Definition
popToRoot()
Code
263function TabbedMenuWithDetails:popToRoot()
264 local stack = self:getStack()
265
266 -- TODO: optimize. Can close all without opening them too (just close, remove all, open)
267 if #stack > 1 then
268 for _ = #stack, 2, -1 do
269 self:popDetail()
270 end
271 end
272end

pushDetail

Description
Add a new detail and show it. We push the detail onto the context stack, and update the visible frame
Definition
pushDetail()
Code
182function TabbedMenuWithDetails:pushDetail(detailPage)
183 local stack = self:getStack()
184
185 self.isChangingDetail = true
186
187 -- If already a detail visible, hide it first
188 if not self:isAtRoot() then
189 local closingPage = stack[#stack].page
190
191 -- Disable details page
192 detailPage:setVisible(false)
193 detailPage:onFrameClose()
194
195 self:setPageDisabled(detailPage, true)
196
197 self:onDetailClosed(closingPage)
198 end
199
200 local context = {
201 page = detailPage
202 }
203 table.insert(stack, context)
204
205 self:setPageDisabled(detailPage, false)
206
207 detailPage:setSoundSuppressed(true) -- avoid playing sound on page focus-triggered selection when opening
208 self.pagingElement:setPage(self.pagingElement:getPageMappingIndexByElement(detailPage))
209 detailPage:setSoundSuppressed(false)
210
211 self:onDetailOpened(detailPage)
212
213 self.isChangingDetail = false
214end

replaceDetail

Description
Replace current detail with the given. This is useful for keeping the back button behaviour
Definition
replaceDetail()
Code
276function TabbedMenuWithDetails:replaceDetail(detailPage)
277 -- TODO optimize
278
279 -- close
280 -- remove
281 -- add
282 -- open
283
284 self:popDetail()
285 self:pushDetail(detailPage)
286end

reset

Description
Definition
reset()
Code
35function TabbedMenuWithDetails:reset()
36 TabbedMenuWithDetails:superClass().reset(self)
37
38 self.stacks = {}
39end

setPageDisabled

Description
Definition
setPageDisabled()
Code
174function TabbedMenuWithDetails:setPageDisabled(page, disabled)
175 local pageId = self.pagingElement:getPageIdByElement(page)
176 self.pagingElement:setPageIdDisabled(pageId, disabled)
177end