mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-06-22 06:23:36 +00:00
94 lines
2.4 KiB
C++
94 lines
2.4 KiB
C++
#ifndef CRESIZESCRIPTARRAYCOMMAND_H
|
|
#define CRESIZESCRIPTARRAYCOMMAND_H
|
|
|
|
#include "CEditScriptPropertyCommand.h"
|
|
|
|
class CResizeScriptArrayCommand : public CEditScriptPropertyCommand
|
|
{
|
|
/** Property model the edit was performed on */
|
|
CPropertyModel* mpModel;
|
|
|
|
/** Old/new model row counts; we store this here to support editing arrays on multiple instances at once */
|
|
int mOldRowCount;
|
|
int mNewRowCount;
|
|
|
|
public:
|
|
CResizeScriptArrayCommand(IPropertyNew* pProperty,
|
|
CWorldEditor* pEditor,
|
|
const QVector<CScriptObject*>& rkInstances,
|
|
CPropertyModel* pModel = nullptr,
|
|
QModelIndex Index = QModelIndex(),
|
|
const QString& rkCommandName = "Resize Array"
|
|
)
|
|
: CEditScriptPropertyCommand(pProperty, pEditor, rkInstances, Index, rkCommandName)
|
|
, mpModel(nullptr)
|
|
, mOldRowCount(-1)
|
|
, mNewRowCount(-1)
|
|
{
|
|
if (Index.isValid())
|
|
{
|
|
ASSERT(pModel != nullptr);
|
|
mpModel = pModel;
|
|
}
|
|
}
|
|
|
|
bool mergeWith(const QUndoCommand *pkOther)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
virtual void SaveOldData() override
|
|
{
|
|
CEditScriptPropertyCommand::SaveOldData();
|
|
|
|
if (mpModel)
|
|
{
|
|
mOldRowCount = mpModel->rowCount(mIndex);
|
|
}
|
|
}
|
|
|
|
virtual void SaveNewData() override
|
|
{
|
|
CEditScriptPropertyCommand::SaveNewData();
|
|
|
|
if (mpModel)
|
|
{
|
|
mNewRowCount = mpModel->rowCount(mIndex);
|
|
}
|
|
}
|
|
|
|
// Note in some cases undo/redo may be called when the change has already been applied outside of the undo command
|
|
// This is why we need to check the array's actual current size instead of assuming it will match one of the arrays
|
|
void undo()
|
|
{
|
|
if (mpModel)
|
|
{
|
|
mpModel->ArrayAboutToBeResized(mIndex, mOldRowCount);
|
|
}
|
|
|
|
CEditScriptPropertyCommand::undo();
|
|
|
|
if (mpModel)
|
|
{
|
|
mpModel->ArrayResized(mIndex, mNewRowCount);
|
|
}
|
|
}
|
|
|
|
void redo()
|
|
{
|
|
if (mpModel)
|
|
{
|
|
mpModel->ArrayAboutToBeResized(mIndex, mNewRowCount);
|
|
}
|
|
|
|
CEditScriptPropertyCommand::redo();
|
|
|
|
if (mpModel)
|
|
{
|
|
mpModel->ArrayResized(mIndex, mOldRowCount);
|
|
}
|
|
}
|
|
};
|
|
|
|
#endif // CRESIZESCRIPTARRAYCOMMAND_H
|