1f9b284de2
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> # Conflicts: # Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin_precompiled.h # Code/Editor/Plugins/EditorCommon/EditorCommon_precompiled.h # Code/Editor/Plugins/EditorCommon/stdafx.cpp # Code/Editor/Plugins/FFMPEGPlugin/FFMPEGPlugin_precompiled.h # Code/Editor/Plugins/PerforcePlugin/PerforcePlugin_precompiled.h # Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsTool_precompiled.h # Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFramework_precompiled.h # Code/Tools/AssetProcessor/native/precompiled.h # Code/Tools/Standalone/StandaloneTools_precompiled.h # Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer_precompiled.h # Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessing_precompiled.h # Gems/Atom/RHI/DX12/Code/Source/RHI/Atom_RHI_DX12_precompiled.h # Gems/Atom/RHI/Metal/Code/Include/Platform/Mac/Atom_RHI_Metal_precompiled_Platform.h # Gems/Atom/RHI/Metal/Code/Include/Platform/iOS/Atom_RHI_Metal_precompiled_Platform.h # Gems/Atom/RHI/Metal/Code/Source/Atom_RHI_Metal_precompiled.h # Gems/Atom/RHI/Metal/Code/atom_rhi_metal_common_files.cmake # Gems/Atom/RHI/Null/Code/Source/Atom_RHI_Null_precompiled.h # Gems/Atom/RHI/Null/Code/atom_rhi_null_common_files.cmake # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Android/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Mac/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Windows/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Source/Atom_RHI_Vulkan_precompiled.h # Gems/Atom/RHI/Vulkan/Code/Source/RHI/SwapChain.cpp # Gems/Atom/RHI/Vulkan/Code/atom_rhi_vulkan_common_files.cmake # Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/AtomFont_precompiled.h # Gems/Blast/Code/Source/StdAfx.cpp # Gems/Camera/Code/Source/Camera_precompiled.h # Gems/EMotionFX/Code/Source/EMotionFX_precompiled.h # Gems/FastNoise/Code/Source/FastNoise_precompiled.h # Gems/Gestures/Code/Source/Gestures_precompiled.h # Gems/GradientSignal/Code/Source/GradientSignal_precompiled.h # Gems/GraphCanvas/Code/precompiled.h # Gems/ImGui/Code/Source/ImGui_precompiled.h # Gems/InAppPurchases/Code/Source/InAppPurchases_precompiled.h # Gems/LmbrCentral/Code/Source/LmbrCentral_precompiled.h # Gems/LmbrCentral/Code/Tests/ShapeGeometryUtilTest.cpp # Gems/LyShine/Code/Editor/UiCanvasEditor_precompiled.h # Gems/LyShine/Code/Source/Animation/LyShine_precompiled.h # Gems/LyShine/Code/Source/LyShine_precompiled.h # Gems/LyShineExamples/Code/Source/LyShineExamples_precompiled.h # Gems/Maestro/Code/Source/Cinematics/Maestro_precompiled.h # Gems/Maestro/Code/Source/Maestro_precompiled.h # Gems/MessagePopup/Code/Source/MessagePopup_precompiled.h # Gems/Metastream/Code/Source/Metastream_precompiled.h # Gems/Microphone/Code/Source/Microphone_precompiled.h # Gems/Multiplayer/Code/Source/Multiplayer_precompiled.h # Gems/PhysX/Code/NumericalMethods/Source/NumericalMethods_precompiled.h # Gems/PhysX/Code/Source/PhysXUnsupported_precompiled.h # Gems/PhysX/Code/Source/PhysX_precompiled.h # Gems/PhysX/Code/physx_unsupported_files.cmake # Gems/PhysXDebug/Code/Source/PhysXDebugUnsupported_precompiled.h # Gems/PhysXDebug/Code/Source/PhysXDebug_precompiled.h # Gems/ScriptCanvas/Code/Editor/precompiled.h # Gems/ScriptCanvas/Code/Source/precompiled.h # Gems/ScriptCanvasDeveloper/Code/Source/precompiled.h # Gems/ScriptCanvasPhysics/Code/Source/ScriptCanvasPhysics_precompiled.h # Gems/ScriptEvents/Code/Source/precompiled.h # Gems/ScriptEvents/Code/Tests/Editor/EditorTests.cpp # Gems/ScriptedEntityTweener/Code/Source/ScriptedEntityTweener_precompiled.h # Gems/SliceFavorites/Code/Source/SliceFavorites_precompiled.h # Gems/StartingPointCamera/Code/Source/StartingPointCamera_precompiled.h # Gems/StartingPointInput/Code/Source/StartingPointInput_precompiled.h # Gems/StartingPointMovement/Code/Source/StartingPointMovement_precompiled.h # Gems/SurfaceData/Code/Source/SurfaceData_precompiled.h # Gems/TextureAtlas/Code/Source/TextureAtlas_precompiled.h # Gems/TickBusOrderViewer/Code/Source/TickBusOrderViewer_precompiled.h # Gems/Twitch/Code/Source/Twitch_precompiled.h # Gems/VirtualGamepad/Code/Source/VirtualGamepad_precompiled.h # Gems/WhiteBox/Code/Source/WhiteBoxUnsupported_precompiled.h # Gems/WhiteBox/Code/Source/WhiteBox_precompiled.h
255 lines
8.2 KiB
C++
255 lines
8.2 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 <QtWidgets/QGridLayout>
|
|
|
|
#include "CombinedEventsControl.hxx"
|
|
#include <Source/Driller/moc_CombinedEventsControl.cpp>
|
|
|
|
#include "Annotations/AnnotationsHeaderView_Events.hxx"
|
|
#include "Axis.hxx"
|
|
#include "CollapsiblePanel.hxx"
|
|
#include "ChannelDataView.hxx"
|
|
#include "DrillerAggregator.hxx"
|
|
#include "DrillerEvent.h"
|
|
#include "DrillerMainWindowMessages.h"
|
|
|
|
#include <QEvent>
|
|
|
|
using namespace Racetrack;
|
|
|
|
namespace Driller
|
|
{
|
|
static const int k_raceTrackMinSize = 50;
|
|
static const int k_eventTrackSize = 20;
|
|
|
|
CombinedEventsControl::CombinedEventsControl(QWidget* parent, Qt::WindowFlags flags)
|
|
: QDockWidget(parent, flags)
|
|
{
|
|
m_ScrubberIndex = 0;
|
|
|
|
m_FirstIndex = 0;
|
|
m_LastIndex = 0;
|
|
|
|
QWidget* nullBar = new QWidget();
|
|
setTitleBarWidget(nullBar);
|
|
|
|
setFeatures(QDockWidget::NoDockWidgetFeatures);
|
|
setAllowedAreas(Qt::BottomDockWidgetArea);
|
|
|
|
m_collapsiblePanel = new CollapsiblePanel(this);
|
|
this->setWidget(m_collapsiblePanel);
|
|
|
|
m_Contents = new QWidget(this);
|
|
m_Contents->setGeometry(0, 22, 542, 34);
|
|
m_Contents->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
|
|
QVBoxLayout* layout = new QVBoxLayout();
|
|
|
|
layout->setMargin(0);
|
|
layout->setSpacing(2);
|
|
|
|
m_Contents->setLayout(layout);
|
|
m_collapsiblePanel->SetContent(m_Contents);
|
|
m_collapsiblePanel->SetTitle("Detailed Event View");
|
|
|
|
m_EventTrack = aznew CEQDataTrack(this);
|
|
m_EventTrack->SetupAxis("", 0.0f, 1.0f, false);
|
|
m_EventTrack->SetMarkerColor(Qt::darkMagenta);
|
|
m_EventTrack->setMinimumHeight(k_raceTrackMinSize);
|
|
|
|
m_annotationHeaderView = aznew AnnotationHeaderView_Events(this);
|
|
|
|
m_Contents->layout()->addWidget(m_annotationHeaderView);
|
|
m_Contents->layout()->addWidget(m_EventTrack);
|
|
|
|
m_EventTrack->installEventFilter(this);
|
|
|
|
connect(m_EventTrack, SIGNAL(EventRequestEventFocus(Driller::EventNumberType)), this, SLOT(OnEventTrackRequestEventFocus(Driller::EventNumberType)));
|
|
}
|
|
|
|
void CombinedEventsControl::SetIdentity(int identity)
|
|
{
|
|
m_identity = identity;
|
|
DrillerEventWindowMessages::Handler::BusConnect(m_identity);
|
|
}
|
|
|
|
bool CombinedEventsControl::eventFilter(QObject* obj, QEvent* event)
|
|
{
|
|
if (event->type() == QEvent::Resize)
|
|
{
|
|
if (obj == m_EventTrack)
|
|
{
|
|
QRect eventTrackGeometry = m_EventTrack->geometry();
|
|
QSize actualSize = QSize(eventTrackGeometry.x(), eventTrackGeometry.height());
|
|
emit InfoAreaGeometryChanged(actualSize);
|
|
}
|
|
}
|
|
|
|
// hand it to the owner
|
|
return QObject::eventFilter(obj, event);
|
|
}
|
|
|
|
Charts::Axis* CombinedEventsControl::GetAxis() const
|
|
{
|
|
return m_EventTrack->GetAxis();
|
|
}
|
|
|
|
|
|
CombinedEventsControl::~CombinedEventsControl()
|
|
{
|
|
DrillerEventWindowMessages::Handler::BusDisconnect(m_identity);
|
|
|
|
if (m_EventTrack)
|
|
{
|
|
delete m_EventTrack;
|
|
}
|
|
}
|
|
|
|
void CombinedEventsControl::ClearAggregatorList()
|
|
{
|
|
m_Aggregators.clear();
|
|
m_EventTrack->Clear();
|
|
m_EventTrack->setMinimumHeight(k_raceTrackMinSize);
|
|
|
|
m_ScrubberIndex = 0;
|
|
m_FirstIndex = 0;
|
|
m_LastIndex = 0;
|
|
}
|
|
|
|
void CombinedEventsControl::AddAggregatorList(DrillerNetworkMessages::AggregatorList& theList)
|
|
{
|
|
// m_EventStrip clear all existing channels and the channel axis
|
|
m_EventTrack->Clear();
|
|
for (DrillerNetworkMessages::AggregatorList::iterator iter = theList.begin(); iter != theList.end(); ++iter)
|
|
{
|
|
m_Aggregators.push_back(*iter);
|
|
|
|
int channelID = m_EventTrack->AddChannel((*iter)->GetName());
|
|
m_EventTrack->SetChannelColor(channelID, (*iter)->GetColor());
|
|
}
|
|
|
|
m_EventTrack->setMinimumHeight(k_raceTrackMinSize + static_cast<int>(m_Aggregators.size()) * k_eventTrackSize);
|
|
}
|
|
void CombinedEventsControl::AddAggregator(Aggregator& theAggregator)
|
|
{
|
|
m_Aggregators.push_back(&theAggregator);
|
|
|
|
int channelID = m_EventTrack->AddChannel(theAggregator.GetName());
|
|
m_EventTrack->SetChannelColor(channelID, theAggregator.GetColor());
|
|
|
|
m_EventTrack->setMinimumHeight(k_raceTrackMinSize + static_cast<int>(m_Aggregators.size()) * k_eventTrackSize);
|
|
}
|
|
|
|
void CombinedEventsControl::SetAnnotationsProvider(AnnotationsProvider* ptrAnnotations)
|
|
{
|
|
m_annotationHeaderView->AttachToAxis(ptrAnnotations, GetAxis());
|
|
}
|
|
|
|
void CombinedEventsControl::SetEndFrame(FrameNumberType /*frame*/)
|
|
{
|
|
m_EventTrack->update();
|
|
}
|
|
|
|
void CombinedEventsControl::SetSliderOffset(FrameNumberType /*frame*/)
|
|
{
|
|
}
|
|
|
|
void CombinedEventsControl::MouseClickInformed(int newValue)
|
|
{
|
|
emit InformOfMouseClick(newValue, 1, 0);
|
|
}
|
|
|
|
void CombinedEventsControl::MouseMoveInformed(int newValue)
|
|
{
|
|
emit InformOfMouseMove(newValue, 1, 0);
|
|
}
|
|
|
|
void CombinedEventsControl::OnEventScrubberboxChanged(int newValue)
|
|
{
|
|
emit EventRequestEventFocus(static_cast<EventNumberType>(newValue));
|
|
}
|
|
|
|
void CombinedEventsControl::SetScrubberFrame(FrameNumberType frame)
|
|
{
|
|
m_EventTrack->GetAxis()->Clear();
|
|
|
|
int temp_m_FirstIndex = 0x7fffffff;
|
|
int temp_m_LastIndex = 0;
|
|
|
|
AZ::s64 highestCount = 0;
|
|
int channelIdx = 0;
|
|
for (AZStd::list<Aggregator*>::iterator iter = m_Aggregators.begin(); iter != m_Aggregators.end(); ++iter, ++channelIdx)
|
|
{
|
|
m_EventTrack->ClearData(channelIdx);
|
|
|
|
size_t numEvents = (*iter)->NumOfEventsAtFrame(frame);
|
|
|
|
if (numEvents)
|
|
{
|
|
highestCount += numEvents;
|
|
EventNumberType eventIndexOffset = (*iter)->GetFirstIndexAtFrame(frame);
|
|
|
|
for (EventNumberType eventIndex = 0; eventIndex < static_cast<EventNumberType>(numEvents); ++eventIndex)
|
|
{
|
|
DrillerEvent* dep = (*iter)->GetEvents()[ eventIndex + eventIndexOffset ];
|
|
AZ::s64 geid = dep->GetGlobalEventId();
|
|
|
|
temp_m_FirstIndex = (int)geid < temp_m_FirstIndex ? (int)geid : temp_m_FirstIndex;
|
|
temp_m_LastIndex = (int)geid > temp_m_LastIndex ? (int)geid : temp_m_LastIndex;
|
|
|
|
//AZ_TracePrintf("LUA","First %d Last %d\n",temp_m_FirstIndex, temp_m_LastIndex);
|
|
|
|
m_EventTrack->AddData(channelIdx, (float)geid, (float)channelIdx);
|
|
}
|
|
}
|
|
}
|
|
|
|
m_FirstIndex = temp_m_FirstIndex;
|
|
m_LastIndex = temp_m_LastIndex;
|
|
|
|
m_EventTrack->GetAxis()->SetAxisRange((float)m_FirstIndex, (float)m_LastIndex);
|
|
m_EventTrack->GetAxis()->SetViewFull();
|
|
SanitizeScrubberIndex();
|
|
emit EventRequestEventFocus(m_ScrubberIndex);
|
|
}
|
|
|
|
void CombinedEventsControl::OnEventTrackRequestEventFocus(Driller::EventNumberType eventIndex)
|
|
{
|
|
emit EventRequestEventFocus(eventIndex);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Event Window Messages
|
|
void CombinedEventsControl::EventFocusChanged(EventNumberType eventIdx)
|
|
{
|
|
m_ScrubberIndex = eventIdx;
|
|
SanitizeScrubberIndex();
|
|
m_EventTrack->SetMarkerPosition((float)m_ScrubberIndex);
|
|
}
|
|
|
|
void CombinedEventsControl::SanitizeScrubberIndex()
|
|
{
|
|
m_ScrubberIndex = m_ScrubberIndex < m_FirstIndex ? m_FirstIndex : m_ScrubberIndex;
|
|
m_ScrubberIndex = m_ScrubberIndex > m_LastIndex ? m_LastIndex : m_ScrubberIndex;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
CEQDataTrack::CEQDataTrack(QWidget* parent, Qt::WindowFlags flags)
|
|
: DataRacetrack(parent, flags)
|
|
{
|
|
m_InsetT = 4;
|
|
m_InsetB = 12;
|
|
SetZeroBasedAxisNumbering(true);
|
|
setAutoFillBackground(false);
|
|
setAttribute(Qt::WA_OpaquePaintEvent, true);
|
|
}
|
|
CEQDataTrack::~CEQDataTrack()
|
|
{
|
|
}
|
|
}
|