nord theme for calendar widget + mouse support

This commit is contained in:
Pavel Makhov 2019-12-12 16:26:46 -05:00
parent f6c76d7a51
commit 7dd6fe0aff
1 changed files with 137 additions and 98 deletions

View File

@ -1,8 +1,8 @@
------------------------------------------------- -------------------------------------------------
-- Jira Widget for Awesome Window Manager -- Calendar Widget for Awesome Window Manager
-- Shows the number of currently assigned issues -- Shows the current month and supports scroll up/down to switch month
-- More details could be found here: -- More details could be found here:
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/jira-widget -- https://github.com/streetturtle/awesome-wm-widgets/tree/master/calendar-widget
-- @author Pavel Makhov -- @author Pavel Makhov
-- @copyright 2019 Pavel Makhov -- @copyright 2019 Pavel Makhov
@ -21,8 +21,6 @@ local gs = require("gears.string")
local calendar_widget = {} local calendar_widget = {}
local function worker(args)
local styles = {} local styles = {}
local function rounded_shape(size, partial) local function rounded_shape(size, partial)
if partial then if partial then
@ -38,10 +36,12 @@ local function worker(args)
end end
styles.month = { padding = 4, styles.month = { padding = 4,
bg_color = '#3B4252', bg_color = '#3B4252',
border_width = 2, border_width = 0,
--shape = rounded_shape(10) }
styles.normal = {
markup = function(t) return t end,
shape = rounded_shape(4)
} }
styles.normal = { shape = rounded_shape(4) }
styles.focus = { fg_color = '#000000', styles.focus = { fg_color = '#000000',
bg_color = '#88C0D0', bg_color = '#88C0D0',
markup = function(t) return '<b>' .. t .. '</b>' end, markup = function(t) return '<b>' .. t .. '</b>' end,
@ -57,10 +57,19 @@ local function worker(args)
bg_color = '#3B4252', bg_color = '#3B4252',
--shape = rounded_shape(4) --shape = rounded_shape(4)
} }
local function decorate_cell(widget, flag, date) local function decorate_cell(widget, flag, date)
if flag=='monthheader' and not styles.monthheader then if flag=='monthheader' and not styles.monthheader then
flag = 'header' flag = 'header'
end end
if flag == 'focus' then
local a = os.date('*t')
if a.month ~= date.month then
flag = 'normal'
end
end
local props = styles[flag] or {} local props = styles[flag] or {}
if props.markup and widget.get_text and widget.set_markup then if props.markup and widget.get_text and widget.set_markup then
widget:set_markup(props.markup(widget:get_text())) widget:set_markup(props.markup(widget:get_text()))
@ -86,43 +95,73 @@ local function worker(args)
bg = props.bg_color or default_bg, bg = props.bg_color or default_bg,
widget = wibox.container.background widget = wibox.container.background
} }
-- ret:connect_signal("mouse::enter", function(c) naughty.notify{text = 'asd ' .. flag} end)
return ret return ret
end end
local cal = wibox.widget {
date = os.date('*t'),
font = 'Play 9',
fn_embed = decorate_cell,
long_weekdays = true,
widget = wibox.widget.calendar.month
}
local popup = awful.popup{ local popup = awful.popup{
visible = true,
ontop = true, ontop = true,
visible = false, visible = false,
shape = gears.shape.rounded_rect, shape = gears.shape.rounded_rect,
border_width = 1,
border_color = beautiful.bg_focus,
maximum_width = 400,
preferred_positions = top, preferred_positions = top,
offset = { y = 5 }, offset = { y = 5 },
widget = wibox.widget { widget = {}
date = os.date('*t'),
fn_embed = decorate_cell,
widget = wibox.widget.calendar.month,
long_weekdays = true
}
} }
popup:buttons(
awful.util.table.join(
awful.button({}, 4, function()
local a = cal:get_date()
a.month = a.month + 1
cal:set_date(nil)
cal:set_date(a)
popup:set_widget(cal)
end),
awful.button({}, 5, function()
local a = cal:get_date()
a.month = a.month - 1
cal:set_date(nil)
cal:set_date(a)
popup:set_widget(cal)
end)
)
)
calendar_widget = wibox.widget.textbox() calendar_widget = wibox.widget.textbox()
calendar_widget:set_text('calendar') calendar_widget:set_text('calendar')
function calendar_widget.toggle()
if popup.visible then
cal:set_date(nil)
popup.visible = not popup.visible
else
cal:set_date(nil)
cal:set_date(os.date('*t'))
popup:set_widget(cal)
popup:move_next_to(mouse.current_widget_geometry)
end
end
local function toggle()
calendar_widget.toggle()
end
calendar_widget:buttons( calendar_widget:buttons(
awful.util.table.join( awful.util.table.join(
awful.button({}, 1, function() awful.button({}, 1, function()
if popup.visible then toggle()
popup.visible = not popup.visible
else
popup:move_next_to(mouse.current_widget_geometry)
end
end) end)
) )
) )
return calendar_widget return calendar_widget
end
return setmetatable(calendar_widget, { __call = function(_, ...) return worker(...) end })