Author: bklaas
Date: Wed Apr 20 15:00:24 2011
New Revision: 9428

URL: http://svn.slimdevices.com/jive?rev=9428&view=rev
Log:
Bug: 15398
Description: Add StickyMenu widget
StickyMenu is a sublcass of SimpleMenu that allows an optional multiplier that 
makes it more difficult to scroll down a menu

Added:
    7.6/trunk/squeezeplay/src/squeezeplay/share/jive/ui/StickyMenu.lua

Added: 7.6/trunk/squeezeplay/src/squeezeplay/share/jive/ui/StickyMenu.lua
URL: 
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/share/jive/ui/StickyMenu.lua?rev=9428&view=auto
==============================================================================
--- 7.6/trunk/squeezeplay/src/squeezeplay/share/jive/ui/StickyMenu.lua (added)
+++ 7.6/trunk/squeezeplay/src/squeezeplay/share/jive/ui/StickyMenu.lua Wed Apr 
20 15:00:24 2011
@@ -1,0 +1,157 @@
+--[[
+=head1 NAME
+
+jive.ui.StickyMenu - A subclass of SimpleMenu that allows for "stickier" menu 
scrolling
+
+=head1 DESCRIPTION
+
+A sticky menu widget, extends L<jive.ui.SimpleMenu>, which extends 
L<jive.ui.Menu>.
+
+=head1 SYNOPSIS
+
+ -- Create a new menu
+ local menu = jive.ui.StickyMenu("menu",
+                  {
+                          {
+                                  id = 'uniqueString',
+                                  text = "Item 1",
+                                  sound = "WINDOWSHOW",
+                                  icon = widget1,
+                                  callback = function1
+                          ),
+                          {
+                                  id = 'anotherUniqueString',
+                                  text = "Item 2",
+                                  sound = "WINDOWSHOW",
+                                  icon = widget2,
+                                  callback = function2
+                          ),
+                  },
+               2
+)
+
+=head1 STYLE
+
+
+=head1 METHODS
+
+=cut
+--]]
+
+
+-- stuff we use
+local _assert, ipairs, string, tostring, type, tonumber = _assert, ipairs, 
string, tostring, type, tonumber
+
+
+local oo              = require("loop.simple")
+local debug           = require("jive.utils.debug")
+
+local Group           = require("jive.ui.Group")
+local Label           = require("jive.ui.Label")
+local Icon            = require("jive.ui.Icon")
+local Textarea        = require("jive.ui.Textarea")
+local math            = require("math")
+local Menu            = require("jive.ui.Menu")
+local SimpleMenu      = require("jive.ui.SimpleMenu")
+local Widget          = require("jive.ui.Widget")
+
+local table           = require("jive.utils.table")
+local log             = require("jive.utils.log").logger("squeezeplay.ui")
+
+local ACTION    = jive.ui.ACTION
+local EVENT_ACTION    = jive.ui.EVENT_ACTION
+local EVENT_FOCUS_GAINED = jive.ui.EVENT_FOCUS_GAINED
+local EVENT_FOCUS_LOST   = jive.ui.EVENT_FOCUS_LOST
+
+local EVENT_CONSUME   = jive.ui.EVENT_CONSUME
+local EVENT_UNUSED    = jive.ui.EVENT_UNUSED
+
+
+-- our class
+module(...)
+oo.class(_M, SimpleMenu)
+
+
+function __init(self, style, multiplier, items, itemRenderer, itemListener)
+       _assert(type(style) == "string")
+
+       local obj = oo.rawnew(self, SimpleMenu(style, itemRenderer or 
_itemRenderer, itemListener or _itemListener))
+       obj.items = items or {}
+       obj.multiplier = multiplier or 1
+       obj.icons = {}
+       obj.checks = {}
+       obj.arrows = {}
+       obj.stickyDown = 1
+       obj.stickyUp = 1
+
+       obj:setItems(obj.items, #obj.items)
+
+       return obj
+end
+
+
+--override scrollBy to create Sticky scrolling
+
+function scrollBy(self, scroll, allowMultiple, isNewOperation, forceAccel)
+
+       log:debug(self, scroll)
+       if self.headerWidget then
+               isNewOperation = false
+       end
+
+
+       -- if scroll is positive, then we are scrolling downward
+       if scroll > 0 then
+               -- first reset the sticky incrementer for upward scrolling, 
since we aren't doing that
+               self.stickyUp = 1
+
+               if self.multiplier == self.stickyDown then
+                       log:debug("StickyMenu: okay scroll down now ")
+                       Menu.scrollBy(self, scroll, allowMultiple, 
isNewOperation, forceAccel)
+                       if self.headerWidget and 
self.headerWidget.handleMenuHeaderWidgetScrollBy then
+                               
self.headerWidget:handleMenuHeaderWidgetScrollBy(scroll, self)
+                       end
+                       self.stickyDown = 1
+               else
+                       self.stickyDown = self.stickyDown + 1
+                       log:debug("StickyMenu: don't scroll down yet ", 
self.stickyDown, '(', self.multiplier, ')')
+               end
+
+       -- if scroll is negative, then we are scrolling upward
+       else
+               -- first reset the sticky incrementer for downward scrolling, 
since we aren't doing that
+               self.stickyDown = 1
+
+               if self.multiplier == self.stickyUp then
+                       log:debug("StickyMenu: okay scroll up now ")
+                       Menu.scrollBy(self, scroll, allowMultiple, 
isNewOperation, forceAccel)
+                       if self.headerWidget and 
self.headerWidget.handleMenuHeaderWidgetScrollBy then
+                               
self.headerWidget:handleMenuHeaderWidgetScrollBy(scroll, self)
+                       end
+                       self.stickyUp = 1
+               else
+                       self.stickyUp = self.stickyUp + 1
+                       log:debug("StickyMenu: don't scroll up yet ", 
self.stickyUp)
+               end
+
+       end
+
+end
+
+function __tostring(self)
+       return "StickyMenu()"
+end
+
+
+--[[
+
+=head1 LICENSE
+
+Copyright 2010 Logitech. All Rights Reserved.
+
+This file is licensed under BSD. Please see the LICENSE file for details.
+
+=cut
+--]]
+
+

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

Reply via email to