components_section_section.bs

import "pkg:/source/utils/misc.bs"

sub init()
  m.showFromBottomAnimation = m.top.findNode("showFromBottomAnimation")
  m.showFromBottomPosition = m.top.findNode("showFromBottomPosition")
  m.showFromBottomOpacity = m.top.findNode("showFromBottomOpacity")

  m.showFromTopAnimation = m.top.findNode("showFromTopAnimation")
  m.showFromTopPosition = m.top.findNode("showFromTopPosition")
  m.showFromTopOpacity = m.top.findNode("showFromTopOpacity")

  m.scrollOffTopAnimation = m.top.findNode("scrollOffTopAnimation")
  m.scrollOffTopPosition = m.top.findNode("scrollOffTopPosition")
  m.scrollOffTopOpacity = m.top.findNode("scrollOffTopOpacity")

  m.scrollOffBottomAnimation = m.top.findNode("scrollOffBottomAnimation")
  m.scrollOffBottomPosition = m.top.findNode("scrollOffBottomPosition")
  m.scrollOffBottomOpacity = m.top.findNode("scrollOffBottomOpacity")

  m.scrollUpToOnDeckAnimation = m.top.findNode("scrollUpToOnDeckAnimation")
  m.scrollUpToOnDeckPosition = m.top.findNode("scrollUpToOnDeckPosition")

  m.scrollDownToOnDeckAnimation = m.top.findNode("scrollDownToOnDeckAnimation")
  m.scrollDownToOnDeckPosition = m.top.findNode("scrollDownToOnDeckPosition")

  m.scrollOffOnDeckAnimation = m.top.findNode("scrollOffOnDeckAnimation")
  m.scrollOffOnDeckPosition = m.top.findNode("scrollOffOnDeckPosition")

  m.top.observeField("translation", "onTranslationChange")
  m.top.observeField("id", "onIDChange")
  m.top.observeField("focusedChild", "onFocusChange")
end sub

sub onIDChange()
  m.showFromBottomPosition.fieldToInterp = m.top.id + ".translation"
  m.showFromBottomOpacity.fieldToInterp = m.top.id + ".opacity"

  m.showFromTopPosition.fieldToInterp = m.top.id + ".translation"
  m.showFromTopOpacity.fieldToInterp = m.top.id + ".opacity"

  m.scrollOffTopPosition.fieldToInterp = m.top.id + ".translation"
  m.scrollOffTopOpacity.fieldToInterp = m.top.id + ".opacity"

  m.scrollOffBottomPosition.fieldToInterp = m.top.id + ".translation"
  m.scrollOffBottomOpacity.fieldToInterp = m.top.id + ".opacity"

  m.scrollUpToOnDeckPosition.fieldToInterp = m.top.id + ".translation"

  m.scrollDownToOnDeckPosition.fieldToInterp = m.top.id + ".translation"

  m.scrollOffOnDeckPosition.fieldToInterp = m.top.id + ".translation"
end sub

sub onTranslationChange()
  m.startingPosition = m.top.translation
  m.scrollOffBottomPosition.keyValue = "[[0, 0], [" + str(m.startingPosition[0]) + ", " + str(m.startingPosition[1]) + "]]"
  m.top.unobserveField("translation")
end sub

sub showFromTop()
  m.showFromTopAnimation.control = "start"
end sub

sub showFromBottom()
  m.showFromBottomAnimation.control = "start"
end sub

sub scrollOffBottom()
  m.scrollOffBottomAnimation.control = "start"
end sub

sub scrollOffTop()
  m.scrollOffTopAnimation.control = "start"
end sub

sub scrollUpToOnDeck()
  m.scrollUpToOnDeckAnimation.control = "start"
end sub

sub scrollDownToOnDeck()
  m.scrollDownToOnDeckAnimation.control = "start"
end sub

sub scrollOffOnDeck()
  m.scrollOffOnDeckAnimation.control = "start"
end sub

sub onFocusChange()
  defaultFocusElement = m.top.findNode(m.top.defaultFocusID)

  if isValid(defaultFocusElement)
    defaultFocusElement.setFocus(m.top.isInFocusChain())
    if isValid(defaultFocusElement.focus)
      defaultFocusElement.focus = m.top.isInFocusChain()
    end if
  end if
end sub