155 lines
4.7 KiB
Python
155 lines
4.7 KiB
Python
from fabric.system_tray.widgets import SystemTray
|
|
from fabric.utils import get_relative_path
|
|
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.revealer import Revealer
|
|
from fabric.widgets.svg import Svg
|
|
from widgets.wayland import WaylandWindow as Window
|
|
|
|
from modules.panel.components.enhanced_system_tray import apply_enhanced_system_tray
|
|
from modules.panel.components.indicators import (
|
|
BluetoothIndicator,
|
|
NetworkIndicator,
|
|
BatteryIndicator,
|
|
)
|
|
from modules.panel.components.menubar import MenuBar
|
|
from modules.panel.components.recording_indicator import RecordingIndicator
|
|
|
|
from modules.controlcenter.main import ModusControlCenter
|
|
from widgets.mousecapture import MouseCapture
|
|
|
|
# Apply enhanced system tray icon handling
|
|
apply_enhanced_system_tray()
|
|
|
|
|
|
class Panel(Window):
|
|
def __init__(self, **kwargs):
|
|
super().__init__(
|
|
name="bar",
|
|
title="modus",
|
|
layer="top",
|
|
anchor="left top right",
|
|
exclusivity="auto",
|
|
visible=False,
|
|
)
|
|
|
|
self.launcher = kwargs.get("launcher", None)
|
|
self.menubar = MenuBar(parent_window=self)
|
|
|
|
self.imac = Button(
|
|
name="panel-button",
|
|
child=Svg(
|
|
size=24,
|
|
svg_file=get_relative_path("../../config/assets/icons/logo.svg"),
|
|
),
|
|
on_clicked=lambda *_: self.menubar.show_system_dropdown(self.imac),
|
|
)
|
|
|
|
self.tray = SystemTray(name="system-tray", spacing=4, icon_size=20)
|
|
|
|
self.tray_revealer = Revealer(
|
|
name="tray-revealer",
|
|
child=self.tray,
|
|
child_revealed=False,
|
|
transition_type="slide-left",
|
|
transition_duration=300,
|
|
)
|
|
|
|
self.chevron_button = Button(
|
|
name="panel-button",
|
|
child=Svg(
|
|
size=18,
|
|
svg_file=get_relative_path(
|
|
"../../config/assets/icons/chevron-right.svg"
|
|
),
|
|
),
|
|
on_clicked=self.toggle_tray,
|
|
)
|
|
|
|
self.indicators = Box(
|
|
name="indicators",
|
|
orientation="h",
|
|
spacing=4,
|
|
children=[
|
|
BatteryIndicator(),
|
|
NetworkIndicator(),
|
|
BluetoothIndicator(),
|
|
],
|
|
)
|
|
|
|
self.search = Button(
|
|
name="panel-button",
|
|
on_clicked=lambda *_: self.search_apps(),
|
|
child=Svg(
|
|
size=22,
|
|
svg_file=get_relative_path("../../config/assets/icons/search.svg"),
|
|
),
|
|
)
|
|
|
|
self.control_center = MouseCapture(
|
|
layer="top", child_window=ModusControlCenter()
|
|
)
|
|
|
|
self.control_center_button = Button(
|
|
name="control-center-button",
|
|
style_classes="button",
|
|
on_clicked=self.control_center.toggle_mousecapture,
|
|
child=Svg(
|
|
size=25,
|
|
svg_file=get_relative_path(
|
|
"../../config/assets/icons/control-center.svg"
|
|
),
|
|
),
|
|
)
|
|
|
|
self.recording_indicator = RecordingIndicator()
|
|
|
|
self.children = CenterBox(
|
|
name="panel",
|
|
start_children=Box(
|
|
name="modules-left",
|
|
children=[
|
|
self.imac,
|
|
self.menubar,
|
|
],
|
|
),
|
|
center_children=Box(
|
|
name="modules-center",
|
|
children=self.recording_indicator,
|
|
),
|
|
end_children=Box(
|
|
name="modules-right",
|
|
spacing=4,
|
|
orientation="h",
|
|
children=[
|
|
self.tray_revealer,
|
|
self.chevron_button,
|
|
self.indicators,
|
|
self.search,
|
|
self.control_center_button,
|
|
DateTime(name="date-time", formatters=["%a %b %d %I:%M"]),
|
|
],
|
|
),
|
|
)
|
|
|
|
return self.show_all()
|
|
|
|
def search_apps(self):
|
|
self.launcher.show_launcher()
|
|
|
|
def toggle_tray(self, *_):
|
|
current_state = self.tray_revealer.child_revealed
|
|
self.tray_revealer.child_revealed = not current_state
|
|
|
|
if self.tray_revealer.child_revealed:
|
|
self.chevron_button.get_child().set_from_file(
|
|
get_relative_path("../../config/assets/icons/chevron-left.svg")
|
|
)
|
|
else:
|
|
self.chevron_button.get_child().set_from_file(
|
|
get_relative_path("../../config/assets/icons/chevron-right.svg")
|
|
)
|