Leaked source code of windows server 2003
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.

296 lines
7.6 KiB

  1. // OptionsUserInfoPg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #define __FILE_ID__ 71
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. //
  11. // this array maps dialog control IDs to
  12. // number of string in FAX_PERSONAL_PROFILE structure
  13. //
  14. static TPersonalPageInfo s_PageInfo[] =
  15. {
  16. IDC_NAME_VALUE, PERSONAL_PROFILE_NAME,
  17. IDC_FAX_NUMBER_VALUE, PERSONAL_PROFILE_FAX_NUMBER,
  18. IDC_COMPANY_VALUE, PERSONAL_PROFILE_COMPANY,
  19. IDC_TITLE_VALUE, PERSONAL_PROFILE_TITLE,
  20. IDC_DEPARTMENT_VALUE, PERSONAL_PROFILE_DEPARTMENT,
  21. IDC_OFFICE_VALUE, PERSONAL_PROFILE_OFFICE_LOCATION,
  22. IDC_HOME_PHONE_VALUE, PERSONAL_PROFILE_HOME_PHONE,
  23. IDC_BUSINESS_PHONE_VALUE, PERSONAL_PROFILE_OFFICE_PHONE,
  24. IDC_EMAIL_VALUE, PERSONAL_PROFILE_EMAIL,
  25. IDC_BILLING_CODE_VALUE, PERSONAL_PROFILE_BILLING_CODE,
  26. IDC_ADDRESS_VALUE, PERSONAL_PROFILE_STREET_ADDRESS
  27. };
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CUserInfoDlg property page
  30. CUserInfoDlg::CUserInfoDlg():
  31. CFaxClientDlg(CUserInfoDlg::IDD)
  32. {
  33. memset((LPVOID)&m_PersonalProfile, 0, sizeof(m_PersonalProfile));
  34. m_PersonalProfile.dwSizeOfStruct = sizeof(m_PersonalProfile);
  35. m_tchStrArray = &(m_PersonalProfile.lptstrName);
  36. }
  37. CUserInfoDlg::~CUserInfoDlg()
  38. {
  39. //
  40. // free memory
  41. //
  42. for(DWORD dw=0; dw < PERSONAL_PROFILE_STR_NUM; ++dw)
  43. {
  44. MemFree(m_tchStrArray[dw]);
  45. }
  46. }
  47. void CUserInfoDlg::DoDataExchange(CDataExchange* pDX)
  48. {
  49. CFaxClientDlg::DoDataExchange(pDX);
  50. //{{AFX_DATA_MAP(CUserInfoDlg)
  51. DDX_Control(pDX, IDC_ADDRESS_VALUE, m_editAddress);
  52. DDX_Control(pDX, IDOK, m_butOk);
  53. //}}AFX_DATA_MAP
  54. }
  55. BEGIN_MESSAGE_MAP(CUserInfoDlg, CFaxClientDlg)
  56. //{{AFX_MSG_MAP(CUserInfoDlg)
  57. ON_EN_CHANGE(IDC_NAME_VALUE, OnModify)
  58. ON_EN_CHANGE(IDC_NAME_VALUE, OnModify)
  59. ON_EN_CHANGE(IDC_FAX_NUMBER_VALUE, OnModify)
  60. ON_EN_CHANGE(IDC_COMPANY_VALUE, OnModify)
  61. ON_EN_CHANGE(IDC_TITLE_VALUE, OnModify)
  62. ON_EN_CHANGE(IDC_DEPARTMENT_VALUE, OnModify)
  63. ON_EN_CHANGE(IDC_OFFICE_VALUE, OnModify)
  64. ON_EN_CHANGE(IDC_HOME_PHONE_VALUE, OnModify)
  65. ON_EN_CHANGE(IDC_BUSINESS_PHONE_VALUE, OnModify)
  66. ON_EN_CHANGE(IDC_EMAIL_VALUE, OnModify)
  67. ON_EN_CHANGE(IDC_BILLING_CODE_VALUE, OnModify)
  68. ON_EN_CHANGE(IDC_ADDRESS_VALUE, OnModify)
  69. //}}AFX_MSG_MAP
  70. END_MESSAGE_MAP()
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CUserInfoDlg message handlers
  73. BOOL
  74. CUserInfoDlg::OnInitDialog()
  75. {
  76. DWORD dwRes = ERROR_SUCCESS;
  77. DBG_ENTER(TEXT("COptionsSettingsPg::OnInitDialog"));
  78. CFaxClientDlg::OnInitDialog();
  79. //
  80. // get user info
  81. //
  82. FAX_PERSONAL_PROFILE personalProfile;
  83. memset((LPVOID)&personalProfile, 0, sizeof(personalProfile));
  84. personalProfile.dwSizeOfStruct = sizeof(personalProfile);
  85. HRESULT hResult = FaxGetSenderInformation(&personalProfile);
  86. if(S_OK != hResult)
  87. {
  88. CALL_FAIL (GENERAL_ERR, TEXT("FaxGetSenderInformation"), hResult);
  89. return TRUE;
  90. }
  91. //
  92. // A numeric edit control should be LTR
  93. //
  94. SetLTREditDirection(m_hWnd, IDC_FAX_NUMBER_VALUE);
  95. SetLTREditDirection(m_hWnd, IDC_EMAIL_VALUE);
  96. SetLTREditDirection(m_hWnd, IDC_HOME_PHONE_VALUE);
  97. SetLTREditDirection(m_hWnd, IDC_BUSINESS_PHONE_VALUE);
  98. //
  99. // copy strings into the private structure
  100. //
  101. DWORD dwLen;
  102. TCHAR** tchStrArray = &(personalProfile.lptstrName);
  103. for(DWORD dw=0; dw < PERSONAL_PROFILE_STR_NUM; ++dw)
  104. {
  105. if(NULL == tchStrArray[dw])
  106. {
  107. continue;
  108. }
  109. dwLen = _tcslen(tchStrArray[dw]);
  110. if(0 == dwLen)
  111. {
  112. continue;
  113. }
  114. m_tchStrArray[dw] = (TCHAR*)MemAlloc(sizeof(TCHAR)*(dwLen+1));
  115. if(!m_tchStrArray[dw])
  116. {
  117. dwRes = ERROR_NOT_ENOUGH_MEMORY;
  118. CALL_FAIL (MEM_ERR, TEXT("MemAlloc"), dwRes);
  119. PopupError(dwRes);
  120. break;
  121. }
  122. _tcscpy(m_tchStrArray[dw], tchStrArray[dw]);
  123. }
  124. FaxFreeSenderInformation(&personalProfile);
  125. //
  126. // display user info
  127. //
  128. CEdit* pEdit;
  129. DWORD dwSize = sizeof(s_PageInfo)/sizeof(s_PageInfo[0]);
  130. for(dw=0; dw < dwSize; ++dw)
  131. {
  132. //
  133. // set item value
  134. //
  135. pEdit = (CEdit*)GetDlgItem(s_PageInfo[dw].dwValueResId);
  136. ASSERTION(NULL != pEdit);
  137. pEdit->SetWindowText(m_tchStrArray[s_PageInfo[dw].eValStrNum]);
  138. pEdit->SetLimitText(80);
  139. //
  140. // Place the caret back at the beginning of the text
  141. //
  142. pEdit->SendMessage (EM_SETSEL, 0, 0);
  143. }
  144. m_editAddress.SetLimitText(ADDRESS_MAX_LEN);
  145. m_butOk.EnableWindow(FALSE);
  146. return TRUE;
  147. } // CUserInfoDlg::OnInitDialog
  148. void
  149. CUserInfoDlg::OnModify()
  150. {
  151. m_butOk.EnableWindow(TRUE);
  152. }
  153. void
  154. CUserInfoDlg::OnOK()
  155. {
  156. DBG_ENTER(TEXT("CUserInfoDlg::OnOK"));
  157. DWORD dwRes = Save();
  158. if(ERROR_SUCCESS != dwRes)
  159. {
  160. CALL_FAIL (GENERAL_ERR, TEXT("Save"),dwRes);
  161. PopupError(dwRes);
  162. return;
  163. }
  164. CFaxClientDlg::OnOK();
  165. }
  166. DWORD
  167. CUserInfoDlg::Save()
  168. /*++
  169. Routine name : CUserInfoDlg::Save
  170. Routine description:
  171. save the settings into the registry
  172. Author:
  173. Alexander Malysh (AlexMay), Feb, 2000
  174. Arguments:
  175. Return Value:
  176. Standard Win32 error code
  177. --*/
  178. {
  179. DWORD dwRes = ERROR_SUCCESS;
  180. DBG_ENTER(TEXT("CUserInfoDlg::Save"), dwRes);
  181. //
  182. // get user info from UI and save it into FAX_PERSONAL_PROFILE structure
  183. //
  184. CWnd *pWnd;
  185. DWORD dwLen;
  186. TCHAR tszText[512];
  187. DWORD dwSize = sizeof(s_PageInfo)/sizeof(s_PageInfo[0]);
  188. for(DWORD dw=0; dw < dwSize; ++dw)
  189. {
  190. //
  191. // get item value
  192. //
  193. pWnd = GetDlgItem(s_PageInfo[dw].dwValueResId);
  194. ASSERTION(NULL != pWnd);
  195. pWnd->GetWindowText(tszText, sizeof(tszText)/sizeof(tszText[0]));
  196. if(m_tchStrArray[s_PageInfo[dw].eValStrNum])
  197. {
  198. if(_tcscmp(m_tchStrArray[s_PageInfo[dw].eValStrNum], tszText) == 0)
  199. {
  200. continue;
  201. }
  202. }
  203. MemFree(m_tchStrArray[s_PageInfo[dw].eValStrNum]);
  204. m_tchStrArray[s_PageInfo[dw].eValStrNum] = NULL;
  205. dwLen = _tcslen(tszText);
  206. if(0 == dwLen)
  207. {
  208. continue;
  209. }
  210. //
  211. // copy string into FAX_PERSONAL_PROFILE structure
  212. //
  213. m_tchStrArray[s_PageInfo[dw].eValStrNum] = (TCHAR*)MemAlloc(sizeof(TCHAR)*(dwLen+1));
  214. if(!m_tchStrArray[s_PageInfo[dw].eValStrNum])
  215. {
  216. dwRes = ERROR_NOT_ENOUGH_MEMORY;
  217. CALL_FAIL (MEM_ERR, TEXT("MemAlloc"), dwRes);
  218. break;
  219. }
  220. _tcscpy(m_tchStrArray[s_PageInfo[dw].eValStrNum], tszText);
  221. }
  222. //
  223. // save user info into the registry
  224. //
  225. HRESULT hResult;
  226. if(ERROR_SUCCESS == dwRes)
  227. {
  228. hResult = FaxSetSenderInformation(&m_PersonalProfile);
  229. if(S_OK != hResult)
  230. {
  231. dwRes = hResult;
  232. CALL_FAIL (GENERAL_ERR, TEXT("FaxSetSenderInformation"), hResult);
  233. }
  234. }
  235. return dwRes;
  236. } // CUserInfoDlg::Save