components_ItemGrid_GridItem.bs
import "pkg:/source/constants/imageSize.bs"
import "pkg:/source/roku_modules/log/LogMixin.brs"
import "pkg:/source/utils/itemImageUrl.bs"
import "pkg:/source/utils/misc.bs"
sub init()
m.log = log.Logger("GridItem")
m.itemPoster = m.top.findNode("itemPoster")
m.itemIcon = m.top.findNode("itemIcon")
m.posterText = m.top.findNode("posterText")
m.itemText = m.top.findNode("itemText")
m.backdrop = m.top.findNode("backdrop")
m.itemPoster.observeField("loadStatus", "onPosterLoadStatusChanged")
' Add some padding space when Item Titles are always showing
if m.itemText.visible then m.itemText.maxWidth = 224
' grab data from ItemGrid node
m.itemGrid = m.top.GetParent().GetParent() 'Parent is JRMarkupGrid and it's parent is the ItemGrid
if isValid(m.itemGrid)
if isValid(m.itemGrid.imageDisplayMode)
m.itemPoster.loadDisplayMode = m.itemGrid.imageDisplayMode
end if
if isValid(m.itemGrid.gridTitles)
m.gridTitles = m.itemGrid.gridTitles
end if
end if
posterY = m.itemPoster.translation[1]
m.itemText.translation = [0, posterY + m.itemPoster.height + 18]
m.itemText.visible = m.gridTitles = "showalways"
end sub
sub itemContentChanged()
itemData = m.top.itemContent
if not isValid(itemData) then return
if itemData.isWatched
m.itemPoster.isWatched = true
end if
if itemData.unplayedItemCount > 0
m.itemPoster.unplayedCount = itemData.unplayedItemCount
end if
itemType = LCase(itemData.type)
if itemType = "movie" or itemType = "musicvideo"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "series"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "boxset"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "tvchannel"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "folder" or itemType = "collectionfolder" or itemType = "channelfolderitem" or itemType = "photoalbum"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
m.itemPoster.loadDisplayMode = m.itemGrid.imageDisplayMode
else if itemType = "genre" or itemType = "studio"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "musicgenre"
' Music genres use square 1:1 sizing
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
setSquarePosterLayout()
m.itemPoster.loadDisplayMode = "scaleToFit"
else if itemType = "video" or itemType = "recording"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "playlist"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "photo"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else if itemType = "episode"
m.itemPoster.uri = getItemPosterUrl(itemData)
if isValidAndNotEmpty(itemData.seriesName)
m.itemText.text = itemData.seriesName + " - " + itemData.title
else
m.itemText.text = itemData.title
end if
else if itemType = "musicartist"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
setSquarePosterLayout()
m.itemPoster.loadDisplayMode = "limitSize"
else if itemType = "musicalbum"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
setSquarePosterLayout()
m.itemPoster.loadDisplayMode = "limitSize"
else if itemType = "audio"
m.itemPoster.uri = getItemPosterUrl(itemData)
m.itemText.text = itemData.title
else
m.log.warn("Unhandled Grid Item Type", itemData.type)
end if
'If Poster not loaded, ensure "blue box" is shown until loaded
if m.itemPoster.loadStatus <> "ready"
m.backdrop.visible = true
m.posterText.visible = true
end if
m.posterText.text = m.itemText.text
end sub
' Apply square 323x323 layout for music items (artists, albums, genres)
sub setSquarePosterLayout()
m.itemPoster.height = 323
m.itemPoster.width = 323
m.itemPoster.loadWidth = 323
m.itemPoster.loadHeight = 323
m.itemText.translation = [0, m.itemPoster.translation[1] + m.itemPoster.height + 18]
m.itemText.maxWidth = 323
m.backdrop.height = 323
m.backdrop.width = 323
m.posterText.height = 313
m.posterText.width = 313
end sub
' Enable title scrolling based on item focus
sub focusChanged()
if m.top.itemHasFocus = true
m.itemText.repeatCount = -1
else
m.itemText.repeatCount = 0
end if
if m.gridTitles = "showonhover"
m.itemText.visible = m.top.itemHasFocus
end if
end sub
'Hide backdrop and text when poster loaded
sub onPosterLoadStatusChanged()
if m.itemPoster.loadStatus = "ready"
m.backdrop.visible = false
m.posterText.visible = false
end if
end sub