Files
UE5-cyberHuman/Plugins/OpenAi/Source/OpenAIEditor/Private/UI/AttachedFilesContainerWidget.cpp

57 lines
1.6 KiB
C++
Raw Normal View History

2025-04-07 18:31:41 -07:00
// OpenAI, Copyright LifeEXE. All Rights Reserved.
#include "UI/AttachedFilesContainerWidget.h"
#include "UI/AttachedImageWidget.h"
#include "Components/HorizontalBoxSlot.h"
#include "Components/HorizontalBox.h"
namespace
{
const FMargin FileMargin = FMargin{20.0f, 0.0f, 0.0f, 0.0f};
} // namespace
TSharedRef<SWidget> UAttachedFilesContainerWidget::RebuildWidget()
{
ImageHorizontalBox = Cast<UHorizontalBox>(GetChildAt(0));
check(ImageHorizontalBox);
return Super::RebuildWidget();
}
void UAttachedFilesContainerWidget::AddImage(const FString& ImagePath)
{
SelectedFiles.Add(ImagePath);
auto* ImageWidget = CreateWidget<UAttachedImageWidget>(GetWorld(), AttachedImageWidgetWidgetClass);
check(ImageWidget);
ImageWidget->SetImage(ImagePath);
ImageWidget->OnRemoved().AddUObject(this, &ThisClass::OnRemoved);
ImageHorizontalBox->AddChild(ImageWidget);
if (auto* ImageSlot = Cast<UHorizontalBoxSlot>(ImageWidget->Slot))
{
ImageSlot->SetPadding(FileMargin);
}
AttachedImageWidgets.Add(ImageWidget);
}
void UAttachedFilesContainerWidget::Clear()
{
for (const auto& ImageWidget : AttachedImageWidgets)
{
ImageHorizontalBox->RemoveChild(ImageWidget);
}
AttachedImageWidgets.Empty();
SelectedFiles.Empty();
}
bool UAttachedFilesContainerWidget::HasFiles() const
{
return !SelectedFiles.IsEmpty();
}
void UAttachedFilesContainerWidget::OnRemoved(const FString& ImagePath, const TObjectPtr<UAttachedImageWidget>& Widget)
{
SelectedFiles.Remove(ImagePath);
AttachedImageWidgets.Remove(Widget);
ImageHorizontalBox->RemoveChild(Widget);
FileRemoved.Broadcast();
}