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