mirror of
https://github.com/purhan/dotfiles.git
synced 2026-01-15 02:57:59 +08:00
105 lines
3.1 KiB
Lua
105 lines
3.1 KiB
Lua
-- Default widget requirements
|
|
local base = require('wibox.widget.base')
|
|
local gtable = require('gears.table')
|
|
local setmetatable = setmetatable
|
|
local dpi = require('beautiful').xresources.apply_dpi
|
|
|
|
-- Commons requirements
|
|
local wibox = require('wibox')
|
|
local gears = require('gears')
|
|
local beautiful = require('beautiful')
|
|
local mat_colors = require('theme.mat-colors')
|
|
-- Local declarations
|
|
|
|
local mat_slider = {mt = {}}
|
|
|
|
local properties = {read_only = false}
|
|
|
|
function mat_slider:set_value(value)
|
|
if self._private.value ~= value then
|
|
self._private.value = value
|
|
self._private.progress_bar:set_value(self._private.value)
|
|
self._private.slider:set_value(self._private.value)
|
|
self:emit_signal('property::value')
|
|
-- self:emit_signal('widget::layout_changed')
|
|
end
|
|
end
|
|
|
|
function mat_slider:get_value(value) return self._private.value end
|
|
|
|
function mat_slider:set_read_only(value)
|
|
if self._private.read_only ~= value then
|
|
self._private.read_only = value
|
|
self:emit_signal('property::read_only')
|
|
self:emit_signal('widget::layout_changed')
|
|
end
|
|
end
|
|
|
|
function mat_slider:get_read_only(value) return self._private.read_only end
|
|
|
|
function mat_slider:layout(_, width, height)
|
|
local layout = {}
|
|
table.insert(layout,
|
|
base.place_widget_at(self._private.progress_bar, 0, dpi(21),
|
|
width, height - dpi(42)))
|
|
if (not self._private.read_only) then
|
|
table.insert(layout, base.place_widget_at(self._private.slider, 0,
|
|
dpi(6), width,
|
|
height - dpi(12)))
|
|
end
|
|
return layout
|
|
end
|
|
|
|
function mat_slider:draw(_, cr, width, height)
|
|
if (self._private.read_only) then self._private.slider.forced_height = 0 end
|
|
end
|
|
|
|
function mat_slider:fit(_, width, height) return width, height end
|
|
|
|
local function new(args)
|
|
local ret = base.make_widget(nil, nil, {enable_properties = true})
|
|
|
|
gtable.crush(ret._private, args or {})
|
|
|
|
gtable.crush(ret, mat_slider, true)
|
|
|
|
ret._private.progress_bar = wibox.widget {
|
|
max_value = 100,
|
|
value = 25,
|
|
forced_height = dpi(6),
|
|
paddings = 0,
|
|
shape = gears.shape.rounded_rect,
|
|
background_color = beautiful.background.hue_800,
|
|
color = beautiful.primary.hue_400,
|
|
widget = wibox.widget.progressbar
|
|
}
|
|
|
|
ret._private.slider = wibox.widget {
|
|
forced_height = dpi(8),
|
|
bar_shape = gears.shape.rounded_rect,
|
|
bar_height = 0,
|
|
bar_color = beautiful.primary.hue_500,
|
|
handle_color = beautiful.primary.hue_300,
|
|
handle_shape = gears.shape.circle,
|
|
handle_border_color = '#00000012',
|
|
handle_border_width = dpi(3),
|
|
value = 25,
|
|
widget = wibox.widget.slider
|
|
}
|
|
|
|
ret._private.slider:connect_signal('property::value', function()
|
|
ret:set_value(ret._private.slider.value)
|
|
end)
|
|
|
|
ret._private.read_only = false
|
|
|
|
return ret
|
|
end
|
|
|
|
function mat_slider.mt:__call(...) return new(...) end
|
|
|
|
-- @DOC_widget_COMMON@
|
|
|
|
-- @DOC_object_COMMON@
|
|
|
|
return setmetatable(mat_slider, mat_slider.mt)
|