You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
90 lines
2.9 KiB
C++
90 lines
2.9 KiB
C++
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
#include "ContentBrowserPCH.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "ContentBrowser"
|
|
|
|
|
|
void SPathPicker::Construct( const FArguments& InArgs )
|
|
{
|
|
for (auto DelegateIt = InArgs._PathPickerConfig.SetPathsDelegates.CreateConstIterator(); DelegateIt; ++DelegateIt)
|
|
{
|
|
if ((*DelegateIt) != NULL)
|
|
{
|
|
(**DelegateIt) = FSetPathPickerPathsDelegate::CreateSP(this, &SPathPicker::SetPaths);
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void SPathPicker::SetPaths(const TArray<FString>& NewPaths)
|
|
{
|
|
PathViewPtr->SetSelectedPaths(NewPaths);
|
|
}
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE |