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.
187 lines
4.7 KiB
187 lines
4.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
#if !defined( ANIMATIONBROWSER_H ) |
|
#define ANIMATIONBROWSER_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#define IDC_AB_TRAYSCROLL 1001 |
|
#define IDC_AB_THUMBNAIL_INCREASE 1002 |
|
#define IDC_AB_THUMBNAIL_DECREASE 1003 |
|
#define IDC_AB_CONTEXT_CREATEBITMAP 1004 |
|
#define IDC_AB_CONTEXT_CREATEALLBITMAPS 1005 |
|
#define IDC_AB_FILTERTAB 1006 |
|
|
|
#define IDC_AB_CREATE_CUSTOM 1007 |
|
|
|
#define IDC_AB_ADDTOGROUPSTART 1100 |
|
#define IDC_AB_ADDTOGROUPEND 1199 |
|
|
|
#define IDC_AB_REMOVEFROMGROUPSTART 1200 |
|
#define IDC_AB_REMOVEFROMGROUPEND 1299 |
|
|
|
#define IDC_AB_DELETEGROUPSTART 1300 |
|
#define IDC_AB_DELETEGROUPEND 1399 |
|
|
|
#define IDC_AB_RENAMEGROUPSTART 1400 |
|
#define IDC_AB_RENAMEGROUPEND 1499 |
|
|
|
#define COLOR_TRAYBACKGROUND RGB( 240, 240, 220 ) |
|
|
|
#include "faceposertoolwindow.h" |
|
#include "StudioModel.h" |
|
|
|
class CAnimBrowserTab; |
|
|
|
class CCustomAnim |
|
{ |
|
public: |
|
CCustomAnim( const FileNameHandle_t &h ) |
|
: |
|
m_bDirty( false ), |
|
m_ShortName( UTL_INVAL_SYMBOL ) |
|
{ |
|
m_Handle = h; |
|
} |
|
|
|
void LoadFromFile(); |
|
void SaveToFile(); |
|
|
|
bool HasAnimation( char const *search ); |
|
|
|
bool m_bDirty; |
|
CUtlSymbol m_ShortName; |
|
FileNameHandle_t m_Handle; |
|
CUtlVector< CUtlSymbol > m_Animations; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class AnimationBrowser : public mxWindow, public IFacePoserToolWindow |
|
{ |
|
public: |
|
enum |
|
{ |
|
FILTER_NONE = 0, |
|
FILTER_GESTURES, |
|
FILTER_POSTURES, |
|
FILTER_STRING, |
|
FILTER_FIRST_CUSTOM |
|
}; |
|
|
|
AnimationBrowser( mxWindow *parent, int id = 0 ); |
|
virtual ~AnimationBrowser ( void ); |
|
|
|
virtual void Shutdown(); |
|
|
|
virtual void redraw (); |
|
virtual bool PaintBackground( void ); |
|
|
|
virtual int handleEvent (mxEvent *event); |
|
|
|
virtual void Think( float dt ); |
|
|
|
void ThumbnailIncrease( void ); |
|
void ThumbnailDecrease( void ); |
|
void RestoreThumbnailSize( void ); |
|
|
|
void Select( int sequence ); |
|
void Deselect( void ); |
|
|
|
void SetCellSize( int cellsize ); |
|
|
|
void ReloadBitmaps( void ); |
|
virtual void OnModelChanged(); |
|
|
|
void OnAddCustomAnimationFilter(); |
|
|
|
private: // Methods |
|
|
|
void OnFilter(); |
|
bool SequencePassesFilter( StudioModel *model, int sequence, mstudioseqdesc_t &seqdesc ); |
|
|
|
int GetSequenceCount(); |
|
mstudioseqdesc_t *GetSeqDesc( int index ); |
|
int TranslateSequenceNumber( int index ); |
|
|
|
int GetCellUnderPosition( int x, int y ); |
|
|
|
bool ComputeRect( int cell, int& rcx, int& rcy, int& rcw, int& rch ); |
|
int ComputePixelsNeeded( void ); |
|
|
|
void RepositionSlider(); |
|
void SetClickedCell( int cell ); |
|
void ShowRightClickMenu( int mx, int my ); |
|
|
|
void DrawThumbNail( int sequence, CChoreoWidgetDrawHelper& helper, |
|
int rcx, int rcy, int rcw, int rch ); |
|
|
|
void DrawSequenceFocusRect( CChoreoWidgetDrawHelper& helper, int x, int y, int w, int h, COLORREF clr ); |
|
void DrawSequenceDescription( CChoreoWidgetDrawHelper& helper, int x, int y, int w, int h, int sequence, mstudioseqdesc_t &seqdesc ); |
|
|
|
void DrawFocusRect( void ); |
|
|
|
// Custom group tab stuff |
|
void FindCustomFiles( char const *subdir, CUtlVector< FileNameHandle_t >& files ); |
|
void AddCustomFile( const FileNameHandle_t& handle ); |
|
void RenameCustomFile( int index ); |
|
void DeleteCustomFile( int index ); |
|
void PurgeCustom(); |
|
void BuildCustomFromFiles( CUtlVector< FileNameHandle_t >& files ); |
|
void UpdateCustomTabs(); |
|
int FindCustomFile( char const *shortName ); |
|
void AddAnimationToCustomFile( int index, char const *animationName ); |
|
void RemoveAnimationFromCustomFile( int index, char const *animationName ); |
|
void RemoveAllAnimationsFromCustomFile( int index ); |
|
|
|
private: // Data |
|
|
|
mxScrollbar *slScrollbar; |
|
CAnimBrowserTab *m_pFilterTab; |
|
mxLineEdit *m_pSearchEntry; |
|
|
|
int m_nTopOffset; |
|
|
|
int m_nLastNumAnimations; |
|
|
|
int m_nGranularity; |
|
|
|
int m_nCurCell; |
|
int m_nClickedCell; |
|
|
|
// Formatting |
|
int m_nButtonSquare; |
|
|
|
int m_nGap; |
|
int m_nDescriptionHeight; |
|
int m_nSnapshotWidth; |
|
int m_nSnapshotHeight; |
|
|
|
bool m_bDragging; |
|
RECT m_rcFocus; |
|
RECT m_rcOrig; |
|
int m_nDragCell; |
|
int m_nXStart; |
|
int m_nYStart; |
|
|
|
mxButton *m_pThumbnailIncreaseButton; |
|
mxButton *m_pThumbnailDecreaseButton; |
|
|
|
CUtlVector< int > m_Filtered; |
|
int m_nCurFilter; |
|
char m_szSearchString[ 256 ]; |
|
|
|
float m_flDragTime; |
|
|
|
CUtlVector< CCustomAnim * > m_CustomAnimationTabs; |
|
}; |
|
|
|
extern AnimationBrowser *g_pAnimationBrowserTool; |
|
|
|
#endif // ANIMATIONBROWSER_H
|