[fix] FileManagerShortcuts: prevent interference with general Menu class (#4764)

The widget system doesn't really do multi-inheritance as well as it should at the moment. Instead of diving into the internals with release upcoming, this commit rewrites the shortcuts to behave better.

Also fixes an older bug in that changing the friendly name didn't actually do anything on first adding a shortcut.

Fixes #4763.
pull/4765/head
Frans de Jonge 5 years ago committed by GitHub
parent 2536cc2645
commit 294c92fdc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,6 @@
local ButtonDialog = require("ui/widget/buttondialog") local ButtonDialog = require("ui/widget/buttondialog")
local InfoMessage = require("ui/widget/infomessage") local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer")
local InputDialog = require("ui/widget/inputdialog") local InputDialog = require("ui/widget/inputdialog")
local Menu = require("ui/widget/menu") local Menu = require("ui/widget/menu")
local Screen = require("device").screen local Screen = require("device").screen
@ -8,22 +9,9 @@ local util = require("ffi/util")
local _ = require("gettext") local _ = require("gettext")
local T = require("ffi/util").template local T = require("ffi/util").template
local FileManagerShortcuts = Menu:extend{ local FileManagerShortcuts = InputContainer:extend{}
width = Screen:getWidth(),
height = Screen:getHeight(),
no_title = false,
parent = nil,
has_close_button = true,
is_popout = false,
is_borderless = true,
}
function FileManagerShortcuts:init()
self.item_table = self:genItemTableFromRoot()
Menu.init(self)
end
function FileManagerShortcuts:genItemTableFromRoot() function FileManagerShortcuts:updateItemTable()
local item_table = {} local item_table = {}
local folder_shortcuts = G_reader_settings:readSetting("folder_shortcuts") or {} local folder_shortcuts = G_reader_settings:readSetting("folder_shortcuts") or {}
table.insert(item_table, { table.insert(item_table, {
@ -40,12 +28,36 @@ function FileManagerShortcuts:genItemTableFromRoot()
deletable = true, deletable = true,
editable = true, editable = true,
callback = function() callback = function()
UIManager:close(self) UIManager:close(self.fm_bookmark)
self.goFolder(item.folder)
local folder = item.folder
if folder ~= nil and lfs.attributes(folder, "mode") == "directory" then
if self.ui.file_chooser then
self.ui.file_chooser:changeToPath(folder)
else -- called from Reader
local FileManager = require("apps/filemanager/filemanager")
self.ui:onClose()
if FileManager.instance then
FileManager.instance:reinit(folder)
else
FileManager:showFiles(folder)
end
end
end
end, end,
}) })
end end
return item_table
-- try to stay on current page
local select_number = nil
if self.fm_bookmark.page and self.fm_bookmark.perpage then
select_number = (self.fm_bookmark.page - 1) * self.fm_bookmark.perpage + 1
end
self.fm_bookmark:switchItemTable(nil,
item_table, select_number)
end end
function FileManagerShortcuts:addNewFolder() function FileManagerShortcuts:addNewFolder()
@ -53,7 +65,7 @@ function FileManagerShortcuts:addNewFolder()
local path_chooser = PathChooser:new{ local path_chooser = PathChooser:new{
select_directory = true, select_directory = true,
select_file = false, select_file = false,
path = self.curr_path, path = self.fm_bookmark.curr_path,
onConfirm = function(path) onConfirm = function(path)
local add_folder_input local add_folder_input
local friendly_name = util.basename(path) or _("my folder") local friendly_name = util.basename(path) or _("my folder")
@ -74,7 +86,7 @@ function FileManagerShortcuts:addNewFolder()
text = _("Add"), text = _("Add"),
is_enter_default = true, is_enter_default = true,
callback = function() callback = function()
self:addFolderFromInput(friendly_name, path) self:addFolderFromInput(add_folder_input:getInputValue(), path)
UIManager:close(add_folder_input) UIManager:close(add_folder_input)
end, end,
}, },
@ -103,7 +115,7 @@ function FileManagerShortcuts:addFolderFromInput(friendly_name, folder)
folder = folder, folder = folder,
}) })
G_reader_settings:saveSetting("folder_shortcuts", folder_shortcuts) G_reader_settings:saveSetting("folder_shortcuts", folder_shortcuts)
self:init() self:updateItemTable()
end end
function FileManagerShortcuts:onMenuHold(item) function FileManagerShortcuts:onMenuHold(item)
@ -117,7 +129,7 @@ function FileManagerShortcuts:onMenuHold(item)
enabled = item.editable, enabled = item.editable,
callback = function() callback = function()
UIManager:close(folder_shortcuts_dialog) UIManager:close(folder_shortcuts_dialog)
self:editFolderShortcut(item) self._manager:editFolderShortcut(item)
end end
}, },
{ {
@ -125,7 +137,7 @@ function FileManagerShortcuts:onMenuHold(item)
enabled = item.deletable, enabled = item.deletable,
callback = function() callback = function()
UIManager:close(folder_shortcuts_dialog) UIManager:close(folder_shortcuts_dialog)
self:deleteFolderShortcut(item) self._manager:deleteFolderShortcut(item)
end end
}, },
}, },
@ -175,7 +187,7 @@ function FileManagerShortcuts:renameFolderShortcut(item, new_name)
table.insert(folder_shortcuts, element) table.insert(folder_shortcuts, element)
end end
G_reader_settings:saveSetting("folder_shortcuts", folder_shortcuts) G_reader_settings:saveSetting("folder_shortcuts", folder_shortcuts)
self:init() self:updateItemTable()
end end
function FileManagerShortcuts:deleteFolderShortcut(item) function FileManagerShortcuts:deleteFolderShortcut(item)
@ -186,32 +198,30 @@ function FileManagerShortcuts:deleteFolderShortcut(item)
end end
end end
G_reader_settings:saveSetting("folder_shortcuts", folder_shortcuts) G_reader_settings:saveSetting("folder_shortcuts", folder_shortcuts)
self:init() self:updateItemTable()
end
function FileManagerShortcuts:onSetDimensions(dimen)
self.dimen = dimen
end end
function FileManagerShortcuts:onShowFolderShortcutsDialog() function FileManagerShortcuts:onShowFolderShortcutsDialog()
local fm_bookmark = self:new{ self.fm_bookmark = Menu:new{
title = _("Folder shortcuts"), title = _("Folder shortcuts"),
show_parent = self.ui, show_parent = self.ui,
width = Screen:getWidth(),
height = Screen:getHeight(),
no_title = false,
parent = nil,
has_close_button = true,
is_popout = false,
is_borderless = true,
curr_path = self.ui.file_chooser and self.ui.file_chooser.path or self.ui:getLastDirFile(), curr_path = self.ui.file_chooser and self.ui.file_chooser.path or self.ui:getLastDirFile(),
goFolder = function(folder) onMenuHold = self.onMenuHold,
if folder ~= nil and lfs.attributes(folder, "mode") == "directory" then _manager = self,
if self.ui.file_chooser then
self.ui.file_chooser:changeToPath(folder)
else -- called from Reader
local FileManager = require("apps/filemanager/filemanager")
self.ui:onClose()
if FileManager.instance then
FileManager.instance:reinit(folder)
else
FileManager:showFiles(folder)
end
end
end
end,
} }
UIManager:show(fm_bookmark) self:updateItemTable()
UIManager:show(self.fm_bookmark)
end end
return FileManagerShortcuts return FileManagerShortcuts

Loading…
Cancel
Save