Deleting items from the model can now be made undone/redone.
This commit is contained in:
47
model/commands/removerowscommand.cpp
Normal file
47
model/commands/removerowscommand.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
#include "removerowscommand.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
#include "../tablemodel.h"
|
||||
|
||||
RemoveRowsCommand::RemoveRowsCommand(TableModel* model,
|
||||
const int startRow,
|
||||
const int nRows,
|
||||
QUndoCommand* parent)
|
||||
: QUndoCommand(parent)
|
||||
, m_tableModel(model)
|
||||
, m_startRow(startRow) {
|
||||
qInfo() << "New RemoveCommand...";
|
||||
const QString commandText =
|
||||
QString("removing %1 item(s) on position %2").arg(nRows).arg(startRow);
|
||||
setText(commandText);
|
||||
|
||||
for (int row = 0; row < nRows; ++row) {
|
||||
const int rowPosition = startRow + row;
|
||||
QModelIndex index = m_tableModel->index(rowPosition, 0);
|
||||
|
||||
// TODO use a (static) function "getRoleValueHash" or something
|
||||
QHash<int, QVariant> values;
|
||||
values[TableModel::NameRole] = m_tableModel->data(index, TableModel::NameRole);
|
||||
values[TableModel::DescriptionRole] = m_tableModel->data(index, TableModel::DescriptionRole);
|
||||
values[TableModel::InfoRole] = m_tableModel->data(index, TableModel::InfoRole);
|
||||
values[TableModel::AmountRole] = m_tableModel->data(index, TableModel::AmountRole);
|
||||
values[TableModel::FactorRole] = m_tableModel->data(index, TableModel::FactorRole);
|
||||
|
||||
m_valueList.append(values);
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveRowsCommand::undo() {
|
||||
qDebug() << "Undoing the RemoveCommand...";
|
||||
if (m_tableModel) {
|
||||
m_tableModel->execInsertItems(m_startRow, m_valueList);
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveRowsCommand::redo() {
|
||||
qDebug() << "(Re-)doing the RemoveCommand...";
|
||||
if (m_tableModel) {
|
||||
m_tableModel->execRemoveItems(m_startRow, m_valueList.length());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user