Files
UnrealEngineUWP/Engine/Source/Editor/Blutility/Private/GlobalBlutilityDialog.cpp

141 lines
4.7 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "BlutilityPrivatePCH.h"
#include "BlutilityClasses.h"
#include "AssetTypeActions_EditorUtilityBlueprint.h"
#include "Toolkits/AssetEditorManager.h"
#include "BlueprintEditorModule.h"
#include "Kismet2/KismetEditorUtilities.h"
#include "AssetRegistryModule.h"
#include "AssetToolsModule.h"
#include "GlobalBlutilityDialog.h"
#include "Editor/PropertyEditor/Public/PropertyEditorModule.h"
#include "Editor/PropertyEditor/Public/IDetailsView.h"
#include "AssetRegistryModule.h"
#include "SDockTab.h"
#define LOCTEXT_NAMESPACE "GlobalBlutilityDialog"
const FName NAME_DetailsPanel(TEXT("GlobalBlutilityDialog_DetailsPanel"));
const FName NAME_GlobalBlutilityDialogAppIdentifier = FName(TEXT("GlobalBlutilityDialogApp"));
//////////////////////////////////////////////////////////////////////////
// FGlobalBlutilityDialog
void FGlobalBlutilityDialog::RegisterTabSpawners(const TSharedRef<class FTabManager>& TabManager)
{
TabManager->RegisterTabSpawner( NAME_DetailsPanel, FOnSpawnTab::CreateRaw( this, &FGlobalBlutilityDialog::SpawnTab_DetailsPanel ) );
}
void FGlobalBlutilityDialog::UnregisterTabSpawners(const TSharedRef<class FTabManager>& TabManager)
{
TabManager->UnregisterTabSpawner( NAME_DetailsPanel );
}
TSharedRef<SDockTab> FGlobalBlutilityDialog::SpawnTab_DetailsPanel( const FSpawnTabArgs& SpawnTabArgs )
{
const TSharedRef<SDockTab> SpawnedTab = SNew(SDockTab)
//@TODO: Add an icon .Icon( FEditorStyle::GetBrush("SoundClassEditor.Tabs.Properties") )
.Label( LOCTEXT("GlobalBlutilityDetailsTitle", "Blutility Details") )
[
DetailsView.ToSharedRef()
];
// Make sure the blutility instance is selected
TArray<UObject*> SelectedObjects;
SelectedObjects.Add(BlutilityInstance.Get());
UpdatePropertyWindow(SelectedObjects);
return SpawnedTab;
}
void FGlobalBlutilityDialog::InitBlutilityDialog(const EToolkitMode::Type Mode, const TSharedPtr< class IToolkitHost >& InitToolkitHost, UObject* ObjectToEdit)
{
// Create an instance of the blutility
check(ObjectToEdit != NULL);
UEditorUtilityBlueprint* BlutilityBP = CastChecked<UEditorUtilityBlueprint>(ObjectToEdit);
check(BlutilityBP->GeneratedClass->IsChildOf(UGlobalEditorUtilityBase::StaticClass()));
UGlobalEditorUtilityBase* Instance = NewObject<UGlobalEditorUtilityBase>(GetTransientPackage(), BlutilityBP->GeneratedClass);
Instance->AddToRoot();
BlutilityInstance = Instance;
//
CreateInternalWidgets();
const TSharedRef<FTabManager::FLayout> StandaloneDefaultLayout = FTabManager::NewLayout( "Standalone_GlobalBlutility_Layout" )
->AddArea
(
FTabManager::NewPrimaryArea()
->Split
(
FTabManager::NewStack()
->AddTab( NAME_DetailsPanel, ETabState::OpenedTab)
)
);
const bool bCreateDefaultStandaloneMenu = false;
const bool bCreateDefaultToolbar = false;
FAssetEditorToolkit::InitAssetEditor( Mode, InitToolkitHost, NAME_GlobalBlutilityDialogAppIdentifier, StandaloneDefaultLayout, bCreateDefaultStandaloneMenu, bCreateDefaultToolbar, ObjectToEdit );
// @todo toolkit world centric editing
/*if (IsWorldCentricAssetEditor())
{
SpawnToolkitTab(NAME_DetailsPanel, FString(), EToolkitTabSpot::Details);
}*/
}
FGlobalBlutilityDialog::~FGlobalBlutilityDialog()
{
if (UGlobalEditorUtilityBase* Instance = BlutilityInstance.Get())
{
Instance->RemoveFromRoot();
}
DetailsView.Reset();
}
void FGlobalBlutilityDialog::AddReferencedObjects(FReferenceCollector& Collector)
{
if (UGlobalEditorUtilityBase* Instance = BlutilityInstance.Get())
{
Collector.AddReferencedObject(Instance);
}
}
FName FGlobalBlutilityDialog::GetToolkitFName() const
{
return FName("Blutility");
}
FText FGlobalBlutilityDialog::GetBaseToolkitName() const
{
return LOCTEXT( "AppLabel", "Blutility" );
}
FString FGlobalBlutilityDialog::GetWorldCentricTabPrefix() const
{
return LOCTEXT("WorldCentricTabPrefix", "Blutility ").ToString();
}
FLinearColor FGlobalBlutilityDialog::GetWorldCentricTabColorScale() const
{
return FLinearColor( 0.3f, 0.2f, 0.5f, 0.5f );
}
void FGlobalBlutilityDialog::CreateInternalWidgets()
{
// Create a details view
FPropertyEditorModule& PropertyEditorModule = FModuleManager::GetModuleChecked<FPropertyEditorModule>("PropertyEditor");
FDetailsViewArgs DetailsViewArgs(/*bUpdateFromSelection=*/ false, /*bLockable=*/ false, /*bAllowSearch=*/ false, FDetailsViewArgs::HideNameArea, /*bHideSelectionTip=*/ true);
DetailsViewArgs.DefaultsOnlyVisibility = FDetailsViewArgs::EEditDefaultsOnlyNodeVisibility::Hide;
DetailsView = PropertyEditorModule.CreateDetailView(DetailsViewArgs);
}
void FGlobalBlutilityDialog::UpdatePropertyWindow(const TArray<UObject*>& SelectedObjects)
{
DetailsView->SetObjects(SelectedObjects);
}
#undef LOCTEXT_NAMESPACE