Files
Modus/mine/modules/desktopwidget.py
2026-07-12 18:56:10 +05:45

77 lines
2.4 KiB
Python

from fabric.widgets.box import Box
from fabric.widgets.datetime import DateTime
from fabric.widgets.wayland import WaylandWindow as Window
import config.data as data
from services import has_config_changed, on_config_change
class ClockWidget(Box):
def __init__(self, **kwargs):
cfg = data.DATA()
use_12hr = cfg["desktop_widget_time_format"] == "12 hrs"
time_fmt = "%I:%M %p" if use_12hr else "%H:%M"
date_fmt = cfg["desktop_widget_date_format"]
self._date = DateTime(name="date", formatters=date_fmt, interval=10000)
self._time = DateTime(name="time", formatters=time_fmt)
children = [self._date, self._time]
super().__init__(
orientation="v",
name="clock-widget",
children=children,
**kwargs,
)
def apply_config(self):
cfg = data.DATA()
use_12hr = cfg["desktop_widget_time_format"] == "12 hrs"
time_fmt = "%I:%M %p" if use_12hr else "%H:%M"
date_fmt = cfg["desktop_widget_date_format"]
self._time.formatters = [time_fmt]
self._time.interval = self._time.interval
self._date.formatters = [date_fmt]
self._date.interval = self._date.interval
class DesktopWidget(Window):
def __init__(self, **kwargs):
cfg = data.DATA()
self._clock = ClockWidget()
super().__init__(
name="clock",
layer="bottom",
anchor=cfg["desktop_widget_anchor"],
margin=cfg["desktop_widget_margin"],
exclusivity="none",
child=self._clock,
pass_through=True,
all_visible=True,
visible=cfg["desktop_widget_enabled"],
)
on_config_change(self._on_config_change)
def _on_config_change(self, new_config, old_config):
config_paths = [
"desktop_widget.enabled",
"desktop_widget.time_format",
"desktop_widget.date_format",
"desktop_widget.anchor",
"desktop_widget.margin",
]
if not any(has_config_changed(old_config, new_config, p) for p in config_paths):
return
cfg = data.DATA()
self.set_visible(cfg["desktop_widget_enabled"])
self.set_property("anchor", cfg["desktop_widget_anchor"])
self.set_property("margin", cfg["desktop_widget_margin"])
self._clock.apply_config()