From c994e30cff680c275375f33978967023ccc3858e Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 21 Oct 2014 22:18:07 +0800 Subject: [PATCH] fix #1024 if toc item has expand/collapse state and tap select on the left side the state switch action is triggered, otherwise goto the linked page. --- frontend/apps/reader/modules/readertoc.lua | 11 +++++++++-- frontend/ui/widget/menu.lua | 18 ++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index 13add22da..ab15deeec 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -304,8 +304,15 @@ function ReaderToc:onShowToc() toc_menu, } - function toc_menu:onMenuChoice(item) - self.ui:handleEvent(Event:new("GotoPage", item.page)) + function toc_menu:onMenuSelect(item, pos) + -- if toc item has expand/collapse state and tap select on the left side + -- the state switch action is triggered, otherwise goto the linked page + if item.state and pos.x < 0.5 then + item.state.callback() + else + toc_menu:close_callback() + self.ui:handleEvent(Event:new("GotoPage", item.page)) + end end toc_menu.close_callback = function() diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index 65fc7b0ab..ceefe463a 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -270,24 +270,34 @@ function MenuItem:onShowItemDetail() return true end -function MenuItem:onTapSelect() +function MenuItem:getGesPosition(ges) + local dimen = self[1].dimen + return { + x = (ges.pos.x - dimen.x)/dimen.w, + y = (ges.pos.y - dimen.y)/dimen.h, + } +end + +function MenuItem:onTapSelect(arg, ges) + local pos = self:getGesPosition(ges) self[1].invert = true UIManager:setDirty(self.show_parent, "partial") UIManager:scheduleIn(0.1, function() self[1].invert = false UIManager:setDirty(self.show_parent, "partial") - self.menu:onMenuSelect(self.table) + self.menu:onMenuSelect(self.table, pos) end) return true end -function MenuItem:onHoldSelect() +function MenuItem:onHoldSelect(arg, ges) + local pos = self:getGesPosition(ges) self[1].invert = true UIManager:setDirty(self.show_parent, "partial") UIManager:scheduleIn(0.1, function() self[1].invert = false UIManager:setDirty(self.show_parent, "partial") - self.menu:onMenuHold(self.table) + self.menu:onMenuHold(self.table, pos) end) return true end