import "pkg:/source/utils/config.bs"
sub init()
m.top.id = "overhang"
' save node references
m.logo = m.top.findNode("logo")
m.logoPoster = createLogoPoster() ' save node to memory for faster load time
m.title = m.top.findNode("title")
m.user = m.top.findNode("username")
m.userGroup = m.top.findNode("userGroup")
m.clock = m.top.findNode("clock")
' Create animations programmatically to avoid interpolator field reference issues
createSlideAnimations()
end sub
' Create slide animations programmatically
sub createSlideAnimations()
' Create slide up animation
m.slideUpAnimation = createObject("roSGNode", "Animation")
m.slideUpAnimation.id = "slideUp"
m.slideUpAnimation.duration = 0.5
m.slideUpAnimation.repeat = false
slideUpInterpolator = createObject("roSGNode", "Vector2DFieldInterpolator")
slideUpInterpolator.key = [0.0, 0.5]
slideUpInterpolator.keyValue = [[0, 0], [0, -200]]
slideUpInterpolator.fieldToInterp = m.top.id + ".translation"
m.slideUpAnimation.appendChild(slideUpInterpolator)
m.top.appendChild(m.slideUpAnimation)
' Create slide down animation
m.slideDownAnimation = createObject("roSGNode", "Animation")
m.slideDownAnimation.id = "slideDown"
m.slideDownAnimation.duration = 0.5
m.slideDownAnimation.delay = 0.2
m.slideDownAnimation.repeat = false
slideDownInterpolator = createObject("roSGNode", "Vector2DFieldInterpolator")
slideDownInterpolator.key = [0.0, 0.5]
slideDownInterpolator.keyValue = [[0, -200], [0, 0]]
slideDownInterpolator.fieldToInterp = m.top.id + ".translation"
m.slideDownAnimation.appendChild(slideDownInterpolator)
m.top.appendChild(m.slideDownAnimation)
end sub
sub isVisibleChanged()
if m.top.disableMoveAnimation
m.top.translation = [0, 0]
return
end if
if m.top.isVisible
m.slideDownAnimation.control = "start"
return
end if
m.slideUpAnimation.control = "start"
end sub
sub titleChanged()
m.title.text = m.top.title
end sub
sub currentUserChanged()
m.user.text = m.top.currentUser
m.userImage = m.top.findNode("userImage")
if not isValid(m.userPoster)
m.userPoster = createUserPoster() ' save node to memory for faster load time
end if
if m.top.currentUser = ""
' no user logged in, remove image if it exists
if isValid(m.userImage)
m.userGroup.removeChild(m.userImage)
m.userImage = invalid
end if
else if not isValid(m.userImage)
' user logged in but no image, add it
m.userImage = m.userPoster
if m.userImage.tag = ""
m.userGroup.itemSpacings = 9 ' default image is padded
else
m.userGroup.itemSpacings = 15
end if
m.userGroup.insertChild(m.userImage, 0)
end if
end sub
function createUserPoster() as object
userImage = createObject("roSGNode", "Poster")
imgParams = {
maxHeight: 36,
maxWidth: 36,
quality: 90
}
imgTag = m.global.session.user.primaryImageTag
if isValid(imgTag) and imgTag <> ""
imgParams.tag = imgTag
userImage.tag = imgTag
end if
userImage.id = "userImage"
userImage.width = "36"
userImage.height = "36"
if isValid(imgTag)
' reset defaults
userImage.blendColor = "0xFFFFFFFF"
if m.global.session.server.url <> ""
userImage.uri = buildURL(Substitute("/Users/{0}/Images/Primary", m.global.session.user.id), imgParams)
else
print "ERROR: No server URL set, cannot load user image"
end if
else
userImage.blendColor = m.global.constants.colors.text_secondary
userImage.uri = "pkg:/images/icons/person_36px.png"
end if
return userImage
end function
' component boolean field isVisible has changed value
sub isLogoVisibleChanged()
if m.top.isLogoVisible
if not isValid(m.logo)
m.logo = m.logoPoster
m.top.appendChild(m.logoPoster)
m.title.translation = [420, 51]
m.title.maxWidth = 300
end if
else
' remove the logo
if isValid(m.logo)
m.top.removeChild(m.logo)
m.logo = invalid
m.title.translation = [96, 51]
m.title.maxWidth = 1560
end if
end if
end sub
' Create and return a logo poster node
function createLogoPoster()
logoPoster = createObject("roSGNode", "Poster")
logoPoster.id = "logo"
logoPoster.uri = "pkg:/images/branding/logo.png"
logoPoster.translation = "[96, 54]"
logoPoster.width = "180"
logoPoster.height = "39"
return logoPoster
end function
sub resetTime()
if isValid(m.clock)
m.clock.callFunc("resetTime")
end if
end sub