diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h index bcc8afbe6a..9da8d97990 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h @@ -22,22 +22,22 @@ namespace AzToolsFramework virtual ~ViewportEditorModeTrackerInterface() = default; - //! Activates the specified editor mode for the specified viewport. + //! Activates the specified editor mode for the specified viewport editor mode tracker. virtual AZ::Outcome ActivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) = 0; + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) = 0; - //! Deactivates the specified editor mode for the specified viewport. + //! Deactivates the specified editor mode for the specified viewport editor mode tracker. virtual AZ::Outcome DeactivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) = 0; + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) = 0; - //! Attempts to retrieve the editor mode state for the specified viewport, otherwise returns nullptr. - virtual const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const = 0; + //! Attempts to retrieve the editor mode state for the specified viewport editor mode tracker, otherwise returns nullptr. + virtual const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const = 0; - //! Returns the number of viewports currently being tracked. + //! Returns the number of viewport editor mode trackers. virtual size_t GetTrackedViewportCount() const = 0; - //! Returns true if the specified viewport is being tracked, otherwise false. - virtual bool IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const = 0; + //! Returns true if viewport editor modes are being tracked for the specified od, otherwise false. + virtual bool IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const = 0; }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h index 42a1cb0113..4fcb891e61 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include #include namespace AzToolsFramework @@ -23,11 +23,11 @@ namespace AzToolsFramework Pick }; - //! Viewport identifier and other relevant viewport data. - struct ViewportEditorModeInfo + //! Viewport editor mode tracker identifier and other relevant data. + struct ViewportEditorModeTrackerInfo { - using IdType = AzFramework::ViewportId; - IdType m_id = ViewportUi::DefaultViewportId; //!< The unique identifier for a given viewport. + using IdType = AzFramework::EntityContextId; + IdType m_id = AzFramework::EntityContextId::CreateNull(); //!< The unique identifier for a given viewport editor mode tracker. }; //! Interface for the editor modes of a given viewport. @@ -49,7 +49,7 @@ namespace AzToolsFramework // EBusTraits overrides static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = ViewportEditorModeInfo::IdType; + using BusIdType = ViewportEditorModeTrackerInfo::IdType; ////////////////////////////////////////////////////////////////////////// //! Notifies subscribers of the a given viewport to the activation of the specified editor mode. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp index 4d849466ee..df93e924b8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp @@ -218,7 +218,7 @@ namespace AzToolsFramework // this call to activate the component mode editor state should eventually replace the bus call in // ComponentModeCollection::BeginComponentMode() to EditorComponentModeNotifications::EnteredComponentMode // such that all of the notifications for activating/deactivating the different editor modes are in a central location - m_viewportEditorModeTracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Component); + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); // enable actions for the first/primary ComponentMode // note: if multiple ComponentModes are activated at the same time, actions @@ -296,7 +296,7 @@ namespace AzToolsFramework // this call to deactivate the component mode editor state should eventually replace the bus call in // ComponentModeCollection::EndComponentMode() to EditorComponentModeNotifications::LeftComponentMode // such that all of the notifications for activating/deactivating the different editor modes are in a central location - m_viewportEditorModeTracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Component); + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); // clear stored modes and builders for this ComponentMode // TLDR: avoid 'use after free' error diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp index ceb516d86f..af518afd66 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include namespace AzToolsFramework { @@ -79,11 +79,11 @@ namespace AzToolsFramework { if (!m_focusRoot.IsValid() && entityId.IsValid()) { - tracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Focus); + tracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Focus); } else if (m_focusRoot.IsValid() && !entityId.IsValid()) { - tracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Focus); + tracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Focus); } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp index 30958cfbc1..1ad0ee8ff3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp @@ -32,14 +32,14 @@ namespace AzToolsFramework m_manipulatorManager = AZStd::make_shared(AzToolsFramework::g_mainManipulatorManagerId); m_transformComponentSelection = AZStd::make_unique(entityDataCache); - m_viewportEditorModeTracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Default); + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Default); } EditorDefaultSelection::~EditorDefaultSelection() { ComponentModeFramework::ComponentModeSystemRequestBus::Handler::BusDisconnect(); ActionOverrideRequestBus::Handler::BusDisconnect(); - m_viewportEditorModeTracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Default); + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Default); } void EditorDefaultSelection::SetOverridePhantomWidget(QWidget* phantomOverrideWidget) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp index 18eda140a0..6e7777b31c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp @@ -21,7 +21,7 @@ namespace AzToolsFramework : m_editorHelpers(AZStd::make_unique(entityDataCache)) , m_viewportEditorModeTracker(viewportEditorModeTracker) { - m_viewportEditorModeTracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Pick); + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Pick); } EditorPickEntitySelection::~EditorPickEntitySelection() @@ -31,7 +31,7 @@ namespace AzToolsFramework ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequests::SetEntityHighlighted, m_hoveredEntityId, false); } - m_viewportEditorModeTracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Pick); + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Pick); } // note: entityIdUnderCursor is the authoritative entityId we get each frame by querying diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp index 105712c789..d3cfa47e51 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp @@ -46,13 +46,14 @@ namespace AzToolsFramework } AZ::Outcome ViewportEditorModeTracker::ActivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) { - auto& editorModes = m_viewportEditorModesMap[viewportEditorModeInfo.m_id]; + auto& editorModes = m_viewportEditorModesMap[ViewportEditorModeTrackerInfo.m_id]; if (editorModes.IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( - "Duplicate call to ActivateMode for mode '%u' on id '%i'", static_cast(mode), viewportEditorModeInfo.m_id)); + "Duplicate call to ActivateMode for mode '%u' on id '%s'", static_cast(mode), + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } if (const auto result = editorModes.ActivateMode(mode); @@ -62,29 +63,30 @@ namespace AzToolsFramework } ViewportEditorModeNotificationsBus::Event( - viewportEditorModeInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeActivated, editorModes, mode); + ViewportEditorModeTrackerInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeActivated, editorModes, mode); return AZ::Success(); } AZ::Outcome ViewportEditorModeTracker::DeactivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) { ViewportEditorModes* editorModes = nullptr; bool modeWasActive = true; - if (m_viewportEditorModesMap.count(viewportEditorModeInfo.m_id)) + if (m_viewportEditorModesMap.count(ViewportEditorModeTrackerInfo.m_id)) { - editorModes = &m_viewportEditorModesMap.at(viewportEditorModeInfo.m_id); + editorModes = &m_viewportEditorModesMap.at(ViewportEditorModeTrackerInfo.m_id); if (!editorModes->IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( - "Duplicate call to DeactivateMode for mode '%u' on id '%i'", static_cast(mode), viewportEditorModeInfo.m_id)); + "Duplicate call to DeactivateMode for mode '%u' on id '%s'", static_cast(mode), + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } } else { modeWasActive = false; - editorModes = &m_viewportEditorModesMap[viewportEditorModeInfo.m_id]; + editorModes = &m_viewportEditorModesMap[ViewportEditorModeTrackerInfo.m_id]; } if(const auto result = editorModes->DeactivateMode(mode); @@ -94,7 +96,7 @@ namespace AzToolsFramework } ViewportEditorModeNotificationsBus::Event( - viewportEditorModeInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeDeactivated, *editorModes, mode); + ViewportEditorModeTrackerInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeDeactivated, *editorModes, mode); if (modeWasActive) { @@ -103,14 +105,14 @@ namespace AzToolsFramework else { return AZ::Failure(AZStd::string::format( - "Call to DeactivateMode for mode '%u' on id '%i' without precursor call to ActivateMode", static_cast(mode), - viewportEditorModeInfo.m_id)); + "Call to DeactivateMode for mode '%u' on id '%s' without precursor call to ActivateMode", static_cast(mode), + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } } - const ViewportEditorModesInterface* ViewportEditorModeTracker::GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const + const ViewportEditorModesInterface* ViewportEditorModeTracker::GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const { - if (auto editorModes = m_viewportEditorModesMap.find(viewportEditorModeInfo.m_id); + if (auto editorModes = m_viewportEditorModesMap.find(ViewportEditorModeTrackerInfo.m_id); editorModes != m_viewportEditorModesMap.end()) { return &editorModes->second; @@ -126,8 +128,8 @@ namespace AzToolsFramework return m_viewportEditorModesMap.size(); } - bool ViewportEditorModeTracker::IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const + bool ViewportEditorModeTracker::IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const { - return m_viewportEditorModesMap.count(viewportEditorModeInfo.m_id) > 0; + return m_viewportEditorModesMap.count(ViewportEditorModeTrackerInfo.m_id) > 0; } } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h index 5b382c44e7..2efc0a66f7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h @@ -42,14 +42,14 @@ namespace AzToolsFramework { public: // ViewportEditorModeTrackerInterface overrides ... - AZ::Outcome ActivateMode(const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) override; - AZ::Outcome DeactivateMode(const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) override; - const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const override; + AZ::Outcome ActivateMode(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) override; + AZ::Outcome DeactivateMode(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) override; + const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const override; size_t GetTrackedViewportCount() const override; - bool IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const override; + bool IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const override; private: - using ViewportEditorModesMap = AZStd::unordered_map; - ViewportEditorModesMap m_viewportEditorModesMap; //!< Editor mode state per viewport. + using ViewportEditorModesMap = AZStd::unordered_map; + ViewportEditorModesMap m_viewportEditorModesMap; //!< Editor mode states per tracker. }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp index 866d88b7ba..db6a0b8571 100644 --- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -17,8 +18,8 @@ namespace UnitTest using ViewportEditorMode = AzToolsFramework::ViewportEditorMode; using ViewportEditorModes = AzToolsFramework::ViewportEditorModes; using ViewportEditorModeTracker = AzToolsFramework::ViewportEditorModeTracker; - using ViewportEditorModeInfo = AzToolsFramework::ViewportEditorModeInfo; - using ViewportId = ViewportEditorModeInfo::IdType; + using ViewportEditorModeTrackerInfo = AzToolsFramework::ViewportEditorModeTrackerInfo; + using TrackerId = ViewportEditorModeTrackerInfo::IdType; using ViewportEditorModesInterface = AzToolsFramework::ViewportEditorModesInterface; using ViewportEditorModeTrackerInterface = AzToolsFramework::ViewportEditorModeTrackerInterface; @@ -113,10 +114,10 @@ namespace UnitTest using EditModeTracker = AZStd::unordered_map; - ViewportEditorModeNotificationsBusHandler(ViewportId viewportId) - : m_viewportSubscription(viewportId) + ViewportEditorModeNotificationsBusHandler(TrackerId id) + : m_trackerSubscription(id) { - AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(m_viewportSubscription); + AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(m_trackerSubscription); } ~ViewportEditorModeNotificationsBusHandler() @@ -124,11 +125,6 @@ namespace UnitTest AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); } - ViewportId GetViewportSubscription() const - { - return m_viewportSubscription; - } - const EditModeTracker& GetEditorModes() const { return m_editorModes; @@ -145,7 +141,7 @@ namespace UnitTest } private: - ViewportId m_viewportSubscription; + TrackerId m_trackerSubscription; EditModeTracker m_editorModes; }; @@ -158,10 +154,14 @@ namespace UnitTest void SetUpEditorFixtureImpl() override { + m_handlerIds.resize(ViewportEditorModes::NumEditorModes); for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - m_editorModeHandlers[mode] = AZStd::make_unique(mode); + // Create a random GUID for each handler and associate that GUID with an index derived from one of the possible editor modes + m_handlerIds[mode] = TrackerId::CreateRandom(); + m_editorModeHandlers[mode] = AZStd::make_unique(m_handlerIds[mode]); } + } void TearDownEditorFixtureImpl() override @@ -173,6 +173,7 @@ namespace UnitTest } AZStd::array, ViewportEditorModes::NumEditorModes> m_editorModeHandlers; + AZStd::vector m_handlerIds; }; // Fixture for testing the integration of viewport editor mode state tracker @@ -184,7 +185,8 @@ namespace UnitTest { m_viewportEditorModeTracker = AZ::Interface::Get(); ASSERT_NE(m_viewportEditorModeTracker, nullptr); - m_viewportEditorModes = m_viewportEditorModeTracker->GetViewportEditorModes({}); + m_viewportEditorModes = m_viewportEditorModeTracker->GetViewportEditorModes({AzToolsFramework::GetEntityContextId()}); + ASSERT_NE(m_viewportEditorModes, nullptr); } ViewportEditorModeTrackerInterface* m_viewportEditorModeTracker = nullptr; @@ -316,17 +318,17 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, ActivatingViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatId) { // Given a viewport not currently being tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); // When a mode is activated for that viewport const auto editorMode = ViewportEditorMode::Default; - m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); // Expect that viewport to now be tracked - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); // Expect the mode for that viewport to be active @@ -336,23 +338,24 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, DeactivatingViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatIdButReturnsError) { // Given a viewport not currently being tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); // When a mode is deactivated for that viewport const auto editorMode = ViewportEditorMode::Default; const auto expectedErrorMsg = AZStd::string::format( - "Call to DeactivateMode for mode '%u' on id '%i' without precursor call to ActivateMode", static_cast(editorMode), viewportid); - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + "Call to DeactivateMode for mode '%u' on id '%s' without precursor call to ActivateMode", static_cast(editorMode), + id.ToString().c_str()); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect an error due to no precursor activation of that mode EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect that viewport to now be tracked - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); // Expect the mode for that viewport to be inactive EXPECT_NE(viewportEditorModeState, nullptr); @@ -361,45 +364,46 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, GettingNonExistentViewportEditorModesForIdReturnsNull) { - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); } TEST_F(ViewportEditorModeTrackerTestFixture, ActivatingViewportEditorModesForExistingIdInThatStateReturnsError) { // Given a viewport not currently tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); const auto editorMode = ViewportEditorMode::Default; { // When the mode is activated for the viewport - const auto result = m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); // Expect no error as there is no duplicate activation EXPECT_TRUE(result.IsSuccess()); // Expect the mode to be active for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_TRUE(viewportEditorModeState->IsModeActive(editorMode)); } { // When the mode is activated again for the viewport - const auto result = m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); // Expect an error for the duplicate activation const auto expectedErrorMsg = AZStd::string::format( - "Duplicate call to ActivateMode for mode '%u' on id '%i'", static_cast(editorMode), viewportid); + "Duplicate call to ActivateMode for mode '%u' on id '%s'", static_cast(editorMode), + id.ToString().c_str()); EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect the mode to still be active for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_TRUE(viewportEditorModeState->IsModeActive(editorMode)); } @@ -408,38 +412,39 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, DeactivatingViewportEditorModesForExistingIdNotInThatStateReturnssError) { // Given a viewport not currently tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); const auto editorMode = ViewportEditorMode::Default; { // When the mode is activated and then deactivated for the viewport - m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect no error as there is no duplicate deactivation EXPECT_TRUE(result.IsSuccess()); // Expect the mode to be inctive for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_FALSE(viewportEditorModeState->IsModeActive(editorMode)); } { // When the mode is deactivated again for the viewport - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect an error for the duplicate deactivation const auto expectedErrorMsg = AZStd::string::format( - "Duplicate call to DeactivateMode for mode '%u' on id '%i'", static_cast(editorMode), viewportid); + "Duplicate call to DeactivateMode for mode '%u' on id '%s'", static_cast(editorMode), + id.ToString().c_str()); EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect the mode to still be inactive for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_FALSE(viewportEditorModeState->IsModeActive(editorMode)); } @@ -459,9 +464,9 @@ namespace UnitTest // When each editor mode is activated by the state tracker for a specific viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - const ViewportId viewportId = mode; + const TrackerId id = m_handlerIds[mode]; const ViewportEditorMode editorMode = static_cast(mode); - m_viewportEditorModeTracker.ActivateMode({ viewportId }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); } for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) @@ -491,10 +496,10 @@ namespace UnitTest // When each editor mode is activated deactivated by the state tracker for a specific viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - const ViewportId viewportId = mode; + const TrackerId id = m_handlerIds[mode]; const ViewportEditorMode editorMode = static_cast(mode); - m_viewportEditorModeTracker.ActivateMode({ viewportId }, editorMode); - m_viewportEditorModeTracker.DeactivateMode({ viewportId }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); } for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++)