haxis/Plugins/SkillTree/Source/SkillTreeEditor/Private/SkillTreeDetailsCustomizati...

148 lines
5.2 KiB
C++

// Project Lab - NHTV IGAD
//////////////////////////////////////////
// Author: Yoshi van Belkom - 130118
//////////////////////////////////////////
#include "SkillTreeEditorPrivatePCH.h"
#include "SkillTreeDetailsCustomization.h"
#include "PhysicsEngine/BodySetup.h"
#include "Editor/Documentation/Public/IDocumentation.h"
#include "PropertyRestriction.h"
#include "PropertyCustomizationHelpers.h"
#include "SkillTreeObject.h"
#include "SkillObject.h"
#define LOCTEXT_NAMESPACE "SkillTreeEditor"
/////////////////////////////////////////////////////
// FSkillTreeDetailsCustomization
// Makes a new instance of this detail layout class for a specific detail view requesting it.
TSharedRef<IDetailCustomization> FSkillTreeDetailsCustomization::MakeInstance()
{
return MakeInstanceForSkillTreeEditor( );
}
// Makes a new instance of this detail layout class for a specific detail view requesting it.
TSharedRef<IDetailCustomization> FSkillTreeDetailsCustomization::MakeInstanceForSkillTreeEditor( )
{
return MakeShareable( new FSkillTreeDetailsCustomization( ) );
}
FSkillTreeDetailsCustomization::FSkillTreeDetailsCustomization( )
{
}
FDetailWidgetRow& FSkillTreeDetailsCustomization::GenerateWarningRow( IDetailCategoryBuilder& a_warningCategory, bool a_experimental, const FText& a_warningText, const FText& a_tooltip, const FString& a_excerptLink, const FString& a_excerptName )
{
const FText searchString = a_warningText;
const FSlateBrush* warningIcon = FEditorStyle::GetBrush( a_experimental ? "PropertyEditor.ExperimentalClass" : "PropertyEditor.EarlyAccessClass" );
FDetailWidgetRow& warningRow = a_warningCategory.AddCustomRow( searchString )
.WholeRowContent()
[
SNew( SHorizontalBox )
.ToolTip( IDocumentation::Get()->CreateToolTip( a_tooltip, nullptr, a_excerptLink, a_excerptName ) )
.Visibility( EVisibility::Visible )
+ SHorizontalBox::Slot()
.VAlign( VAlign_Center )
.AutoWidth()
.Padding( 4.0f, 0.0f, 0.0f, 0.0f )
[SNew( SImage )
.Image( warningIcon )
]
+ SHorizontalBox::Slot()
.VAlign( VAlign_Center )
.AutoWidth()
.Padding( 4.0f, 0.0f, 0.0f, 0.0f )
[
SNew( STextBlock )
.Text( a_warningText )
.Font( IDetailLayoutBuilder::GetDetailFont() )
]
];
return warningRow;
}
void FSkillTreeDetailsCustomization::CustomizeDetails( IDetailLayoutBuilder& a_detailLayout )
{
IDetailCategoryBuilder& skillTreeCategory = a_detailLayout.EditCategory( "SkillTree", FText::GetEmpty(), ECategoryPriority::Important );
BuildSkillTreeSection( skillTreeCategory, a_detailLayout );
}
// Makes sure Skill Tree properties are near the top.
void FSkillTreeDetailsCustomization::BuildSkillTreeSection( IDetailCategoryBuilder& a_skillTreeCategory, IDetailLayoutBuilder& a_detailLayout )
{
a_skillTreeCategory.AddProperty( GET_MEMBER_NAME_CHECKED( USkillTreeObject, skills ) );
}
/////////////////////////////////////////////////////
// FSkillDetailsCustomization
// Makes a new instance of this detail layout class for a specific detail view requesting it.
TSharedRef<IDetailCustomization> FSkillDetailsCustomization::MakeInstance()
{
return MakeInstanceForSkillTreeEditor( );
}
// Makes a new instance of this detail layout class for a specific detail view requesting it.
TSharedRef<IDetailCustomization> FSkillDetailsCustomization::MakeInstanceForSkillTreeEditor( )
{
return MakeShareable( new FSkillDetailsCustomization( ) );
}
FSkillDetailsCustomization::FSkillDetailsCustomization( )
{
}
FDetailWidgetRow& FSkillDetailsCustomization::GenerateWarningRow( IDetailCategoryBuilder& a_warningCategory, bool a_experimental, const FText& a_warningText, const FText& a_tooltip, const FString& a_excerptLink, const FString& a_excerptName )
{
const FText searchString = a_warningText;
const FSlateBrush* warningIcon = FEditorStyle::GetBrush( a_experimental ? "PropertyEditor.ExperimentalClass" : "PropertyEditor.EarlyAccessClass" );
FDetailWidgetRow& warningRow = a_warningCategory.AddCustomRow( searchString )
.WholeRowContent()
[
SNew( SHorizontalBox )
.ToolTip( IDocumentation::Get()->CreateToolTip( a_tooltip, nullptr, a_excerptLink, a_excerptName ) )
.Visibility( EVisibility::Visible )
+ SHorizontalBox::Slot()
.VAlign( VAlign_Center )
.AutoWidth()
.Padding( 4.0f, 0.0f, 0.0f, 0.0f )
[SNew( SImage )
.Image( warningIcon )
]
+ SHorizontalBox::Slot()
.VAlign( VAlign_Center )
.AutoWidth()
.Padding( 4.0f, 0.0f, 0.0f, 0.0f )
[
SNew( STextBlock )
.Text( a_warningText )
.Font( IDetailLayoutBuilder::GetDetailFont() )
]
];
return warningRow;
}
void FSkillDetailsCustomization::CustomizeDetails( IDetailLayoutBuilder& a_detailLayout )
{
IDetailCategoryBuilder& skillCategory = a_detailLayout.EditCategory( "Skill", FText::GetEmpty(), ECategoryPriority::Important );
BuildSkillSection( skillCategory, a_detailLayout );
}
// Makes sure Skill properties are near the top.
void FSkillDetailsCustomization::BuildSkillSection( IDetailCategoryBuilder& a_skillCategory, IDetailLayoutBuilder& a_detailLayout )
{
a_skillCategory.AddProperty( GET_MEMBER_NAME_CHECKED( USkillObject, hexMap ) );
}
#undef LOCTEXT_NAMESPACE