From b0b2149a923df103504d9784e377cfe8c24a90a4 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 2 Jul 2014 22:51:27 +0800 Subject: [PATCH] touch menu entry now responses hold gestures --- frontend/ui/widget/touchmenu.lua | 41 ++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index 4e1e97b1d..fa109e956 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -41,6 +41,13 @@ function TouchMenuItem:init() }, doc = "Select Menu Item", }, + HoldSelect = { + GestureRange:new{ + ges = "hold", + range = self.dimen, + }, + doc = "Hold Menu Item", + }, } local item_enabled = self.item.enabled @@ -96,6 +103,21 @@ function TouchMenuItem:onTapSelect(arg, ges) self.menu:onMenuSelect(self.item) end +function TouchMenuItem:onHoldSelect(arg, ges) + local enabled = self.item.enabled + if self.item.enabled_func then + enabled = self.item.enabled_func() + end + if enabled == false then return end + + self.item_frame.invert = true + UIManager:setDirty(self.show_parent, "partial") + UIManager:scheduleIn(0.5, function() + self.item_frame.invert = false + UIManager:setDirty(self.show_parent, "partial") + end) + self.menu:onMenuHold(self.item) +end --[[ TouchMenuBar widget @@ -464,11 +486,6 @@ function TouchMenu:onSwipe(arg, ges_ev) end function TouchMenu:onMenuSelect(item) - local enabled = item.enabled - if item.enabled_func then - enabled = item.enabled_func() - end - if enabled == false then return end local sub_item_table = item.sub_item_table if item.sub_item_table_func then sub_item_table = item.sub_item_table_func() @@ -494,6 +511,20 @@ function TouchMenu:onMenuSelect(item) return true end +function TouchMenu:onMenuHold(item) + local callback = item.hold_callback + if item.hold_callback_func then + callback = item.hold_callback_func() + end + if callback then + UIManager:scheduleIn(0.1, function() + self:closeMenu() + callback() + end) + end + return true +end + function TouchMenu:onTapCloseAllMenus(arg, ges_ev) if ges_ev.pos:notIntersectWith(self.dimen) then self:closeMenu()