You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
249 lines
7.5 KiB
249 lines
7.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#ifndef DMETRACKGROUP_H |
|
#define DMETRACKGROUP_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "tier1/utlflags.h" |
|
#include "datamodel/dmelement.h" |
|
#include "datamodel/dmattribute.h" |
|
#include "datamodel/dmattributevar.h" |
|
#include "datamodel/dmehandle.h" |
|
#include "movieobjects/timeutils.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
class CDmeClip; |
|
class CDmeFilmClip; |
|
class CDmeTrack; |
|
enum DmeClipType_t; |
|
enum DmeClipSkipFlag_t; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Default track group name |
|
//----------------------------------------------------------------------------- |
|
#define DMETRACKGROUP_DEFAULT_NAME "default" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// A track group |
|
//----------------------------------------------------------------------------- |
|
class CDmeTrackGroup : public CDmElement |
|
{ |
|
DEFINE_ELEMENT( CDmeTrackGroup, CDmElement ); |
|
|
|
public: |
|
// Max track count |
|
void SetMaxTrackCount( int nCount ); |
|
|
|
// Owning clip |
|
CDmeClip *GetOwnerClip(); |
|
void SetOwnerClip( CDmeClip *pClip ); |
|
|
|
// track helper methods |
|
void AddTrack( CDmeTrack *track ); |
|
CDmeTrack* AddTrack( const char *pTrackName, DmeClipType_t trackType ); |
|
CDmeTrack* FindOrAddTrack( const char *pTrackName, DmeClipType_t trackType ); |
|
void RemoveTrack( CDmeTrack *track ); |
|
void RemoveTrack( const char *pTrackName ); |
|
void RemoveTrack( int nIndex ); |
|
const CUtlVector< DmElementHandle_t > &GetTracks( ) const; |
|
int GetTrackCount( ) const; |
|
CDmeTrack *GetTrack( int nIndex ) const; |
|
CDmeTrack *FindTrack( const char *pTrackName ) const; |
|
int GetTrackIndex( CDmeTrack *pTrack ) const; |
|
|
|
// Clip helper methods |
|
// AddClip/ChangeTrack returns non-NULL if it was successfully added |
|
CDmeTrack *AddClip( CDmeClip *pClip, const char *pTrackName ); |
|
bool RemoveClip( CDmeClip *pClip ); |
|
CDmeTrack *ChangeTrack( CDmeClip *pClip, const char *pNewTrack ); |
|
CDmeTrack *FindTrackForClip( CDmeClip *pClip ) const; |
|
|
|
bool FindTrackForClip( CDmeClip *pClip, int *pTrackIndex, int *pClipIndex = NULL ) const; |
|
|
|
// Finding clips at a particular time |
|
void FindClipsAtTime( DmeClipType_t clipType, DmeTime_t time, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const; |
|
void FindClipsIntersectingTime( DmeClipType_t clipType, DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const; |
|
void FindClipsWithinTime( DmeClipType_t clipType, DmeTime_t startTime, DmeTime_t endTime, DmeClipSkipFlag_t flags, CUtlVector< CDmeClip * >& clips ) const; |
|
|
|
// Are we a film track group? |
|
bool IsFilmTrackGroup(); |
|
|
|
// Gets the film track (if this is a film track group) |
|
CDmeTrack *GetFilmTrack(); |
|
|
|
// Is a particular clip typed able to be added? |
|
bool IsSubClipTypeAllowed( DmeClipType_t type ); |
|
|
|
// Is this track group visible? |
|
void SetVisible( bool bVisible ); |
|
bool IsVisible() const; |
|
|
|
// Is this track group minimized? |
|
void SetMinimized( bool bLocked ); |
|
bool IsMinimized() const; |
|
|
|
// Track group display size |
|
void SetDisplaySize( int nDisplaySize ); |
|
int GetDisplaySize() const; |
|
|
|
// Creates the film track group [for internal use only] |
|
CDmeTrack *CreateFilmTrack(); |
|
|
|
// Sort tracks by track type, then alphabetically |
|
void SortTracksByType(); |
|
|
|
// Removes empty tracks |
|
void RemoveEmptyTracks(); |
|
|
|
// Muting track groups |
|
void SetMute( bool state ); |
|
bool IsMute( ) const; |
|
|
|
// Volume for track group |
|
void SetVolume( float state ); |
|
float GetVolume() const; |
|
|
|
|
|
// Returns the flattened clip count |
|
int GetSubClipCount() const; |
|
void GetSubClips( CDmeClip **ppClips ); |
|
|
|
private: |
|
CDmaElementArray< CDmeTrack > m_Tracks; |
|
CDmaVar<bool> m_bIsVisible; |
|
CDmaVar<bool> m_bMinimized; |
|
CDmaVar< bool > m_bMute; |
|
CDmaVar< float > m_Volume; |
|
CDmaVar<int> m_nDisplaySize; |
|
|
|
DmElementHandle_t m_hOwner; |
|
int m_nMaxTrackCount; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Inline methods |
|
//----------------------------------------------------------------------------- |
|
inline int CDmeTrackGroup::GetTrackCount( ) const |
|
{ |
|
return m_Tracks.Count(); |
|
} |
|
|
|
inline CDmeTrack *CDmeTrackGroup::GetTrack( int nIndex ) const |
|
{ |
|
return m_Tracks[nIndex]; |
|
} |
|
|
|
inline const CUtlVector< DmElementHandle_t > &CDmeTrackGroup::GetTracks( ) const |
|
{ |
|
return m_Tracks.Get(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Is this track group visible? |
|
//----------------------------------------------------------------------------- |
|
inline void CDmeTrackGroup::SetVisible( bool bVisible ) |
|
{ |
|
m_bIsVisible = bVisible; |
|
} |
|
|
|
inline bool CDmeTrackGroup::IsVisible() const |
|
{ |
|
return m_bIsVisible; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Is this track group minimized? |
|
//----------------------------------------------------------------------------- |
|
inline void CDmeTrackGroup::SetMinimized( bool bMinimized ) |
|
{ |
|
m_bMinimized = bMinimized; |
|
} |
|
|
|
inline bool CDmeTrackGroup::IsMinimized() const |
|
{ |
|
return m_bMinimized; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Track group display size |
|
//----------------------------------------------------------------------------- |
|
inline void CDmeTrackGroup::SetDisplaySize( int nDisplaySize ) |
|
{ |
|
m_nDisplaySize = nDisplaySize; |
|
} |
|
|
|
inline int CDmeTrackGroup::GetDisplaySize() const |
|
{ |
|
return m_nDisplaySize; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Iterator macro |
|
//----------------------------------------------------------------------------- |
|
#define DMETRACKGROUP_FOREACH_CLIP_START( _dmeTrackGroup, _dmeTrack, _dmeClip ) \ |
|
{ \ |
|
int _tc = (_dmeTrackGroup)->GetTrackCount(); \ |
|
for ( int _i = 0; _i < _tc; ++_i ) \ |
|
{ \ |
|
CDmeTrack *_dmeTrack = (_dmeTrackGroup)->GetTrack( _i ); \ |
|
if ( !_dmeTrack ) \ |
|
continue; \ |
|
\ |
|
int _cc = _dmeTrack->GetClipCount(); \ |
|
for ( int _j = 0; _j < _cc; ++_j ) \ |
|
{ \ |
|
CDmeClip *_dmeClip = _dmeTrack->GetClip( _j ); \ |
|
if ( !_dmeClip ) \ |
|
continue; |
|
|
|
#define DMETRACKGROUP_FOREACH_CLIP_END( ) \ |
|
} \ |
|
} \ |
|
} |
|
|
|
#define DMETRACKGROUP_FOREACH_CLIP_TYPE_START( _clipType, _dmeTrackGroup, _dmeTrack, _dmeClip ) \ |
|
{ \ |
|
int _tc = (_dmeTrackGroup)->GetTrackCount(); \ |
|
for ( int _i = 0; _i < _tc; ++_i ) \ |
|
{ \ |
|
CDmeTrack *_dmeTrack = (_dmeTrackGroup)->GetTrack( _i ); \ |
|
if ( !_dmeTrack ) \ |
|
continue; \ |
|
\ |
|
if ( _dmeTrack->GetClipType() != CDmeClipInfo< _clipType >::ClipType() ) \ |
|
continue; \ |
|
\ |
|
int _cc = _dmeTrack->GetClipCount(); \ |
|
for ( int _j = 0; _j < _cc; ++_j ) \ |
|
{ \ |
|
_clipType *_dmeClip = static_cast< _clipType* >( _dmeTrack->GetClip( _j ) ); \ |
|
if ( !_dmeClip ) \ |
|
continue; |
|
|
|
#define DMETRACKGROUP_FOREACH_CLIP_TYPE_END( ) \ |
|
} \ |
|
} \ |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// helper methods |
|
//----------------------------------------------------------------------------- |
|
CDmeFilmClip *GetParentClip( CDmeTrackGroup *pTrackGroup ); |
|
|
|
#endif // DMETRACKGROUP_H
|
|
|