159 lines
3.7 KiB
Lua
159 lines
3.7 KiB
Lua
local awful = require "awful"
|
|
local gears = require "gears"
|
|
local wibox = require "wibox"
|
|
local beautiful = require "beautiful"
|
|
local dpi = beautiful.xresources.apply_dpi
|
|
|
|
local rubato = require "lib.rubato"
|
|
local helpers = require "helpers"
|
|
|
|
-- Var
|
|
local width = dpi(410)
|
|
local height = awful.screen.focused().geometry.height - dpi(100)
|
|
|
|
-- Helper
|
|
-----------
|
|
|
|
local function round_widget(radius)
|
|
return function(cr,w,h)
|
|
gears.shape.rounded_rect(cr,w,h,radius)
|
|
end
|
|
end
|
|
|
|
local function center_widget(widgets)
|
|
return wibox.widget {
|
|
nil,
|
|
{
|
|
nil,
|
|
widgets,
|
|
expand = 'none',
|
|
layout = wibox.layout.align.horizontal,
|
|
},
|
|
expand = 'none',
|
|
layout = wibox.layout.align.vertical,
|
|
}
|
|
end
|
|
|
|
local function box_widget(widgets, width, height)
|
|
--local centered_widget = center_widget(widgets)
|
|
|
|
return wibox.widget {
|
|
{
|
|
{
|
|
widgets,
|
|
margins = dpi(16),
|
|
widget = wibox.container.margin,
|
|
},
|
|
forced_width = dpi(width),
|
|
forced_height = dpi(height),
|
|
shape = round_widget(8),
|
|
bg = beautiful.bg_focus, --for widget Rounded and Border
|
|
widget = wibox.container.background,
|
|
},
|
|
margins = {left = dpi(20), right = dpi(20)},
|
|
widget = wibox.container.margin,
|
|
}
|
|
end
|
|
|
|
local aa = wibox.widget.textbox()
|
|
|
|
-- Get widgets
|
|
local weather_widget = require "ui.info-panel.weather"
|
|
local profile_widget = require "ui.info-panel.profile"
|
|
--local player_widget = require "ui.info-panel.player" -- Old MPD widget
|
|
|
|
local calendar_widget = require "ui.info-panel.calendar"
|
|
local music_widget = require "ui.info-panel.music-player"
|
|
|
|
-- Combine some widgets
|
|
local weather = box_widget(weather_widget, 380, 180)
|
|
local profile = box_widget(profile_widget, 380, 210)
|
|
--local player = box_widget(player_widget, 380, 150) -- Box MPD widget
|
|
local calendar = box_widget(calendar_widget, 380, 340)
|
|
local music = box_widget(music_widget, 380, 150)
|
|
-- Spacing
|
|
local space = function(height)
|
|
return wibox.widget {
|
|
forced_height = dpi(height),
|
|
layout = wibox.layout.align.horizontal
|
|
}
|
|
end
|
|
|
|
-- Sidebar
|
|
local sidebar = wibox {
|
|
visible = false,
|
|
ontop = true,
|
|
width = width,
|
|
height = height,
|
|
y = dpi(60),
|
|
bg = beautiful.bg_normal,
|
|
border_width = dpi(3),
|
|
border_color = beautiful.xcolorS0,
|
|
}
|
|
|
|
-- Sidebar widget setup
|
|
sidebar : setup {
|
|
{
|
|
profile,
|
|
--player,
|
|
--stats,
|
|
music_widget,
|
|
weather,
|
|
calendar,
|
|
spacing = dpi(20),
|
|
layout = wibox.layout.fixed.vertical,
|
|
},
|
|
margins = { top = dpi(20), bottom = dpi(20)},
|
|
widget = wibox.container.margin,
|
|
}
|
|
|
|
-- Slide animation
|
|
local slide = rubato.timed {
|
|
pos = awful.screen.focused().geometry.x - sidebar.width,
|
|
rate = 60,
|
|
intro = 0.2,
|
|
duration = 0.4,
|
|
subscribed = function(pos)
|
|
sidebar.x = awful.screen.focused().geometry.x + pos
|
|
end
|
|
}
|
|
|
|
-- Timer of sidebar's death
|
|
sidebar.timer = gears.timer {
|
|
timeout = 0.5,
|
|
single_shot = true,
|
|
callback = function()
|
|
sidebar.visible = not sidebar.visible
|
|
end
|
|
}
|
|
--aa.timer = gears.timer { -- Updates the Player every second
|
|
-- timeout = 1,
|
|
-- autostart = false,
|
|
-- callback = function()
|
|
-- awesome.emit_signal("widget::update_player")
|
|
-- end
|
|
--}
|
|
sidebar.shape = function(cr,w,h) --Rounded Corners
|
|
gears.shape.rounded_rect(cr,w,h,14)
|
|
end
|
|
-- Toggle function
|
|
sidebar.toggle = function()
|
|
if sidebar.visible then
|
|
-- aa.timer:stop() -- Stops to Update the Player Signal
|
|
slide.target = awful.screen.focused().geometry.x - sidebar.width
|
|
sidebar.timer:start()
|
|
else
|
|
-- awesome.emit_signal("widget::update_player") -- Updates it before the Timer so it doesn't Jump the Length
|
|
awesome.emit_signal("widget::update_uptime")
|
|
-- aa.timer:start()
|
|
slide.target = awful.screen.focused().geometry.x + dpi(20)
|
|
sidebar.visible = not sidebar.visible
|
|
end
|
|
end
|
|
|
|
-- Get signal to execute the function (if that makes sense)
|
|
awesome.connect_signal("sidebar::toggle", function()
|
|
sidebar.toggle()
|
|
end)
|
|
|
|
return sidebar
|