mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
d60a620193
Before the dive is deleted, a copy is made and passed to the undo buffer. When edit->undo is clicked, this dive is restored to the dive list. Signed-off-by: Grace Karanja <gracie.karanja89@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
78 lines
1.2 KiB
C++
78 lines
1.2 KiB
C++
#include "undobuffer.h"
|
|
#include "mainwindow.h"
|
|
|
|
UndoBuffer::UndoBuffer(QObject *parent) : QObject(parent)
|
|
{
|
|
curIdx = 0;
|
|
}
|
|
|
|
UndoBuffer::~UndoBuffer()
|
|
{
|
|
|
|
}
|
|
|
|
bool UndoBuffer::canUndo()
|
|
{
|
|
return curIdx > 0;
|
|
}
|
|
|
|
bool UndoBuffer::canRedo()
|
|
{
|
|
return curIdx < list.count();
|
|
}
|
|
|
|
void UndoBuffer::redo()
|
|
{
|
|
current()->redo();
|
|
curIdx++;
|
|
if (curIdx > list.count())
|
|
curIdx = list.count() - 1;
|
|
}
|
|
|
|
void UndoBuffer::undo()
|
|
{
|
|
current()->undo();
|
|
curIdx = list.indexOf(current());
|
|
}
|
|
|
|
void UndoBuffer::recordbefore(QString commandName, dive *affectedDive)
|
|
{
|
|
UndoCommand *cmd = new UndoCommand(commandName, affectedDive);
|
|
//If we are within the list, clear the extra UndoCommands.
|
|
if (list.count() > 0) {
|
|
if (curIdx + 1 < list.count()) {
|
|
for (int i = curIdx + 1; i < list.count(); i++) {
|
|
list.removeAt(i);
|
|
}
|
|
}
|
|
}
|
|
list.append(cmd);
|
|
curIdx = list.count();
|
|
}
|
|
|
|
void UndoBuffer::recordAfter(dive *affectedDive)
|
|
{
|
|
list.at(curIdx - 1)->setStateAfter(affectedDive);
|
|
}
|
|
|
|
|
|
|
|
UndoCommand::UndoCommand(QString commandName, dive *affectedDive)
|
|
{
|
|
name = commandName;
|
|
stateBefore = affectedDive;
|
|
}
|
|
|
|
void UndoCommand::undo()
|
|
{
|
|
if (name == "Delete Dive") {
|
|
record_dive(stateBefore);
|
|
MainWindow::instance()->recreateDiveList();
|
|
}
|
|
}
|
|
|
|
void UndoCommand::redo()
|
|
{
|
|
//To be implemented
|
|
}
|
|
|