mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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 <gracie.karanja89@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
0995a800d9
commit
182fe790c9
3 changed files with 54 additions and 2 deletions
|
@ -142,8 +142,17 @@ void RenumberDialog::renumberOnlySelected(bool selected)
|
||||||
|
|
||||||
void RenumberDialog::buttonClicked(QAbstractButton *button)
|
void RenumberDialog::buttonClicked(QAbstractButton *button)
|
||||||
{
|
{
|
||||||
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole)
|
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) {
|
||||||
renumber_dives(ui.spinBox->value(), selectedOnly);
|
QMap<int,int> renumberedDives;
|
||||||
|
int i;
|
||||||
|
struct dive *dive = NULL;
|
||||||
|
for_each_dive (i, dive) {
|
||||||
|
if (!selectedOnly || dive->selected)
|
||||||
|
renumberedDives.insert(dive->id, dive->number);
|
||||||
|
}
|
||||||
|
UndoRenumberDives *undoCommand = new UndoRenumberDives(renumberedDives, ui.spinBox->value());
|
||||||
|
MainWindow::instance()->undoStack->push(undoCommand);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RenumberDialog::RenumberDialog(QWidget *parent) : QDialog(parent), selectedOnly(false)
|
RenumberDialog::RenumberDialog(QWidget *parent) : QDialog(parent), selectedOnly(false)
|
||||||
|
|
|
@ -62,3 +62,34 @@ void UndoShiftTime::redo()
|
||||||
mark_divelist_changed(true);
|
mark_divelist_changed(true);
|
||||||
MainWindow::instance()->refreshDisplay();
|
MainWindow::instance()->refreshDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UndoRenumberDives::UndoRenumberDives(QMap<int, int> originalNumbers, int startNumber)
|
||||||
|
{
|
||||||
|
oldNumbers = originalNumbers;
|
||||||
|
start = startNumber;
|
||||||
|
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()
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define UNDOCOMMANDS_H
|
#define UNDOCOMMANDS_H
|
||||||
|
|
||||||
#include <QUndoCommand>
|
#include <QUndoCommand>
|
||||||
|
#include <QMap>
|
||||||
#include "dive.h"
|
#include "dive.h"
|
||||||
|
|
||||||
class UndoDeleteDive : public QUndoCommand {
|
class UndoDeleteDive : public QUndoCommand {
|
||||||
|
@ -25,4 +26,15 @@ private:
|
||||||
int timeChanged;
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
#endif // UNDOCOMMANDS_H
|
#endif // UNDOCOMMANDS_H
|
||||||
|
|
Loading…
Add table
Reference in a new issue