diff --git a/src/gui/views/view2d.h b/src/gui/views/view2d.h --- a/src/gui/views/view2d.h +++ b/src/gui/views/view2d.h @@ -87,6 +87,7 @@ void valueSelected(int val); protected: void wheelEvent(QGraphicsSceneWheelEvent* event) override; + bool eventFilter(QObject* watched, QEvent* event) override; private: QGraphicsPixmapItem* m_background; QGraphicsItem* m_groupLayer; diff --git a/src/gui/views/view2d.cpp b/src/gui/views/view2d.cpp --- a/src/gui/views/view2d.cpp +++ b/src/gui/views/view2d.cpp @@ -415,6 +415,8 @@ m_game = game; + installEventFilter(this); + // Set the order of the layers. m_background = new QGraphicsPixmapItem(); m_background->setZValue(-7); // Background. @@ -765,6 +767,24 @@ emit valueSelected(m_selectedValue); } +bool View2DScene::eventFilter(QObject* watched, QEvent* event) { + if(event->type() == QEvent::GraphicsSceneMousePress || event->type() == QEvent::GraphicsSceneMouseDoubleClick) { + QGraphicsSceneMouseEvent *e = static_cast(event); + switch(e->button()) { + case Qt::BackButton: + m_game.interface()->undo(); + return true; + break; + case Qt::ForwardButton: + m_game.interface()->redo(); + return true; + break; + } + return QGraphicsScene::eventFilter(watched, event); + } + + return QGraphicsScene::eventFilter(watched, event); +} View2D::View2D(QWidget *parent, const Game& game, GameActions* gameActions) : QGraphicsView(parent) { setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);