// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Input/Reply.h" #include "Widgets/SWidget.h" #include "IPropertyUtilities.h" #include "IDetailTreeNode.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/Views/STableViewBase.h" #include "Widgets/Views/STableRow.h" #include "SDetailsViewBase.h" #include "SDetailTableRowBase.h" class IDetailRootObjectCustomization; class SDetailMultiTopLevelObjectTableRow : public SDetailTableRowBase { public: SLATE_BEGIN_ARGS(SDetailMultiTopLevelObjectTableRow) : _DisplayName() , _ShowExpansionArrow(false) {} SLATE_ARGUMENT( FText, DisplayName ) SLATE_ARGUMENT( bool, ShowExpansionArrow ) SLATE_END_ARGS() void Construct( const FArguments& InArgs, TSharedRef InOwnerTreeNode, const TSharedRef& InCustomizedWidgetContents, const TSharedRef& InOwnerTableView ); private: const FSlateBrush* GetBackgroundImage() const; private: virtual FReply OnMouseButtonDown( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) override; virtual FReply OnMouseButtonDoubleClick( const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent ) override; private: bool bShowExpansionArrow; }; class FDetailMultiTopLevelObjectRootNode : public IDetailTreeNode, public TSharedFromThis { public: FDetailMultiTopLevelObjectRootNode( const FDetailNodeList& InChildNodes, const TSharedPtr& RootObjectCustomization, IDetailsViewPrivate& InDetailsView, const UObject& InRootObject ); private: virtual IDetailsViewPrivate& GetDetailsView() const override{ return DetailsView; } virtual void OnItemExpansionChanged( bool bIsExpanded ) override {} virtual bool ShouldBeExpanded() const override { return true; } virtual ENodeVisibility GetVisibility() const override; virtual TSharedRef< ITableRow > GenerateNodeWidget( const TSharedRef& OwnerTable, const FDetailColumnSizeData& ColumnSizeData, const TSharedRef& PropertyUtilities, bool bAllowFavoriteSystem) override; virtual void GetChildren( TArray< TSharedRef >& OutChildren ) override; virtual void FilterNode( const FDetailFilter& InFilter ) override; virtual void Tick( float DeltaTime ) override {} virtual bool ShouldShowOnlyChildren() const override; virtual FName GetNodeName() const override { return NodeName; } private: FDetailNodeList ChildNodes; IDetailsViewPrivate& DetailsView; TWeakPtr RootObjectCustomization; const TWeakObjectPtr RootObject; FName NodeName; bool bShouldBeVisible; };