From 01ae3fee30704577f4ea37ed7f2132990135163c Mon Sep 17 00:00:00 2001 From: ailurux Date: Mon, 8 Apr 2024 15:40:07 +1000 Subject: [PATCH] Status bar consistency improvements --- lua/browser.lua | 228 +++++++++++++++++++++++++----------------------- 1 file changed, 117 insertions(+), 111 deletions(-) diff --git a/lua/browser.lua b/lua/browser.lua index 924381ea..5c00e8d1 100644 --- a/lua/browser.lua +++ b/lua/browser.lua @@ -9,125 +9,131 @@ local playback = require("playback") local theme = require("theme") local screen = require("screen") -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() +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.root, { - title = self.title, - }) + self.status_bar = widgets.StatusBar(self.root, { + back_cb = backstack.pop, + title = self.title + }) - if self.breadcrumb then - 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") + 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 - header:Label { - text = self.breadcrumb, - text_font = font.fusion_10, - } - - local buttons = header:Object({ - flex = { - flex_direction = "row", - flex_wrap = "wrap", - justify_content = "flex-end", - align_items = "center", - align_content = "center", - }, - w = lvgl.PCT(100), - h = lvgl.SIZE_CONTENT, - pad_column = 4, - }) - local original_iterator = self.iterator:clone() - local enqueue = widgets.IconBtn(buttons, "//lua/img/enqueue.png", "Enqueue") - enqueue:onClicked(function() - queue.add(original_iterator) - playback.playing:set(true) - end) - -- enqueue:add_flag(lvgl.FLAG.HIDDEN) - local play = widgets.IconBtn(buttons, "//lua/img/play_small.png", "Play") - play:onClicked(function() - queue.clear() - queue.add(original_iterator) - playback.playing:set(true) - backstack.push(playing) - end - ) - end + local buttons = header:Object({ + flex = { + flex_direction = "row", + flex_wrap = "wrap", + justify_content = "flex-end", + align_items = "center", + align_content = "center" + }, + w = lvgl.PCT(100), + h = lvgl.SIZE_CONTENT, + pad_column = 4 + }) + local original_iterator = self.iterator:clone() + local enqueue = widgets.IconBtn(buttons, "//lua/img/enqueue.png", "Enqueue") + enqueue:onClicked(function() + queue.add(original_iterator) + playback.playing:set(true) + end) + -- enqueue:add_flag(lvgl.FLAG.HIDDEN) + local play = widgets.IconBtn(buttons, "//lua/img/play_small.png", "Play") + play:onClicked(function() + queue.clear() + queue.add(original_iterator) + playback.playing:set(true) + backstack.push(playing) + end) - self.list = lvgl.List(self.root, { - w = lvgl.PCT(100), - h = lvgl.PCT(100), - flex_grow = 1, - scrollbar_mode = lvgl.SCROLLBAR_MODE.OFF, - }) + self.list = lvgl.List(self.root, { + w = lvgl.PCT(100), + h = lvgl.PCT(100), + flex_grow = 1, + scrollbar_mode = lvgl.SCROLLBAR_MODE.OFF + }) - local back = self.list:add_btn(nil, "< Back") - back:onClicked(backstack.pop) - back:add_style(styles.list_item) + -- local back = self.list:add_btn(nil, "< Back") + -- back:onClicked(backstack.pop) + -- back:add_style(styles.list_item) - self.focused_item = 0 - self.last_item = 0 - self.add_item = function(item) - if not item then return end - self.last_item = self.last_item + 1 - local this_item = self.last_item - local btn = self.list:add_btn(nil, tostring(item)) - btn:onClicked(function() - local contents = item:contents() - if type(contents) == "userdata" then - backstack.push(require("browser"):new { - title = self.title, - iterator = contents, - breadcrumb = tostring(item), - }) - else - queue.clear() - queue.add(contents) - playback.playing:set(true) - backstack.push(playing:new()) + self.focused_item = 0 + self.last_item = 0 + self.add_item = function(item) + if not item then + return + end + self.last_item = self.last_item + 1 + local this_item = self.last_item + local btn = self.list:add_btn(nil, tostring(item)) + btn:onClicked(function() + local contents = item:contents() + if type(contents) == "userdata" then + backstack.push(require("browser"):new{ + title = self.title, + iterator = contents, + breadcrumb = tostring(item) + }) + else + queue.clear() + queue.add(contents) + playback.playing:set(true) + backstack.push(playing:new()) + end + end) + btn:onevent(lvgl.EVENT.FOCUSED, function() + self.focused_item = this_item + if self.last_item - 5 < this_item then + self.add_item(self.iterator()) + end + end) + btn:add_style(styles.list_item) + if this_item == 1 then + btn:focus() + end end - end) - btn:onevent(lvgl.EVENT.FOCUSED, function() - self.focused_item = this_item - if self.last_item - 5 < this_item then - self.add_item(self.iterator()) - end - end) - btn:add_style(styles.list_item) - end - for _ = 1, 8 do - local val = self.iterator() - if not val then break end - self.add_item(val) + for _ = 1, 8 do + local val = self.iterator() + if not val then + break + end + self.add_item(val) + end end - end }