// // Application Verifier UI // Copyright (c) Microsoft Corporation, 2001 // // // // module: ViewSett.cpp // author: DMihai // created: 02/22/2001 // // Description: // // "View current registry settings" wizard page class. // #include "stdafx.h" #include "appverif.h" #include "ViewSett.h" #include "AVUtil.h" #include "Setting.h" #include "AVGlobal.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // // Help IDs // static DWORD MyHelpIds[] = { 0, 0 }; ///////////////////////////////////////////////////////////////////////////// // CViewSettPage property page IMPLEMENT_DYNCREATE(CViewSettPage, CAppverifPage) CViewSettPage::CViewSettPage() : CAppverifPage(CViewSettPage::IDD) { //{{AFX_DATA_INIT(CViewSettPage) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CViewSettPage::~CViewSettPage() { } void CViewSettPage::DoDataExchange(CDataExchange* pDX) { CAppverifPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CViewSettPage) DDX_Control(pDX, IDC_VIEWSETT_UPPER_STATIC, m_UpperStatic); DDX_Control(pDX, IDC_VIEWSETT_NEXTDESCR_STATIC, m_NextDescription); DDX_Control(pDX, IDC_VIEWSETT_BITS_LIST, m_BitsList); DDX_Control(pDX, IDC_VIEWSETT_APPS_LIST, m_AppsList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CViewSettPage, CAppverifPage) //{{AFX_MSG_MAP(CViewSettPage) ON_MESSAGE( WM_HELP, OnHelp ) ON_WM_CONTEXTMENU() ON_NOTIFY(LVN_ITEMCHANGED, IDC_VIEWSETT_APPS_LIST, OnItemchangedAppsList) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// ULONG CViewSettPage::GetDialogId() const { return IDD_VIEWSETT_PAGE; } ///////////////////////////////////////////////////////////////////////////// VOID CViewSettPage::SetupListHeaderApps() { CString strTitle; CRect rectWnd; LVCOLUMN lvColumn; // // The list's rectangle // m_AppsList.GetClientRect( &rectWnd ); ZeroMemory( &lvColumn, sizeof( lvColumn ) ); lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT; // // Column 0 - enabled or not // VERIFY( strTitle.LoadString( IDS_FILE_NAME ) ); lvColumn.pszText = strTitle.GetBuffer( strTitle.GetLength() + 1 ); if( NULL == lvColumn.pszText ) { goto Done; } lvColumn.iSubItem = 0; lvColumn.cx = (int)( rectWnd.Width() * 0.98 ); VERIFY( m_AppsList.InsertColumn( 0, &lvColumn ) != -1 ); strTitle.ReleaseBuffer(); Done: NOTHING; } ///////////////////////////////////////////////////////////////////////////// VOID CViewSettPage::SetupListHeaderBits() { CString strTitle; CRect rectWnd; LVCOLUMN lvColumn; // // The list's rectangle // m_BitsList.GetClientRect( &rectWnd ); ZeroMemory( &lvColumn, sizeof( lvColumn ) ); lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT; // // Column 0 - Bit name // VERIFY( strTitle.LoadString( IDS_TEST_TYPE ) ); lvColumn.pszText = strTitle.GetBuffer( strTitle.GetLength() + 1 ); if( NULL == lvColumn.pszText ) { goto Done; } lvColumn.iSubItem = 0; lvColumn.cx = (int)( rectWnd.Width() * 0.70 ); VERIFY( m_BitsList.InsertColumn( 0, &lvColumn ) != -1 ); strTitle.ReleaseBuffer(); // // Column 0 - Enabled? // VERIFY( strTitle.LoadString( IDS_ENABLED_QUESTION ) ); lvColumn.pszText = strTitle.GetBuffer( strTitle.GetLength() + 1 ); if( NULL == lvColumn.pszText ) { goto Done; } lvColumn.iSubItem = 1; lvColumn.cx = (int)( rectWnd.Width() * 0.29 ); VERIFY( m_BitsList.InsertColumn( 1, &lvColumn ) != -1 ); strTitle.ReleaseBuffer(); Done: NOTHING; } ///////////////////////////////////////////////////////////////////////////// VOID CViewSettPage::FillTheLists() { INT_PTR nAppsNo; INT_PTR nCrtAppAppsIndex; CAppAndBits *pCrtPair; m_AppsList.DeleteAllItems(); nAppsNo = g_aAppsAndBitsFromRegistry.GetSize(); if( 0 == nAppsNo ) { // /// No apps are verified // m_BitsList.DeleteAllItems(); AVSetWindowText( m_UpperStatic, IDS_NO_APPS_VERIFIED ); } else { AVSetWindowText( m_UpperStatic, IDS_VERIFIED_APPS ); } for( nCrtAppAppsIndex = 0; nCrtAppAppsIndex < nAppsNo; nCrtAppAppsIndex += 1 ) { pCrtPair = g_aAppsAndBitsFromRegistry.GetAt( nCrtAppAppsIndex ); ASSERT_VALID( pCrtPair ); AddListItemApps( pCrtPair, nCrtAppAppsIndex ); } if( nAppsNo > 0 ) { m_AppsList.SetItemState( 0, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED ); } } ///////////////////////////////////////////////////////////////////////////// VOID CViewSettPage::UpdateBitsList( CAppAndBits *pCrtPair ) { INT nItemsInList; INT nCrtItem; ASSERT_VALID( pCrtPair ); nItemsInList = m_BitsList.GetItemCount(); if( nItemsInList != ARRAY_LENGTH( g_AllNamesAndBits ) ) { // // The bits list is empty - fill it out first // if( FillBitsList() != TRUE ) { // // Could not fill the list?!? // goto Done; } } for( nCrtItem = 0; nCrtItem < ARRAY_LENGTH( g_AllNamesAndBits ); nCrtItem += 1) { UpdateListItemBits( pCrtPair, nCrtItem ); } Done: NOTHING; } ///////////////////////////////////////////////////////////////////////////// VOID CViewSettPage::UpdateListItemBits( CAppAndBits *pCrtPair, INT nCrtItem ) { LVITEM lvItem; CString strEnabled; ZeroMemory( &lvItem, sizeof( lvItem ) ); ASSERT( nCrtItem >= 0 && nCrtItem < ARRAY_LENGTH( g_AllNamesAndBits ) ); ASSERT( nCrtItem < m_BitsList.GetItemCount() ); if( ( pCrtPair->m_dwEnabledBits & g_AllNamesAndBits[ nCrtItem ].m_dwBit ) != 0 ) { // // This bit is enabled // VERIFY( AVLoadString( IDS_YES, strEnabled ) ); } else { // // This bit is disabled // VERIFY( AVLoadString( IDS_NO, strEnabled ) ); } // // Sub-item 1 - enabled/disabled // lvItem.pszText = strEnabled.GetBuffer( strEnabled.GetLength() + 1 ); if( NULL == lvItem.pszText ) { goto Done; } lvItem.mask = LVIF_TEXT; lvItem.iItem = nCrtItem; lvItem.iSubItem = 1; VERIFY( m_BitsList.SetItem( &lvItem ) ); strEnabled.ReleaseBuffer(); Done: NOTHING; } ///////////////////////////////////////////////////////////////////////////// VOID CViewSettPage::UpdateBitsListFromSelectedApp() { INT nItems; INT nCrtItem; INT_PTR nCrtAppIndex; BOOL bUpdated; CAppAndBits *pCrtPair; bUpdated = FALSE; nItems = m_AppsList.GetItemCount(); for( nCrtItem = 0; nCrtItem < nItems; nCrtItem += 1 ) { if( m_AppsList.GetItemState( nCrtItem, LVIS_SELECTED ) & LVIS_SELECTED ) { nCrtAppIndex = (INT_PTR) m_AppsList.GetItemData( nCrtItem ); pCrtPair = g_aAppsAndBitsFromRegistry.GetAt( nCrtAppIndex ); ASSERT_VALID( pCrtPair ); UpdateBitsList( pCrtPair ); bUpdated = TRUE; break; } } if( FALSE == bUpdated ) { m_BitsList.DeleteAllItems(); } } ///////////////////////////////////////////////////////////////////////////// BOOL CViewSettPage::FillBitsList() { BOOL bSuccess; INT_PTR nCrtBitIndex; INT nActualItemIndex; LVITEM lvItem; TCHAR szBitName[ 64 ]; bSuccess = FALSE; ZeroMemory( &lvItem, sizeof( lvItem ) ); m_BitsList.DeleteAllItems(); for( nCrtBitIndex = 0; nCrtBitIndex < ARRAY_LENGTH( g_AllNamesAndBits ); nCrtBitIndex += 1 ) { if( AVLoadString( g_AllNamesAndBits[ nCrtBitIndex ].m_uNameStringId, szBitName, ARRAY_LENGTH( szBitName ) ) != TRUE ) { goto Done; } lvItem.pszText = szBitName; lvItem.mask = LVIF_TEXT; lvItem.iItem = m_BitsList.GetItemCount(); nActualItemIndex = m_BitsList.InsertItem( &lvItem ); if( nActualItemIndex != lvItem.iItem ) { // // Could not insert the item?!? // m_BitsList.DeleteAllItems(); goto Done; } } bSuccess = TRUE; Done: return bSuccess; } ///////////////////////////////////////////////////////////////////////////// INT CViewSettPage::AddListItemApps( CAppAndBits *pCrtPair, INT_PTR nIndexInArray ) { INT nActualIndex; LVITEM lvItem; nActualIndex = -1; ZeroMemory( &lvItem, sizeof( lvItem ) ); // // LVITEM's member pszText is not a const pointer // so we need to GetBuffer here :-( // // // Sub-item 0 - the name of the app // lvItem.pszText = pCrtPair->m_strAppName.GetBuffer( pCrtPair->m_strAppName.GetLength() + 1 ); if( NULL == lvItem.pszText ) { goto Done; } lvItem.mask = LVIF_TEXT | LVIF_PARAM; lvItem.lParam = nIndexInArray; lvItem.iItem = m_BitsList.GetItemCount(); nActualIndex = m_AppsList.InsertItem( &lvItem ); pCrtPair->m_strAppName.ReleaseBuffer(); Done: // // All done // return nActualIndex; } ///////////////////////////////////////////////////////////////////////////// // CViewSettPage message handlers ///////////////////////////////////////////////////////////// LONG CViewSettPage::OnHelp( WPARAM wParam, LPARAM lParam ) { LONG lResult = 0; LPHELPINFO lpHelpInfo = (LPHELPINFO)lParam; ::WinHelp( (HWND) lpHelpInfo->hItemHandle, g_szAVHelpFile, HELP_WM_HELP, (DWORD_PTR) MyHelpIds ); return lResult; } ///////////////////////////////////////////////////////////////////////////// void CViewSettPage::OnContextMenu(CWnd* pWnd, CPoint point) { ::WinHelp( pWnd->m_hWnd, g_szAVHelpFile, HELP_CONTEXTMENU, (DWORD_PTR) MyHelpIds ); } ///////////////////////////////////////////////////////////////////////////// BOOL CViewSettPage::OnSetActive() { ASSERT_VALID( m_pParentSheet ); m_pParentSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_FINISH ); // // Read the current registry settings and fille out the lists // AVReadCrtRegistrySettings(); FillTheLists(); return CAppverifPage::OnSetActive(); } ///////////////////////////////////////////////////////////////////////////// BOOL CViewSettPage::OnInitDialog() { CAppverifPage::OnInitDialog(); m_BitsList.SetExtendedStyle( LVS_EX_FULLROWSELECT ); m_AppsList.SetExtendedStyle( LVS_EX_FULLROWSELECT ); // // Setup our list and fill it out if we already have something in the app names array // SetupListHeaderApps(); SetupListHeaderBits(); // // Display the description of the next step // AVSetWindowText( m_NextDescription, IDS_VIEWSETT_NEXT_DESCR ); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } ///////////////////////////////////////////////////////////////////////////// void CViewSettPage::OnItemchangedAppsList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if( ( pNMListView->uChanged & LVIF_STATE ) != 0 && ( pNMListView->uNewState & LVIS_SELECTED) != ( pNMListView->uOldState & LVIS_SELECTED) ) { UpdateBitsListFromSelectedApp(); } *pResult = 0; }