|
|
/*++
Copyright (c) 1994-1998 Microsoft Corporation
Module Name :
defws.cpp
Abstract:
Default Web Site Dialog
Author:
Ronald Meijer (ronaldm)
Project:
Internet Services Manager
Revision History:
--*/
//
// Include Files
//
#include "stdafx.h"
#include "w3scfg.h"
#include "defws.h"
#include "dirbrows.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
//
// Directory Size Units
//
#define DS_UNITS MEGABYTE
//
// Default Web Site Property Page
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
IMPLEMENT_DYNCREATE(CDefWebSitePage, CInetPropertyPage)
CDefWebSitePage::CDefWebSitePage( IN CInetPropertySheet * pSheet ) /*++
Routine Description:
Constructor for WWW Default Web Site page
Arguments:
CInetPropertySheet * pSheet : Sheet object
Return Value:
N/A
--*/ : CInetPropertyPage(CDefWebSitePage::IDD, pSheet), m_ppropCompression(NULL), m_fFilterPathFound(FALSE), m_fCompressionDirectoryChanged(FALSE) { #if 0 // Keep Class Wizard happy
//{{AFX_DATA_INIT(CDefWebSitePage)
m_fEnableDynamic = FALSE; m_fEnableStatic = FALSE; m_strDirectory = _T(""); m_nUnlimited = -1; m_ilSize = 0L; //}}AFX_DATA_INIT
#endif // 0
}
CDefWebSitePage::~CDefWebSitePage() /*++
Routine Description:
Destructor
Arguments:
N/A
Return Value:
N/A
--*/ { }
void CDefWebSitePage::DoDataExchange( IN CDataExchange * pDX ) /*++
Routine Description:
Initialise/Store control data
Arguments:
CDataExchange * pDX - DDX/DDV control structure
Return Value:
None
--*/ { CInetPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDefWebSitePage)
DDX_Control(pDX, IDC_EDIT_COMPRESS_DIRECTORY, m_edit_Directory); DDX_Control(pDX, IDC_BUTTON_BROWSE, m_button_Browse); DDX_Control(pDX, IDC_STATIC_COMPRESS_MB, m_static_MB); DDX_Control(pDX, IDC_EDIT_COMPRESS_DIRECTORY_SIZE, m_edit_DirectorySize); DDX_Check(pDX, IDC_CHECK_DYNAMIC_COMPRESSION, m_fEnableDynamic); DDX_Check(pDX, IDC_CHECK_STATIC_COMPRESSION, m_fEnableStatic); DDX_Radio(pDX, IDC_RADIO_COMPRESS_UNLIMITED, m_nUnlimited); //}}AFX_DATA_MAP
if (HasCompression()) { if (!pDX->m_bSaveAndValidate || m_fEnableStatic) { DDX_Text(pDX, IDC_EDIT_COMPRESS_DIRECTORY, m_strDirectory); DDV_MaxChars(pDX, m_strDirectory, _MAX_PATH); }
if (pDX->m_bSaveAndValidate && m_fEnableStatic) { if (!IsFullyQualifiedPath(m_strDirectory)) { ::AfxMessageBox(IDS_ERR_INVALID_PATH); pDX->Fail(); }
//
// Perform some additional smart checking on the compression
// directory if the current machine is local, and the
// directory has changed
//
if (IsLocal() && m_fCompressionDirectoryChanged) { //
// Should exist on the local machine.
//
DWORD dwAttr = GetFileAttributes(m_strDirectory); if (dwAttr == 0xffffffff || (dwAttr & FILE_ATTRIBUTE_DIRECTORY) == 0 || IsNetworkPath(m_strDirectory) ) { ::AfxMessageBox(IDS_ERR_COMPRESS_DIRECTORY); pDX->Fail(); }
//
// Now check to make sure the volume is of the correct
// type.
//
DWORD dwFileSystemFlags;
if (::GetVolumeInformationSystemFlags( m_strDirectory, &dwFileSystemFlags )) { if (!(dwFileSystemFlags & FS_PERSISTENT_ACLS)) { //
// No ACLS
//
if (!NoYesMessageBox(IDS_NO_ACL_WARNING)) { pDX->Fail(); } }
if (dwFileSystemFlags & FS_VOL_IS_COMPRESSED || dwAttr & FILE_ATTRIBUTE_COMPRESSED) { //
// Compression cache directory is itself compressed
//
if (!NoYesMessageBox(IDS_COMPRESS_WARNING)) { pDX->Fail(); } } } } }
if (!pDX->m_bSaveAndValidate || (m_fEnableLimiting && m_fEnableStatic)) { DDX_Text(pDX, IDC_EDIT_COMPRESS_DIRECTORY_SIZE, m_ilSize); DDV_MinMaxLong(pDX, m_ilSize, 1, 1024L); } } }
//
// Message Map
//
BEGIN_MESSAGE_MAP(CDefWebSitePage, CInetPropertyPage) //{{AFX_MSG_MAP(CDefWebSitePage)
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse) ON_BN_CLICKED(IDC_RADIO_COMPRESS_LIMITED, OnRadioLimited) ON_BN_CLICKED(IDC_RADIO_COMPRESS_UNLIMITED, OnRadioUnlimited) ON_BN_CLICKED(IDC_CHECK_DYNAMIC_COMPRESSION, OnCheckDynamicCompression) ON_BN_CLICKED(IDC_CHECK_STATIC_COMPRESSION, OnCheckStaticCompression) ON_EN_CHANGE(IDC_EDIT_COMPRESS_DIRECTORY, OnChangeEditCompressDirectory) ON_WM_DESTROY() //}}AFX_MSG_MAP
ON_EN_CHANGE(IDC_EDIT_COMPRESS_DIRECTORY, OnItemChanged) ON_EN_CHANGE(IDC_EDIT_COMPRESS_DIRECTORY_SIZE, OnItemChanged)
END_MESSAGE_MAP()
void CDefWebSitePage::SetControlStates() /*++
Routine Description:
Enable/disable control states depending on the state of the dialog.
Arguments:
None
Return Value:
None
--*/ { GetDlgItem(IDC_STATIC_COMPRESS_DIRECTORY)->EnableWindow(m_fEnableStatic); m_edit_Directory.EnableWindow(m_fEnableStatic); m_edit_DirectorySize.EnableWindow(m_fEnableStatic && m_fEnableLimiting); m_static_MB.EnableWindow(m_fEnableStatic&& m_fEnableLimiting); GetDlgItem(IDC_RADIO_COMPRESS_LIMITED)->EnableWindow(m_fEnableStatic); GetDlgItem(IDC_RADIO_COMPRESS_UNLIMITED)->EnableWindow(m_fEnableStatic); GetDlgItem(IDC_STATIC_MAX_COMPRESS_SIZE)->EnableWindow(m_fEnableStatic);
//
// Browse on the local machine only
//
m_button_Browse.EnableWindow(IsLocal() && m_fEnableStatic); }
/* virtual */ HRESULT CDefWebSitePage::FetchLoadedValues() /*++
Routine Description: Move configuration data from sheet to dialog controls
Arguments:
None
Return Value:
HRESULT
--*/ { CError err;
ASSERT(m_ppropCompression == NULL);
m_ppropCompression = new CIISCompressionProps(GetServerName()); if (m_ppropCompression) { err = m_ppropCompression->LoadData(); m_fFilterPathFound = err.Succeeded(); if (err.Succeeded()) { m_fEnableDynamic = m_ppropCompression->m_fEnableDynamicCompression; m_fEnableStatic = m_ppropCompression->m_fEnableStaticCompression; m_fEnableLimiting = m_ppropCompression->m_fLimitDirectorySize; m_strDirectory = m_ppropCompression->m_strDirectory; m_nUnlimited = m_fEnableLimiting ? RADIO_LIMITED : RADIO_UNLIMITED;
if (m_ppropCompression->m_dwDirectorySize == 0xffffffff) { m_ilSize = DEF_MAX_COMPDIR_SIZE / DS_UNITS; } else { m_ilSize = m_ppropCompression->m_dwDirectorySize / DS_UNITS; } } else if (err.Win32Error() == ERROR_PATH_NOT_FOUND) { //
// Fail quietly
//
TRACEEOLID("No compression filters installed"); err.Reset(); } } else { err = ERROR_NOT_ENOUGH_MEMORY; }
return err; }
HRESULT CDefWebSitePage::SaveInfo() /*++
Routine Description:
Save the information on this property page
Arguments:
None
Return Value:
Error return code
--*/ { ASSERT(IsDirty());
TRACEEOLID("Saving W3 default web site page now...");
CError err;
BeginWaitCursor();
//
// Write Compression parms as well.
//
if (err.Succeeded() && HasCompression()) { ASSERT(m_ppropCompression); DWORD dwSize = m_ilSize * DS_UNITS;
m_ppropCompression->m_fEnableDynamicCompression = m_fEnableDynamic; m_ppropCompression->m_fEnableStaticCompression = m_fEnableStatic; m_ppropCompression->m_fLimitDirectorySize = m_fEnableLimiting; m_ppropCompression->m_strDirectory = m_strDirectory; m_ppropCompression->m_dwDirectorySize = dwSize; err = m_ppropCompression->WriteDirtyProps(); } EndWaitCursor();
if (err.Succeeded()) { m_fCompressionDirectoryChanged = FALSE; }
return err; }
//
// Message Handlers
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
BOOL CDefWebSitePage::OnInitDialog() /*++
Routine Description:
WM_INITDIALOG handler. Initialize the dialog.
Arguments:
None.
Return Value:
TRUE if focus is to be set automatically, FALSE if the focus is already set.
--*/ { CInetPropertyPage::OnInitDialog();
//
// Check to make sure compression is supported
//
for (UINT n = IDC_COMPRESS_FLAGS_FIRST; n <= IDC_COMPRESS_FLAGS_LAST; ++n) { GetDlgItem(n)->EnableWindow(HasCompression()); }
SetControlStates();
return TRUE; }
void CDefWebSitePage::OnItemChanged() /*++
Routine Description: Handle change in control data
Arguments:
None
Return Value:
None
--*/ { SetModified(TRUE); SetControlStates(); }
void CDefWebSitePage::OnButtonBrowse() /*++
Routine Description:
"Browse" button handler
Arguments:
None
Return Value:
None
--*/ { ASSERT(IsLocal()); CString str; m_edit_Directory.GetWindowText(str);
CDirBrowseDlg dlgBrowse(this, str); if (dlgBrowse.DoModal() == IDOK) { m_edit_Directory.SetWindowText(dlgBrowse.GetFullPath(str)); OnItemChanged(); } }
void CDefWebSitePage::OnChangeEditCompressDirectory() /*++
Routine Description:
Handle change in compression directory edit box.
Arguments:
None
Return Value:
None
--*/ { m_fCompressionDirectoryChanged = TRUE; OnItemChanged(); }
void CDefWebSitePage::OnRadioLimited() /*++
Routine Description:
'Limited' radio button handler
Arguments:
None
Return Value:
None
--*/ { if (!m_fEnableLimiting) { m_nUnlimited = RADIO_LIMITED; m_fEnableLimiting = TRUE; OnItemChanged();
m_edit_DirectorySize.SetSel(0, -1); m_edit_DirectorySize.SetFocus(); } }
void CDefWebSitePage::OnRadioUnlimited() /*++
Routine Description:
'Unlimited' radio button handler
Arguments:
None
Return Value:
None
--*/ { if (m_fEnableLimiting) { m_nUnlimited = RADIO_UNLIMITED; m_fEnableLimiting = FALSE; OnItemChanged(); } }
void CDefWebSitePage::OnCheckDynamicCompression() /*++
Routine Description:
"Enable Dynamic Compression' checkbox handler
Arguments:
None
Return Value:
None
--*/ { m_fEnableDynamic = !m_fEnableDynamic; OnItemChanged(); }
void CDefWebSitePage::OnCheckStaticCompression() /*++
Routine Description:
"Enable Dynamic Compression' checkbox handler
Arguments:
None
Return Value:
None
--*/ { m_fEnableStatic = !m_fEnableStatic; OnItemChanged(); if (m_fEnableStatic) { m_edit_Directory.SetSel(0, -1); m_edit_Directory.SetFocus(); } }
void CDefWebSitePage::OnDestroy() /*++
Routine Description:
WM_DESTROY handler. Clean up internal data
Arguments:
None
Return Value:
None
--*/ { CInetPropertyPage::OnDestroy(); SAFE_DELETE(m_ppropCompression); }
|