Screenshoter: options to View and Delete after screenshot (#8050)

Also remove code duplication in ImageViewer.
pull/8054/head
hius07 3 years ago committed by GitHub
parent 1a583af4a2
commit fa4784cf13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,9 +7,9 @@ local Blitbuffer = require("ffi/blitbuffer")
local ButtonTable = require("ui/widget/buttontable")
local CenterContainer = require("ui/widget/container/centercontainer")
local CloseButton = require("ui/widget/closebutton")
local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage")
local Device = require("device")
local Event = require("ui/event")
local Geom = require("ui/geometry")
local GestureRange = require("ui/gesturerange")
local Font = require("ui/font")
@ -26,7 +26,6 @@ local VerticalGroup = require("ui/widget/verticalgroup")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local UIManager = require("ui/uimanager")
local logger = require("logger")
local T = require("ffi/util").template
local _ = require("gettext")
local Screen = Device.screen
@ -620,7 +619,7 @@ end
-- Panning events
function ImageViewer:onSwipe(_, ges)
-- Panning with swipe is less accurate, as we don't get both coordinates,
-- only start point + direction (with only 45° granularity)
-- only start point + direction (with only 45° granularity)
local direction = ges.direction
local distance = ges.distance
local sq_distance = math.sqrt(distance*distance/2)
@ -755,15 +754,8 @@ function ImageViewer:onTapDiagonal()
end
function ImageViewer:onSaveImageView()
-- Similar behaviour as in Screenshoter:onScreenshot()
-- We save the currently displayed blitbuffer (panned or zoomed)
-- after getting fullscreen and removing UI elements if needed.
local screenshots_dir = G_reader_settings:readSetting("screenshot_dir")
if not screenshots_dir then
screenshots_dir = DataStorage:getDataDir() .. "/screenshots/"
end
self.screenshot_fn_fmt = screenshots_dir .. "ImageViewer_%Y-%m-%d_%H%M%S.png"
local screenshot_name = os.date(self.screenshot_fn_fmt)
local restore_settings_func
if self.with_title_bar or self.buttons_visible or not self.fullscreen then
local with_title_bar = self.with_title_bar
@ -781,25 +773,9 @@ function ImageViewer:onSaveImageView()
self:update()
UIManager:forceRePaint()
end
Screen:shot(screenshot_name)
local widget = ConfirmBox:new{
text = T( _("Saved screenshot to %1.\nWould you like to set it as screensaver?"), BD.filepath(screenshot_name)),
ok_text = _("Yes"),
ok_callback = function()
G_reader_settings:saveSetting("screensaver_type", "image_file")
G_reader_settings:saveSetting("screensaver_image", screenshot_name)
if restore_settings_func then
restore_settings_func()
end
end,
cancel_text = _("No"),
cancel_callback = function()
if restore_settings_func then
restore_settings_func()
end
end
}
UIManager:show(widget)
local screenshots_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/"
local screenshot_name = os.date(screenshots_dir .. "ImageViewer" .. "_%Y-%m-%d_%H%M%S.png")
UIManager:sendEvent(Event:new("Screenshot", screenshot_name, restore_settings_func))
return true
end

@ -1,9 +1,7 @@
local BD = require("ui/bidi")
local ButtonDialogTitle = require("ui/widget/buttondialogtitle")
local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage")
local GestureRange = require("ui/gesturerange")
local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer")
local UIManager = require("ui/uimanager")
local Screen = require("device").screen
@ -37,59 +35,74 @@ function Screenshoter:init()
}
end
function Screenshoter:onScreenshot(filename)
function Screenshoter:onScreenshot(filename, when_done_func)
local screenshots_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/"
self.screenshot_fn_fmt = screenshots_dir .. self.prefix .. "_%Y-%m-%d_%H%M%S.png"
local screenshot_name = filename or os.date(self.screenshot_fn_fmt)
Screen:shot(screenshot_name)
local widget = ConfirmBox:new{
text = T( _("Saved screenshot to %1.\nWould you like to set it as screensaver?"), BD.filepath(screenshot_name)),
ok_text = _("Yes"),
local confirm_box
confirm_box = ConfirmBox:new{
text = T( _("Screenshot saved to:\n%1"), BD.filepath(screenshot_name)),
keep_dialog_open = true,
cancel_text = _("Close"),
cancel_callback = function()
if when_done_func then when_done_func() end
end,
ok_text = _("Set as screensaver"),
ok_callback = function()
G_reader_settings:saveSetting("screensaver_type", "image_file")
G_reader_settings:saveSetting("screensaver_image", screenshot_name)
UIManager:close(confirm_box)
if when_done_func then when_done_func() end
end,
cancel_text = _("No"),
other_buttons_first = true,
other_buttons = {{
{
text = _("Delete"),
callback = function()
local __ = os.remove(screenshot_name)
UIManager:close(confirm_box)
if when_done_func then when_done_func() end
end,
},
{
text = _("View"),
callback = function()
local image_viewer = require("ui/widget/imageviewer"):new{
file = screenshot_name,
modal = true,
with_title_bar = false,
buttons_visible = true,
}
UIManager:show(image_viewer)
end,
},
}},
}
UIManager:show(widget)
UIManager:show(confirm_box)
-- trigger full refresh
UIManager:setDirty(nil, "full")
return true
end
function Screenshoter:chooseFolder()
local buttons = {}
table.insert(buttons, {
{
text = _("Choose screenshot folder"),
callback = function()
UIManager:close(self.choose_dialog)
require("ui/downloadmgr"):new{
onConfirm = function(path)
G_reader_settings:saveSetting("screenshot_dir", path .. "/")
UIManager:show(InfoMessage:new{
text = T(_("Screenshot folder set to:\n%1"), BD.dirpath(path)),
timeout = 3,
})
end,
}:chooseDir()
end,
}
})
table.insert(buttons, {
{
text = _("Close"),
callback = function()
UIManager:close(self.choose_dialog)
end,
}
})
local screenshot_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/"
self.choose_dialog = ButtonDialogTitle:new{
title = T(_("Current screenshot folder:\n%1"), BD.dirpath(screenshot_dir)),
buttons = buttons
local confirm_box = ConfirmBox:new{
text = T(_("Screenshot folder is set to:\n%1\n\nChoose a new folder for screenshots?"), screenshot_dir),
ok_text = _("Choose folder"),
ok_callback = function()
local path_chooser = require("ui/widget/pathchooser"):new{
select_file = false,
show_files = false,
path = screenshot_dir,
onConfirm = function(new_path)
G_reader_settings:saveSetting("screenshot_dir", new_path .. "/")
end
}
UIManager:show(path_chooser)
end,
}
UIManager:show(self.choose_dialog)
UIManager:show(confirm_box)
end
function Screenshoter:onTapDiagonal()

Loading…
Cancel
Save