mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
some fixes to filechoser and menu
This commit is contained in:
@@ -315,7 +315,7 @@ end
|
||||
Widget that displays an item for menu
|
||||
|
||||
]]
|
||||
MenuItem = WidgetContainer:new{
|
||||
MenuItem = InputContainer:new{
|
||||
text = nil,
|
||||
detail = nil,
|
||||
face = Font:getFace("cfont", 22),
|
||||
@@ -323,7 +323,12 @@ MenuItem = WidgetContainer:new{
|
||||
height = nil,
|
||||
shortcut = nil,
|
||||
shortcut_style = "square",
|
||||
_underline_container = nil
|
||||
_underline_container = nil,
|
||||
|
||||
key_events = {
|
||||
Select = { {"Press"}, doc = "chose selected item" },
|
||||
ShowItemDetail = { {"Right"}, doc = "show item detail" }
|
||||
}
|
||||
}
|
||||
|
||||
function MenuItem:init()
|
||||
@@ -432,7 +437,6 @@ function Menu:init()
|
||||
|
||||
-- set up keyboard events
|
||||
self.key_events.Close = { {"Back"}, doc = "close menu" }
|
||||
self.key_events.Select = { {"Press"}, doc = "chose selected item" }
|
||||
self.key_events.NextPage = {
|
||||
{Input.group.PgFwd}, doc = "goto next page of the menu"
|
||||
}
|
||||
@@ -441,8 +445,6 @@ function Menu:init()
|
||||
}
|
||||
-- we won't catch presses to "Right"
|
||||
self.key_events.FocusRight = nil
|
||||
-- rather, we reserve that key for showing details
|
||||
self.key_events.ShowItemDetail = { {"Right"}, doc = "show item detail" }
|
||||
if self.is_enable_shortcut then
|
||||
self.key_events.SelectByShortCut = { {self.item_shortcuts} }
|
||||
end
|
||||
@@ -561,7 +563,7 @@ end
|
||||
|
||||
function Menu:onSelect()
|
||||
UIManager:close(self)
|
||||
self.on_select_callback(self.item_table[self.selected.y])
|
||||
self.on_select_callback(self.item_table[(self.page-1)*self.perpage+self.selected.y])
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ require "ui/dialog" -- for Menu
|
||||
|
||||
FileChooser = Menu:new{
|
||||
path = ".",
|
||||
parent = nil,
|
||||
show_hidden = false,
|
||||
filter = function(filename) return true end,
|
||||
}
|
||||
@@ -13,6 +14,7 @@ end
|
||||
function FileChooser:changeToPath(path)
|
||||
local dirs = {}
|
||||
local files = {}
|
||||
self.path = path
|
||||
for f in lfs.dir(self.path) do
|
||||
if self.show_hidden or not string.match(f, "^%.[^.]") then
|
||||
local filename = self.path.."/"..f
|
||||
@@ -32,11 +34,24 @@ function FileChooser:changeToPath(path)
|
||||
|
||||
self.item_table = {}
|
||||
for _, dir in ipairs(dirs) do
|
||||
table.insert(self.item_table, { text = dir.."/" })
|
||||
table.insert(self.item_table, { text = dir.."/", path = self.path.."/"..dir })
|
||||
end
|
||||
for _, file in ipairs(files) do
|
||||
table.insert(self.item_table, { text = file })
|
||||
table.insert(self.item_table, { text = file, path = self.path.."/"..file })
|
||||
end
|
||||
|
||||
Menu.init(self) -- call parent's init()
|
||||
end
|
||||
|
||||
function FileChooser:onSelect()
|
||||
local selected = self.item_table[(self.page-1)*self.perpage+self.selected.y]
|
||||
if lfs.attributes(selected.path, "mode") == "directory" then
|
||||
UIManager:close(self)
|
||||
self:changeToPath(selected.path)
|
||||
UIManager:show(self)
|
||||
else
|
||||
UIManager:close(self)
|
||||
self.on_select_callback(self.item_table[self.selected.y])
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user