/*++ 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 }