#include "stdafx.h"
#include "MainFunctions.h"
#include "aplNetStepData.h"
#include "aplStepManager.h"
#include "MainDialog.h"

//************************************************************************
//	Функция, которая возвращает список пунктов меню, добавляемых данной dll.
//	Должна быть явно указана в .def файле проекта.
__declspec(dllexport) bool GetFunctionsList(CArray<CaplItemInfo*, CaplItemInfo*> *strArray)
{
	for(int i= 0; i<functionArraySize; i++)
	{
		strArray->Add(&functionArray[i]);
	}
	return true;
}

//************************************************************************
//	Функция, которая будет вызвана при выборе пункта меню.
//
//	Первый параметр		-	переменная класса базы данных. С её помощью будет проводиться
//	вся работа с базой.
//
//	Второй параметр		-	массив экземпляров объектов, выделенных в дереве объектов
//	модуля PDM. Если ожидается, что выделен будет только один объект - используйте
//	нулевой элемент массива.
//
//	Третий параметр		-	флаг, который показывает с какой целью была вызвана функция.
//	Цели могут быть две - собственно работа (значение - false) и обновление интерфейса 
//	(значение - true). Если функция вызвана с целью обновления интерфейса, она должна 
//	 с помощью возвращаемого значения показать доступна ли функция для данного объекта или
//	нет. Если функция доступна, она должна вернуть true, если нет - false и тогда пункт в 
//	меню будет запрещён.
__declspec (dllexport) bool add_CalcWeightAndCost(CaplAPI* api, aplExtent& inExtent, bool bUpdateUI)
{
	BOOL bOtherKind=FALSE;
	BOOL bPartsExists=TRUE;
	BOOL bRetVal=TRUE;

	aplExtent aeRel;
	aplExtent aePdf;

	//	Проверяем, подключены ли к базе. Если нет - выходим.
	if(!api || !api->m_data.IsConnected())
		return false;
	// Выясняем цель вызова.
	if(!bUpdateUI)
	{
		//	Если вызваны для работы - подготавливаем ресурсы. Вызовами функций SetResources()
		//	и ResetResources() необходимо обрамлять каждое использование ресурсов в dll.
		//	Например, такое как вызов диалогового окна.
		SetResources();
		//	Создаём переменную класса диалога. Присваиваем специальным его членам указатели
		//	на переменную класса базы данных и на экземпляр объекта, с которым будет 
		//	производиться работа.
		CMainDialog dlg;
		dlg.m_api=api;
		if(inExtent.GetSize()>0)
			dlg.m_inst=inExtent.GetAt(0);

		dlg.DoModal();
		ResetResources();
	}
	else
	{
		//	Если вызваны для обновления интерфейса, проверяем, разрешать ли работу для 
		//	данного объекта или нет.
		//	Проверяем тип объекта. Если объект - не версия изделия - он нам не подходит
		if(!api->m_data.IsKindOf(inExtent.GetAt(0),api->m_prd_mgr.e_pdf))
			return false;
	}

	return true;
}





//************************************************************************
void SetResources()
{
	if(afxCurrentResourceHandle!=0) 
		_hProcessInstance = AfxGetResourceHandle();
	AfxSetResourceHandle(_hDllInstance);	
}

void ResetResources()
{
	if(_hProcessInstance!=0)
	{
		AfxSetResourceHandle(_hProcessInstance);	
		_hProcessInstance= 0;
	}
}
//************************************************************************
