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/TrackView/TrackViewCurveEditor.h

129 lines
4.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
*
*/
#ifndef CRYINCLUDE_EDITOR_TRACKVIEW_TRACKVIEWCURVEEDITOR_H
#define CRYINCLUDE_EDITOR_TRACKVIEW_TRACKVIEWCURVEEDITOR_H
#pragma once
#include "TrackViewDopeSheetBase.h"
#include "TrackViewSplineCtrl.h"
#include "Controls/TimelineCtrl.h"
#include "TrackViewTimeline.h"
#include <QWidget>
namespace Ui
{
class TrackViewCurveEditor;
}
/** CTrackViewGraph dialog.
Placed at the same position as tracks dialog, and display spline graphs of track.
*/
class CTrackViewCurveEditor
: public QWidget
, public IAnimationContextListener
, public IEditorNotifyListener
, public ITrackViewSequenceListener
{
friend class TrackViewCurveEditorDialog;
public:
CTrackViewCurveEditor(QWidget* parent);
virtual ~CTrackViewCurveEditor();
void SetEditLock(bool bLock);
void SetFPS(float fps);
float GetFPS() const;
void SetTickDisplayMode(ETVTickMode mode);
CTrackViewSplineCtrl& GetSplineCtrl();
void ResetSplineCtrlZoomLevel();
void SetPlayCallback(const std::function<void()>& callback);
// IAnimationContextListener
virtual void OnSequenceChanged(CTrackViewSequence* pNewSequence);
virtual void OnTimeChanged(float newTime);
protected:
void showEvent(QShowEvent* event) override;
private:
void OnSplineChange();
void OnSplineCmd(UINT cmd);
void OnSplineCmdUpdateUI();
void OnTimelineChange();
void OnSplineTimeMarkerChange();
// IEditorNotifyListener
virtual void OnEditorNotifyEvent(EEditorNotifyEvent event) override;
//ITrackViewSequenceListener
void OnKeysChanged(CTrackViewSequence* pSequence) override;
void OnKeyAdded(CTrackViewKeyHandle& addedKeyHandle) override;
void OnKeySelectionChanged(CTrackViewSequence* pSequence) override;
void OnNodeChanged(CTrackViewNode* pNode, ENodeChangeType type) override;
void OnNodeSelectionChanged(CTrackViewSequence* pSequence) override;
void OnSequenceSettingsChanged(CTrackViewSequence* pSequence) override;
//~ITrackViewSequenceListener
void UpdateSplines();
void UpdateTimeRange(CTrackViewSequence* pSequence);
void AddSpline(CTrackViewTrack* pTrack);
TrackView::CTrackViewTimelineWidget m_timelineCtrl;
bool m_bIgnoreSelfEvents;
bool m_bLevelClosing;
QScopedPointer<Ui::TrackViewCurveEditor> m_ui;
};
class TrackViewCurveEditorDialog
: public QWidget
, public ITrackViewSequenceListener
, public IAnimationContextListener
{
public:
TrackViewCurveEditorDialog(QWidget* parent);
virtual ~TrackViewCurveEditorDialog() {}
void SetPlayCallback(const std::function<void()>& callback) { m_widget->SetPlayCallback(callback); }
void SetEditLock(bool bLock) { m_widget->SetEditLock(bLock); }
CTrackViewSplineCtrl& GetSplineCtrl(){ return m_widget->GetSplineCtrl(); }
void SetFPS(float fps) { m_widget->SetFPS(fps); }
float GetFPS() const { return m_widget->GetFPS(); }
void SetTickDisplayMode(ETVTickMode mode) { m_widget->SetTickDisplayMode(mode); }
virtual void OnSequenceChanged(CTrackViewSequence* pNewSequence) { m_widget->OnSequenceChanged(pNewSequence); }
virtual void OnTimeChanged(float newTime) { m_widget->OnTimeChanged(newTime); }
// ITrackViewSequenceListener delegation to m_widget
void OnKeysChanged(CTrackViewSequence* pSequence) override { m_widget->OnKeysChanged(pSequence); }
void OnKeyAdded(CTrackViewKeyHandle& addedKeyHandle) override { m_widget->OnKeyAdded(addedKeyHandle); }
void OnKeySelectionChanged(CTrackViewSequence* pSequence) override { m_widget->OnKeySelectionChanged(pSequence); }
void OnNodeChanged(CTrackViewNode* pNode, ENodeChangeType type) override { m_widget->OnNodeChanged(pNode, type); }
void OnNodeSelectionChanged(CTrackViewSequence* pSequence) override { m_widget->OnNodeSelectionChanged(pSequence); }
void OnSequenceSettingsChanged(CTrackViewSequence* pSequence) override { m_widget->OnSequenceSettingsChanged(pSequence); }
//~ITrackViewSequenceListener
private:
CTrackViewCurveEditor* m_widget;
};
#endif // CRYINCLUDE_EDITOR_TRACKVIEW_TRACKVIEWCURVEEDITOR_H