2014-12-07 19:09:38 -05:00
|
|
|
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
2014-03-14 14:13:41 -04:00
|
|
|
|
|
|
|
|
#include "PersonaPrivatePCH.h"
|
|
|
|
|
#include "Persona.h"
|
|
|
|
|
|
|
|
|
|
#include "Editor/PropertyEditor/Public/PropertyEditorModule.h"
|
|
|
|
|
#include "Editor/PropertyEditor/Public/IDetailsView.h"
|
|
|
|
|
#include "Editor/Kismet/Public/BlueprintEditorTabs.h"
|
|
|
|
|
#include "Editor/KismetWidgets/Public/SSingleObjectDetailsPanel.h"
|
|
|
|
|
|
|
|
|
|
#include "PersonaMeshDetails.h"
|
|
|
|
|
|
|
|
|
|
#include "MeshMode.h"
|
|
|
|
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "PersonaMeshMode"
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
// SMeshPropertiesTabBody
|
|
|
|
|
|
|
|
|
|
class SMeshPropertiesTabBody : public SSingleObjectDetailsPanel
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
SLATE_BEGIN_ARGS(SMeshPropertiesTabBody) {}
|
|
|
|
|
SLATE_END_ARGS()
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
// Pointer back to owning Persona instance (the keeper of state)
|
|
|
|
|
TWeakPtr<class FPersona> PersonaPtr;
|
|
|
|
|
public:
|
|
|
|
|
void Construct(const FArguments& InArgs, TSharedPtr<FPersona> InPersona)
|
|
|
|
|
{
|
|
|
|
|
PersonaPtr = InPersona;
|
|
|
|
|
|
2015-04-10 02:12:40 -04:00
|
|
|
SSingleObjectDetailsPanel::Construct(SSingleObjectDetailsPanel::FArguments().HostCommandList(InPersona->GetToolkitCommands()), true, true);
|
2014-03-14 14:13:41 -04:00
|
|
|
|
|
|
|
|
PropertyView->SetGenericLayoutDetailsDelegate( FOnGetDetailCustomizationInstance::CreateStatic( &FPersonaMeshDetails::MakeInstance, InPersona ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SSingleObjectDetailsPanel interface
|
2014-06-13 06:14:46 -04:00
|
|
|
virtual UObject* GetObjectToObserve() const override
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
return PersonaPtr.Pin()->GetMesh();
|
|
|
|
|
}
|
|
|
|
|
// End of SSingleObjectDetailsPanel interface
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
// FMeshPropertiesSummoner
|
|
|
|
|
|
|
|
|
|
FMeshPropertiesSummoner::FMeshPropertiesSummoner(TSharedPtr<class FAssetEditorToolkit> InHostingApp)
|
|
|
|
|
: FWorkflowTabFactory(FPersonaTabs::MeshAssetPropertiesID, InHostingApp)
|
|
|
|
|
{
|
|
|
|
|
TabLabel = LOCTEXT("MeshProperties_TabTitle", "Mesh Details");
|
2014-10-09 12:34:55 -04:00
|
|
|
TabIcon = FSlateIcon(FEditorStyle::GetStyleSetName(), "ClassIcon.SkeletalMesh");
|
2014-03-14 14:13:41 -04:00
|
|
|
|
|
|
|
|
bIsSingleton = true;
|
|
|
|
|
|
|
|
|
|
ViewMenuDescription = LOCTEXT("MeshProperties_MenuTitle", "Mesh Details");
|
|
|
|
|
ViewMenuTooltip = LOCTEXT("MeshProperties_MenuToolTip", "Shows the skeletal mesh properties");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TSharedRef<SWidget> FMeshPropertiesSummoner::CreateTabBody(const FWorkflowTabSpawnInfo& Info) const
|
|
|
|
|
{
|
|
|
|
|
TSharedPtr<FPersona> PersonaApp = StaticCastSharedPtr<FPersona>(HostingApp.Pin());
|
|
|
|
|
return SNew(SMeshPropertiesTabBody, PersonaApp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
// FMeshEditAppMode
|
|
|
|
|
|
|
|
|
|
FMeshEditAppMode::FMeshEditAppMode(TSharedPtr<FPersona> InPersona)
|
|
|
|
|
: FPersonaAppMode(InPersona, FPersonaModes::MeshEditMode)
|
|
|
|
|
{
|
|
|
|
|
PersonaTabFactories.RegisterFactory(MakeShareable(new FSelectionDetailsSummoner(InPersona)));
|
|
|
|
|
PersonaTabFactories.RegisterFactory(MakeShareable(new FMeshPropertiesSummoner(InPersona)));
|
|
|
|
|
|
2014-07-15 13:25:38 -04:00
|
|
|
TabLayout = FTabManager::NewLayout( "Persona_MeshEditMode_Layout_v7" )
|
2014-03-14 14:13:41 -04:00
|
|
|
->AddArea
|
|
|
|
|
(
|
|
|
|
|
FTabManager::NewPrimaryArea()
|
|
|
|
|
->SetOrientation(Orient_Vertical)
|
|
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
// Top toolbar area
|
|
|
|
|
FTabManager::NewStack()
|
|
|
|
|
->SetSizeCoefficient(0.186721f)
|
|
|
|
|
->SetHideTabWell(true)
|
|
|
|
|
->AddTab( InPersona->GetToolbarTabId(), ETabState::OpenedTab )
|
|
|
|
|
)
|
|
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
// Rest of screen
|
|
|
|
|
FTabManager::NewSplitter()
|
|
|
|
|
->SetOrientation(Orient_Horizontal)
|
|
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
// Left 1/3rd - Skeleton tree and mesh panel
|
|
|
|
|
FTabManager::NewSplitter()
|
|
|
|
|
->SetOrientation(Orient_Vertical)
|
2014-07-15 13:25:38 -04:00
|
|
|
->SetSizeCoefficient(0.3f)
|
2014-03-14 14:13:41 -04:00
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
FTabManager::NewStack()
|
|
|
|
|
->AddTab( FPersonaTabs::MeshAssetPropertiesID, ETabState::OpenedTab )
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
// Middle 1/3rd - Viewport
|
|
|
|
|
FTabManager::NewSplitter()
|
|
|
|
|
->SetOrientation(Orient_Vertical)
|
2014-07-15 13:25:38 -04:00
|
|
|
->SetSizeCoefficient(0.5f)
|
2014-03-14 14:13:41 -04:00
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
FTabManager::NewStack()
|
|
|
|
|
->SetHideTabWell(true)
|
|
|
|
|
->AddTab( FPersonaTabs::PreviewViewportID, ETabState::OpenedTab )
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
// Right 1/3rd - Details panel and quick browser
|
|
|
|
|
FTabManager::NewSplitter()
|
|
|
|
|
->SetOrientation(Orient_Vertical)
|
2014-07-15 13:25:38 -04:00
|
|
|
->SetSizeCoefficient(0.2f)
|
2014-03-14 14:13:41 -04:00
|
|
|
->Split
|
|
|
|
|
(
|
|
|
|
|
FTabManager::NewStack()
|
|
|
|
|
->AddTab( FPersonaTabs::MorphTargetsID, ETabState::OpenedTab )
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|