Files
UnrealEngineUWP/Engine/Source/Editor/ContentBrowser/Private/SPathPicker.cpp
Bob Tellez b1e242c315 [AUTOMERGE]
#UE4 Path pickers that allow context menus will once again allow the creation of a new folder. This also fixes the bug where pickers configured to the extend the menu actually never get a chance to extend anything.

--------
Integrated using branch Ue4-To-UE4-Fortnite-Simple (reversed) of change#2226326 by Bob.Tellez on 2014/07/21 21:40:15.

[CL 2227555 by Bob Tellez in Main branch]
2014-07-22 16:59:22 -04:00

78 lines
2.6 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "ContentBrowserPCH.h"
#define LOCTEXT_NAMESPACE "ContentBrowser"
void SPathPicker::Construct( const FArguments& InArgs )
{
TSharedPtr<SPathView> PathViewPtr;
ChildSlot
[
SAssignNew(PathViewPtr, SPathView)
.OnPathSelected(InArgs._PathPickerConfig.OnPathSelected)
.OnGetFolderContextMenu(this, &SPathPicker::GetFolderContextMenu)
.OnGetPathContextMenuExtender(InArgs._PathPickerConfig.OnGetPathContextMenuExtender)
.FocusSearchBoxWhenOpened(InArgs._PathPickerConfig.bFocusSearchBoxWhenOpened)
.AllowContextMenu(InArgs._PathPickerConfig.bAllowContextMenu)
.AllowClassesFolder(false)
.SelectionMode(ESelectionMode::Single)
];
const FString& DefaultPath = InArgs._PathPickerConfig.DefaultPath;
if ( !DefaultPath.IsEmpty() )
{
if (InArgs._PathPickerConfig.bAddDefaultPath)
{
PathViewPtr->AddPath(DefaultPath, false);
}
TArray<FString> SelectedPaths;
SelectedPaths.Add(DefaultPath);
PathViewPtr->SetSelectedPaths(SelectedPaths);
}
}
TSharedPtr<SWidget> SPathPicker::GetFolderContextMenu(const TArray<FString>& SelectedPaths, FContentBrowserMenuExtender_SelectedPaths InMenuExtender, FOnCreateNewFolder InOnCreateNewFolder)
{
TSharedPtr<FExtender> Extender;
if (InMenuExtender.IsBound())
{
Extender = InMenuExtender.Execute(SelectedPaths);
}
const bool bInShouldCloseWindowAfterSelection = true;
const bool bCloseSelfOnly = true;
FMenuBuilder MenuBuilder(bInShouldCloseWindowAfterSelection, nullptr, Extender, bCloseSelfOnly);
// New Folder
MenuBuilder.AddMenuEntry(
LOCTEXT("NewFolder", "New Folder"),
LOCTEXT("NewSubFolderTooltip", "Creates a new sub-folder in this folder."),
FSlateIcon(FEditorStyle::GetStyleSetName(), "ContentBrowser.NewFolderIcon"),
FUIAction(FExecuteAction::CreateSP(this, &SPathPicker::CreateNewFolder, SelectedPaths.Num() > 0 ? SelectedPaths[0] : FString(), InOnCreateNewFolder)),
"NewFolder"
);
return MenuBuilder.MakeWidget();
}
void SPathPicker::CreateNewFolder(FString FolderPath, FOnCreateNewFolder InOnCreateNewFolder)
{
// Create a valid base name for this folder
FText DefaultFolderBaseName = LOCTEXT("DefaultFolderName", "NewFolder");
FText DefaultFolderName = DefaultFolderBaseName;
int32 NewFolderPostfix = 1;
while (ContentBrowserUtils::DoesFolderExist(FolderPath / DefaultFolderName.ToString()))
{
DefaultFolderName = FText::Format(LOCTEXT("DefaultFolderNamePattern", "{0}{1}"), DefaultFolderBaseName, FText::AsNumber(NewFolderPostfix));
NewFolderPostfix++;
}
InOnCreateNewFolder.ExecuteIfBound(DefaultFolderName.ToString(), FolderPath);
}
#undef LOCTEXT_NAMESPACE