EM_Task/UnrealEd/Private/ScopedTransaction.cpp

57 lines
1.5 KiB
C++
Raw Permalink Normal View History

2026-02-13 16:18:33 +08:00
// Copyright Epic Games, Inc. All Rights Reserved.
#include "ScopedTransaction.h"
#include "Framework/Application/SlateApplication.h"
#include "Editor.h"
FScopedTransaction::FScopedTransaction(const FText& SessionName, const bool bShouldActuallyTransact)
{
Construct(TEXT(""), SessionName, NULL, bShouldActuallyTransact);
}
FScopedTransaction::FScopedTransaction(const TCHAR* TransactionContext, const FText& SessionName, UObject* PrimaryObject, const bool bShouldActuallyTransact)
{
Construct(TransactionContext, SessionName, PrimaryObject, bShouldActuallyTransact);
}
void FScopedTransaction::Construct(const TCHAR* TransactionContext, const FText& SessionName, UObject* PrimaryObject, const bool bShouldActuallyTransact)
{
if (bShouldActuallyTransact && GEditor && GEditor->Trans && ensure(!GIsTransacting))
{
Index = GEditor->BeginTransaction(TransactionContext, SessionName, PrimaryObject);
check(IsOutstanding());
}
else
{
Index = -1;
}
}
FScopedTransaction::~FScopedTransaction()
{
if (IsOutstanding())
{
GEditor->EndTransaction();
}
}
/**
* Cancels the transaction. Reentrant.
*/
void FScopedTransaction::Cancel()
{
if (IsOutstanding())
{
GEditor->CancelTransaction(Index);
Index = -1;
}
}
/**
* @return true if the transaction is still outstanding (that is, has not been cancelled).
*/
bool FScopedTransaction::IsOutstanding() const
{
return Index >= 0;
}