// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. #include "SequencerUtilities.h" #include "Misc/Paths.h" #include "Layout/Margin.h" #include "Fonts/SlateFontInfo.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SBoxPanel.h" #include "Widgets/Images/SImage.h" #include "Widgets/Text/STextBlock.h" #include "Widgets/Input/SComboButton.h" #include "EditorStyleSet.h" static EVisibility GetRolloverVisibility(TAttribute HoverState, TWeakPtr WeakComboButton) { TSharedPtr ComboButton = WeakComboButton.Pin(); if (HoverState.Get() || ComboButton->IsOpen()) { return EVisibility::SelfHitTestInvisible; } else { return EVisibility::Collapsed; } } TSharedRef FSequencerUtilities::MakeAddButton(FText HoverText, FOnGetContent MenuContent, const TAttribute& HoverState) { FSlateFontInfo SmallLayoutFont( FPaths::EngineContentDir() / TEXT("Slate/Fonts/Roboto-Regular.ttf"), 8 ); TSharedRef ComboButtonText = SNew(STextBlock) .Text(HoverText) .Font(SmallLayoutFont) .ColorAndOpacity( FSlateColor::UseForeground() ); TSharedRef ComboButton = SNew(SComboButton) .HasDownArrow(false) .ButtonStyle(FEditorStyle::Get(), "HoverHintOnly") .ForegroundColor( FSlateColor::UseForeground() ) .OnGetMenuContent(MenuContent) .ContentPadding(FMargin(5, 2)) .HAlign(HAlign_Center) .VAlign(VAlign_Center) .ButtonContent() [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .AutoWidth() .VAlign(VAlign_Center) .Padding(FMargin(0,0,2,0)) [ SNew(SImage) .ColorAndOpacity( FSlateColor::UseForeground() ) .Image(FEditorStyle::GetBrush("Plus")) ] + SHorizontalBox::Slot() .VAlign(VAlign_Center) .AutoWidth() [ ComboButtonText ] ]; TAttribute Visibility = TAttribute::Create(TAttribute::FGetter::CreateStatic(GetRolloverVisibility, HoverState, TWeakPtr(ComboButton))); ComboButtonText->SetVisibility(Visibility); return ComboButton; } FName FSequencerUtilities::GetUniqueName( FName CandidateName, const TArray& ExistingNames ) { FString CandidateNameString = CandidateName.ToString(); FString BaseNameString = CandidateNameString; if ( CandidateNameString.Len() >= 3 && CandidateNameString.Right(3).IsNumeric() ) { BaseNameString = CandidateNameString.Left( CandidateNameString.Len() - 3 ); } FName UniqueName = FName(*BaseNameString); int32 NameIndex = 1; while ( ExistingNames.Contains( UniqueName ) ) { UniqueName = FName( *FString::Printf(TEXT("%s%i"), *BaseNameString, NameIndex ) ); NameIndex++; } return UniqueName; }