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 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
diff --git a/components/photos/PhotoPlayerTask.brs b/components/photos/PhotoPlayerTask.brs
deleted file mode 100644
index 337f6da6..00000000
--- a/components/photos/PhotoPlayerTask.brs
+++ /dev/null
@@ -1,17 +0,0 @@
-sub init()
- m.top.functionName = "loadItems"
-end sub
-
-sub loadItems()
- item = m.top.itemContent
-
- group = CreateObject("roSGNode", "PhotoDetails")
- group.optionsAvailable = false
- m.global.sceneManager.callFunc("pushScene", group)
-
- group.itemContent = item
-
- ' TODO/FIXME:
- ' Wait some time and move to the next photo...
-
-end sub
diff --git a/components/photos/PhotoPlayerTask.xml b/components/photos/PhotoPlayerTask.xml
deleted file mode 100644
index 0f7ef147..00000000
--- a/components/photos/PhotoPlayerTask.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/locale/en_US/translations.ts b/locale/en_US/translations.ts
index ffcbcbda..40fc0904 100644
--- a/locale/en_US/translations.ts
+++ b/locale/en_US/translations.ts
@@ -851,6 +851,30 @@
Popup message when we find no audio data for an artist
+
+ Slideshow Off
+
+
+
+ Slideshow On
+
+
+
+ Slideshow Paused
+
+
+
+ Slideshow Resumed
+
+
+
+ Random Off
+
+
+
+ Random On
+
+
MPEG-4 Support
Settings Menu - Title for option
diff --git a/source/ShowScenes.brs b/source/ShowScenes.brs
index 3a2baed3..d92fbc68 100644
--- a/source/ShowScenes.brs
+++ b/source/ShowScenes.brs
@@ -592,17 +592,6 @@ function CreatePersonView(personData as object) as object
return person
end function
-function CreatePhotoPage(photo)
- group = CreateObject("roSGNode", "PhotoDetails")
- group.optionsAvailable = true
- m.global.sceneManager.callFunc("pushScene", group)
-
- group.itemContent = photo
-
- return group
-
-end function
-
sub UpdateSavedServerList()
server = get_setting("server")
username = get_setting("username")