// CAtlClassGenerator.h
//
#if !defined (_ATLCLASSGENERATOR_H_)
#define _ATLCLASSGENERATOR_H_

#include "enums.h"
#include "AtlBaseGenerator.h"
#include "cmString.h"

class CProjectSettings;
class CXMLStorageElement;

class CAtlClassGenerator: public CAtlBaseGenerator
{
public:
	CAtlClassGenerator();
	virtual ~CAtlClassGenerator();

	virtual void Generate();
	
protected:
	// header file generators
	//
	virtual void GenerateHeader();
	virtual void Head_generateHeader();
	virtual void Head_generateIfDefBegin();
	virtual void Head_generateIncludeSection();
	virtual void Head_generateForwardDecl();
	virtual void Head_generateClassBegin();
	virtual void Head_generateConstructor();
	virtual void Head_generateDestructor();
	virtual void Head_generateUtils();
	virtual void Head_generateGetSet();
	virtual void Head_generateSerialization();
	virtual void Head_generateMembers();
	virtual void Head_generateIfDefEnd();
	virtual void Head_generateClassEnd();

	// implementation file generators
	//
	virtual void GenerateImplementation();
	virtual void Impl_generateHeader();
	virtual void Impl_generateIncludeSection();
	virtual void Impl_generateConstructor();
	virtual void Impl_generateDestructor();
	virtual void Impl_generateUtils();
	virtual void Impl_generateGetSet();
	virtual void Impl_generateSerialization();

private:
	
	cmString headCode_;
	cmString implCode_;
};

#endif //!defined (_ATLCLASSGENERATOR_H_)