#include "stdafx.h"
#include "p4win.h"
#include "MainFrm.h"
#include "ClientFilterDlg.h"
#include "cmd_password.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CClientFilterDlg dialog


CClientFilterDlg::CClientFilterDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CClientFilterDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CClientFilterDlg)
	m_NotUser = 0;
	m_NotMyHost = 0;
	m_Owner = _T("");
	m_Host  = _T("");
	m_DescContains = _T("");
	//}}AFX_DATA_INIT

	m_Flags = 0;
}


void CClientFilterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CClientFilterDlg)
	DDX_Control(pDX, IDC_CHECK1, m_IsOwner);
	DDX_Control(pDX, IDC_CHECK2, m_IsHost);
	DDX_Control(pDX, IDC_CHECK3, m_IsDesc);
	DDX_Radio(pDX, IDC_RADIO1, m_NotUser);
	DDX_Radio(pDX, IDC_RADIO3, m_NotMyHost);
	DDX_Text(pDX, IDC_OWNER, m_Owner);
	DDX_Text(pDX, IDC_HOST, m_Host);
	DDX_Text(pDX, IDC_DESCCONTAINS, m_DescContains);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CClientFilterDlg, CDialog)
	//{{AFX_MSG_MAP(CClientFilterDlg)
	ON_BN_CLICKED(IDC_CHECK1, OnOwner)
	ON_BN_CLICKED(IDC_RADIO1, OnOwner)
	ON_BN_CLICKED(IDC_RADIO2, OnOwner)
	ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
	ON_BN_CLICKED(IDC_CHECK2, OnHost)
	ON_BN_CLICKED(IDC_RADIO3, OnHost)
	ON_BN_CLICKED(IDC_RADIO4, OnHost)
	ON_BN_CLICKED(IDC_CHECK3, OnDesc)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_BROWSECALLBACK2, OnBrowseUsersCallBack)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CClientFilterDlg message handlers

BOOL CClientFilterDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	int i = GET_P4REGPTR()->GetClientFilteredFlags();
	if (i & 0x11)
	{
		m_IsOwner.SetCheck(TRUE);
		if (i & 0x01)
			m_NotUser = 1;
	}
	if (i & 0x22)
	{
		m_IsHost.SetCheck(TRUE);
		if (i & 0x02)
			m_NotMyHost = 1;
	}
	if (i & 0x04)
		m_IsDesc.SetCheck(TRUE);
	m_Owner = GET_P4REGPTR()->GetClientFilterOwner();
	m_Host = GET_P4REGPTR()->GetClientFilterHost();
	m_DescContains = GET_P4REGPTR()->GetClientFilterDesc();
	
	UpdateData(FALSE);

	OnDesc();
	OnHost();
	OnOwner();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CClientFilterDlg::OnOK() 
{
	UpdateData( );
	int m_ErrorCount=0;

	int i = 0;
	if (m_IsOwner.GetCheck())
		i = m_NotUser ? 0x01 : 0x10;
	if (m_IsHost.GetCheck())
		i += m_NotMyHost ? 0x02 : 0x20;
	if (m_IsDesc.GetCheck())
		i += 0x04;
	if (i != GET_P4REGPTR()->GetClientFilteredFlags())
		if (!GET_P4REGPTR()->SetClientFilteredFlags( i ) )
				m_ErrorCount++;

	if (m_Owner != GET_P4REGPTR()->GetClientFilterOwner())
		if (!GET_P4REGPTR()->SetClientFilterOwner( m_Owner ) )
				m_ErrorCount++;

	if (m_Host != GET_P4REGPTR()->GetClientFilterHost())
		if (!GET_P4REGPTR()->SetClientFilterHost( m_Host ) )
				m_ErrorCount++;

	if (m_DescContains != GET_P4REGPTR()->GetClientFilterDesc())
		if (!GET_P4REGPTR()->SetClientFilterDesc( m_DescContains ) )
				m_ErrorCount++;

	if(m_ErrorCount)
		AfxMessageBox(IDS_BAD_REGISTRY, MB_ICONSTOP);

	CDialog::OnOK();
}

void CClientFilterDlg::OnOwner()
{
	BOOL b  = m_IsOwner.GetCheck();
	GetDlgItem(IDC_RADIO1)->EnableWindow(b);
	GetDlgItem(IDC_RADIO2)->EnableWindow(b);
	UpdateData( );
	b &= m_NotUser;
	GetDlgItem(IDC_OWNER)->EnableWindow(b);
	GetDlgItem(IDC_BROWSE)->EnableWindow(b);
	if (b)
		GotoDlgCtrl(GetDlgItem(IDC_OWNER));
}

void CClientFilterDlg::OnHost()
{
	BOOL b = m_IsHost.GetCheck();
	GetDlgItem(IDC_RADIO3)->EnableWindow(b);
	GetDlgItem(IDC_RADIO4)->EnableWindow(b);
	UpdateData( );
	b &= m_NotMyHost;
	GetDlgItem(IDC_HOST)->EnableWindow(b);
	if (b)
		GotoDlgCtrl(GetDlgItem(IDC_HOST));
}

void CClientFilterDlg::OnDesc()
{
	BOOL b;
	GetDlgItem(IDC_DESCCONTAINS)->EnableWindow(b = m_IsDesc.GetCheck());
	GotoDlgCtrl(GetDlgItem(IDC_DESCCONTAINS));
}

void CClientFilterDlg::OnBrowse()
{
	::SendMessage(MainFrame()->UserWnd(), WM_FETCHOBJECTLIST, 
					(WPARAM)(this->m_hWnd), WM_BROWSECALLBACK2);
	GotoDlgCtrl(GetDlgItem(IDC_OWNER));
}

LRESULT CClientFilterDlg::OnBrowseUsersCallBack(WPARAM wParam, LPARAM lParam)
{
	UpdateData(TRUE);
	CString *str = (CString *)lParam;
	m_Owner = *str;
	UpdateData(FALSE);
	GotoDlgCtrl(GetDlgItem(IDC_OWNER));
	return 0;
}