From 3565aad630864ecdbe53fdaa501ea708555b3c7c Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Sun, 30 Apr 2023 18:30:36 -0400 Subject: New upstream version 3.4.4+dfsg. --- .../guiSQLiteStudio/common/mouseshortcut.cpp | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp (limited to 'SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp') 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 +#include +#include + +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(event)->globalPos()); + return true; + } + + if (event->type() == QEvent::Wheel && type == Wheel) + { + QWheelEvent* wheelEvent = dynamic_cast(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(event); + if (!mouseEvent) + return false; + + return (buttons.testFlag(mouseEvent->button())) && (modifiers == mouseEvent->modifiers()); +} -- cgit v1.2.3