123
This commit is contained in:
233
Editor/TrackViewKeys.h
Normal file
233
Editor/TrackViewKeys.h
Normal file
@@ -0,0 +1,233 @@
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Crytek Engine Source File.
|
||||
// Copyright (C), Crytek Studios, 2002.
|
||||
// -------------------------------------------------------------------------
|
||||
// File name: TrackViewKeys.h
|
||||
// Version: v1.00
|
||||
// Created: 23/8/2002 by Timur.
|
||||
// Compilers: Visual Studio.NET
|
||||
// Description:
|
||||
// -------------------------------------------------------------------------
|
||||
// History:
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __trackviewkeys_h__
|
||||
#define __trackviewkeys_h__
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
class CTVTrackPropsDialog;
|
||||
|
||||
// CTrackViewKeys
|
||||
|
||||
struct IAnimTrack;
|
||||
struct IAnimNode;
|
||||
|
||||
enum ETVActionMode
|
||||
{
|
||||
TVMODE_MOVEKEY = 1,
|
||||
TVMODE_ADDKEY,
|
||||
TVMODE_SLIDEKEY,
|
||||
TVMODE_SCALEKEY,
|
||||
};
|
||||
|
||||
/** Base class for TrackView key editing dialogs.
|
||||
*/
|
||||
class CTrackViewKeys : public CWnd
|
||||
{
|
||||
DECLARE_DYNAMIC(CTrackViewKeys)
|
||||
public:
|
||||
struct Item
|
||||
{
|
||||
IAnimTrack *track;
|
||||
IAnimNode *node;
|
||||
int paramId;
|
||||
Item() { track = 0; node = 0; paramId = 0; }
|
||||
Item( IAnimNode *pNode,int nParamId,IAnimTrack *pTrack )
|
||||
{
|
||||
track = pTrack; paramId = nParamId; node = pNode;
|
||||
}
|
||||
};
|
||||
|
||||
CTrackViewKeys();
|
||||
virtual ~CTrackViewKeys();
|
||||
|
||||
void SetTimeScale( float timeScale );
|
||||
float GetTimeScale() { return m_timeScale; }
|
||||
|
||||
void SetTimeRange( float start,float end );
|
||||
void SetCurrTime( float time );
|
||||
void SetStartMarker(float fTime);
|
||||
void SetEndMarker(float fTime);
|
||||
|
||||
void DelSelectedKeys();
|
||||
void SetMouseActionMode( ETVActionMode mode );
|
||||
|
||||
bool CanCopyPasteKeys();
|
||||
bool CopyPasteKeys();
|
||||
|
||||
void SetTrackDialog( CTVTrackPropsDialog *dlg ) { m_wndTrack = dlg; };
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Tracks access.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
int GetCount() const { return m_tracks.size(); }
|
||||
void AddItem( const Item &item );
|
||||
const Item& GetItem( int item );
|
||||
IAnimTrack* GetTrack( int item );
|
||||
int GetCurSel() { return m_selected; };
|
||||
int GetHorizontalExtent() { return m_itemWidth; };
|
||||
|
||||
virtual void SetHorizontalExtent( int min,int max );
|
||||
virtual int ItemFromPoint( CPoint pnt );
|
||||
virtual int GetItemRect( int item,CRect &rect );
|
||||
virtual void ResetContent() { m_tracks.clear(); }
|
||||
virtual void SetCurSel( int sel );
|
||||
|
||||
protected:
|
||||
DECLARE_MESSAGE_MAP()
|
||||
|
||||
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
||||
afx_msg void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
|
||||
afx_msg void MeasureItem(LPMEASUREITEMSTRUCT /*lpMeasureItemStruct*/);
|
||||
afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
|
||||
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
|
||||
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||||
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
||||
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||||
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
|
||||
afx_msg void OnPaint();
|
||||
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
||||
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||||
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Drawing methods.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
virtual void DrawControl( CDC *dc,const CRect &rcUpdate );
|
||||
virtual void DrawTrack( int item,CDC *dc,CRect &rcItem );
|
||||
virtual void DrawTicks( CDC *dc,CRect &rc,Range &timeRange );
|
||||
virtual void DrawTimeline( CDC *dc,const CRect &rcUpdate );
|
||||
virtual void DrawKeys( IAnimTrack *track,CDC *dc,CRect &rc,Range &timeRange );
|
||||
virtual void RedrawItem( int item );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Must be overriden.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Find a key near this point.
|
||||
virtual int KeyFromPoint( CPoint point );
|
||||
//! Select keys inside this client rectangle.
|
||||
virtual void SelectKeys( const CRect &rc );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Return time snapped to timestep,
|
||||
float SnapTime( float time );
|
||||
|
||||
//! Returns visible time range.
|
||||
Range GetVisibleRange();
|
||||
Range GetTimeRange( CRect &rc );
|
||||
|
||||
//! Return client position for givven time.
|
||||
int TimeToClient( float time );
|
||||
|
||||
float TimeFromPoint( CPoint point );
|
||||
float TimeFromPointUnsnapped( CPoint point );
|
||||
|
||||
//! Unselect all selected keys.
|
||||
void UnselectAllKeys();
|
||||
//! Offset all selected keys by this offset.
|
||||
void OffsetSelectedKeys( float timeOffset,bool bSlide,bool bSnapKeys );
|
||||
//! Scale all selected keys by this offset.
|
||||
void ScaleSelectedKeys( float timeOffset,bool bSnapKeys );
|
||||
void CloneSelectedKeys();
|
||||
|
||||
bool FindSingleSelectedKey( IAnimTrack* &track,int &key );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void SetKeyInfo( IAnimTrack *track,int key,bool openWindow=false );
|
||||
|
||||
void UpdateAnimation();
|
||||
void SetLeftOffset( int ofs ) { m_leftOffset = ofs; };
|
||||
|
||||
void SetMouseCursor( HCURSOR crs );
|
||||
|
||||
void RecordTrackUndo( const Item &item );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// FIELDS.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
IAnimTrack *m_track;
|
||||
IAnimNode *m_node;
|
||||
int m_paramId;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CBrush m_bkgrBrush;
|
||||
CBrush m_bkgrBrushEmpty;
|
||||
CBrush m_selectedBrush;
|
||||
CBrush m_timeBkgBrush;
|
||||
CBrush m_timeHighlightBrush;
|
||||
CBrush m_visibilityBrush;
|
||||
|
||||
HCURSOR m_currCursor;
|
||||
HCURSOR m_crsLeftRight;
|
||||
HCURSOR m_crsAddKey;
|
||||
|
||||
CRect m_rcClient;
|
||||
CPoint m_scrollOffset;
|
||||
CRect m_rcSelect;
|
||||
CRect m_rcTimeline;
|
||||
|
||||
CPoint m_mouseDownPos;
|
||||
CImageList m_imageList;
|
||||
CImageList m_imgMarker;
|
||||
|
||||
CBitmap m_offscreenBitmap;
|
||||
|
||||
bool m_bZoomDrag;
|
||||
bool m_bMoveDrag;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Time.
|
||||
float m_timeScale;
|
||||
float m_currentTime;
|
||||
Range m_timeRange;
|
||||
Range m_realTimeRange;
|
||||
Range m_timeMarked;
|
||||
|
||||
//! This is how often to place ticks.
|
||||
//! value of 10 means place ticks every 10 second.
|
||||
int m_ticksStep;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
int m_mouseMode;
|
||||
int m_mouseActionMode;
|
||||
int m_actionMode;
|
||||
bool m_bAnySelected;
|
||||
float m_keyTimeOffset;
|
||||
|
||||
CTVTrackPropsDialog *m_wndTrack;
|
||||
|
||||
CFont *m_descriptionFont;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Track list related.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
std::vector<Item> m_tracks;
|
||||
int m_itemWidth;
|
||||
int m_itemHeight;
|
||||
// Current selected item.
|
||||
int m_selected;
|
||||
|
||||
int m_leftOffset;
|
||||
int m_scrollMin,m_scrollMax;
|
||||
};
|
||||
|
||||
#endif // __trackviewkeys_h__
|
||||
Reference in New Issue
Block a user