REF move common setup bits to common

This commit is contained in:
Nathan Dwarshuis 2022-07-12 01:23:59 -04:00
parent 93fc91ffe4
commit 92f6b1dc62
3 changed files with 71 additions and 51 deletions

2
core

@ -1 +1 @@
Subproject commit 0727095aa87d69cac7d766c70831a96248b56da2 Subproject commit 1cc356773a496d9abd0a400094b7b732c390201d

View File

@ -651,4 +651,42 @@ M.make_panel = function(x, y, w, h, thickness)
) )
end end
--------------------------------------------------------------------------------
-- setup functions
local _combine_blocks = function(acc, new)
if new.active == true then
local n = new.f(acc.y + new.offset)
table.insert(acc.objs, n.obj)
acc.y = acc.y + n.h + new.offset
end
return acc
end
local non_false = function(xs)
return pure.filter(function(x) return x ~= false end, xs)
end
M.reduce_blocks = function(y, blocks)
local r = pure.reduce(_combine_blocks, {y = y, objs = {}}, blocks)
local us, ss, ds = table.unpack(pure.unzip(r.objs))
return {
updater = pure.compose(table.unpack(non_false(pure.reverse(us)))),
static_drawer = pure.sequence(table.unpack(ss)),
dynamic_drawer = pure.sequence(table.unpack(non_false(ds)))
}
end
M.mk_acc = function(h, u, s, d)
return {h = h, obj = {u, s, d}}
end
M.mk_acc_static = function(h, s)
return M.mk_acc(h, false, s, false)
end
M.mk_block = function(f, active, offset)
return {f = f, active = active, offset = offset}
end
return M return M

View File

@ -28,12 +28,16 @@ return function(update_freq)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- header -- header
local header = common.make_header( local mk_header = function(y)
geometry.LEFT_X, local header = common.make_header(
MODULE_Y, geometry.LEFT_X,
geometry.SECTION_WIDTH, MODULE_Y,
'PROCESSOR' geometry.SECTION_WIDTH,
) 'PROCESSOR'
)
local static = function(cr) common.draw_header(cr, header) end
return common.mk_acc_static(header.bottom_y - y, static)
end
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- cores (loads and temps) -- cores (loads and temps)
@ -77,6 +81,7 @@ return function(update_freq)
local mk_cores = function(y) local mk_cores = function(y)
local coretemp_paths = cpu.get_coretemp_paths() local coretemp_paths = cpu.get_coretemp_paths()
local cores = {} local cores = {}
-- TODO what happens when the number of cores changes?
for c = 1, ncores do for c = 1, ncores do
local dial_x = geometry.LEFT_X + DIAL_OUTER_RADIUS + local dial_x = geometry.LEFT_X + DIAL_OUTER_RADIUS +
(geometry.SECTION_WIDTH - 2 * DIAL_OUTER_RADIUS) * (c - 1) / 3 (geometry.SECTION_WIDTH - 2 * DIAL_OUTER_RADIUS) * (c - 1) / 3
@ -109,11 +114,11 @@ return function(update_freq)
end end
local dynamic = function(cr) local dynamic = function(cr)
for i = 1, #cores do for i = 1, #cores do
compound_dial.draw_dynamic(cores[i].loads, cr)
common.text_circle_draw_dynamic(cores[i].coretemp, cr) common.text_circle_draw_dynamic(cores[i].coretemp, cr)
compound_dial.draw_dynamic(cores[i].loads, cr)
end end
end end
return {h = DIAL_OUTER_RADIUS * 2, obj = {update, static, dynamic}} return common.mk_acc(DIAL_OUTER_RADIUS * 2, update, static, dynamic)
end end
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
@ -140,7 +145,7 @@ return function(update_freq)
end end
local static = pure.partial(common.text_rows_draw_static, cpu_status) local static = pure.partial(common.text_rows_draw_static, cpu_status)
local dynamic = pure.partial(common.text_rows_draw_dynamic, cpu_status) local dynamic = pure.partial(common.text_rows_draw_dynamic, cpu_status)
return {h = TEXT_SPACING, obj = {update, static, dynamic}} return common.mk_acc(TEXT_SPACING, update, static, dynamic)
end end
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
@ -153,7 +158,7 @@ return function(update_freq)
geometry.SECTION_WIDTH geometry.SECTION_WIDTH
) )
local static = pure.partial(line.draw, separator) local static = pure.partial(line.draw, separator)
return {h = 0, obj = {nil, static, nil}} return common.mk_acc_static(0, static)
end end
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
@ -178,7 +183,7 @@ return function(update_freq)
end end
local static = pure.partial(common.tagged_percent_timeseries_draw_static, total_load) local static = pure.partial(common.tagged_percent_timeseries_draw_static, total_load)
local dynamic = pure.partial(common.tagged_percent_timeseries_draw_dynamic, total_load) local dynamic = pure.partial(common.tagged_percent_timeseries_draw_dynamic, total_load)
return {h = PLOT_HEIGHT + PLOT_SECTION_BREAK, obj = {update, static, dynamic}} return common.mk_acc(PLOT_HEIGHT + PLOT_SECTION_BREAK, update, static, dynamic)
end end
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
@ -211,55 +216,32 @@ return function(update_freq)
end end
local static = pure.partial(text_table.draw_static, tbl) local static = pure.partial(text_table.draw_static, tbl)
local dynamic = pure.partial(text_table.draw_dynamic, tbl) local dynamic = pure.partial(text_table.draw_dynamic, tbl)
return {h = TABLE_HEIGHT, obj = {update, static, dynamic}} return common.mk_acc(TABLE_HEIGHT, update, static, dynamic)
end end
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- main functions -- main functions
local combine = function(acc, new) local rbs = common.reduce_blocks(
if new.active == true then MODULE_Y,
local n = new.f(acc.y + new.offset)
table.insert(acc.objs, n.obj)
acc.y = acc.y + n.h + new.offset
end
return acc
end
local all = pure.reduce(
combine,
{y = header.bottom_y, objs = {}},
{ {
{f = mk_cores, active = true, offset = 0}, common.mk_block(mk_header, true, 0),
{f = mk_hwp_freq, active = true, offset = TEXT_SPACING}, common.mk_block(mk_cores, true, 0),
{f = mk_sep, active = true, offset = SEPARATOR_SPACING}, common.mk_block(mk_hwp_freq, true, TEXT_SPACING),
{f = mk_load_plot, active = true, offset = SEPARATOR_SPACING}, common.mk_block(mk_sep, true, SEPARATOR_SPACING),
{f = mk_tbl, active = true, offset = TABLE_SECTION_BREAK} common.mk_block(mk_load_plot, true, SEPARATOR_SPACING),
common.mk_block(mk_tbl, true, TABLE_SECTION_BREAK)
} }
) )
local update_state_ = pure.compose(
table.unpack(
pure.non_nil(
pure.reverse(pure.map(function(x) return x[1] end, all.objs))
)
)
)
local update = function(trigger) local update = function(trigger)
update_state_(update_state(trigger, state.cpu_loads)) rbs.updater(update_state(trigger, state.cpu_loads))
end end
local draw_static = pure.sequence( -- TODO return the bottom y/height of the entire module
function(cr) common.draw_header(cr, header) end, return {
table.unpack(pure.map(function(x) return x[2] end, all.objs)) static = rbs.static_drawer,
) dynamic = rbs.dynamic_drawer,
update = update
local draw_dynamic = pure.sequence( }
table.unpack(
pure.non_nil(
pure.map(function(x) return x[3] end, all.objs)))
)
return {static = draw_static, dynamic = draw_dynamic, update = update}
end end