dotfiles/awes2/layout/left-panel/init.lua

125 lines
2.5 KiB
Lua

local awful = require('awful')
local beautiful = require('beautiful')
local wibox = require('wibox')
local apps = require('configuration.apps')
local dpi = require('beautiful').xresources.apply_dpi
local left_panel = function(screen)
local action_bar_width = dpi(45)
local panel_content_width = dpi(350)
local panel =
wibox {
screen = screen,
width = action_bar_width,
type = 'dock',
height = screen.geometry.height - 500,
x = screen.geometry.x,
y = screen.geometry.y + 250,
ontop = false,
bg = beautiful.background,
fg = beautiful.fg_normal
}
panel.opened = false
panel:struts(
{
left = action_bar_width
}
)
local backdrop = wibox {
ontop = true,
screen = screen,
bg = beautiful.transparent,
type = 'utility',
x = screen.geometry.x,
y = screen.geometry.y,
width = screen.geometry.width,
height = screen.geometry.height
}
function panel:run_rofi()
_G.awesome.spawn(
apps.default.rofiglobal,
false,
false,
false,
false,
function()
panel:toggle()
end
)
-- Hide panel content if rofi global search is opened
panel:get_children_by_id('panel_content')[1].visible = false
end
local openPanel = function(should_run_rofi)
panel.width = action_bar_width + panel_content_width
backdrop.visible = true
panel.visible = false
panel.visible = true
panel:get_children_by_id('panel_content')[1].visible = true
if should_run_rofi then
panel:run_rofi()
end
panel:emit_signal('opened')
end
local closePanel = function()
panel.width = action_bar_width
panel:get_children_by_id('panel_content')[1].visible = false
backdrop.visible = false
panel:emit_signal('closed')
end
-- Hide this panel when app dashboard is called.
function panel:HideDashboard()
closePanel()
end
function panel:toggle(should_run_rofi)
self.opened = not self.opened
if self.opened then
openPanel(should_run_rofi)
else
closePanel()
end
end
backdrop:buttons(
awful.util.table.join(
awful.button(
{},
1,
function()
panel:toggle()
end
)
)
)
panel:setup {
layout = wibox.layout.align.horizontal,
nil,
{
id = 'panel_content',
bg = beautiful.transparent,
widget = wibox.container.background,
visible = false,
forced_width = panel_content_width,
{
require('layout.left-panel.dashboard')(screen, panel),
layout = wibox.layout.stack
}
},
require('layout.left-panel.action-bar')(screen, panel, action_bar_width)
}
return panel
end
return left_panel