//////////////////////////////////////////////////////////////////////
//
// Автор - Артур Аюханов aka artbear
//
//////////////////////////////////////////////////////////////////////

#if !defined(METHODSWRAPPER__INCLUDED_)
	#define METHODSWRAPPER__INCLUDED_

#if _MSC_VER > 1000
	#pragma once
#endif // _MSC_VER > 1000

// Класс для отработки перехвата.
class COldMethodsWrapper
{
	static struct paramdefs {
		char * rusName;
		char * engName;
		bool HasFSO;
		int ParamsNum;
	}  glFnNames[];

public:
	COldMethodsWrapper();

private:
	int  WrapFindFunc(char const * fName)const;
	int  WrapFindProc(char const * pName,int flag)const;
	int  WrapCallAsFunc(int num,class CValue & retValue,int argNum,class CValue * * ppValue);
	int  WrapCallAsProc(int num,int argNum,class CValue * * ppValue);

	int  WrapGetProcInfo(int nProc, class CBLProcInfo & cProcInfo)const;
	int  WrapGetNParams(void)const;

	int FindFunction(char const * lpFnName)const;

public:
	static void RestoreAll(void);

private:
	static CBLModule7* pGlobalModuleFormEx;

};

// // выполнить по очереди обработчик события из всех имеющихся глобальных модулей
// //BOOL _CallFromGlobalModules(CGroupContext *pCont, CBLModule *pMod, const char* nameProc0, const char* nameProc1, int argNum, CValue** vArray, bool bCallSysProc = false);
// BOOL _CallFromGlobalModules(CGroupContext *pCont, CBLModule *, const char* nameProc0, const char* nameProc1, int argNum, CValue** vArray, bool bCallSysProc = false);
// 
// // выполнить обработчик события
// void _CallModuleProc(class CGetDoc7* pDoc, const char* nameProc0,const  char* nameProc1, int argNum, CValue** vArray, BOOL bCallGlobal = TRUE);
// 
// // выполнить обработчик для события по цепочке
// // если есть обработчик события в активной форме, будет выполнен только он, а далее обработчики из глобальных модулей
// // если нет активной формы или в ней нет обработчика события, будут выполнены только обработчики из глобального модуля
// void CallModuleProc(const char* nameProc0, const  char* nameProc1, int argNum, CValue** vArray);

// класс, совместимый со старым кодом ФормЕкс по событиям
class CEventsManager_OldSimpleFormEx
{
public:
// 	// выполнить по очереди обработчик события из всех имеющихся глобальных модулей
// 	//BOOL RunEventHandlerFromGlobalModules(CGroupContext *pCont, CBLModule *pMod, const char* nameProc0, const char* nameProc1, int argNum, CValue** vArray, bool bCallSysProc = false);
// 	BOOL RunEventHandlerFromGlobalModules(CGroupContext *pCont, const char* nameProc0, const char* nameProc1, int argNum, CValue** vArray, bool bCallSysProc = false);
// 
// 	// выполнить обработчик события
// 	void RunEventHandler(class CGetDoc7* pDoc, const char* nameProc0,const  char* nameProc1, int argNum, CValue** vArray, BOOL bCallGlobal = TRUE);
// 
// 	// выполнить обработчик для события по цепочке
// 	// если есть обработчик события в активной форме, будет выполнен только он, а далее обработчики из глобальных модулей
// 	// если нет обработчика в форме, будут выполнены только обработчики из глобального модуля
// 	void RunOneEventHandlerForActiveForm(const char* nameProc0, const  char* nameProc1, int argNum, CValue** vArray);
private:
	//int GetProcNumFromModule(CBLModule *pMod, const char* nameProc0, const char* nameProc1, int& type, int& numarg);
};

#endif // METHODSWRAPPER__INCLUDED_
