Merge pull request 'Add track info screen' (#168) from tjk/tangara-fw:track-info-screen into main
Reviewed-on: https://codeberg.org/cool-tech-zone/tangara-fw/pulls/168 Reviewed-by: cooljqln <cooljqln@noreply.codeberg.org>custom
commit
3ad2fb61dc
After Width: | Height: | Size: 3.5 KiB |
@ -0,0 +1,85 @@ |
|||||||
|
local backstack = require("backstack") |
||||||
|
local font = require("font") |
||||||
|
local lvgl = require("lvgl") |
||||||
|
local playback = require("playback") |
||||||
|
local screen = require("screen") |
||||||
|
local widgets = require("widgets") |
||||||
|
|
||||||
|
return screen:new { |
||||||
|
create_ui = function(self) |
||||||
|
self.root = lvgl.Object(nil, { |
||||||
|
flex = { |
||||||
|
flex_direction = "column", |
||||||
|
flex_wrap = "wrap", |
||||||
|
justify_content = "center", |
||||||
|
align_items = "center", |
||||||
|
align_content = "center", |
||||||
|
}, |
||||||
|
w = lvgl.HOR_RES(), |
||||||
|
h = lvgl.VER_RES(), |
||||||
|
}) |
||||||
|
self.root:center() |
||||||
|
|
||||||
|
self.status_bar = widgets.StatusBar(self, { |
||||||
|
back_cb = backstack.pop, |
||||||
|
transparent_bg = true, |
||||||
|
}) |
||||||
|
|
||||||
|
local info = lvgl.List(self.root, { |
||||||
|
w = lvgl.PCT(100), |
||||||
|
h = lvgl.PCT(100), |
||||||
|
flex_grow = 1, |
||||||
|
}) |
||||||
|
|
||||||
|
-- Use buttons so we can scroll through the list, and labels so we can |
||||||
|
-- change the text as the track changes. |
||||||
|
local label = function(text) |
||||||
|
local b = info:add_btn(nil, "") |
||||||
|
local ret = b:Label { |
||||||
|
w = lvgl.PCT(100), |
||||||
|
h = lvgl.SIZE_CONTENT, |
||||||
|
text = text, |
||||||
|
text_font = font.fusion_10, |
||||||
|
text_align = 1, -- left |
||||||
|
} |
||||||
|
return ret |
||||||
|
end |
||||||
|
|
||||||
|
local album_artist = label("Loading...") |
||||||
|
local genre = label("") |
||||||
|
local disc = label("") |
||||||
|
local tracknum = label("") |
||||||
|
local encoding = label("") |
||||||
|
local sample_rate = label("") |
||||||
|
local num_channels = label("") |
||||||
|
local bits_per_sample = label("") |
||||||
|
local path = label("") |
||||||
|
|
||||||
|
self.bindings = self.bindings + { |
||||||
|
playback.track:bind(function(track) |
||||||
|
if not track then |
||||||
|
return |
||||||
|
end |
||||||
|
|
||||||
|
-- Genres are stored in a table of (genre, bool) pairs |
||||||
|
local function genres(tbl) |
||||||
|
local all = {} |
||||||
|
for item,_ in pairs(tbl) do |
||||||
|
table.insert(all, item) |
||||||
|
end |
||||||
|
return table.concat(all, ", ") |
||||||
|
end |
||||||
|
|
||||||
|
album_artist:set { text = "Album artist: " .. (track.album_artist or "") } |
||||||
|
genre:set { text = "Genre: " .. (track.genre and genres(track.genre) or "") } |
||||||
|
disc:set { text = "Disc: " .. (track.disc or "") } |
||||||
|
tracknum:set { text = "Track: " .. (track.track or "") } |
||||||
|
encoding:set { text = "Encoding: " .. (track.encoding or "") } |
||||||
|
sample_rate:set { text = "Sample rate: " .. (track.sample_rate or "") } |
||||||
|
num_channels:set { text = "Channels: " .. (track.num_channels or "") } |
||||||
|
bits_per_sample:set { text = "Bits per sample: " .. (track.bits_per_sample or "") } |
||||||
|
path:set { text = "Path: " .. (track.uri or "") } |
||||||
|
end), |
||||||
|
} |
||||||
|
end, |
||||||
|
} |
Loading…
Reference in new issue