Files
UnrealEngineUWP/Engine/Source/Developer/AutomationWindow/Private/SAutomationTestTreeView.h
Mark Satterthwaite 6d488da705 Fix build errors under Clang.
#codereview michael.trepka

[CL 2077482 by Mark Satterthwaite in Main branch]
2014-05-19 07:22:03 -04:00

148 lines
4.4 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
SAutomationTestTreeView.h: Declares the SAutomationTestTreeView class.
=============================================================================*/
#pragma once
/**
* Implements the automation test tree view. Same slate interface as STreeView but adds the ability to clear the internal widget cache.
*/
template<typename ItemType>
class SAutomationTestTreeView
: public STreeView< ItemType >
{
public:
typedef typename TListTypeTraits< ItemType >::NullableType NullableItemType;
typedef typename TSlateDelegates< ItemType >::FOnGetChildren FOnGetChildren;
typedef typename TSlateDelegates< ItemType >::FOnGenerateRow FOnGenerateRow;
typedef typename TSlateDelegates< ItemType >::FOnSetExpansionRecursive FOnSetExpansionRecursive;
typedef typename TSlateDelegates< ItemType >::FOnItemScrolledIntoView FOnItemScrolledIntoView;
typedef typename TSlateDelegates< NullableItemType >::FOnSelectionChanged FOnSelectionChanged;
typedef typename TSlateDelegates< ItemType >::FOnMouseButtonDoubleClick FOnMouseButtonDoubleClick;
typedef typename TSlateDelegates< ItemType >::FOnExpansionChanged FOnExpansionChanged;
public:
SLATE_BEGIN_ARGS( SAutomationTestTreeView )
: _OnGenerateRow()
, _OnGetChildren()
, _OnSetExpansionRecursive()
, _TreeItemsSource( static_cast< TArray<ItemType>* >(NULL) ) //@todo Slate Syntax: Initializing from NULL without a cast
, _ItemHeight(16)
, _OnContextMenuOpening()
, _OnMouseButtonDoubleClick()
, _OnSelectionChanged()
, _OnExpansionChanged()
, _SelectionMode(ESelectionMode::Multi)
, _ClearSelectionOnClick(true)
, _ExternalScrollbar()
{}
SLATE_EVENT( FOnGenerateRow, OnGenerateRow )
SLATE_EVENT( FOnItemScrolledIntoView, OnItemScrolledIntoView )
SLATE_EVENT( FOnGetChildren, OnGetChildren )
SLATE_EVENT( FOnSetExpansionRecursive, OnSetExpansionRecursive )
SLATE_ARGUMENT( TArray<ItemType>* , TreeItemsSource )
SLATE_ATTRIBUTE( float, ItemHeight )
SLATE_EVENT( FOnContextMenuOpening, OnContextMenuOpening )
SLATE_EVENT( FOnMouseButtonDoubleClick, OnMouseButtonDoubleClick )
SLATE_EVENT( FOnSelectionChanged, OnSelectionChanged )
SLATE_EVENT( FOnExpansionChanged, OnExpansionChanged )
SLATE_ATTRIBUTE( ESelectionMode::Type, SelectionMode )
SLATE_ARGUMENT( TSharedPtr<SHeaderRow>, HeaderRow )
SLATE_ARGUMENT ( bool, ClearSelectionOnClick )
SLATE_ARGUMENT( TSharedPtr<SScrollBar>, ExternalScrollbar )
SLATE_END_ARGS()
/**
* Construct this widget
*
* @param InArgs The declaration data for this widget
*/
void Construct( const FArguments& InArgs )
{
this->OnGenerateRow = InArgs._OnGenerateRow;
this->OnItemScrolledIntoView = InArgs._OnItemScrolledIntoView;
this->OnGetChildren = InArgs._OnGetChildren;
this->OnSetExpansionRecursive = InArgs._OnSetExpansionRecursive;
this->TreeItemsSource = InArgs._TreeItemsSource;
this->OnContextMenuOpening = InArgs._OnContextMenuOpening;
this->OnDoubleClick = InArgs._OnMouseButtonDoubleClick;
this->OnSelectionChanged = InArgs._OnSelectionChanged;
this->OnExpansionChanged = InArgs._OnExpansionChanged;
this->SelectionMode = InArgs._SelectionMode;
this->bClearSelectionOnClick = InArgs._ClearSelectionOnClick;
// Check for any parameters that the coder forgot to specify.
FString ErrorString;
{
if ( !this->OnGenerateRow.IsBound() )
{
ErrorString += TEXT("Please specify an OnGenerateRow. \n");
}
if ( this->TreeItemsSource == NULL )
{
ErrorString += TEXT("Please specify a TreeItemsSource. \n");
}
if ( !this->OnGetChildren.IsBound() )
{
ErrorString += TEXT("Please specify an OnGetChildren. \n");
}
}
if (ErrorString.Len() > 0)
{
// Let the coder know what they forgot
this->ChildSlot
.HAlign(HAlign_Center)
.VAlign(VAlign_Center)
[
SNew(STextBlock)
.Text(ErrorString)
];
}
else
{
// Make the TableView
this->ConstructChildren( 0, InArgs._ItemHeight, InArgs._HeaderRow, InArgs._ExternalScrollbar );
}
}
SAutomationTestTreeView()
: STreeView< ItemType >()
{
}
public:
/**
* Clears the internal widget cache and recreates the tree
*/
void ReCreateTreeView()
{
this->WidgetGenerator.Clear();
this->RequestTreeRefresh();
}
};