mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-06-04 13:41:46 +00:00
58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
#include "CEditLinkCommand.h"
|
|
|
|
CEditLinkCommand::CEditLinkCommand(CWorldEditor *pEditor, CLink *pLink, CLink NewLink)
|
|
: IUndoCommand("Edit Link")
|
|
, mpEditor(pEditor)
|
|
, mpEditLink(pLink)
|
|
, mOldLink(*pLink)
|
|
, mNewLink(NewLink)
|
|
{
|
|
mOldSenderIndex = pLink->SenderIndex();
|
|
mOldReceiverIndex = pLink->ReceiverIndex();
|
|
|
|
mAffectedInstances << pLink->Sender();
|
|
if (pLink->ReceiverID() != pLink->SenderID()) mAffectedInstances << pLink->Receiver();
|
|
if (NewLink.SenderID() != pLink->SenderID()) mAffectedInstances << NewLink.Sender();
|
|
if (NewLink.ReceiverID() != pLink->ReceiverID()) mAffectedInstances << NewLink.Receiver();
|
|
}
|
|
|
|
void CEditLinkCommand::undo()
|
|
{
|
|
CLink *pLink = *mpEditLink;
|
|
|
|
if (mOldLink.Sender() != mNewLink.Sender())
|
|
{
|
|
mNewLink.Sender()->RemoveLink(eOutgoing, pLink);
|
|
mOldLink.Sender()->AddLink(eOutgoing, pLink, mOldSenderIndex);
|
|
}
|
|
if (mOldLink.Receiver() != mNewLink.Receiver())
|
|
{
|
|
mNewLink.Receiver()->RemoveLink(eIncoming, pLink);
|
|
mOldLink.Receiver()->AddLink(eIncoming, pLink, mOldReceiverIndex);
|
|
}
|
|
|
|
*pLink = mOldLink;
|
|
mpEditor->OnLinksModified(mAffectedInstances.DereferenceList());
|
|
mpEditLink.SetLink(pLink); // note: This is done to account for situations where the sender has changed
|
|
}
|
|
|
|
void CEditLinkCommand::redo()
|
|
{
|
|
CLink *pLink = *mpEditLink;
|
|
|
|
if (mOldLink.Sender() != mNewLink.Sender())
|
|
{
|
|
mOldLink.Sender()->RemoveLink(eOutgoing, pLink);
|
|
mNewLink.Sender()->AddLink(eOutgoing, pLink);
|
|
}
|
|
if (mOldLink.Receiver() != mNewLink.Receiver())
|
|
{
|
|
mOldLink.Receiver()->RemoveLink(eIncoming, pLink);
|
|
mNewLink.Receiver()->AddLink(eIncoming, pLink);
|
|
}
|
|
|
|
*pLink = mNewLink;
|
|
mpEditor->OnLinksModified(mAffectedInstances.DereferenceList());
|
|
mpEditLink.SetLink(pLink);
|
|
}
|