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/Sandbox/Plugins/ComponentEntityEditorPlugin/UI/QComponentLevelEntityEditor...

105 lines
3.6 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include "ComponentEntityEditorPlugin_precompiled.h"
#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>