Utils: Add Undo facilities for aspects

Change-Id: I2a8acfa23b3a4303414be21af224b08c13561666
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2023-09-12 07:34:53 +02:00
parent 8bcec807d9
commit 66c8eda943
2 changed files with 99 additions and 0 deletions

View File

@@ -31,6 +31,7 @@
#include <QSettings>
#include <QSpinBox>
#include <QTextEdit>
#include <QUndoStack>
using namespace Layouting;
@@ -84,6 +85,8 @@ public:
BaseAspect::DataCreator m_dataCreator;
BaseAspect::DataCloner m_dataCloner;
QList<BaseAspect::DataExtractor> m_dataExtractors;
QUndoStack *m_undoStack = nullptr;
};
/*!
@@ -302,6 +305,29 @@ void BaseAspect::setToolTip(const QString &tooltip)
}
}
void BaseAspect::setUndoStack(QUndoStack *undoStack)
{
d->m_undoStack = undoStack;
}
QUndoStack *BaseAspect::undoStack() const
{
return d->m_undoStack;
}
void BaseAspect::pushUndo(QUndoCommand *cmd)
{
if (!cmd)
return;
if (d->m_undoStack)
d->m_undoStack->push(cmd);
else {
cmd->redo();
delete cmd;
}
}
bool BaseAspect::isEnabled() const
{
return d->m_enabled;
@@ -2645,6 +2671,14 @@ bool AspectContainer::isDirty()
return false;
}
void AspectContainer::setUndoStack(QUndoStack *undoStack)
{
BaseAspect::setUndoStack(undoStack);
for (BaseAspect *aspect : std::as_const(d->m_items))
aspect->setUndoStack(undoStack);
}
bool AspectContainer::equals(const AspectContainer &other) const
{
// FIXME: Expensive, but should not really be needed in a fully aspectified world.