335 lines
7.6 KiB
Lua
335 lines
7.6 KiB
Lua
|
local gears = require("gears")
|
||
|
local awful = require("awful")
|
||
|
local wibox = require("wibox")
|
||
|
local beautiful = require("beautiful")
|
||
|
local helpers = require("helpers")
|
||
|
local naughty = require("naughty")
|
||
|
local rubato = require("lib.rubato")
|
||
|
|
||
|
local theme = beautiful.get()
|
||
|
local dpi = beautiful.xresources.apply_dpi
|
||
|
|
||
|
local notifs_text = wibox.widget({
|
||
|
font = helpers.ui.set_font("Bold 20"),
|
||
|
markup = "Notifications",
|
||
|
halign = "center",
|
||
|
widget = wibox.widget.textbox,
|
||
|
})
|
||
|
|
||
|
local notifs_clear = wibox.widget({
|
||
|
markup = helpers.ui.colorize_text(" ", theme.color.red),
|
||
|
font = helpers.ui.set_font("Bold 21"),
|
||
|
halign = "center",
|
||
|
valign = "center",
|
||
|
widget = wibox.widget.textbox,
|
||
|
})
|
||
|
|
||
|
notifs_clear:buttons(gears.table.join(awful.button({}, 1, function()
|
||
|
_G.Notif_center_reset_notifs_container()
|
||
|
end)))
|
||
|
|
||
|
helpers.ui.add_hover_cursor(notifs_clear, "hand2")
|
||
|
|
||
|
local notifs_empty = wibox.widget({
|
||
|
{
|
||
|
nil,
|
||
|
{
|
||
|
nil,
|
||
|
{
|
||
|
markup = helpers.ui.colorize_text("Nothing Here!", theme.color.subtext1),
|
||
|
font = helpers.ui.set_font("Bold 17"),
|
||
|
halign = "center",
|
||
|
valign = "center",
|
||
|
widget = wibox.widget.textbox,
|
||
|
},
|
||
|
layout = wibox.layout.align.vertical,
|
||
|
},
|
||
|
layout = wibox.layout.align.horizontal,
|
||
|
},
|
||
|
forced_height = dpi(730),
|
||
|
widget = wibox.container.background,
|
||
|
bg = theme.color.surface0,
|
||
|
shape = helpers.ui.rrect(8),
|
||
|
})
|
||
|
|
||
|
local notifs_container = wibox.widget({
|
||
|
spacing = dpi(10),
|
||
|
spacing_widget = {
|
||
|
{
|
||
|
shape = helpers.ui.rrect(8),
|
||
|
widget = wibox.container.background,
|
||
|
},
|
||
|
top = dpi(2),
|
||
|
bottom = dpi(2),
|
||
|
left = dpi(6),
|
||
|
right = dpi(6),
|
||
|
widget = wibox.container.margin,
|
||
|
},
|
||
|
forced_width = dpi(320),
|
||
|
forced_height = dpi(730), --Use it like in notifs_empty else it will look weird
|
||
|
layout = wibox.layout.fixed.vertical,
|
||
|
})
|
||
|
|
||
|
local remove_notifs_empty = true
|
||
|
|
||
|
Notif_center_reset_notifs_container = function()
|
||
|
notifs_container:reset(notifs_container)
|
||
|
notifs_container:insert(1, notifs_empty)
|
||
|
remove_notifs_empty = true
|
||
|
end
|
||
|
|
||
|
Notif_center_remove_notif = function(box)
|
||
|
notifs_container:remove_widgets(box)
|
||
|
|
||
|
if #notifs_container.children == 0 then
|
||
|
notifs_container:insert(1, notifs_empty)
|
||
|
remove_notifs_empty = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local create_notif = function(icon, n)
|
||
|
local time = os.date("%H:%M")
|
||
|
local box = {}
|
||
|
|
||
|
box = wibox.widget({
|
||
|
{
|
||
|
{
|
||
|
{
|
||
|
{
|
||
|
image = icon,
|
||
|
resize = true,
|
||
|
clip_shape = helpers.ui.rrect(8),
|
||
|
halign = "center",
|
||
|
valign = "center",
|
||
|
widget = wibox.widget.imagebox,
|
||
|
},
|
||
|
strategy = "exact",
|
||
|
height = dpi(50),
|
||
|
width = dpi(50),
|
||
|
widget = wibox.container.constraint,
|
||
|
},
|
||
|
{
|
||
|
{
|
||
|
nil,
|
||
|
{
|
||
|
{
|
||
|
{
|
||
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
||
|
speed = dpi(50),
|
||
|
{
|
||
|
markup = n.title,
|
||
|
font = helpers.ui.set_font("Bold 9"),
|
||
|
halign = "left",
|
||
|
widget = wibox.widget.textbox,
|
||
|
},
|
||
|
forced_width = dpi(140),
|
||
|
widget = wibox.container.scroll.horizontal,
|
||
|
},
|
||
|
nil,
|
||
|
{
|
||
|
markup = helpers.ui.colorize_text(time, theme.color.subtext1),
|
||
|
halign = "right",
|
||
|
valign = "bottom",
|
||
|
font = helpers.ui.set_font("Bold 10"),
|
||
|
widget = wibox.widget.textbox,
|
||
|
},
|
||
|
expand = "none",
|
||
|
layout = wibox.layout.align.horizontal,
|
||
|
},
|
||
|
{
|
||
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
||
|
speed = dpi(50),
|
||
|
{
|
||
|
markup = n.message,
|
||
|
halign = "left",
|
||
|
widget = wibox.widget.textbox,
|
||
|
},
|
||
|
forced_width = dpi(165),
|
||
|
widget = wibox.container.scroll.horizontal,
|
||
|
},
|
||
|
spacing = dpi(3),
|
||
|
layout = wibox.layout.fixed.vertical,
|
||
|
},
|
||
|
expand = "none",
|
||
|
layout = wibox.layout.align.vertical,
|
||
|
},
|
||
|
left = dpi(17),
|
||
|
widget = wibox.container.margin,
|
||
|
},
|
||
|
layout = wibox.layout.align.horizontal,
|
||
|
},
|
||
|
margins = dpi(15),
|
||
|
widget = wibox.container.margin,
|
||
|
},
|
||
|
forced_height = dpi(85),
|
||
|
widget = wibox.container.background,
|
||
|
bg = theme.color.surface0,
|
||
|
shape = helpers.ui.rrect(8),
|
||
|
})
|
||
|
|
||
|
box:buttons(gears.table.join(awful.button({}, 1, function()
|
||
|
_G.Notif_center_remove_notif(box)
|
||
|
end)))
|
||
|
|
||
|
return box
|
||
|
end
|
||
|
|
||
|
notifs_container:buttons(gears.table.join(
|
||
|
awful.button({}, 4, nil, function()
|
||
|
if #notifs_container.children == 1 then
|
||
|
return
|
||
|
end
|
||
|
notifs_container:insert(1, notifs_container.children[#notifs_container.children])
|
||
|
notifs_container:remove(#notifs_container.children)
|
||
|
end),
|
||
|
|
||
|
awful.button({}, 5, nil, function()
|
||
|
if #notifs_container.children == 1 then
|
||
|
return
|
||
|
end
|
||
|
notifs_container:insert(#notifs_container.children + 1, notifs_container.children[1])
|
||
|
notifs_container:remove(1)
|
||
|
end)
|
||
|
))
|
||
|
|
||
|
notifs_container:insert(1, notifs_empty)
|
||
|
|
||
|
naughty.connect_signal("request::display", function(n)
|
||
|
if #notifs_container.children == 1 and remove_notifs_empty then
|
||
|
notifs_container:reset(notifs_container)
|
||
|
remove_notifs_empty = false
|
||
|
end
|
||
|
|
||
|
local appicon = n.icon or n.app_icon
|
||
|
if not appicon then
|
||
|
appicon = theme.pfp --notification_icon
|
||
|
end
|
||
|
|
||
|
notifs_container:insert(1, create_notif(appicon, n))
|
||
|
end)
|
||
|
|
||
|
local notifs = wibox.widget({
|
||
|
{
|
||
|
{
|
||
|
{
|
||
|
nil,
|
||
|
notifs_text,
|
||
|
notifs_clear,
|
||
|
expand = "none",
|
||
|
layout = wibox.layout.align.horizontal,
|
||
|
},
|
||
|
left = dpi(5),
|
||
|
right = dpi(5),
|
||
|
top = dpi(7),
|
||
|
bottom = dpi(7),
|
||
|
layout = wibox.container.margin,
|
||
|
},
|
||
|
widget = wibox.container.background,
|
||
|
bg = theme.color.surface0,
|
||
|
shape = helpers.ui.rrect(8),
|
||
|
},
|
||
|
notifs_container,
|
||
|
spacing = dpi(20),
|
||
|
layout = wibox.layout.fixed.vertical,
|
||
|
})
|
||
|
|
||
|
local actions = wibox.widget({
|
||
|
{
|
||
|
{
|
||
|
{
|
||
|
widget = require("ui.notif-panel.widgets.vol_slider"),
|
||
|
},
|
||
|
{
|
||
|
widget = require("ui.notif-panel.widgets.mic_slider"),
|
||
|
},
|
||
|
layout = wibox.layout.flex.vertical,
|
||
|
spacing = dpi(1),
|
||
|
},
|
||
|
widget = wibox.container.margin,
|
||
|
top = dpi(20),
|
||
|
bottom = dpi(20),
|
||
|
left = dpi(35),
|
||
|
right = dpi(35),
|
||
|
},
|
||
|
forced_height = dpi(120),
|
||
|
widget = wibox.container.background,
|
||
|
bg = theme.color.surface0,
|
||
|
shape = helpers.ui.rrect(8),
|
||
|
})
|
||
|
|
||
|
-- Sidebar
|
||
|
local action = wibox({
|
||
|
visible = false,
|
||
|
ontop = true,
|
||
|
width = dpi(410),
|
||
|
height = awful.screen.focused().geometry.height - dpi(100),
|
||
|
y = dpi(60),
|
||
|
bg = theme.bg_normal,
|
||
|
border_width = theme.border_width * 2,
|
||
|
border_color = theme.border_normal,
|
||
|
})
|
||
|
|
||
|
-- Sidebar widget setup
|
||
|
action:setup({
|
||
|
{
|
||
|
notifs,
|
||
|
nil,
|
||
|
actions,
|
||
|
spacing = dpi(20),
|
||
|
layout = wibox.layout.align.vertical,
|
||
|
},
|
||
|
margins = {
|
||
|
top = dpi(20),
|
||
|
bottom = dpi(20),
|
||
|
left = dpi(20),
|
||
|
right = dpi(20),
|
||
|
},
|
||
|
widget = wibox.container.margin,
|
||
|
})
|
||
|
|
||
|
-- Slide animation
|
||
|
local slide = rubato.timed({
|
||
|
pos = awful.screen.focused().geometry.x - awful.screen.focused().geometry.width,
|
||
|
rate = 60,
|
||
|
intro = 0.2,
|
||
|
duration = 0.4,
|
||
|
subscribed = function(pos)
|
||
|
action.x = awful.screen.focused().geometry.x - pos
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
-- Timer of action's death
|
||
|
action.timer = gears.timer({
|
||
|
timeout = 0.5,
|
||
|
single_shot = true,
|
||
|
callback = function()
|
||
|
action.visible = not action.visible
|
||
|
end,
|
||
|
})
|
||
|
action.shape = function(cr, w, h) --Rounded Corners
|
||
|
gears.shape.rounded_rect(cr, w, h, 14)
|
||
|
end
|
||
|
|
||
|
-- Toggle function
|
||
|
action.toggle = function()
|
||
|
if action.visible then
|
||
|
slide.target = awful.screen.focused().geometry.x - awful.screen.focused().geometry.width
|
||
|
action.timer:start()
|
||
|
else
|
||
|
awesome.emit_signal("widget::update_vol")
|
||
|
awesome.emit_signal("widget::update_mic")
|
||
|
slide.target = awful.screen.focused().geometry.x
|
||
|
- awful.screen.focused().geometry.width
|
||
|
+ action.width
|
||
|
+ dpi(25)
|
||
|
action.visible = not action.visible
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Get signal to execute the function (if that makes sense)
|
||
|
awesome.connect_signal("action::toggle", function()
|
||
|
action.toggle()
|
||
|
end)
|
||
|
|
||
|
return action
|