hl2_src-leak-2017/src/public/movieobjects/dmeeditortypedictionary.h

133 lines
4.2 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Contains a bunch of information about editor types
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef DMEEDITORTYPEDICTIONARY_H
#define DMEEDITORTYPEDICTIONARY_H
#ifdef _WIN32
#pragma once
#endif
#include "datamodel/dmelement.h"
#include "datamodel/dmattribute.h"
#include "datamodel/dmattributevar.h"
//-----------------------------------------------------------------------------
// Contains all attributes related to a particular attribute on a particular editor type
//-----------------------------------------------------------------------------
class CDmeEditorAttributeInfo : public CDmElement
{
DEFINE_ELEMENT( CDmeEditorAttributeInfo, CDmElement );
public:
// Returns the attribute name this info is associated with
const char *GetAttributeName() const;
// Returns the widget name to create
const char *GetWidgetName() const;
// Sets the info for an entry in an attribute array
void SetArrayInfo( CDmeEditorAttributeInfo *pInfo );
// Returns the info for a entry in an attribute array, if this attribute is an array type
CDmeEditorAttributeInfo *GetArrayInfo();
// NOTE: The name field of the widget element is the widget type
// The attributes of the widget element are data for the widget to initialize
CDmaString m_Widget;
CDmaVar< bool > m_bIsVisible;
CDmaVar< bool > m_bIsReadOnly;
CDmaVar< bool > m_bHideType;
CDmaVar< bool > m_bHideValue;
CDmaString m_Help;
private:
// If this attribute is an array attribute, how do we edit the array entries?
CDmaElement< CDmeEditorAttributeInfo > m_ArrayEntries;
};
//-----------------------------------------------------------------------------
// Base class for configuration for choices
//-----------------------------------------------------------------------------
class CDmeEditorChoicesInfo : public CDmeEditorAttributeInfo
{
DEFINE_ELEMENT( CDmeEditorChoicesInfo, CDmeEditorAttributeInfo );
public:
void SetChoiceType( const char *pChoiceType );
// Gets the choices
int GetChoiceCount() const;
const char *GetChoiceString( int nIndex ) const;
const char *GetChoiceType() const;
bool HasChoiceType() const;
protected:
CDmElement *CreateChoice( const char *pChoiceString );
CDmaElementArray< CDmElement > m_Choices;
CDmaString m_ChoiceType;
};
//-----------------------------------------------------------------------------
// A single editor type
//-----------------------------------------------------------------------------
class CDmeEditorType : public CDmElement
{
DEFINE_ELEMENT( CDmeEditorType, CDmElement );
public:
// Adds a editor type to be associated with a particular attribute
void AddAttributeInfo( const char *pAttributeName, CDmeEditorAttributeInfo *pInfo );
// Removes a editor type associated with a particular attribute
void RemoveAttributeInfo( const char *pAttributeName );
// Returns the editor info associated with an editor type
CDmeEditorAttributeInfo *GetAttributeInfo( const char *pAttributeName );
// Returns the editor info associated with a single entry in an attribute array
CDmeEditorAttributeInfo *GetAttributeArrayInfo( const char *pAttributeName );
private:
// Computes the actual attribute name stored in the type
const char *GetActualAttributeName( const char *pAttributeName );
};
//-----------------------------------------------------------------------------
// A dictionary of all editor types
//-----------------------------------------------------------------------------
class CDmeEditorTypeDictionary : public CDmElement
{
DEFINE_ELEMENT( CDmeEditorTypeDictionary, CDmElement );
public:
void AddEditorTypesFromFile( const char *pFileName, const char *pPathID );
void AddEditorType( CDmeEditorType *pEditorType );
// Returns the editor info associated with an editor type
CDmeEditorAttributeInfo *GetAttributeInfo( CDmElement *pElement, const char *pAttributeName );
// Returns the editor info associated with a single entry in an attribute array
CDmeEditorAttributeInfo *GetAttributeArrayInfo( CDmElement *pElement, const char *pAttributeName );
private:
// Returns the editor type to use with an element
CDmeEditorType *GetEditorType( CDmElement *pElement );
};
#endif // DMEEDITORTYPEDICTIONARY_H