Filemanager: insert TitleBar (#8648)

reviewable/pr8669/r1
hius07 2 years ago committed by GitHub
parent 334a913b0e
commit 958077364a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,8 +1,6 @@
local BD = require("ui/bidi") local BD = require("ui/bidi")
local Blitbuffer = require("ffi/blitbuffer") local Blitbuffer = require("ffi/blitbuffer")
local Button = require("ui/widget/button")
local ButtonDialogTitle = require("ui/widget/buttondialogtitle") local ButtonDialogTitle = require("ui/widget/buttondialogtitle")
local CenterContainer = require("ui/widget/container/centercontainer")
local CheckButton = require("ui/widget/checkbutton") local CheckButton = require("ui/widget/checkbutton")
local ConfirmBox = require("ui/widget/confirmbox") local ConfirmBox = require("ui/widget/confirmbox")
local Device = require("device") local Device = require("device")
@ -18,10 +16,7 @@ local FileManagerFileSearcher = require("apps/filemanager/filemanagerfilesearche
local FileManagerHistory = require("apps/filemanager/filemanagerhistory") local FileManagerHistory = require("apps/filemanager/filemanagerhistory")
local FileManagerMenu = require("apps/filemanager/filemanagermenu") local FileManagerMenu = require("apps/filemanager/filemanagermenu")
local FileManagerShortcuts = require("apps/filemanager/filemanagershortcuts") local FileManagerShortcuts = require("apps/filemanager/filemanagershortcuts")
local Font = require("ui/font")
local FrameContainer = require("ui/widget/container/framecontainer") local FrameContainer = require("ui/widget/container/framecontainer")
local HorizontalGroup = require("ui/widget/horizontalgroup")
local IconButton = require("ui/widget/iconbutton")
local InfoMessage = require("ui/widget/infomessage") local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer") local InputContainer = require("ui/widget/container/inputcontainer")
local InputDialog = require("ui/widget/inputdialog") local InputDialog = require("ui/widget/inputdialog")
@ -33,10 +28,8 @@ local ReaderDeviceStatus = require("apps/reader/modules/readerdevicestatus")
local ReaderDictionary = require("apps/reader/modules/readerdictionary") local ReaderDictionary = require("apps/reader/modules/readerdictionary")
local ReaderWikipedia = require("apps/reader/modules/readerwikipedia") local ReaderWikipedia = require("apps/reader/modules/readerwikipedia")
local Screenshoter = require("ui/widget/screenshoter") local Screenshoter = require("ui/widget/screenshoter")
local Size = require("ui/size") local TitleBar = require("ui/widget/titlebar")
local TextWidget = require("ui/widget/textwidget")
local VerticalGroup = require("ui/widget/verticalgroup") local VerticalGroup = require("ui/widget/verticalgroup")
local VerticalSpan = require("ui/widget/verticalspan")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local filemanagerutil = require("apps/filemanager/filemanagerutil") local filemanagerutil = require("apps/filemanager/filemanagerutil")
local lfs = require("libs/libkoreader-lfs") local lfs = require("libs/libkoreader-lfs")
@ -67,11 +60,8 @@ function FileManager:onSetRotationMode(rotation)
if FileManager.instance then if FileManager.instance then
self:reinit(self.path, self.focused_file) self:reinit(self.path, self.focused_file)
if self.select_mode then if self.select_mode then
self.plus_button:setIcon("check") self.title_bar:setRightIcon("check")
end end
UIManager:setDirty(self.banner, function()
return "ui", self.banner.dimen
end)
end end
end end
return true return true
@ -114,74 +104,26 @@ end
function FileManager:setupLayout() function FileManager:setupLayout()
self.show_parent = self.show_parent or self self.show_parent = self.show_parent or self
local icon_size = Screen:scaleBySize(DGENERIC_ICON_SIZE) self.title_bar = TitleBar:new{
local home_button = IconButton:new{ fullscreen = "true",
icon = "home", align = "center",
width = icon_size, title = self.title,
height = icon_size, title_top_padding = Screen:scaleBySize(6),
padding = Size.padding.default, subtitle = BD.directory(filemanagerutil.abbreviate(self.root_path)),
padding_right = Size.padding.large, subtitle_truncate_left = true,
padding_bottom = 0, subtitle_fullwidth = true,
callback = function() button_padding = Screen:scaleBySize(5),
self:goHome() left_icon = "home",
end, left_icon_size_ratio = 1,
hold_callback = function() self:setHome() end, left_icon_tap_callback = function() self:goHome() end,
} left_icon_hold_callback = function() self:setHome() end,
right_icon = "plus",
self.plus_button = IconButton:new{ right_icon_size_ratio = 1,
icon = "plus", right_icon_tap_callback = function() self:onShowPlusMenu() end,
width = icon_size, right_icon_hold_callback = false, -- propagate long-press to dispatcher
height = icon_size,
padding = Size.padding.default,
padding_left = Size.padding.large,
padding_bottom = 0,
callback = function() self:onShowPlusMenu() end,
}
self.path_text = TextWidget:new{
face = Font:getFace("xx_smallinfofont"),
text = BD.directory(filemanagerutil.abbreviate(self.root_path)),
max_width = Screen:getWidth() - 2*Size.padding.large,
truncate_left = true,
} }
self.banner = FrameContainer:new{ local show_hidden = G_reader_settings:isTrue("show_hidden") or DSHOWHIDDENFILES
padding = 0,
bordersize = 0,
VerticalGroup:new {
CenterContainer:new {
dimen = { w = Screen:getWidth(), h = nil },
HorizontalGroup:new {
home_button,
VerticalGroup:new {
Button:new {
readonly = true,
bordersize = 0,
padding = 0,
text_font_bold = false,
text_font_face = "smalltfont",
text_font_size = 24,
text = self.title,
width = Screen:getWidth() - 2 * icon_size - 4 * Size.padding.large,
},
},
self.plus_button,
}
},
CenterContainer:new{
dimen = { w = Screen:getWidth(), h = nil },
self.path_text,
},
VerticalSpan:new{ width = Screen:scaleBySize(5) },
}
}
local show_hidden
if G_reader_settings:has("show_hidden") then
show_hidden = G_reader_settings:isTrue("show_hidden")
else
show_hidden = DSHOWHIDDENFILES
end
local show_unsupported = G_reader_settings:isTrue("show_unsupported") local show_unsupported = G_reader_settings:isTrue("show_unsupported")
local file_chooser = FileChooser:new{ local file_chooser = FileChooser:new{
-- remember to adjust the height when new item is added to the group -- remember to adjust the height when new item is added to the group
@ -192,7 +134,7 @@ function FileManager:setupLayout()
show_parent = self.show_parent, show_parent = self.show_parent,
show_hidden = show_hidden, show_hidden = show_hidden,
width = Screen:getWidth(), width = Screen:getWidth(),
height = Screen:getHeight() - self.banner:getSize().h, height = Screen:getHeight() - self.title_bar:getHeight(),
is_popout = false, is_popout = false,
is_borderless = true, is_borderless = true,
has_close_button = true, has_close_button = true,
@ -214,10 +156,7 @@ function FileManager:setupLayout()
local file_manager = self local file_manager = self
function file_chooser:onPathChanged(path) -- luacheck: ignore function file_chooser:onPathChanged(path) -- luacheck: ignore
file_manager.path_text:setText(BD.directory(filemanagerutil.abbreviate(path))) file_manager.title_bar:setSubTitle(BD.directory(filemanagerutil.abbreviate(path)))
UIManager:setDirty(file_manager, function()
return "ui", file_manager.path_text.dimen, file_manager.dithered
end)
return true return true
end end
@ -478,7 +417,7 @@ function FileManager:setupLayout()
end end
self.layout = VerticalGroup:new{ self.layout = VerticalGroup:new{
self.banner, self.title_bar,
file_chooser, file_chooser,
} }
@ -615,10 +554,7 @@ function FileManager:onToggleSelectMode()
logger.dbg("toggle select mode") logger.dbg("toggle select mode")
self.select_mode = not self.select_mode self.select_mode = not self.select_mode
self.selected_files = self.select_mode and {} or nil self.selected_files = self.select_mode and {} or nil
self.plus_button:setIcon(self.select_mode and "check" or "plus") self.title_bar:setRightIcon(self.select_mode and "check" or "plus")
UIManager:setDirty(self, function()
return "ui", self.plus_button.dimen, self.dithered
end)
self:onRefresh() self:onRefresh()
end end

@ -153,7 +153,9 @@ function IconButton:onHoldIconButton()
self:onInput(self.hold_input) self:onInput(self.hold_input)
elseif type(self.hold_input_func) == "function" then elseif type(self.hold_input_func) == "function" then
self:onInput(self.hold_input_func()) self:onInput(self.hold_input_func())
elseif self.hold_callback == nil then return end elseif not self.hold_callback then -- nil or false
return
end
self._hold_handled = true self._hold_handled = true
return true return true
end end

@ -56,6 +56,8 @@ local TitleBar = OverlapGroup:extend{
right_icon_tap_callback = function() end, right_icon_tap_callback = function() end,
right_icon_hold_callback = function() end, right_icon_hold_callback = function() end,
right_icon_allow_flash = true, right_icon_allow_flash = true,
-- set any of these _callback to false to not handle the event
-- and let it propagate; otherwise the event is discarded
-- If provided, use right_icon="exit" and use this as right_icon_tap_callback -- If provided, use right_icon="exit" and use this as right_icon_tap_callback
close_callback = nil, close_callback = nil,

Loading…
Cancel
Save