Files
UnrealEngineUWP/Engine/Source/Runtime/Slate/Private/Framework/MultiBox/SWidgetBlock.cpp
Matthew Griffin bb70b349ce Merging CL 2804086 from //UE4/Release-4.11 to Dev-Main (//UE4/Dev-Main) to isolate copyright update
#lockdown Nick.Penwarden

[CL 2819020 by Matthew Griffin in Main branch]
2016-01-07 08:17:16 -05:00

100 lines
2.7 KiB
C++

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#include "SlatePrivatePCH.h"
#include "MultiBox.h"
#include "SWidgetBlock.h"
/**
* Constructor
*
* @param InHeadingText Heading text
*/
FWidgetBlock::FWidgetBlock( TSharedRef<SWidget> InContent, const FText& InLabel, bool bInNoIndent )
: FMultiBlock( nullptr, nullptr, NAME_None, EMultiBlockType::Widget )
, ContentWidget( InContent )
, Label( InLabel )
, bNoIndent( bInNoIndent )
{
}
void FWidgetBlock::CreateMenuEntry(FMenuBuilder& MenuBuilder) const
{
FText EntryLabel = (!Label.IsEmpty()) ? Label : NSLOCTEXT("WidgetBlock", "CustomControl", "Custom Control");
MenuBuilder.AddWidget(ContentWidget, FText::GetEmpty(), true);
}
/**
* Allocates a widget for this type of MultiBlock. Override this in derived classes.
*
* @return MultiBlock widget object
*/
TSharedRef< class IMultiBlockBaseWidget > FWidgetBlock::ConstructWidget() const
{
return SNew( SWidgetBlock )
.Cursor(EMouseCursor::Default);
}
/**
* Construct this widget
*
* @param InArgs The declaration data for this widget
*/
void SWidgetBlock::Construct( const FArguments& InArgs )
{
}
/**
* Builds this MultiBlock widget up from the MultiBlock associated with it
*/
void SWidgetBlock::BuildMultiBlockWidget(const ISlateStyle* StyleSet, const FName& StyleName)
{
TSharedRef< const FWidgetBlock > WidgetBlock = StaticCastSharedRef< const FWidgetBlock >( MultiBlock.ToSharedRef() );
bool bHasLabel = !WidgetBlock->Label.IsEmpty();
FMargin Padding = WidgetBlock->bNoIndent ? StyleSet->GetMargin( StyleName, ".Block.Padding" ) : StyleSet->GetMargin( StyleName, ".Block.IndentedPadding" );
// Add this widget to the search list of the multibox
if (MultiBlock->GetSearchable())
OwnerMultiBoxWidget.Pin()->AddSearchElement(this->AsWidget(), WidgetBlock->Label);
// This widget holds the search text, set it as the search block widget
if (OwnerMultiBoxWidget.Pin()->GetSearchTextWidget() == WidgetBlock->ContentWidget)
{
OwnerMultiBoxWidget.Pin()->SetSearchBlockWidget(this->AsWidget());
this->AsWidget()->SetVisibility(EVisibility::Collapsed);
}
ChildSlot
.Padding( Padding ) // Large left margin mimics the indent of normal menu items when bNoIndent is false
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SHorizontalBox)
.Visibility( bHasLabel ? EVisibility::Visible : EVisibility::Collapsed )
+ SHorizontalBox::Slot()
.AutoWidth()
.Padding(0.f, 0.f, 4.f, 0.f)
.VAlign( VAlign_Center )
[
SNew( STextBlock )
.TextStyle( StyleSet, ISlateStyle::Join( StyleName, ".Label" ) )
.Text( WidgetBlock->Label )
]
]
+SHorizontalBox::Slot()
.VAlign( VAlign_Bottom )
.FillWidth(1.f)
[
WidgetBlock->ContentWidget
]
];
}