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

Reply via email to