56 lines
1.5 KiB
Lua
56 lines
1.5 KiB
Lua
local setmetatable = setmetatable
|
|
local wibox = require( "wibox" )
|
|
|
|
local module = {}
|
|
|
|
local function left(data)
|
|
data.next_item.selected = true
|
|
end
|
|
|
|
local function right(data)
|
|
data.previous_item.selected = true
|
|
end
|
|
|
|
local function up(data)
|
|
local idx,rc,col = data.current_index,data.rowcount,data.column
|
|
idx = idx-col
|
|
if idx <= 0 then
|
|
idx = rc + idx + 1
|
|
end
|
|
data.items[idx].selected = true
|
|
end
|
|
|
|
local function down(data)
|
|
local idx,rc,col = data.current_index,data.rowcount,data.column
|
|
idx = idx+col
|
|
if idx > rc then
|
|
idx = idx - rc - 1
|
|
end
|
|
data.items[idx].selected = true
|
|
end
|
|
|
|
function module.setup_key_hooks(data)
|
|
data:add_key_hook({}, "Up" , "press", up )
|
|
data:add_key_hook({}, "Down" , "press", down )
|
|
data:add_key_hook({}, "Left" , "press", left )
|
|
data:add_key_hook({}, "Right" , "press", right )
|
|
end
|
|
|
|
--Get preferred item geometry
|
|
local function item_fit(data,item,...)
|
|
return data.item_height, data.item_height
|
|
end
|
|
|
|
local function new(data)
|
|
return wibox.layout {
|
|
column_count = data.column,
|
|
row_count = data.row or (not data.column and 2 or nil),
|
|
item_fit = item_fit,
|
|
setup_key_hooks = module.setup_key_hooks,
|
|
layout = wibox.layout.grid --FIXME this is monkeypatched
|
|
}
|
|
end
|
|
|
|
return setmetatable(module, { __call = function(_, ...) return new(...) end })
|
|
-- kate: space-indent on; indent-width 4; replace-tabs on;
|