File indexing completed on 2024-05-12 04:06:26
0001 /* 0002 SPDX-FileCopyrightText: 2010 Stefan Majewsky <majewsky@gmx.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef PALAPELI_TRIGGERMAPPER_H 0008 #define PALAPELI_TRIGGERMAPPER_H 0009 0010 #include "interactor.h" 0011 #include "trigger.h" 0012 0013 #include <QObject> 0014 #include <QMap> 0015 class QKeyEvent; 0016 class QMouseEvent; 0017 class QWheelEvent; 0018 0019 namespace Palapeli 0020 { 0021 struct EventContext 0022 { 0023 Palapeli::EventProcessingFlags flags; 0024 Qt::MouseButtons triggeringButtons; 0025 }; 0026 0027 class TriggerMapper : public QObject 0028 { 0029 Q_OBJECT 0030 public: 0031 static Palapeli::TriggerMapper* instance(); 0032 static QMap<QByteArray, Palapeli::Interactor*> createInteractors(QGraphicsView* view); 0033 0034 QMap<QByteArray, Palapeli::Trigger> associations() const; 0035 static QMap<QByteArray, Palapeli::Trigger> defaultAssociations(); 0036 Q_SIGNALS: 0037 void associationsChanged(); 0038 public Q_SLOTS: 0039 void readSettings(); 0040 void setAssociations(const QMap<QByteArray, Palapeli::Trigger>& associations); 0041 protected: 0042 friend class InteractorManager; 0043 0044 Palapeli::EventProcessingFlags testTrigger(const QByteArray& interactor, QWheelEvent* event) const; 0045 Palapeli::EventContext testTrigger(const QByteArray& interactor, QMouseEvent* event) const; 0046 Palapeli::EventContext testTrigger(const QByteArray& interactor, QKeyEvent* event, Qt::MouseButtons buttons) const; 0047 private: 0048 TriggerMapper(); 0049 0050 Palapeli::EventProcessingFlags testTrigger(const Palapeli::Trigger& trigger, QWheelEvent* event) const; 0051 Palapeli::EventProcessingFlags testTrigger(const Palapeli::Trigger& trigger, QMouseEvent* event) const; 0052 Palapeli::EventProcessingFlags testTrigger(const Palapeli::Trigger& trigger, QKeyEvent* event, Qt::MouseButtons buttons) const; 0053 0054 QMap<QByteArray, Palapeli::Trigger> m_associations; 0055 //quasi-static data 0056 QMap<Qt::Key, Qt::KeyboardModifier> m_keyModifierMap; 0057 }; 0058 } 0059 0060 #endif // PALAPELI_TRIGGERMAPPER_H