FileChooser, PathChooser: show current path in header (#4125)

pull/4132/head
Robert 6 years ago committed by poire-z
parent ef8a54c924
commit 19b1c919d6

@ -24,7 +24,6 @@ local PluginLoader = require("pluginloader")
local ReaderDictionary = require("apps/reader/modules/readerdictionary")
local ReaderUI = require("apps/reader/readerui")
local ReaderWikipedia = require("apps/reader/modules/readerwikipedia")
local RenderText = require("ui/rendertext")
local Screenshoter = require("ui/widget/screenshoter")
local Size = require("ui/size")
local TextWidget = require("ui/widget/textwidget")
@ -47,17 +46,7 @@ local function restoreScreenMode()
end
local function truncatePath(text)
if not text then return "" end
local screen_width = Screen:getWidth()
local face = Font:getFace("xx_smallinfofont")
-- we want to truncate text on the left, so work with the reverse of text (which is fine as we don't use kerning)
local reversed_text = require("util").utf8Reverse(text)
local txt_width = RenderText:sizeUtf8Text(0, screen_width, face, reversed_text, false, false).x
if screen_width - 2 * Size.padding.small < txt_width then
reversed_text = RenderText:truncateTextByWidth(reversed_text, face, screen_width - 2 * Size.padding.small, false, false)
text = require("util").utf8Reverse(reversed_text)
end
return text
return FileChooser:truncatePath(text)
end
local FileManager = InputContainer:extend{

@ -30,6 +30,7 @@ local FileChooser = Menu:extend{
cface = Font:getFace("smallinfofont"),
no_title = true,
path = lfs.currentdir(),
show_path = true,
parent = nil,
show_hidden = nil,
exclude_dirs = {"%.sdr$"},

@ -515,7 +515,7 @@ function Menu:_recalculateDimen()
+ 2 * Size.padding.button
end
if self.menu_title and not self.no_title then
top_height = self.menu_title:getSize().h + 2 * Size.padding.small
top_height = self.menu_title_group:getSize().h + 2 * Size.padding.small
end
height_dim = self.dimen.h - bottom_height - top_height
self.item_dimen.h = math.floor(height_dim / self.perpage)
@ -543,10 +543,42 @@ function Menu:init()
text = self.title,
face = self.tface,
}
local menu_title_container = CenterContainer:new{
dimen = Geom:new{
w = self.dimen.w,
h = self.menu_title:getSize().h,
},
self.menu_title,
}
local path_text_container
if self.show_path then
self.path_text = TextWidget:new{
face = Font:getFace("xx_smallinfofont"),
text = self:truncatePath(self.path),
}
path_text_container = CenterContainer:new{
dimen = Geom:new{
w = self.dimen.w,
h = self.path_text:getSize().h,
},
self.path_text,
}
self.menu_title_group = VerticalGroup:new{
align = "center",
menu_title_container,
path_text_container,
}
else
self.menu_title_group = VerticalGroup:new{
align = "center",
menu_title_container
}
end
-- group for title bar
self.title_bar = OverlapGroup:new{
dimen = {w = self.dimen.w, h = self.menu_title:getSize().h},
self.menu_title,
dimen = {w = self.dimen.w, h = self.menu_title_group:getSize().h},
self.menu_title_group,
}
-- group for items
self.item_group = VerticalGroup:new{}
@ -801,6 +833,19 @@ function Menu:init()
end
end
function Menu:truncatePath(text)
local screen_width = Screen:getWidth()
local face = Font:getFace("xx_smallinfofont")
-- we want to truncate text on the left, so work with the reverse of text (which is fine as we don't use kerning)
local reversed_text = require("util").utf8Reverse(text)
local txt_width = RenderText:sizeUtf8Text(0, screen_width, face, reversed_text, false, false).x
if screen_width - 2 * Size.padding.small < txt_width then
reversed_text = RenderText:truncateTextByWidth(reversed_text, face, screen_width - 2 * Size.padding.small, false, false)
text = require("util").utf8Reverse(reversed_text)
end
return text
end
function Menu:onCloseWidget()
-- FIXME:
-- we cannot refresh regionally using the dimen field
@ -901,6 +946,9 @@ function Menu:updateItems(select_number)
end -- for c=1, self.perpage
self:updatePageInfo(select_number)
if self.show_path then
self.path_text.text = self:truncatePath(self.path)
end
UIManager:setDirty("all", function()
local refresh_dimen =

@ -7,6 +7,7 @@ local _ = require("gettext")
local PathChooser = FileChooser:extend{
title = _("Choose Path"),
no_title = false,
show_path = true,
is_popout = false,
covers_fullscreen = true, -- set it to false if you set is_popout = true
is_borderless = true,

@ -87,6 +87,9 @@ function CoverMenu:updateItems(select_number)
-- As done in Menu:updateItems()
self:updatePageInfo(select_number)
if self.show_path then
self.path_text.text = self:truncatePath(self.path)
end
UIManager:setDirty("all", function()
local refresh_dimen =
old_dimen and old_dimen:combine(self.dimen)

Loading…
Cancel
Save