You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/QComponentLevelEntityEditor...

99 lines
3.3 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include "UI/QComponentLevelEntityEditorMainWindow.h"
#include <AzCore/Component/Entity.h>
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
#include <AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.hxx>
#include <AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx>
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
#include <QVBoxLayout>
QComponentLevelEntityEditorInspectorWindow::QComponentLevelEntityEditorInspectorWindow(QWidget* parent)
: QMainWindow(parent)
, m_propertyEditor(nullptr)
{
GetIEditor()->RegisterNotifyListener(this);
AzToolsFramework::SliceMetadataEntityContextNotificationBus::Handler::BusConnect();
Init();
}
QComponentLevelEntityEditorInspectorWindow::~QComponentLevelEntityEditorInspectorWindow()
{
AzToolsFramework::SliceMetadataEntityContextNotificationBus::Handler::BusDisconnect();
GetIEditor()->UnregisterNotifyListener(this);
}
void QComponentLevelEntityEditorInspectorWindow::Init()
{
QVBoxLayout* layout = new QVBoxLayout();
m_propertyEditor = new AzToolsFramework::EntityPropertyEditor(nullptr, Qt::WindowFlags(), true);
layout->addWidget(m_propertyEditor);
// On initialization, notify our property editor about the root metadata entity if it exists
RefreshPropertyEditor();
QWidget* window = new QWidget();
window->setLayout(layout);
setCentralWidget(window);
}
void QComponentLevelEntityEditorInspectorWindow::OnMetadataEntityAdded(AZ::EntityId entityId)
{
AZ::EntityId rootSliceMetaDataEntity = GetRootMetaDataEntityId();
if (rootSliceMetaDataEntity == entityId)
{
AzToolsFramework::EntityIdSet entities;
entities.insert(rootSliceMetaDataEntity);
m_propertyEditor->SetOverrideEntityIds(entities);
}
}
void QComponentLevelEntityEditorInspectorWindow::RefreshPropertyEditor()
{
AZ::EntityId rootSliceMetaDataEntity = GetRootMetaDataEntityId();
OnMetadataEntityAdded(rootSliceMetaDataEntity);
}
AZ::EntityId QComponentLevelEntityEditorInspectorWindow::GetRootMetaDataEntityId() const
{
AZ::EntityId levelEntityId;
AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(levelEntityId, &AzToolsFramework::ToolsApplicationRequests::GetCurrentLevelEntityId);
return levelEntityId;
}
void QComponentLevelEntityEditorInspectorWindow::OnEditorNotifyEvent(EEditorNotifyEvent event)
{
switch (event)
{
// Refresh the Level Component Property Editor any time we start or end
// a level creation or load.
case eNotify_OnBeginLoad:
case eNotify_OnEndLoad:
case eNotify_OnBeginCreate:
case eNotify_OnEndCreate:
RefreshPropertyEditor();
break;
default:
break;
}
}
///////////////////////////////////////////////////////////////////////////////
// End of context menu handling
///////////////////////////////////////////////////////////////////////////////
#include <UI/moc_QComponentLevelEntityEditorMainWindow.cpp>