Source code for ezmsg.qt.visibility
"""Visibility tracking for auto-gating processor graphs."""
from collections.abc import Callable
from qtpy import QtCore
[docs]
class VisibilityFilter(QtCore.QObject):
"""
Event filter that tracks widget visibility changes.
Installs on a QWidget and calls a callback when the widget
becomes visible or hidden.
"""
[docs]
def __init__(
self,
callback: Callable[[bool], None],
parent: QtCore.QObject | None = None,
):
super().__init__(parent)
self._callback = callback
self._last_visible: bool | None = None
[docs]
def eventFilter(self, obj: QtCore.QObject, event: QtCore.QEvent) -> bool:
"""Filter show/hide events."""
if event.type() == QtCore.QEvent.Type.Show:
if self._last_visible is not True:
self._last_visible = True
self._callback(True)
elif event.type() == QtCore.QEvent.Type.Hide:
if self._last_visible is not False:
self._last_visible = False
self._callback(False)
return False # Don't consume the event