content: sub init()
      m.top.focusable = true
      m.menubg = m.top.findNode("menubg")
      m.focusRing = m.top.findNode("focus")
      m.buttonGroup = m.top.findNode("buttonGroup")
      m.focusAnim = m.top.findNode("moveFocusAnimation")
      m.focusAnimTranslation = m.top.findNode("focusLocation")
      m.focusAnimWidth = m.top.findNode("focusWidth")
      m.focusAnimHeight = m.top.findNode("focusHeight")
  
      m.focusRing.color = m.global.constants.colors.button
      m.buttonCount = 0
      m.selectedFocusedIndex = 0
      m.textSizeTask = createObject("roSGNode", "TextSizeTask")
      m.top.observeField("focusedChild", "focusChanged")
      m.top.enableRenderTracking = true
      m.top.observeField("renderTracking", "renderChanged")
  end sub
  
  
  
  sub selectedIndexChanged()
      m.selectedFocusedIndex = m.top.selectedIndex
  end sub
  
  
  
  sub renderChanged()
      if m.top.renderTracking = "full"
          highlightSelected(m.selectedFocusedIndex, false)
          m.top.setfocus(true)
      end if
  end sub
  
  sub updateButtons()
      m.textSizeTask.fontsize = 40
      m.textSizeTask.text = m.top.buttons
      m.textSizeTask.name = m.buttonCount
      m.textSizeTask.observeField("width", "showButtons")
      m.textSizeTask.control = "RUN"
  end sub
  
  sub showButtons()
      totalWidth = 110 ' track for menu background width - start with side padding
      for i = 0 to m.top.buttons.count() - 1
          m.buttonCount = m.buttonCount + 1
          l = m.buttonGroup.createChild("Label")
          l.text = m.top.buttons[i]
          l.font.size = 40
          l.translation = [
              0
              10
          ]
          l.height = m.textSizeTask.height
          l.width = m.textSizeTask.width[i] + 50
          l.horizAlign = "center"
          l.vertAlign = "center"
          totalWidth = totalWidth + l.width + 45
      end for
      m.menubg.width = totalWidth
      m.menubg.height = m.textSizeTask.height + 40
  end sub
  
  
  sub highlightSelected(index as integer, animate = true)
      val = m.buttonGroup.getChild(index)
      rect = val.ancestorBoundingRect(m.top)
      if animate = true
          m.focusAnimTranslation.keyValue = [
              m.focusRing.translation
              [
                  rect.x - 25
                  rect.y - 30
              ]
          ]
          m.focusAnimWidth.keyValue = [
              m.focusRing.width
              val.width + 50
          ]
          m.focusAnimHeight.keyValue = [
              m.focusRing.height
              val.height + 60
          ]
          m.focusAnim.control = "start"
      else
          m.focusRing.translation = [
              rect.x - 25
              rect.y - 30
          ]
          m.focusRing.width = val.width + 50
          m.focusRing.height = val.height + 60
      end if
  end sub
  
  
  sub focusChanged()
      if m.top.isInFocusChain()
          m.focusRing.opacity = 1
      else
          m.focusRing.opacity = 0.6
      end if
  end sub
  
  function onKeyEvent(key as string, press as boolean) as boolean
      if not press then
          return false
      end if
      if key = "left"
          if m.selectedFocusedIndex > 0 then
              m.selectedFocusedIndex = m.selectedFocusedIndex - 1
          end if
          highlightSelected(m.selectedFocusedIndex)
          m.top.focusedIndex = m.selectedFocusedIndex
          return true
      else if key = "right"
          if m.selectedFocusedIndex < m.buttonCount - 1 then
              m.selectedFocusedIndex = m.selectedFocusedIndex + 1
          end if
          highlightSelected(m.selectedFocusedIndex)
          m.top.focusedIndex = m.selectedFocusedIndex
          return true
      else if key = "OK"
          m.top.selectedIndex = m.selectedFocusedIndex
          return true
      end if
      return false
  end function