DataProvidersOptions.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:11k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // DataProvidersOptions.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "calendardemo.h"
  22. #include "DataProvidersOptions.h"
  23. #include "CalendarDemoDoc.h"
  24. #ifdef _DEBUG
  25. #define new DEBUG_NEW
  26. #undef THIS_FILE
  27. static char THIS_FILE[] = __FILE__;
  28. #endif
  29. const CString cstrMemExt = _T(".xtp_cal");
  30. const CString cstrDbExt = _T(".mdb");
  31. extern BOOL IsFileExist(LPCTSTR pcszFile);
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CDataProvidersOptions dialog
  34. CDataProvidersOptions::CDataProvidersOptions(CWnd* pParent /*=NULL*/)
  35. : CDialog(CDataProvidersOptions::IDD, pParent)
  36. {
  37. //{{AFX_DATA_INIT(CDataProvidersOptions)
  38. //}}AFX_DATA_INIT
  39. m_bWarnIfExist = FALSE;
  40. m_strTitle = _T("Select data provider and data file");
  41. m_bOpenMode = FALSE;
  42. m_eMode = modeAll;
  43. m_bIsDPWasChanged = FALSE;
  44. m_bIsFileWasChanged = FALSE;
  45. m_bInitFromProfile = TRUE;
  46. m_bSaveToProfile = TRUE;
  47. }
  48. void CDataProvidersOptions::DoDataExchange(CDataExchange* pDX)
  49. {
  50. CDialog::DoDataExchange(pDX);
  51. //{{AFX_DATA_MAP(CDataProvidersOptions)
  52. DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP, m_ctrlUseMemDP);
  53. DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP, m_ctrlUseDBDP);
  54. DDX_Control(pDX, IDC_DPFOPT_USE_MAPI_DP, m_ctrlUseMAPIDP);
  55. DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_HELP, m_ctrlMemFileHelp);
  56. DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FRAME, m_ctrlMemFrame);
  57. DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FILE_BROWSE, m_ctrlMemFileBrowse);
  58. DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FILE_LABEL, m_ctrlMemFileLabel);
  59. DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FILE, m_ctrlMemFile);
  60. DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_HELP, m_ctrlDBFileHelp);
  61. DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FRAME, m_ctrlDBFrame);
  62. DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FILE_LABEL, m_ctrlDBFileLabel);
  63. DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FILE_BROWSE, m_ctrlDBFileBrowse);
  64. DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FILE, m_ctrlDBFile);
  65. DDX_Control(pDX, IDC_DPFOPT_USE_MAPI_DP_FRAME, m_ctrlMAPIFrame);
  66. DDX_Control(pDX, IDC_DPFOPT_USE_DB_MAPI_LABEL, m_ctrlMAPILabel);
  67. DDX_Control(pDX, IDOK, m_ctrlOK);
  68. //}}AFX_DATA_MAP
  69. }
  70. BEGIN_MESSAGE_MAP(CDataProvidersOptions, CDialog)
  71. //{{AFX_MSG_MAP(CDataProvidersOptions)
  72. ON_BN_CLICKED(IDC_DPFOPT_USE_MEM_DP_FILE_BROWSE, OnMemDPFileBrowse)
  73. ON_BN_CLICKED(IDC_DPFOPT_USE_DB_DP_FILE_BROWSE, OnDBDPFileBrowse)
  74. ON_BN_CLICKED(IDC_DPFOPT_USE_DB_DP, OnUseDBDP)
  75. ON_BN_CLICKED(IDC_DPFOPT_USE_MEM_DP, OnUseMemDP)
  76. ON_BN_CLICKED(IDC_DPFOPT_USE_MAPI_DP, OnUseMAPIDP)
  77. //}}AFX_MSG_MAP
  78. END_MESSAGE_MAP()
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CDataProvidersOptions message handlers
  81. BOOL CDataProvidersOptions::OnInitDialog() 
  82. {
  83. CDialog::OnInitDialog();
  84. SetWindowText(m_strTitle);
  85. if (m_bInitFromProfile)
  86. {
  87. m_strUseDP_Prev = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_opt);
  88. m_strMemDPFile_Prev = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_Mem_File_opt);
  89. m_ctrlMemFile.SetWindowText(m_strMemDPFile_Prev);
  90. m_strDBDPFile_Prev = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_DB_File_opt);
  91. m_ctrlDBFile.SetWindowText(m_strDBDPFile_Prev);
  92. if(m_strUseDP_Prev.CompareNoCase(cstrUseDP_Mem_optval) == 0) {
  93. OnUseMemDP();
  94. }
  95. else if(m_strUseDP_Prev.CompareNoCase(cstrUseDP_DB_optval) == 0) {
  96. OnUseDBDP();
  97. }
  98. else if(m_strUseDP_Prev.CompareNoCase(cstrUseDP_MAPI_optval) == 0) {
  99. OnUseMAPIDP();
  100. }
  101. else {
  102. ASSERT(m_strUseDP_Prev.IsEmpty());
  103. OnUseMemDP();
  104. }
  105. }
  106. else
  107. {
  108. int eDPType = CXTPCalendarControl::DataProviderTypeFromConStr(m_strConnectionString);
  109. CString strFile = CXTPCalendarControl::DataSourceFromConStr(m_strConnectionString);
  110. switch (eDPType)
  111. {
  112. case xtpCalendarDataProviderMemory:
  113. m_ctrlMemFile.SetWindowText(strFile);
  114. OnUseMemDP();
  115. break;
  116. case xtpCalendarDataProviderDatabase:
  117. m_ctrlDBFile.SetWindowText(strFile);
  118. OnUseDBDP();
  119. break;
  120. case xtpCalendarDataProviderMAPI:
  121. OnUseMAPIDP();
  122. break;
  123. default:
  124. OnUseMemDP();
  125. }
  126. }
  127. if (m_eMode == modeMemOnly) 
  128. {
  129. m_ctrlUseMemDP.EnableWindow(TRUE);
  130. m_ctrlUseDBDP.EnableWindow(FALSE);
  131. m_ctrlUseMAPIDP.EnableWindow(FALSE);
  132. }
  133. if (m_eMode == modeDBOnly) 
  134. {
  135. m_ctrlUseMemDP.EnableWindow(FALSE);
  136. m_ctrlUseDBDP.EnableWindow(TRUE);
  137. m_ctrlUseMAPIDP.EnableWindow(FALSE);
  138. }
  139. CenterWindow();
  140. return TRUE;  // return TRUE unless you set the focus to a control
  141.               // EXCEPTION: OCX Property Pages should return FALSE
  142. }
  143. BOOL CDataProvidersOptions::CheckExist(LPCTSTR pcszFile) 
  144. {
  145. if(m_bWarnIfExist && IsFileExist(pcszFile)) 
  146. {
  147. int nRes = AfxMessageBox(_T("The spesified file is exist.n Wold You like to overwrite it?"), MB_YESNO);
  148. return (nRes == IDYES);
  149. }
  150. return TRUE;
  151. }
  152. void CDataProvidersOptions::OnOK() 
  153. {
  154. CString strConn_Prev = m_strConnectionString;
  155. CString strDataFile;
  156. if(m_ctrlUseMemDP.GetCheck())
  157. {
  158. m_ctrlMemFile.GetWindowText(strDataFile);
  159. if(strDataFile.IsEmpty()) {
  160. AfxMessageBox(_T("Please enter Data file name."));
  161. m_ctrlMemFile.SetFocus();
  162. return;
  163. }
  164. if (strDataFile.Right(cstrMemExt.GetLength()).CompareNoCase(cstrMemExt))
  165. {
  166. CString strMsg;
  167. strMsg.Format(IDS_MSG_EXT, cstrMemExt);
  168. if (AfxMessageBox(strMsg, MB_YESNO) == IDYES)
  169. {
  170. strDataFile += cstrMemExt;
  171. m_ctrlMemFile.SetWindowText(strDataFile);
  172. }
  173. }
  174. if(!CheckExist(strDataFile)) {
  175. m_ctrlMemFile.SetFocus();
  176. return;
  177. }
  178.         
  179. //*******************
  180. m_strConnectionString.Format(_T("Provider=XML;Data Source='%s';"), strDataFile);
  181.         
  182. if (m_bSaveToProfile)
  183. {
  184. AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_opt, 
  185. cstrUseDP_Mem_optval);
  186. AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_Mem_File_opt, 
  187. strDataFile);
  188. }
  189. m_bIsDPWasChanged = m_strUseDP_Prev.CompareNoCase(cstrUseDP_Mem_optval);
  190. m_bIsFileWasChanged = m_strMemDPFile_Prev.CompareNoCase(strDataFile);
  191. else if(m_ctrlUseDBDP.GetCheck())
  192. {
  193. m_ctrlDBFile.GetWindowText(strDataFile);
  194. if(strDataFile.IsEmpty()) {
  195. AfxMessageBox(_T("Please enter Data file name."));
  196. m_ctrlDBFile.SetFocus();
  197. return;
  198. }
  199. if (strDataFile.Right(cstrDbExt.GetLength()).CompareNoCase(cstrDbExt))
  200. {
  201. CString strMsg;
  202. strMsg.Format(IDS_MSG_EXT, cstrDbExt);
  203. if (AfxMessageBox(strMsg, MB_YESNO) == IDYES)
  204. {
  205. strDataFile += cstrDbExt;
  206. m_ctrlDBFile.SetWindowText(strDataFile);
  207. }
  208. }
  209. if(!CheckExist(strDataFile)) {
  210. m_ctrlDBFile.SetFocus();
  211. return;
  212. }
  213. //*******************
  214. m_strConnectionString.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='%s';"), strDataFile);
  215.         
  216. if (m_bSaveToProfile)
  217. {
  218. AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_opt, 
  219. cstrUseDP_DB_optval);
  220. AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_DB_File_opt, 
  221. strDataFile);
  222. }
  223. m_bIsDPWasChanged = m_strUseDP_Prev.CompareNoCase(cstrUseDP_DB_optval);
  224. m_bIsFileWasChanged = m_strDBDPFile_Prev.CompareNoCase(strDataFile);
  225. else if(m_ctrlUseMAPIDP.GetCheck())
  226. {
  227. m_strConnectionString.Format(_T("Provider=MAPI;"));
  228.         
  229. if (m_bSaveToProfile)
  230. {
  231. AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_opt, 
  232. cstrUseDP_MAPI_optval);
  233. }
  234. m_bIsDPWasChanged = m_strUseDP_Prev.CompareNoCase(cstrUseDP_MAPI_optval);
  235. }
  236. else {
  237. ASSERT(FALSE);
  238. return;
  239. }
  240. //======================
  241. if (!m_bInitFromProfile)
  242. {
  243. m_bIsDPWasChanged = CXTPCalendarControl::DataProviderTypeFromConStr(strConn_Prev) != 
  244. CXTPCalendarControl::DataProviderTypeFromConStr(m_strConnectionString);
  245. m_bIsFileWasChanged = CXTPCalendarControl::DataSourceFromConStr(strConn_Prev) != 
  246. CXTPCalendarControl::DataSourceFromConStr(m_strConnectionString);
  247. }
  248. CDialog::OnOK();
  249. }
  250. CString CDataProvidersOptions::FileBrowse(const CString& strFileName, 
  251.   const CString& strDefExt,
  252.   const CString& strFilter) 
  253. {
  254. CFileDialog dlgFile(m_bOpenMode, strDefExt, strFileName,
  255. OFN_PATHMUSTEXIST | OFN_ENABLESIZING, 
  256. strFilter, this);
  257. dlgFile.m_ofn.lpstrTitle = _T("Select file");
  258. if(dlgFile.DoModal() == IDOK) {
  259. return dlgFile.GetPathName();
  260. }
  261. return _T("");
  262. }
  263. void CDataProvidersOptions::OnMemDPFileBrowse() 
  264. {
  265. CString strFileName;
  266. m_ctrlMemFile.GetWindowText(strFileName);
  267. strFileName = FileBrowse(strFileName, _T("xtp_cal"),
  268. _T("Calendar binary files(*.xtp_cal)|*.xtp_cal|All Files (*.*)|*.*||"));
  269. if(!strFileName.IsEmpty()) {
  270. m_ctrlMemFile.SetWindowText(strFileName);
  271. }
  272. }
  273. void CDataProvidersOptions::OnDBDPFileBrowse() 
  274. {
  275. CString strFileName;
  276. m_ctrlDBFile.GetWindowText(strFileName);
  277. strFileName = FileBrowse(strFileName, _T("mdb"), 
  278. _T("Calendar DB(*.mdb)|*.mdb|All Files (*.*)|*.*||"));
  279. if(!strFileName.IsEmpty()) {
  280. m_ctrlDBFile.SetWindowText(strFileName);
  281. }
  282. }
  283. void CDataProvidersOptions::OnUseMAPIDP() 
  284. {
  285. m_ctrlUseMemDP.SetCheck(0);
  286. m_ctrlUseDBDP.SetCheck(0);
  287. m_ctrlUseMAPIDP.SetCheck(1);
  288. EnableMemDPcontrols(FALSE);
  289. EnableDBDPcontrols(FALSE);
  290. EnableMAPIDPcontrols(TRUE);
  291. }
  292. void CDataProvidersOptions::OnUseDBDP() 
  293. {
  294. m_ctrlUseMemDP.SetCheck(0);
  295. m_ctrlUseDBDP.SetCheck(1);
  296. m_ctrlUseMAPIDP.SetCheck(0);
  297. EnableMemDPcontrols(FALSE);
  298. EnableDBDPcontrols(TRUE);
  299. EnableMAPIDPcontrols(FALSE);
  300. }
  301. void CDataProvidersOptions::OnUseMemDP() 
  302. {
  303. m_ctrlUseMemDP.SetCheck(1);
  304. m_ctrlUseDBDP.SetCheck(0);
  305. m_ctrlUseMAPIDP.SetCheck(0);
  306. EnableMemDPcontrols(TRUE);
  307. EnableDBDPcontrols(FALSE);
  308. EnableMAPIDPcontrols(FALSE);
  309. }
  310. void CDataProvidersOptions::OnCancel() 
  311. {
  312. // TODO: Add extra cleanup here
  313. CDialog::OnCancel();
  314. }
  315. void CDataProvidersOptions::EnableMAPIDPcontrols(BOOL bEnable)
  316. {
  317. m_ctrlMAPIFrame.EnableWindow(bEnable);
  318. m_ctrlMAPILabel.EnableWindow(bEnable);
  319. }
  320. void CDataProvidersOptions::EnableDBDPcontrols(BOOL bEnable)
  321. {
  322. m_ctrlDBFrame.EnableWindow(bEnable);
  323. m_ctrlDBFileLabel.EnableWindow(bEnable);
  324. m_ctrlDBFile.EnableWindow(bEnable);
  325. m_ctrlDBFileBrowse.EnableWindow(bEnable);
  326. m_ctrlDBFileHelp.EnableWindow(bEnable);
  327. }
  328. void CDataProvidersOptions::EnableMemDPcontrols(BOOL bEnable)
  329. {
  330. m_ctrlMemFrame.EnableWindow(bEnable);
  331. m_ctrlMemFileLabel.EnableWindow(bEnable);
  332. m_ctrlMemFile.EnableWindow(bEnable);
  333. m_ctrlMemFileBrowse.EnableWindow(bEnable);
  334. m_ctrlMemFileHelp.EnableWindow(bEnable);
  335. }
  336. BOOL CDataProvidersOptions::IsDPWasChanged() const
  337. {
  338. return m_bIsDPWasChanged;
  339. }
  340. BOOL CDataProvidersOptions::IsFileWasChanged() const
  341. {
  342. return m_bIsFileWasChanged;
  343. }