/*++ Microsoft Windows Copyright (C) Microsoft Corporation, 1981 - 1998 Module Name: prefs.cxx Abstract: Code for the property page that is used to obtaining the redirection preferences e.g. Move Contents, Apply ACLs,... etc. Author: Rahul Thombre (RahulTh) 11/8/1998 Notes: Revision History: 11/8/1998 RahulTh Created this module. 1/26/1999 RahulTh converted the dialog into a property page --*/ #include "precomp.hxx" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // //mapping between help ids and control ids for context sensitive help // const DWORD g_aHelpIDMap_IDD_REDIRMETHOD[] = { IDC_PREF_ICON, IDH_DISABLEHELP, IDC_PREF_TITLE, IDH_DISABLEHELP, IDC_PREF_APPLYSECURITY, IDH_PREF_APPLYSECURITY, IDC_PREF_MOVE, IDH_PREF_MOVE, IDC_GROUP_ORPHAN, IDH_DISABLEHELP, IDC_PREF_ORPHAN, IDH_PREF_ORPHAN, IDC_PREF_RELOCATE, IDH_PREF_RELOCATE, IDC_PREF_MYPICS_GROUP, IDH_DISABLEHELP, IDC_PREF_CHANGEMYPICS, IDH_PREF_CHANGEMYPICS, IDC_PREF_LEAVEMYPICS, IDH_PREF_LEAVEMYPICS, 0, 0 }; ///////////////////////////////////////////////////////////////////////////// // CRedirPref property page CRedirPref::CRedirPref() : CPropertyPage (CRedirPref::IDD) { //{{AFX_DATA_INIT(CRedirPref) m_szFolderName.Empty(); m_fInitialized = FALSE; m_fMyPicsValid = FALSE; m_fMyPicsFollows = TRUE; m_fSettingsChanged = FALSE; //}}AFX_DATA_INIT //m_ppThis and m_pFileInfo are set immediately after creation in CScopePane routines } CRedirPref::~CRedirPref() { //reset the pointer to this property page from its corresponding //CFileInfo object so that it know that it is gone. *m_ppThis = NULL; //reset the settings initialized member since this page is being destroyed m_fInitialized = m_pFileInfo->m_bSettingsInitialized = FALSE; } void CRedirPref::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CRedirPref) // NOTE: the ClassWizard will add DDX and DDV calls here DDX_Control (pDX, IDC_PREF_TITLE, m_csTitle); DDX_Control (pDX, IDC_PREF_MOVE, m_cbMoveContents); DDX_Control (pDX, IDC_PREF_APPLYSECURITY, m_cbApplySecurity); DDX_Control (pDX, IDC_GROUP_ORPHAN, m_grOrphan); DDX_Control (pDX, IDC_PREF_ORPHAN, m_rbOrphan); DDX_Control (pDX, IDC_PREF_RELOCATE, m_rbRelocate); DDX_Control (pDX, IDC_PREF_MYPICS_GROUP, m_grMyPics); DDX_Control (pDX, IDC_PREF_CHANGEMYPICS, m_rbFollowMyDocs); DDX_Control (pDX, IDC_PREF_LEAVEMYPICS, m_rbNoModify); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRedirPref, CPropertyPage) //{{AFX_MSG_MAP(CRedirPref) ON_BN_CLICKED (IDC_PREF_MOVE, OnModify) ON_BN_CLICKED (IDC_PREF_APPLYSECURITY, OnModify) ON_BN_CLICKED (IDC_PREF_ORPHAN, OnModify) ON_BN_CLICKED (IDC_PREF_RELOCATE, OnModify) ON_BN_CLICKED (IDC_PREF_CHANGEMYPICS, OnMyPicsChange) ON_BN_CLICKED (IDC_PREF_LEAVEMYPICS, OnMyPicsChange) ON_MESSAGE (WM_HELP, OnHelp) ON_MESSAGE (WM_CONTEXTMENU, OnContextMenu) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRedirPref message handlers BOOL CRedirPref::OnInitDialog() { AFX_MANAGE_STATE (AfxGetStaticModuleState()); RECT rc; RECT rcDlg; int top, height; CString szFormat; CString szText; CPropertyPage::OnInitDialog(); //tell the other property pages that InitDialog has been received. m_fInitialized = m_pFileInfo->m_bSettingsInitialized = TRUE; //get the display name m_szFolderName = m_pFileInfo->m_szDisplayname; //set the right text in the check boxes etc. szFormat.LoadString (IDS_PREF_TITLE); szText.Format ((LPCTSTR) szFormat, (LPCTSTR) m_szFolderName); m_csTitle.SetWindowText (szText); szFormat.LoadString (IDS_PREF_APPLYSECURITY); szText.Format ((LPCTSTR) szFormat, (LPCTSTR) m_szFolderName); m_cbApplySecurity.SetWindowText (szText); szFormat.LoadString (IDS_PREF_MOVE); szText.Format ((LPCTSTR) szFormat, (LPCTSTR) m_szFolderName); m_cbMoveContents.SetWindowText (szText); return TRUE; //return TRUE unless you set focus to a control. } BOOL CRedirPref::OnSetActive () { BOOL bRet; CRedirect * pPage = NULL; bRet = CPropertyPage::OnSetActive(); pPage = m_pFileInfo->m_pRedirPage; switch (pPage->m_iCurrChoice + pPage->m_iChoiceStart) { case IDS_DONT_CARE: case IDS_FOLLOW_PARENT: DisableSettings(); break; case IDS_SCALEABLE: if (pPage->m_lstSecGroups.GetItemCount()) EnableSettings(); else DisableSettings(); break; default: EnableSettings(); break; } return bRet; } void CRedirPref::EnablePage (BOOL bEnable /* = TRUE*/) { //enable or disable the contents of a page depending on whether if (!m_fInitialized) return; if (bEnable) EnableSettings(); else DisableSettings(); } void CRedirPref::DisableSettings(void) { //since the settings are being disabled, the modifications in the //settings (if any) obviously have no significance. SetModified (FALSE); //disable all the options on this page... also uncheck all of them. m_csTitle.EnableWindow (FALSE); m_cbMoveContents.SetCheck(0); m_cbMoveContents.EnableWindow(FALSE); m_cbApplySecurity.SetCheck (0); m_cbApplySecurity.EnableWindow (FALSE); m_grOrphan.EnableWindow (FALSE); m_rbOrphan.SetCheck(0); m_rbOrphan.EnableWindow (FALSE); m_rbRelocate.SetCheck (0); m_rbRelocate.EnableWindow (FALSE); EnableMyPicsSettings (FALSE); return; } void CRedirPref::EnableMyPicsSettings (BOOL bEnable /* = TRUE*/) { CRedirect * pPage = m_pFileInfo->m_pRedirPage; //my pics preferences are shown only in the tab for my documents if (IDS_MYDOCS != m_pFileInfo->m_cookie) { m_grMyPics.ShowWindow (SW_HIDE); m_rbFollowMyDocs.ShowWindow (SW_HIDE); m_rbNoModify.ShowWindow (SW_HIDE); return; } //this is the my docs folder m_grMyPics.ShowWindow (SW_SHOW); m_rbNoModify.ShowWindow (SW_SHOW); m_rbFollowMyDocs.ShowWindow (SW_SHOW); LONG index = pPage->m_iCurrChoice + pPage->m_iChoiceStart - IDS_CHILD_REDIR_START; if (bEnable && pPage->m_fEnableMyPics && pPage->m_fSettingModified [index]) { m_grMyPics.EnableWindow (); m_rbFollowMyDocs.EnableWindow (); m_rbNoModify.EnableWindow (); if (m_fMyPicsValid) { m_rbFollowMyDocs.SetCheck (m_fMyPicsFollows ? 1 : 0); m_rbNoModify.SetCheck (m_fMyPicsFollows ? 0 : 1); } else //set defaults as the setting { m_rbFollowMyDocs.SetCheck (1); m_rbNoModify.SetCheck (0); m_fMyPicsFollows = TRUE; m_fMyPicsValid = TRUE; } } else { m_grMyPics.EnableWindow (FALSE); //even when disabled, show the current status of My Pictures as far //as possible. The only situation when both the radio buttons should //be unchecked is when My Pics is getting redirected independently. m_rbFollowMyDocs.EnableWindow (FALSE); m_rbFollowMyDocs.SetCheck ((REDIR_FOLLOW_PARENT == pPage->m_dwMyPicsCurr) ? 1 : 0); m_rbNoModify.EnableWindow (FALSE); m_rbNoModify.SetCheck ((REDIR_DONT_CARE == pPage->m_dwMyPicsCurr) ? 1 : 0); } } void CRedirPref::EnableSettings (void) { CRedirect * pPage = m_pFileInfo->m_pRedirPage; //the page is being enabled. If the settings had been modified earlier, //we need to make sure that the modified state indicates that. SetModified (m_fSettingsChanged); //enables applicable settings m_csTitle.EnableWindow (TRUE); if (IDS_STARTMENU == pPage->m_cookie) { m_cbMoveContents.EnableWindow (FALSE); m_cbMoveContents.SetCheck (0); m_cbApplySecurity.EnableWindow (FALSE); m_cbApplySecurity.SetCheck (0); } else { m_cbApplySecurity.EnableWindow (); m_cbMoveContents.EnableWindow (); if (pPage->m_fValidFlags) { m_cbApplySecurity.SetCheck ((pPage->m_dwFlags & REDIR_SETACLS)?1:0); m_cbMoveContents.SetCheck ((pPage->m_dwFlags & REDIR_MOVE_CONTENTS)? 1 : 0); } else { m_cbApplySecurity.SetCheck (1); m_cbMoveContents.SetCheck (1); } } m_grOrphan.EnableWindow (); m_rbOrphan.EnableWindow(); m_rbRelocate.EnableWindow (); if (pPage->m_fValidFlags) { m_rbRelocate.SetCheck ((pPage->m_dwFlags & REDIR_RELOCATEONREMOVE)?1:0); m_rbOrphan.SetCheck ((pPage->m_dwFlags & REDIR_RELOCATEONREMOVE)?0:1); } else { m_rbOrphan.SetCheck (1); m_rbRelocate.SetCheck (0); } //enable my pics preferences for the My Docs folder EnableMyPicsSettings (); return; } void CRedirPref::OnModify() { CRedirect * pPage = m_pFileInfo->m_pRedirPage; //modify the flags if (m_cbMoveContents.GetCheck()) pPage->m_dwFlags |= REDIR_MOVE_CONTENTS; else pPage->m_dwFlags &= ~REDIR_MOVE_CONTENTS; if (m_cbApplySecurity.GetCheck()) pPage->m_dwFlags |= REDIR_SETACLS; else pPage->m_dwFlags &= ~REDIR_SETACLS; if (m_rbRelocate.GetCheck()) pPage->m_dwFlags |= REDIR_RELOCATEONREMOVE; else pPage->m_dwFlags &= ~REDIR_RELOCATEONREMOVE; //the flag now contains valid values pPage->m_fValidFlags = TRUE; DirtyPage (TRUE); } void CRedirPref::OnMyPicsChange() { m_fMyPicsValid = TRUE; m_fMyPicsFollows = m_rbFollowMyDocs.GetCheck(); DirtyPage(TRUE); } void CRedirPref::DirtyPage (BOOL fModified) { m_fSettingsChanged = fModified; SetModified (fModified); } LONG CRedirPref::OnHelp (WPARAM wParam, LPARAM lParam) { LONG lResult = 0; CString szHelpFile; szHelpFile.LoadString(IDS_HELP_FILE); ::WinHelp((HWND)(((LPHELPINFO)lParam)->hItemHandle), (LPCTSTR) szHelpFile, HELP_WM_HELP, (ULONG_PTR)(LPTSTR)g_aHelpIDMap_IDD_REDIRMETHOD); return lResult; } LONG CRedirPref::OnContextMenu (WPARAM wParam, LPARAM lParam) { AFX_MANAGE_STATE (AfxGetStaticModuleState()); LONG lResult = 0; CString szHelpFile; szHelpFile.LoadString(IDS_HELP_FILE); ::WinHelp((HWND)wParam, (LPCTSTR)szHelpFile, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)g_aHelpIDMap_IDD_REDIRMETHOD); return lResult; }