|
|
//====== Copyright � 1996-2005, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#ifndef ATTRIBUTESLIDER_H
#define ATTRIBUTESLIDER_H
#ifdef _WIN32
#pragma once
#endif
#include "vgui_controls/EditablePanel.h"
#include "movieobjects/animsetattributevalue.h"
#include "movieobjects/dmelog.h"
#include "datamodel/dmehandle.h"
using namespace vgui;
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class CBaseAnimSetAttributeSliderPanel; class CDmElement; class CAttributeSliderTextEntry; class CSubRectImage;
//-----------------------------------------------------------------------------
// CAttributeSlider
//-----------------------------------------------------------------------------
// THIS CODE IS KIND OF A MESS WRT THE VARIOUS STATES WE CAN BE IN:
// we can be driven by the preset pane or by dragging on any individual control
// we can also be driven by ctrl hovering over the preset pane or an individual control
// if we move from control to control in the preset or here, we need to be able to decay into/out of the various individual sliders
class CAttributeSlider : public EditablePanel { DECLARE_CLASS_SIMPLE( CAttributeSlider, EditablePanel );
// Overridden methods of EditablePanel
public: virtual void Paint(); virtual void PaintBackground(); virtual void ApplySchemeSettings( IScheme *scheme ); virtual void PerformLayout(); virtual void OnCursorMoved(int x, int y); virtual void OnMousePressed(MouseCode code); virtual void OnMouseDoublePressed(MouseCode code); virtual void OnMouseReleased(MouseCode code); virtual void OnCursorEntered(); virtual void OnCursorExited(); virtual void OnKeyCodeTyped( KeyCode code );
// Other public methods
public: CAttributeSlider( CBaseAnimSetAttributeSliderPanel *parent ); virtual ~CAttributeSlider();
void Init( CDmElement *control, bool bOrientation );
// Things that rely on a specific type
void SetValue( AnimationControlType_t type, float flValue ); void SetValue( AnimationControlType_t type, const Vector &vec ); void SetValue( AnimationControlType_t type, const Quaternion &quat ); float GetValue( AnimationControlType_t type ) const; void GetValue( AnimationControlType_t type, Vector &vec ) const; void GetValue( AnimationControlType_t type, Quaternion &quat ) const;
float GetPreview( AnimationControlType_t type ) const; void GetPreview( AnimationControlType_t type, Vector &vec ) const; void GetPreview( AnimationControlType_t type, Quaternion &quat ) const;
// Estimates the value of the control given a local coordinate
float EstimateValueAtPos( int nLocalX, int nLocalY ) const;
// Returns the control we're modifying
CDmElement *GetControl(); const CDmElement *GetControl() const;
// sets internal state to dme control's value
void InitControls();
// Gets/sets the slider value.
// NOTE: This may not match the value pushed into the control because of fading
void SetValue( const AttributeValue_t& value ); const AttributeValue_t& GetValue() const;
// Is this slider manipulating a transform control?
// [NOTE: This is a utility method; the control contains these states]
bool IsTransform() const; bool IsOrientation() const; bool IsStereo() const;
// Are we dragging?
bool IsDragging() const;
// Are we in text entry mode?
bool IsInTextEntry() const;
void SetPreview( const AttributeValue_t &value, const AttributeValue_t &full ); const AttributeValue_t &GetPreview() const; const AttributeValue_t &GetPreviewFull() const;
void UpdateFaderAmount( float amount );
void SetVisibleComponents( LogComponents_t componentFlags ); LogComponents_t VisibleComponents() const;
// Slider dependency functions, provide information about which other sliders on which the function of this slider depends
void ClearDependencies(); bool AddDependency( const CAttributeSlider* pSlider ); bool IsDependent( const CAttributeSlider* pSlider ) const; void SetDependent( bool dependent );
MESSAGE_FUNC( OnSetToDefault, "SetToDefault" ); MESSAGE_FUNC( OnEditMinMaxDefault, "EditMinMaxDefault" ); MESSAGE_FUNC_PARAMS( OnInputCompleted, "InputCompleted", params );
protected:
KEYBINDING_FUNC( ts_curve_1, KEY_1, 0, OnCurve1, "#ts_curve1_help", 0 ); KEYBINDING_FUNC( ts_curve_2, KEY_2, 0, OnCurve2, "#ts_curve2_help", 0 ); KEYBINDING_FUNC( ts_curve_3, KEY_3, 0, OnCurve3, "#ts_curve3_help", 0 ); KEYBINDING_FUNC( ts_curve_4, KEY_4, 0, OnCurve4, "#ts_curve4_help", 0 );
private: // Various slider modes
enum SliderMode_t { SLIDER_MODE_NONE, SLIDER_MODE_TEXT, SLIDER_MODE_DRAG_VALUE, // scalar, position or orientation
};
private: // Things that rely on type
// Called by the text entry code to enter the value into the logs
void StampValueIntoLogs( AnimationControlType_t type, float flValue ); void StampValueIntoLogs( AnimationControlType_t type, const Vector &vecValue ); void StampValueIntoLogs( AnimationControlType_t type, const Quaternion &qValue ); void DrawValueLabel(); // Other stuff
void ActivateControl( AnimationControlType_t type, bool bActive );
// Returns the location of a particular control
void GetControlRect( Rect_t *pRect ) const;
// Methods related to rendering
void DrawMidpoint( int x, int ty, int ttall ); void DrawTick( const Color& clr, const AttributeValue_t &value, int width, int inset ); void DrawNameLabel(); void PaintSliderBackGround();
float GetPreviewAlphaScale() const;
// Methods related to text entry mode
void EnterTextEntryMode( bool bRelatchValues ); void AcceptTextEntryValue(); void DiscardTextEntryValue(); void SetupTextFieldForTextEntryMode( CAttributeSliderTextEntry *&pTextField, const char *pText, bool bRequestFocus );
void SetToDefault();
private: CBaseAnimSetAttributeSliderPanel *m_pParent; TextImage *m_pName; TextImage *m_pValues[ 4 ];
// This is the control we're modifying
CDmeHandle< CDmElement > m_hControl;
// The current mode of the slider
SliderMode_t m_SliderMode;
// The slider value; it may not match the control attribute value due to blending
AttributeValue_t m_Control;
// Info used when in text entry mode
AttributeValue_t m_InitialTextEntryValue; CAttributeSliderTextEntry *m_pTextField; // if this is a stereo control, then this will be the left text field
CAttributeSliderTextEntry *m_pRightTextField;
AttributeValue_t m_PreviewCurrent; AttributeValue_t m_PreviewFull; float m_flFaderAmount;
// Fields used to help with drag
int m_nDragStartPosition[2]; // Where was the mouse clicked?
int m_nAccum[2]; // What's the total mouse movement during the drag?
AttributeValue_t m_dragStartValues; // What was the value of the slider before the drag started?
LogComponents_t m_nVisibleComponents; // Flags used to specify specific components that are visible
bool m_bTransform : 1; bool m_bOrientation : 1; bool m_bStereo : 1; bool m_bDependent : 1;
CUtlVector< const CAttributeSlider* > m_Dependenices; // List of sliders that the operation of this slider depends on
vgui::DHANDLE< vgui::Menu > m_hContextMenu;
friend class CAttributeSliderTextEntry; };
/*
class CAttributeSliderData { // CDmeHandle< CDmElement > m_hControl;
int m_nIndex; // its index, the control's index, and the slider's index
AttributeValue_t m_Control; AttributeValue_t m_InitialTextEntryValue; AttributeValue_t m_dragStartValues; AttributeValue_t m_PreviewCurrent; AttributeValue_t m_PreviewFull;
AttributeValue_t m_CurrentValue; AttributeValue_t m_SavedValue; AttributeValue_t m_FullPresetValue;
float m_flFaderAmount; unsigned int m_nVisibleComponents; CUtlVector< const CAttributeSliderData* > m_Dependenices; }; */
//-----------------------------------------------------------------------------
// Inline methods
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Returns the control
//-----------------------------------------------------------------------------
inline CDmElement *CAttributeSlider::GetControl() { return m_hControl; }
inline const CDmElement *CAttributeSlider::GetControl() const { return m_hControl; }
//-----------------------------------------------------------------------------
// Returns information about the control
//-----------------------------------------------------------------------------
inline bool CAttributeSlider::IsTransform() const { return m_bTransform; }
inline bool CAttributeSlider::IsOrientation() const { return m_bOrientation; }
inline bool CAttributeSlider::IsStereo() const { return m_bStereo; }
//-----------------------------------------------------------------------------
// Are we dragging?
//-----------------------------------------------------------------------------
inline bool CAttributeSlider::IsDragging() const { return m_SliderMode == SLIDER_MODE_DRAG_VALUE; }
//-----------------------------------------------------------------------------
// Are we in text entry mode?
//-----------------------------------------------------------------------------
inline bool CAttributeSlider::IsInTextEntry() const { return m_SliderMode == SLIDER_MODE_TEXT; }
#endif // ATTRIBUTESLIDER_H
|