/*=========================================================================
* 
* SECTelem.hpp :  Definition of Editor Elements  
* 
*
* Version			1.0
* Creation date		
* Revision date
*
* Shaitan
*=======================================================================*/
#ifndef __SECT_ELEMB_HPP__
#define __SECT_ELEMB_HPP__

#include "incITF.h"
#include "incGAM.h"


//**************************************
#ifndef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
#define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
#define CPA_EXPORT __declspec(dllexport)
#else
#define CPA_EXPORT
#endif
#endif
//**************************************

class Sector_Object;
class Sector_Interface;

#define C_szSectorsLinkSubSection "SectorsLink"
//Shaitan Clean Env
//#define C_szEnvAndSurfSubSection "ENVAndSRF"


//#################################################################################
// SECTORS LINK
//#################################################################################
/*===========================================================================
	Element
===========================================================================*/
class SECT_ElementBase : public CPA_SectionObject
{
protected:
	CPA_SuperObject *m_pSector;
	Sector_Object	*m_pOwnerSector;

public:
	SECT_ElementBase (Sector_Object *pOwnerSector);
	~SECT_ElementBase() {}

	CPA_SuperObject * GetSector (void) { return m_pSector; }

	Sector_Object * GetOwnerSector (void)					{ return m_pOwnerSector; }

	// save 
	static void CallBackSaveSectorsLink	(SCR_tdst_File_Description *p_stFile, char *szSectionName, void *p_vData, SCR_tde_Ntfy_Action eAction);
};

/*===========================================================================
	List
===========================================================================*/
class SECT_ListBase
{
protected:
	Sector_Object	*m_pOwnerSector;
	long			m_lNbElements;

public:
	SECT_ListBase  (void);
	~SECT_ListBase (void) { };

	virtual BOOL fn_bAddAnElement		(SECT_ElementBase *pNewElem, BOOL bUpdateEngine = TRUE);
	virtual void fn_vRemoveAnElement	(SECT_ElementBase *pOldElem, BOOL bUpdateEngine = TRUE);
	virtual void fn_vRemoveAllElements	(BOOL bUpdateEngine);

	virtual SECT_ElementBase * GetHeadElementBase (POSITION& rPosition) { return NULL; }
	virtual SECT_ElementBase * GetNextElementBase (POSITION& rPosition) { return NULL; }

	void SetOwnerSector (Sector_Object *pOwnerSector) { m_pOwnerSector = pOwnerSector; }

	long GetNbElements (void) { return m_lNbElements; }

	SECT_ElementBase * GetElementWithSector (CPA_SuperObject *pSector);
};


//#################################################################################
// ENVIRONMENT AND SURFACE
//#################################################################################
/*===========================================================================
	Element
===========================================================================*/
/*
class SECT_EnvElementBase : public CPA_SectionObject
{
protected:
	Sector_Object	*m_pOwnerSector;

public:
	SECT_EnvElementBase (Sector_Object *pOwnerSector);
	~SECT_EnvElementBase() {}

	Sector_Object * GetOwnerSector (void)					{ return m_pOwnerSector; }

	// save 
	static void CallBackSaveEnvAndSurf	(SCR_tdst_File_Description *p_stFile, char *szSectionName, void *p_vData, SCR_tde_Ntfy_Action eAction);
};
*/

#endif //__SECT_ELEMB_HPP__
