Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

308 lines
7.0 KiB

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4. Limit.cpp : implementation file
  5. CPropertyPage support for User mgmt wizard
  6. File History:
  7. JonY Apr-96 created
  8. --*/
  9. #include "stdafx.h"
  10. #include "Speckle.h"
  11. #include "wizbased.h"
  12. #include "Limit.h"
  13. #ifdef _DEBUG
  14. //#define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CLimitLogon property page
  20. IMPLEMENT_DYNCREATE(CLimitLogon, CWizBaseDlg)
  21. CLimitLogon::CLimitLogon() : CWizBaseDlg(CLimitLogon::IDD)
  22. {
  23. //{{AFX_DATA_INIT(CLimitLogon)
  24. m_nWorkstationRadio = 0;
  25. m_csCaption = _T("");
  26. //}}AFX_DATA_INIT
  27. }
  28. CLimitLogon::~CLimitLogon()
  29. {
  30. }
  31. void CLimitLogon::DoDataExchange(CDataExchange* pDX)
  32. {
  33. CPropertyPage::DoDataExchange(pDX);
  34. //{{AFX_DATA_MAP(CLimitLogon)
  35. DDX_Control(pDX, IDC_LIST1, m_lbWksList);
  36. DDX_Radio(pDX, IDC_WORKSTATION_RADIO, m_nWorkstationRadio);
  37. DDX_Text(pDX, IDC_STATIC2, m_csCaption);
  38. //}}AFX_DATA_MAP
  39. }
  40. BEGIN_MESSAGE_MAP(CLimitLogon, CWizBaseDlg)
  41. //{{AFX_MSG_MAP(CLimitLogon)
  42. ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
  43. ON_BN_CLICKED(IDC_REMOVE_BUTTON, OnRemoveButton)
  44. ON_BN_CLICKED(IDC_WORKSTATION_RADIO, OnWorkstationRadio)
  45. ON_BN_CLICKED(IDC_WORKSTATION_RADIO2, OnWorkstationRadio2)
  46. ON_WM_SHOWWINDOW()
  47. ON_LBN_SETFOCUS(IDC_LIST1, OnSetfocusList1)
  48. ON_WM_DESTROY()
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CLimitLogon message handlers
  53. LRESULT CLimitLogon::OnWizardNext()
  54. {
  55. CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
  56. UpdateData(TRUE);
  57. if ((m_nWorkstationRadio == 1) && (m_lbWksList.GetCount() == 0))
  58. {
  59. AfxMessageBox(IDS_NEEDA_WORKSTATION);
  60. return -1;
  61. }
  62. if (m_nWorkstationRadio == 0) pApp->m_csAllowedMachines = L"";
  63. else
  64. {
  65. // make workstation list and store it
  66. USHORT sCount;
  67. CString csWksList;
  68. for (sCount = 0; sCount < m_lbWksList.GetCount(); sCount++)
  69. {
  70. CString csWks;
  71. m_lbWksList.GetText(sCount, csWks);
  72. csWksList += csWks;
  73. csWksList += L",";
  74. }
  75. // remove trailing ','
  76. csWksList = csWksList.Left(csWksList.GetLength() - 1);
  77. pApp->m_csAllowedMachines = csWksList;
  78. }
  79. if (pApp->m_bNW) return IDD_NWLOGON_DIALOG;
  80. else return IDD_FINISH;
  81. }
  82. LRESULT CLimitLogon::OnWizardBack()
  83. {
  84. CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
  85. if (pApp->m_bHours) return IDD_HOURS_DLG;
  86. else if (pApp->m_bExpiration) return IDD_ACCOUNT_EXP_DIALOG;
  87. return IDD_RESTRICTIONS_DIALOG;
  88. }
  89. void CLimitLogon::OnAddButton()
  90. {
  91. CAddWorkstation pWks;
  92. pWks.pListBox = &m_lbWksList;
  93. pWks.DoModal();
  94. if (m_lbWksList.GetCount() > 0) GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
  95. else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
  96. GetDlgItem(IDC_LIST1)->SetFocus();
  97. m_lbWksList.SetCurSel(0);
  98. }
  99. void CLimitLogon::OnRemoveButton()
  100. {
  101. int ui = m_lbWksList.GetCurSel();
  102. if (ui == LB_ERR) return;
  103. m_lbWksList.DeleteString(ui);
  104. if (ui > 0) m_lbWksList.SetCurSel(ui - 1);
  105. else if (m_lbWksList.GetCount() > 0) m_lbWksList.SetCurSel(0);
  106. else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
  107. }
  108. /////////////////////////////////////////////////////////////////////////////
  109. // CAddWorkstation dialog
  110. CAddWorkstation::CAddWorkstation(CWnd* pParent /*=NULL*/)
  111. : CDialog(CAddWorkstation::IDD, pParent)
  112. {
  113. //{{AFX_DATA_INIT(CAddWorkstation)
  114. m_csWorkstation = _T("");
  115. //}}AFX_DATA_INIT
  116. }
  117. void CAddWorkstation::DoDataExchange(CDataExchange* pDX)
  118. {
  119. CDialog::DoDataExchange(pDX);
  120. //{{AFX_DATA_MAP(CAddWorkstation)
  121. DDX_Text(pDX, IDC_WORKSTATION_EDIT, m_csWorkstation);
  122. //}}AFX_DATA_MAP
  123. }
  124. BEGIN_MESSAGE_MAP(CAddWorkstation, CDialog)
  125. //{{AFX_MSG_MAP(CAddWorkstation)
  126. ON_BN_CLICKED(IDOK, OnAdd)
  127. ON_BN_CLICKED(IDCANCEL, OnClose)
  128. ON_EN_CHANGE(IDC_WORKSTATION_EDIT, OnChangeWorkstationEdit)
  129. //}}AFX_MSG_MAP
  130. END_MESSAGE_MAP()
  131. /////////////////////////////////////////////////////////////////////////////
  132. // CAddWorkstation message handlers
  133. void CAddWorkstation::OnAdd()
  134. {
  135. UpdateData(TRUE);
  136. if (m_csWorkstation == L"")
  137. {
  138. GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
  139. return;
  140. }
  141. // check for validity
  142. if (m_csWorkstation.FindOneOf(L"/.,<>;;'[{]}=+)(*&^%$#@!~`| ") != -1)
  143. {
  144. AfxMessageBox(IDS_BAD_WS_NAME);
  145. GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
  146. }
  147. //#ifdef DBCS
  148. // We need MuliByteString count
  149. // Fix: #12335 ADMIN:Admin wizard should check the DBCS computername correctly
  150. // V-HIDEKK 1996.09.27
  151. {
  152. DWORD cch;
  153. cch = WideCharToMultiByte( CP_ACP,
  154. 0,
  155. m_csWorkstation.GetBuffer(m_csWorkstation.GetLength()),
  156. -1,
  157. NULL,
  158. NULL,
  159. NULL,
  160. NULL );
  161. if ( (cch-1) > 15 )
  162. /*
  163. #else
  164. if (m_csWorkstation.GetLength() > 15)
  165. #endif
  166. */
  167. {
  168. AfxMessageBox(IDS_WSNAME_TOOLONG);
  169. GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
  170. return;
  171. }
  172. //#ifdef DBCS
  173. // V-HIDEKK 1996.09.27
  174. }
  175. //#endif
  176. while (m_csWorkstation.Left(1) == L"\\")
  177. m_csWorkstation = m_csWorkstation.Right(m_csWorkstation.GetLength() - 1);
  178. // make sure its unique
  179. if (pListBox->FindString(-1, m_csWorkstation) == LB_ERR) pListBox->AddString(m_csWorkstation);
  180. UpdateData(FALSE);
  181. EndDialog(1);
  182. }
  183. void CAddWorkstation::OnClose()
  184. {
  185. EndDialog(0);
  186. }
  187. void CLimitLogon::OnWorkstationRadio()
  188. {
  189. GetDlgItem(IDC_STATIC1)->EnableWindow(FALSE);
  190. GetDlgItem(IDC_LIST1)->EnableWindow(FALSE);
  191. GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE);
  192. GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
  193. }
  194. void CLimitLogon::OnWorkstationRadio2()
  195. {
  196. GetDlgItem(IDC_STATIC1)->EnableWindow(TRUE);
  197. GetDlgItem(IDC_LIST1)->EnableWindow(TRUE);
  198. GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE);
  199. if (m_lbWksList.GetCount() > 0) GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
  200. else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
  201. }
  202. void CLimitLogon::OnShowWindow(BOOL bShow, UINT nStatus)
  203. {
  204. CWizBaseDlg::OnShowWindow(bShow, nStatus);
  205. if (bShow)
  206. {
  207. CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
  208. CString csTemp;
  209. csTemp.LoadString(IDS_WORKSTATION_CAPTION);
  210. CString csTemp2;
  211. csTemp2.Format(csTemp, pApp->m_csUserName);
  212. m_csCaption = csTemp2;
  213. UpdateData(FALSE);
  214. }
  215. }
  216. void CLimitLogon::OnSetfocusList1()
  217. {
  218. if (m_lbWksList.GetCount() > 0) GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
  219. else GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
  220. }
  221. void CAddWorkstation::OnChangeWorkstationEdit()
  222. {
  223. UpdateData(TRUE);
  224. // check for validity
  225. if (m_csWorkstation.FindOneOf(L"/.,<>;;'[{]}=+)(*&^%$#@!~`| ") != -1)
  226. {
  227. AfxMessageBox(IDS_BAD_WS_NAME);
  228. GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
  229. }
  230. #ifndef DBCS
  231. // If string input longer than 15 char by ime,
  232. // MessageBox raise up too many time.
  233. // We don't need this check.
  234. // Fix: #12348 ADMIN:AddUser Wizard has problem checking length computername of DBCS
  235. // V-HIDEKK 1996.09.27
  236. if (m_csWorkstation.GetLength() > 15)
  237. {
  238. AfxMessageBox(IDS_WSNAME_TOOLONG);
  239. GetDlgItem(IDC_WORKSTATION_EDIT)->SetFocus();
  240. return;
  241. }
  242. #endif
  243. }