915 lines
28 KiB
C++
915 lines
28 KiB
C++
/*++
|
|
|
|
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();
|
|
}
|