77 lines
2.4 KiB
Python
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()
|