From 0d7999e7a5a565f2b7ac5eb25a9f2d433e06cc65 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Thu, 28 Sep 2017 21:26:16 +0200 Subject: [PATCH] [fix] Add hold_callback to IconButton (#3271) Also fix path display update. Fixes #3270. --- frontend/apps/filemanager/filemanager.lua | 4 +-- frontend/ui/widget/iconbutton.lua | 41 ++++++++++++++++++----- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index e4d90eef3..4701d6992 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -116,7 +116,7 @@ function FileManager:init() function file_chooser:onPathChanged(path) -- luacheck: ignore FileManager.instance.path_text:setText(filemanagerutil.abbreviate(path)) UIManager:setDirty(FileManager.instance, function() - return "ui", FileManager.instance.banner.dimen + return "ui", FileManager.instance.path_text.dimen end) return true end @@ -364,7 +364,7 @@ end function FileManager:goHome() local home_dir = G_reader_settings:readSetting("home_dir") if home_dir then - self:showFiles(home_dir) + self.file_chooser:changeToPath(home_dir) else self:setHome() end diff --git a/frontend/ui/widget/iconbutton.lua b/frontend/ui/widget/iconbutton.lua index 8b91e3c5c..d8d3e0d4d 100644 --- a/frontend/ui/widget/iconbutton.lua +++ b/frontend/ui/widget/iconbutton.lua @@ -2,6 +2,7 @@ Button with a big icon image! Designed for touch devices. --]] +local Device = require("device") local HorizontalGroup = require("ui/widget/horizontalgroup") local HorizontalSpan = require("ui/widget/horizontalspan") local InputContainer = require("ui/widget/container/inputcontainer") @@ -24,7 +25,8 @@ local IconButton = InputContainer:new{ padding_right = nil, padding_bottom = nil, padding_left = nil, - callback = function() end, + enabled = true, + callback = nil, } function IconButton:init() @@ -69,17 +71,27 @@ function IconButton:update() end function IconButton:initGesListener() - self.ges_events = { - TapClickButton = { - GestureRange:new{ - ges = "tap", - range = self.dimen, + if Device:isTouchDevice() then + self.ges_events = { + TapIconButton = { + GestureRange:new{ + ges = "tap", + range = self.dimen, + }, + doc = "Tap IconButton", + }, + HoldIconButton = { + GestureRange:new{ + ges = "hold", + range = self.dimen, + }, + doc = "Hold IconButton", } - }, - } + } + end end -function IconButton:onTapClickButton() +function IconButton:onTapIconButton() UIManager:scheduleIn(0.0, function() self.image.invert = true UIManager:setDirty(self.show_parent, function() @@ -97,6 +109,17 @@ function IconButton:onTapClickButton() return true end +function IconButton:onHoldIconButton() + if self.enabled and self.hold_callback then + self.hold_callback() + elseif self.hold_input then + self:onInput(self.hold_input) + elseif type(self.hold_input_func) == "function" then + self:onInput(self.hold_input_func()) + end + return true +end + function IconButton:onSetDimensions(new_dimen) self.dimen = new_dimen end