aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
commit3565aad630864ecdbe53fdaa501ea708555b3c7c (patch)
treec743e4ad0bad39ebdb2f514c7cc52d34a257ebbe /SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp
parent1fdc150116cad39aae5c5da407c3312b47a59e3a (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.cpp77
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());
+}