diff options
Diffstat (limited to 'vgui2/dme_controls/AttributeInterpolatorChoicePanel.cpp')
| -rw-r--r-- | vgui2/dme_controls/AttributeInterpolatorChoicePanel.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/vgui2/dme_controls/AttributeInterpolatorChoicePanel.cpp b/vgui2/dme_controls/AttributeInterpolatorChoicePanel.cpp new file mode 100644 index 0000000..71e455f --- /dev/null +++ b/vgui2/dme_controls/AttributeInterpolatorChoicePanel.cpp @@ -0,0 +1,91 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// + +#include "dme_controls/AttributeInterpolatorChoicePanel.h" +#include "tier1/KeyValues.h" +#include "vgui_controls/ComboBox.h" +#include "datamodel/dmelement.h" +#include "movieobjects/dmeeditortypedictionary.h" +#include "datamodel/dmelementfactoryhelper.h" +#include "dme_controls/inotifyui.h" +#include "interpolatortypes.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + + +using namespace vgui; + +//----------------------------------------------------------------------------- +// +// Constructor +// +//----------------------------------------------------------------------------- +CAttributeInterpolatorChoicePanel::CAttributeInterpolatorChoicePanel( vgui::Panel *parent, const AttributeWidgetInfo_t &info ) : + BaseClass( parent, info ) +{ +} + + +//----------------------------------------------------------------------------- +// Derived classes can re-implement this to fill the combo box however they like +//----------------------------------------------------------------------------- +void CAttributeInterpolatorChoicePanel::PopulateComboBoxes( vgui::ComboBox *pComboBox[ 2 ] ) +{ + pComboBox[ 0 ]->DeleteAllItems(); + pComboBox[ 1 ]->DeleteAllItems(); + + // Fill in the choices + int c = NUM_INTERPOLATE_TYPES; + for ( int i = 0; i < c; ++i ) + { + KeyValues *kv = new KeyValues( "entry" ); + kv->SetInt( "value", i ); + pComboBox[ 0 ]->AddItem( Interpolator_NameForInterpolator( i, true ) , kv ); + + kv = new KeyValues( "entry" ); + kv->SetInt( "value", i ); + pComboBox[ 1 ]->AddItem( Interpolator_NameForInterpolator( i, true ) , kv ); + } +} + + +//----------------------------------------------------------------------------- +// Sets the attribute based on the combo box +//----------------------------------------------------------------------------- +void CAttributeInterpolatorChoicePanel::SetAttributeFromComboBoxes( vgui::ComboBox *pComboBox[ 2 ], KeyValues *pKeyValues[ 2 ] ) +{ + int nOldValue = GetAttributeValue<int>(); + int nValueLeft = pKeyValues[ 0 ]->GetInt( "value", 0 ); + int nValueRight= pKeyValues[ 1 ]->GetInt( "value" , 0 ); + + int nValue = MAKE_CURVE_TYPE( nValueLeft, nValueRight ); + + // No change + if ( nOldValue == nValue ) + return; + + CElementTreeUndoScopeGuard guard( NOTIFY_SETDIRTYFLAG, GetNotify(), "Set Attribute Value", "Set Attribute Value" ); + SetAttributeValue( nValue ); +} + + +//----------------------------------------------------------------------------- +// Sets the combo box from the attribute +//----------------------------------------------------------------------------- +void CAttributeInterpolatorChoicePanel::SetComboBoxesFromAttribute( vgui::ComboBox *pComboBox[ 2 ] ) +{ + int nValue = GetAttributeValue<int>(); + + // Decompose + int leftPart = GET_LEFT_CURVE( nValue ); + int rightPart = GET_RIGHT_CURVE( nValue ); + + pComboBox[ 0 ]->SetText( Interpolator_NameForInterpolator( leftPart, true ) ); + pComboBox[ 1 ]->SetText( Interpolator_NameForInterpolator( rightPart, true ) ); +} |