subsurface/desktop-widgets/undocommands.h
Berthold Stoeger 325b8bba35 Undo: remember deleted trip in UndoRemoveDivesFromTrip::undo()
If the last dive of a trip is removed, the trip is deleted.
On redo the dive is added to a non existing trip, leading to a
segfault.

Therefore, keep a copy of the trip to reinstate it on redo.
Note: this cannot work for a sequence of multiple commands.
One would have to rewrite the whole undo-history. Nevertheless,
let's do this as a stop-gap measure.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-07-19 02:43:08 +03:00

51 lines
1 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#ifndef UNDOCOMMANDS_H
#define UNDOCOMMANDS_H
#include <QUndoCommand>
#include <QMap>
class UndoDeleteDive : public QUndoCommand {
public:
UndoDeleteDive(QList<struct dive*> deletedDives);
virtual void undo();
virtual void redo();
private:
QList<struct dive*> diveList;
QList<struct dive_trip*> tripList;
};
class UndoShiftTime : public QUndoCommand {
public:
UndoShiftTime(QList<int> changedDives, int amount);
virtual void undo();
virtual void redo();
private:
QList<int> diveList;
int timeChanged;
};
class UndoRenumberDives : public QUndoCommand {
public:
UndoRenumberDives(QMap<int, QPair<int, int> > originalNumbers);
virtual void undo();
virtual void redo();
private:
QMap<int,QPair<int, int> > oldNumbers;
};
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;
QList<struct dive_trip*> tripList;
};
#endif // UNDOCOMMANDS_H