From 2344e3133d8569b4c92789c7d5a658cfbe665f23 Mon Sep 17 00:00:00 2001 From: Tobias Gassmann Date: Sun, 24 Aug 2025 20:48:11 +0200 Subject: [PATCH] add multi-select behavior in customization Added multi-select handling in CesiumGlobeAnchorCustomization. --- .../CesiumGlobeAnchorCustomization.cpp | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp index 4e0792bb0..7dc7a8f3a 100644 --- a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp +++ b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp @@ -7,9 +7,13 @@ #include "CesiumGlobeAnchorComponent.h" #include "DetailCategoryBuilder.h" #include "DetailLayoutBuilder.h" +#include "DetailWidgetRow.h" +#include "Widgets/Text/STextBlock.h" #include "IDetailGroup.h" #include "Widgets/SToolTip.h" +#define LOCTEXT_NAMESPACE "CesiumGlobeAnchorCustomization" + FName FCesiumGlobeAnchorCustomization::RegisteredLayoutName; void FCesiumGlobeAnchorCustomization::Register( @@ -36,6 +40,7 @@ FCesiumGlobeAnchorCustomization::MakeInstance() { void FCesiumGlobeAnchorCustomization::CustomizeDetails( IDetailLayoutBuilder& DetailBuilder) { DetailBuilder.GetObjectsBeingCustomized(this->SelectedObjects); + const bool bIsMultiSelect = this->SelectedObjects.Num() > 1; IDetailCategoryBuilder& CesiumCategory = DetailBuilder.EditCategory("Cesium"); @@ -67,11 +72,29 @@ void FCesiumGlobeAnchorCustomization::CustomizeDetails( UCesiumGlobeAnchorComponent, TeleportWhenUpdatingTransform)); - this->UpdateDerivedProperties(); - - this->CreatePositionLongitudeLatitudeHeight(DetailBuilder, CesiumCategory); - this->CreatePositionEarthCenteredEarthFixed(DetailBuilder, CesiumCategory); - this->CreateRotationEastSouthUp(DetailBuilder, CesiumCategory); + if (!bIsMultiSelect) { + this->UpdateDerivedProperties(); + this->CreatePositionLongitudeLatitudeHeight(DetailBuilder, CesiumCategory); + this->CreatePositionEarthCenteredEarthFixed(DetailBuilder, CesiumCategory); + this->CreateRotationEastSouthUp(DetailBuilder, CesiumCategory); + } else { + FDetailWidgetRow& Row = + CesiumCategory + .AddCustomRow( + LOCTEXT("MultipleSelectionFilter", "Multiple Selection")) + .FilterString(LOCTEXT( + "MultipleSelectionFilters", + "Latitude Longitude Height ECEF ESU")); + + Row.WholeRowContent() + [SNew(SBox).Padding(FMargin(0.f, 4.f)) + [SNew(STextBlock) + .Text(LOCTEXT( + "MultiSelectInfo", + "Multiple actors selected. Geodetic position (Latitude, Longitude, Height; ECEF) and " + "ESU rotation cannot be edited in multi-select. Select a single actor to edit these values.")) + .AutoWrapText(true)]]; + } } void FCesiumGlobeAnchorCustomization::CreatePositionEarthCenteredEarthFixed( @@ -296,3 +319,5 @@ TStatId UCesiumGlobeAnchorDerivedProperties::GetStatId() const { UCesiumGlobeAnchorRotationEastSouthUp, STATGROUP_Tickables); } + +#undef LOCTEXT_NAMESPACE