133 lines
4.0 KiB
Python
133 lines
4.0 KiB
Python
from fabric.hyprland.widgets import Language
|
|
from fabric.system_tray.widgets import SystemTray
|
|
from fabric.utils import FormattedString, bulk_replace
|
|
from fabric.widgets.box import Box
|
|
from fabric.widgets.button import Button
|
|
from fabric.widgets.centerbox import CenterBox
|
|
from fabric.widgets.datetime import DateTime
|
|
from fabric.widgets.label import Label
|
|
from fabric.widgets.wayland import WaylandWindow as Window
|
|
from gi.repository import GLib
|
|
from modules.bar.components import (
|
|
BatteryLabel,
|
|
BluetoothIndicator,
|
|
MicrophoneIndicator,
|
|
NetworkIndicator,
|
|
SystemInfo,
|
|
TaskBar,
|
|
VolumeIndicator,
|
|
workspace,
|
|
)
|
|
from snippets import MaterialIcon
|
|
from services import sc
|
|
|
|
|
|
class Bar(Window):
|
|
def __init__(self):
|
|
self.workspaces = Button(child=workspace, name="workspaces")
|
|
self.language = Language(
|
|
formatter=FormattedString(
|
|
"{replace_lang(language)}",
|
|
replace_lang=lambda lang: bulk_replace(
|
|
lang,
|
|
(r".*Eng.*", r".*Nep.*"),
|
|
("en", "np"),
|
|
regex=True,
|
|
),
|
|
),
|
|
)
|
|
|
|
self.recording_indicator = Button(
|
|
name="recording-indicator",
|
|
child=MaterialIcon("stop_circle", 16),
|
|
visible=False,
|
|
on_clicked=lambda *_: sc.screencast_stop(),
|
|
)
|
|
|
|
sc.connect(
|
|
"recording", lambda _, status: self.on_recording_status_change(status)
|
|
)
|
|
|
|
self.date_time = DateTime(formatters=["%-I:%M %a %d %b"], name="datetime")
|
|
|
|
self.battery = BatteryLabel(name="battery")
|
|
self.volume = VolumeIndicator()
|
|
self.bluetooth = BluetoothIndicator()
|
|
self.network = NetworkIndicator()
|
|
self.microphone = MicrophoneIndicator()
|
|
self.taskbar = TaskBar()
|
|
self.info = SystemInfo()
|
|
self.tray = SystemTray(name="tray", icon_size=16, spacing=4)
|
|
self.launcher = Button(
|
|
name="logo",
|
|
child=Label(name="logo-name", label=" "),
|
|
on_clicked=lambda *_: GLib.spawn_command_line_async(
|
|
"fabric-cli exec modus 'launcher.open(\"launcher\")'"
|
|
),
|
|
)
|
|
|
|
self.applets = Box(
|
|
name="applets",
|
|
spacing=4,
|
|
orientation="h",
|
|
children=[
|
|
self.language,
|
|
self.bluetooth,
|
|
self.network,
|
|
self.volume,
|
|
self.microphone,
|
|
],
|
|
)
|
|
|
|
self.bar = CenterBox(
|
|
name="bar",
|
|
start_children=Box(
|
|
name="start-container",
|
|
spacing=8,
|
|
orientation="h",
|
|
children=[
|
|
self.launcher,
|
|
self.workspaces,
|
|
self.info,
|
|
],
|
|
),
|
|
center_children=Box(
|
|
name="center-container",
|
|
spacing=8,
|
|
orientation="h",
|
|
children=self.taskbar,
|
|
),
|
|
end_children=Box(
|
|
name="end-container",
|
|
spacing=8,
|
|
orientation="h",
|
|
children=[
|
|
self.recording_indicator,
|
|
self.tray,
|
|
self.battery,
|
|
self.applets,
|
|
self.date_time,
|
|
],
|
|
),
|
|
)
|
|
super().__init__(
|
|
layer="top",
|
|
anchor="left bottom right",
|
|
exclusivity="auto",
|
|
visible=True,
|
|
child=self.bar,
|
|
)
|
|
|
|
self.hidden = False
|
|
|
|
def on_recording_status_change(self, status):
|
|
print(f"Recording status changed: {status}")
|
|
self.recording_indicator.set_visible(status)
|
|
|
|
def toggle_hidden(self):
|
|
self.hidden = not self.hidden
|
|
if self.hidden:
|
|
self.bar.add_style_class("hidden")
|
|
else:
|
|
self.bar.remove_style_class("hidden")
|