FPropertyEditor::FPropertyEditor( const TSharedRef<FPropertyNode>& InPropertyNode, const TSharedRef<IPropertyUtilities>& InPropertyUtilities ) : PropertyEditConditions() , PropertyHandle( NULL ) , PropertyNode( InPropertyNode ) , PropertyUtilities( InPropertyUtilities ) , EditConditionProperty( NULL ) { // FPropertyEditor isn't built to handle CategoryNodes check( InPropertyNode->AsCategoryNode() == NULL ); UProperty* Property = InPropertyNode->GetProperty(); if( Property ) { //see if the property supports some kind of edit condition and this isn't the "parent" property of a static array const bool bStaticArray = Property->ArrayDim > 1 && InPropertyNode->GetArrayIndex() == INDEX_NONE; if ( Property->HasMetaData( TEXT( "EditCondition" ) ) && !bStaticArray ) { if ( !GetEditConditionPropertyAddress( /*OUT*/EditConditionProperty, *InPropertyNode, PropertyEditConditions ) ) { EditConditionProperty = NULL; } } } PropertyHandle = PropertyEditorHelpers::GetPropertyHandle( InPropertyNode, PropertyUtilities->GetNotifyHook(), PropertyUtilities ); check( PropertyHandle.IsValid() && PropertyHandle->IsValidHandle() ); }
bool SPropertyEditorCombo::Supports( const TSharedRef< class FPropertyEditor >& InPropertyEditor ) { const TSharedRef< FPropertyNode > PropertyNode = InPropertyEditor->GetPropertyNode(); const UProperty* Property = InPropertyEditor->GetProperty(); int32 ArrayIndex = PropertyNode->GetArrayIndex(); if( ((Property->IsA(UByteProperty::StaticClass()) && Cast<const UByteProperty>(Property)->Enum) || (Property->IsA(UNameProperty::StaticClass()) && Property->GetFName() == NAME_InitialState) || (Property->IsA(UStrProperty::StaticClass()) && Property->HasMetaData(TEXT("Enum"))) ) && ( ( ArrayIndex == -1 && Property->ArrayDim == 1 ) || ( ArrayIndex > -1 && Property->ArrayDim > 0 ) ) ) { return true; } return false; }
bool SPropertyEditorClass::Supports(const TSharedRef< class FPropertyEditor >& InPropertyEditor) { if(InPropertyEditor->IsEditConst()) { return false; } const TSharedRef< FPropertyNode > PropertyNode = InPropertyEditor->GetPropertyNode(); const UProperty* Property = InPropertyEditor->GetProperty(); int32 ArrayIndex = PropertyNode->GetArrayIndex(); if ((Property->IsA(UClassProperty::StaticClass()) || Property->IsA(UAssetClassProperty::StaticClass())) && ((ArrayIndex == -1 && Property->ArrayDim == 1) || (ArrayIndex > -1 && Property->ArrayDim > 0))) { return true; } return false; }
bool SPropertyEditorEditInline::Supports( const TSharedRef< class FPropertyEditor >& InPropertyEditor ) { const TSharedRef< FPropertyNode > PropertyNode = InPropertyEditor->GetPropertyNode(); return SPropertyEditorEditInline::Supports( &PropertyNode.Get(), PropertyNode->GetArrayIndex() ); }