summaryrefslogtreecommitdiff
path: root/movieobjects/dmeeditortypedictionary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'movieobjects/dmeeditortypedictionary.cpp')
-rw-r--r--movieobjects/dmeeditortypedictionary.cpp328
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 );
+}