Merge pull request #95 from aws-lumberyard-dev/hasareej_LYN-2475_viewportui_switcher

Initial pass of ViewportUiSwitcher.
This commit is contained in:
Hasareej
2021-04-29 13:41:50 +01:00
committed by GitHub
20 changed files with 551 additions and 182 deletions
@@ -20,35 +20,35 @@
namespace UnitTest
{
using Cluster = AzToolsFramework::ViewportUi::Internal::Cluster;
using ButtonGroup = AzToolsFramework::ViewportUi::Internal::ButtonGroup;
using ButtonId = AzToolsFramework::ViewportUi::ButtonId;
TEST(ClusterTest, AddButtonAddsButtonToClusterAndReturnsId)
{
auto cluster = AZStd::make_unique<Cluster>();
auto buttonId = cluster->AddButton("");
auto buttonGroup = AZStd::make_unique<ButtonGroup>();
auto buttonId = buttonGroup->AddButton("");
auto button = cluster->GetButton(buttonId);
auto button = buttonGroup->GetButton(buttonId);
EXPECT_TRUE(button != nullptr);
}
TEST(ClusterTest, SetHighlightedButtonChangesButtonStateToSelected)
{
auto cluster = AZStd::make_unique<Cluster>();
auto buttonId = cluster->AddButton("");
auto buttonGroup = AZStd::make_unique<ButtonGroup>();
auto buttonId = buttonGroup->AddButton("");
// check button is not highlighted by default
auto button = cluster->GetButton(buttonId);
auto button = buttonGroup->GetButton(buttonId);
EXPECT_FALSE(button->m_state == AzToolsFramework::ViewportUi::Internal::Button::State::Selected);
cluster->SetHighlightedButton(buttonId);
buttonGroup->SetHighlightedButton(buttonId);
EXPECT_TRUE(button->m_state == AzToolsFramework::ViewportUi::Internal::Button::State::Selected);
}
TEST(ClusterTest, ConnectEventHandlerConnectsHandlerToButtonTriggeredEvent)
{
auto cluster = AZStd::make_unique<Cluster>();
auto buttonId = cluster->AddButton("");
auto buttonGroup = AZStd::make_unique<ButtonGroup>();
auto buttonId = buttonGroup->AddButton("");
// create a handler which will be triggered by the cluster
bool handlerTriggered = false;
@@ -62,8 +62,8 @@ namespace UnitTest
}
});
cluster->ConnectEventHandler(handler);
cluster->PressButton(buttonId);
buttonGroup->ConnectEventHandler(handler);
buttonGroup->PressButton(buttonId);
EXPECT_TRUE(handlerTriggered);
}
@@ -13,7 +13,7 @@
#include <AzCore/std/smart_ptr/make_shared.h>
#include <AzFramework/Viewport/ViewportScreen.h>
#include <AzTest/AzTest.h>
#include <AzToolsFramework/ViewportUi/Cluster.h>
#include <AzToolsFramework/ViewportUi/ButtonGroup.h>
#include <AzToolsFramework/ViewportUi/ViewportUiCluster.h>
#include <QAction>
#include <QApplication>
@@ -23,14 +23,14 @@
namespace UnitTest
{
using ViewportUiCluster = AzToolsFramework::ViewportUi::Internal::ViewportUiCluster;
using Cluster = AzToolsFramework::ViewportUi::Internal::Cluster;
using ButtonGroup = AzToolsFramework::ViewportUi::Internal::ButtonGroup;
using Button = AzToolsFramework::ViewportUi::Internal::Button;
using ButtonId = AzToolsFramework::ViewportUi::ButtonId;
TEST(ViewportUiCluster, RegisterButtonIncreasesClusterHeight)
{
auto clusterInfo = AZStd::make_shared<Cluster>();
ViewportUiCluster viewportUiCluster(clusterInfo);
auto buttonGroup = AZStd::make_shared<ButtonGroup>();
ViewportUiCluster viewportUiCluster(buttonGroup);
viewportUiCluster.resize(viewportUiCluster.minimumSizeHint());
// need to initialize cluster with a single button or size will be invalid
@@ -48,8 +48,8 @@ namespace UnitTest
TEST(ViewportUiCluster, RemoveClusterButtonDecreasesClusterHeight)
{
auto clusterInfo = AZStd::make_shared<Cluster>();
ViewportUiCluster viewportUiCluster(clusterInfo);
auto buttonGroup = AZStd::make_shared<ButtonGroup>();
ViewportUiCluster viewportUiCluster(buttonGroup);
viewportUiCluster.resize(viewportUiCluster.minimumSizeHint());
// need to initialize cluster with a single button or size will be invalid
@@ -70,8 +70,8 @@ namespace UnitTest
TEST(ViewportUiCluster, UpdateChangesActiveButton)
{
auto clusterInfo = AZStd::make_shared<Cluster>();
ViewportUiCluster viewportUiCluster(clusterInfo);
auto buttonGroup = AZStd::make_shared<ButtonGroup>();
ViewportUiCluster viewportUiCluster(buttonGroup);
// register a button to the cluster
auto button = AZStd::make_unique<Button>("", ButtonId(1));
@@ -93,8 +93,8 @@ namespace UnitTest
TEST(ViewportUiCluster, TriggeringActionTriggersClusterEventForButton)
{
auto clusterInfo = AZStd::make_shared<Cluster>();
ViewportUiCluster viewportUiCluster(clusterInfo);
auto buttonGroup = AZStd::make_shared<ButtonGroup>();
ViewportUiCluster viewportUiCluster(buttonGroup);
// create a handler which will be triggered by the button
bool handlerTriggered = false;
@@ -107,7 +107,7 @@ namespace UnitTest
handlerTriggered = true;
}
});
clusterInfo->ConnectEventHandler(handler);
buttonGroup->ConnectEventHandler(handler);
// register the button
auto button = AZStd::make_unique<Button>("", testButtonId);
@@ -23,10 +23,10 @@ namespace UnitTest
{
using ViewportUiDisplay = AzToolsFramework::ViewportUi::Internal::ViewportUiDisplay;
using ViewportUiElementId = AzToolsFramework::ViewportUi::ViewportUiElementId;
using Cluster = AzToolsFramework::ViewportUi::Internal::Cluster;
using ButtonGroup = AzToolsFramework::ViewportUi::Internal::ButtonGroup;
// sets up a parent widget and render overlay to attach the Viewport UI to
// as well as a cluster with one button
// as well as a button group with one button
class ViewportUiDisplayTestFixture : public ::testing::Test
{
public:
@@ -34,22 +34,22 @@ namespace UnitTest
void SetUp()
{
m_cluster = AZStd::make_shared<Cluster>();
m_cluster->AddButton("");
m_buttonGroup = AZStd::make_shared<ButtonGroup>();
m_buttonGroup->AddButton("");
m_parentWidget = new QWidget();
m_mockRenderOverlay = new QWidget();
}
void TearDown()
{
m_cluster.reset();
m_buttonGroup.reset();
delete m_parentWidget;
delete m_mockRenderOverlay;
}
QWidget* m_parentWidget = nullptr;
QWidget* m_mockRenderOverlay = nullptr;
AZStd::shared_ptr<Cluster> m_cluster = nullptr;
AZStd::shared_ptr<ButtonGroup> m_buttonGroup = nullptr;
};
TEST_F(ViewportUiDisplayTestFixture, ViewportUiInitializationReturnsProperlyParentedWidgets)
@@ -72,13 +72,13 @@ namespace UnitTest
TEST_F(ViewportUiDisplayTestFixture, RemoveViewportUiElementRemovesElementFromViewportUi)
{
ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
viewportUi.AddCluster(m_cluster);
auto widget = viewportUi.GetViewportUiElement(m_cluster->GetViewportUiElementId());
viewportUi.AddCluster(m_buttonGroup);
auto widget = viewportUi.GetViewportUiElement(m_buttonGroup->GetViewportUiElementId());
EXPECT_TRUE(widget.get() != nullptr);
viewportUi.RemoveViewportUiElement(m_cluster->GetViewportUiElementId());
widget = viewportUi.GetViewportUiElement(m_cluster->GetViewportUiElementId());
viewportUi.RemoveViewportUiElement(m_buttonGroup->GetViewportUiElementId());
widget = viewportUi.GetViewportUiElement(m_buttonGroup->GetViewportUiElementId());
EXPECT_TRUE(widget.get() == nullptr);
}
@@ -89,11 +89,11 @@ namespace UnitTest
ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
viewportUi.InitializeUiOverlay();
viewportUi.AddCluster(m_cluster);
viewportUi.AddCluster(m_buttonGroup);
viewportUi.Update();
viewportUi.ShowViewportUiElement(m_cluster->GetViewportUiElementId());
viewportUi.ShowViewportUiElement(m_buttonGroup->GetViewportUiElementId());
EXPECT_TRUE(viewportUi.IsViewportUiElementVisible(m_cluster->GetViewportUiElementId()));
EXPECT_TRUE(viewportUi.IsViewportUiElementVisible(m_buttonGroup->GetViewportUiElementId()));
}
TEST_F(ViewportUiDisplayTestFixture, HideViewportUiElementSetsWidgetVisibilityToFalse)
@@ -102,20 +102,20 @@ namespace UnitTest
ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
viewportUi.InitializeUiOverlay();
viewportUi.AddCluster(m_cluster);
viewportUi.HideViewportUiElement(m_cluster->GetViewportUiElementId());
viewportUi.AddCluster(m_buttonGroup);
viewportUi.HideViewportUiElement(m_buttonGroup->GetViewportUiElementId());
EXPECT_FALSE(viewportUi.IsViewportUiElementVisible(m_cluster->GetViewportUiElementId()));
EXPECT_FALSE(viewportUi.IsViewportUiElementVisible(m_buttonGroup->GetViewportUiElementId()));
}
TEST_F(ViewportUiDisplayTestFixture, UpdateUiOverlayGeometryChangesGeometryToMatchViewportUiElements)
{
ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
viewportUi.InitializeUiOverlay();
viewportUi.AddCluster(m_cluster);
viewportUi.AddCluster(m_buttonGroup);
viewportUi.Update();
auto widget = viewportUi.GetViewportUiElement(m_cluster->GetViewportUiElementId());
auto widget = viewportUi.GetViewportUiElement(m_buttonGroup->GetViewportUiElementId());
EXPECT_EQ(viewportUi.GetUiMainWindow()->mask(), widget->geometry());
}
@@ -127,14 +127,14 @@ namespace UnitTest
ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
viewportUi.InitializeUiOverlay();
auto cluster = AZStd::make_shared<Cluster>();
cluster->AddButton("");
viewportUi.AddCluster(cluster);
auto buttonGroup = AZStd::make_shared<ButtonGroup>();
buttonGroup->AddButton("");
viewportUi.AddCluster(buttonGroup);
viewportUi.Update();
EXPECT_TRUE(viewportUi.GetUiMainWindow()->isVisible());
viewportUi.RemoveViewportUiElement(cluster->GetViewportUiElementId());
viewportUi.RemoveViewportUiElement(buttonGroup->GetViewportUiElementId());
viewportUi.Update();
EXPECT_FALSE(viewportUi.GetUiMainWindow()->isVisible());
}
@@ -22,19 +22,19 @@ namespace UnitTest
{
using ViewportUiDisplay = AzToolsFramework::ViewportUi::Internal::ViewportUiDisplay;
using ViewportUiElementId = AzToolsFramework::ViewportUi::ViewportUiElementId;
using Cluster = AzToolsFramework::ViewportUi::Internal::Cluster;
using ButtonGroup = AzToolsFramework::ViewportUi::Internal::ButtonGroup;
using ButtonId = AzToolsFramework::ViewportUi::ButtonId;
// child class of ViewportUiManager which exposes the protected cluster and viewport display
// child class of ViewportUiManager which exposes the protected button group and viewport display
class ViewportUiManagerTestable : public AzToolsFramework::ViewportUi::ViewportUiManager
{
public:
ViewportUiManagerTestable() = default;
~ViewportUiManagerTestable() = default;
const AZStd::unordered_map<AzToolsFramework::ViewportUi::ClusterId, AZStd::shared_ptr<Cluster>>& GetClusterMap()
const AZStd::unordered_map<AzToolsFramework::ViewportUi::ClusterId, AZStd::shared_ptr<ButtonGroup>>& GetClusterMap()
{
return m_clusters;
return m_clusterButtonGroups;
}
ViewportUiDisplay* GetViewportUiDisplay()