From 8191cbe8523417aecd1108359845b48577d51167 Mon Sep 17 00:00:00 2001 From: HW Date: Mon, 28 May 2012 00:14:08 +0200 Subject: [PATCH] some fixes to filechoser and menu --- frontend/ui/dialog.lua | 14 ++++++++------ frontend/ui/filechooser.lua | 19 +++++++++++++++++-- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/frontend/ui/dialog.lua b/frontend/ui/dialog.lua index 5bdaa088a..6112c18db 100644 --- a/frontend/ui/dialog.lua +++ b/frontend/ui/dialog.lua @@ -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 diff --git a/frontend/ui/filechooser.lua b/frontend/ui/filechooser.lua index d5740b6b4..62702a288 100644 --- a/frontend/ui/filechooser.lua +++ b/frontend/ui/filechooser.lua @@ -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