///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1996-2001 Microsoft Corporation // // Module Name: // FSCache.cpp // // Description: // Implementation of the CFileShareCachingDlg classes. // // Maintained By: // David Potter (DavidP) 12-MAR-2001 // // Notes: // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "FSCache.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CFileShareCachingDlg property page ///////////////////////////////////////////////////////////////////////////// //const LPSTR CACHE_HELPFILENAME = "offlinefolders.chm"; //const LPSTR CACHE_HELP_TOPIC = "csc_and_shares.htm"; const LPSTR CACHE_HELPFILENAME = "mscsconcepts.chm"; const LPSTR CACHE_HELP_TOPIC = "cluad_pr_100.htm"; ///////////////////////////////////////////////////////////////////////////// // Message Maps BEGIN_MESSAGE_MAP( CFileShareCachingDlg, CDialog ) //{{AFX_MSG_MAP(CFileShareCachingDlg) ON_CBN_SELCHANGE(IDC_FILESHR_CACHE_OPTIONS, OnCbnSelchangeCacheOptions) ON_BN_CLICKED(IDC_FILESHR_CACHE_ALLOW_CACHING, OnBnClickedAllowCaching) ON_BN_CLICKED(IDC_FILESHR_CACHE_CS_HELP, OnBnClickedHelp) ON_WM_HELPINFO() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::CFileShareCachingDlg // // Description: // Constructor. // // Arguments: // dwFlagsIn -- Cache flags. // pParentIn -- Parent window. // // Return Values: // None. // //-- ///////////////////////////////////////////////////////////////////////////// CFileShareCachingDlg::CFileShareCachingDlg( DWORD dwFlagsIn , CWnd * pParentIn ) : CDialog( CFileShareCachingDlg::IDD, pParentIn ) , m_dwFlags( dwFlagsIn ) { //{{AFX_DATA_INIT(CFileShareCachingDlg) m_fAllowCaching = FALSE; m_strHint = _T(""); //}}AFX_DATA_INIT m_fAllowCaching = ! GetCachedFlag( m_dwFlags, CSC_CACHE_NONE ); } //*** CFileShareCachingDlg::CFileShareCachingDlg() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::DoDataExchange // // Description: // Do data exchange between the dialog and the class. // // Arguments: // pDX [IN OUT] Data exchange object // // Return Values: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CFileShareCachingDlg::DoDataExchange( CDataExchange * pDX ) { CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CFileShareCachingDlg) DDX_Control(pDX, IDC_FILESHR_CACHE_OPTIONS, m_cboCacheOptions); DDX_Control(pDX, IDC_FILESHR_CACHE_HINT, m_staticHint); DDX_Check(pDX, IDC_FILESHR_CACHE_ALLOW_CACHING, m_fAllowCaching); DDX_Text(pDX, IDC_FILESHR_CACHE_HINT, m_strHint); //}}AFX_DATA_MAP } //*** CFileShareCachingDlg::DoDataExchange() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::OnInitDialog // // Routine Description: // Handler for the WM_INITDIALOG message. // // Arguments: // None. // // Return Value: // TRUE We need the focus to be set for us. // FALSE We already set the focus to the proper control. // //-- ///////////////////////////////////////////////////////////////////////////// BOOL CFileShareCachingDlg::OnInitDialog( void ) { CDialog::OnInitDialog(); CString strText; int nIndex; // // 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. // // Add the manual sharing string. VERIFY( strText.LoadString( IDS_CSC_MANUAL_WORKGROUP_SHARE ) ); nIndex = m_cboCacheOptions.AddString( strText ); ASSERT( ( nIndex != CB_ERR ) && ( nIndex != CB_ERRSPACE ) ); if ( ( nIndex == CB_ERR ) || ( nIndex == CB_ERRSPACE ) ) { goto Cleanup; } VERIFY( CB_ERR != m_cboCacheOptions.SetItemData( nIndex, IDS_CSC_MANUAL_WORKGROUP_SHARE ) ); if ( GetCachedFlag( m_dwFlags, CSC_CACHE_MANUAL_REINT ) ) { VERIFY( CB_ERR != m_cboCacheOptions.SetCurSel( nIndex ) ); VERIFY( m_strHint.LoadString( IDS_CSC_MANUAL_WORKGROUP_SHARE_HINT ) ); } // Add the automatic workgroup sharing string. VERIFY( strText.LoadString( IDS_CSC_AUTOMATIC_WORKGROUP_SHARE ) ); nIndex = m_cboCacheOptions.AddString( strText ); ASSERT( ( nIndex != CB_ERR ) && ( nIndex != CB_ERRSPACE ) ); if ( ( nIndex == CB_ERR ) || ( nIndex == CB_ERRSPACE ) ) { goto Cleanup; } VERIFY( CB_ERR != m_cboCacheOptions.SetItemData( nIndex, IDS_CSC_AUTOMATIC_WORKGROUP_SHARE ) ); if ( GetCachedFlag( m_dwFlags, CSC_CACHE_AUTO_REINT ) ) { VERIFY( CB_ERR != m_cboCacheOptions.SetCurSel (nIndex)); VERIFY( m_strHint.LoadString( IDS_CSC_AUTOMATIC_WORKGROUP_SHARE_HINT ) ); } // Add the automatic application sharing string. VERIFY( strText.LoadString( IDS_CSC_AUTOMATIC_APPLICATION_SHARE ) ); nIndex = m_cboCacheOptions.AddString( strText ); ASSERT( ( nIndex != CB_ERR ) && ( nIndex != CB_ERRSPACE ) ); if ( ( nIndex == CB_ERR ) || ( nIndex == CB_ERRSPACE ) ) { goto Cleanup; } VERIFY( CB_ERR != m_cboCacheOptions.SetItemData( nIndex, IDS_CSC_AUTOMATIC_APPLICATION_SHARE ) ); if ( GetCachedFlag( m_dwFlags, CSC_CACHE_VDO ) ) { VERIFY( CB_ERR != m_cboCacheOptions.SetCurSel( nIndex ) ); VERIFY( m_strHint.LoadString( IDS_CSC_AUTOMATIC_APPLICATION_SHARE_HINT ) ); } // Disable able the caching options combo box if caching is not allowed if ( ! m_fAllowCaching ) { m_cboCacheOptions.EnableWindow( FALSE ); m_strHint = L""; } Cleanup: UpdateData( FALSE ); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } //*** CFileShareCachingDlg::OnInitDialog() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::OnOK // // Routine Description: // Handler for the BN_CLICKED message on the OK button. // // Arguments: // None. // // Return Value: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CFileShareCachingDlg::OnOK( void ) { DWORD dwNewFlag = 0; if ( ! m_fAllowCaching ) { dwNewFlag = CSC_CACHE_NONE; } else { int nIndex = m_cboCacheOptions.GetCurSel(); ASSERT( nIndex != CB_ERR ); if ( nIndex != CB_ERR ) { DWORD dwData = (DWORD) m_cboCacheOptions.GetItemData( nIndex ); switch ( dwData ) { case IDS_CSC_MANUAL_WORKGROUP_SHARE: dwNewFlag = CSC_CACHE_MANUAL_REINT; break; case IDS_CSC_AUTOMATIC_WORKGROUP_SHARE: dwNewFlag = CSC_CACHE_AUTO_REINT; break; case IDS_CSC_AUTOMATIC_APPLICATION_SHARE: dwNewFlag = CSC_CACHE_VDO; break; default: ASSERT( 0 ); break; } // switch: item data } // if: option is selected } // else: caching is allowed SetCachedFlag( &m_dwFlags, dwNewFlag ); CDialog::OnOK(); } //*** CFileShareCachingDlg::OnOK() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::OnCbnSelchangeCacheOptions // // Description: // Handler for the CBN_SELCHANGE message on the options combobox. // Change the hint control when the option has changed. // // Arguments: // None. // // Return Values: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CFileShareCachingDlg::OnCbnSelchangeCacheOptions( void ) { int nIndex = m_cboCacheOptions.GetCurSel(); ASSERT( nIndex != CB_ERR ); if ( nIndex != CB_ERR ) { DWORD dwData = (DWORD) m_cboCacheOptions.GetItemData( nIndex ); switch ( dwData ) { case IDS_CSC_MANUAL_WORKGROUP_SHARE: VERIFY( m_strHint.LoadString( IDS_CSC_MANUAL_WORKGROUP_SHARE_HINT ) ); break; case IDS_CSC_AUTOMATIC_WORKGROUP_SHARE: VERIFY( m_strHint.LoadString( IDS_CSC_AUTOMATIC_WORKGROUP_SHARE_HINT ) ); break; case IDS_CSC_AUTOMATIC_APPLICATION_SHARE: VERIFY( m_strHint.LoadString( IDS_CSC_AUTOMATIC_APPLICATION_SHARE_HINT ) ); break; default: ASSERT( 0 ); break; } // switch: item data UpdateData( FALSE ); } // if: something is selected } //*** CFileShareCachingDlg::OnCbnSelchangeCacheOptions() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::OnBnClickedAllowCaching // // Description: // Handler for the BN_CLICKED message on the Allow Caching checkbox. // Enable or disable controls and load a hint if enabled. // // Arguments: // None. // // Return Values: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CFileShareCachingDlg::OnBnClickedAllowCaching( void ) { UpdateData( TRUE ); if ( m_fAllowCaching ) { CString strText; int nIndex; m_staticHint.EnableWindow( TRUE ); m_cboCacheOptions.EnableWindow (TRUE); VERIFY( strText.LoadString ( IDS_CSC_MANUAL_WORKGROUP_SHARE ) ); nIndex = m_cboCacheOptions.SelectString( -1, strText ); ASSERT( CB_ERR != nIndex ); if ( CB_ERR != nIndex ) { VERIFY( m_strHint.LoadString( IDS_CSC_MANUAL_WORKGROUP_SHARE_HINT ) ); UpdateData( FALSE ); } } else { m_staticHint.EnableWindow( FALSE ); m_cboCacheOptions.SetCurSel( -1 ); m_cboCacheOptions.EnableWindow( FALSE ); m_strHint = L""; UpdateData( FALSE ); } } //*** CFileShareCachingDlg::OnBnClickedAllowCaching() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::OnBnClickedHelp // // Description: // Handler for the BN_CLICKED message on the Help pushbutton. // Display HTML help. // // Arguments: // None. // // Return Values: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CFileShareCachingDlg::OnBnClickedHelp( void ) { ::HtmlHelpA( m_hWnd , CACHE_HELPFILENAME , HH_DISPLAY_TOPIC , (ULONG_PTR) CACHE_HELP_TOPIC ); } //*** CFileShareCachingDlg::OnBnClickedHelp() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::OnHelpInfo // // Description: // MFC message handler for help. // Display HTML help. // // Arguments: // pHelpInfoIn -- // // Return Values: // None. // //-- ///////////////////////////////////////////////////////////////////////////// BOOL CFileShareCachingDlg::OnHelpInfo( HELPINFO * pHelpInfoIn ) { ASSERT( pHelpInfoIn != NULL ); if ( ( pHelpInfoIn != NULL ) && ( pHelpInfoIn->iContextType == HELPINFO_WINDOW ) ) { ::HtmlHelpA( m_hWnd , CACHE_HELPFILENAME , HH_DISPLAY_TOPIC , (ULONG_PTR) CACHE_HELP_TOPIC ); } return CDialog::OnHelpInfo( pHelpInfoIn ); } //*** CFileShareCachingDlg::OnHelpInfo() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::GetCachedFlag // // Description: // Get the current state of the specified flag in the specified flags mask. // // Arguments: // dwFlagsIn -- Flags to check. // dwFlagsToCheckIn -- Flag to look for. // // // Return Values: // TRUE -- Flag is set. // FALSE -- Flag is not set. // //-- ///////////////////////////////////////////////////////////////////////////// inline BOOL CFileShareCachingDlg::GetCachedFlag( DWORD dwFlagsIn , DWORD dwFlagToCheckIn ) { return (dwFlagsIn & CSC_MASK) == dwFlagToCheckIn; } //*** CFileShareCachingDlg::GetCachedFlag() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareCachingDlg::GetCachedFlag // // Description: // Set the specified flag in the specified flags mask. // // Arguments: // pdwFlagsInout -- Flags mask to modify. // dwNewFlagIn -- Flags to set. // // Return Values: // TRUE -- Flag is set. // FALSE -- Flag is not set. // //-- ///////////////////////////////////////////////////////////////////////////// inline void CFileShareCachingDlg::SetCachedFlag( DWORD * pdwFlagsInout , DWORD dwNewFlagIn ) { *pdwFlagsInout &= ~CSC_MASK; *pdwFlagsInout |= dwNewFlagIn; } //*** CFileShareCachingDlg::SetCachedFlag()