You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
3.2 KiB
155 lines
3.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef SCRIPTOBJECT_H |
|
#define SCRIPTOBJECT_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include <vgui_controls/Panel.h> |
|
|
|
class CPanelListPanel; |
|
|
|
#define SCRIPT_VERSION 1.0f |
|
|
|
typedef void * FileHandle_t; |
|
|
|
enum objtype_t |
|
{ |
|
O_BADTYPE, |
|
O_BOOL, |
|
O_NUMBER, |
|
O_LIST, |
|
O_STRING, |
|
O_OBSOLETE, |
|
O_SLIDER, |
|
O_CATEGORY, |
|
}; |
|
|
|
typedef struct |
|
{ |
|
objtype_t type; |
|
char szDescription[32]; |
|
} objtypedesc_t; |
|
|
|
class CScriptListItem |
|
{ |
|
public: |
|
CScriptListItem(); |
|
CScriptListItem( char const *strItem, char const *strValue ); |
|
|
|
char szItemText[128]; |
|
char szValue[256]; |
|
|
|
CScriptListItem *pNext; |
|
}; |
|
|
|
class CScriptObject : public vgui::Panel |
|
{ |
|
public: |
|
void AddItem( CScriptListItem *pItem ); |
|
void RemoveAndDeleteAllItems( void ); |
|
CScriptObject( void ); |
|
~CScriptObject(); |
|
|
|
bool ReadFromBuffer( const char **pBuffer, bool isNewObject ); |
|
void WriteToConfig(); |
|
void WriteToFile( FileHandle_t fp ); |
|
void WriteToScriptFile( FileHandle_t fp ); |
|
void SetCurValue( char const *strValue ); |
|
|
|
objtype_t GetType( char *pszType ); |
|
|
|
objtype_t type; |
|
|
|
char cvarname[64 ]; |
|
char prompt[ 256 ]; |
|
char tooltip[ 256 ]; |
|
|
|
CScriptListItem *pListItems; |
|
|
|
float fMin, fMax; |
|
|
|
char defValue[ 128 ]; // Default value string |
|
float fdefValue; // Float version of default value. |
|
|
|
char curValue[ 128 ]; |
|
float fcurValue; |
|
|
|
bool bSetInfo; // Prepend "Setinfo" to keyvalue pair in config? |
|
// Linked list of default list box items. |
|
|
|
CScriptObject *pNext; |
|
}; |
|
|
|
abstract_class CDescription |
|
{ |
|
public: |
|
CDescription( void ); |
|
virtual ~CDescription(); |
|
|
|
bool ReadFromBuffer( const char **pBuffer, bool bAllowNewObject ); |
|
bool InitFromFile( const char *pszFileName, bool bAllowNewObject = true ); |
|
void TransferCurrentValues( const char *pszConfigFile ); |
|
|
|
void AddObject( CScriptObject *pItem ); |
|
void WriteToConfig(); |
|
void WriteToFile( FileHandle_t fp ); |
|
void WriteToScriptFile( FileHandle_t fp ); |
|
|
|
virtual void WriteScriptHeader( FileHandle_t fp ) = 0; // Clients must implement this. |
|
virtual void WriteFileHeader( FileHandle_t fp ) = 0; // Clients must implement this. |
|
|
|
void setDescription( const char *pszDesc ); |
|
void setHint( const char *pszHint ); |
|
|
|
const char *GetDescription( void ) { return m_pszDescriptionType; }; |
|
const char *getHint( void ) { return m_pszHintText; } ; |
|
public: |
|
CScriptObject *pObjList; |
|
CScriptObject *FindObject( const char *pszObjectName ); |
|
|
|
private: |
|
|
|
char *m_pszHintText; |
|
char *m_pszDescriptionType; |
|
}; |
|
|
|
namespace vgui |
|
{ |
|
class Label; |
|
class Panel; |
|
} |
|
|
|
class mpcontrol_t : public vgui::Panel |
|
{ |
|
public: |
|
mpcontrol_t( vgui::Panel *parent, char const *panelName ); |
|
|
|
virtual void OnSizeChanged( int wide, int tall ) OVERRIDE; |
|
|
|
objtype_t type; |
|
vgui::Panel *pControl; |
|
vgui::Label *pPrompt; |
|
CScriptObject *pScrObj; |
|
|
|
mpcontrol_t *next; |
|
}; |
|
|
|
class CInfoDescription : public CDescription |
|
{ |
|
public: |
|
CInfoDescription( void ); |
|
|
|
virtual void WriteScriptHeader( FileHandle_t fp ) OVERRIDE; |
|
virtual void WriteFileHeader( FileHandle_t fp ) OVERRIDE; |
|
}; |
|
|
|
void UTIL_StripInvalidCharacters( char *pszInput, int maxlen ); |
|
|
|
#endif // SCRIPTOBJECT_H
|
|
|