diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp index bd0cb3844a..e4a1a35b2c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp @@ -102,7 +102,7 @@ namespace AzToolsFramework m_editButton->setAutoRaise(true); m_editButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg")); m_editButton->setToolTip("Edit asset"); - m_editButton->setVisible(false); + SetEditButtonVisible(false); connect(m_editButton, &QToolButton::clicked, this, &PropertyAssetCtrl::OnEditButtonClicked); @@ -961,12 +961,16 @@ namespace AzToolsFramework AzFramework::StringFunc::Path::GetFileName(assetPath.c_str(), m_defaultAssetHint); } m_browseEdit->setPlaceholderText((m_defaultAssetHint + m_DefaultSuffix).c_str()); + + UpdateEditButton(); } void PropertyAssetCtrl::UpdateAssetDisplay() { UpdateThumbnail(); + UpdateEditButton(); + if (m_currentAssetType == AZ::Data::s_invalidAssetType) { return; @@ -1109,7 +1113,9 @@ namespace AzToolsFramework void PropertyAssetCtrl::SetEditButtonVisible(bool visible) { - m_editButton->setVisible(visible); + m_showEditButton = visible; + m_editButton->setVisible(m_showEditButton); + UpdateEditButton(); } void PropertyAssetCtrl::SetEditButtonIcon(const QIcon& icon) @@ -1205,6 +1211,15 @@ namespace AzToolsFramework m_thumbnail->ClearThumbnail(); } + void PropertyAssetCtrl::UpdateEditButton() + { + // if Edit button is in use (shown), enable/disable it depending on the current asset id. + if (m_showEditButton && m_disableEditButtonWhenNoAssetSelected) + { + m_editButton->setEnabled(GetCurrentAssetID().IsValid()); + } + } + void PropertyAssetCtrl::SetClearButtonEnabled(bool enable) { m_browseEdit->setClearButtonEnabled(enable); @@ -1236,6 +1251,17 @@ namespace AzToolsFramework return m_hideProductFilesInAssetPicker; } + void PropertyAssetCtrl::SetDisableEditButtonWhenNoAssetSelected(bool disableEditButtonWhenNoAssetSelected) + { + m_disableEditButtonWhenNoAssetSelected = disableEditButtonWhenNoAssetSelected; + UpdateEditButton(); + } + + bool PropertyAssetCtrl::GetDisableEditButtonWhenNoAssetSelected() const + { + return m_disableEditButtonWhenNoAssetSelected; + } + void PropertyAssetCtrl::SetShowThumbnail(bool enable) { m_showThumbnail = enable; @@ -1349,6 +1375,12 @@ namespace AzToolsFramework GUI->SetEditButtonTooltip(tr(buttonTooltip.c_str())); } } + else if (attrib == AZ_CRC_CE("DisableEditButtonWhenNoAssetSelected")) + { + bool disableEditButtonWhenNoAssetSelected = false; + attrValue->Read(disableEditButtonWhenNoAssetSelected); + GUI->SetDisableEditButtonWhenNoAssetSelected(disableEditButtonWhenNoAssetSelected); + } else if (attrib == AZ::Edit::Attributes::DefaultAsset) { AZ::Data::AssetId assetId; @@ -1597,6 +1629,12 @@ namespace AzToolsFramework GUI->SetEditButtonTooltip(tr(buttonTooltip.c_str())); } } + else if (attrib == AZ_CRC_CE("DisableEditButtonWhenNoAssetSelected")) + { + bool disableEditButtonWhenNoAssetSelected = false; + attrValue->Read(disableEditButtonWhenNoAssetSelected); + GUI->SetDisableEditButtonWhenNoAssetSelected(disableEditButtonWhenNoAssetSelected); + } } void SimpleAssetPropertyHandlerDefault::WriteGUIValuesIntoProperty(size_t index, PropertyAssetCtrl* GUI, property_t& instance, InstanceDataNode* node) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx index d6ff1b8de6..87fd691b20 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx @@ -159,6 +159,10 @@ namespace AzToolsFramework //! By default the asset picker shows both on an AZ::Asset<> property. You can hide product assets with this flag. bool m_hideProductFilesInAssetPicker = false; + //! True to disable the edit button when there is no asset currently selected. + bool m_disableEditButtonWhenNoAssetSelected = false; + + bool m_showEditButton = false; bool m_showThumbnail = false; bool m_showThumbnailDropDownButton = false; EditCallbackType* m_thumbnailCallback = nullptr; @@ -220,6 +224,9 @@ namespace AzToolsFramework void SetHideProductFilesInAssetPicker(bool hide); bool GetHideProductFilesInAssetPicker() const; + void SetDisableEditButtonWhenNoAssetSelected(bool disableEditButtonWhenNoAssetSelected); + bool GetDisableEditButtonWhenNoAssetSelected() const; + // Enable and configure a thumbnail widget that displays an asset preview and dropdown arrow for a dropdown menu void SetShowThumbnail(bool enable); bool GetShowThumbnail() const; @@ -250,6 +257,7 @@ namespace AzToolsFramework private: void UpdateThumbnail(); + void UpdateEditButton(); }; class AssetPropertyHandlerDefault diff --git a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp index 7e1d1c341f..69ae037e07 100644 --- a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp @@ -60,6 +60,7 @@ namespace PhysX "Specifies the PhysX mesh collider asset for this PhysX collider component.") ->Attribute(AZ_CRC_CE("EditButton"), "") ->Attribute(AZ_CRC_CE("EditDescription"), "Open in Scene Settings") + ->Attribute(AZ_CRC_CE("DisableEditButtonWhenNoAssetSelected"), true) ->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyAssetShapeConfig::m_configuration, "Configuration", "PhysX mesh asset collider configuration.") ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly);