Files
dotfiles/ignis/backup_30.03.2025/modules/control_center/qs_button.py
T
2025-03-31 20:14:11 +02:00

66 lines
1.8 KiB
Python

from ignis.widgets import Widget
from gi.repository import GObject # type: ignore
from typing import Callable
from ignis.gobject import Binding
from .menu import Menu
class QSButton(Widget.Button):
def __init__(
self,
label: str | Binding,
icon_name: str | Binding,
on_activate: Callable | None = None,
on_deactivate: Callable | None = None,
menu: Menu | None = None,
**kwargs,
):
self.on_activate = on_activate
self.on_deactivate = on_deactivate
self._active = False
self._menu = menu
super().__init__(
child=Widget.Box(
child=[
Widget.Icon(image=icon_name),
Widget.Label(label=label, css_classes=["qs-button-label"]),
Widget.Arrow(
halign="end",
hexpand=True,
pixel_size=20,
rotated=menu.bind("reveal_child"),
)
if menu
else None,
]
),
on_click=self.__callback,
css_classes=["qs-button", "unset"],
hexpand=True,
**kwargs,
)
def __callback(self, *args) -> None:
if self.active:
if self.on_deactivate:
self.on_deactivate(self)
else:
if self.on_activate:
self.on_activate(self)
@GObject.Property
def active(self) -> bool:
return self._active
@active.setter
def active(self, value: bool) -> None:
self._active = value
if value:
self.add_css_class("active")
else:
self.remove_css_class("active")
@GObject.Property
def menu(self) -> Menu | None:
return self._menu