#ifndef _rxclass_h
#define _rxclass_h 

class ArxClassHierarchy;
class McRxObject;

// -------------------------------------------------------------------------
// Summary:
// 		控件所有数据库实体的类型信息
// -------------------------------------------------------------------------
class  ARXDLL McRxClass
{
	friend class ArxClassHierarchy;
public:
	McRxClass();
	virtual ~McRxClass();

	// -------------------------------------------------------------------------
	// Summary:
	// 		用类型信息创建一个新对象
	// -------------------------------------------------------------------------
	virtual McRxObject* create() const;

	// -------------------------------------------------------------------------
	// Summary:
	// 		返回类名
	// -------------------------------------------------------------------------
	virtual LPCMSTR name() const;

	// -------------------------------------------------------------------------
	// Summary:
	// 		返回dxf 组码对应的类名
	// -------------------------------------------------------------------------
	virtual LPCMSTR DXF0() const;

	// -------------------------------------------------------------------------
	// Summary:
	// 		返回应用程序名
	// -------------------------------------------------------------------------
	virtual LPCMSTR App() const;

	// -------------------------------------------------------------------------
	// Summary:
	// 		返回代理实体的标志
	// -------------------------------------------------------------------------
	virtual int     ProxyFlags() const;

	// -------------------------------------------------------------------------
	// Summary:
	// 		返回版本号
	// -------------------------------------------------------------------------
	virtual int     Var() const;

	//:Ignore

	virtual McRxObject* addX(const McRxClass*, McRxObject*);

	virtual McRxObject* delX(const McRxClass*);

	virtual McRxObject* queryX(const McRxClass*);



	virtual int     FileVar() const;

	virtual bool    IsSystemEntity() const;

	virtual bool    IsSetModifyFlag() const;

	virtual short   GetFileId() const;

	virtual bool    isUpgrade() const;

	virtual McRxClass* GetParent() const;

	virtual McRxClass* GetChild() const;

	virtual McRxClass* GetSibling() const;

	virtual bool    isBackgroundEntity() const;

	virtual bool    isDynamicRegen() const;

	void setDynmainRegenType(int iType)
	{
		m_iDynmainRegenType = iType;
	}

	int getDynmainRegenType() const
	{
		return m_iDynmainRegenType;
	}

	short getEntityVersion() const
	{
		return m_iEntityVersion;
	}

	//:End Ignore
private:

	McRxClass* m_pParent;		// 他的父亲类名
	McRxClass* m_pChild;		// 他的孩子类名
	McRxClass* m_pSibling;		// 他的兄弟类名;

	MxString m_sName;	   		// 自已的类名
	MxString m_sDXF0;			// dxf 组码对应的类名.

	McRxMakeFunType m_makeFun;  // 类的创建

	int        m_iFileVer;		// 文件版本号,为了兼容ARX，的变量,暂时没有什么用.
	int        m_iVer;			// 控件的版本号,为了兼容ARX，的变量,暂时没有什么用.
	int        m_iProxyFlags;   // 代理实体的标志。 
	MxString    m_sApp;			// 应用程序名。

	bool       m_isSysEntity;	//	是否为系统实体

	bool       m_isSetModifyFlag;	// 对象被修改，是否设置数据库修改标记，并提用户保存数据库。,
	// 有些对象被修改，不需要设置修改标记，比如视表记录对象。

	short      m_iFileId;		   // 用来标识该类信息的唯一id.用于文件保存时，把这个id也一同保存，用于数据恢复时使用.，该id默认为0.

	bool       m_isUpgrade;			// 该对象的数所是否被升级过，用于文件保存时，老版程序读新图时判断是否需要数据跳转.

	bool       m_isBackgroundEntity;	// 该对象是否是一个背景实体。

	bool       m_isDynamicRegen;       // 该对象否支持在读取时，别一个线程动态regen显示.

	int        m_iDynmainRegenType;
	std::map<const McRxClass*, McRxObject*>* m_pMapX;

	short       m_iEntityVersion;		// 当前该实体类型的版本号。
};


#endif
