diff options
author | Pavel Makhov <pmakhov@theoctavegroup.com> | 2019-12-12 16:26:46 -0500 |
---|---|---|
committer | Pavel Makhov <pmakhov@theoctavegroup.com> | 2019-12-12 16:26:46 -0500 |
commit | 7dd6fe0affa22b8cee837700e918bef984fc4721 (patch) | |
tree | 98fe90ab733ed16b8b79f4e9f4d8b20c4022302e | |
parent | f6c76d7a51e7e6bc0a25dd301a4a7b587b315af9 (diff) |
nord theme for calendar widget + mouse support
-rw-r--r-- | calendar-widget/calendar.lua | 233 |
1 files changed, 136 insertions, 97 deletions
diff --git a/calendar-widget/calendar.lua b/calendar-widget/calendar.lua index 773e607..60fcb14 100644 --- a/calendar-widget/calendar.lua +++ b/calendar-widget/calendar.lua @@ -1,8 +1,8 @@ ------------------------------------------------- --- Jira Widget for Awesome Window Manager --- Shows the number of currently assigned issues +-- Calendar Widget for Awesome Window Manager +-- Shows the current month and supports scroll up/down to switch month -- 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 -- @copyright 2019 Pavel Makhov @@ -21,108 +21,147 @@ local gs = require("gears.string") local calendar_widget = {} -local function worker(args) - - local styles = {} - local function rounded_shape(size, partial) - if partial then - return function(cr, width, height) - gears.shape.partially_rounded_rect(cr, width, height, - false, true, false, true, 5) - end - else - return function(cr, width, height) - gears.shape.rounded_rect(cr, width, height, size) - end +local styles = {} +local function rounded_shape(size, partial) + if partial then + return function(cr, width, height) + gears.shape.partially_rounded_rect(cr, width, height, + false, true, false, true, 5) end - end - styles.month = { padding = 4, - bg_color = '#3B4252', - border_width = 2, - --shape = rounded_shape(10) - } - styles.normal = { shape = rounded_shape(4) } - styles.focus = { fg_color = '#000000', - bg_color = '#88C0D0', - markup = function(t) return '<b>' .. t .. '</b>' end, - shape = rounded_shape(4) - } - styles.header = { fg_color = '#8FBCBB', - markup = function(t) return '<b>' .. t .. '</b>' end, - --shape = rounded_shape(10) - bg_color = '#3B4252' - } - styles.weekday = { fg_color = '#88C0D0', - markup = function(t) return '<b>' .. t .. '</b>' end, - bg_color = '#3B4252', - --shape = rounded_shape(4) - } - local function decorate_cell(widget, flag, date) - if flag=='monthheader' and not styles.monthheader then - flag = 'header' + else + return function(cr, width, height) + gears.shape.rounded_rect(cr, width, height, size) end - local props = styles[flag] or {} - if props.markup and widget.get_text and widget.set_markup then - widget:set_markup(props.markup(widget:get_text())) + end +end +styles.month = { padding = 4, + bg_color = '#3B4252', + border_width = 0, +} +styles.normal = { + markup = function(t) return t end, + shape = rounded_shape(4) +} +styles.focus = { fg_color = '#000000', + bg_color = '#88C0D0', + markup = function(t) return '<b>' .. t .. '</b>' end, + shape = rounded_shape(4) +} +styles.header = { fg_color = '#8FBCBB', + markup = function(t) return '<b>' .. t .. '</b>' end, + --shape = rounded_shape(10) + bg_color = '#3B4252' +} +styles.weekday = { fg_color = '#88C0D0', + markup = function(t) return '<b>' .. t .. '</b>' end, + bg_color = '#3B4252', + --shape = rounded_shape(4) +} + +local function decorate_cell(widget, flag, date) + if flag=='monthheader' and not styles.monthheader then + flag = 'header' + end + + if flag == 'focus' then + local a = os.date('*t') + if a.month ~= date.month then + flag = 'normal' end - -- Change bg color for weekends - local d = {year=date.year, month=(date.month or 1), day=(date.day or 1)} - local weekday = tonumber(os.date('%w', os.time(d))) - local default_bg = (weekday==0 or weekday==6) and '#2E3440' or '#3B4252' - local ret = wibox.widget { - { - { - widget, - halign = 'center', - widget = wibox.container.place - }, - margins = (props.padding or 2) + (props.border_width or 0), - widget = wibox.container.margin - }, - shape = props.shape, - shape_border_color = props.border_color or '#b9214f', - shape_border_width = props.border_width or 0, - fg = props.fg_color or '#D8DEE9', - bg = props.bg_color or default_bg, - widget = wibox.container.background - } - return ret end - local popup = awful.popup{ - visible = true, - ontop = true, - visible = false, - shape = gears.shape.rounded_rect, - border_width = 1, - border_color = beautiful.bg_focus, - maximum_width = 400, - preferred_positions = top, - offset = { y = 5 }, - widget = wibox.widget { - date = os.date('*t'), - fn_embed = decorate_cell, - widget = wibox.widget.calendar.month, - long_weekdays = true - } + local props = styles[flag] or {} + if props.markup and widget.get_text and widget.set_markup then + widget:set_markup(props.markup(widget:get_text())) + end + -- Change bg color for weekends + local d = {year=date.year, month=(date.month or 1), day=(date.day or 1)} + local weekday = tonumber(os.date('%w', os.time(d))) + local default_bg = (weekday==0 or weekday==6) and '#2E3440' or '#3B4252' + local ret = wibox.widget { + { + { + widget, + halign = 'center', + widget = wibox.container.place + }, + margins = (props.padding or 2) + (props.border_width or 0), + widget = wibox.container.margin + }, + shape = props.shape, + shape_border_color = props.border_color or '#b9214f', + shape_border_width = props.border_width or 0, + fg = props.fg_color or '#D8DEE9', + bg = props.bg_color or default_bg, + widget = wibox.container.background } - calendar_widget = wibox.widget.textbox() - calendar_widget:set_text('calendar') - - calendar_widget:buttons( - awful.util.table.join( - awful.button({}, 1, function() - if popup.visible then - popup.visible = not popup.visible - else - popup:move_next_to(mouse.current_widget_geometry) - end - end) - ) +-- ret:connect_signal("mouse::enter", function(c) naughty.notify{text = 'asd ' .. flag} end) + + return ret +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{ + ontop = true, + visible = false, + shape = gears.shape.rounded_rect, + preferred_positions = top, + offset = { y = 5 }, + widget = {} +} + +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: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 - return calendar_widget +local function toggle() + calendar_widget.toggle() end -return setmetatable(calendar_widget, { __call = function(_, ...) return worker(...) end }) +calendar_widget:buttons( + awful.util.table.join( + awful.button({}, 1, function() + toggle() + end) + ) +) + +return calendar_widget |