diff options
| author | ailurux <ailurux@noreply.codeberg.org> | 2024-05-10 04:20:00 +0000 |
|---|---|---|
| committer | ailurux <ailurux@noreply.codeberg.org> | 2024-05-10 04:20:00 +0000 |
| commit | 35c6125b25f3f0c1852c74f9d165a46282494a7c (patch) | |
| tree | 695b8229205e108f04da7d1ded7f0af35bf1ff9c /lua/file_browser.lua | |
| parent | e4ce7c4ac23402e09be8d6a52e0f739c0dff4ff0 (diff) | |
| parent | ce9861260d5642eb496e447eb7e93de5938c6b1f (diff) | |
| download | tangara-fw-35c6125b25f3f0c1852c74f9d165a46282494a7c.tar.gz | |
Merge pull request 'file-browser' (#71) from file-browser into main
Reviewed-on: https://codeberg.org/cool-tech-zone/tangara-fw/pulls/71
Reviewed-by: cooljqln <cooljqln@noreply.codeberg.org>
Diffstat (limited to 'lua/file_browser.lua')
| -rw-r--r-- | lua/file_browser.lua | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/lua/file_browser.lua b/lua/file_browser.lua new file mode 100644 index 00000000..91b84c84 --- /dev/null +++ b/lua/file_browser.lua @@ -0,0 +1,73 @@ +local lvgl = require("lvgl") +local widgets = require("widgets") +local backstack = require("backstack") +local font = require("font") +local queue = require("queue") +local playing = require("playing") +local styles = require("styles") +local playback = require("playback") +local theme = require("theme") +local screen = require("screen") +local filesystem = require("filesystem") + +return screen:new{ + createUi = function(self) + self.root = lvgl.Object(nil, { + flex = { + flex_direction = "column", + flex_wrap = "wrap", + justify_content = "flex-start", + align_items = "flex-start", + align_content = "flex-start" + }, + w = lvgl.HOR_RES(), + h = lvgl.VER_RES() + }) + self.root:center() + + self.status_bar = widgets.StatusBar(self, { + back_cb = backstack.pop, + title = self.title + }) + + local header = self.root:Object{ + flex = { + flex_direction = "column", + flex_wrap = "wrap", + justify_content = "flex-start", + align_items = "flex-start", + align_content = "flex-start" + }, + w = lvgl.HOR_RES(), + h = lvgl.SIZE_CONTENT, + pad_left = 4, + pad_right = 4, + pad_bottom = 2, + bg_opa = lvgl.OPA(100), + scrollbar_mode = lvgl.SCROLLBAR_MODE.OFF + } + theme.set_style(header, "header") + + if self.breadcrumb then + header:Label{ + text = self.breadcrumb, + text_font = font.fusion_10 + } + end + + widgets.InfiniteList(self.root, self.iterator, { + callback = function(item) + return function() + local is_dir = item:is_directory() + if is_dir then + backstack.push(require("file_browser"):new{ + title = self.title, + iterator = filesystem.iterator(tostring(item)), + breadcrumb = tostring(item) + }) + end + end + end + }) + end +} |
