157 lines
5.1 KiB
C++
157 lines
5.1 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "ElementEvent.h"
|
|
#include "Utils/ElementTools.h"
|
|
#include "Utils/TAssValueName.h"
|
|
#include "Synchronizer.h"
|
|
#include "Commander.h"
|
|
|
|
BEGIN_NAMESPACE_UE_AC
|
|
|
|
template <>
|
|
FAssValueName::SAssValueName TAssEnumName< API_ElementDBEventID >::AssEnumName[] = {
|
|
ValueName(APINotifyElement_BeginEvents),
|
|
ValueName(APINotifyElement_EndEvents),
|
|
|
|
ValueName(APINotifyElement_New),
|
|
ValueName(APINotifyElement_Copy),
|
|
ValueName(APINotifyElement_Change),
|
|
ValueName(APINotifyElement_Edit),
|
|
ValueName(APINotifyElement_Delete),
|
|
|
|
ValueName(APINotifyElement_Undo_Created),
|
|
ValueName(APINotifyElement_Undo_Modified),
|
|
ValueName(APINotifyElement_Undo_Deleted),
|
|
ValueName(APINotifyElement_Redo_Created),
|
|
ValueName(APINotifyElement_Redo_Modified),
|
|
ValueName(APINotifyElement_Redo_Deleted),
|
|
ValueName(APINotifyElement_PropertyValueChange),
|
|
|
|
EnumEnd(-1)};
|
|
|
|
static GSErrCode ElementEventCB(const API_NotifyElementType* ElemType)
|
|
{
|
|
try
|
|
{
|
|
return FElementEvent::Event(*ElemType);
|
|
}
|
|
catch (std::exception& e)
|
|
{
|
|
UE_AC_DebugF("ElementEventCB - Exception \"%s\"\n", e.what());
|
|
return APIERR_NOTSUPPORTED;
|
|
}
|
|
catch (...)
|
|
{
|
|
UE_AC_DebugF("ElementEventCB - Unknown exception\n");
|
|
return APIERR_NOTSUPPORTED;
|
|
}
|
|
}
|
|
|
|
GSErrCode FElementEvent::Initialize()
|
|
{
|
|
GSErrCode GSErr = ACAPI_Notify_CatchNewElement(nullptr, ElementEventCB);
|
|
if (GSErr != NoError)
|
|
{
|
|
UE_AC_DebugF("FElementEvent::Initialize - ACAPI_Notify_CatchNewElement error=%s\n", GetErrorName(GSErr));
|
|
}
|
|
|
|
GSErr = ACAPI_Notify_InstallElementObserver(ElementEventCB);
|
|
if (GSErr != NoError)
|
|
{
|
|
UE_AC_DebugF("FElementEvent::Initialize - ACAPI_Notify_InstallElementObserver error=%s\n", GetErrorName(GSErr));
|
|
}
|
|
|
|
return GSErr;
|
|
}
|
|
|
|
GSErrCode FElementEvent::Event(const API_NotifyElementType& ElemType)
|
|
{
|
|
UE_AC_TraceF("-> FElementEvent::Event(%s)\n", TAssEnumName< API_ElementDBEventID >::GetName(ElemType.notifID));
|
|
GS::UniString ElemTypeName;
|
|
#if AC_VERSION < 26
|
|
if (ACAPI_Goodies(APIAny_GetElemTypeNameID, (void*)(size_t)ElemType.elemHead.typeID, &ElemTypeName) != NoError)
|
|
{
|
|
ElemTypeName = GS::UniString::Printf("ElementType=%d", ElemType.elemHead.typeID);
|
|
}
|
|
#else
|
|
const API_ElemTypeID ElemTypeID = ElemType.elemHead.type.typeID;
|
|
if (API_FirstElemType <= ElemTypeID && ElemTypeID <= API_LastElemType)
|
|
{
|
|
ElemTypeName = GS::UniString::Printf("ElementType=%s", FElementTools::TypeName(ElemTypeID));
|
|
}
|
|
else
|
|
{
|
|
ElemTypeName = GS::UniString::Printf("ElementType=%d", ElemTypeID);
|
|
}
|
|
#endif
|
|
|
|
GS::UniString ElemUUID(APIGuidToString(ElemType.elemHead.guid));
|
|
switch (ElemType.notifID)
|
|
{
|
|
case APINotifyElement_BeginEvents:
|
|
UE_AC_TraceF("Element event: Begin events for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_EndEvents:
|
|
UE_AC_TraceF("Element event: End events for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_New:
|
|
UE_AC_TraceF("Element event: New for %s, %s\n", ElemTypeName.ToCStr().Get(), ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Copy:
|
|
UE_AC_TraceF("Element event: Copy for %s, %s\n", ElemTypeName.ToCStr().Get(), ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Change:
|
|
UE_AC_TraceF("Element event: Change for %s, %s\n", ElemTypeName.ToCStr().Get(), ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Edit:
|
|
UE_AC_TraceF("Element event: Edit for %s, %s\n", ElemTypeName.ToCStr().Get(), ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Delete:
|
|
UE_AC_TraceF("Element event: Delete for %s, %s\n", ElemTypeName.ToCStr().Get(), ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Undo_Created:
|
|
UE_AC_TraceF("Element event: Undo_Created for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Undo_Modified:
|
|
UE_AC_TraceF("Element event: Undo_Modified for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Undo_Deleted:
|
|
UE_AC_TraceF("Element event: Undo_Deleted for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Redo_Created:
|
|
UE_AC_TraceF("Element event: Redo_Created for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Redo_Modified:
|
|
UE_AC_TraceF("Element event: Redo_Modified for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_Redo_Deleted:
|
|
UE_AC_TraceF("Element event: Redo_Deleted for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_PropertyValueChange:
|
|
UE_AC_TraceF("Element event: PropertyValueChange for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
case APINotifyElement_ClassificationChange:
|
|
UE_AC_TraceF("Element event: ClassificationChange for %s, %s\n", ElemTypeName.ToCStr().Get(),
|
|
ElemUUID.ToCStr().Get());
|
|
break;
|
|
}
|
|
if (FCommander::IsAutoSyncEnabled())
|
|
{
|
|
FSynchronizer::PostDoSnapshot("Element modified");
|
|
}
|
|
|
|
UE_AC_TraceF("<- FElementEvent::Event\n");
|
|
return NoError;
|
|
}
|
|
|
|
END_NAMESPACE_UE_AC
|