Files
o3de/Code/Tools/Standalone/Source/Driller/CombinedEventsControl.cpp
T
Esteban Papp 1f9b284de2 Merge branch 'development' into cmake/SPEC-7179
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
2021-07-16 15:42:37 -07:00

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()
{
}
}