From 6b201bf97c5150b8d54747782c522f678a86866f Mon Sep 17 00:00:00 2001 From: John Date: Tue, 16 Nov 2021 15:55:22 +0000 Subject: [PATCH 1/5] Add back button to editor mode UI. Signed-off-by: John --- .../ComponentMode/ComponentModeCollection.cpp | 6 ++- .../ComponentMode/EditorBaseComponentMode.cpp | 7 +++- .../EditorTransformComponentSelection.cpp | 18 ++++++++- .../ViewportUi/ViewportUiDisplay.cpp | 38 ++++++++++++++++++- .../ViewportUi/ViewportUiDisplay.h | 8 +++- .../ViewportUi/ViewportUiManager.cpp | 5 ++- .../ViewportUi/ViewportUiManager.h | 3 +- .../ViewportUi/ViewportUiRequestBus.h | 9 +++-- 8 files changed, 79 insertions(+), 15 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp index 07e025fc60..5a969d0b13 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp @@ -448,7 +448,11 @@ namespace AzToolsFramework ViewportUi::ViewportUiRequestBus::Event( ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, - componentMode.m_componentMode->GetComponentModeName().c_str()); + componentMode.m_componentMode->GetComponentModeName().c_str(), + []() + { + ComponentModeSystemRequestBus::Broadcast(&ComponentModeSystemRequests::EndComponentMode); + }); } RefreshActions(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp index f449478306..0da57a2ce1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp @@ -55,8 +55,11 @@ namespace AzToolsFramework GetEntityComponentIdPair(), elementIdsToDisplay); // create the component mode border with the specific name for this component mode ViewportUi::ViewportUiRequestBus::Event( - ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, - GetComponentModeName()); + ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, GetComponentModeName(), + []() + { + ComponentModeSystemRequestBus::Broadcast(&ComponentModeSystemRequests::EndComponentMode); + }); // set the EntityComponentId for this ComponentMode to active in the ComponentModeViewportUi system ComponentModeViewportUiRequestBus::Event( GetComponentType(), &ComponentModeViewportUiRequestBus::Events::SetViewportUiActiveEntityComponentId, diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index 39c882b766..0df4cc5d5b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -1013,6 +1014,16 @@ namespace AzToolsFramework ToolsApplicationNotificationBus::Broadcast(&ToolsApplicationNotificationBus::Events::InvalidatePropertyDisplay, Refresh_Values); } + // leaves focus mode by focusing on the parent of the current perfab in the entity outliner + static void LeaveFocusMode() + { + if (auto prefabFocusPublicInterface = AZ::Interface::Get(); prefabFocusPublicInterface) + { + // Close this prefab and focus on the parent + prefabFocusPublicInterface->FocusOnParentOfFocusedPrefab(GetEntityContextId()); + } + } + EditorTransformComponentSelection::EditorTransformComponentSelection(const EditorVisibleEntityDataCache* entityDataCache) : m_entityDataCache(entityDataCache) { @@ -3694,7 +3705,8 @@ namespace AzToolsFramework case ViewportEditorMode::Focus: { ViewportUi::ViewportUiRequestBus::Event( - ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, "Focus Mode"); + ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, "Focus Mode", + LeaveFocusMode); } break; case ViewportEditorMode::Default: @@ -3723,12 +3735,14 @@ namespace AzToolsFramework if (editorModeState.IsModeActive(ViewportEditorMode::Focus)) { ViewportUi::ViewportUiRequestBus::Event( - ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, "Focus Mode"); + ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, "Focus Mode", + LeaveFocusMode); } } break; case ViewportEditorMode::Focus: { + ViewportUi::ViewportUiRequestBus::Event( ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::RemoveViewportBorder); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp index c53aa66d81..f0f7a9f81d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp @@ -21,6 +21,8 @@ namespace AzToolsFramework::ViewportUi::Internal { const static int HighlightBorderSize = 5; const static char* HighlightBorderColor = "#4A90E2"; + const static int HighlightBorderBackButtonMargin = 5; + const static char* HighlightBorderBackButtonText = "X"; static void UnparentWidgets(ViewportUiElementIdInfoLookup& viewportUiElementIdInfoLookup) { @@ -62,6 +64,7 @@ namespace AzToolsFramework::ViewportUi::Internal , m_fullScreenLayout(&m_uiOverlay) , m_uiOverlayLayout() , m_viewportBorderText(&m_uiOverlay) + , m_viewportBorderBackButton(&m_uiOverlay) { } @@ -291,7 +294,8 @@ namespace AzToolsFramework::ViewportUi::Internal return false; } - void ViewportUiDisplay::CreateViewportBorder(const AZStd::string& borderTitle) + void ViewportUiDisplay::CreateViewportBorder( + const AZStd::string& borderTitle, AZStd::optional backButtonCallback) { const AZStd::string styleSheet = AZStd::string::format( "border: %dpx solid %s; border-top: %dpx solid %s;", HighlightBorderSize, HighlightBorderColor, ViewportUiTopBorderSize, @@ -302,6 +306,10 @@ namespace AzToolsFramework::ViewportUi::Internal HighlightBorderSize + ViewportUiOverlayMargin, HighlightBorderSize + ViewportUiOverlayMargin); m_viewportBorderText.setVisible(true); m_viewportBorderText.setText(borderTitle.c_str()); + + // only display the back button if a callback was provided + m_viewportBorderBackButtonCallback = backButtonCallback; + m_viewportBorderBackButton.setVisible(m_viewportBorderBackButtonCallback.has_value()); } void ViewportUiDisplay::RemoveViewportBorder() @@ -311,6 +319,9 @@ namespace AzToolsFramework::ViewportUi::Internal m_uiOverlayLayout.setContentsMargins( ViewportUiOverlayMargin, ViewportUiOverlayMargin + ViewportUiOverlayTopMarginPadding, ViewportUiOverlayMargin, ViewportUiOverlayMargin); + + m_viewportBorderBackButtonCallback.reset(); + m_viewportBorderBackButton.setVisible(false); } void ViewportUiDisplay::PositionViewportUiElementFromWorldSpace(ViewportUiElementId elementId, const AZ::Vector3& pos) @@ -347,6 +358,8 @@ namespace AzToolsFramework::ViewportUi::Internal void ViewportUiDisplay::InitializeUiOverlay() { + AZStd::string styleSheet; + m_uiMainWindow.setObjectName(QString("ViewportUiWindow")); ConfigureWindowForViewportUi(&m_uiMainWindow); m_uiMainWindow.setVisible(false); @@ -361,11 +374,32 @@ namespace AzToolsFramework::ViewportUi::Internal m_fullScreenLayout.addLayout(&m_uiOverlayLayout, 0, 0, 1, 1); // format the label which will appear on top of the highlight border - AZStd::string styleSheet = AZStd::string::format("background-color: %s; border: none;", HighlightBorderColor); + styleSheet = AZStd::string::format("background-color: %s; border: none;", HighlightBorderColor); m_viewportBorderText.setStyleSheet(styleSheet.c_str()); m_viewportBorderText.setFixedHeight(ViewportUiTopBorderSize); m_viewportBorderText.setVisible(false); m_fullScreenLayout.addWidget(&m_viewportBorderText, 0, 0, Qt::AlignTop | Qt::AlignHCenter); + + // format the back button which will appear in the top right of the highlight border + styleSheet = AZStd::string::format( + "border: 0px; padding-left: %dpx; padding-right: %dpx", HighlightBorderBackButtonMargin, HighlightBorderBackButtonMargin); + m_viewportBorderBackButton.setStyleSheet(styleSheet.c_str()); + m_viewportBorderBackButton.setVisible(false); + m_viewportBorderBackButton.setText(HighlightBorderBackButtonText); + QObject::connect( + &m_viewportBorderBackButton, &QPushButton::clicked, + [this]() + { + if (m_viewportBorderBackButtonCallback.has_value()) + { + // we need to swap out the existing back button callback because it will be reset in RemoveViewportBorder() + AZStd::optional backButtonCallback; + m_viewportBorderBackButtonCallback.swap(backButtonCallback); + RemoveViewportBorder(); + (*backButtonCallback)(); + } + }); + m_fullScreenLayout.addWidget(&m_viewportBorderBackButton, 0, 0, Qt::AlignTop | Qt::AlignRight); } void ViewportUiDisplay::PrepareWidgetForViewportUi(QPointer widget) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h index 32b746a1ac..48da8d55a4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h @@ -17,6 +17,7 @@ #include #include #include +#include AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") #include @@ -89,7 +90,7 @@ namespace AzToolsFramework::ViewportUi::Internal AZStd::shared_ptr GetViewportUiElement(ViewportUiElementId elementId); bool IsViewportUiElementVisible(ViewportUiElementId elementId); - void CreateViewportBorder(const AZStd::string& borderTitle); + void CreateViewportBorder(const AZStd::string& borderTitle, AZStd::optional backButtonCallback); void RemoveViewportBorder(); private: @@ -113,7 +114,10 @@ namespace AzToolsFramework::ViewportUi::Internal QWidget m_uiOverlay; //!< The UI Overlay which displays Viewport UI Elements. QGridLayout m_fullScreenLayout; //!< The layout which extends across the full screen. ViewportUiDisplayLayout m_uiOverlayLayout; //!< The layout used for optionally anchoring Viewport UI Elements. - QLabel m_viewportBorderText; //!< The text used for the viewport border. + QLabel m_viewportBorderText; //!< The text used for the viewport highlight border. + QPushButton m_viewportBorderBackButton; //!< The button to return from the viewport highlight border. + AZStd::optional + m_viewportBorderBackButtonCallback; //!< The optional callback for when the viewport highlight border back button is pressed. QWidget* m_renderOverlay; QPointer m_fullScreenWidget; //!< Reference to the widget attached to m_fullScreenLayout if any. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp index 1f14b12b7d..6da1967ab6 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp @@ -240,9 +240,10 @@ namespace AzToolsFramework::ViewportUi } } - void ViewportUiManager::CreateViewportBorder(const AZStd::string& borderTitle) + void ViewportUiManager::CreateViewportBorder( + const AZStd::string& borderTitle, AZStd::optional backButtonCallback) { - m_viewportUi->CreateViewportBorder(borderTitle); + m_viewportUi->CreateViewportBorder(borderTitle, backButtonCallback); } void ViewportUiManager::RemoveViewportBorder() diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h index ce7e5aafe9..6ed2a2892f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h @@ -50,7 +50,8 @@ namespace AzToolsFramework::ViewportUi void RegisterTextFieldCallback(TextFieldId textFieldId, AZ::Event::Handler& handler) override; void RemoveTextField(TextFieldId textFieldId) override; void SetTextFieldVisible(TextFieldId textFieldId, bool visible) override; - void CreateViewportBorder(const AZStd::string& borderTitle) override; + void CreateViewportBorder( + const AZStd::string& borderTitle, AZStd::optional backButtonCallback) override; void RemoveViewportBorder() override; void PressButton(ClusterId clusterId, ButtonId buttonId) override; void PressButton(SwitcherId switcherId, ButtonId buttonId) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h index 3c6f7094cb..6334f566ce 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h @@ -22,6 +22,9 @@ namespace AzToolsFramework::ViewportUi using SwitcherId = IdType; using TextFieldId = IdType; + //! Callback function for viewport UI back button. + using ViewportUIBackButtonCallback = AZStd::function; + inline const ViewportUiElementId InvalidViewportUiElementId = ViewportUiElementId(0); inline const ButtonId InvalidButtonId = ButtonId(0); inline const ClusterId InvalidClusterId = ClusterId(0); @@ -95,9 +98,9 @@ namespace AzToolsFramework::ViewportUi virtual void RemoveTextField(TextFieldId textFieldId) = 0; //! Sets the visibility of the text field. virtual void SetTextFieldVisible(TextFieldId textFieldId, bool visible) = 0; - //! Create the highlight border for Component Mode. - virtual void CreateViewportBorder(const AZStd::string& borderTitle) = 0; - //! Remove the highlight border for Component Mode. + //! Create the highlight border for editor modes with optional back button to exit the given editor mode. + virtual void CreateViewportBorder(const AZStd::string& borderTitle, AZStd::optional backButtonCallback) = 0; + //! Remove the highlight border for editor modes. virtual void RemoveViewportBorder() = 0; //! Invoke a button press on a cluster. virtual void PressButton(ClusterId clusterId, ButtonId buttonId) = 0; From 15462479229119c58f3581800b997f3466834d8e Mon Sep 17 00:00:00 2001 From: John Date: Tue, 16 Nov 2021 16:02:22 +0000 Subject: [PATCH 2/5] Trivial refactor of comments. Signed-off-by: John --- .../ViewportSelection/EditorTransformComponentSelection.cpp | 1 - .../AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp | 3 ++- .../AzToolsFramework/ViewportUi/ViewportUiDisplay.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index b35132e620..1a5c84944c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -1020,7 +1020,6 @@ namespace AzToolsFramework { if (auto prefabFocusPublicInterface = AZ::Interface::Get(); prefabFocusPublicInterface) { - // Close this prefab and focus on the parent prefabFocusPublicInterface->FocusOnParentOfFocusedPrefab(GetEntityContextId()); } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp index f0f7a9f81d..adca0eb3f6 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp @@ -319,7 +319,6 @@ namespace AzToolsFramework::ViewportUi::Internal m_uiOverlayLayout.setContentsMargins( ViewportUiOverlayMargin, ViewportUiOverlayMargin + ViewportUiOverlayTopMarginPadding, ViewportUiOverlayMargin, ViewportUiOverlayMargin); - m_viewportBorderBackButtonCallback.reset(); m_viewportBorderBackButton.setVisible(false); } @@ -386,6 +385,8 @@ namespace AzToolsFramework::ViewportUi::Internal m_viewportBorderBackButton.setStyleSheet(styleSheet.c_str()); m_viewportBorderBackButton.setVisible(false); m_viewportBorderBackButton.setText(HighlightBorderBackButtonText); + + // setup the handler for the back button to call the user provided callback (if any) QObject::connect( &m_viewportBorderBackButton, &QPushButton::clicked, [this]() diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h index 48da8d55a4..26dffb33fe 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h @@ -115,7 +115,7 @@ namespace AzToolsFramework::ViewportUi::Internal QGridLayout m_fullScreenLayout; //!< The layout which extends across the full screen. ViewportUiDisplayLayout m_uiOverlayLayout; //!< The layout used for optionally anchoring Viewport UI Elements. QLabel m_viewportBorderText; //!< The text used for the viewport highlight border. - QPushButton m_viewportBorderBackButton; //!< The button to return from the viewport highlight border. + QPushButton m_viewportBorderBackButton; //!< The button to return from the viewport highlight border (only displayed if callback provided). AZStd::optional m_viewportBorderBackButtonCallback; //!< The optional callback for when the viewport highlight border back button is pressed. From 921612594a6c3e57d8ca91b17fcfc3631feb39b3 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 16 Nov 2021 17:54:19 +0000 Subject: [PATCH 3/5] Add placeholder icon for back button. Signed-off-by: John --- .../AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp index adca0eb3f6..6c0e41fd13 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp @@ -22,7 +22,6 @@ namespace AzToolsFramework::ViewportUi::Internal const static int HighlightBorderSize = 5; const static char* HighlightBorderColor = "#4A90E2"; const static int HighlightBorderBackButtonMargin = 5; - const static char* HighlightBorderBackButtonText = "X"; static void UnparentWidgets(ViewportUiElementIdInfoLookup& viewportUiElementIdInfoLookup) { @@ -384,7 +383,10 @@ namespace AzToolsFramework::ViewportUi::Internal "border: 0px; padding-left: %dpx; padding-right: %dpx", HighlightBorderBackButtonMargin, HighlightBorderBackButtonMargin); m_viewportBorderBackButton.setStyleSheet(styleSheet.c_str()); m_viewportBorderBackButton.setVisible(false); - m_viewportBorderBackButton.setText(HighlightBorderBackButtonText); + QPixmap backButtonPixmap(QString(":/stylesheet/img/UI20/toolbar/X_axis.svg")); + QIcon backButtonIcon(backButtonPixmap); + m_viewportBorderBackButton.setIcon(backButtonIcon); + m_viewportBorderBackButton.setIconSize(backButtonPixmap.size()); // setup the handler for the back button to call the user provided callback (if any) QObject::connect( From 4d6e7f7ef93ce6aa191c51f53e5229947dd0b1d0 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 16 Nov 2021 17:59:18 +0000 Subject: [PATCH 4/5] Address PR comments. Signed-off-by: John --- .../ComponentMode/ComponentModeCollection.cpp | 2 +- .../ComponentMode/EditorBaseComponentMode.cpp | 2 +- .../EditorTransformComponentSelection.cpp | 2 +- .../AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp | 5 +++-- .../AzToolsFramework/ViewportUi/ViewportUiDisplay.h | 4 ++-- .../AzToolsFramework/ViewportUi/ViewportUiManager.cpp | 2 +- .../AzToolsFramework/ViewportUi/ViewportUiManager.h | 2 +- .../AzToolsFramework/ViewportUi/ViewportUiRequestBus.h | 8 ++++---- 8 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp index 5a969d0b13..f07e87fad2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp @@ -449,7 +449,7 @@ namespace AzToolsFramework ViewportUi::ViewportUiRequestBus::Event( ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, componentMode.m_componentMode->GetComponentModeName().c_str(), - []() + [] { ComponentModeSystemRequestBus::Broadcast(&ComponentModeSystemRequests::EndComponentMode); }); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp index 0da57a2ce1..e780c38822 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorBaseComponentMode.cpp @@ -56,7 +56,7 @@ namespace AzToolsFramework // create the component mode border with the specific name for this component mode ViewportUi::ViewportUiRequestBus::Event( ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateViewportBorder, GetComponentModeName(), - []() + [] { ComponentModeSystemRequestBus::Broadcast(&ComponentModeSystemRequests::EndComponentMode); }); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index 1a5c84944c..686f5e8f8b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -1018,7 +1018,7 @@ namespace AzToolsFramework // leaves focus mode by focusing on the parent of the current perfab in the entity outliner static void LeaveFocusMode() { - if (auto prefabFocusPublicInterface = AZ::Interface::Get(); prefabFocusPublicInterface) + if (auto prefabFocusPublicInterface = AZ::Interface::Get()) { prefabFocusPublicInterface->FocusOnParentOfFocusedPrefab(GetEntityContextId()); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp index 6c0e41fd13..315a4d0aec 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp @@ -294,7 +294,7 @@ namespace AzToolsFramework::ViewportUi::Internal } void ViewportUiDisplay::CreateViewportBorder( - const AZStd::string& borderTitle, AZStd::optional backButtonCallback) + const AZStd::string& borderTitle, AZStd::optional backButtonCallback) { const AZStd::string styleSheet = AZStd::string::format( "border: %dpx solid %s; border-top: %dpx solid %s;", HighlightBorderSize, HighlightBorderColor, ViewportUiTopBorderSize, @@ -396,7 +396,8 @@ namespace AzToolsFramework::ViewportUi::Internal if (m_viewportBorderBackButtonCallback.has_value()) { // we need to swap out the existing back button callback because it will be reset in RemoveViewportBorder() - AZStd::optional backButtonCallback; + // so preserve the lifetime with this temporary callback until after the call to RemoveViewportBorder() + AZStd::optional backButtonCallback; m_viewportBorderBackButtonCallback.swap(backButtonCallback); RemoveViewportBorder(); (*backButtonCallback)(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h index 26dffb33fe..c75310a10f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.h @@ -90,7 +90,7 @@ namespace AzToolsFramework::ViewportUi::Internal AZStd::shared_ptr GetViewportUiElement(ViewportUiElementId elementId); bool IsViewportUiElementVisible(ViewportUiElementId elementId); - void CreateViewportBorder(const AZStd::string& borderTitle, AZStd::optional backButtonCallback); + void CreateViewportBorder(const AZStd::string& borderTitle, AZStd::optional backButtonCallback); void RemoveViewportBorder(); private: @@ -116,7 +116,7 @@ namespace AzToolsFramework::ViewportUi::Internal ViewportUiDisplayLayout m_uiOverlayLayout; //!< The layout used for optionally anchoring Viewport UI Elements. QLabel m_viewportBorderText; //!< The text used for the viewport highlight border. QPushButton m_viewportBorderBackButton; //!< The button to return from the viewport highlight border (only displayed if callback provided). - AZStd::optional + AZStd::optional m_viewportBorderBackButtonCallback; //!< The optional callback for when the viewport highlight border back button is pressed. QWidget* m_renderOverlay; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp index 6da1967ab6..143da34074 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp @@ -241,7 +241,7 @@ namespace AzToolsFramework::ViewportUi } void ViewportUiManager::CreateViewportBorder( - const AZStd::string& borderTitle, AZStd::optional backButtonCallback) + const AZStd::string& borderTitle, AZStd::optional backButtonCallback) { m_viewportUi->CreateViewportBorder(borderTitle, backButtonCallback); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h index 6ed2a2892f..54f1eb5a57 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h @@ -51,7 +51,7 @@ namespace AzToolsFramework::ViewportUi void RemoveTextField(TextFieldId textFieldId) override; void SetTextFieldVisible(TextFieldId textFieldId, bool visible) override; void CreateViewportBorder( - const AZStd::string& borderTitle, AZStd::optional backButtonCallback) override; + const AZStd::string& borderTitle, AZStd::optional backButtonCallback) override; void RemoveViewportBorder() override; void PressButton(ClusterId clusterId, ButtonId buttonId) override; void PressButton(SwitcherId switcherId, ButtonId buttonId) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h index 6334f566ce..9ac6feb8c8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h @@ -23,7 +23,7 @@ namespace AzToolsFramework::ViewportUi using TextFieldId = IdType; //! Callback function for viewport UI back button. - using ViewportUIBackButtonCallback = AZStd::function; + using ViewportUiBackButtonCallback = AZStd::function; inline const ViewportUiElementId InvalidViewportUiElementId = ViewportUiElementId(0); inline const ButtonId InvalidButtonId = ButtonId(0); @@ -98,9 +98,9 @@ namespace AzToolsFramework::ViewportUi virtual void RemoveTextField(TextFieldId textFieldId) = 0; //! Sets the visibility of the text field. virtual void SetTextFieldVisible(TextFieldId textFieldId, bool visible) = 0; - //! Create the highlight border for editor modes with optional back button to exit the given editor mode. - virtual void CreateViewportBorder(const AZStd::string& borderTitle, AZStd::optional backButtonCallback) = 0; - //! Remove the highlight border for editor modes. + //! Create the highlight border with optional back button to exit the given editor mode. + virtual void CreateViewportBorder(const AZStd::string& borderTitle, AZStd::optional backButtonCallback) = 0; + //! Remove the highlight border. virtual void RemoveViewportBorder() = 0; //! Invoke a button press on a cluster. virtual void PressButton(ClusterId clusterId, ButtonId buttonId) = 0; From 8ee6f1a7f41922eb7a0d6da09bf239b4881ef902 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 17 Nov 2021 11:08:22 +0000 Subject: [PATCH 5/5] Fix back icon scaling. Signed-off-by: John --- .../AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp index 315a4d0aec..a728ce9ac8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiDisplay.cpp @@ -22,6 +22,8 @@ namespace AzToolsFramework::ViewportUi::Internal const static int HighlightBorderSize = 5; const static char* HighlightBorderColor = "#4A90E2"; const static int HighlightBorderBackButtonMargin = 5; + const static int HighlightBorderBackButtonIconSize = 20; + const static char* HighlightBorderBackButtonIconFile = "X_axis.svg"; static void UnparentWidgets(ViewportUiElementIdInfoLookup& viewportUiElementIdInfoLookup) { @@ -383,10 +385,9 @@ namespace AzToolsFramework::ViewportUi::Internal "border: 0px; padding-left: %dpx; padding-right: %dpx", HighlightBorderBackButtonMargin, HighlightBorderBackButtonMargin); m_viewportBorderBackButton.setStyleSheet(styleSheet.c_str()); m_viewportBorderBackButton.setVisible(false); - QPixmap backButtonPixmap(QString(":/stylesheet/img/UI20/toolbar/X_axis.svg")); - QIcon backButtonIcon(backButtonPixmap); + QIcon backButtonIcon(QString(AZStd::string::format(":/stylesheet/img/UI20/toolbar/%s", HighlightBorderBackButtonIconFile).c_str())); m_viewportBorderBackButton.setIcon(backButtonIcon); - m_viewportBorderBackButton.setIconSize(backButtonPixmap.size()); + m_viewportBorderBackButton.setIconSize(QSize(HighlightBorderBackButtonIconSize, HighlightBorderBackButtonIconSize)); // setup the handler for the back button to call the user provided callback (if any) QObject::connect(