#include "afxtempl.h"


#ifndef APL_PSSAPP_NOAUTOLIB
#ifdef _DEBUG
#ifdef UNICODE
#pragma comment (lib,"aplPSSApp_ud.lib")
#else
#pragma comment (lib,"aplPSSAppD.lib")
#endif
#else
#ifdef UNICODE
#pragma comment (lib,"aplPSSApp_u.lib")
#else
#pragma comment (lib,"aplPSSApp.lib")
#endif
#endif
#endif


#ifndef _APL_ADD_IN_SOURCE1_COMMON_CLASSES_H_
#define _APL_ADD_IN_SOURCE1_COMMON_CLASSES_H_

enum aplAddInItemType{aplPopUp=0};
enum aplAddInViewType{aplTab=0, aplDocbar= 1};

// Комманды возвращаемые плагинами
#define aplPluginCommandNo 0
#define aplPluginCommandOpenInNewWindow 1 
/*
Типы параметров функции:
0: __declspec (dllexport) bool YourFunction(CaplAPI* api, aplExtent& ext, bool check);
// В разработке

1: __declspec (dllexport) bool YourFunction(CaplAPI* api, aplExtent& ext, bool check, aplExtent &out_ext, int &out_command);
- out_ext : возвращаемый массив объектов
- out_command : возвращаемая комманда (см. define выше)
*/
//Клас с для хранения информации
class AFX_CLASS_EXPORT CaplItemInfo
{
public:
	
	aplAddInItemType m_type;		
	CString m_treeItemType;		//Тип элемента дерева PSM (например, Product, Folder...)
	CString m_menuName;			//"[позиция]имя пункта меню"
	CString m_functionName;		//Имя функции, которая вызывается при вызове пункта меню
	int m_image;				//Иконка для пункта меню
	int m_funcParamType;		//Тип параметров функции (см. выше)
	CString m_description;		//Описание пункта меню

public:
	CaplItemInfo(aplAddInItemType type= aplPopUp, LPCTSTR treeType= 0, 
		LPCTSTR menuName= 0, LPCTSTR funcName= 0, 
		int image= 0, int funcParamType= 0, LPCTSTR descr= 0);

	CaplItemInfo(const CaplItemInfo &item);

	~CaplItemInfo() {};
};

#define APL_UPDATE_DOC 3
#define APL_UPDATE_INST_ITEM 2
#define APL_UPDATE_TREE_ITEM 1

#define APL_PDF_ITEM 				0x00000001
#define APL_PRD_ITEM 				0x00000002
#define APL_CHARACT_ITEM			0x00000004
#define APL_FOLDER_ITEM				0x00000008
#define APL_CATEG_ITEM 				0x00000010
#define APL_DOC_ITEM				0x00000020
#define APL_CATEG_REVISION_ITEM		0x00000040
#define APL_BP_ITEM					0x00000080
#define APL_BP_REVISION_ITEM		0x00000100
#define APL_ORG_ITEM				0x00000200
#define APL_PERSON_ITEM				0x00000400
#define APL_DOC_REVISION_ITEM		0x00000800
#define APL_ACTIVITY_ITEM			0x00001000
#define APL_TASK_ITEM				0x00002000
#define APL_PROCESS_TMPL_ITEM		0x00004000
#define APL_PROCESS					0x00008000
#define APL_PROJECT					0x00010000
#define APL_MESSAGE					0x00020000
#define APL_MESSAGE_FOLDER			0x00040000
#define APL_PRD_INST_ITEM			0x00080000
#define APL_BP_INST_ITEM			0x00100000
#define APL_LOT_ITEM				0x00200000
#define APL_VIEWTYPE_TAB			0x01000000
#define APL_VIEWTYPE_DOCBAR			0x02000000
#define APL_CLASSIFIER_SYS_ITEM		0x04000000
#define APL_CLASSIFIER_LEVEL_ITEM	0x08000000
#define APL_REFUSAL_ITEM			0x10000000


#define APL_TREE_ITEM_FOLDER			_T("Folder")
#define APL_TREE_ITEM_MESSAGEFOLDER		_T("MessageFolder")
#define APL_TREE_ITEM_MESSAGE			_T("Message")
#define APL_TREE_ITEM_CATEGORIES		_T("Categories")
#define APL_TREE_ITEM_PRODUCT			_T("Product")
#define APL_TREE_ITEM_DOCUMENT			_T("Document")
#define APL_TREE_ITEM_LOT				_T("Lot")
#define APL_TREE_ITEM_PRDINST			_T("PrdInst")
#define APL_TREE_ITEM_CHARACTERISTIC	_T("Characteristic")
#define APL_TREE_ITEM_CHARACTERISTICGROUP	_T("CharacteristicGroup")
#define APL_TREE_ITEM_BP				_T("BP")
#define APL_TREE_ITEM_BPINST			_T("BPInst")
#define APL_TREE_ITEM_BPRES				_T("BPRes")
#define APL_TREE_ITEM_APPROVAL			_T("Approval")
#define APL_TREE_ITEM_PROJECT			_T("Project")
#define APL_TREE_ITEM_ACTIVITY			_T("Activity")
#define APL_TREE_ITEM_TASK				_T("Task")
#define APL_TREE_ITEM_PROCESSTMPL		_T("ProcessTmpl")
#define APL_TREE_ITEM_PROCESS			_T("Process")
#define APL_TREE_ITEM_PROJECT			_T("Project")
#define APL_TREE_ITEM_CHANGE			_T("Change")
#define APL_TREE_ITEM_ORGANIZATION		_T("Organization")
#define APL_TREE_ITEM_PERSON			_T("Person")
#define APL_TREE_ITEM_OFFICIAL			_T("Official")
#define APL_TREE_ITEM_QUERY				_T("Query")
#define APL_TREE_ITEM_FIND				_T("Find")
#define APL_TREE_ITEM_QUERY_NIIAO		_T("Query_niiao")
#define APL_TREE_ITEM_COMBINED_TABLE	_T("Combined_table")
#define APL_TREE_ITEM_CLASSIFIERLEVEL	_T("ClassifierLevel")
#define APL_TREE_ITEM_CLASSIFIERSYSTEM	_T("ClassifierSystem")
#define APL_TREE_ITEM_PUBLICATION		_T("Publication")
#define APL_TREE_ITEM_DATAMODULE		_T("DataModule")
#define APL_TREE_ITEM_REQUIREMENT		_T("Requirement")
#define APL_TREE_ITEM_REFUSAL			_T("Refusal")
#define APL_TREE_ITEM_VIRTUAL_FOLDER	_T("Virtualfolder")

class AFX_CLASS_EXPORT CaplViewInfo
{
public:
	CView* view;	
	long viewtype;	/*тип расположения: располагается в табе и в баре*/
	long viewid;	/*уникальный идентификатор вида в пределах одного дополнения*/
	CString tab_name;
	CString tab_descr;
	int pos;
	BYTE show;
	DWORD type;
};

class AFX_CLASS_EXPORT CaplAddinViews
{
public:
	CaplAddinViews();

	~CaplAddinViews();

	void AddView(CView*view, DWORD type, int pos=-1, CString name=_T(""), CString descr=_T(""), bool show = true, long viewtype= aplTab, long viewid= -1);
		
	void DeleteAllViews();

	int GetSize();

	int GetPos(int ind);

	CaplViewInfo* GetAt(int ind);

	void SetFlagAt(int ind, bool show);
	void RemoveAt(int ind);

protected:
	CArray<CaplViewInfo*, CaplViewInfo*> m_Data;
private:
};

#define APL_UPDATE_INST_ITEM 2
#define APL_UPDATE_TREE_ITEM 1

class CaplPSSApp;
class CaplInstance;

class AFX_CLASS_EXPORT CaplUpdateItem
{
public:
	CaplUpdateItem(){app= NULL;inst= NULL;}

public:
	CaplPSSApp* app;
	CaplInstance* inst;
};

#endif //_APL_ADD_IN_SOURCE1_COMMON_CLASSES_H_
