mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-29 13:40:20 +00:00
325b8bba35
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>
51 lines
1 KiB
C++
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
|