aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/ui/statusbar/panel/widgets/calendar.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/awesome/ui/statusbar/panel/widgets/calendar.lua')
-rw-r--r--.config/awesome/ui/statusbar/panel/widgets/calendar.lua143
1 files changed, 79 insertions, 64 deletions
diff --git a/.config/awesome/ui/statusbar/panel/widgets/calendar.lua b/.config/awesome/ui/statusbar/panel/widgets/calendar.lua
index ddbffc0..c3f0424 100644
--- a/.config/awesome/ui/statusbar/panel/widgets/calendar.lua
+++ b/.config/awesome/ui/statusbar/panel/widgets/calendar.lua
@@ -1,14 +1,36 @@
-local awful = require "awful"
local phosphor = require "assets.phosphor"
-local qbind = require "quarrel.bind"
local qcolor = require "quarrel.color"
-local qmarkup = require "quarrel.markup"
local qui = require "quarrel.ui"
local wibox = require "wibox"
-local weekday_map = { 7, 1, 2, 3, 4, 5, 6 }
+local WEEKDAY_MAP = { 7, 1, 2, 3, 4, 5, 6 }
-local calendar = wibox.widget(qui.styled {
+local M = {}
+
+local l_grid = wibox.widget {
+ layout = wibox.layout.grid,
+ forced_num_rows = 7,
+ forced_num_cols = 7,
+ border_width = {
+ inner = qui.BORDER_WIDTH,
+ outer = 0,
+ },
+ border_color = qcolor.palette.border.variant,
+}
+
+local w_month = wibox.widget {
+ widget = wibox.widget.textbox,
+ text = "-",
+}
+
+local w_year = wibox.widget {
+ widget = wibox.widget.textbox,
+ text = "-",
+}
+
+local offset = 0
+
+M.widget = wibox.widget(qui.styled {
widget = wibox.container.background,
bg = qcolor.palette.bg.high,
{
@@ -16,18 +38,7 @@ local calendar = wibox.widget(qui.styled {
margins = qui.BORDER_WIDTH,
{
{
- {
- layout = wibox.layout.grid,
- forced_num_rows = 7,
- forced_num_cols = 7,
- -- spacing = (qui.PADDING) / 2,
- border_width = {
- inner = qui.BORDER_WIDTH,
- outer = 0,
- },
- border_color = qcolor.palette.border.variant,
- id = "grid",
- },
+ l_grid,
{
widget = wibox.container.background,
bg = qcolor.palette.border(),
@@ -43,9 +54,17 @@ local calendar = wibox.widget(qui.styled {
widget = wibox.container.place,
fill_horizontal = true,
{
- widget = wibox.widget.textbox,
- text = "05\n25",
- },
+ {
+ widget = wibox.container.place,
+ w_month,
+ },
+ qui.separator {
+ size = qui.BORDER_WIDTH
+ },
+ w_year,
+ layout = wibox.layout.fixed.vertical,
+ spacing = qui.PADDING
+ }
},
nil,
qui.styled {
@@ -86,7 +105,6 @@ local calendar = wibox.widget(qui.styled {
},
},
layout = wibox.layout.fixed.vertical,
- -- spacing = qui.PADDING
},
},
layout = wibox.layout.align.vertical,
@@ -97,11 +115,32 @@ local calendar = wibox.widget(qui.styled {
},
})
-local grid = calendar:get_children_by_id("grid")[1]
+function M:render(grid)
+ for i, row in ipairs(grid) do
+ for j, col in ipairs(row) do
+ local widget = l_grid:get_widgets_at(i, j)[1]
+ widget.widget.widget.widget.text = col[1]
+ if col[2] then
+ widget.bg = qcolor.palette.yellow()
+ widget.fg = qcolor.palette.bg()
+ elseif j % 6 == 0 or j % 7 == 0 then
+ widget.bg = col[3] and qcolor.palette.bg.highest or qcolor.palette.bg.high
+ else
+ widget.bg = col[3] and qcolor.palette.bg.high or qcolor.palette.bg()
+ end
+
+ if i == 1 then
+ widget.fg = qcolor.palette.fg()
+ elseif not col[2] then
+ widget.fg = qcolor.palette.fg.low
+ end
+ end
+ end
+end
-- Logic heavily inspired by https://github.com/Sinomor/dotfiles/blob/e409f9a84bf40daf1e39c0179ec749232ed827c9/home/.config/awesome/ui/control/moment/calendar.lua#L134-L173
-function calendar:compute_grid(year, month)
- local calendar_table = {
+function M:compute(year, month)
+ local grid = {
{
{ "Mo", false, true },
{ "Tu", false, true },
@@ -125,7 +164,7 @@ function calendar:compute_grid(year, month)
local days = last_day.day
local prev_days = os.date("*t", os.time { year = year, month = month, day = 0 })
- local prev_offset = weekday_map[first_day.wday] - 1
+ local prev_offset = WEEKDAY_MAP[first_day.wday] - 1
local prev_month = month - 1 == -1 and 12 or month - 1
local prev_year = prev_month == 12 and year - 1 or year
@@ -133,7 +172,7 @@ function calendar:compute_grid(year, month)
for offset = prev_offset, 1, -1 do
local day = prev_days.day - offset + 1
table.insert(
- calendar_table[2],
+ grid[2],
{ day, day == current.day and prev_month == current.month and prev_year == current.year, false }
)
end
@@ -141,10 +180,10 @@ function calendar:compute_grid(year, month)
do
local row = 2
- local weekday = weekday_map[first_day.wday]
+ local weekday = WEEKDAY_MAP[first_day.wday]
for day = 1, days do
table.insert(
- calendar_table[row],
+ grid[row],
{ day, day == current.day and month == current.month and year == current.year, true }
)
if weekday == 7 then
@@ -159,7 +198,7 @@ function calendar:compute_grid(year, month)
local next_year = next_month == 1 and year + 1 or year
for day = 1, 42 - prev_offset - days do
table.insert(
- calendar_table[row],
+ grid[row],
{ day, day == current.day and next_month + 1 == current.month and next_year == current.year, false }
)
if weekday == 7 then
@@ -171,35 +210,16 @@ function calendar:compute_grid(year, month)
end
end
- for i, row in ipairs(calendar_table) do
- for j, col in ipairs(row) do
- local widget = grid:get_widgets_at(i, j)[1]
- widget.widget.widget.widget.text = col[1]
- if col[2] then
- widget.bg = qcolor.palette.yellow()
- widget.fg = qcolor.palette.bg()
- elseif j % 6 == 0 or j % 7 == 0 then
- widget.bg = col[3] and qcolor.palette.bg.highest or qcolor.palette.bg.high
- else
- widget.bg = col[3] and qcolor.palette.bg.high or qcolor.palette.bg()
- end
-
- if i == 1 then
- widget.fg = qcolor.palette.fg()
- elseif not col[2] then
- -- widget.fg = col[3] and qcolor.palette.fg() or qcolor.palette.fg.low
- widget.fg = qcolor.palette.fg.low
- end
- end
- end
+ w_month.text = month
+ w_year.text = year
+ self:render(grid)
end
-local cells = {}
-local function cell(content)
- local widget = wibox.widget {
+-- Set up the widget
+for _ = 1, 49 do
+ local cell = wibox.widget {
widget = wibox.container.background,
bg = qcolor.palette.bg.high,
- -- shape = qui.shape,
{
widget = wibox.container.margin,
margins = qui.PADDING * 1.5,
@@ -209,20 +229,15 @@ local function cell(content)
forced_width = qui.CHAR_HEIGHT,
{
widget = wibox.widget.textbox,
- markup = content,
+ markup = "",
},
},
},
}
- table.insert(cells, widget)
-end
-
-for _ = 1, 49 do
- cell()
+ l_grid:add(cell)
end
-grid:add(table.unpack(cells))
local current_time = os.date "*t"
-calendar:compute_grid(current_time.year, current_time.month)
-grid:add_row_border(2, qui.BORDER_WIDTH, { color = qcolor.palette.border() })
+M:compute(current_time.year, current_time.month)
+l_grid:add_row_border(2, qui.BORDER_WIDTH, { color = qcolor.palette.border() })
-return calendar
+return M