DragonNest/Third/XTToolkitPro/Samples/Calendar/CalendarDemo/DataProvidersOptions.cpp

412 lines
11 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
// DataProvidersOptions.cpp : implementation file
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "calendardemo.h"
#include "DataProvidersOptions.h"
#include "CalendarDemoDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const CString cstrMemExt = _T(".xtp_cal");
const CString cstrDbExt = _T(".mdb");
extern BOOL IsFileExist(LPCTSTR pcszFile);
/////////////////////////////////////////////////////////////////////////////
// CDataProvidersOptions dialog
CDataProvidersOptions::CDataProvidersOptions(CWnd* pParent /*=NULL*/)
: CDialog(CDataProvidersOptions::IDD, pParent)
{
//{{AFX_DATA_INIT(CDataProvidersOptions)
//}}AFX_DATA_INIT
m_bWarnIfExist = FALSE;
m_strTitle = _T("Select data provider and data file");
m_bOpenMode = FALSE;
m_eMode = modeAll;
m_bIsDPWasChanged = FALSE;
m_bIsFileWasChanged = FALSE;
m_bInitFromProfile = TRUE;
m_bSaveToProfile = TRUE;
}
void CDataProvidersOptions::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDataProvidersOptions)
DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP, m_ctrlUseMemDP);
DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP, m_ctrlUseDBDP);
DDX_Control(pDX, IDC_DPFOPT_USE_MAPI_DP, m_ctrlUseMAPIDP);
DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_HELP, m_ctrlMemFileHelp);
DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FRAME, m_ctrlMemFrame);
DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FILE_BROWSE, m_ctrlMemFileBrowse);
DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FILE_LABEL, m_ctrlMemFileLabel);
DDX_Control(pDX, IDC_DPFOPT_USE_MEM_DP_FILE, m_ctrlMemFile);
DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_HELP, m_ctrlDBFileHelp);
DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FRAME, m_ctrlDBFrame);
DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FILE_LABEL, m_ctrlDBFileLabel);
DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FILE_BROWSE, m_ctrlDBFileBrowse);
DDX_Control(pDX, IDC_DPFOPT_USE_DB_DP_FILE, m_ctrlDBFile);
DDX_Control(pDX, IDC_DPFOPT_USE_MAPI_DP_FRAME, m_ctrlMAPIFrame);
DDX_Control(pDX, IDC_DPFOPT_USE_DB_MAPI_LABEL, m_ctrlMAPILabel);
DDX_Control(pDX, IDOK, m_ctrlOK);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDataProvidersOptions, CDialog)
//{{AFX_MSG_MAP(CDataProvidersOptions)
ON_BN_CLICKED(IDC_DPFOPT_USE_MEM_DP_FILE_BROWSE, OnMemDPFileBrowse)
ON_BN_CLICKED(IDC_DPFOPT_USE_DB_DP_FILE_BROWSE, OnDBDPFileBrowse)
ON_BN_CLICKED(IDC_DPFOPT_USE_DB_DP, OnUseDBDP)
ON_BN_CLICKED(IDC_DPFOPT_USE_MEM_DP, OnUseMemDP)
ON_BN_CLICKED(IDC_DPFOPT_USE_MAPI_DP, OnUseMAPIDP)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDataProvidersOptions message handlers
BOOL CDataProvidersOptions::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowText(m_strTitle);
if (m_bInitFromProfile)
{
m_strUseDP_Prev = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_opt);
m_strMemDPFile_Prev = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_Mem_File_opt);
m_ctrlMemFile.SetWindowText(m_strMemDPFile_Prev);
m_strDBDPFile_Prev = AfxGetApp()->GetProfileString(cstrDP_Opt_section, cstrUseDP_DB_File_opt);
m_ctrlDBFile.SetWindowText(m_strDBDPFile_Prev);
if(m_strUseDP_Prev.CompareNoCase(cstrUseDP_Mem_optval) == 0) {
OnUseMemDP();
}
else if(m_strUseDP_Prev.CompareNoCase(cstrUseDP_DB_optval) == 0) {
OnUseDBDP();
}
else if(m_strUseDP_Prev.CompareNoCase(cstrUseDP_MAPI_optval) == 0) {
OnUseMAPIDP();
}
else {
ASSERT(m_strUseDP_Prev.IsEmpty());
OnUseMemDP();
}
}
else
{
int eDPType = CXTPCalendarControl::DataProviderTypeFromConStr(m_strConnectionString);
CString strFile = CXTPCalendarControl::DataSourceFromConStr(m_strConnectionString);
switch (eDPType)
{
case xtpCalendarDataProviderMemory:
m_ctrlMemFile.SetWindowText(strFile);
OnUseMemDP();
break;
case xtpCalendarDataProviderDatabase:
m_ctrlDBFile.SetWindowText(strFile);
OnUseDBDP();
break;
case xtpCalendarDataProviderMAPI:
OnUseMAPIDP();
break;
default:
OnUseMemDP();
}
}
if (m_eMode == modeMemOnly)
{
m_ctrlUseMemDP.EnableWindow(TRUE);
m_ctrlUseDBDP.EnableWindow(FALSE);
m_ctrlUseMAPIDP.EnableWindow(FALSE);
}
if (m_eMode == modeDBOnly)
{
m_ctrlUseMemDP.EnableWindow(FALSE);
m_ctrlUseDBDP.EnableWindow(TRUE);
m_ctrlUseMAPIDP.EnableWindow(FALSE);
}
CenterWindow();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDataProvidersOptions::CheckExist(LPCTSTR pcszFile)
{
if(m_bWarnIfExist && IsFileExist(pcszFile))
{
int nRes = AfxMessageBox(_T("The spesified file is exist.\n Wold You like to overwrite it?"), MB_YESNO);
return (nRes == IDYES);
}
return TRUE;
}
void CDataProvidersOptions::OnOK()
{
CString strConn_Prev = m_strConnectionString;
CString strDataFile;
if(m_ctrlUseMemDP.GetCheck())
{
m_ctrlMemFile.GetWindowText(strDataFile);
if(strDataFile.IsEmpty()) {
AfxMessageBox(_T("Please enter Data file name."));
m_ctrlMemFile.SetFocus();
return;
}
if (strDataFile.Right(cstrMemExt.GetLength()).CompareNoCase(cstrMemExt))
{
CString strMsg;
strMsg.Format(IDS_MSG_EXT, cstrMemExt);
if (AfxMessageBox(strMsg, MB_YESNO) == IDYES)
{
strDataFile += cstrMemExt;
m_ctrlMemFile.SetWindowText(strDataFile);
}
}
if(!CheckExist(strDataFile)) {
m_ctrlMemFile.SetFocus();
return;
}
//*******************
m_strConnectionString.Format(_T("Provider=XML;Data Source='%s';"), strDataFile);
if (m_bSaveToProfile)
{
AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_opt,
cstrUseDP_Mem_optval);
AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_Mem_File_opt,
strDataFile);
}
m_bIsDPWasChanged = m_strUseDP_Prev.CompareNoCase(cstrUseDP_Mem_optval);
m_bIsFileWasChanged = m_strMemDPFile_Prev.CompareNoCase(strDataFile);
}
else if(m_ctrlUseDBDP.GetCheck())
{
m_ctrlDBFile.GetWindowText(strDataFile);
if(strDataFile.IsEmpty()) {
AfxMessageBox(_T("Please enter Data file name."));
m_ctrlDBFile.SetFocus();
return;
}
if (strDataFile.Right(cstrDbExt.GetLength()).CompareNoCase(cstrDbExt))
{
CString strMsg;
strMsg.Format(IDS_MSG_EXT, cstrDbExt);
if (AfxMessageBox(strMsg, MB_YESNO) == IDYES)
{
strDataFile += cstrDbExt;
m_ctrlDBFile.SetWindowText(strDataFile);
}
}
if(!CheckExist(strDataFile)) {
m_ctrlDBFile.SetFocus();
return;
}
//*******************
m_strConnectionString.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='%s';"), strDataFile);
if (m_bSaveToProfile)
{
AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_opt,
cstrUseDP_DB_optval);
AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_DB_File_opt,
strDataFile);
}
m_bIsDPWasChanged = m_strUseDP_Prev.CompareNoCase(cstrUseDP_DB_optval);
m_bIsFileWasChanged = m_strDBDPFile_Prev.CompareNoCase(strDataFile);
}
else if(m_ctrlUseMAPIDP.GetCheck())
{
m_strConnectionString.Format(_T("Provider=MAPI;"));
if (m_bSaveToProfile)
{
AfxGetApp()->WriteProfileString(cstrDP_Opt_section, cstrUseDP_opt,
cstrUseDP_MAPI_optval);
}
m_bIsDPWasChanged = m_strUseDP_Prev.CompareNoCase(cstrUseDP_MAPI_optval);
}
else {
ASSERT(FALSE);
return;
}
//======================
if (!m_bInitFromProfile)
{
m_bIsDPWasChanged = CXTPCalendarControl::DataProviderTypeFromConStr(strConn_Prev) !=
CXTPCalendarControl::DataProviderTypeFromConStr(m_strConnectionString);
m_bIsFileWasChanged = CXTPCalendarControl::DataSourceFromConStr(strConn_Prev) !=
CXTPCalendarControl::DataSourceFromConStr(m_strConnectionString);
}
CDialog::OnOK();
}
CString CDataProvidersOptions::FileBrowse(const CString& strFileName,
const CString& strDefExt,
const CString& strFilter)
{
CFileDialog dlgFile(m_bOpenMode, strDefExt, strFileName,
OFN_PATHMUSTEXIST | OFN_ENABLESIZING,
strFilter, this);
dlgFile.m_ofn.lpstrTitle = _T("Select file");
if(dlgFile.DoModal() == IDOK) {
return dlgFile.GetPathName();
}
return _T("");
}
void CDataProvidersOptions::OnMemDPFileBrowse()
{
CString strFileName;
m_ctrlMemFile.GetWindowText(strFileName);
strFileName = FileBrowse(strFileName, _T("xtp_cal"),
_T("Calendar binary files(*.xtp_cal)|*.xtp_cal|All Files (*.*)|*.*||"));
if(!strFileName.IsEmpty()) {
m_ctrlMemFile.SetWindowText(strFileName);
}
}
void CDataProvidersOptions::OnDBDPFileBrowse()
{
CString strFileName;
m_ctrlDBFile.GetWindowText(strFileName);
strFileName = FileBrowse(strFileName, _T("mdb"),
_T("Calendar DB(*.mdb)|*.mdb|All Files (*.*)|*.*||"));
if(!strFileName.IsEmpty()) {
m_ctrlDBFile.SetWindowText(strFileName);
}
}
void CDataProvidersOptions::OnUseMAPIDP()
{
m_ctrlUseMemDP.SetCheck(0);
m_ctrlUseDBDP.SetCheck(0);
m_ctrlUseMAPIDP.SetCheck(1);
EnableMemDPcontrols(FALSE);
EnableDBDPcontrols(FALSE);
EnableMAPIDPcontrols(TRUE);
}
void CDataProvidersOptions::OnUseDBDP()
{
m_ctrlUseMemDP.SetCheck(0);
m_ctrlUseDBDP.SetCheck(1);
m_ctrlUseMAPIDP.SetCheck(0);
EnableMemDPcontrols(FALSE);
EnableDBDPcontrols(TRUE);
EnableMAPIDPcontrols(FALSE);
}
void CDataProvidersOptions::OnUseMemDP()
{
m_ctrlUseMemDP.SetCheck(1);
m_ctrlUseDBDP.SetCheck(0);
m_ctrlUseMAPIDP.SetCheck(0);
EnableMemDPcontrols(TRUE);
EnableDBDPcontrols(FALSE);
EnableMAPIDPcontrols(FALSE);
}
void CDataProvidersOptions::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
void CDataProvidersOptions::EnableMAPIDPcontrols(BOOL bEnable)
{
m_ctrlMAPIFrame.EnableWindow(bEnable);
m_ctrlMAPILabel.EnableWindow(bEnable);
}
void CDataProvidersOptions::EnableDBDPcontrols(BOOL bEnable)
{
m_ctrlDBFrame.EnableWindow(bEnable);
m_ctrlDBFileLabel.EnableWindow(bEnable);
m_ctrlDBFile.EnableWindow(bEnable);
m_ctrlDBFileBrowse.EnableWindow(bEnable);
m_ctrlDBFileHelp.EnableWindow(bEnable);
}
void CDataProvidersOptions::EnableMemDPcontrols(BOOL bEnable)
{
m_ctrlMemFrame.EnableWindow(bEnable);
m_ctrlMemFileLabel.EnableWindow(bEnable);
m_ctrlMemFile.EnableWindow(bEnable);
m_ctrlMemFileBrowse.EnableWindow(bEnable);
m_ctrlMemFileHelp.EnableWindow(bEnable);
}
BOOL CDataProvidersOptions::IsDPWasChanged() const
{
return m_bIsDPWasChanged;
}
BOOL CDataProvidersOptions::IsFileWasChanged() const
{
return m_bIsFileWasChanged;
}