// CChoose_inst_dlg.h : header file
//

#if !defined(AFX_CCHOOSE_INST_DLG_H__25F9ECDA_87B9_4941_96DE_B99E3E4A49B0__INCLUDED_)
#define AFX_CCHOOSE_INST_DLG_H__25F9ECDA_87B9_4941_96DE_B99E3E4A49B0__INCLUDED_

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

//#include <StepData.h>
#include <apl_gui.h>
#include "apl_api.h"
#include "Resource.h" 
#include "ResizableDialog.h" 

/////////////////////////////////////////////////////////////////////////////
// CChoose_inst_dlg dialog


class CChoose_inst_dlg : public CResizableDialog
{
// Construction
public:
	aplExtent doc_types;
	void GetAllDocTypes();
	int FindElement(CaplInstance *element);
	HTREEITEM FindInTree(CaplInstance *group);
	void SelchangedTreeCtrl(const HTREEITEM &hItem);
	CaplInstance* selected_group;
	CaplInstance* selected_element;

	CaplAPI *m_api;
	CStringArray *m_default_names;
	CaplAttr *m_attr_for_def;
	bool m_show_all_types;
	bool m_bSelectGroup;

	/** группы к выводу в treecontrol */
	CaplEntity *e_group;
	CaplAttr *a_group_id,*a_group_name,*a_group_description,*a_group_content,*a_group_parent;
	
	CaplEntity *e_elem;/** entity к выводу в listcontrol */
	CaplInstance *chosen_element;/** выбранный в диалоге элемент */
	CString header; /** заголовок диалогового окна */
	struct ELEMS /** структура входных параметров элементов диалога (то,что выводится в listcontrol) */
	{
		CString header;/** заголовок элемента */
		CaplAttr* attr;/** атрибут к выводу */
		CaplAttr* second_attr;/** если задан second_attr,то выводится он (second_attr- атрибут attr) */
		int function_type;/** 0 - получаем атрибут через GetAttr,1 - GetUnitName(),2 - GetUnitDescription() */
		int width;/** ширина заголовка в пикселах */
	};
	ELEMS tmp;/** временная структура для добавления в массив структур */
	CArray<ELEMS,ELEMS> elements; /** массив структур входных параметров диалога */ 
	
	CChoose_inst_dlg(CWnd* pParent = NULL);	// standard constructor
	
	void LoadContent();
	void AddToElements(ELEMS tmp);/** добавляет к входному массиву элемент */
	bool GetUnitDescription(CaplInstance *unit,CString &buf); /** формирует строку <b>buf</b> описание единицы измерения */ 
	bool DisplayElement(CaplInstance *inst,int nItem); /** вывод элемента в listcontrol */
	CaplInstance* GetChosenElement();/** возвращает выбранный элемент */

	/** добавляет в treecontrol пользовательские группы элементов */ 
	HTREEITEM AddToTree(CaplInstance *group,CString group_id, CaplInstance *parent_inst, HTREEITEM htParent);
	void AddGroupsToTree(CaplInstance *parent_group=0, HTREEITEM htParent= TVI_ROOT);
	
// Dialog Data
	//{{AFX_DATA(CChoose_inst_dlg)
	enum { IDD = IDD_CHOOSE_INST_DLG_DIALOG };
	CaplButton	m_cancel_btn;
	CaplButton	m_ok_btn;
	CaplButton m_refresh;
	CStatic	m_border;
	CTreeCtrl	m_tree_ctrl;

	CString m_sCode;
	CString m_sName;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CChoose_inst_dlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	CSortListCtrl m_report_ctrl;
	CImageList m_imageList;
	// Generated message map functions
	//{{AFX_MSG(CChoose_inst_dlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg void OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnSelchangedTreeCtrl(NMHDR* pNMHDR, LRESULT* pResult);
	virtual void OnOK();
	virtual void OnCancel();
	afx_msg void OnSplitterMoved();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedRefresh();
	afx_msg void OnEnChangeCode();
	afx_msg void OnEnChangeName();
	CString m_sCodeTitle;
	CString m_sNameTitle;
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CCHOOSE_INST_DLG_H__25F9ECDA_87B9_4941_96DE_B99E3E4A49B0__INCLUDED_)
