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.

271 lines
6.1 KiB

  1. /****
  2. AdvUi.Cpp
  3. CoryWest@Microsoft.Com
  4. The UI code for the Advanced dialog box and its associated dialogs.
  5. Copyright September 1997, Microsoft Corporation
  6. ****/
  7. #include "stdafx.h"
  8. //#include "macros.h"
  9. //USE_HANDLE_MACROS("SCHMMGMT(advui.cpp)")
  10. #include "schmutil.h"
  11. #include "resource.h"
  12. #include "advui.h"
  13. //////////////////////////////////////////////////////////////////
  14. // CMoreInfoMessageBox
  15. class CMoreInfoMessageBox : public CDialog
  16. {
  17. public:
  18. CMoreInfoMessageBox(HWND hWndParent, IDisplayHelp* pIDisplayHelp)
  19. : CDialog(IDD_MSGBOX_OK_MOREINFO, CWnd::FromHandle(hWndParent)),
  20. m_spIDisplayHelp(pIDisplayHelp)
  21. {
  22. }
  23. void SetURL(LPCWSTR lpszURL) { m_szURL = lpszURL;}
  24. void SetMessage(LPCWSTR lpsz)
  25. {
  26. m_szMessage = lpsz;
  27. }
  28. // message handlers and MFC overrides
  29. virtual BOOL OnInitDialog()
  30. {
  31. SetDlgItemText(IDC_STATIC_MESSAGE, m_szMessage);
  32. return TRUE;
  33. }
  34. afx_msg void OnMoreInfo()
  35. {
  36. TRACE(L"ShowTopic(%s)\n", (LPCWSTR)m_szURL);
  37. m_spIDisplayHelp->ShowTopic((LPWSTR)(LPCWSTR)m_szURL);
  38. }
  39. DECLARE_MESSAGE_MAP()
  40. private:
  41. CComPtr<IDisplayHelp> m_spIDisplayHelp;
  42. CString m_szMessage;
  43. CString m_szURL;
  44. };
  45. BEGIN_MESSAGE_MAP(CMoreInfoMessageBox, CDialog)
  46. ON_BN_CLICKED(ID_BUTTON_MORE_INFO, OnMoreInfo)
  47. END_MESSAGE_MAP()
  48. ///////////////////////////////////////////////////////////////////////
  49. // CChangeDCDialog
  50. BEGIN_MESSAGE_MAP(CChangeDCDialog, CDialog)
  51. ON_BN_CLICKED(IDC_RADIO_ANY, OnChangeRadio)
  52. ON_BN_CLICKED(IDC_RADIO_SPECIFY, OnChangeRadio)
  53. ON_MESSAGE(WM_HELP, OnHelp)
  54. ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp)
  55. END_MESSAGE_MAP()
  56. const DWORD CChangeDCDialog::help_map[] =
  57. {
  58. IDC_EDIT_CURRENT_DC, IDH_EDIT_CURRENT_DC2,
  59. IDC_RADIO_ANY, IDH_RADIO_ANY,
  60. IDC_RADIO_SPECIFY, IDH_RADIO_SPECIFY,
  61. IDC_EDIT_DC, IDH_EDIT_DC,
  62. 0,0
  63. };
  64. CChangeDCDialog::CChangeDCDialog(MyBasePathsInfo* pInfo, HWND hWndParent) :
  65. CDialog(IDD_CHANGE_DC, CWnd::FromHandle(hWndParent))
  66. {
  67. m_pInfo = pInfo;
  68. }
  69. BOOL CChangeDCDialog::OnInitDialog()
  70. {
  71. CDialog::OnInitDialog();
  72. SetDlgItemText(IDC_EDIT_CURRENT_DC, m_pInfo->GetServerName());
  73. // set the default radiobutton
  74. CButton* pCheck = (CButton*)GetDlgItem(IDC_RADIO_ANY);
  75. pCheck->SetCheck(TRUE);
  76. pCheck->SetFocus();
  77. OnChangeRadio();
  78. return FALSE; // we are setting the focus
  79. }
  80. void CChangeDCDialog::OnChangeRadio()
  81. {
  82. CWnd* pEdit = GetDlgItem(IDC_EDIT_DC);
  83. BOOL bAny = IsDlgButtonChecked(IDC_RADIO_ANY);
  84. pEdit->EnableWindow(!bAny);
  85. if (bAny)
  86. {
  87. SetDlgItemText(IDC_EDIT_DC, NULL);
  88. }
  89. else
  90. {
  91. SetDlgItemText(IDC_EDIT_DC, m_pInfo->GetServerName());
  92. }
  93. }
  94. void CChangeDCDialog::OnOK()
  95. {
  96. GetDlgItemText(IDC_EDIT_DC, m_szNewDCName);
  97. m_szNewDCName.TrimLeft();
  98. m_szNewDCName.TrimRight();
  99. CDialog::OnOK();
  100. }
  101. ///////////////////////////////////////////////////////////////////////
  102. // CEditFsmoDialog
  103. BEGIN_MESSAGE_MAP(CEditFsmoDialog, CDialog)
  104. ON_BN_CLICKED(IDC_CHANGE_FSMO, OnChange)
  105. ON_BN_CLICKED(IDCLOSE, OnClose)
  106. ON_MESSAGE(WM_HELP, OnHelp)
  107. ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp)
  108. END_MESSAGE_MAP()
  109. CEditFsmoDialog::CEditFsmoDialog(MyBasePathsInfo* pInfo,
  110. HWND hWndParent,
  111. IDisplayHelp* pIDisplayHelp,
  112. BOOL fAllowFSMOChange ) :
  113. CDialog(IDD_EDIT_FSMO, CWnd::FromHandle(hWndParent))
  114. {
  115. m_pInfo = pInfo;
  116. m_spIDisplayHelp = pIDisplayHelp;
  117. m_fFSMOChangeAllowed = fAllowFSMOChange;
  118. }
  119. const DWORD CEditFsmoDialog::help_map[] =
  120. {
  121. IDC_EDIT_CURRENT_DC, IDH_EDIT_CURRENT_DC3,
  122. IDC_STATIC_FSMO_NOTE, NO_HELP,
  123. IDC_STATIC_FSMO_STATUS, NO_HELP,
  124. IDC_EDIT_CURRENT_FSMO_DC, IDH_EDIT_CURRENT_FSMO_DC2,
  125. IDC_CHANGE_FSMO, IDH_CHANGE_FSMO2,
  126. 0,0
  127. };
  128. BOOL CEditFsmoDialog::OnInitDialog()
  129. {
  130. CDialog::OnInitDialog();
  131. ASSERT( GetDlgItem(IDC_CHANGE_FSMO) );
  132. ASSERT( ::GetDlgItem(m_hWnd, IDC_STATIC_FSMO_STATUS) );
  133. // init the status (online/offline) control)
  134. m_fsmoServerState.Init(::GetDlgItem(m_hWnd, IDC_STATIC_FSMO_STATUS));
  135. SetDlgItemText(IDC_EDIT_CURRENT_DC, m_pInfo->GetServerName());
  136. MyBasePathsInfo fsmoOwnerInfo;
  137. PWSTR pszFsmoOwner = 0;
  138. HRESULT hr = FindFsmoOwner(m_pInfo, SCHEMA_FSMO, &fsmoOwnerInfo, &pszFsmoOwner);
  139. if(pszFsmoOwner)
  140. {
  141. m_szFsmoOwnerServerName = pszFsmoOwner;
  142. delete[] pszFsmoOwner;
  143. pszFsmoOwner = 0;
  144. }
  145. _SetFsmoServerStatus(SUCCEEDED(hr));
  146. if( m_fFSMOChangeAllowed )
  147. {
  148. // set the focus on change button
  149. GetDlgItem(IDC_CHANGE_FSMO)->SetFocus();
  150. }
  151. else
  152. {
  153. GetDlgItem(IDC_CHANGE_FSMO)->EnableWindow( FALSE );
  154. }
  155. return FALSE;
  156. }
  157. void CEditFsmoDialog::OnClose()
  158. {
  159. EndDialog(IDCLOSE);
  160. }
  161. void CEditFsmoDialog::OnChange()
  162. {
  163. // verify we have different servers
  164. if (m_szFsmoOwnerServerName.CompareNoCase(m_pInfo->GetServerName()) == 0)
  165. {
  166. AfxMessageBox(IDS_WARNING_CHANGE_FOCUS, MB_OK);
  167. return;
  168. }
  169. // make sure the user wants to do it
  170. if (AfxMessageBox(IDS_CHANGE_FSMO_CONFIRMATION, MB_OKCANCEL) != IDOK)
  171. return;
  172. HRESULT hr = GracefulFsmoOwnerTransfer(m_pInfo, SCHEMA_FSMO);
  173. if (FAILED(hr))
  174. {
  175. CString szFmt, szMsg;
  176. PWSTR pszError = 0;
  177. StringErrorFromHr(hr, &pszError);
  178. szFmt.LoadString(IDS_ERROR_CHANGE_FSMO_OWNER);
  179. szMsg.Format(szFmt, pszError);
  180. delete[] pszError;
  181. pszError = 0;
  182. CMoreInfoMessageBox dlg(m_hWnd, m_spIDisplayHelp);
  183. dlg.SetMessage(szMsg);
  184. dlg.SetURL(L"ADconcepts.chm::/FSMO_SCHEMA_ForcefulSeizure.htm");
  185. dlg.DoModal();
  186. }
  187. else
  188. {
  189. m_szFsmoOwnerServerName = m_pInfo->GetServerName();
  190. _SetFsmoServerStatus(TRUE);
  191. AfxMessageBox(IDS_CHANGE_FSMO_SUCCESS, MB_OK);
  192. }
  193. }
  194. void CEditFsmoDialog::_SetFsmoServerStatus(BOOL bOnLine)
  195. {
  196. // set the FSMO owner server name
  197. if (m_szFsmoOwnerServerName.IsEmpty())
  198. {
  199. CString szError;
  200. szError.LoadString(IDS_FSMO_SERVER_ERROR);
  201. SetDlgItemText(IDC_EDIT_CURRENT_FSMO_DC, szError);
  202. }
  203. else
  204. {
  205. SetDlgItemText(IDC_EDIT_CURRENT_FSMO_DC, m_szFsmoOwnerServerName);
  206. }
  207. // set the status of the FSMO owner server
  208. m_fsmoServerState.SetToggleState(bOnLine);
  209. }