summaryrefslogtreecommitdiff
path: root/lua/widgets.lua
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-11-14 13:20:04 +1100
committerjacqueline <me@jacqueline.id.au>2023-11-14 13:20:04 +1100
commit71ed09a6f70901c9097973a44b24d6a6ced2834f (patch)
tree3d02e4e180cd0a5caa1185eba89181607c4bccb9 /lua/widgets.lua
parent8a0a167adbf3d9b6f8b6f16aaf20ca39ad5549de (diff)
downloadtangara-fw-71ed09a6f70901c9097973a44b24d6a6ced2834f.tar.gz
Add two-way databinding for lua, and flesh out the lua statusbar
Diffstat (limited to 'lua/widgets.lua')
-rw-r--r--lua/widgets.lua95
1 files changed, 77 insertions, 18 deletions
diff --git a/lua/widgets.lua b/lua/widgets.lua
index bcc3ca59..a281620e 100644
--- a/lua/widgets.lua
+++ b/lua/widgets.lua
@@ -1,37 +1,96 @@
local lvgl = require("lvgl")
+local power = require("power")
+local bluetooth = require("bluetooth")
+local playback = require("playback")
local widgets = {}
-function widgets.StatusBar(parent)
- local container = parent:Object {
+function widgets.StatusBar(parent, opts)
+ local status_bar = {}
+
+ status_bar.root = parent:Object {
flex = {
- flex_direction = "row",
- justify_content = "flex-start",
- align_items = "center",
- align_content = "center",
+ flex_direction = "row",
+ justify_content = "flex-start",
+ align_items = "center",
+ align_content = "center",
},
w = lvgl.HOR_RES(),
- h = 16,
+ h = 18,
}
- container:Label {
- w = lvgl.SIZE_CONTENT,
- h = 12,
- text = "<",
- }
+ if opts.back_cb then
+ status_bar.back = status_bar.root:Label {
+ w = lvgl.SIZE_CONTENT,
+ h = 12,
+ text = "<",
+ }
+ status_bar.back:onClicked(opts.back_cb)
+ end
- container:Label {
+ status_bar.title = status_bar.root:Label {
w = lvgl.PCT(100),
h = 16,
- text = "cool title",
+ text = "",
flex_grow = 1,
}
+ if opts.title then
+ status_bar.title.set { text = opts.title }
+ end
- container:Label {
- w = lvgl.SIZE_CONTENT,
- h = 16,
- text = "69%",
+ status_bar.playing = status_bar.root:Image {}
+ status_bar.bluetooth = status_bar.root:Image {}
+ status_bar.battery = status_bar.root:Image {}
+
+ status_bar.bindings = {
+ power.battery_pct:bind(function(percent)
+ local src
+ if percent >= 95 then
+ src = "battery_full.png"
+ elseif percent >= 75 then
+ src = "battery_80.png"
+ elseif percent >= 55 then
+ src = "battery_60.png"
+ elseif percent >= 35 then
+ src = "battery_40.png"
+ elseif percent >= 15 then
+ src = "battery_20.png"
+ else
+ src = "battery_empty.png"
+ end
+ status_bar.battery:set_src("//lua/assets/" .. src)
+ end),
+ playback.playing:bind(function(playing)
+ if playing then
+ status_bar.playing:set_src("//lua/assets/play.png")
+ else
+ status_bar.playing:set_src("//lua/assets/pause.png")
+ end
+ end),
+ playback.track:bind(function(track)
+ if track then
+ status_bar.playing:clear_flag(lvgl.FLAG.HIDDEN)
+ else
+ status_bar.playing:add_flag(lvgl.FLAG.HIDDEN)
+ end
+ end),
+ bluetooth.enabled:bind(function(en)
+ if en then
+ status_bar.bluetooth:clear_flag(lvgl.FLAG.HIDDEN)
+ else
+ status_bar.bluetooth:add_flag(lvgl.FLAG.HIDDEN)
+ end
+ end),
+ bluetooth.connected:bind(function(connected)
+ if connected then
+ status_bar.bluetooth:set_src("//lua/assets/bt_conn.png")
+ else
+ status_bar.bluetooth:set_src("//lua/assets/bt.png")
+ end
+ end),
}
+
+ return status_bar
end
return widgets