From 55554acf395ef30b1dc6badce7b634d08d3800aa Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 5 Aug 2014 10:22:57 +0800 Subject: [PATCH] refactoring: buildin hold on menu entry to input --- frontend/apps/filemanager/filemanagermenu.lua | 1 + frontend/apps/reader/modules/readermenu.lua | 84 +------------ frontend/ui/uimanager.lua | 49 ++++++++ frontend/ui/widget/touchmenu.lua | 110 +++++++++++++----- 4 files changed, 130 insertions(+), 114 deletions(-) diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index f36dc4dc8..d89c862cc 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -98,6 +98,7 @@ function FileManagerMenu:setUpdateItemTable() }) table.insert(self.tab_item_table.setting, Screen:getDPIMenuTable()) + table.insert(self.tab_item_table.setting, UIManager:getRefreshMenuTable()) table.insert(self.tab_item_table.setting, Language:getLangMenuTable()) -- info tab diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index ba0d3252e..dc1fe844f 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -90,7 +90,7 @@ function ReaderMenu:setUpdateItemTable() end }) table.insert(self.tab_item_table.setting, Screen:getDPIMenuTable()) - table.insert(self.tab_item_table.setting, self:genRefreshRateMenu()) + table.insert(self.tab_item_table.setting, UIManager:getRefreshMenuTable()) table.insert(self.tab_item_table.setting, { text = _("Show advanced options"), checked_func = function() return G_reader_settings:readSetting("show_advanced") end, @@ -121,88 +121,6 @@ function ReaderMenu:setUpdateItemTable() }) end -function ReaderMenu:genRefreshRateMenu() - local custom_1 = function() return G_reader_settings:readSetting("refresh_rate_1") or 12 end - local custom_2 = function() return G_reader_settings:readSetting("refresh_rate_2") or 22 end - local custom_3 = function() return G_reader_settings:readSetting("refresh_rate_3") or 99 end - return { - text = _("E-ink full refresh rate"), - sub_item_table = { - { - text = _("Every page"), - checked_func = function() return UIManager:getRefreshRate() == 1 end, - callback = function() UIManager:setRefreshRate(1) end, - }, - { - text = _("Every 6 pages"), - checked_func = function() return UIManager:getRefreshRate() == 6 end, - callback = function() UIManager:setRefreshRate(6) end, - }, - { - text_func = function() return _("Custom ") .. "1: " .. custom_1() .. _(" pages") end, - checked_func = function() return UIManager:getRefreshRate() == custom_1() end, - callback = function() UIManager:setRefreshRate(custom_1()) end, - hold_callback = function() self:makeCustomRateDialog("refresh_rate_1") end, - }, - { - text_func = function() return _("Custom ") .. "2: " .. custom_2() .. _(" pages") end, - checked_func = function() return UIManager:getRefreshRate() == custom_2() end, - callback = function() UIManager:setRefreshRate(custom_2()) end, - hold_callback = function() self:makeCustomRateDialog("refresh_rate_2") end, - }, - { - text_func = function() return _("Custom ") .. "3: " .. custom_3() .. _(" pages") end, - checked_func = function() return UIManager:getRefreshRate() == custom_3() end, - callback = function() UIManager:setRefreshRate(custom_3()) end, - hold_callback = function() self:makeCustomRateDialog("refresh_rate_3") end, - }, - } - } -end - -function ReaderMenu:makeCustomRate(custom_rate) - local number = tonumber(self.custom_dialog:getInputText()) - G_reader_settings:saveSetting(custom_rate, number) -end - -function ReaderMenu:makeCustomRateDialog(custom_rate) - self.custom_dialog = InputDialog:new{ - title = _("Input page number for a full refresh"), - input_hint = "(1 - 99)", - buttons = { - { - { - text = _("Cancel"), - callback = function() - self:closeMakeCustomDialog() - end, - }, - { - text = _("OK"), - callback = function() - self:makeCustomRate(custom_rate) - self:closeMakeCustomDialog() - end, - }, - }, - }, - input_type = "number", - enter_callback = function() - self:makeCustomRate(custom_rate) - self:closeMakeCustomDialog() - end, - width = Screen:getWidth() * 0.8, - height = Screen:getHeight() * 0.2, - } - self.custom_dialog:onShowKeyboard() - UIManager:show(self.custom_dialog) -end - -function ReaderMenu:closeMakeCustomDialog() - self.custom_dialog:onClose() - UIManager:close(self.custom_dialog) -end - function ReaderMenu:onShowReaderMenu() if #self.tab_item_table.setting == 0 then self:setUpdateItemTable() diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index a128906dc..e63165a8d 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -440,6 +440,55 @@ function UIManager:run() end end +function UIManager:getRefreshMenuTable() + local function custom_1() return G_reader_settings:readSetting("refresh_rate_1") or 12 end + local function custom_2() return G_reader_settings:readSetting("refresh_rate_2") or 22 end + local function custom_3() return G_reader_settings:readSetting("refresh_rate_3") or 99 end + local function custom_input(name) + return { + title = _("Input page number for a full refresh"), + type = "number", + hint = "(1 - 99)", + callback = function(input) + G_reader_settings:saveSetting(name, tonumber(input)) + end, + } + end + return { + text = _("E-ink full refresh rate"), + sub_item_table = { + { + text = _("Every page"), + checked_func = function() return UIManager:getRefreshRate() == 1 end, + callback = function() UIManager:setRefreshRate(1) end, + }, + { + text = _("Every 6 pages"), + checked_func = function() return UIManager:getRefreshRate() == 6 end, + callback = function() UIManager:setRefreshRate(6) end, + }, + { + text_func = function() return _("Custom ") .. "1: " .. custom_1() .. _(" pages") end, + checked_func = function() return UIManager:getRefreshRate() == custom_1() end, + callback = function() UIManager:setRefreshRate(custom_1()) end, + hold_input = custom_input("refresh_rate_1") + }, + { + text_func = function() return _("Custom ") .. "2: " .. custom_2() .. _(" pages") end, + checked_func = function() return UIManager:getRefreshRate() == custom_2() end, + callback = function() UIManager:setRefreshRate(custom_2()) end, + hold_input = custom_input("refresh_rate_2") + }, + { + text_func = function() return _("Custom ") .. "3: " .. custom_3() .. _(" pages") end, + checked_func = function() return UIManager:getRefreshRate() == custom_3() end, + callback = function() UIManager:setRefreshRate(custom_3()) end, + hold_input = custom_input("refresh_rate_3") + }, + } + } +end + UIManager:init() return UIManager diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index 2a563bba5..815c8fca0 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -3,21 +3,21 @@ local FrameContainer = require("ui/widget/container/framecontainer") local LeftContainer = require("ui/widget/container/leftcontainer") local RightContainer = require("ui/widget/container/rightcontainer") local CenterContainer = require("ui/widget/container/centercontainer") -local Font = require("ui/font") -local TextWidget = require("ui/widget/textwidget") -local LineWidget = require("ui/widget/linewidget") -local Screen = require("ui/screen") -local Device = require("ui/device") -local GestureRange = require("ui/gesturerange") local HorizontalGroup = require("ui/widget/horizontalgroup") local VerticalGroup = require("ui/widget/verticalgroup") local HorizontalSpan = require("ui/widget/horizontalspan") local VerticalSpan = require("ui/widget/verticalspan") +local InputDialog = require("ui/widget/inputdialog") +local TextWidget = require("ui/widget/textwidget") +local LineWidget = require("ui/widget/linewidget") local IconButton = require("ui/widget/iconbutton") +local GestureRange = require("ui/gesturerange") local Button = require("ui/widget/button") local UIManager = require("ui/uimanager") +local Device = require("ui/device") local Screen = require("ui/screen") local Geom = require("ui/geometry") +local Font = require("ui/font") local DEBUG = require("dbg") local _ = require("gettext") @@ -487,43 +487,91 @@ function TouchMenu:onSwipe(arg, ges_ev) end function TouchMenu:onMenuSelect(item) - local sub_item_table = item.sub_item_table - if item.sub_item_table_func then - sub_item_table = item.sub_item_table_func() + if item.tap_input then + self:closeMenu() + self:onMenuInput(item.tap_input) + else + local sub_item_table = item.sub_item_table + if item.sub_item_table_func then + sub_item_table = item.sub_item_table_func() + end + if sub_item_table == nil then + local callback = item.callback + if item.callback_func then + callback = item.callback_func() + end + if callback then + -- put stuff in scheduler so we can See + -- the effect of inverted menu item + UIManager:scheduleIn(0.1, function() + self:closeMenu() + callback() + end) + end + else + table.insert(self.item_table_stack, self.item_table) + self.item_table = sub_item_table + self:updateItems() + end end - if sub_item_table == nil then - local callback = item.callback - if item.callback_func then - callback = item.callback_func() + return true +end + +function TouchMenu:onMenuHold(item) + if item.hold_input then + self:closeMenu() + self:onMenuInput(item.hold_input) + else + local callback = item.hold_callback + if item.hold_callback_func then + callback = item.hold_callback_func() end if callback then - -- put stuff in scheduler so we can See - -- the effect of inverted menu item UIManager:scheduleIn(0.1, function() self:closeMenu() callback() end) end - else - table.insert(self.item_table_stack, self.item_table) - self.item_table = sub_item_table - self:updateItems() end 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 +function TouchMenu:onMenuInput(input) + self.input_dialog = InputDialog:new{ + title = input.title or "", + input_hint = input.hint or "", + input_type = input.type or "number", + buttons = { + { + { + text = _("Cancel"), + callback = function() + self:closeInputDialog() + end, + }, + { + text = _("OK"), + callback = function() + input.callback(self.input_dialog:getInputText()) + self:closeInputDialog() + end, + }, + }, + }, + enter_callback = function() + input.callback(self.input_dialog:getInputText()) + self:closeInputDialog() + end, + width = Screen:getWidth() * 0.8, + height = Screen:getHeight() * 0.2, + } + self.input_dialog:onShowKeyboard() + UIManager:show(self.input_dialog) +end + +function TouchMenu:closeInputDialog() + self.input_dialog:onClose() + UIManager:close(self.input_dialog) end function TouchMenu:onTapCloseAllMenus(arg, ges_ev)