#ifndef EVENTFILTER_HPP__ #define EVENTFILTER_HPP__ #include #include #include #include #include namespace EventFilter { class FocusOut final : public QObject { public: using Filter = std::function; FocusOut(Filter filter, QObject *parent = nullptr) : QObject{parent}, filter_{filter} {} bool eventFilter(QObject *, QEvent *event) override { if (event->type() == QEvent::FocusOut) filter_(); return false; } private: Filter filter_; }; class EscapeKeyPress final : public QObject { public: using Filter = std::function; EscapeKeyPress(Filter filter, QObject *parent = nullptr) : QObject{parent}, filter_{filter} {} bool eventFilter(QObject *, QEvent *event) override { if (event->type() == QEvent::KeyPress) { if (auto const keyEvent = static_cast(event); keyEvent->key() == Qt::Key_Escape) { return filter_(keyEvent); } } return false; } private: Filter filter_; }; class EnterKeyPress final : public QObject { public: using Filter = std::function; EnterKeyPress(Filter filter, QObject *parent = nullptr) : QObject{parent}, filter_{filter} {} bool eventFilter(QObject *, QEvent *const event) override { if (event->type() == QEvent::KeyPress) { if (auto const keyEvent = static_cast(event); keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) { return filter_(keyEvent); } } return false; } private: Filter filter_; }; class MouseButtonPress final : public QObject { public: using Filter = std::function; MouseButtonPress(Filter filter, QObject *parent = nullptr) : QObject{parent}, filter_{filter} {} bool eventFilter(QObject *, QEvent *event) override { if (event->type() == QEvent::MouseButtonPress) { return filter_(static_cast(event)); } return false; } private: Filter filter_; }; class MouseButtonDblClick final : public QObject { public: using Filter = std::function; MouseButtonDblClick(Filter filter, QObject *parent = nullptr) : QObject{parent}, filter_{filter} {} bool eventFilter(QObject *, QEvent *event) override { if (event->type() == QEvent::MouseButtonDblClick) { return filter_(static_cast(event)); } return false; } private: Filter filter_; }; } // namespace EventFilter #endif