source-engine/utils/hlfaceposer/AnimationBrowser.h

187 lines
4.7 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= 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