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
monroegm-disable-blank-issue-2
moraaar 4 years ago committed by GitHub
parent 1c3a61983a
commit dac3bc4ba6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -102,7 +102,7 @@ namespace AzToolsFramework
m_editButton->setAutoRaise(true); m_editButton->setAutoRaise(true);
m_editButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg")); m_editButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg"));
m_editButton->setToolTip("Edit asset"); m_editButton->setToolTip("Edit asset");
m_editButton->setVisible(false); SetEditButtonVisible(false);
connect(m_editButton, &QToolButton::clicked, this, &PropertyAssetCtrl::OnEditButtonClicked); connect(m_editButton, &QToolButton::clicked, this, &PropertyAssetCtrl::OnEditButtonClicked);
@ -961,12 +961,16 @@ namespace AzToolsFramework
AzFramework::StringFunc::Path::GetFileName(assetPath.c_str(), m_defaultAssetHint); AzFramework::StringFunc::Path::GetFileName(assetPath.c_str(), m_defaultAssetHint);
} }
m_browseEdit->setPlaceholderText((m_defaultAssetHint + m_DefaultSuffix).c_str()); m_browseEdit->setPlaceholderText((m_defaultAssetHint + m_DefaultSuffix).c_str());
UpdateEditButton();
} }
void PropertyAssetCtrl::UpdateAssetDisplay() void PropertyAssetCtrl::UpdateAssetDisplay()
{ {
UpdateThumbnail(); UpdateThumbnail();
UpdateEditButton();
if (m_currentAssetType == AZ::Data::s_invalidAssetType) if (m_currentAssetType == AZ::Data::s_invalidAssetType)
{ {
return; return;
@ -1109,7 +1113,9 @@ namespace AzToolsFramework
void PropertyAssetCtrl::SetEditButtonVisible(bool visible) void PropertyAssetCtrl::SetEditButtonVisible(bool visible)
{ {
m_editButton->setVisible(visible); m_showEditButton = visible;
m_editButton->setVisible(m_showEditButton);
UpdateEditButton();
} }
void PropertyAssetCtrl::SetEditButtonIcon(const QIcon& icon) void PropertyAssetCtrl::SetEditButtonIcon(const QIcon& icon)
@ -1205,6 +1211,15 @@ namespace AzToolsFramework
m_thumbnail->ClearThumbnail(); 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) void PropertyAssetCtrl::SetClearButtonEnabled(bool enable)
{ {
m_browseEdit->setClearButtonEnabled(enable); m_browseEdit->setClearButtonEnabled(enable);
@ -1236,6 +1251,17 @@ namespace AzToolsFramework
return m_hideProductFilesInAssetPicker; return m_hideProductFilesInAssetPicker;
} }
void PropertyAssetCtrl::SetDisableEditButtonWhenNoAssetSelected(bool disableEditButtonWhenNoAssetSelected)
{
m_disableEditButtonWhenNoAssetSelected = disableEditButtonWhenNoAssetSelected;
UpdateEditButton();
}
bool PropertyAssetCtrl::GetDisableEditButtonWhenNoAssetSelected() const
{
return m_disableEditButtonWhenNoAssetSelected;
}
void PropertyAssetCtrl::SetShowThumbnail(bool enable) void PropertyAssetCtrl::SetShowThumbnail(bool enable)
{ {
m_showThumbnail = enable; m_showThumbnail = enable;
@ -1349,6 +1375,12 @@ namespace AzToolsFramework
GUI->SetEditButtonTooltip(tr(buttonTooltip.c_str())); GUI->SetEditButtonTooltip(tr(buttonTooltip.c_str()));
} }
} }
else if (attrib == AZ_CRC_CE("DisableEditButtonWhenNoAssetSelected"))
{
bool disableEditButtonWhenNoAssetSelected = false;
attrValue->Read<bool>(disableEditButtonWhenNoAssetSelected);
GUI->SetDisableEditButtonWhenNoAssetSelected(disableEditButtonWhenNoAssetSelected);
}
else if (attrib == AZ::Edit::Attributes::DefaultAsset) else if (attrib == AZ::Edit::Attributes::DefaultAsset)
{ {
AZ::Data::AssetId assetId; AZ::Data::AssetId assetId;
@ -1597,6 +1629,12 @@ namespace AzToolsFramework
GUI->SetEditButtonTooltip(tr(buttonTooltip.c_str())); GUI->SetEditButtonTooltip(tr(buttonTooltip.c_str()));
} }
} }
else if (attrib == AZ_CRC_CE("DisableEditButtonWhenNoAssetSelected"))
{
bool disableEditButtonWhenNoAssetSelected = false;
attrValue->Read<bool>(disableEditButtonWhenNoAssetSelected);
GUI->SetDisableEditButtonWhenNoAssetSelected(disableEditButtonWhenNoAssetSelected);
}
} }
void SimpleAssetPropertyHandlerDefault::WriteGUIValuesIntoProperty(size_t index, PropertyAssetCtrl* GUI, property_t& instance, InstanceDataNode* node) void SimpleAssetPropertyHandlerDefault::WriteGUIValuesIntoProperty(size_t index, PropertyAssetCtrl* GUI, property_t& instance, InstanceDataNode* node)

@ -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. //! By default the asset picker shows both on an AZ::Asset<> property. You can hide product assets with this flag.
bool m_hideProductFilesInAssetPicker = false; 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_showThumbnail = false;
bool m_showThumbnailDropDownButton = false; bool m_showThumbnailDropDownButton = false;
EditCallbackType* m_thumbnailCallback = nullptr; EditCallbackType* m_thumbnailCallback = nullptr;
@ -220,6 +224,9 @@ namespace AzToolsFramework
void SetHideProductFilesInAssetPicker(bool hide); void SetHideProductFilesInAssetPicker(bool hide);
bool GetHideProductFilesInAssetPicker() const; 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 // Enable and configure a thumbnail widget that displays an asset preview and dropdown arrow for a dropdown menu
void SetShowThumbnail(bool enable); void SetShowThumbnail(bool enable);
bool GetShowThumbnail() const; bool GetShowThumbnail() const;
@ -250,6 +257,7 @@ namespace AzToolsFramework
private: private:
void UpdateThumbnail(); void UpdateThumbnail();
void UpdateEditButton();
}; };
class AssetPropertyHandlerDefault class AssetPropertyHandlerDefault

@ -60,6 +60,7 @@ namespace PhysX
"Specifies the PhysX mesh collider asset for this PhysX collider component.") "Specifies the PhysX mesh collider asset for this PhysX collider component.")
->Attribute(AZ_CRC_CE("EditButton"), "") ->Attribute(AZ_CRC_CE("EditButton"), "")
->Attribute(AZ_CRC_CE("EditDescription"), "Open in Scene Settings") ->Attribute(AZ_CRC_CE("EditDescription"), "Open in Scene Settings")
->Attribute(AZ_CRC_CE("DisableEditButtonWhenNoAssetSelected"), true)
->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyAssetShapeConfig::m_configuration, "Configuration", ->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyAssetShapeConfig::m_configuration, "Configuration",
"PhysX mesh asset collider configuration.") "PhysX mesh asset collider configuration.")
->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly); ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly);

Loading…
Cancel
Save