From 481ad30094ebd7d75e8f9a615093254b7d058d2c Mon Sep 17 00:00:00 2001 From: Lioncache Date: Tue, 16 Dec 2025 22:54:25 -0500 Subject: [PATCH] UndoCommand: Move struct into implementation where applicable --- src/Editor/Undo/CCloneSelectionCommand.cpp | 6 ++-- src/Editor/Undo/CRotateNodeCommand.cpp | 13 +++++-- src/Editor/Undo/CRotateNodeCommand.h | 10 ++---- src/Editor/Undo/CScaleNodeCommand.cpp | 17 ++++++--- src/Editor/Undo/CScaleNodeCommand.h | 10 ++---- src/Editor/Undo/CTranslateNodeCommand.cpp | 16 +++++++-- src/Editor/Undo/CTranslateNodeCommand.h | 9 ++--- src/Editor/Undo/IEditPropertyCommand.cpp | 40 +++++++++++----------- 8 files changed, 66 insertions(+), 55 deletions(-) diff --git a/src/Editor/Undo/CCloneSelectionCommand.cpp b/src/Editor/Undo/CCloneSelectionCommand.cpp index 3e487dc7..e865b3c1 100644 --- a/src/Editor/Undo/CCloneSelectionCommand.cpp +++ b/src/Editor/Undo/CCloneSelectionCommand.cpp @@ -84,10 +84,10 @@ void CCloneSelectionCommand::redo() } // Clone outgoing links from source object; incoming ones are discarded - for (int iNode = 0; iNode < ClonedNodes.size(); iNode++) + for (qsizetype iNode = 0; iNode < ClonedNodes.size(); iNode++) { - CScriptObject *pSrc = static_cast(ToClone[iNode])->Instance(); - CScriptObject *pClone = static_cast(ClonedNodes[iNode])->Instance(); + auto* pSrc = static_cast(ToClone[iNode])->Instance(); + auto* pClone = static_cast(ClonedNodes[iNode])->Instance(); for (size_t iLink = 0; iLink < pSrc->NumLinks(ELinkType::Outgoing); iLink++) { diff --git a/src/Editor/Undo/CRotateNodeCommand.cpp b/src/Editor/Undo/CRotateNodeCommand.cpp index 0c40c84f..b3ffaf5b 100644 --- a/src/Editor/Undo/CRotateNodeCommand.cpp +++ b/src/Editor/Undo/CRotateNodeCommand.cpp @@ -6,6 +6,15 @@ #include +struct CRotateNodeCommand::SNodeRotate +{ + CNodePtr pNode; + CVector3f InitialPos; + CQuaternion InitialRot; + CVector3f NewPos; + CQuaternion NewRot; +}; + CRotateNodeCommand::CRotateNodeCommand() : IUndoCommand(QCoreApplication::translate("CRotateNodeCommand", "Rotate")) { @@ -58,7 +67,7 @@ bool CRotateNodeCommand::mergeWith(const QUndoCommand *pkOther) if (pkOther->id() == (int) EUndoCommand::RotateNodeCmd) { - const CRotateNodeCommand *pkCmd = static_cast(pkOther); + const auto* pkCmd = static_cast(pkOther); if (pkCmd->mCommandEnded) { @@ -68,7 +77,7 @@ bool CRotateNodeCommand::mergeWith(const QUndoCommand *pkOther) if ((mpEditor == pkCmd->mpEditor) && (mNodeList.size() == pkCmd->mNodeList.size())) { - for (int iNode = 0; iNode < mNodeList.size(); iNode++) + for (qsizetype iNode = 0; iNode < mNodeList.size(); iNode++) { mNodeList[iNode].NewPos = pkCmd->mNodeList[iNode].NewPos; mNodeList[iNode].NewRot = pkCmd->mNodeList[iNode].NewRot; diff --git a/src/Editor/Undo/CRotateNodeCommand.h b/src/Editor/Undo/CRotateNodeCommand.h index e17ba980..7af01564 100644 --- a/src/Editor/Undo/CRotateNodeCommand.h +++ b/src/Editor/Undo/CRotateNodeCommand.h @@ -11,14 +11,8 @@ class INodeEditor; class CRotateNodeCommand : public IUndoCommand { - struct SNodeRotate - { - CNodePtr pNode; - CVector3f InitialPos; - CQuaternion InitialRot; - CVector3f NewPos; - CQuaternion NewRot; - }; + struct SNodeRotate; + QList mNodeList; INodeEditor *mpEditor = nullptr; bool mCommandEnded = false; diff --git a/src/Editor/Undo/CScaleNodeCommand.cpp b/src/Editor/Undo/CScaleNodeCommand.cpp index 7ccb1058..13c6e456 100644 --- a/src/Editor/Undo/CScaleNodeCommand.cpp +++ b/src/Editor/Undo/CScaleNodeCommand.cpp @@ -6,6 +6,15 @@ #include +struct CScaleNodeCommand::SNodeScale +{ + CNodePtr pNode; + CVector3f InitialPos; + CVector3f InitialScale; + CVector3f NewPos; + CVector3f NewScale; +}; + CScaleNodeCommand::CScaleNodeCommand() : IUndoCommand(QCoreApplication::translate("CScaleNodeCommand", "Scale")) { @@ -38,9 +47,7 @@ CScaleNodeCommand::CScaleNodeCommand(INodeEditor *pEditor, const QListNotifySelectionTransformed(); } -CScaleNodeCommand::~CScaleNodeCommand() -{ -} +CScaleNodeCommand::~CScaleNodeCommand() = default; int CScaleNodeCommand::id() const { @@ -53,7 +60,7 @@ bool CScaleNodeCommand::mergeWith(const QUndoCommand *pkOther) if (pkOther->id() == (int) EUndoCommand::ScaleNodeCmd) { - const CScaleNodeCommand *pkCmd = static_cast(pkOther); + const auto* pkCmd = static_cast(pkOther); if (pkCmd->mCommandEnded) { @@ -63,7 +70,7 @@ bool CScaleNodeCommand::mergeWith(const QUndoCommand *pkOther) if ((mpEditor == pkCmd->mpEditor) && (mNodeList.size() == pkCmd->mNodeList.size())) { - for (int iNode = 0; iNode < mNodeList.size(); iNode++) + for (qsizetype iNode = 0; iNode < mNodeList.size(); iNode++) { mNodeList[iNode].NewPos = pkCmd->mNodeList[iNode].NewPos; mNodeList[iNode].NewScale = pkCmd->mNodeList[iNode].NewScale; diff --git a/src/Editor/Undo/CScaleNodeCommand.h b/src/Editor/Undo/CScaleNodeCommand.h index 12805f8e..8a225814 100644 --- a/src/Editor/Undo/CScaleNodeCommand.h +++ b/src/Editor/Undo/CScaleNodeCommand.h @@ -11,14 +11,8 @@ class INodeEditor; class CScaleNodeCommand : public IUndoCommand { - struct SNodeScale - { - CNodePtr pNode; - CVector3f InitialPos; - CVector3f InitialScale; - CVector3f NewPos; - CVector3f NewScale; - }; + struct SNodeScale; + QList mNodeList; INodeEditor *mpEditor = nullptr; bool mCommandEnded = false; diff --git a/src/Editor/Undo/CTranslateNodeCommand.cpp b/src/Editor/Undo/CTranslateNodeCommand.cpp index 1224e7d1..20f93829 100644 --- a/src/Editor/Undo/CTranslateNodeCommand.cpp +++ b/src/Editor/Undo/CTranslateNodeCommand.cpp @@ -6,6 +6,13 @@ #include +struct CTranslateNodeCommand::SNodeTranslate +{ + CNodePtr pNode; + CVector3f InitialPos; + CVector3f NewPos; +}; + CTranslateNodeCommand::CTranslateNodeCommand() : IUndoCommand(QCoreApplication::translate("CTranslateNodeCommand", "Translate")) { @@ -30,6 +37,8 @@ CTranslateNodeCommand::CTranslateNodeCommand(INodeEditor *pEditor, const QListNotifySelectionTransformed(); } +CTranslateNodeCommand::~CTranslateNodeCommand() = default; + int CTranslateNodeCommand::id() const { return (int) EUndoCommand::TranslateNodeCmd; @@ -37,11 +46,12 @@ int CTranslateNodeCommand::id() const bool CTranslateNodeCommand::mergeWith(const QUndoCommand *pkOther) { - if (mCommandEnded) return false; + if (mCommandEnded) + return false; if (pkOther->id() == (int) EUndoCommand::TranslateNodeCmd) { - const CTranslateNodeCommand *pkCmd = static_cast(pkOther); + const auto* pkCmd = static_cast(pkOther); if (pkCmd->mCommandEnded) { @@ -51,7 +61,7 @@ bool CTranslateNodeCommand::mergeWith(const QUndoCommand *pkOther) if ((mpEditor == pkCmd->mpEditor) && (mNodeList.size() == pkCmd->mNodeList.size())) { - for (int iNode = 0; iNode < mNodeList.size(); iNode++) + for (qsizetype iNode = 0; iNode < mNodeList.size(); iNode++) mNodeList[iNode].NewPos = pkCmd->mNodeList[iNode].NewPos; return true; diff --git a/src/Editor/Undo/CTranslateNodeCommand.h b/src/Editor/Undo/CTranslateNodeCommand.h index da5e11c5..3bcf3d16 100644 --- a/src/Editor/Undo/CTranslateNodeCommand.h +++ b/src/Editor/Undo/CTranslateNodeCommand.h @@ -11,12 +11,8 @@ class INodeEditor; class CTranslateNodeCommand : public IUndoCommand { - struct SNodeTranslate - { - CNodePtr pNode; - CVector3f InitialPos; - CVector3f NewPos; - }; + struct SNodeTranslate; + QList mNodeList; INodeEditor *mpEditor = nullptr; bool mCommandEnded = false; @@ -24,6 +20,7 @@ class CTranslateNodeCommand : public IUndoCommand public: CTranslateNodeCommand(); CTranslateNodeCommand(INodeEditor *pEditor, const QList& rkNodes, const CVector3f& rkDelta, ETransformSpace TransformSpace); + ~CTranslateNodeCommand() override; int id() const override; bool mergeWith(const QUndoCommand *pkOther) override; diff --git a/src/Editor/Undo/IEditPropertyCommand.cpp b/src/Editor/Undo/IEditPropertyCommand.cpp index 7399da87..bda84eb6 100644 --- a/src/Editor/Undo/IEditPropertyCommand.cpp +++ b/src/Editor/Undo/IEditPropertyCommand.cpp @@ -97,31 +97,31 @@ int IEditPropertyCommand::id() const bool IEditPropertyCommand::mergeWith(const QUndoCommand *pkOther) { - if (!mCommandEnded) + if (mCommandEnded) + return false; + + const auto* pkCmd = dynamic_cast(pkOther); + + if (pkCmd && pkCmd->mpProperty == mpProperty) { - const IEditPropertyCommand* pkCmd = dynamic_cast(pkOther); + QList MyPointers; + GetObjectDataPointers(MyPointers); - if (pkCmd && pkCmd->mpProperty == mpProperty) + QList TheirPointers; + pkCmd->GetObjectDataPointers(TheirPointers); + + if (TheirPointers.size() == MyPointers.size()) { - QList MyPointers; - GetObjectDataPointers(MyPointers); - - QList TheirPointers; - pkCmd->GetObjectDataPointers(TheirPointers); - - if (TheirPointers.size() == MyPointers.size()) + for (qsizetype PtrIdx = 0; PtrIdx < MyPointers.size(); PtrIdx++) { - for (int PtrIdx = 0; PtrIdx < MyPointers.size(); PtrIdx++) - { - if (MyPointers[PtrIdx] != TheirPointers[PtrIdx]) - return false; - } - - // Match - mNewData = pkCmd->mNewData; - mCommandEnded = pkCmd->mCommandEnded; - return true; + if (MyPointers[PtrIdx] != TheirPointers[PtrIdx]) + return false; } + + // Match + mNewData = pkCmd->mNewData; + mCommandEnded = pkCmd->mCommandEnded; + return true; } }