81 lines
1.5 KiB
Lua
81 lines
1.5 KiB
Lua
-- Default widget requirements
|
|
local base = require('wibox.widget.base')
|
|
local gtable = require('gears.table')
|
|
local setmetatable = setmetatable
|
|
|
|
-- Commons requirements
|
|
local wibox = require('wibox')
|
|
|
|
-- Local declarations
|
|
|
|
local mat_list_item = {mt = {}}
|
|
|
|
function mat_list_item:layout(_, width, height)
|
|
local layout = {}
|
|
|
|
-- Add divider if present
|
|
if self._private.icon then
|
|
table.insert(
|
|
layout,
|
|
base.place_widget_at(
|
|
self._private.imagebox,
|
|
width / 2 - self._private.size / 2,
|
|
height / 2 - self._private.size / 2,
|
|
self._private.size,
|
|
self._private.size
|
|
)
|
|
)
|
|
end
|
|
return layout
|
|
end
|
|
|
|
function mat_list_item:fit(_, width, height)
|
|
local min = math.min(width, height)
|
|
return min, min
|
|
end
|
|
|
|
function mat_list_item:set_icon(icon)
|
|
self._private.icon = icon
|
|
self._private.imagebox.image = icon
|
|
end
|
|
|
|
function mat_list_item:get_icon()
|
|
return self._private.icon
|
|
end
|
|
|
|
function mat_list_item:set_size(size)
|
|
self._private.size = size
|
|
self:emit_signal('widget::layout_changed')
|
|
end
|
|
|
|
function mat_list_item:get_size()
|
|
return self._private.size
|
|
end
|
|
|
|
local function new(icon, size)
|
|
local ret =
|
|
base.make_widget(
|
|
nil,
|
|
nil,
|
|
{
|
|
enable_properties = true
|
|
}
|
|
)
|
|
|
|
gtable.crush(ret, mat_list_item, true)
|
|
ret._private.icon = icon
|
|
ret._private.imagebox = wibox.widget.imagebox(icon)
|
|
ret._private.size = size
|
|
return ret
|
|
end
|
|
|
|
function mat_list_item.mt:__call(...)
|
|
return new(...)
|
|
end
|
|
|
|
--@DOC_widget_COMMON@
|
|
|
|
--@DOC_object_COMMON@
|
|
|
|
return setmetatable(mat_list_item, mat_list_item.mt)
|