diff options
Diffstat (limited to 'movieobjects/dmeeditortypedictionary.cpp')
| -rw-r--r-- | movieobjects/dmeeditortypedictionary.cpp | 328 |
1 files changed, 328 insertions, 0 deletions
diff --git a/movieobjects/dmeeditortypedictionary.cpp b/movieobjects/dmeeditortypedictionary.cpp new file mode 100644 index 0000000..f4efc00 --- /dev/null +++ b/movieobjects/dmeeditortypedictionary.cpp @@ -0,0 +1,328 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Contains a bunch of information about editor types +// Editor types are arbitrary +// +// $NoKeywords: $ +// +//=============================================================================// + +#include "movieobjects/dmeeditortypedictionary.h" +#include "datamodel/dmelementfactoryhelper.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + + +//----------------------------------------------------------------------------- +// Expose DmeEditorAttributeInfo to the scene database +//----------------------------------------------------------------------------- +IMPLEMENT_ELEMENT_FACTORY( DmeEditorAttributeInfo, CDmeEditorAttributeInfo ); + + +//----------------------------------------------------------------------------- +// Constructor, destructor +//----------------------------------------------------------------------------- +void CDmeEditorAttributeInfo::OnConstruction() +{ + m_Widget.Init( this, "widget" ); + m_bIsVisible.Init( this, "isVisible" ); + m_bIsReadOnly.Init( this, "isReadOnly" ); + m_ArrayEntries.Init( this, "arrayEntries" ); + m_bHideType.Init( this, "hideType" ); + m_bHideValue.Init( this, "hideValue" ); + m_Help.Init( this, "help" ); + + m_bIsVisible = true; + m_bIsReadOnly = false; +} + +void CDmeEditorAttributeInfo::OnDestruction() +{ +} + + +//----------------------------------------------------------------------------- +// Returns the attribute name this info is associated with +//----------------------------------------------------------------------------- +const char *CDmeEditorAttributeInfo::GetAttributeName() const +{ + return GetName(); +} + + +//----------------------------------------------------------------------------- +// Returns the widget name +//----------------------------------------------------------------------------- +const char *CDmeEditorAttributeInfo::GetWidgetName() const +{ + return m_Widget.Get(); +} + + +//----------------------------------------------------------------------------- +// Returns the info for a entry in an attribute array, if this attribute is an array type +//----------------------------------------------------------------------------- +CDmeEditorAttributeInfo *CDmeEditorAttributeInfo::GetArrayInfo() +{ + return m_ArrayEntries; +} + + +//----------------------------------------------------------------------------- +// Sets the info for an entry in an attribute array +//----------------------------------------------------------------------------- +void CDmeEditorAttributeInfo::SetArrayInfo( CDmeEditorAttributeInfo *pInfo ) +{ + m_ArrayEntries = pInfo; +} + + +//----------------------------------------------------------------------------- +// +// CDmeEditorChoicesInfo, Base class for configuration for choices +// +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// Expose DmeEditorChoicesInfo to the scene database +//----------------------------------------------------------------------------- +IMPLEMENT_ELEMENT_FACTORY( DmeEditorChoicesInfo, CDmeEditorChoicesInfo ); + + +//----------------------------------------------------------------------------- +// Constructor, destructor +//----------------------------------------------------------------------------- +void CDmeEditorChoicesInfo::OnConstruction() +{ + m_Choices.Init( this, "choices" ); + m_ChoiceType.Init( this, "choicetype" ); +} + +void CDmeEditorChoicesInfo::OnDestruction() +{ +} + + +//----------------------------------------------------------------------------- +// Sets/gets choice type +//----------------------------------------------------------------------------- +void CDmeEditorChoicesInfo::SetChoiceType( const char *pChoiceType ) +{ + m_ChoiceType = pChoiceType; +} + +const char *CDmeEditorChoicesInfo::GetChoiceType() const +{ + return m_ChoiceType; +} + +bool CDmeEditorChoicesInfo::HasChoiceType() const +{ + return m_ChoiceType.Length() > 0; +} + + +//----------------------------------------------------------------------------- +// Gets the choices +//----------------------------------------------------------------------------- +int CDmeEditorChoicesInfo::GetChoiceCount() const +{ + return m_Choices.Count(); +} + +CDmElement *CDmeEditorChoicesInfo::CreateChoice( const char *pChoiceString ) +{ + CDmElement *pChoice = CreateElement< CDmElement >( "", GetFileId() ); + m_Choices.AddToTail( pChoice ); + pChoice->SetValue<CUtlString>( "string", pChoiceString ); + return pChoice; +} + +const char *CDmeEditorChoicesInfo::GetChoiceString( int nIndex ) const +{ + Assert( ( nIndex < GetChoiceCount() ) && ( nIndex >= 0 ) ); + CDmElement *pChoice = m_Choices[nIndex]; + if ( !pChoice ) + return ""; + + return pChoice->GetValueString( "string" ); +} + + +//----------------------------------------------------------------------------- +// Expose DmeEditorType class to the scene database +//----------------------------------------------------------------------------- +IMPLEMENT_ELEMENT_FACTORY( DmeEditorType, CDmeEditorType ); + + +//----------------------------------------------------------------------------- +// Constructor, destructor +//----------------------------------------------------------------------------- +void CDmeEditorType::OnConstruction() +{ +} + +void CDmeEditorType::OnDestruction() +{ +} + + +//----------------------------------------------------------------------------- +// Computes the actual attribute name stored in the type +//----------------------------------------------------------------------------- +const char *CDmeEditorType::GetActualAttributeName( const char *pAttributeName ) +{ + // Fixup the names of the attribute info for the 3 standard fields (name, type, id) + if ( !V_stricmp( "name", pAttributeName ) ) + return "__name"; + + if ( !V_stricmp( "id", pAttributeName ) ) + return "__id"; + + if ( !V_stricmp( "type", pAttributeName ) ) + return "__type"; + + return pAttributeName; +} + + +//----------------------------------------------------------------------------- +// Returns the editor info associated with an editor type +//----------------------------------------------------------------------------- +void CDmeEditorType::AddAttributeInfo( const char *pAttributeName, CDmeEditorAttributeInfo *pInfo ) +{ + pAttributeName = GetActualAttributeName( pAttributeName ); + SetValue( pAttributeName, pInfo ); +} + + +//----------------------------------------------------------------------------- +// Removes a editor type associated with a particular attribute +//----------------------------------------------------------------------------- +void CDmeEditorType::RemoveAttributeInfo( const char *pAttributeName ) +{ + pAttributeName = GetActualAttributeName( pAttributeName ); + if ( HasAttribute( pAttributeName ) ) + { + RemoveAttribute( pAttributeName ); + } +} + + +//----------------------------------------------------------------------------- +// Returns the editor info associated with an editor type +//----------------------------------------------------------------------------- +CDmeEditorAttributeInfo *CDmeEditorType::GetAttributeInfo( const char *pAttributeName ) +{ + pAttributeName = GetActualAttributeName( pAttributeName ); + if ( !HasAttribute( pAttributeName ) ) + return NULL; + + return GetValueElement< CDmeEditorAttributeInfo >( pAttributeName ); +} + + +//----------------------------------------------------------------------------- +// Returns the editor info associated with a single entry in an attribute array +//----------------------------------------------------------------------------- +CDmeEditorAttributeInfo *CDmeEditorType::GetAttributeArrayInfo( const char *pAttributeName ) +{ + CDmeEditorAttributeInfo *pAttributeInfo = GetAttributeInfo( pAttributeName ); + if ( !pAttributeInfo ) + return NULL; + + return pAttributeInfo->GetArrayInfo(); +} + + +//----------------------------------------------------------------------------- +// Expose DmeEditorTypeDictionary class to the scene database +//----------------------------------------------------------------------------- +IMPLEMENT_ELEMENT_FACTORY( DmeEditorTypeDictionary, CDmeEditorTypeDictionary ); + + +//----------------------------------------------------------------------------- +// Constructor, destructor +//----------------------------------------------------------------------------- +void CDmeEditorTypeDictionary::OnConstruction() +{ +} + +void CDmeEditorTypeDictionary::OnDestruction() +{ +} + + +//----------------------------------------------------------------------------- +// Constructor, destructor +//----------------------------------------------------------------------------- +void CDmeEditorTypeDictionary::AddEditorType( CDmeEditorType *pEditorType ) +{ + const char *pEditorTypeName = pEditorType->GetName(); + if ( HasAttribute( pEditorTypeName ) ) + { + Warning( "Editor type %s is already defined! Ignoring...\n", pEditorTypeName ); + return; + } + + SetValue( pEditorTypeName, pEditorType->GetHandle() ); +} + +void CDmeEditorTypeDictionary::AddEditorTypesFromFile( const char *pFileName, const char *pPathID ) +{ +} + + +//----------------------------------------------------------------------------- +// Returns the editor type to use with an element +//----------------------------------------------------------------------------- +CDmeEditorType *CDmeEditorTypeDictionary::GetEditorType( CDmElement *pElement ) +{ + if ( !pElement ) + return NULL; + + const char *pEditorTypeName = NULL; + if ( pElement->HasAttribute( "editorType" ) ) + { + pEditorTypeName = pElement->GetValueString( "editorType" ); + } + + if ( !pEditorTypeName || !pEditorTypeName[0] ) + { + // Try to use the type name as an editor + pEditorTypeName = pElement->GetTypeString(); + } + + if ( !pEditorTypeName || !pEditorTypeName[0] ) + return NULL; + + if ( !HasAttribute( pEditorTypeName ) ) + return NULL; + + return GetValueElement< CDmeEditorType >( pEditorTypeName ); +} + + +//----------------------------------------------------------------------------- +// Returns the editor info associated with an editor type +//----------------------------------------------------------------------------- +CDmeEditorAttributeInfo *CDmeEditorTypeDictionary::GetAttributeInfo( CDmElement *pElement, const char *pAttributeName ) +{ + CDmeEditorType *pEditorType = GetEditorType( pElement ); + if ( !pEditorType ) + return NULL; + return pEditorType->GetAttributeInfo( pAttributeName ); +} + + +//----------------------------------------------------------------------------- +// Returns the editor info associated with an editor type +//----------------------------------------------------------------------------- +CDmeEditorAttributeInfo *CDmeEditorTypeDictionary::GetAttributeArrayInfo( CDmElement *pElement, const char *pAttributeName ) +{ + CDmeEditorType *pEditorType = GetEditorType( pElement ); + if ( !pEditorType ) + return NULL; + return pEditorType->GetAttributeArrayInfo( pAttributeName ); +} |