821 lines
17 KiB
C++
821 lines
17 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-1998 Microsoft Corporation
|
||
|
|
||
|
Module Name :
|
||
|
defws.cpp
|
||
|
|
||
|
Abstract:
|
||
|
Default Web Site Dialog
|
||
|
|
||
|
Author:
|
||
|
Ronald Meijer (ronaldm)
|
||
|
Sergei Antonov (sergeia)
|
||
|
|
||
|
Project:
|
||
|
Internet Services Manager
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
//
|
||
|
// Include Files
|
||
|
//
|
||
|
#include "stdafx.h"
|
||
|
#include "resource.h"
|
||
|
#include "common.h"
|
||
|
#include "inetmgrapp.h"
|
||
|
#include "inetprop.h"
|
||
|
#include "shts.h"
|
||
|
#include "w3sht.h"
|
||
|
#include "defws.h"
|
||
|
#include "mime.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_ppropMimeTypes(NULL),
|
||
|
m_fFilterPathFound(FALSE),
|
||
|
m_fCompressionDirectoryChanged(FALSE),
|
||
|
m_fCompatMode(FALSE)
|
||
|
{
|
||
|
#if 0 // Keep Class Wizard happy
|
||
|
//{{AFX_DATA_INIT(CDefWebSitePage)
|
||
|
m_fEnableDynamic = FALSE;
|
||
|
m_fEnableStatic = FALSE;
|
||
|
m_fCompatMode = FALSE;
|
||
|
m_strDirectory = _T("");
|
||
|
m_nUnlimited = -1;
|
||
|
m_ilSize = 0L;
|
||
|
//}}AFX_DATA_INIT
|
||
|
#endif // 0
|
||
|
m_fInitCompatMode = m_fCompatMode;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
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_Check(pDX, IDC_COMPAT_MODE, m_fCompatMode);
|
||
|
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 (!PathIsValid(m_strDirectory) || !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_BN_CLICKED(IDC_BUTTON_FILE_TYPES, OnButtonFileTypes)
|
||
|
ON_BN_CLICKED(IDC_COMPAT_MODE, OnCheckCompatMode)
|
||
|
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(QueryAuthInfo());
|
||
|
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;
|
||
|
{
|
||
|
TCHAR buf[MAX_PATH];
|
||
|
ExpandEnvironmentStrings(m_ppropCompression->m_strDirectory, buf, MAX_PATH);
|
||
|
m_strDirectory = buf;
|
||
|
}
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
ASSERT(m_ppropMimeTypes == NULL);
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
if (NULL != (m_ppropMimeTypes = new CMimeTypes(
|
||
|
QueryAuthInfo(), CMetabasePath(TRUE, SZ_MBN_MIMEMAP))))
|
||
|
{
|
||
|
err = m_ppropMimeTypes->LoadData();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
err = ERROR_NOT_ENOUGH_MEMORY;
|
||
|
}
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
m_strlMimeTypes = m_ppropMimeTypes->m_strlMimeTypes;
|
||
|
if (GetSheet()->QueryMajorVersion() >= 6)
|
||
|
{
|
||
|
CMetaKey mk(QueryAuthInfo(), QueryMetaPath(), METADATA_PERMISSION_READ);
|
||
|
err = mk.QueryResult();
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
err = mk.QueryValue(MD_GLOBAL_STANDARD_APP_MODE_ENABLED, m_fCompatMode);
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
m_fInitCompatMode = m_fCompatMode;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_fInitCompatMode = m_fCompatMode = TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
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();
|
||
|
|
||
|
if (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;
|
||
|
// TODO: Replace back %WINDIR% or another system settings in path
|
||
|
m_ppropCompression->m_strDirectory = m_strDirectory;
|
||
|
m_ppropCompression->m_dwDirectorySize = dwSize;
|
||
|
err = m_ppropCompression->WriteDirtyProps();
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
m_fCompressionDirectoryChanged = FALSE;
|
||
|
}
|
||
|
}
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
m_ppropMimeTypes->m_strlMimeTypes = m_strlMimeTypes;
|
||
|
err = m_ppropMimeTypes->WriteDirtyProps();
|
||
|
if (err.Succeeded() && GetSheet()->QueryMajorVersion() >= 6)
|
||
|
{
|
||
|
CMetaKey mk(QueryAuthInfo(), QueryMetaPath(), METADATA_PERMISSION_WRITE);
|
||
|
err = mk.QueryResult();
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
err = mk.SetValue(MD_GLOBAL_STANDARD_APP_MODE_ENABLED, m_fCompatMode);
|
||
|
if (err.Succeeded() && m_fCompatMode != m_fInitCompatMode)
|
||
|
{
|
||
|
GetSheet()->SetRestartRequired(TRUE);
|
||
|
// We don't need to save this parameter to sheet,
|
||
|
// it is important to App Protection combo only, and
|
||
|
// this combo is disabled for Master props, so it doesn't matter.
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
EndWaitCursor();
|
||
|
|
||
|
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
|
||
|
//
|
||
|
GetDlgItem(IDC_STATIC_COMPRESS_GROUP)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_CHECK_DYNAMIC_COMPRESSION)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_CHECK_STATIC_COMPRESSION)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_RADIO_COMPRESS_UNLIMITED)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_RADIO_COMPRESS_LIMITED)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_EDIT_COMPRESS_DIRECTORY)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_STATIC_MAX_COMPRESS_SIZE)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_STATIC_COMPRESS_DIRECTORY)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_STATIC_COMPRESS_MB)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_EDIT_COMPRESS_DIRECTORY_SIZE)->EnableWindow(HasCompression());
|
||
|
GetDlgItem(IDC_COMPAT_MODE)->EnableWindow(GetSheet()->QueryMajorVersion() >= 6);
|
||
|
|
||
|
SetControlStates();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnItemChanged()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Handle change in control data
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
SetModified(TRUE);
|
||
|
SetControlStates();
|
||
|
}
|
||
|
|
||
|
|
||
|
static int CALLBACK
|
||
|
FileChooserCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
|
||
|
{
|
||
|
CDefWebSitePage * pThis = (CDefWebSitePage *)lpData;
|
||
|
ASSERT(pThis != NULL);
|
||
|
return pThis->BrowseForFolderCallback(hwnd, uMsg, lParam);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
CDefWebSitePage::BrowseForFolderCallback(HWND hwnd, UINT uMsg, LPARAM lParam)
|
||
|
{
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case BFFM_INITIALIZED:
|
||
|
ASSERT(m_pPathTemp != NULL);
|
||
|
if (::PathIsNetworkPath(m_pPathTemp))
|
||
|
return 0;
|
||
|
while (!::PathIsDirectory(m_pPathTemp))
|
||
|
{
|
||
|
if (0 == ::PathRemoveFileSpec(m_pPathTemp) && !::PathIsRoot(m_pPathTemp))
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
DWORD attr = GetFileAttributes(m_pPathTemp);
|
||
|
if ((attr & FILE_ATTRIBUTE_READONLY) == 0)
|
||
|
break;
|
||
|
}
|
||
|
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)m_pPathTemp);
|
||
|
break;
|
||
|
case BFFM_SELCHANGED:
|
||
|
{
|
||
|
LPITEMIDLIST pidl = (LPITEMIDLIST)lParam;
|
||
|
TCHAR path[MAX_PATH];
|
||
|
if (SHGetPathFromIDList(pidl, path))
|
||
|
{
|
||
|
::SendMessage(hwnd, BFFM_ENABLEOK, 0, !PathIsNetworkPath(path));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case BFFM_VALIDATEFAILED:
|
||
|
break;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnButtonBrowse()
|
||
|
{
|
||
|
ASSERT(IsLocal());
|
||
|
BOOL bRes = FALSE;
|
||
|
HRESULT hr;
|
||
|
CString str;
|
||
|
m_edit_Directory.GetWindowText(str);
|
||
|
|
||
|
if (SUCCEEDED(hr = CoInitialize(NULL)))
|
||
|
{
|
||
|
LPITEMIDLIST pidl = NULL;
|
||
|
if (SUCCEEDED(SHGetFolderLocation(NULL, CSIDL_DRIVES, NULL, 0, &pidl)))
|
||
|
{
|
||
|
LPITEMIDLIST pidList = NULL;
|
||
|
BROWSEINFO bi;
|
||
|
TCHAR buf[MAX_PATH];
|
||
|
ZeroMemory(&bi, sizeof(bi));
|
||
|
int drive = PathGetDriveNumber(str);
|
||
|
if (GetDriveType(PathBuildRoot(buf, drive)) == DRIVE_FIXED)
|
||
|
{
|
||
|
StrCpy(buf, str);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
buf[0] = 0;
|
||
|
}
|
||
|
|
||
|
bi.hwndOwner = m_hWnd;
|
||
|
bi.pidlRoot = pidl;
|
||
|
bi.pszDisplayName = m_pPathTemp = buf;
|
||
|
bi.lpszTitle = NULL;
|
||
|
bi.ulFlags |= BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS/* | BIF_EDITBOX*/;
|
||
|
bi.lpfn = FileChooserCallback;
|
||
|
bi.lParam = (LPARAM)this;
|
||
|
|
||
|
pidList = SHBrowseForFolder(&bi);
|
||
|
if ( pidList != NULL
|
||
|
&& SHGetPathFromIDList(pidList, buf)
|
||
|
)
|
||
|
{
|
||
|
str = buf;
|
||
|
bRes = TRUE;
|
||
|
}
|
||
|
IMalloc * pMalloc;
|
||
|
VERIFY(SUCCEEDED(SHGetMalloc(&pMalloc)));
|
||
|
if (pidl != NULL)
|
||
|
pMalloc->Free(pidl);
|
||
|
pMalloc->Release();
|
||
|
}
|
||
|
CoUninitialize();
|
||
|
}
|
||
|
|
||
|
if (bRes)
|
||
|
{
|
||
|
m_edit_Directory.SetWindowText(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);
|
||
|
SAFE_DELETE(m_ppropMimeTypes);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnButtonFileTypes()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(::AfxGetStaticModuleState());
|
||
|
|
||
|
CMimeDlg dlg(m_strlMimeTypes, this);
|
||
|
|
||
|
if (dlg.DoModal() == IDOK)
|
||
|
{
|
||
|
OnItemChanged();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnCheckCompatMode()
|
||
|
{
|
||
|
OnItemChanged();
|
||
|
}
|