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.
 
 
 
 
 
 

914 lines
28 KiB

/*++
Copyright (C) 1998-1999 Microsoft Corporation
Module Name:
fileprop.cpp
Abstract:
Implementation of the files property page.
--*/
#include "stdafx.h"
#include "smlogs.h"
#include "smcfgmsg.h"
#include "smlogqry.h"
#include "FileLogs.h"
#include "sqlprop.h"
#include "fileprop.h"
#include "globals.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
USE_HANDLE_MACROS("SMLOGCFG(fileprop.cpp)");
static ULONG
s_aulHelpIds[] =
{
IDC_FILES_COMMENT_EDIT, IDH_FILES_COMMENT_EDIT,
IDC_FILES_LOG_TYPE_COMBO, IDH_FILES_LOG_TYPE_COMBO,
IDC_CFG_BTN, IDH_CFG_BTN,
IDC_FILES_AUTO_SUFFIX_CHK, IDH_FILES_AUTO_SUFFIX_CHK,
IDC_FILES_SUFFIX_COMBO, IDH_FILES_SUFFIX_COMBO,
IDC_FILES_FIRST_SERIAL_EDIT,IDH_FILES_FIRST_SERIAL_EDIT,
IDC_FILES_SAMPLE_DISPLAY, IDH_FILES_SAMPLE_DISPLAY,
IDC_FILES_OVERWRITE_CHK, IDH_FILES_OVERWRITE_CHK,
0,0
};
/////////////////////////////////////////////////////////////////////////////
// CFilesProperty property page
IMPLEMENT_DYNCREATE(CFilesProperty, CSmPropertyPage)
CFilesProperty::CFilesProperty(MMC_COOKIE mmcCookie, LONG_PTR hConsole)
: CSmPropertyPage ( CFilesProperty::IDD, hConsole )
{
// ::OutputDebugStringA("\nCFilesProperty::CFilesProperty");
// save pointers from arg list
m_pLogQuery = reinterpret_cast <CSmLogQuery *>(mmcCookie);
m_dwSuffixValue = 0;
m_dwLogFileTypeValue = 0;
m_dwAppendMode = 0;
m_dwMaxSizeInternal = 0;
m_dwSubDlgFocusCtrl = 0;
// EnableAutomation();
//{{AFX_DATA_INIT(CFilesProperty)
m_iLogFileType = -1;
m_dwSuffix = -1;
m_dwSerialNumber = 1;
m_bAutoNameSuffix = FALSE;
m_bOverWriteFile = FALSE;
//}}AFX_DATA_INIT
}
CFilesProperty::CFilesProperty() : CSmPropertyPage ( CFilesProperty::IDD )
{
ASSERT (FALSE); // only the constructor with args above should be used
EnableAutomation();
m_dwSuffixValue = 0;
m_dwAppendMode = 0;
m_dwMaxSizeInternal = 0;
m_dwSubDlgFocusCtrl = 0;
// //{{AFX_DATA_INIT(CFilesProperty)
m_iLogFileType = -1;
m_dwSuffix = -1;
m_dwSerialNumber = 1;
m_bAutoNameSuffix = FALSE;
m_bOverWriteFile = FALSE;
// //}}AFX_DATA_INIT
// CString variables are empty on construction.
}
CFilesProperty::~CFilesProperty()
{
// ::OutputDebugStringA("\nCFilesProperty::~CFilesProperty");
}
void CFilesProperty::OnFinalRelease()
{
// When the last reference for an automation object is released
// OnFinalRelease is called. The base class will automatically
// deletes the object. Add additional cleanup required for your
// object before calling the base class.
CPropertyPage::OnFinalRelease();
}
void CFilesProperty::DoDataExchange(CDataExchange* pDX)
{
CString strTemp;
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFilesProperty)
DDX_Text(pDX, IDC_FILES_COMMENT_EDIT, m_strCommentText);
DDV_MaxChars(pDX, m_strCommentText, MAX_PATH);
DDX_CBIndex(pDX, IDC_FILES_LOG_TYPE_COMBO, m_iLogFileType);
DDX_CBIndex(pDX, IDC_FILES_SUFFIX_COMBO, m_dwSuffix);
DDX_Check(pDX, IDC_FILES_AUTO_SUFFIX_CHK, m_bAutoNameSuffix);
DDX_Check(pDX, IDC_FILES_OVERWRITE_CHK, m_bOverWriteFile);
ValidateTextEdit(pDX, IDC_FILES_FIRST_SERIAL_EDIT, 6, (DWORD *) & m_dwSerialNumber, eMinFirstSerial, eMaxFirstSerial);
//}}AFX_DATA_MAP
if ( pDX->m_bSaveAndValidate ) {
m_dwLogFileTypeValue = (DWORD)((CComboBox *)GetDlgItem(IDC_FILES_LOG_TYPE_COMBO))->GetItemData(m_iLogFileType);
if ( m_bAutoNameSuffix ) {
m_dwSuffixValue = (DWORD)((CComboBox *)GetDlgItem(IDC_FILES_SUFFIX_COMBO))->GetItemData(m_dwSuffix);
}
}
}
BEGIN_MESSAGE_MAP(CFilesProperty, CSmPropertyPage)
//{{AFX_MSG_MAP(CFilesProperty)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_FILES_AUTO_SUFFIX_CHK, OnAutoSuffixChk)
ON_BN_CLICKED(IDC_FILES_OVERWRITE_CHK, OnOverWriteChk)
ON_EN_CHANGE(IDC_FILES_COMMENT_EDIT, OnChangeFilesCommentEdit)
ON_EN_KILLFOCUS(IDC_FILES_COMMENT_EDIT, OnKillfocusFilesCommentEdit)
ON_EN_CHANGE(IDC_FILES_FIRST_SERIAL_EDIT, OnChangeFilesFirstSerialEdit)
ON_EN_KILLFOCUS(IDC_FILES_FIRST_SERIAL_EDIT, OnKillfocusFirstSerialEdit)
ON_CBN_SELENDOK(IDC_FILES_LOG_TYPE_COMBO, OnSelendokFilesLogFileTypeCombo)
ON_CBN_SELENDOK(IDC_FILES_SUFFIX_COMBO, OnSelendokFilesSuffixCombo)
ON_CBN_KILLFOCUS(IDC_FILES_SUFFIX_COMBO, OnKillfocusFilesSuffixCombo)
ON_CBN_KILLFOCUS(IDC_FILES_LOG_TYPE_COMBO, OnKillfocusFilesLogFileTypeCombo)
ON_BN_CLICKED(IDC_CFG_BTN, OnCfgBtn)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CFilesProperty, CSmPropertyPage)
//{{AFX_DISPATCH_MAP(CFilesProperty)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
// Note: we add support for IID_IFilesProperty to support typesafe binding
// from VBA. This IID must match the GUID that is attached to the
// dispinterface in the .ODL file.
// {65154EAB-BDBE-11D1-BF99-00C04F94A83A}
static const IID IID_IFilesProperty =
{ 0x65154eab, 0xbdbe, 0x11d1, { 0xbf, 0x99, 0x0, 0xc0, 0x4f, 0x94, 0xa8, 0x3a } };
BEGIN_INTERFACE_MAP(CFilesProperty, CSmPropertyPage)
INTERFACE_PART(CFilesProperty, IID_IFilesProperty, Dispatch)
END_INTERFACE_MAP()
void
CFilesProperty::EnableSerialNumber( void )
{
BOOL bEnable = ( SLF_NAME_NNNNNN == m_dwSuffixValue );
if ( bEnable )
bEnable = m_bAutoNameSuffix;
GetDlgItem(IDC_FILES_FIRST_SERIAL_CAPTION)->EnableWindow( bEnable );
GetDlgItem(IDC_FILES_FIRST_SERIAL_EDIT)->EnableWindow( bEnable );
}
BOOL
CFilesProperty::UpdateSampleFileName( void )
{
CString strCompositeName;
BOOL bIsValid = TRUE;
DWORD dwLocalSuffixValue = SLF_NAME_NONE;
ResourceStateManager rsm;
if (m_bAutoNameSuffix) {
dwLocalSuffixValue = m_dwSuffixValue;
}
CreateSampleFileName (
m_pLogQuery->GetLogName(),
m_pLogQuery->GetLogService()->GetMachineName(),
m_strFolderName,
m_strFileBaseName,
m_strSqlName,
dwLocalSuffixValue,
m_dwLogFileTypeValue,
m_dwSerialNumber,
strCompositeName );
m_strSampleFileName = strCompositeName;
// Or call UpdateData ( FALSE );
SetDlgItemText (IDC_FILES_SAMPLE_DISPLAY, strCompositeName);
// Clear the selection
((CEdit*)GetDlgItem( IDC_FILES_SAMPLE_DISPLAY ))->SetSel ( -1, FALSE );
if ( MAX_PATH <= m_strSampleFileName.GetLength() ) {
bIsValid = FALSE;
}
return bIsValid;
}
void
CFilesProperty::HandleLogTypeChange()
{
int nSel;
nSel = ((CComboBox *)GetDlgItem(IDC_FILES_LOG_TYPE_COMBO))->GetCurSel();
// nSel != m_iLogFileType determines data change.
if ((nSel != LB_ERR) && (nSel != m_iLogFileType)) {
UpdateData( TRUE );
if ( SLF_BIN_FILE != m_dwLogFileTypeValue
&& SLF_SEQ_TRACE_FILE != m_dwLogFileTypeValue )
{
GetDlgItem(IDC_FILES_OVERWRITE_CHK)->EnableWindow(FALSE);
} else {
GetDlgItem(IDC_FILES_OVERWRITE_CHK)->EnableWindow( TRUE );
}
OnOverWriteChk();
EnableSerialNumber();
UpdateSampleFileName();
SetModifiedPage(TRUE);
}
}
BOOL
CFilesProperty::IsValidLocalData()
{
BOOL bIsValid = TRUE;
CString strTest;
eValueRange eMaxFileSize;
ResourceStateManager rsm;
// assumes UpdateData has been called
if ( !UpdateSampleFileName() ) {
CString strMessage;
strMessage.LoadString ( IDS_FILE_ERR_NAMETOOLONG );
MessageBox ( strMessage, m_pLogQuery->GetLogName(), MB_OK | MB_ICONERROR);
bIsValid = FALSE;
m_dwSubDlgFocusCtrl = IDC_FILES_FILENAME_EDIT;
OnCfgBtn();
}
if ( bIsValid ) {
if ( m_strFolderName.IsEmpty() && (SLF_SQL_LOG != m_dwLogFileTypeValue)) {
CString strMessage;
strMessage.LoadString ( IDS_FILE_ERR_NOFOLDERNAME );
MessageBox ( strMessage, m_pLogQuery->GetLogName(), MB_OK | MB_ICONERROR);
bIsValid = FALSE;
m_dwSubDlgFocusCtrl = IDC_FILES_FOLDER_EDIT;
OnCfgBtn();
}
}
if ( bIsValid ) {
if ( SLF_SQL_LOG != m_dwLogFileTypeValue ) {
if ( m_strFileBaseName.IsEmpty() && !m_bAutoNameSuffix ) {
CString strMessage;
strMessage.LoadString ( IDS_FILE_ERR_NOFILENAME );
MessageBox ( strMessage, m_pLogQuery->GetLogName(), MB_OK | MB_ICONERROR);
bIsValid = FALSE;
m_dwSubDlgFocusCtrl = IDC_FILES_FILENAME_EDIT;
OnCfgBtn();
}
if ( bIsValid ) {
if ( !FileNameIsValid ( &m_strFileBaseName ) ) {
CString strMessage;
strMessage.LoadString (IDS_ERRMSG_INVALIDCHAR);
MessageBox( strMessage, m_pLogQuery->GetLogName(), MB_OK| MB_ICONERROR );
bIsValid = FALSE;
m_dwSubDlgFocusCtrl = IDC_FILES_FILENAME_EDIT;
OnCfgBtn();
}
}
} else {
ExtractDSN ( strTest );
if ( strTest.IsEmpty() ) {
CString strMessage;
strMessage.LoadString ( IDS_SQL_ERR_NODSN );
MessageBox ( strMessage, m_pLogQuery->GetLogName(), MB_OK | MB_ICONERROR);
bIsValid = FALSE;
m_dwSubDlgFocusCtrl = IDC_SQL_DSN_COMBO;
OnCfgBtn();
}
if ( bIsValid ) {
ExtractLogSetName ( strTest );
if ( strTest.IsEmpty() && !m_bAutoNameSuffix ) {
CString strMessage;
strMessage.LoadString ( IDS_SQL_ERR_NOLOGSETNAME );
MessageBox ( strMessage, m_pLogQuery->GetLogName(), MB_OK | MB_ICONERROR);
bIsValid = FALSE;
m_dwSubDlgFocusCtrl = IDC_SQL_LOG_SET_EDIT;
OnCfgBtn();
} else if ( !FileNameIsValid ( &strTest ) ){
CString strMessage;
strMessage.LoadString (IDS_ERRMSG_INVALIDCHAR);
MessageBox( strMessage, m_pLogQuery->GetLogName(), MB_OK| MB_ICONERROR );
bIsValid = FALSE;
m_dwSubDlgFocusCtrl = IDC_SQL_LOG_SET_EDIT;
OnCfgBtn();
}
}
}
}
// Validate max log file size based on log file type
if (bIsValid)
{
if ( SLQ_DISK_MAX_SIZE != m_dwMaxSizeInternal ) {
if ( SLF_BIN_FILE == m_dwLogFileTypeValue ) {
eMaxFileSize = eMaxCtrSeqBinFileLimit;
} else if ( SLF_SEQ_TRACE_FILE == m_dwLogFileTypeValue ) {
eMaxFileSize = eMaxTrcSeqBinFileLimit;
} else if ( SLF_SQL_LOG == m_dwLogFileTypeValue ) {
eMaxFileSize = eMaxSqlRecordsLimit;
} else {
eMaxFileSize = eMaxFileLimit;
}
bIsValid = ValidateDWordInterval(IDC_CFG_BTN,
m_pLogQuery->GetLogName(),
(long) m_dwMaxSizeInternal,
eMinFileLimit,
eMaxFileSize);
if ( !bIsValid ) {
if ( SLF_SQL_LOG == m_dwLogFileTypeValue ) {
m_dwSubDlgFocusCtrl = IDC_SQL_SIZE_LIMIT_EDIT;
} else {
m_dwSubDlgFocusCtrl = IDC_FILES_SIZE_LIMIT_EDIT;
}
OnCfgBtn();
}
}
}
if (bIsValid)
{
bIsValid = ValidateDWordInterval(IDC_FILES_FIRST_SERIAL_EDIT,
m_pLogQuery->GetLogName(),
(long) m_dwSerialNumber,
eMinFirstSerial,
eMaxFirstSerial);
}
return bIsValid;
}
/////////////////////////////////////////////////////////////////////////////
// CFilesProperty message handlers
void
CFilesProperty::OnCancel()
{
m_pLogQuery->SyncPropPageSharedData(); // Clear the memory shared between property pages.
}
BOOL
CFilesProperty::OnApply()
{
BOOL bContinue = TRUE;
ResourceStateManager rsm;
// load data from dialog
bContinue = UpdateData (TRUE);
if ( bContinue ) {
bContinue = IsValidData(m_pLogQuery, VALIDATE_APPLY );
}
if ( bContinue ) {
bContinue = SampleTimeIsLessThanSessionTime ( m_pLogQuery );
}
// pass data to the query object
if ( bContinue ) {
bContinue = UpdateSharedData( TRUE );
}
if ( bContinue ) {
m_pLogQuery->SetLogComment(m_strCommentText);
m_pLogQuery->SetFileNameParts(m_strFolderName, m_strFileBaseName);
m_pLogQuery->SetSqlName(m_strSqlName);
if ( TRUE == m_bAutoNameSuffix ) {
m_pLogQuery->SetFileNameAutoFormat(m_dwSuffixValue);
} else {
m_pLogQuery->SetFileNameAutoFormat(SLF_NAME_NONE);
}
m_pLogQuery->SetFileSerialNumber( m_dwSerialNumber );
m_pLogQuery->SetMaxSize(m_dwMaxSizeInternal);
// Save property page shared data.
m_pLogQuery->UpdatePropPageSharedData();
if ( LOWORD(m_dwLogFileTypeValue) == SLF_BIN_FILE
|| SLF_SEQ_TRACE_FILE == LOWORD(m_dwLogFileTypeValue) ) {
if ( m_bOverWriteFile ) {
m_pLogQuery->SetDataStoreAppendMode( SLF_DATA_STORE_OVERWRITE );
} else {
m_pLogQuery->SetDataStoreAppendMode( SLF_DATA_STORE_APPEND );
}
} else {
if ( SLF_SQL_LOG == LOWORD(m_dwLogFileTypeValue) ) {
m_pLogQuery->SetDataStoreAppendMode ( SLF_DATA_STORE_APPEND );
} else {
m_pLogQuery->SetDataStoreAppendMode ( SLF_DATA_STORE_OVERWRITE );
}
}
m_pLogQuery->SetLogFileType ( m_dwLogFileTypeValue );
if ( bContinue ) {
bContinue = Apply(m_pLogQuery);
}
bContinue = CPropertyPage::OnApply();
// Sync the service with changes.
if ( bContinue ) {
bContinue = UpdateService( m_pLogQuery, FALSE );
if ( bContinue ) {
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CWaitCursor WaitCursor;
// Service might have changed the serial number, so sync it.
// Don't sync data that is modified by other pages.
m_pLogQuery->SyncSerialNumberWithRegistry();
m_dwSerialNumber = m_pLogQuery->GetFileSerialNumber();
}
}
}
return bContinue;
}
BOOL CFilesProperty::OnInitDialog()
{
UINT nIndex;
CString strComboBoxString;
CComboBox *pCombo;
UINT nResult;
DWORD dwEntries;
PCOMBO_BOX_DATA_MAP pCbData;
ResourceStateManager rsm;
m_strLogName = m_pLogQuery->GetLogName();
m_pLogQuery->GetLogComment ( m_strCommentText );
// Why get max size internal when it is in the shared data?
// This should not be a problem, because only this page
// modifies the value, and GetMaxSize is only called in OnInitDialog.
m_dwMaxSizeInternal = m_pLogQuery->GetMaxSize();
// load log file type combo box
m_pLogQuery->GetLogFileType ( m_dwLogFileTypeValue );
m_pLogQuery->GetDataStoreAppendMode ( dwEntries );
m_bOverWriteFile = ( SLF_DATA_STORE_OVERWRITE == dwEntries );
if ( SLQ_TRACE_LOG == m_pLogQuery->GetLogType() ) {
dwEntries = dwTraceFileTypeComboEntries;
pCbData = (PCOMBO_BOX_DATA_MAP)&TraceFileTypeCombo[0];
} else {
dwEntries = dwFileTypeComboEntries;
pCbData = (PCOMBO_BOX_DATA_MAP)&FileTypeCombo[0];
}
pCombo = (CComboBox *)GetDlgItem(IDC_FILES_LOG_TYPE_COMBO);
pCombo->ResetContent();
for (nIndex = 0; nIndex < dwEntries; nIndex++) {
strComboBoxString.LoadString( pCbData[nIndex].nResId );
nResult = pCombo->InsertString (nIndex, (LPCWSTR)strComboBoxString);
ASSERT (nResult != CB_ERR);
nResult = pCombo->SetItemData (nIndex, (DWORD)pCbData[nIndex].nData);
ASSERT (nResult != CB_ERR);
// set log type in combo box here
if (m_dwLogFileTypeValue == (int)(pCbData[nIndex].nData)) {
m_iLogFileType = nIndex;
nResult = pCombo->SetCurSel(nIndex);
ASSERT (nResult != CB_ERR);
if ( SLF_BIN_FILE != m_dwLogFileTypeValue
&& SLF_SEQ_TRACE_FILE != m_dwLogFileTypeValue )
{
GetDlgItem(IDC_FILES_OVERWRITE_CHK)->EnableWindow(FALSE);
} else {
GetDlgItem(IDC_FILES_OVERWRITE_CHK)->EnableWindow( TRUE );
}
}
}
m_pLogQuery->GetFileNameParts ( m_strFolderName, m_strFileBaseName );
m_pLogQuery->GetSqlName ( m_strSqlName );
m_dwSerialNumber = m_pLogQuery->GetFileSerialNumber();
// load the filename suffix combo box here
m_dwSuffixValue = m_pLogQuery->GetFileNameAutoFormat();
pCombo = (CComboBox *)GetDlgItem(IDC_FILES_SUFFIX_COMBO);
pCombo->ResetContent();
for (nIndex = 0; nIndex < dwFileNameSuffixComboEntries; nIndex++) {
strComboBoxString.LoadString ( FileNameSuffixCombo[nIndex].nResId );
nResult = pCombo->InsertString (nIndex, (LPCWSTR)strComboBoxString);
ASSERT (nResult != CB_ERR);
pCombo->SetItemData (nIndex, (DWORD)FileNameSuffixCombo[nIndex].nData);
ASSERT (nResult != CB_ERR);
// set the correct entry in the combo box here
if (m_dwSuffixValue == (int)(FileNameSuffixCombo[nIndex].nData)) {
m_dwSuffix = nIndex;
nResult = pCombo->SetCurSel(nIndex);
ASSERT (nResult != CB_ERR);
}
if ( SLF_NAME_NNNNNN == (int)(FileNameSuffixCombo[nIndex].nData ) ) {
m_dwSuffixIndexNNNNNN = nIndex;
}
}
if ( SLF_NAME_NONE == m_dwSuffixValue ) {
// then the combo box will not have been selected so:
pCombo->SetCurSel(m_dwSuffixIndexNNNNNN);
// disable
pCombo->EnableWindow(FALSE);
// and clear the check box
m_bAutoNameSuffix = FALSE;
} else {
m_bAutoNameSuffix = TRUE;
}
// set the check box in UpdateData ( FALSE );
// update the dialog box
CSmPropertyPage::OnInitDialog();
SetHelpIds ( (DWORD*)&s_aulHelpIds );
EnableSerialNumber();
UpdateSampleFileName();
SetModifiedPage( FALSE );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void
CFilesProperty::OnAutoSuffixChk()
{
UpdateData( TRUE );
// enable the suffix combo window based on the state of the button
GetDlgItem(IDC_FILES_SUFFIX_COMBO)->EnableWindow (m_bAutoNameSuffix);
if (m_bAutoNameSuffix) {
if ( SLF_NAME_NONE == m_dwSuffixValue ) {
// then initialize a new default
// select the default serial numbering
((CComboBox *)(GetDlgItem(IDC_FILES_SUFFIX_COMBO)))->SetCurSel( m_dwSuffixIndexNNNNNN );
m_dwSuffixValue = SLF_NAME_NNNNNN;
}
}
EnableSerialNumber();
UpdateSampleFileName();
// This method is only called when the checkbox value has changed.
SetModifiedPage(TRUE);
}
void
CFilesProperty::OnOverWriteChk()
{
BOOL bOldValue;
bOldValue = m_bOverWriteFile;
UpdateData(TRUE);
if (bOldValue != m_bOverWriteFile) {
SetModifiedPage(TRUE);
}
}
void CFilesProperty::OnChangeFilesFirstSerialEdit()
{
DWORD dwOldValue;
dwOldValue = m_dwSerialNumber;
UpdateData( TRUE );
UpdateSampleFileName();
if (dwOldValue != m_dwSerialNumber) {
SetModifiedPage(TRUE);
}
}
void CFilesProperty::OnChangeFilesCommentEdit()
{
CString strOldText;
strOldText = m_strCommentText;
UpdateData ( TRUE );
if ( 0 != strOldText.Compare ( m_strCommentText ) ) {
SetModifiedPage(TRUE);
}
}
void CFilesProperty::OnSelendokFilesSuffixCombo()
{
int nSel;
nSel = ((CComboBox *)GetDlgItem(IDC_FILES_SUFFIX_COMBO))->GetCurSel();
// Check of m_dwSuffix ensures that the value has changed.
if ( LB_ERR != nSel && m_dwSuffix != nSel ) {
UpdateData ( TRUE );
EnableSerialNumber();
/*
if (m_dwLogFileTypeValue == SLF_BIN_FILE) {
GetDlgItem(IDC_FILES_OVERWRITE_CHK)->EnableWindow(
m_dwSuffixValue == SLF_NAME_NNNNNN ? FALSE : TRUE);
}
else {
GetDlgItem(IDC_FILES_OVERWRITE_CHK)->EnableWindow(FALSE);
}
*/
UpdateSampleFileName();
SetModifiedPage(TRUE);
}
}
void
CFilesProperty::OnSelendokFilesLogFileTypeCombo()
{
HandleLogTypeChange();
return;
}
void CFilesProperty::OnKillfocusFilesCommentEdit()
{
CString strOldText;
strOldText = m_strCommentText;
UpdateData ( TRUE );
if ( 0 != strOldText.Compare ( m_strCommentText ) ) {
SetModifiedPage(TRUE);
}
}
void CFilesProperty::OnKillfocusFirstSerialEdit()
{
DWORD dwOldValue;
dwOldValue = m_dwSerialNumber;
UpdateData ( TRUE );
if (dwOldValue != m_dwSerialNumber) {
SetModifiedPage(TRUE);
}
}
void CFilesProperty::OnKillfocusFilesSuffixCombo()
{
int nSel;
nSel = ((CComboBox *)GetDlgItem(IDC_FILES_SUFFIX_COMBO))->GetCurSel();
if ((nSel != LB_ERR) && (nSel != m_dwSuffix)) {
SetModifiedPage(TRUE);
}
}
void CFilesProperty::OnKillfocusFilesLogFileTypeCombo()
{
int nSel;
nSel = ((CComboBox *)GetDlgItem(IDC_FILES_LOG_TYPE_COMBO))->GetCurSel();
if ((nSel != LB_ERR) && (nSel != m_iLogFileType)) {
SetModifiedPage(TRUE);
}
}
void CFilesProperty::PostNcDestroy()
{
// delete this;
CPropertyPage::PostNcDestroy();
}
BOOL
CFilesProperty::UpdateSharedData( BOOL bUpdateModel )
{
BOOL bContinue = TRUE;
if ( SLQ_AUTO_MODE_SIZE == m_SharedData.stiStopTime.dwAutoMode ) {
CString strMsg;
if ( SLF_BIN_CIRC_FILE == m_dwLogFileTypeValue
|| SLQ_DISK_MAX_SIZE == m_dwMaxSizeInternal ) {
if ( SLF_BIN_CIRC_FILE == m_dwLogFileTypeValue ) {
strMsg.LoadString ( IDS_FILE_CIRC_SET_MANUAL_STOP );
} else {
ASSERT( SLQ_DISK_MAX_SIZE == m_dwMaxSizeInternal );
strMsg.LoadString ( IDS_FILE_MAX_SET_MANUAL_STOP );
}
MessageBox( strMsg, m_pLogQuery->GetLogName(), MB_OK | MB_ICONINFORMATION);
m_SharedData.stiStopTime.dwAutoMode = SLQ_AUTO_MODE_NONE;
if ( bUpdateModel ) {
SLQ_TIME_INFO slqTime;
memset (&slqTime, 0, sizeof(slqTime));
slqTime.wTimeType = SLQ_TT_TTYPE_STOP;
slqTime.wDataType = SLQ_TT_DTYPE_DATETIME;
slqTime.dwAutoMode = SLQ_AUTO_MODE_NONE;
bContinue = m_pLogQuery->SetLogTime ( &slqTime, (DWORD)slqTime.wTimeType );
}
}
}
m_SharedData.strFileBaseName = m_strFileBaseName;
m_SharedData.strFolderName = m_strFolderName;
m_SharedData.strSqlName = m_strSqlName;
m_SharedData.dwLogFileType = m_dwLogFileTypeValue;
if ( TRUE == m_bAutoNameSuffix ) {
m_SharedData.dwSuffix = m_dwSuffixValue;
} else {
m_SharedData.dwSuffix = SLF_NAME_NONE;
}
m_SharedData.dwSerialNumber = m_dwSerialNumber;
m_SharedData.dwMaxFileSize = m_dwMaxSizeInternal;
m_pLogQuery->SetPropPageSharedData ( &m_SharedData );
return bContinue;
}
BOOL CFilesProperty::OnKillActive()
{
BOOL bContinue = TRUE;
ResourceStateManager rsm;
bContinue = CPropertyPage::OnKillActive();
if ( bContinue ) {
bContinue = IsValidData(m_pLogQuery, VALIDATE_FOCUS );
}
if ( bContinue ) {
m_SharedData.dwLogFileType = m_dwLogFileTypeValue;
bContinue = UpdateSharedData( FALSE );
}
if ( bContinue ) {
SetIsActive ( FALSE );
}
return bContinue;
}
BOOL CFilesProperty::OnSetActive()
{
BOOL bReturn;
bReturn = CSmPropertyPage::OnSetActive();
if ( bReturn ) {
m_pLogQuery->GetPropPageSharedData ( &m_SharedData );
UpdateData( FALSE );
}
return bReturn;
}
DWORD
CFilesProperty::ExtractDSN ( CString& rstrDSN )
{
DWORD dwStatus = ERROR_SUCCESS;
INT iTotalLength;
INT iRightLength;
// Format string: "SQL:%s!%s"
MFC_TRY
iTotalLength = m_strSqlName.GetLength();
iRightLength = iTotalLength - m_strSqlName.Find(L"!");
rstrDSN = m_strSqlName.Mid ( 4, iTotalLength - iRightLength - 4 );
MFC_CATCH_DWSTATUS;
return dwStatus;
}
DWORD
CFilesProperty::ExtractLogSetName ( CString& rstrLogSetName )
{
DWORD dwStatus = ERROR_SUCCESS;
// Format string: "SQL:%s!%s"
MFC_TRY
rstrLogSetName = m_strSqlName.Right(m_strSqlName.GetLength() - m_strSqlName.Find(L"!") - 1);
MFC_CATCH_DWSTATUS;
return dwStatus;
}
void CFilesProperty::OnCfgBtn()
{
DWORD dwStatus = ERROR_SUCCESS;
CFileLogs FilelogsDlg;
CSqlProp SqlLogDlg;
CString strTempBaseName;
CString strTempFolderName;
CString strTempSqlName;
DWORD dwTempMaxSize;
if ( SLF_SQL_LOG == m_dwLogFileTypeValue ){
SqlLogDlg.m_pLogQuery = m_pLogQuery;
SqlLogDlg.m_dwLogFileTypeValue = m_dwLogFileTypeValue;
SqlLogDlg.m_bAutoNameSuffix = m_bAutoNameSuffix;
//Extract the DSN and logset name from the formatted Sql Log name
dwStatus = ExtractDSN ( SqlLogDlg.m_strDSN );
dwStatus = ExtractLogSetName ( SqlLogDlg.m_strLogSetName );
// Default the log set name to the base file name.
if (SqlLogDlg.m_strLogSetName.IsEmpty() ) {
SqlLogDlg.m_strLogSetName = m_strFileBaseName;
}
// Todo: Handle bad status
SqlLogDlg.m_dwFocusControl = m_dwSubDlgFocusCtrl;
SqlLogDlg.m_dwMaxSizeInternal = m_dwMaxSizeInternal;
SqlLogDlg.SetContextHelpFilePath(GetContextHelpFilePath());
if ( IDOK == SqlLogDlg.DoModal() ) {
strTempSqlName = m_strSqlName;
dwTempMaxSize = m_dwMaxSizeInternal;
m_strSqlName = SqlLogDlg.m_SqlFormattedLogName;
m_dwMaxSizeInternal = SqlLogDlg.m_dwMaxSizeInternal;
if ( 0 != strTempSqlName.CompareNoCase ( m_strSqlName )
|| m_dwMaxSizeInternal != dwTempMaxSize )
{
SetModifiedPage(TRUE);
}
}
}else{
FilelogsDlg.m_pLogQuery = m_pLogQuery;
FilelogsDlg.m_dwLogFileTypeValue = m_dwLogFileTypeValue;
FilelogsDlg.m_strFolderName = m_strFolderName;
FilelogsDlg.m_strFileBaseName = m_strFileBaseName;
FilelogsDlg.m_dwMaxSizeInternal = m_dwMaxSizeInternal;
FilelogsDlg.m_bAutoNameSuffix = m_bAutoNameSuffix;
FilelogsDlg.SetContextHelpFilePath(GetContextHelpFilePath());
FilelogsDlg.m_dwFocusControl = m_dwSubDlgFocusCtrl;
if ( IDOK == FilelogsDlg.DoModal() ) {
strTempFolderName = m_strFolderName;
strTempBaseName = m_strFileBaseName;
dwTempMaxSize = m_dwMaxSizeInternal;
m_strFolderName = FilelogsDlg.m_strFolderName ;
m_strFileBaseName = FilelogsDlg.m_strFileBaseName;
m_dwMaxSizeInternal = FilelogsDlg.m_dwMaxSizeInternal;
if ( 0 != strTempFolderName.CompareNoCase ( m_strFolderName )
|| 0 != strTempBaseName.CompareNoCase ( m_strFileBaseName )
|| m_dwMaxSizeInternal != dwTempMaxSize )
{
SetModifiedPage(TRUE);
}
}
}
m_dwSubDlgFocusCtrl = 0;
UpdateSampleFileName();
}