From ed47bb07abe8a9f00dcd879dad1584769f8c8302 Mon Sep 17 00:00:00 2001 From: John Jones-Steele Date: Fri, 11 Jun 2021 14:52:01 +0100 Subject: [PATCH 1/4] Menu icon behaviour fixed. --- .../AzQtComponents/Components/Style.cpp | 24 +++++++++++++++++++ .../Source/Editor/UI/AWSCoreEditorMenu.cpp | 1 + 2 files changed, 25 insertions(+) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp index 0f58f06420..137df2b4bd 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp @@ -493,6 +493,30 @@ namespace AzQtComponents } } break; + case CE_MenuItem: + { + const QMenu* menu = qobject_cast(widget); + QAction* action = menu->activeAction(); + if (action) + { + QMenu* subMenu = action->menu(); + if (subMenu) + { + QVariant noHover = subMenu->property("noHover"); + if (noHover.isValid() && noHover.toBool()) + { + // First draw as standard to get the correct hover background for the complete control. + QProxyStyle::drawControl(element, option, painter, widget); + // Now draw the icon as non-hovered so control behaves as designed. + const QStyleOptionMenuItem* opt = qstyleoption_cast(option); + QStyleOptionMenuItem myOpt = *(const_cast(opt)); + myOpt.state &= ~QStyle::State_Selected; + return QProxyStyle::drawControl(element, &myOpt, painter, widget); + } + } + } + } + break; } return QProxyStyle::drawControl(element, option, painter, widget); diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp index c319788547..3375f85a7a 100644 --- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp +++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp @@ -209,6 +209,7 @@ namespace AWSCore { QMenu* subMenu = new QMenu(QObject::tr(menuText.c_str())); subMenu->setIcon(QIcon(QString(":/Notifications/checkmark.svg"))); + subMenu->setProperty("noHover", true); this->insertMenu(*itr, subMenu); this->removeAction(*itr); return subMenu; From 8a6975131d9d103346ae2e47679e51b055d2454a Mon Sep 17 00:00:00 2001 From: John Jones-Steele Date: Mon, 14 Jun 2021 09:26:28 +0100 Subject: [PATCH 2/4] Modified the link.svg --- .../AzQtComponents/Images/Notifications/link.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Images/Notifications/link.svg b/Code/Framework/AzQtComponents/AzQtComponents/Images/Notifications/link.svg index dfd21d157f..6f5608c092 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Images/Notifications/link.svg +++ b/Code/Framework/AzQtComponents/AzQtComponents/Images/Notifications/link.svg @@ -1,4 +1,4 @@ - - + + From 40cdcb63b8784e4504c377bf0330da022882a2cf Mon Sep 17 00:00:00 2001 From: John Jones-Steele Date: Tue, 15 Jun 2021 16:13:02 +0100 Subject: [PATCH 3/4] Finished work on LYN-4195 --- .../Include/Private/Editor/UI/AWSCoreEditorMenu.h | 3 +++ .../Code/Source/Editor/UI/AWSCoreEditorMenu.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h index c892f86b66..5fd01453e2 100644 --- a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h +++ b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h @@ -46,6 +46,7 @@ namespace AWSCore void InitializeAWSDocActions(); void InitializeAWSGlobalDocsSubMenu(); void InitializeAWSFeatureGemActions(); + void AddSpaceForIcon(QMenu* menu); // AWSCoreEditorRequestBus interface implementation void SetAWSClientAuthEnabled() override; @@ -55,5 +56,7 @@ namespace AWSCore // To improve experience, use process watcher to keep track of ongoing tool process AZStd::unique_ptr m_resourceMappingToolWatcher; + + const int m_sizeOfIcon = 16; }; } // namespace AWSCore diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp index 3375f85a7a..2bf387de27 100644 --- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp +++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp @@ -43,6 +43,7 @@ namespace AWSCore InitializeResourceMappingToolAction(); this->addSeparator(); InitializeAWSFeatureGemActions(); + AddSpaceForIcon(this); AWSCoreEditorRequestBus::Handler::BusConnect(); } @@ -136,6 +137,8 @@ namespace AWSCore globalDocsMenu->addAction(AddExternalLinkAction(AWSAndScriptCanvasActionText, AWSAndScriptCanvasUrl, ":/Notifications/link.svg")); globalDocsMenu->addAction(AddExternalLinkAction(AWSAndComponentsActionText, AWSAndComponentsUrl, ":/Notifications/link.svg")); globalDocsMenu->addAction(AddExternalLinkAction(CallAWSResourcesActionText, CallAWSResourcesUrl, ":/Notifications/link.svg")); + + AddSpaceForIcon(globalDocsMenu); } void AWSCoreEditorMenu::InitializeAWSFeatureGemActions() @@ -170,6 +173,8 @@ namespace AWSCore AWSClientAuthPlatformSpecificActionText, AWSClientAuthPlatformSpecificUrl, ":/Notifications/link.svg")); subMenu->addAction(AddExternalLinkAction( AWSClientAuthAPIReferenceActionText, AWSClientAuthAPIReferenceUrl, ":/Notifications/link.svg")); + + AddSpaceForIcon(subMenu); } void AWSCoreEditorMenu::SetAWSMetricsEnabled() @@ -197,7 +202,9 @@ namespace AWSCore [configFilePath](){ QDesktopServices::openUrl(QUrl::fromLocalFile(configFilePath.c_str())); }); + subMenu->addAction(settingsAction); + AddSpaceForIcon(subMenu); } QMenu* AWSCoreEditorMenu::SetAWSFeatureSubMenu(const AZStd::string& menuText) @@ -217,4 +224,11 @@ namespace AWSCore } return nullptr; } + + void AWSCoreEditorMenu::AddSpaceForIcon(QMenu *menu) + { + QSize size = menu->sizeHint(); + size.setWidth(size.width() + m_sizeOfIcon); + menu->setFixedSize(size); + } } // namespace AWSCore From 0983d1ba45780e6d2aa55cdb734322795a7ea531 Mon Sep 17 00:00:00 2001 From: John Jones-Steele Date: Wed, 16 Jun 2021 11:22:59 +0100 Subject: [PATCH 4/4] Changes made to address comments. --- .../AzQtComponents/AzQtComponents/Components/Style.cpp | 3 +-- .../Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h | 2 -- Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp | 5 ++++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp index 137df2b4bd..47c0e66ff0 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/Style.cpp @@ -508,8 +508,7 @@ namespace AzQtComponents // First draw as standard to get the correct hover background for the complete control. QProxyStyle::drawControl(element, option, painter, widget); // Now draw the icon as non-hovered so control behaves as designed. - const QStyleOptionMenuItem* opt = qstyleoption_cast(option); - QStyleOptionMenuItem myOpt = *(const_cast(opt)); + QStyleOptionMenuItem myOpt = *qstyleoption_cast(option); myOpt.state &= ~QStyle::State_Selected; return QProxyStyle::drawControl(element, &myOpt, painter, widget); } diff --git a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h index 5fd01453e2..ab03223323 100644 --- a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h +++ b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h @@ -56,7 +56,5 @@ namespace AWSCore // To improve experience, use process watcher to keep track of ongoing tool process AZStd::unique_ptr m_resourceMappingToolWatcher; - - const int m_sizeOfIcon = 16; }; } // namespace AWSCore diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp index 2bf387de27..27e8710cbc 100644 --- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp +++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp @@ -35,6 +35,9 @@ namespace AWSCore { + + static constexpr int IconSize = 16; + AWSCoreEditorMenu::AWSCoreEditorMenu(const QString& text) : QMenu(text) , m_resourceMappingToolWatcher(nullptr) @@ -228,7 +231,7 @@ namespace AWSCore void AWSCoreEditorMenu::AddSpaceForIcon(QMenu *menu) { QSize size = menu->sizeHint(); - size.setWidth(size.width() + m_sizeOfIcon); + size.setWidth(size.width() + IconSize); menu->setFixedSize(size); } } // namespace AWSCore