// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "AssetThumbnail.h" #include "DetailsDisplayManager.h" #include "DetailTreeNode.h" #include "IDetailsView.h" #include "PropertyNode.h" class FDetailsNameWidgetOverrideCustomization; class FEditConditionParser; class FNotifyHook; class IDetailPropertyExtensionHandler; class IDetailRootObjectCustomization; class FStringPrefixTree; class IDetailsViewPrivate : public IDetailsView { public: /** * Sets the expansion state for a node and optionally all of its children * * @param InTreeNode The node to change expansion state on * @param bIsItemExpanded The new expansion state * @param bRecursive Whether or not to apply the expansion change to any children */ virtual void SetNodeExpansionState(TSharedRef InTreeNode, bool bIsItemExpanded, bool bRecursive) = 0; /** * Requests that an item in the tree be expanded or collapsed * * @param TreeNode The tree node to expand * @param bExpand true if the item should be expanded, false otherwise */ virtual void RequestItemExpanded(TSharedRef TreeNode, bool bExpand) = 0; /** * Refreshes the detail's treeview */ virtual void RefreshTree() = 0; /** Returns the notify hook to use when properties change */ virtual FNotifyHook* GetNotifyHook() const = 0; /** * Returns the property utilities for this view */ virtual TSharedPtr GetPropertyUtilities() = 0; /** Request the details view to be refreshed (new widgets generated) with the current set of objects on the next Tick */ virtual void RequestForceRefresh() = 0; /** Causes the details view to be refreshed (new widgets generated) with the current set of objects */ virtual void ForceRefresh() = 0; /** Causes the details view to move the scroll offset (by item) * @param DeltaOffset We add this value to the current scroll offset if the result is in the scrolling range */ virtual void MoveScrollOffset(int32 DeltaOffset) = 0; /** * Saves the expansion state of a tree node * * @param NodePath The path to the detail node to save * @param bIsExpanded true if the node is expanded, false otherwise */ virtual void SaveCustomExpansionState(const FString& NodePath, bool bIsExpanded) = 0; /** * Gets the saved expansion state of a tree node in this category * * @param NodePath The path to the detail node to get * @return true if the node should be expanded, false otherwise */ virtual bool GetCustomSavedExpansionState(const FString& NodePath) const = 0; /** * @return True if the property is visible */ virtual bool IsPropertyVisible( const struct FPropertyAndParent& PropertyAndParent ) const = 0; /** * @return True if the property is visible */ virtual bool IsPropertyReadOnly( const struct FPropertyAndParent& PropertyAndParent ) const = 0; /** * @return Whether a custom row with the specified name and parent name is visible. */ virtual bool IsCustomRowVisible(FName InRowName, FName InParentName) const = 0; /** * @return Whether a custom row with the specified name and parent name is read-only. */ virtual bool IsCustomRowReadOnly(FName InRowName, FName InParentName) const = 0; /** * @return The thumbnail pool that should be used for thumbnails being rendered in this view */ virtual TSharedPtr GetThumbnailPool() const = 0; /** * @return The set of custom class viewer filters to use for class properties in this view */ virtual const TArray>& GetClassViewerFilters() const = 0; /** * Creates the color picker window for this property view. * * @param PropertyEditor The slate property node to edit. * @param bUseAlpha Whether or not alpha is supported */ virtual void CreateColorPickerWindow(const TSharedRef< class FPropertyEditor >& PropertyEditor, bool bUseAlpha) = 0; /** * Adds an action to execute next tick */ virtual void EnqueueDeferredAction(FSimpleDelegate& DeferredAction) = 0; /** * Called when properties have finished changing (after PostEditChange is called) */ virtual void NotifyFinishedChangingProperties(const FPropertyChangedEvent& PropertyChangedEvent) = 0; /** * Reruns the current search filter applied to the details panel to account for any new changes */ virtual void RerunCurrentFilter() = 0; /** If a customization standalone widget is used, the value should be update only once, when its window is closed */ virtual bool DontUpdateValueWhileEditing() const = 0; /** @return Whether or not the details panel was created with multiple unrelated objects visible at once in the details panel */ virtual bool ContainsMultipleTopLevelObjects() const = 0; /** @return the customization instance that defines how the display for a root object looks */ virtual TSharedPtr GetRootObjectCustomization() const = 0; /** Runs the details customization update on a root property node */ virtual void UpdateSinglePropertyMap(TSharedPtr InRootPropertyNode, struct FDetailLayoutData& LayoutData, bool bIsExternal) = 0; virtual const FCustomPropertyTypeLayoutMap& GetCustomPropertyTypeLayoutMap() const = 0; /** Saves the expansion state of property nodes for the selected object set */ virtual void SaveExpandedItems(TSharedRef StartNode) = 0; /** * Restores the expansion state of property nodes for the selected object set */ virtual void RestoreExpandedItems(TSharedRef StartNode) = 0; /** * Restores the expansion state of property nodes for the selected object set, with optionally provided external expansion states. */ virtual void RestoreExpandedItems(TSharedRef StartNode, TMap* OptionalExpansionStates) = 0; /** * Mark node as animating, useful if animating during behaviors that trigger widget reconstruction. * @param InNode The slate property node to animate. * @param InAnimationDuration The animation duration in seconds. * @param InAnimationBatchId (Optional) A batch id to enable simultaneous (and performant) animation of multiple rows. */ virtual void MarkNodeAnimating(TSharedPtr InNode, float InAnimationDuration, TOptional InAnimationBatchId = {}) = 0; /** @return true if node is animating */ virtual bool IsNodeAnimating(TSharedPtr InNode) = 0; /** @return the time/progress of the given node (time since creation/play), if it's animating. The time is in seconds. */ virtual float GetNodeAnimationTime(TSharedPtr InNode) = 0; /** Column width accessibility */ virtual class FDetailColumnSizeData& GetColumnSizeData() = 0; /** Does this details view allow favoriting? */ virtual bool IsFavoritingEnabled() const = 0; /** Is the given group a favorite? */ virtual bool IsGroupFavorite(FStringView GroupPath) const = 0; /** Set the given group's favorite status. */ virtual void SetGroupFavorite(FStringView GroupPath, bool IsFavorite) = 0; /** Is the given custom builder a favorite? */ virtual bool IsCustomBuilderFavorite(FStringView Path) const = 0; /** Set the given group's favorite status. */ virtual void SetCustomBuilderFavorite(FStringView GroupPath, bool IsFavorite) = 0; /** Retrieve a list of top-most detail tree nodes. */ virtual void GetHeadNodes(TArray>& OutNodes) {} /** * Gets the @code FDetailsViewStyleKey& @endcode which provides a Key to the current style for a Details View */ virtual const FDetailsViewStyleKey& GetStyleKey() override { return FDetailsViewStyleKeys::Default(); } /** * Updates @code FDetailsViewStyleKey& StyleKey @endcode for the current @code IDetailsViewPrivate @endcode state */ virtual void UpdateStyleKey() override { } /** * Returns a bool indicating whether the given @code FDetailsViewStyleKey @endcode is the default Details View Style */ virtual bool IsDefaultStyle() const override { return true; } /** * Returns a @code TSharedPtr @endcode to the @code FDetailsDisplayManager @endcode for this * details view */ virtual TSharedPtr GetDisplayManager() = 0; virtual TSharedPtr GetDetailsNameWidgetOverrideCustomization() { return nullptr; } };