import "pkg:/source/utils/misc.bs" sub init() m.previouslyDisplayedSection = 0 end sub sub onFocusChange() if m.top.focus m.top.getChild(m.top.displayedIndex).setFocus(true) end if end sub sub displayedIndexChanged() if not m.top.affectsFocus then return if m.top.displayedIndex < 0 return end if if m.top.displayedIndex > (m.top.getChildCount() - 1) return end if m.top.getChild(m.previouslyDisplayedSection).setFocus(false) displayedSection = m.top.getChild(m.top.displayedIndex) displayedSection.setFocus(true) onDeckSection = invalid previouslyOnDeckSection = invalid if m.top.displayedIndex + 1 <= (m.top.getChildCount() - 1) onDeckSection = m.top.getChild(m.top.displayedIndex + 1) end if if m.top.displayedIndex + 2 <= (m.top.getChildCount() - 1) previouslyOnDeckSection = m.top.getChild(m.top.displayedIndex + 2) end if ' Move sections either up or down depending on what index we're moving to if m.top.displayedIndex > m.previouslyDisplayedSection for i = m.previouslyDisplayedSection to m.top.displayedIndex - 1 m.top.getChild(i).callFunc("scrollOffTop") end for displayedSection.callFunc("showFromBottom") if isValid(onDeckSection) onDeckSection.callFunc("scrollUpToOnDeck") end if else if m.top.displayedIndex < m.previouslyDisplayedSection m.top.getChild(m.top.displayedIndex + 1).callFunc("scrollDownToOnDeck") displayedSection.callFunc("showFromTop") if isValid(previouslyOnDeckSection) previouslyOnDeckSection.callFunc("scrollOffOnDeck") end if end if m.previouslyDisplayedSection = m.top.displayedIndex end sub