#ifndef UICOMPONENT_H
#define UICOMPONENT_H

#include "textrep/TRDescription.h"
#include "VGUI_Panel.h"
class CSchemeManager;

using namespace vgui;

// Maintains the text representation of a component.  This is a base class that other UI components will be extended
// from.  It can read and write a description of the component, building the VGUI component in the process.  At any time
// it can be bound to the Half-life engine or removed from it.
class UIComponent 
{
public:
	UIComponent(void);

	// Destructor automatically removes component from the engine
	virtual ~UIComponent(void);

	bool			        AllocateAndSetProperties(const TRDescription& inDescription, CSchemeManager* inSchemeManager);

	virtual Panel*			GetComponentPointer(void) = 0;

	// Used to save component back out again
	TRDescription&	        GetDescription(void);

	const TRDescription&	GetDescription(void) const;

	const string&			GetName(void) const;

	virtual const string&	GetType(void) const = 0;

	virtual bool			SetClassProperties(const TRDescription& inDescription, Panel* inComponent, CSchemeManager* inSchemeManager);

	void					SetName(const string& inName);

    virtual void            Update(float theCurrentTime);

protected:
	string					mName;

	string					mType;

	TRDescription			mDescription;

private:

	virtual void AllocateComponent(const TRDescription& inDescription) = 0;


};

#endif