From dac3bc4ba62c34c47ab1513a42f0e415bbcacc49 Mon Sep 17 00:00:00 2001 From: moraaar Date: Thu, 10 Feb 2022 12:23:38 +0000 Subject: [PATCH] Added option to disable edit button in asset widgets when there are no asset selected. (#7521) Added new attribute "DisableEditButtonWheNoAssetSelected" to PropertyAssetCtrl. By default it's false, keeping the original behavior of leaving the edit button enabled and if it's clicked while there is no asset assigned it'll try to create a new one. PhysX mesh asset property uses now this new feature. Signed-off-by: moraaar moraaar@amazon.com --- .../UI/PropertyEditor/PropertyAssetCtrl.cpp | 42 ++++++++++++++++++- .../UI/PropertyEditor/PropertyAssetCtrl.hxx | 8 ++++ .../Code/Source/EditorColliderComponent.cpp | 1 + 3 files changed, 49 insertions(+), 2 deletions(-) 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);