Files
2025-05-18 13:04:45 +08:00

53 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "DatasmithMaxProgressManager.h"
#include "DatasmithMaxExporterDefines.h"
#include "DatasmithMaxLogger.h"
#include "Windows/AllowWindowsPlatformTypes.h"
MAX_INCLUDES_START
#include "Max.h"
MAX_INCLUDES_END
DWORD WINAPI fn(LPVOID Arg)
{
return (0);
}
FDatasmithMaxProgressManager::FDatasmithMaxProgressManager()
: ProgressStart(0.f)
, ProgressEnd(100.f)
, ProgressBarCounter(1)
{
LPVOID Arg = 0;
FString emptyMsg("");
GetCOREInterface()->ProgressStart(*emptyMsg, TRUE, fn, Arg);
}
FDatasmithMaxProgressManager::~FDatasmithMaxProgressManager()
{
while (ProgressBarCounter--)
{
GetCOREInterface()->ProgressEnd();
}
}
void FDatasmithMaxProgressManager::SetMainMessage(const TCHAR* InProgressMessage)
{
LPVOID Arg = 0;
//Calling ProgressStart is the only way to change the main progress bar message without doing a whole UI (possibly a few seconds long) refresh.
GetCOREInterface()->ProgressStart(InProgressMessage, TRUE, fn, Arg);
++ProgressBarCounter;
}
void FDatasmithMaxProgressManager::ProgressEvent(float InProgressRatio, const TCHAR* InProgressString)
{
FString Msg;
int Progress = (int)(ProgressStart + (ProgressEnd - ProgressStart) * InProgressRatio);
Msg = TEXT("(") + FString::FromInt(Progress) + TEXT("%) ") + InProgressString;
GetCOREInterface()->ProgressUpdate(Progress, TRUE, *Msg.Left(255)); // Max doesn't allow for more than 256 characters (undocumented, but crashes)
}
#include "Windows/HideWindowsPlatformTypes.h"