Author: mherger
Date: Fri Apr 30 06:28:47 2010
New Revision: 8755
URL: http://svn.slimdevices.com/jive?rev=8755&view=rev
Log:
Bug: 15827
Bug: 15734
Description: add "Browse folder for images" item to media menu and ImageViewer.
Allow setting a folder as the source for the ImageViewer screensaver using a
contexte menu on folders and files.
Modified:
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageSourceLocalStorage.lua
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerApplet.lua
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerMeta.lua
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/strings.txt
Modified:
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageSourceLocalStorage.lua
URL:
http://svn.slimdevices.com/jive/7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageSourceLocalStorage.lua?rev=8755&r1=8754&r2=8755&view=diff
==============================================================================
---
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageSourceLocalStorage.lua
(original)
+++
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageSourceLocalStorage.lua
Fri Apr 30 06:28:47 2010
@@ -51,6 +51,16 @@
obj.pathOverride = paramOverride.path
end
+ if paramOverride and paramOverride.startImage then
+ log:debug("start slideshow with image: ",
paramOverride.startImage)
+ obj.startImage = paramOverride.startImage
+ end
+
+ if paramOverride and paramOverride.noRecursion then
+ log:debug("don't search subfolders")
+ obj.noRecursion = true
+ end
+
return obj
end
@@ -89,7 +99,7 @@
local fullpath = nextfolder ..
"/" .. f
- if lfs.attributes(fullpath,
"mode") == "directory" then
+ if (not self.norecursion) and
lfs.attributes(fullpath, "mode") == "directory" then
-- push this directory
on our list to be scanned
table.insert(dirstoscan, fullpath)
@@ -100,8 +110,13 @@
or
string.find(string.lower(fullpath), "%ppng")
or
string.find(string.lower(fullpath), "%pbmp")
or
string.find(string.lower(fullpath), "%pgif") then
+
--
log:info(fullpath)
table.insert(self.imgFiles, fullpath)
+
+ if
self.startImage and self.startImage == f then
+
self.currentImage = #self.imgFiles - 1
+ end
end
end
Modified:
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerApplet.lua
URL:
http://svn.slimdevices.com/jive/7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerApplet.lua?rev=8755&r1=8754&r2=8755&view=diff
==============================================================================
---
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerApplet.lua
(original)
+++
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerApplet.lua
Fri Apr 30 06:28:47 2010
@@ -31,6 +31,7 @@
local Framework = require("jive.ui.Framework")
local Font = require("jive.ui.Font")
local Icon = require("jive.ui.Icon")
+local Textarea = require("jive.ui.Textarea")
local Label = require("jive.ui.Label")
local Group = require("jive.ui.Group")
local RadioButton = require("jive.ui.RadioButton")
@@ -120,33 +121,151 @@
end
function openImageViewer(self)
- -- two item menu that shows start slideshow and settings
local window = Window("text_list", self:string('IMAGE_VIEWER'))
- window:addWidget(
- SimpleMenu("menu",
+
+ local menu = SimpleMenu("menu", {
{
- {
- text =
self:string("IMAGE_VIEWER_START_SLIDESHOW"),
- sound = "WINDOWSHOW",
- callback = function(event, menuItem)
- self:startSlideshow(false)
- return EVENT_CONSUME
- end
- },
- {
- text = self:string("IMAGE_VIEWER_SETTINGS"),
- sound = "WINDOWSHOW",
- callback = function()
- self:openSettings()
- return EVENT_CONSUME
- end
- },
- }
- )
- )
+ text = self:string("IMAGE_VIEWER_START_SLIDESHOW"),
+ sound = "WINDOWSHOW",
+ callback = function(event, menuItem)
+ self:startSlideshow(false)
+ return EVENT_CONSUME
+ end
+ },
+ {
+ text = self:string("IMAGE_VIEWER_SETTINGS"),
+ sound = "WINDOWSHOW",
+ callback = function()
+ self:openSettings()
+ return EVENT_CONSUME
+ end
+ },
+ })
+
+ if System:hasLocalStorage() then
+ menu:insertItem({
+ text = self:string("IMAGE_VIEWER_BROWSE_MEDIA"),
+ sound = "WINDOWSHOW",
+ callback = function(event, menuItem)
+ self:browseFolder("/media")
+ return EVENT_CONSUME
+ end
+ }, 1)
+ end
+
+ window:addWidget(menu)
self:tieAndShowWindow(window)
return window
end
+
+function browseFolder(self, folder, title)
+ local window = Window("text_list", title or folder)
+
+ log:info("Browse folder for images: " .. folder)
+
+ -- verify validity of the directory
+ if lfs.attributes(folder, "mode") ~= 'directory' then
+ local text = Textarea("text",
tostring(self:string("IMAGE_VIEWER_INVALID_FOLDER")) .. "\n" .. folder)
+
+ window:addWidget(text)
+ self:tieAndShowWindow(window)
+ return window
+ end
+
+ local menu = SimpleMenu("menu")
+
+ for f in lfs.dir(folder) do
+ -- exclude any dot file (hidden files/directories)
+ if (string.sub(f, 1, 1) ~= ".") then
+
+ local fullpath = folder .. "/" .. f
+
+ if lfs.attributes(fullpath, "mode") == "directory" then
+ menu:addItem({
+ text = f,
+ sound = "WINDOWSHOW",
+-- icon = "icon_folder",
+ callback = function()
+ self:browseFolder(fullpath, f)
+ end
+ })
+
+ elseif lfs.attributes(fullpath, "mode") == "file" then
+ -- check for supported file type
+ if string.find(string.lower(fullpath),
"%pjpe*g")
+ or
string.find(string.lower(fullpath), "%ppng")
+ or
string.find(string.lower(fullpath), "%pbmp")
+ or
string.find(string.lower(fullpath), "%pgif") then
+ -- log:info(fullpath)
+ menu:addItem({
+ text = f,
+ sound = "WINDOWSHOW",
+ style = "item_no_arrow",
+ callback = function()
+
self:startSlideshow(false, ImageSourceLocalStorage(self, {
+ path = folder,
+ startImage = f,
+ noRecursion =
true
+ }))
+ end
+ })
+ end
+ end
+
+ end
+ end
+
+ if menu:numItems() > 0 then
+ -- allow setting the path for the screensaver mode from a
folder context menu
+ window:addActionListener("add", menu, function (menu)
+ local item = menu:getSelectedItem()
+ local path = folder
+
+ if item:getWidgetValue('text') then
+ path = path .. '/' ..
item:getWidgetValue('text')
+
+ -- if current item is a file, use its folder
+ if lfs.attributes(path, "mode") == "file" then
+ path = folder
+ end
+ end
+
+ if item and path and lfs.attributes(path, "mode") ==
"directory" then
+ local window =
ContextMenuWindow(self:string("IMAGE_VIEWER"))
+
+ local menu = SimpleMenu("menu", {
+ {
+ text =
tostring(self:string("IMAGE_VIEWER_CURRENT_FOLDER")) .. "\n" .. path,
+ style = "item_info"
+ },
+ {
+ text =
self:string("IMAGE_VIEWER_USE_FOLDER"),
+ sound = "CLICK",
+ callback = function()
+
self:getSettings()["card.path"] = path
+
self:getSettings()["source"] = "storage"
+ self:storeSettings()
+ window:hide()
+ return EVENT_CONSUME
+ end
+ },
+ })
+
+ window:addWidget(menu)
+ window:show()
+ end
+
+ return EVENT_CONSUME
+ end)
+ window:addWidget(menu)
+ else
+ window:addWidget(Textarea("text",
self:string("IMAGE_VIEWER_EMPTY_LIST")))
+ end
+
+ self:tieAndShowWindow(window)
+ return window
+end
+
function startScreensaver(self)
log:info("start standard image viewer screensaver")
@@ -475,12 +594,16 @@
end
end
--- callback called from media manager
+-- callbacks called from media manager
function mmImageViewerMenu(self, devName)
log:info('mmImageViewerMenu: ', devName)
self:startSlideshow(false, ImageSourceLocalStorage(self, { path =
'/media/' .. devName }))
end
+function mmImageViewerBrowse(self, devName)
+ log:info('mmImageViewerBrowse: ', devName)
+ self:browseFolder('/media/' .. devName)
+end
function free(self)
log:info("destructor of image viewer")
Modified:
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerMeta.lua
URL:
http://svn.slimdevices.com/jive/7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerMeta.lua?rev=8755&r1=8754&r2=8755&view=diff
==============================================================================
---
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerMeta.lua
(original)
+++
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/ImageViewerMeta.lua
Fri Apr 30 06:28:47 2010
@@ -41,6 +41,7 @@
meta:registerService("unregisterRemoteScreensaver")
meta:registerService("openRemoteScreensaver")
meta:registerService("mmImageViewerMenu")
+ meta:registerService("mmImageViewerBrowse")
end
@@ -58,6 +59,11 @@
appletManager:callService("mmRegisterMenuItem", {
serviceMethod = "mmImageViewerMenu",
menuText = self:string('IMAGE_VIEWER_START_SLIDESHOW')
+ })
+
+ appletManager:callService("mmRegisterMenuItem", {
+ serviceMethod = "mmImageViewerBrowse",
+ menuText = self:string('IMAGE_VIEWER_BROWSE_IMAGES')
})
end
Modified:
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/strings.txt
URL:
http://svn.slimdevices.com/jive/7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/strings.txt?rev=8755&r1=8754&r2=8755&view=diff
==============================================================================
--- 7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/strings.txt
(original)
+++ 7.5/trunk/squeezeplay/src/squeezeplay/share/applets/ImageViewer/strings.txt
Fri Apr 30 06:28:47 2010
@@ -636,6 +636,12 @@
#
# Strings for Card Source
#
+IMAGE_VIEWER_CURRENT_FOLDER
+ EN Current folder:
+
+IMAGE_VIEWER_USE_FOLDER
+ EN Use folder as ImageViewer source
+
IMAGE_VIEWER_CARD_PATH_HELP
CS Definuje cestu pro hledánà obrázků.
DA Definerer søgestien til billeder.
@@ -1063,3 +1069,11 @@
RU СоÑ
ÑаненнÑй Ñлайд
SV Sparad bild
+IMAGE_VIEWER_BROWSE_MEDIA
+ EN Browse Media
+
+IMAGE_VIEWER_BROWSE_IMAGES
+ EN Browse for Images
+
+IMAGE_VIEWER_INVALID_FOLDER
+ EN Can not open folder:
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/mailman/listinfo/jive-checkins