On Sun, Feb 15, 2015 at 6:54 PM, Grace Karanja <[email protected]> wrote:
> On Sun, Feb 15, 2015 at 3:09 AM, Dirk Hohndel <[email protected]> wrote: > >> Hi Grace... >> >> Thanks. Some comments below... >> >> This new patch enables undoing of renumbered dives.
From 419b58c18de1849f9882f7fe38c9c618b4ad4969 Mon Sep 17 00:00:00 2001 From: Grace Karanja <[email protected]> Date: Tue, 24 Feb 2015 19:42:33 +0300 Subject: [PATCH] Add ability to undo renumbering of dives Expand the undo feature by storing a list of renumbered dives' ids and numbers so that the original numbers can be restored if needed. Signed-off-by: Grace Karanja <[email protected]> --- qt-ui/simplewidgets.cpp | 13 ++++++++++++- qt-ui/undocommands.cpp | 38 ++++++++++++++++++++++++++++++++++++++ qt-ui/undocommands.h | 13 +++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp index f7944c9..7de067d 100644 --- a/qt-ui/simplewidgets.cpp +++ b/qt-ui/simplewidgets.cpp @@ -142,8 +142,19 @@ void RenumberDialog::renumberOnlySelected(bool selected) void RenumberDialog::buttonClicked(QAbstractButton *button) { - if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) + if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) { + QMap<int,int> renumberedDives; + int i; + struct dive *dive = NULL; + for_each_dive (i, dive) { + if (dive->selected) { + renumberedDives.insert(dive->id, dive->number); + } + } + UndoRenumberDives *undoCommand = new UndoRenumberDives(renumberedDives, ui.spinBox->value()); + MainWindow::instance()->undoStack->push(undoCommand); renumber_dives(ui.spinBox->value(), selectedOnly); + } } RenumberDialog::RenumberDialog(QWidget *parent) : QDialog(parent), selectedOnly(false) diff --git a/qt-ui/undocommands.cpp b/qt-ui/undocommands.cpp index 316def4..a075e99 100644 --- a/qt-ui/undocommands.cpp +++ b/qt-ui/undocommands.cpp @@ -62,3 +62,41 @@ void UndoShiftTime::redo() mark_divelist_changed(true); MainWindow::instance()->refreshDisplay(); } + + +UndoRenumberDives::UndoRenumberDives(QMap<int, int> originalNumbers, int startNumber) +{ + oldNumbers = originalNumbers; + start = startNumber; + isFirstRedo = true; + setText("renumber dive"); + if (oldNumbers.count() > 1) + setText(QString("renumber %1 dives").arg(QString::number(oldNumbers.count()))); +} + +void UndoRenumberDives::undo() +{ + foreach (int key, oldNumbers.keys()) { + struct dive* d = get_dive_by_uniq_id(key); + d->number = oldNumbers.value(key); + } + mark_divelist_changed(true); + MainWindow::instance()->refreshDisplay(); +} + +void UndoRenumberDives::redo() +{ + if (isFirstRedo) { + isFirstRedo = false; + return; //Skip the first redo. Qt calls redo() when the QUndoCommand is pushed + //to the QUndoStack + } + + int i = start; + foreach (int key, oldNumbers.keys()) { + struct dive* d = get_dive_by_uniq_id(key); + d->number = i++; + } + mark_divelist_changed(true); + MainWindow::instance()->refreshDisplay(); +} diff --git a/qt-ui/undocommands.h b/qt-ui/undocommands.h index addef81..9014b03 100644 --- a/qt-ui/undocommands.h +++ b/qt-ui/undocommands.h @@ -2,6 +2,7 @@ #define UNDOCOMMANDS_H #include <QUndoCommand> +#include <QMap> #include "dive.h" class UndoDeleteDive : public QUndoCommand { @@ -25,4 +26,16 @@ private: int timeChanged; }; +class UndoRenumberDives : public QUndoCommand { +public: + UndoRenumberDives(QMap<int,int> originalNumbers, int startNumber); + virtual void undo(); + virtual void redo(); + +private: + QMap<int,int> oldNumbers; + int start; + bool isFirstRedo; +}; + #endif // UNDOCOMMANDS_H -- 2.1.0
_______________________________________________ subsurface mailing list [email protected] http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
