/* * 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. * */ // Original file Copyright Crytek GMBH or its affiliates, used under license. #pragma once #include "UiAnimViewDopeSheetBase.h" #include "UiAnimViewSplineCtrl.h" #include "Animation/Controls/UiTimelineCtrl.h" #include "UiEditorAnimationBus.h" #include namespace Ui { class UiAnimViewCurveEditor; } /** CUiAnimViewGraph dialog. Placed at the same position as tracks dialog, and display spline graphs of track. */ class CUiAnimViewCurveEditor : public QWidget , public IUiAnimationContextListener , public IEditorNotifyListener , public IUiAnimViewSequenceListener , public UiEditorAnimListenerBus::Handler { friend class UiAnimViewCurveEditorDialog; public: CUiAnimViewCurveEditor(QWidget* parent); virtual ~CUiAnimViewCurveEditor(); void SetEditLock(bool bLock); void SetFPS(float fps); float GetFPS() const; void SetTickDisplayMode(EUiAVTickMode mode); CUiAnimViewSplineCtrl& GetSplineCtrl(); void ResetSplineCtrlZoomLevel(); void SetPlayCallback(const std::function& callback); // IUiAnimationContextListener virtual void OnSequenceChanged(CUiAnimViewSequence* pNewSequence); virtual void OnTimeChanged(float newTime); protected: void showEvent(QShowEvent* event) override; private: void OnSplineChange(); void OnSplineCmd(UINT cmd); void OnSplineCmdUpdateUI(); void OnTimelineChange(); void OnHorizontalScrollBarChange(); void OnVerticalScrollBarChange(); void OnSplineScrollZoom(); // IEditorNotifyListener virtual void OnEditorNotifyEvent(EEditorNotifyEvent event) override; //IUiAnimViewSequenceListener virtual void OnKeysChanged(CUiAnimViewSequence* pSequence) override; virtual void OnKeySelectionChanged(CUiAnimViewSequence* pSequence) override; virtual void OnNodeChanged(CUiAnimViewNode* pNode, ENodeChangeType type) override; virtual void OnNodeSelectionChanged(CUiAnimViewSequence* pSequence) override; virtual void OnSequenceSettingsChanged(CUiAnimViewSequence* pSequence) override; // UiEditorAnimListenerInterface void OnActiveCanvasChanged() override; // ~UiEditorAnimListenerInterface void UpdateSplines(); void UpdateTimeRange(CUiAnimViewSequence* pSequence); void AddSpline(CUiAnimViewTrack* pTrack); void ResetScrollBarRange(); TimelineWidget m_timelineCtrl; bool m_hasActiveCanvas; QScopedPointer m_ui; }; class UiAnimViewCurveEditorDialog : public QWidget , public IUiAnimViewSequenceListener , public IUiAnimationContextListener { public: UiAnimViewCurveEditorDialog(QWidget* parent); virtual ~UiAnimViewCurveEditorDialog() {} void SetPlayCallback(const std::function& callback) { m_widget->SetPlayCallback(callback); } void SetEditLock(bool bLock) { m_widget->SetEditLock(bLock); } CUiAnimViewSplineCtrl& GetSplineCtrl(){ return m_widget->GetSplineCtrl(); } void SetFPS(float fps) { m_widget->SetFPS(fps); } float GetFPS() const { return m_widget->GetFPS(); } void SetTickDisplayMode(EUiAVTickMode mode) { m_widget->SetTickDisplayMode(mode); } virtual void OnSequenceChanged(CUiAnimViewSequence* pNewSequence) { m_widget->OnSequenceChanged(pNewSequence); } virtual void OnTimeChanged(float newTime) { m_widget->OnTimeChanged(newTime); } virtual void OnKeysChanged(CUiAnimViewSequence* pSequence) override { m_widget->OnKeysChanged(pSequence); } virtual void OnKeySelectionChanged(CUiAnimViewSequence* pSequence) override { m_widget->OnKeySelectionChanged(pSequence); } virtual void OnNodeChanged(CUiAnimViewNode* pNode, ENodeChangeType type) override { m_widget->OnNodeChanged(pNode, type); } virtual void OnNodeSelectionChanged(CUiAnimViewSequence* pSequence) override { m_widget->OnNodeSelectionChanged(pSequence); } virtual void OnSequenceSettingsChanged(CUiAnimViewSequence* pSequence) override { m_widget->OnSequenceSettingsChanged(pSequence); } private: CUiAnimViewCurveEditor* m_widget; };