/*=========================================================================*/
/* CPADLLls.hpp :	interface of the CPA_DLLList class and to the*/
/**/
/* This is a part of the CPA project.*/
/**/
/* Version			1.0*/
/* Creation date	10/06/96*/
/* Revision date*/
/**/
/* (c) Ubi Studio 1996*/
/**/
/* DO NOT MODIFY THAT FILE. IF SOMETHING NEEDS TO BE CHANGE, PLEASE CONTACT*/
/* VINCENT GRECO OR CHRISTOPHE BEAUDET.*/
/*=========================================================================*/
 
#ifndef __CPADLLLS_HPP__
#define __CPADLLLS_HPP__
 
#ifdef ACTIVE_EDITOR
 
/****************************************/
#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
/****************************************/
 
#include "geo.h"
#include "gli.h"
#include <afxtempl.h>
#include "CPADllb.hpp"
#include "DEVMulti.hpp"
 
/*=========================================================================*/
/* The list of all editors*/
/*=========================================================================*/
class CPA_EXPORT CPA_DLLList
{
 
 
private:
 
	/* structure for loading DLL*/
	typedef struct
	{
		CString			csPath;
		WIN32_FIND_DATA *p_stFileInfo;
		BOOL			bAlreadyLoaded;
	} tdstDLLFiles;
 
 
	CList<tdstDLLIdentity*,tdstDLLIdentity*> m_oListOfDLLIdentities;
	CList<DEV_MultiDevice*,DEV_MultiDevice*> m_oListOfMultiDevices;
 
 
	unsigned short	m_uwCurrentRef;
	long	m_lObjectDLLCount;
	long	m_lToolDLLCount;
 
	void LoadAllDLLsFromList(CList<tdstDLLFiles*,tdstDLLFiles*> *p_oListOfDLLFiles);
 
public:
	CPA_DLLList();
	~CPA_DLLList();
 
	long GetDLLCount() {return (m_lObjectDLLCount + m_lToolDLLCount); }
	void LoadAllDLL();
	void DestroyADLL(CPA_DLLBase *p_oDLL);
 
	void AddADLL(tdstDLLIdentity *p_stDLLIdentity);
	CPA_DLLBase *GetANewDLL(tdeDLLType eType,CString csName, long lKey);
	long GetAllNewDLL(tdeDLLType eType,CPA_DLLBase *ap_oDLL[], long lKey);
 
public:
	tdstDLLIdentity *GetAllreadyRegisteredDLLId(tdstDLLIdentity *p_stDLLIdentity);
 
	void CallRefreshDatas();
 
	BOOL CallAcceptToRunEngine();
	BOOL CallAcceptToExit();
	void CallBeforeEngine();
	void CallBeforeEditor();
	void CallJustBeforeClosing();
	void CallConstruct();
	void CallJustAfterRegistered();
	BOOL CallPreTranslateMessage(MSG *p_stMsg);
 
 
 
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/* Objects DLL specific functions*/
public:
	long GetObjectDLLCount() {return m_lObjectDLLCount; }
 
 
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/* Tools DLL specific functions*/
public:
	long GetToolDLLCount() {return m_lToolDLLCount; }
 
 
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/* MultiDevice specific functions*/
public:
 
	long GetMultiDeviceCount() {return m_oListOfMultiDevices.GetCount();}
	void RegisterNewMultiDevice(DEV_MultiDevice* p_oMultiDevice);
	void RemoveAMultiDevice(DEV_MultiDevice *p_oMD);
 
};
 
/*///////////////////////////////////////////////////////////////////////////*/
 
#endif /* ACTIVE_EDITOR*/
#endif /* __CPADLLLS_HPP__*/
