#if !defined(AFX_DLGSETINSTACCESS_H__558F8683_E2D3_11D3_9EF5_00C026EE2281__INCLUDED_)
#define AFX_DLGSETINSTACCESS_H__558F8683_E2D3_11D3_9EF5_00C026EE2281__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DlgSetInstAccess.h : header file
//
#include "resource.h"
#include "aplNetStepData.h"
#include "SelectAccessAgent.h"
#include <apl_gui.h>
#include <afxwin.h>
#include <afxcmn.h>

/////////////////////////////////////////////////////////////////////////////
// CDlgSetInstAccess dialog

class CDlgSetInstAccess : public CaplResizableDialog
{
// Construction
public:
	//Текущие положения
	CaplInstance *m_new_pattern;
	aplExtent m_patterns;

	//Указатель на StepData
	CaplNetStepData* m_data;
	// Таблица с доступами
	aplUsers *m_main_table;
	aplUsers m_internal_main_table;
	// Таблица с доступами - в новом формате
	aplListAccess2Inst *m_ListAccess2Inst;

	// текущий юзер в таблице
	aplAccessList* m_list;
	// Окошко для выбора юзера/группы
	CSelectAccessAgent m_dlg_select;
	// Если true - то диалог только показывает текущий доступ
	bool m_only_RO;
	// Если true - то разрешает выбрать "не определено" в доступе по умолчанию;
	// если есть доступ не по умолчанию - автоматически ставится его галочка
	bool m_edit_access_pattern;

	CDlgSetInstAccess(CWnd* pParent = NULL);   // standard constructor
	void SetUserAccess(aplAccessModeType access, aplAccessList* list = 0);
	void EnableButtons();
	void SetButtonsUnchecked();
	///////// Заполняем дерево пользователей и групп
	void PrepareData();
	void CreateList();
	void FillDefAccessVal();
	void CheckIndAccess();
	// поиск дублей указанного юзера
	void CheckUserUnique(aplAccessList* list);

	// BOOL OnToolTipShow( UINT id, NMHDR * pNMHDR, LRESULT * pResult ); ЯАИ:  Перенесено в CaplTranslateDialog

protected:
	// предотвращаем потерю модальности после диалога с бочками из aplSocketTransport
	CaplParentWndProcesser m_pwp;
	//
	void DrawIndAccess();
	void ContextMenuProcessed( CPoint point);
	void SetCurrList( CPoint point);
	void TestEdited();
	void ProcessIndAccess();
	void MoveCtrl(CWnd &wnd, int cx, int cy, bool isMove=true);
	

public:
	// индивидуальный доступ задан разными значениями
	bool m_ind_unk;
	// комбобокс выбора индивидлуального доступа активен, управление у него
	bool m_is_edited;
	// шаблог доступа был изменен
	bool m_pattern_changed;
	
// Dialog Data
	//{{AFX_DATA(CDlgSetInstAccess)
	enum { IDD = IDD_DLG_INST_ACCESS };
	CaplButton	m_CtrlCancel;
	CaplButton	m_CtrlOk;
	CaplButton	m_CtrlBtnDel;
	CaplButton	m_CtrlBtnAdd;
	CaplButton	m_CtrlBtnChng;
	CComboBox	m_CmbxAccess;
	CSortListCtrl	m_ListAccessAgents;
	CButton	m_IndAccessCtrl;
	CStatic	m_Static1;
	CComboBox	m_CmbxDefAccess;
	BOOL	m_IndAccess;
	//}}AFX_DATA


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

// Implementation

	// Generated message map functions
	//{{AFX_MSG(CDlgSetInstAccess)
	virtual BOOL OnInitDialog();
	virtual void OnOK();
	afx_msg void OnIndAccess();
	afx_msg void OnSelchangeDefAccess();
	afx_msg void OnButtonAdd();
	afx_msg void OnButtonDelete();
	afx_msg void OnRclickListAccessAgents(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnDblclkListAccessAgents(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnAccessAgentChng();
	afx_msg void OnClickListAccessAgents(NMHDR* pNMHDR, LRESULT* pResult);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

	CaplTAggr<aplAccessList*,aplAccessList*,APLAGGR_UNIQUE |APLAGGR_LIST> m_list_groupe;
	CaplTAggr<aplAccessList*,aplAccessList*,APLAGGR_UNIQUE |APLAGGR_LIST> m_list_users;
public:
	afx_msg void OnBnClickedSelectPattern();
	CString m_PatternName;
	CStatic m_StTextPat;
	CRichEditCtrl m_EdtPat;
	CButton m_ButPat;
};



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

#endif // !defined(AFX_DLGSETINSTACCESS_H__558F8683_E2D3_11D3_9EF5_00C026EE2281__INCLUDED_)
