diff --git a/Commands.cpp b/Commands.cpp index 5f09aa9..a99b36f 100644 --- a/Commands.cpp +++ b/Commands.cpp @@ -48,3 +48,26 @@ void MoveVertexCommand::redo() m_mapperGLCanvas->update(); emit m_mapperGLCanvas->shapeChanged(m_mapperGLCanvas->getCurrentShape()); } + + +DeleteMappingCommand::DeleteMappingCommand(MainWindow *mainWindow, uid mappingId, QUndoCommand *parent) : + QUndoCommand(parent) +{ + m_mainWindow = mainWindow; + m_mappingId = mappingId; +} + +void DeleteMappingCommand::undo() +{ + if(m_mappingPtr != NULL) + { + uint currentId = m_mainWindow->getMappingManager().addMapping(m_mappingPtr); + m_mainWindow->addMappingItem(currentId); + } +} + +void DeleteMappingCommand::redo() +{ + m_mappingPtr = m_mainWindow->getMappingManager().getMappingById(m_mappingId); + m_mainWindow->deleteMapping(m_mappingId); +} diff --git a/Commands.h b/Commands.h index 1dbeb04..e69e1af 100644 --- a/Commands.h +++ b/Commands.h @@ -47,9 +47,6 @@ public: void undo(); void redo(); -signals: - void shapeChanged(Shape*); - private: MapperGLCanvas *m_mapperGLCanvas; Shape *m_shape; @@ -58,4 +55,22 @@ private: }; +class MoveShapesCommand : public QUndoCommand +{ + +}; + +class DeleteMappingCommand : public QUndoCommand +{ +public: + DeleteMappingCommand(MainWindow *mainWindow, uid mappingId, QUndoCommand *parent = 0); + void undo(); + void redo(); + +private: + MainWindow *m_mainWindow; + Mapping::ptr m_mappingPtr; + uid m_mappingId; +}; + #endif /* COMMANDS_H_ */ diff --git a/MainWindow.cpp b/MainWindow.cpp index a52ebc9..0096a59 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -294,37 +294,37 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) if (keyEvent->modifiers() == Qt::CTRL) { switch (keyEvent->key()) { - case Qt::Key_F: + case Qt::Key_F: outputWindow->setFullScreen(true); break; - case Qt::Key_N: + case Qt::Key_N: newFile(); break; - case Qt::Key_O: + case Qt::Key_O: open(); break; - case Qt::Key_S: + case Qt::Key_S: save(); break; - case Qt::Key_Q: + case Qt::Key_Q: close(); break; - case Qt::Key_Delete: + case Qt::Key_Delete: deleteItem(); break; - case Qt::Key_M: + case Qt::Key_M: addMesh(); break; - case Qt::Key_T: + case Qt::Key_T: addTriangle(); break; - case Qt::Key_E: + case Qt::Key_E: addEllipse(); break; - case Qt::Key_D: + case Qt::Key_D: outputWindow->setVisible(true); break; - case Qt::Key_P: + case Qt::Key_P: if (_isPlaying) { pause(); @@ -334,11 +334,18 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) play(); } break; - case Qt::Key_R: + case Qt::Key_R: rewind(); break; + case Qt::Key_Z: + undoStack->undo(); + break; } } + else if (keyEvent->matches(QKeySequence::Redo)) + { + undoStack->redo(); + } else if (keyEvent->key() == Qt::Key_Escape) { outputWindow->setFullScreen(false); @@ -698,7 +705,7 @@ void MainWindow::deleteItem() if (isMappingTabSelected) //currentSelectedItem->listWidget() == mappingList) { // Delete mapping. - deleteMapping( getItemId(*mappingList->currentItem()) ); + undoStack->push(new DeleteMappingCommand(this, getItemId(*mappingList->currentItem()))); //currentSelectedItem = NULL; } else if (isPaintTabSelected) //currentSelectedItem->listWidget() == paintList) diff --git a/MapperGLCanvas.cpp b/MapperGLCanvas.cpp index fa0ac69..299f0fb 100644 --- a/MapperGLCanvas.cpp +++ b/MapperGLCanvas.cpp @@ -264,6 +264,12 @@ void MapperGLCanvas::keyPressEvent(QKeyEvent* event) p.rx()--; break; default: + if (event->matches(QKeySequence::Undo)) + getMainWindow()->getUndoStack()->undo(); + + else if (event->matches(QKeySequence::Redo)) + getMainWindow()->getUndoStack()->redo(); + handledKey = false; break; }