// 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 SelectedPaths; SelectedPaths.Add(DefaultPath); PathViewPtr->SetSelectedPaths(SelectedPaths); } } TSharedPtr SPathPicker::GetFolderContextMenu(const TArray& SelectedPaths, FContentBrowserMenuExtender_SelectedPaths InMenuExtender, FOnCreateNewFolder InOnCreateNewFolder) { TSharedPtr 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& NewPaths) { PathViewPtr->SetSelectedPaths(NewPaths); } #undef LOCTEXT_NAMESPACE