Hi,
Why does the Details panel don’t show up my checkbox ? It’s base on FMobilityCustomization :
MyPanelToolBar.h
#include "Editor/PropertyEditor/Public/DetailCategoryBuilder.h"
#include "Editor/PropertyEditor/Public/IDetailCustomization.h"
#include "Editor/PropertyEditor/Public/DetailLayoutBuilder.h"
#include "Widgets/Layout/SUniformGridPanel.h"
#include "MyPanel.h"
#pragma once
class FToolBarBuilder;
class FMyPanelDetails;
enum class ECheckBoxState : uint8;
class FMyPanelToolBar : public TSharedFromThis<FMyPanelToolBar>
{
public:
void CreateToolBar(IDetailLayoutBuilder& DetailBuilder, IDetailPropertyRow& ToolbarRow);
FText GetToolBarToolTip() const;
ECheckBoxState IsMobilityActive() const;
void OnMobilityChanged(ECheckBoxState InCheckedState);
FSlateColor GetMobilityTextColor() const;
private:
TSharedPtr<IPropertyHandle> ToolbarHandle;
};
MyPanelToolBar.cpp
#include "MyPanelEditor.h"
#include "MyPanelToolBar.h"
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Widgets/SBoxPanel.h"
#include "Styling/SlateTypes.h"
#include "Widgets/Images/SImage.h"
#include "Widgets/Text/STextBlock.h"
#include "Widgets/Layout/SUniformGridPanel.h"
#include "Widgets/Input/SCheckBox.h"
#include "EditorStyleSet.h"
#include "DetailLayoutBuilder.h"
#include "DetailWidgetRow.h"
#include "IDetailPropertyRow.h"
#include "DetailCategoryBuilder.h"
#define LOCTEXT_NAMESPACE "MyPanelToolBar"
void FMyPanelToolBar::CreateToolBar(IDetailLayoutBuilder& DetailBuilder, IDetailPropertyRow& ToolbarRow)
{
TSharedPtr<SUniformGridPanel> ButtonOptionsPanel;
ToolbarHandle = DetailBuilder.GetProperty(TEXT("MyPanelTools"));
ToolbarRow.CustomWidget()
.NameContent()
[
SNew(STextBlock)
.Text(LOCTEXT("Mobility", "Mobility"))
.ToolTipText(this, &FMyPanelToolBar::GetToolBarToolTip)
.Font(IDetailLayoutBuilder::GetDetailFont())
]
.ValueContent()
.MaxDesiredWidth(0)
[
SAssignNew(ButtonOptionsPanel, SUniformGridPanel)
];
int32 ColumnIndex = 0;
FText StaticTooltip = LOCTEXT("Mobility_Static_Tooltip", "A static object can't be changed in game.\n* Allows Baked Lighting\n* Fastest Rendering");
// Static Mobility
ButtonOptionsPanel->AddSlot(0, 0)
[
SNew(SCheckBox)
.Style(FEditorStyle::Get(), "Property.ToggleButton.Start")
.IsChecked(this, &FMyPanelToolBar::IsMobilityActive)
.OnCheckStateChanged(this, &FMyPanelToolBar::OnMobilityChanged)
.ToolTipText(StaticTooltip)
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.VAlign(VAlign_Center)
.Padding(3, 2)
[
SNew(SImage)
.Image(FEditorStyle::GetBrush("Mobility.Static"))
]
+ SHorizontalBox::Slot()
.FillWidth(1.0f)
.VAlign(VAlign_Center)
.HAlign(HAlign_Center)
.Padding(6, 2)
[
SNew(STextBlock)
.Text(LOCTEXT("Static", "Static"))
.Font(IDetailLayoutBuilder::GetDetailFont())
.ColorAndOpacity(this, &FMyPanelToolBar::GetMobilityTextColor)
]
]
];
ColumnIndex++;
}
FText FMyPanelToolBar::GetToolBarToolTip() const
{
if (ToolbarHandle.IsValid())
{
return ToolbarHandle->GetToolTipText();
}
return FText::GetEmpty();
}
ECheckBoxState FMyPanelToolBar::IsMobilityActive() const
{
if (ToolbarHandle.IsValid())
{
uint8 MobilityByte;
ToolbarHandle->GetValue(MobilityByte);
return MobilityByte == 0 ? ECheckBoxState::Unchecked : ECheckBoxState::Checked;// == InMobility ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
return ECheckBoxState::Unchecked;
}
void FMyPanelToolBar::OnMobilityChanged(ECheckBoxState InCheckedState)
{
if (ToolbarHandle.IsValid())
{
ToolbarHandle->SetValue((float)InCheckedState);
}
}
FSlateColor FMyPanelToolBar::GetMobilityTextColor() const
{
if (ToolbarHandle.IsValid())
{
uint8 MobilityByte;
ToolbarHandle->GetValue(MobilityByte);
return MobilityByte ? FSlateColor(FLinearColor(0, 0, 0)) : FSlateColor(FLinearColor(0.72f, 0.72f, 0.72f, 1.f));
}
return FSlateColor(FLinearColor(0.72f, 0.72f, 0.72f, 1.f));
}
#undef LOCTEXT_NAMESPACE