diff options
| author | 2023-04-30 18:30:36 -0400 | |
|---|---|---|
| committer | 2023-04-30 18:30:36 -0400 | |
| commit | 3565aad630864ecdbe53fdaa501ea708555b3c7c (patch) | |
| tree | c743e4ad0bad39ebdb2f514c7cc52d34a257ebbe /SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp | |
| parent | 1fdc150116cad39aae5c5da407c3312b47a59e3a (diff) | |
New upstream version 3.4.4+dfsg.upstream/3.4.4+dfsg
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp b/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp new file mode 100644 index 0000000..51fb524 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp @@ -0,0 +1,77 @@ +#include "mouseshortcut.h" +#include <QMouseEvent> +#include <QApplication> +#include <QDebug> + +MouseShortcut::MouseShortcut(ClickType type, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QObject* parent) + : QObject(parent), type(type), buttons(buttons), modifiers(modifiers) +{ +} + +MouseShortcut* MouseShortcut::forButton(ClickType type, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QObject* receiver, const char* slot, QObject* parent) +{ + MouseShortcut* instance = new MouseShortcut(type, buttons, modifiers, parent); + connect(instance, SIGNAL(activated(QPoint)), receiver, slot); + parent->installEventFilter(instance); + return instance; +} + +MouseShortcut* MouseShortcut::forWheel(Qt::KeyboardModifiers modifiers, QObject* parent) +{ + return new MouseShortcut(Wheel, Qt::MouseButtons(), modifiers, parent); +} + +MouseShortcut* MouseShortcut::forWheel(Qt::KeyboardModifiers modifiers, QObject* parent, const char* slot) +{ + MouseShortcut* instance = new MouseShortcut(Wheel, Qt::MouseButtons(), modifiers, parent); + connect(instance, SIGNAL(wheelActivated(int)), parent, slot); + parent->installEventFilter(instance); + return instance; +} + +MouseShortcut* MouseShortcut::forWheel(Qt::KeyboardModifiers modifiers, QObject* receiver, const char* slot, QObject* parent) +{ + MouseShortcut* instance = new MouseShortcut(Wheel, Qt::MouseButtons(), modifiers, parent); + connect(instance, SIGNAL(wheelActivated(int)), receiver, slot); + parent->installEventFilter(instance); + return instance; +} + +void MouseShortcut::enableDebug() +{ + debug = true; +} + +bool MouseShortcut::eventFilter(QObject* object, QEvent* event) +{ + if (debug && event->type() != QEvent::Paint) + qDebug() << event; + + if ((event->type() == QEvent::MouseButtonPress && type == SingleClick && attributesMatch(event)) || + (event->type() == QEvent::MouseButtonDblClick && type == DoubleClick && attributesMatch(event))) + { + emit activated(dynamic_cast<QMouseEvent*>(event)->globalPos()); + return true; + } + + if (event->type() == QEvent::Wheel && type == Wheel) + { + QWheelEvent* wheelEvent = dynamic_cast<QWheelEvent*>(event); + if (modifiers == wheelEvent->modifiers()) + { + emit wheelActivated(wheelEvent->angleDelta().y()); + return true; + } + } + + return QObject::eventFilter(object, event); +} + +bool MouseShortcut::attributesMatch(QEvent* event) +{ + QMouseEvent* mouseEvent = dynamic_cast<QMouseEvent*>(event); + if (!mouseEvent) + return false; + + return (buttons.testFlag(mouseEvent->button())) && (modifiers == mouseEvent->modifiers()); +} |
