diff --git a/components/ItemGrid/ItemGrid.brs b/components/ItemGrid/ItemGrid.brs index 2ddaaca2..38e9aea0 100644 --- a/components/ItemGrid/ItemGrid.brs +++ b/components/ItemGrid/ItemGrid.brs @@ -320,13 +320,14 @@ end sub ' Set Photo Album view, sort, and filter options sub setPhotoAlbumOptions(options) - ' TODO/FIXME: Show shuffle options once implemented - ' options.views = [ - ' { "Title": tr("Don't Shuffle"), "Name": "singlephoto"} - ' { "Title": tr("Shuffle"), "Name": "shufflephoto"} - ' ] - options.views = [] + options.views = [ + { "Title": tr("Slideshow Off"), "Name": "singlephoto" } + { "Title": tr("Slideshow On"), "Name": "slideshowphoto" } + { "Title": tr("Random Off"), "Name": "singlephoto" } + { "Title": tr("Random On"), "Name": "randomphoto" } + ] options.sort = [] + options.filter = [] end sub ' Set Default view, sort, and filter options @@ -574,14 +575,17 @@ sub optionsClosed() end if end if - if m.top.parentItem.Type = "CollectionFolder" or m.top.parentItem.CollectionType = "CollectionFolder" - ' Did the user just request "Shuffle" on a PhotoAlbum? + if m.top.parentItem.Type = "CollectionFolder" or m.top.parentItem.Type = "Folder" or m.top.parentItem.CollectionType = "CollectionFolder" + ' Did the user just request "Random" on a PhotoAlbum? if m.options.view = "singlephoto" - ' TODO/FIXME: Stop shuffling here - print "TODO/FIXME: Stop any shuffling here" - else if m.options.view = "shufflephoto" - ' TODO/FIXME: Start shuffling here - print "TODO/FIXME: Start shuffle here" + set_user_setting("photos.slideshow", "false") + set_user_setting("photos.random", "false") + else if m.options.view = "slideshowphoto" + set_user_setting("photos.slideshow", "true") + set_user_setting("photos.random", "false") + else if m.options.view = "randomphoto" + set_user_setting("photos.random", "true") + set_user_setting("photos.slideshow", "false") end if end if @@ -724,9 +728,10 @@ function onKeyEvent(key as string, press as boolean) as boolean return true else if itemToPlay <> invalid and itemToPlay.type = "Photo" ' Spawn photo player task - photoPlayer = CreateObject("roSgNode", "PhotoPlayerTask") - photoPlayer.itemContent = itemToPlay - photoPlayer.control = "RUN" + photoPlayer = CreateObject("roSgNode", "PhotoDetails") + photoPlayer.items = markupGrid + photoPlayer.itemIndex = markupGrid.itemFocused + m.global.sceneManager.callfunc("pushScene", photoPlayer) return true end if else if key = "left" and topGrp.isinFocusChain() diff --git a/components/photos/PhotoDetails.brs b/components/photos/PhotoDetails.brs index 0903a779..4494022e 100644 --- a/components/photos/PhotoDetails.brs +++ b/components/photos/PhotoDetails.brs @@ -1,21 +1,123 @@ sub init() - m.top.optionsAvailable = false ' Change once Shuffle option is added + m.top.optionsAvailable = true m.top.overhangVisible = false + m.slideshowTimer = m.top.findNode("slideshowTimer") + m.slideshowTimer.observeField("fire", "nextSlide") + m.status = m.top.findNode("status") + m.textBackground = m.top.findNode("background") + m.statusTimer = m.top.findNode("statusTimer") + m.statusTimer.observeField("fire", "statusUpdate") + m.slideshow = get_user_setting("photos.slideshow") + m.random = get_user_setting("photos.random") + + m.showStatusAnimation = m.top.findNode("showStatusAnimation") + m.hideStatusAnimation = m.top.findNode("hideStatusAnimation") + + itemContentChanged() end sub sub itemContentChanged() - m.LoadLibrariesTask = createObject("roSGNode", "LoadPhotoTask") - m.LoadLibrariesTask.itemContent = m.top.itemContent - m.LoadLibrariesTask.observeField("results", "onPhotoLoaded") - m.LoadLibrariesTask.control = "RUN" + if isValidToContinue(m.top.itemIndex) + m.LoadLibrariesTask = createObject("roSGNode", "LoadPhotoTask") + itemContent = m.top.items.content.getChild(m.top.itemIndex) + m.LoadLibrariesTask.itemContent = itemContent + m.LoadLibrariesTask.observeField("results", "onPhotoLoaded") + m.LoadLibrariesTask.control = "RUN" + end if end sub sub onPhotoLoaded() if m.LoadLibrariesTask.results <> invalid photo = m.top.findNode("photo") photo.uri = m.LoadLibrariesTask.results + + if m.slideshow = "true" or m.random = "true" + ' user has requested either a slideshow or random... + m.slideshowTimer.control = "start" + end if else 'Show user error here (for example if it's not a supported image type) message_dialog("This image type is not supported.") end if end sub + +sub nextSlide() + m.slideshowTimer.control = "stop" + + if m.slideshow = "true" + if isValidToContinue(m.top.itemIndex + 1) + m.top.itemIndex++ + m.slideshowTimer.control = "start" + end if + else if m.random = "true" + index = rnd(m.top.items.content.getChildCount() - 1) + if isValidToContinue(index) + m.top.itemIndex = index + m.slideshowTimer.control = "start" + end if + end if +end sub + +sub statusUpdate() + m.statusTimer.control = "stop" + m.hideStatusAnimation.control = "start" +end sub + +function onKeyEvent(key as string, press as boolean) as boolean + if not press then return false + + if key = "right" + if isValidToContinue(m.top.itemIndex + 1) + m.slideshowTimer.control = "stop" + m.top.itemIndex++ + end if + return true + end if + + if key = "left" + if isValidToContinue(m.top.itemIndex - 1) + m.slideshowTimer.control = "stop" + m.top.itemIndex-- + end if + return true + end if + + if key = "play" + if m.slideshowTimer.control = "start" + ' stop the slideshow if the user hits "pause" + m.slideshowTimer.control = "stop" + m.status.text = tr("Slideshow Paused") + if m.textBackground.opacity = 0 + m.showStatusAnimation.control = "start" + end if + m.statusTimer.control = "start" + else + ' start the slideshow if the user hits "play" + m.status.text = tr("Slideshow Resumed") + if m.textBackground.opacity = 0 + m.showStatusAnimation.control = "start" + end if + m.slideshow = "true" + m.statusTimer.control = "start" + m.slideshowTimer.control = "start" + end if + return true + end if + + if key = "options" + ' Options (random etc) is done on itemGrid + return true + end if + + return false +end function + +function isValidToContinue(index as integer) + if isValid(m.top.items) and isValid(m.top.items.content) + if index >= 0 and index < m.top.items.content.getChildCount() + return true + end if + end if + + return false +end function diff --git a/components/photos/PhotoDetails.xml b/components/photos/PhotoDetails.xml index ea7d7f7e..12867c1d 100644 --- a/components/photos/PhotoDetails.xml +++ b/components/photos/PhotoDetails.xml @@ -1,13 +1,28 @@ - - - + + + + + + + + + + + + + + + - + +