[PATCH] Add ability to undo removing of dives from trips

Grace Karanja gracie.karanja89 at gmail.com
Thu Apr 9 23:39:51 PDT 2015


Add the functionality to undo/redo removing of dives from trips. The
code calling remove_dive_from_trip has moved to the UndoCommands class.

Signed-off-by: Grace Karanja <gracie.karanja89 at gmail.com>
---
 qt-ui/divelistview.cpp |  6 +++++-
 qt-ui/undocommands.cpp | 29 +++++++++++++++++++++++++++++
 qt-ui/undocommands.h   | 10 ++++++++++
 3 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index bacac71..b65b88e 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -622,10 +622,14 @@ void DiveListView::removeFromTrip()
 	//TODO: move this to C-code.
 	int i;
 	struct dive *d;
+	QMap<struct dive*, dive_trip*> divesToRemove;
 	for_each_dive (i, d) {
 		if (d->selected)
-			remove_dive_from_trip(d, false);
+			divesToRemove.insert(d, d->divetrip);
 	}
+	UndoRemoveDivesFromTrip *undoCommand = new UndoRemoveDivesFromTrip(divesToRemove);
+	MainWindow::instance()->undoStack->push(undoCommand);
+
 	rememberSelection();
 	reload(currentLayout, false);
 	fixMessyQtModelBehaviour();
diff --git a/qt-ui/undocommands.cpp b/qt-ui/undocommands.cpp
index be27e27..aad264e 100644
--- a/qt-ui/undocommands.cpp
+++ b/qt-ui/undocommands.cpp
@@ -92,3 +92,32 @@ void UndoRenumberDives::redo()
 	mark_divelist_changed(true);
 	MainWindow::instance()->refreshDisplay();
 }
+
+
+UndoRemoveDivesFromTrip::UndoRemoveDivesFromTrip(QMap<dive *, dive_trip *> removedDives)
+{
+	divesToUndo = removedDives;
+	setText("remove dive(s) from trip");
+}
+
+void UndoRemoveDivesFromTrip::undo()
+{
+	QMapIterator<dive*, dive_trip*> i(divesToUndo);
+	while (i.hasNext()) {
+		i.next();
+		add_dive_to_trip(i.key (), i.value());
+	}
+	mark_divelist_changed(true);
+	MainWindow::instance()->refreshDisplay();
+}
+
+void UndoRemoveDivesFromTrip::redo()
+{
+	QMapIterator<dive*, dive_trip*> i(divesToUndo);
+	while (i.hasNext()) {
+		i.next();
+		remove_dive_from_trip(i.key(), false);
+	}
+	mark_divelist_changed(true);
+	MainWindow::instance()->refreshDisplay();
+}
diff --git a/qt-ui/undocommands.h b/qt-ui/undocommands.h
index e4f2da8..bd8530d 100644
--- a/qt-ui/undocommands.h
+++ b/qt-ui/undocommands.h
@@ -37,4 +37,14 @@ private:
 	int start;
 };
 
+class UndoRemoveDivesFromTrip : public QUndoCommand {
+public:
+	UndoRemoveDivesFromTrip(QMap<struct dive*, dive_trip*> removedDives);
+	virtual void undo();
+	virtual void redo();
+
+private:
+	QMap<struct dive*, dive_trip*> divesToUndo;
+};
+
 #endif // UNDOCOMMANDS_H
-- 
2.3.5



More information about the subsurface mailing list