/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    Limit.cpp : implementation file

  CPropertyPage support for User mgmt wizard

File History:

	JonY	Apr-96	created

--*/
#include "stdafx.h"
#include "Speckle.h"
#include "wizbased.h"
#include "Limit.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLimitLogon property page

IMPLEMENT_DYNCREATE(CLimitLogon, CWizBaseDlg)

CLimitLogon::CLimitLogon() : CWizBaseDlg(CLimitLogon::IDD)
{
	//{{AFX_DATA_INIT(CLimitLogon)
	m_nWorkstationRadio = 0;
	m_csCaption = _T("");
	//}}AFX_DATA_INIT
}

CLimitLogon::~CLimitLogon()
{
}

void CLimitLogon::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLimitLogon)
	DDX_Control(pDX, IDC_LIST1, m_lbWksList);
	DDX_Radio(pDX, IDC_WORKSTATION_RADIO, m_nWorkstationRadio);
	DDX_Text(pDX, IDC_STATIC2, m_csCaption);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLimitLogon, CWizBaseDlg)
	//{{AFX_MSG_MAP(CLimitLogon)
	ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
	ON_BN_CLICKED(IDC_REMOVE_BUTTON, OnRemoveButton)
	ON_BN_CLICKED(IDC_WORKSTATION_RADIO, OnWorkstationRadio)
	ON_BN_CLICKED(IDC_WORKSTATION_RADIO2, OnWorkstationRadio2)
	ON_WM_SHOWWINDOW()
	ON_LBN_SETFOCUS(IDC_LIST1, OnSetfocusList1)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLimitLogon message handlers
LRESULT CLimitLogon::OnWizardNext()
{
	CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
	UpdateData(TRUE);

	if ((m_nWorkstationRadio == 1) && (m_lbWksList.GetCount() == 0))
		{
		AfxMessageBox(IDS_NEEDA_WORKSTATION);
		return -1;
		}

	if (m_nWorkstationRadio == 0) pApp->m_csAllowedMachines = L"";
	else
		{
// make workstation list and store it
		USHORT sCount;
		CString csWksList;
		for (sCount = 0; sCount < m_lbWksList.GetCount(); sCount++)
			{
			CString csWks;
			m_lbWksList.GetText(sCount, csWks);
			csWksList += csWks;
			csWksList += L",";
			}
	
// remove trailing ','
		csWksList = csWksList.Left(csWksList.GetLength() - 1);
		pApp->m_csAllowedMachines = csWksList;
		}

	if (pApp->m_bNW) return IDD_NWLOGON_DIALOG;
	else return IDD_FINISH;

}

LRESULT CLimitLogon::OnWizardBack()
{
	CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
	if (pApp->m_bHours) return IDD_HOURS_DLG;
	else if (pApp->m_bExpiration) return IDD_ACCOUNT_EXP_DIALOG;
	return IDD_RESTRICTIONS_DIALOG;

}


void CLimitLogon::OnAddButton() 
{
	CAddWorkstation pWks;
	pWks.pListBox = &m_lbWksList;
	pWks.DoModal();

	if (m_lbWksList.GetCount() > 0) GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
	else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);

	GetDlgItem(IDC_LIST1)->SetFocus();
	m_lbWksList.SetCurSel(0);
	
}

void CLimitLogon::OnRemoveButton() 
{
	int ui = m_lbWksList.GetCurSel();
	if (ui == LB_ERR) return;

	m_lbWksList.DeleteString(ui);
	if (ui > 0) m_lbWksList.SetCurSel(ui - 1);
	else if (m_lbWksList.GetCount() > 0) m_lbWksList.SetCurSel(0);
	else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);

}

/////////////////////////////////////////////////////////////////////////////
// CAddWorkstation dialog


CAddWorkstation::CAddWorkstation(CWnd* pParent /*=NULL*/)
	: CDialog(CAddWorkstation::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAddWorkstation)
	m_csWorkstation = _T("");
	//}}AFX_DATA_INIT
}


void CAddWorkstation::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAddWorkstation)
	DDX_Text(pDX, IDC_WORKSTATION_EDIT, m_csWorkstation);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAddWorkstation, CDialog)
	//{{AFX_MSG_MAP(CAddWorkstation)
	ON_BN_CLICKED(IDOK, OnAdd)
	ON_BN_CLICKED(IDCANCEL, OnClose)
	ON_EN_CHANGE(IDC_WORKSTATION_EDIT, OnChangeWorkstationEdit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAddWorkstation message handlers

void CAddWorkstation::OnAdd() 
{

	UpdateData(TRUE);
	if (m_csWorkstation == L"") 
		{
		GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
		return;
		}

// 	check for validity
	if (m_csWorkstation.FindOneOf(L"/.,<>;;'[{]}=+)(*&^%$#@!~`| ") != -1)
		{
		AfxMessageBox(IDS_BAD_WS_NAME);
		GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
		}

//#ifdef DBCS
// We need MuliByteString count
// Fix: #12335 ADMIN:Admin wizard should check the DBCS computername correctly
// V-HIDEKK 1996.09.27
        {
	DWORD cch;

        cch = WideCharToMultiByte( CP_ACP,
                             0, 
                             m_csWorkstation.GetBuffer(m_csWorkstation.GetLength()),
                             -1,
                             NULL,
                             NULL,
                             NULL,
                             NULL );
        if ( (cch-1) > 15 )
/*
#else
	if (m_csWorkstation.GetLength() > 15)
#endif
*/
		{
		AfxMessageBox(IDS_WSNAME_TOOLONG);
		GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
		return;
		}
//#ifdef DBCS
// V-HIDEKK 1996.09.27
        }
//#endif

	while (m_csWorkstation.Left(1) == L"\\")
		m_csWorkstation = m_csWorkstation.Right(m_csWorkstation.GetLength() - 1);

// make sure its unique
	if (pListBox->FindString(-1, m_csWorkstation) == LB_ERR) pListBox->AddString(m_csWorkstation);
	UpdateData(FALSE);
	EndDialog(1);
	
}

void CAddWorkstation::OnClose() 
{
	EndDialog(0);
	
}

void CLimitLogon::OnWorkstationRadio() 
{
	GetDlgItem(IDC_STATIC1)->EnableWindow(FALSE);
	GetDlgItem(IDC_LIST1)->EnableWindow(FALSE);
	GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE);
	GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
	
}

void CLimitLogon::OnWorkstationRadio2() 
{
	GetDlgItem(IDC_STATIC1)->EnableWindow(TRUE);
	GetDlgItem(IDC_LIST1)->EnableWindow(TRUE);
	GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE);
	if (m_lbWksList.GetCount() > 0) GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
	else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
	
}

void CLimitLogon::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CWizBaseDlg::OnShowWindow(bShow, nStatus);
	
	if (bShow)
		{
		CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();

		CString csTemp;
		csTemp.LoadString(IDS_WORKSTATION_CAPTION);

		CString csTemp2;
		csTemp2.Format(csTemp, pApp->m_csUserName);
		m_csCaption = csTemp2;
		UpdateData(FALSE);
		}
	
}

void CLimitLogon::OnSetfocusList1() 
{
	if (m_lbWksList.GetCount() > 0) GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
	else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);

}

void CAddWorkstation::OnChangeWorkstationEdit() 
{
	UpdateData(TRUE);

// 	check for validity
	if (m_csWorkstation.FindOneOf(L"/.,<>;;'[{]}=+)(*&^%$#@!~`| ") != -1)
		{
		AfxMessageBox(IDS_BAD_WS_NAME);
		GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
		}

#ifndef DBCS
// If string input longer than 15 char by ime,
// MessageBox raise up too many time. 
// We don't need this check.
// Fix: #12348 ADMIN:AddUser Wizard has problem checking length computername of DBCS
// V-HIDEKK 1996.09.27

	if (m_csWorkstation.GetLength() > 15)
		{
		AfxMessageBox(IDS_WSNAME_TOOLONG);
		GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
		return;
		}
#endif

}