// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Input/Reply.h" #include "StreamingLevels/StreamingLevelCollectionModel.h" #include "IDetailCustomization.h" class IDetailChildrenBuilder; class IDetailLayoutBuilder; class IPropertyHandle; namespace ELevelTransformField { enum Type { Location, Rotation }; } ///////////////////////////////////////////////////// // FStreamingLevelCustomization class FStreamingLevelCustomization : public IDetailCustomization { public: // Makes a new instance of this detail layout class static TSharedRef MakeInstance(TSharedRef InWorldData); // IDetailCustomization interface virtual void CustomizeDetails(IDetailLayoutBuilder& DetailLayout) override; // End of IDetailCustomization interface private: FStreamingLevelCustomization(); /** * Called by the Editor Level Transform column, to set the new values. * * @param NewValue The new value entered. * @param CommitInfo The way in which the value was committed, currently ignored, we always use the new value. * @param Axis The axis being edited. */ void OnSetLevelPosition( FVector::FReal NewValue, ETextCommit::Type CommitInfo, int32 Axis ); /** * Called by the Editor Level Transform column, to set the new values. * * @param NewValue The new value entered. */ void OnSetLevelPosition(FVector NewValue); /** * Called by the Editor Level Transform column, to get the current values. * * @param Axis The axis to return the value for. * * @return The current value of the translation for given axis. */ TOptional OnGetLevelPosition( int32 Axis ) const; /** * Called by the Editor Level Rotation column, to update the displayed value as we spin * * @param NewValue The new value entered. */ void OnChangedLevelRotation(int32 NewValue); /** * Called by the Editor Level Rotation column, to set the new values. * * @param NewValue The new value entered. * @param CommitInfo How the value was set. */ void OnSetLevelRotation( int32 NewValue, ETextCommit::Type CommitInfo); /** * Called by the Editor Level Rotation column, to set weve started spinning the value. */ void OnBeginLevelRotationSlider(); /** * Called by the Editor Level Rotation column, to set weve stopped spinning the value. * * @param NewValue The new value entered. */ void OnEndLevelRotationSlider( int32 NewValue ); /** * Called by the Editor Level Transform column, to get the current values. * * @return The current value of the Level Yaw. */ TOptional GetLevelRotation() const; /** @return Whether we can edit level transform in a viewport */ bool LevelViewportTransformAllowed() const; /** @return Whether we can edit level transform through property editor text fields*/ bool LevelEditTextTransformAllowed() const; /** Handle for edit level transform button */ FReply OnEditLevelClicked(); /** Generate custom widget for the EditorStreamingVolumes array customization */ void OnGenerateElementForEditorStreamingVolume(TSharedRef ElementProperty, int32 ElementIndex, IDetailChildrenBuilder& ChildrenBuilder); /** Called to determine whether the selected streaming volume can be set or not */ bool OnShouldSetEditorStreamingVolume(const FAssetData& AssetData, TSharedRef ElementProperty) const; /** * Copies the specified transform field to the clipboard */ void OnCopy(ELevelTransformField::Type TransformField); /** * Pastes the specified transform field from the clipboard */ void OnPaste(ELevelTransformField::Type TransformField); /** * Creates a UI action for copying a specified transform field */ FUIAction CreateCopyAction(ELevelTransformField::Type TransformField) const; /** * Creates a UI action for pasting a specified transform field */ FUIAction CreatePasteAction(ELevelTransformField::Type TransformField) const; private: TWeakPtr WorldModel; TSharedPtr LevelPositionProperty; TSharedPtr LevelRotationProperty; bool bSliderMovement; TOptional CachedYawValue; };