/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    Restrct.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 "Restrct.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRestrictions property page

IMPLEMENT_DYNCREATE(CRestrictions, CWizBaseDlg)

CRestrictions::CRestrictions() : CWizBaseDlg(CRestrictions::IDD)
{
	//{{AFX_DATA_INIT(CRestrictions)
	m_bAccountExpire = FALSE;
	m_bAccountDisabled = FALSE;
	m_bLoginTimes = FALSE;
	m_bLimitWorkstations = FALSE;
	m_nRestrictions = 0;
	m_csCaption = _T("");
	//}}AFX_DATA_INIT

	m_bEnable = FALSE;
	m_bHours = FALSE;

}

CRestrictions::~CRestrictions()
{
}

void CRestrictions::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRestrictions)
	DDX_Check(pDX, IDC_ACCOUNT_EXPIRE_CHECK, m_bAccountExpire);
	DDX_Check(pDX, IDC_DISABLED_CHECK, m_bAccountDisabled);
	DDX_Check(pDX, IDC_LOGIN_TIMES_CHECK, m_bLoginTimes);
	DDX_Check(pDX, IDC_WORKSTATIONS_CHECK, m_bLimitWorkstations);
	DDX_Radio(pDX, IDC_RESTRICTIONS_RADIO, m_nRestrictions);
	DDX_Text(pDX, IDC_STATIC1, m_csCaption);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRestrictions, CWizBaseDlg)
	//{{AFX_MSG_MAP(CRestrictions)
	ON_BN_CLICKED(IDC_RESTRICTIONS_RADIO, OnRestrictionsRadio)
	ON_BN_CLICKED(IDC_RESTRICTIONS_RADIO2, OnRestrictionsRadio2)
	ON_WM_SHOWWINDOW()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRestrictions message handlers

LRESULT CRestrictions::OnWizardBack() 
{
	CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();

	if (pApp->m_bExchange) return IDD_EXCHANGE_DIALOG;
	else if (pApp->m_bNW) return IDD_FPNW_DLG;
	else if (pApp->m_bRAS) return IDD_RAS_PERM_DIALOG;
	else if (pApp->m_bHomeDir) return IDD_HOMEDIR_DIALOG;
	else if (pApp->m_bLoginScript) return IDD_LOGON_SCRIPT_DIALOG;
	else if (pApp->m_bProfile) return IDD_PROFILE;
	else return IDD_OPTIONS_DIALOG;

}

LRESULT CRestrictions::OnWizardNext() 
{
	UpdateData(TRUE);
	CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();

	pApp->m_bEnableRestrictions = m_bEnable;
	pApp->m_bExpiration = m_bAccountExpire & m_bEnable;
	pApp->m_bDisabled = m_bAccountDisabled & m_bEnable;
	pApp->m_bHours = m_bLoginTimes & m_bEnable;
	pApp->m_bWorkstation = m_bLimitWorkstations & m_bEnable;

	if (m_bAccountExpire & m_bEnable) return IDD_ACCOUNT_EXP_DIALOG;
	else if (m_bLoginTimes & m_bEnable) return IDD_HOURS_DLG;
	else if (m_bLimitWorkstations & m_bEnable) return IDD_LOGONTO_DLG;
	else if (pApp->m_bNW & m_bEnable) return IDD_NWLOGON_DIALOG;
	else return IDD_FINISH;
	
	return CWizBaseDlg::OnWizardNext();

}

void CRestrictions::OnRestrictionsRadio() 
{
	GetDlgItem(IDC_ACCOUNT_EXPIRE_CHECK)->EnableWindow(FALSE);
	GetDlgItem(IDC_DISABLED_CHECK)->EnableWindow(FALSE);
	GetDlgItem(IDC_LOGIN_TIMES_CHECK)->EnableWindow(FALSE);
	GetDlgItem(IDC_WORKSTATIONS_CHECK)->EnableWindow(FALSE);

	m_bEnable = FALSE;
	
}

void CRestrictions::OnRestrictionsRadio2() 
{
	GetDlgItem(IDC_ACCOUNT_EXPIRE_CHECK)->EnableWindow(TRUE);
	GetDlgItem(IDC_DISABLED_CHECK)->EnableWindow(TRUE);
	GetDlgItem(IDC_LOGIN_TIMES_CHECK)->EnableWindow(m_bHours);
	GetDlgItem(IDC_WORKSTATIONS_CHECK)->EnableWindow(TRUE);

	m_bEnable = TRUE;
	
}

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

		CString csTemp;
		csTemp.LoadString(IDS_RESTRICTION_CAPTION);

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

}

BOOL CRestrictions::OnInitDialog() 
{
	CWizBaseDlg::OnInitDialog();
	
	CString csPath;
	TCHAR pDir[256];
	GetSystemDirectory(pDir, 256);
	csPath = pDir;
	csPath += L"\\hours.ocx";

	HINSTANCE hLib = LoadLibrary((LPCTSTR)csPath);

	if (hLib < (HINSTANCE)HINSTANCE_ERROR)
		{
		m_bHours = FALSE;						 //unable to load DLL
		return TRUE;
		}

	// Find the entry point.
	FARPROC lpDllEntryPoint = NULL;
	(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, 
		"DllRegisterServer");
	if (lpDllEntryPoint != NULL)
		{
		HRESULT h = (*lpDllEntryPoint)();
		if (h == 0) m_bHours = TRUE;
		else m_bHours = FALSE;
		}
	else
		m_bHours = FALSE;
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}