diff options
Diffstat (limited to 'public/dme_controls/BaseAnimationSetEditor.h')
| -rw-r--r-- | public/dme_controls/BaseAnimationSetEditor.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/public/dme_controls/BaseAnimationSetEditor.h b/public/dme_controls/BaseAnimationSetEditor.h new file mode 100644 index 0000000..9133c00 --- /dev/null +++ b/public/dme_controls/BaseAnimationSetEditor.h @@ -0,0 +1,151 @@ +//========= 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 |