From 012fcbd771fbe2b53f5e7afa816c47a59608c7e4 Mon Sep 17 00:00:00 2001 From: RickyRister Date: Thu, 15 Jan 2026 22:52:12 -0800 Subject: [PATCH] create class --- cockatrice/CMakeLists.txt | 2 ++ .../utility/visibility_change_listener.cpp | 26 ++++++++++++++ .../utility/visibility_change_listener.h | 35 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 cockatrice/src/interface/widgets/utility/visibility_change_listener.cpp create mode 100644 cockatrice/src/interface/widgets/utility/visibility_change_listener.h diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index c6d962ffb..54e61ed77 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -227,6 +227,8 @@ set(cockatrice_SOURCES src/interface/widgets/utility/custom_line_edit.cpp src/interface/widgets/utility/get_text_with_max.cpp src/interface/widgets/utility/sequence_edit.cpp + src/interface/widgets/utility/visibility_change_listener.cpp + src/interface/widgets/utility/visibility_change_listener.h src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp diff --git a/cockatrice/src/interface/widgets/utility/visibility_change_listener.cpp b/cockatrice/src/interface/widgets/utility/visibility_change_listener.cpp new file mode 100644 index 000000000..38696f775 --- /dev/null +++ b/cockatrice/src/interface/widgets/utility/visibility_change_listener.cpp @@ -0,0 +1,26 @@ +#include "visibility_change_listener.h" + +#include +#include + +VisibilityChangeListener::VisibilityChangeListener(QWidget *targetWidget) + : QObject(targetWidget), targetWidget(targetWidget) +{ + if (targetWidget) { + targetWidget->installEventFilter(this); + } +} + +bool VisibilityChangeListener::eventFilter(QObject *o, QEvent *e) +{ + if (o == targetWidget && !e->spontaneous()) { + if (e->type() == QEvent::Show) { + emit visibilityChanged(true); + } + + if (e->type() == QEvent::Hide) { + emit visibilityChanged(false); + } + } + return false; +} \ No newline at end of file diff --git a/cockatrice/src/interface/widgets/utility/visibility_change_listener.h b/cockatrice/src/interface/widgets/utility/visibility_change_listener.h new file mode 100644 index 000000000..10928caf6 --- /dev/null +++ b/cockatrice/src/interface/widgets/utility/visibility_change_listener.h @@ -0,0 +1,35 @@ +#ifndef COCKATRICE_VISIBILITY_LISTENER_H +#define COCKATRICE_VISIBILITY_LISTENER_H + +#include + +/** + * @brief This filter listens to the visibility changes of a target widget, emitting signals whenever the visibility of + * that widget changes. + */ +class VisibilityChangeListener : public QObject +{ + Q_OBJECT + + QWidget *targetWidget; + +public: + /** + * Creates a new instance of this class, watching the targetWidget. + * This class automatically installs itself as an eventFilter to the targetWidget. + * + * @param targetWidget The widget to watch. Sets that widget as this object's parent. + */ + explicit VisibilityChangeListener(QWidget *targetWidget); + + bool eventFilter(QObject *o, QEvent *e) override; + +signals: + /** + * Emitted whenever the target widget's visibility changes + * @param visible The widget's new visibility + */ + void visibilityChanged(bool visible); +}; + +#endif // COCKATRICE_VISIBILITY_LISTENER_H