forked from qt-creator/qt-creator
Utils: Add Undo facilities for aspects
Change-Id: I2a8acfa23b3a4303414be21af224b08c13561666 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user