//+--------------------------------------------------------------------------- // // 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 #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()