mirror of https://github.com/tongzx/nt5src
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.
283 lines
7.5 KiB
283 lines
7.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1998.
|
|
//
|
|
// File: CacheSet.h
|
|
//
|
|
// Contents: CCacheSettingsDlg implementation. Allows the setting of file sharing
|
|
// caching options.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "stdafx.h"
|
|
#include "CacheSet.h"
|
|
#include "filesvc.h"
|
|
#include <htmlhelp.h>
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCacheSettingsDlg dialog
|
|
|
|
CCacheSettingsDlg::CCacheSettingsDlg(
|
|
CWnd* pParent,
|
|
DWORD& dwFlags)
|
|
: CDialog(CCacheSettingsDlg::IDD, pParent),
|
|
m_dwFlags (dwFlags)
|
|
{
|
|
//{{AFX_DATA_INIT(CCacheSettingsDlg)
|
|
m_bAllowCaching = FALSE;
|
|
m_hintStr = _T("");
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_bAllowCaching = !GetCachedFlag (m_dwFlags, CSC_CACHE_NONE);
|
|
}
|
|
|
|
|
|
void CCacheSettingsDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CCacheSettingsDlg)
|
|
DDX_Control(pDX, IDC_CACHE_OPTIONS, m_cacheOptionsCombo);
|
|
DDX_Check(pDX, IDC_ALLOW_CACHING, m_bAllowCaching);
|
|
DDX_Text(pDX, IDC_HINT, m_hintStr);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CCacheSettingsDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CCacheSettingsDlg)
|
|
ON_CBN_SELCHANGE(IDC_CACHE_OPTIONS, OnSelchangeCacheOptions)
|
|
ON_BN_CLICKED(IDC_ALLOW_CACHING, OnAllowCaching)
|
|
ON_MESSAGE(WM_HELP, OnHelp)
|
|
ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCacheSettingsDlg message handlers
|
|
|
|
void CCacheSettingsDlg::OnSelchangeCacheOptions()
|
|
{
|
|
int nIndex = m_cacheOptionsCombo.GetCurSel ();
|
|
ASSERT (CB_ERR != nIndex);
|
|
if ( CB_ERR != nIndex )
|
|
{
|
|
DWORD dwData = (DWORD)m_cacheOptionsCombo.GetItemData (nIndex);
|
|
|
|
switch (dwData)
|
|
{
|
|
case IDS_MANUAL_WORKGROUP_SHARE:
|
|
VERIFY (m_hintStr.LoadString (IDS_MANUAL_WORKGROUP_SHARE_HINT));
|
|
break;
|
|
|
|
case IDS_AUTOMATIC_WORKGROUP_SHARE:
|
|
VERIFY (m_hintStr.LoadString (IDS_AUTOMATIC_WORKGROUP_SHARE_HINT));
|
|
break;
|
|
|
|
case IDS_AUTOMATIC_APPLICATION_SHARE:
|
|
VERIFY (m_hintStr.LoadString (IDS_AUTOMATIC_APPLICATION_SHARE_HINT));
|
|
break;
|
|
|
|
default:
|
|
ASSERT (0);
|
|
break;
|
|
}
|
|
UpdateData (FALSE);
|
|
}
|
|
}
|
|
|
|
void CCacheSettingsDlg::OnAllowCaching()
|
|
{
|
|
UpdateData (TRUE);
|
|
if ( m_bAllowCaching )
|
|
{
|
|
GetDlgItem(IDC_CACHE_SETTINGS_LABEL)->EnableWindow(TRUE);
|
|
m_cacheOptionsCombo.EnableWindow (TRUE);
|
|
CString text;
|
|
VERIFY (text.LoadString (IDS_MANUAL_WORKGROUP_SHARE));
|
|
int nIndex = m_cacheOptionsCombo.SelectString (-1, text);
|
|
ASSERT (CB_ERR != nIndex);
|
|
if ( CB_ERR != nIndex )
|
|
{
|
|
VERIFY (m_hintStr.LoadString (IDS_MANUAL_WORKGROUP_SHARE_HINT));
|
|
UpdateData (FALSE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_CACHE_SETTINGS_LABEL)->EnableWindow(FALSE);
|
|
m_cacheOptionsCombo.SetCurSel (-1);
|
|
m_cacheOptionsCombo.EnableWindow (FALSE);
|
|
m_hintStr = L"";
|
|
UpdateData (FALSE);
|
|
}
|
|
}
|
|
|
|
|
|
BOOL CCacheSettingsDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CString text;
|
|
|
|
// Add the various caching options to the combo box.
|
|
// Save the string ID in the item data for easy recognition of the
|
|
// contents of the selected item.
|
|
// If the given cache value is set, select the item and put its hint in the
|
|
// hint field.
|
|
VERIFY (text.LoadString (IDS_MANUAL_WORKGROUP_SHARE));
|
|
int nIndex = m_cacheOptionsCombo.AddString (text);
|
|
ASSERT (CB_ERR != nIndex && CB_ERRSPACE != nIndex);
|
|
if (CB_ERR == nIndex || CB_ERRSPACE == nIndex)
|
|
return TRUE;
|
|
VERIFY (CB_ERR != m_cacheOptionsCombo.SetItemData (nIndex, IDS_MANUAL_WORKGROUP_SHARE));
|
|
if ( GetCachedFlag (m_dwFlags, CSC_CACHE_MANUAL_REINT) )
|
|
{
|
|
VERIFY (CB_ERR != m_cacheOptionsCombo.SetCurSel (nIndex));
|
|
VERIFY (m_hintStr.LoadString (IDS_MANUAL_WORKGROUP_SHARE_HINT));
|
|
UpdateData (FALSE);
|
|
}
|
|
|
|
VERIFY (text.LoadString (IDS_AUTOMATIC_WORKGROUP_SHARE));
|
|
nIndex = m_cacheOptionsCombo.AddString (text);
|
|
ASSERT (CB_ERR != nIndex && CB_ERRSPACE != nIndex);
|
|
if (CB_ERR == nIndex || CB_ERRSPACE == nIndex)
|
|
return TRUE;
|
|
VERIFY (CB_ERR != m_cacheOptionsCombo.SetItemData (nIndex, IDS_AUTOMATIC_WORKGROUP_SHARE));
|
|
if ( GetCachedFlag (m_dwFlags, CSC_CACHE_AUTO_REINT) )
|
|
{
|
|
VERIFY (CB_ERR != m_cacheOptionsCombo.SetCurSel (nIndex));
|
|
VERIFY (m_hintStr.LoadString (IDS_AUTOMATIC_WORKGROUP_SHARE_HINT));
|
|
UpdateData (FALSE);
|
|
}
|
|
|
|
VERIFY (text.LoadString (IDS_AUTOMATIC_APPLICATION_SHARE));
|
|
nIndex = m_cacheOptionsCombo.AddString (text);
|
|
ASSERT (CB_ERR != nIndex && CB_ERRSPACE != nIndex);
|
|
if (CB_ERR == nIndex || CB_ERRSPACE == nIndex)
|
|
return TRUE;
|
|
VERIFY (CB_ERR != m_cacheOptionsCombo.SetItemData (nIndex, IDS_AUTOMATIC_APPLICATION_SHARE));
|
|
if ( GetCachedFlag (m_dwFlags, CSC_CACHE_VDO) )
|
|
{
|
|
VERIFY (CB_ERR != m_cacheOptionsCombo.SetCurSel (nIndex));
|
|
VERIFY (m_hintStr.LoadString (IDS_AUTOMATIC_APPLICATION_SHARE_HINT));
|
|
UpdateData (FALSE);
|
|
}
|
|
|
|
// Disable able the caching options combo box if caching is not allowed
|
|
if ( !m_bAllowCaching )
|
|
{
|
|
m_cacheOptionsCombo.EnableWindow (FALSE);
|
|
m_hintStr = L"";
|
|
UpdateData (FALSE);
|
|
}
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CCacheSettingsDlg::OnOK()
|
|
{
|
|
DWORD dwNewFlag = 0;
|
|
|
|
if ( !m_bAllowCaching )
|
|
dwNewFlag = CSC_CACHE_NONE;
|
|
else
|
|
{
|
|
int nIndex = m_cacheOptionsCombo.GetCurSel ();
|
|
ASSERT (CB_ERR != nIndex);
|
|
if ( CB_ERR != nIndex )
|
|
{
|
|
DWORD dwData = (DWORD)m_cacheOptionsCombo.GetItemData (nIndex);
|
|
|
|
switch (dwData)
|
|
{
|
|
case IDS_MANUAL_WORKGROUP_SHARE:
|
|
dwNewFlag = CSC_CACHE_MANUAL_REINT;
|
|
break;
|
|
|
|
case IDS_AUTOMATIC_WORKGROUP_SHARE:
|
|
dwNewFlag = CSC_CACHE_AUTO_REINT;
|
|
break;
|
|
|
|
case IDS_AUTOMATIC_APPLICATION_SHARE:
|
|
dwNewFlag = CSC_CACHE_VDO;
|
|
break;
|
|
|
|
default:
|
|
ASSERT (0);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
SetCachedFlag (&m_dwFlags, dwNewFlag);
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
BOOL CCacheSettingsDlg::GetCachedFlag( DWORD dwFlags, DWORD dwFlagToCheck )
|
|
{
|
|
return (dwFlags & CSC_MASK) == dwFlagToCheck;
|
|
}
|
|
|
|
VOID CCacheSettingsDlg::SetCachedFlag( DWORD* pdwFlags, DWORD dwNewFlag )
|
|
{
|
|
*pdwFlags &= ~CSC_MASK;
|
|
|
|
*pdwFlags |= dwNewFlag;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// Help
|
|
BOOL CCacheSettingsDlg::OnHelp(WPARAM /*wParam*/, LPARAM lParam)
|
|
{
|
|
return DoHelp(lParam, HELP_DIALOG_TOPIC(IDD_SMB_CACHE_SETTINGS));
|
|
}
|
|
|
|
BOOL CCacheSettingsDlg::OnContextHelp(WPARAM wParam, LPARAM /*lParam*/)
|
|
{
|
|
return DoContextHelp(wParam, HELP_DIALOG_TOPIC(IDD_SMB_CACHE_SETTINGS));
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CacheSettingsDlg ()
|
|
//
|
|
// Invoke a dialog to set/modify cache settings for a share
|
|
//
|
|
// RETURNS
|
|
// Return S_OK if the user clicked on the OK button.
|
|
// Return S_FALSE if the user clicked on the Cancel button.
|
|
// Return E_OUTOFMEMORY if there is not enough memory.
|
|
// Return E_UNEXPECTED if an expected error occured (eg: bad parameter)
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT
|
|
CacheSettingsDlg(
|
|
HWND hwndParent, // IN: Parent's window handle
|
|
DWORD& dwFlags) // IN & OUT: share flags
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
ASSERT(::IsWindow(hwndParent));
|
|
|
|
HRESULT hResult = S_OK;
|
|
CWnd parentWnd;
|
|
|
|
parentWnd.Attach (hwndParent);
|
|
CCacheSettingsDlg dlg (&parentWnd, dwFlags);
|
|
CThemeContextActivator activator;
|
|
if (IDOK != dlg.DoModal())
|
|
hResult = S_FALSE;
|
|
|
|
parentWnd.Detach ();
|
|
|
|
return hResult;
|
|
} // CacheSettingsDlg()
|
|
|
|
|