//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #ifndef BASEANIMATIONSETEDITOR_H #define BASEANIMATIONSETEDITOR_H #ifdef _WIN32 #pragma once #endif #include "vgui_controls/EditablePanel.h" #include "vgui_controls/ImageList.h" #include "datamodel/dmehandle.h" #include "vgui/KeyCode.h" #include "dme_controls//AnimSetAttributeValue.h" #include "dme_controls/RecordingState.h" #include "tier1/utlvector.h" #include "movieobjects/dmelog.h" #include "vgui_controls/fileopenstatemachine.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- struct LogPreview_t; class CDmeAnimationSet; class CDmeAnimationList; class CDmeChannelsClip; class CDmeChannel; class CBaseAnimSetControlGroupPanel; class CBaseAnimSetPresetFaderPanel; class CBaseAnimSetAttributeSliderPanel; class CDmeGameModel; //----------------------------------------------------------------------------- // Base class for the panel for editing animation sets //----------------------------------------------------------------------------- class CBaseAnimationSetEditor : public vgui::EditablePanel, public vgui::IFileOpenStateMachineClient { DECLARE_CLASS_SIMPLE( CBaseAnimationSetEditor, vgui::EditablePanel ); public: enum EAnimSetLayout_t { LAYOUT_SPLIT = 0, LAYOUT_VERTICAL, LAYOUT_HORIZONTAL, }; CBaseAnimationSetEditor( vgui::Panel *parent, char const *panelName, bool bShowGroups ); virtual ~CBaseAnimationSetEditor(); virtual void CreateToolsSubPanels(); int BuildVisibleControlList( CUtlVector< LogPreview_t >& list ); int BuildFullControlList( CUtlVector< LogPreview_t >& list ); void RecomputePreview(); virtual void ChangeLayout( EAnimSetLayout_t newLayout ); CBaseAnimSetControlGroupPanel *GetControlGroup(); CBaseAnimSetPresetFaderPanel *GetPresetFader(); CBaseAnimSetAttributeSliderPanel *GetAttributeSlider(); void ChangeAnimationSet( CDmeAnimationSet *newAnimSet ); virtual void SetRecordingState( RecordingState_t state, bool updateSettings ); RecordingState_t GetRecordingState() const; CDmeAnimationSet *GetAnimationSet(); // Inherited from IFileOpenStateMachineClient public: virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pFileFormat, KeyValues *pContextKeyValues ); virtual bool OnReadFileFromDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ); virtual bool OnWriteFileToDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ); protected: virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void PerformLayout(); virtual void OnDataChanged(); MESSAGE_FUNC_PARAMS( OnOpenContextMenu, "OpenContextMenu", params ); MESSAGE_FUNC_INT( OnChangeLayout, "OnChangeLayout", value ); MESSAGE_FUNC( OnTextChanged, "TextChanged" ); MESSAGE_FUNC_PARAMS( OnButtonToggled, "ButtonToggled", params ); MESSAGE_FUNC_PARAMS( OnFileSelected, "FileSelected", params ); MESSAGE_FUNC_PARAMS( OnImportConfirmed, "ImportConfirmed", params ); MESSAGE_FUNC_PARAMS( OnImportAnimation, "ImportAnimation", params ); MESSAGE_FUNC( OnExportFacialAnimation, "ExportFacialAnimation" ); MESSAGE_FUNC_PARAMS( OnImportAnimationSelected, "DmeSelected", params ); MESSAGE_FUNC_PARAMS( OnImportAnimationCancelled, "DmeSelectionCancelled", params ); // Selects an animation to import void SelectImportAnimation( CDmeAnimationList *pAnimationList, bool bVisibleOnly ); // Imports a specific channels clip into the animation set void ImportAnimation( CDmeChannelsClip *pChannelsClip, bool bVisibleOnly ); // Finds a channel in the animation set to overwrite with import data CDmeChannel* FindImportChannel( CDmeChannel *pChannel, CDmeChannelsClip *pChannelsClip ); // Transforms an imported channel, if necessary void TransformImportedChannel( CDmeChannel *pChannel ); // Transforms an imported position log void TransformImportedPositionLog( const matrix3x4_t& matrix, CDmeVector3Log *pPositionLog ); // Transforms an imported orientation log void TransformImportedOrientationLog( const matrix3x4_t& matrix, CDmeQuaternionLog *pOrientationLog ); // Expands channels clip time to encompass log void FixupChannelsClipTime( CDmeChannel *pChannel, CDmeLog *pLog ); void FixupChannelsClipTime( CDmeChannelsClip *pChannelsClip, CDmeLog *pLog ); // Adds a log layer to the list of logs for export void AddLogLayerForExport( CDmElement *pRoot, const char *pControlName, CDmeChannel *pChannel, DmeTime_t tExportStart, DmeTime_t tExportEnd ); // Exports animations void ExportAnimations( CDmElement *pAnimations, DmeTime_t tExportStart, DmeTime_t tExportEnd ); // Inherited classes need to implement this for export to work. virtual CDmeFilmClip *GetAnimationSetClip() { return NULL; } virtual CDmeFilmClip *GetRootClip() { return NULL; } protected: EAnimSetLayout_t m_Layout; vgui::DHANDLE< vgui::Splitter > m_Splitter; vgui::DHANDLE< CBaseAnimSetControlGroupPanel > m_hControlGroup; vgui::DHANDLE< CBaseAnimSetPresetFaderPanel > m_hPresetFader; vgui::DHANDLE< CBaseAnimSetAttributeSliderPanel > m_hAttributeSlider; vgui::DHANDLE< vgui::Menu > m_hContextMenu; vgui::DHANDLE< vgui::FileOpenStateMachine > m_hFileOpenStateMachine; vgui::ToggleButton *m_pState[ NUM_AS_RECORDING_STATES ]; vgui::ToggleButton *m_pSelectionModeType; vgui::ImageList m_Images; CDmeHandle< CDmeAnimationSet > m_AnimSet; vgui::ComboBox *m_pComboBox; RecordingState_t m_RecordingState; }; #endif // BASEANIMATIONSETEDITOR_H