void FBlackboardSelectorDetails::CustomizeHeader( TSharedRef<class IPropertyHandle> StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils ) { MyStructProperty = StructPropertyHandle; PropUtils = StructCustomizationUtils.GetPropertyUtilities().Get(); CacheBlackboardData(); HeaderRow.IsEnabled(TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FBlackboardSelectorDetails::IsEditingEnabled))) .NameContent() [ StructPropertyHandle->CreatePropertyNameWidget() ] .ValueContent() [ SNew(SComboButton) .OnGetMenuContent(this, &FBlackboardSelectorDetails::OnGetKeyContent) .ContentPadding(FMargin( 2.0f, 2.0f )) .IsEnabled(this, &FBlackboardSelectorDetails::IsEditingEnabled) .ButtonContent() [ SNew(STextBlock) .Text(this, &FBlackboardSelectorDetails::GetCurrentKeyDesc) .Font(IDetailLayoutBuilder::GetDetailFont()) ] ]; InitKeyFromProperty(); }
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void FBlackboardSelectorDetails::CustomizeStructHeader( TSharedRef<class IPropertyHandle> StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IStructCustomizationUtils& StructCustomizationUtils ) { MyStructProperty = StructPropertyHandle; CacheBlackboardData(); HeaderRow.NameContent() [ StructPropertyHandle->CreatePropertyNameWidget() ] .ValueContent() [ SNew(SComboButton) .OnGetMenuContent(this, &FBlackboardSelectorDetails::OnGetKeyContent) .ContentPadding(FMargin( 2.0f, 2.0f )) .IsEnabled_Static(&FBehaviorTreeDebugger::IsPIENotSimulating) .ButtonContent() [ SNew(STextBlock) .Text(this, &FBlackboardSelectorDetails::GetCurrentKeyDesc) .Font(IDetailLayoutBuilder::GetDetailFont()) ] ]; InitKeyFromProperty(); }
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void FBlackboardDecoratorDetails::CustomizeDetails( IDetailLayoutBuilder& DetailLayout ) { FBehaviorDecoratorDetails::CustomizeDetails(DetailLayout); CacheBlackboardData(DetailLayout); const bool bIsEnabled = CachedBlackboardAsset.IsValid(); TAttribute<bool> PropertyEditCheck = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FBehaviorDecoratorDetails::IsEditingEnabled)); IDetailCategoryBuilder& FlowCategory = DetailLayout.EditCategory("FlowControl"); NotifyObserverProperty = DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, NotifyObserver)); IDetailPropertyRow& AbortRow = FlowCategory.AddProperty(NotifyObserverProperty); AbortRow.IsEnabled(PropertyEditCheck); IDetailCategoryBuilder& BBCategory = DetailLayout.EditCategory( "Blackboard" ); IDetailPropertyRow& KeySelectorRow = BBCategory.AddProperty(DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, BlackboardKey))); KeySelectorRow.IsEnabled(bIsEnabled); KeyIDProperty = DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, BlackboardKey.SelectedKeyID), UBTDecorator_BlackboardBase::StaticClass()); if (KeyIDProperty.IsValid()) { FSimpleDelegate OnKeyChangedDelegate = FSimpleDelegate::CreateSP( this, &FBlackboardDecoratorDetails::OnKeyIDChanged ); KeyIDProperty->SetOnPropertyValueChanged(OnKeyChangedDelegate); OnKeyIDChanged(); } #if WITH_EDITORONLY_DATA IDetailPropertyRow& BasicOpRow = BBCategory.AddProperty(DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, BasicOperation))); BasicOpRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FBlackboardDecoratorDetails::GetBasicOpVisibility))); BasicOpRow.IsEnabled(PropertyEditCheck); IDetailPropertyRow& ArithmeticOpRow = BBCategory.AddProperty(DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, ArithmeticOperation))); ArithmeticOpRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FBlackboardDecoratorDetails::GetArithmeticOpVisibility))); ArithmeticOpRow.IsEnabled(PropertyEditCheck); IDetailPropertyRow& TextOpRow = BBCategory.AddProperty(DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, TextOperation))); TextOpRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FBlackboardDecoratorDetails::GetTextOpVisibility))); TextOpRow.IsEnabled(PropertyEditCheck); #endif // WITH_EDITORONLY_DATA IntValueProperty = DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, IntValue)); IDetailPropertyRow& IntValueRow = BBCategory.AddProperty(IntValueProperty); IntValueRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FBlackboardDecoratorDetails::GetIntValueVisibility))); IntValueRow.IsEnabled(PropertyEditCheck); IDetailPropertyRow& FloatValueRow = BBCategory.AddProperty(DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, FloatValue))); FloatValueRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FBlackboardDecoratorDetails::GetFloatValueVisibility))); FloatValueRow.IsEnabled(PropertyEditCheck); IDetailPropertyRow& StringValueRow = BBCategory.AddProperty(DetailLayout.GetProperty(GET_MEMBER_NAME_CHECKED(UBTDecorator_Blackboard, StringValue))); StringValueRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FBlackboardDecoratorDetails::GetStringValueVisibility))); StringValueRow.IsEnabled(PropertyEditCheck); IDetailPropertyRow& EnumValueRow = BBCategory.AddProperty(IntValueProperty); EnumValueRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FBlackboardDecoratorDetails::GetEnumValueVisibility))); EnumValueRow.IsEnabled(PropertyEditCheck); EnumValueRow.CustomWidget() .NameContent() [ IntValueProperty->CreatePropertyNameWidget() ] .ValueContent() [ SNew(SComboButton) .OnGetMenuContent(this, &FBlackboardDecoratorDetails::OnGetEnumValueContent) .ContentPadding(FMargin( 2.0f, 2.0f )) .ButtonContent() [ SNew(STextBlock) .Text(this, &FBlackboardDecoratorDetails::GetCurrentEnumValueDesc) .Font(IDetailLayoutBuilder::GetDetailFont()) ] ]; }