Author: bklaas
Date: Thu May  1 14:55:41 2008
New Revision: 2416

URL: http://svn.slimdevices.com?rev=2416&root=Jive&view=rev
Log:
Bug: 5366
Description: initial pass at CustomizeHomeMenuApplet. 

Note: this isn't fully functional yet, particularly with regard to reading 
existing settings at boot-time and maintaining that data between changing 
players. Also, there need to be some special case assessments for particular 
items, e.g., should you be able to hide the customize home menu item, 
effectively eliminating your ability to change anything without a factory reset.

It does the basics correctly, however: allows a user to move an item from it's 
default node to the home node, or to hide it from view.

I have not added the applet to the makefile yet, so the applet will not be 
exposed to the UI yet.

Added:
    7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/
    
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
    
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuMeta.lua
    
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/strings.txt
   (with props)
Modified:
    
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupWallpaper/SetupWallpaperApplet.lua
    7.1/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua
    7.1/trunk/squeezeplay/src/squeezeplay/share/jive/ui/HomeMenu.lua

Added: 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua?rev=2416&root=Jive&view=auto
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
 (added)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
 Thu May  1 14:55:41 2008
@@ -1,0 +1,115 @@
+
+--[[
+=head1 NAME
+
+applets.CustomizeHomeMenu.CustomizeHomeMenuApplet - Customize Home Menu Applet
+
+=head1 DESCRIPTION
+
+This applet is to allow for a user to customize what items are 
displayed/hidden from the home menu
+
+=head1 FUNCTIONS
+
+Applet related methods are described in L<jive.Applet>. 
+
+=cut
+--]]
+
+
+-- stuff we use
+local tostring, pairs, table = tostring, pairs, table
+local oo                     = require("loop.simple")
+local string                 = require("string")
+local table                  = require("jive.utils.table")
+
+local Applet                 = require("jive.Applet")
+local Checkbox               = require("jive.ui.Checkbox")
+local Choice                 = require("jive.ui.Choice")
+local RadioButton            = require("jive.ui.RadioButton")
+local RadioGroup             = require("jive.ui.RadioGroup")
+local Window                 = require("jive.ui.Window")
+local Popup                  = require("jive.ui.Popup")
+local Textarea               = require('jive.ui.Textarea')
+
+local SimpleMenu             = require("jive.ui.SimpleMenu")
+local RadioGroup             = require("jive.ui.RadioGroup")
+local log                    = 
require("jive.utils.log").addCategory("customizeHome", jive.utils.log.DEBUG)
+
+local debug                  = require("jive.utils.debug")
+local jiveMain               = jiveMain
+local appletManager          = appletManager
+local jnt                    = jnt
+
+module(...)
+oo.class(_M, Applet)
+
+
+function menu(self, menuItem)
+
+       log:info("menu")
+       local group = RadioGroup()
+       local currentSettings = self:getSettings()
+
+       -- get the menu table from jiveMain
+       local menuTable = jiveMain:getMenuTable()
+       -- get items that have been customized
+       --local customTable = jiveMain:getCustomTable()
+
+       -- get the nodes. these become the choices + hidden
+       local nodeTable = jiveMain:getNodeTable()
+
+       local homeMenuItems = {}
+       for id, item in pairs(menuTable) do
+               if id ~= 'nowhere' and id ~= 'hidden' then
+                       
+               local selected
+               local choices = { self:string('HIDDEN'), self:string('HOME') }
+
+               -- add the default node if it's not home
+               if item.defaultNode ~= 'home' then
+                       log:warn(id)
+                       log:warn(item.node)
+                       table.insert(choices, 
nodeTable[item.defaultNode]['item']['text'])
+               end
+
+               if currentSettings[id] and currentSettings[id] == 'hidden' then
+                       selected = 1
+               elseif currentSettings[id] and currentSettings[id] == 'home' 
then
+                       selected = 2
+               else
+                       selected = #choices
+               end
+
+               local menuItem = {
+                       text = item.text,
+                       icon = Choice(
+                               "choice",
+                               choices,
+                               function(object, selectedIndex)
+                                       local node
+                                       if selectedIndex == 1 then
+                                               node = 'hidden'
+                                       elseif selectedIndex == 2 then
+                                               node = 'home'
+                                       elseif selectedIndex == 3 then
+                                               node = 
menuTable[id]['defaultNode']
+                                       end
+                                       jiveMain:setNode(item, node)
+                                       self:getSettings()[item.id] = item.node
+                                       self:storeSettings()
+                               end,
+                               selected
+                       ),
+               }
+               table.insert(homeMenuItems, menuItem)
+               end
+       end
+
+       local menu = SimpleMenu("menu",  homeMenuItems  )
+       menu:setComparator(menu.itemComparatorAlpha)
+
+       local window = Window("window", self:string("CUSTOMIZE_HOME"))
+       window:addWidget(menu)
+       window:show()
+end
+

Added: 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuMeta.lua
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuMeta.lua?rev=2416&root=Jive&view=auto
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuMeta.lua
 (added)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuMeta.lua
 Thu May  1 14:55:41 2008
@@ -1,0 +1,26 @@
+local oo            = require("loop.simple")
+local AppletMeta    = require("jive.AppletMeta")
+
+local appletManager = appletManager
+local jiveMain      = jiveMain
+
+
+module(...)
+oo.class(_M, AppletMeta)
+
+
+function jiveVersion(meta)
+       return 1, 1
+end
+
+
+function defaultSettings(meta)
+        return {
+        }
+end
+
+function registerApplet(meta)
+       
+       jiveMain:addItem(meta:menuItem('customizeHomeApplet', 'home', 
"CUSTOMIZE_HOME", function(applet, ...) applet:menu(...) end, 1))
+
+end

Added: 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/strings.txt
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/strings.txt?rev=2416&root=Jive&view=auto
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/strings.txt
 (added)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/strings.txt
 Thu May  1 14:55:41 2008
@@ -1,0 +1,9 @@
+#
+# The two letter codes are defined by ISO 639-1
+# http://en.wikipedia.org/wiki/List_of_ISO_639_codes
+
+CUSTOMIZE_HOME
+       EN      Customize Home Menu
+
+HIDDEN
+       EN      Hidden

Propchange: 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/strings.txt
------------------------------------------------------------------------------
    svn:executable = *

Modified: 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupWallpaper/SetupWallpaperApplet.lua
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupWallpaper/SetupWallpaperApplet.lua?rev=2416&root=Jive&r1=2415&r2=2416&view=diff
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupWallpaper/SetupWallpaperApplet.lua
 (original)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupWallpaper/SetupWallpaperApplet.lua
 Thu May  1 14:55:41 2008
@@ -87,7 +87,7 @@
        }
 }
 
-local authors = { "Chapple", "Scott Robinson", "Los Cardinalos", "Orin 
Optiglot", "Ryan McD", "Fred Fredrickson" }
+local authors = { "Chapple", "Scott Robinson", "Los Cardinalos", "Orin 
Optiglot", "Ryan McD", "Robbie Fisher" }
 
 local PREFIX = "applets/SetupWallpaper/wallpaper/"
 

Modified: 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua?rev=2416&root=Jive&r1=2415&r2=2416&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua (original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/JiveMain.lua Thu May  1 
14:55:41 2008
@@ -227,6 +227,7 @@
                _globalStrings = locale:readGlobalStringsFile()
        end
 
+       jiveMain:addNode( { id = 'hidden', node = 'nowhere' } )
        jiveMain:addNode( { id = 'extras', node = 'home', text = 
_globalStrings:str("EXTRAS"), weight = 70  } )
        jiveMain:addNode( { id = 'games', node = 'extras', text = 
_globalStrings:str("GAMES"), weight = 70  } )
        jiveMain:addNode( { id = 'settings', node = 'home', text = 
_globalStrings:str("SETTINGS"), weight = 50, titleStyle = 'settings' })

Modified: 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/ui/HomeMenu.lua
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/jive/ui/HomeMenu.lua?rev=2416&root=Jive&r1=2415&r2=2416&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/ui/HomeMenu.lua (original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/ui/HomeMenu.lua Thu May  1 
14:55:41 2008
@@ -40,6 +40,21 @@
        return obj
 end
 
+function getMenuTable(self)
+       if self.menuTable then
+               return self.menuTable
+       else
+               return {}
+       end
+end
+
+function getNodeTable(self)
+       if self.nodeTable then
+               return self.nodeTable
+       else
+               return {}
+       end
+end
 
 function setTitle(self, title)
        if title then
@@ -49,6 +64,13 @@
        end
 end
 
+function setNode(self, item, node)
+       assert(item)
+       assert(node)
+       self:removeItem(item)
+       item.node = node
+       self:addItem(item)
+end
 
 --[[
 
@@ -87,18 +109,22 @@
        end
 end
 
-
 function addNode(self, item)
        assert(item.id)
        assert(item.node)
 
        log:debug("JiveMain.addNode: Adding a non-root node, ", item.id)
 
+       item.isANode = 1
+
        if not item.weight then 
                item.weight = 100
        end
-
-       -- remove node from previous node (if changed)
+       if not item.defaultNode then
+               item.defaultNode = item.node
+       end
+
+       -- remove/update node from previous node (if changed)
        if self.menuTable[item.id] then
                self.menuTable[item.id].text = item.text
                local newNode    = item.node
@@ -110,8 +136,6 @@
                return
        end
 
-       -- new/update node
-
        local window
        if item.window and item.window.titleStyle then
                window = Window("window", item.text, item.window.titleStyle .. 
"title")
@@ -153,9 +177,13 @@
        if not item.weight then 
                item.weight = 100
        end
+       if not item.defaultNode then
+               item.defaultNode = item.node
+       end
 
        -- add or update the item from the menuTable
        self.menuTable[item.id] = item
+       log:warn(self.menuTable[item.id]['node'])
 
        if self.nodeTable[item.node] then
                self.nodeTable[item.node].items[item.id] = item
@@ -190,7 +218,7 @@
 function _checkRemoveNode(self, node)
        local nodeEntry = self.nodeTable[node]
 
-       if nodeEntry.item then
+       if nodeEntry and nodeEntry.item then
                local hasItem = self.menuTable[nodeEntry.item.id] ~= nil
 
                if hasItem then
@@ -210,11 +238,9 @@
        assert(item)
        assert(item.node)
        if self.nodeTable[item.node] then
-               self.nodeTable[item.node].menu:removeItem(item)
-
                self.menuTable[item.id] = nil
                self.nodeTable[item.node].items[item.id] = nil
-
+               self.nodeTable[item.node].menu:removeItem(item)
                self:_checkRemoveNode(item.node)
        end
 end
@@ -223,9 +249,10 @@
 function removeItemById(self, id)
        if self.menuTable[id] then
                local item = self.menuTable[id]
-
-               self.nodeTable[item.node].menu:removeItemById(id)
-               self.nodeTable[item.node].items[id] = nil
+               if self.nodeTable[item.node] then
+                       self.nodeTable[item.node].menu:removeItemById(id)
+                       self.nodeTable[item.node].items[id] = nil
+               end
                self.menuTable[id] = nil
 
                self:_checkRemoveNode(item.node)

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins

Reply via email to