/*++ © 1998 Seagate Software, Inc. All rights reserved Module Name: SakVlLs.cpp Abstract: Managed Volume node implementation. Author: Michael Moore [mmoore] 30-Sep-1998 Revision History: --*/ #include "stdafx.h" #include "SakVlLs.h" CSakVolList::CSakVolList() : CListCtrl(), m_nVolumeIcon(-1) { } CSakVolList::~CSakVolList() { } //----------------------------------------------------------------------------- // // PreSubclassWindow // // Create the image list for the list control. Set the desired // extended styles. Finally, Initilize the list header. // // void CSakVolList::PreSubclassWindow() { CreateImageList( ); // // The style we want to see it Checkboxes and full row select // SetExtendedStyle( LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT ); // // Create the columns for the list box // CString temp; INT index; LV_COLUMN col; INT column = 0; // // Also need to calculate some buffer space // Use 4 dialog units (for numeral) // CRect padRect( 0, 0, 8, 8 ); ::MapDialogRect( GetParent()->m_hWnd, &padRect ); // // Name Column // temp.LoadString(IDS_NAME); col.mask = ( LVCF_FMT | LVCF_WIDTH | LVCF_TEXT ); col.fmt = LVCFMT_LEFT; col.cx = GetStringWidth( temp ) + padRect.Width( ) * 10; col.pszText = (LPTSTR)(LPCTSTR)temp; index = InsertColumn( column, &col ); column++; // // Capacity Column // temp.LoadString( IDS_CAPACITY ); col.cx = GetStringWidth( temp ) + padRect.Width( ); col.pszText = (LPTSTR)(LPCTSTR)temp; InsertColumn( column, &col ); column++; // // Free Space Column // temp.LoadString( IDS_FREESPACE ); col.cx = GetStringWidth( temp ) + padRect.Width( ); col.pszText = (LPTSTR)(LPCTSTR)temp; InsertColumn( column, &col ); column++; CListCtrl::PreSubclassWindow(); } //----------------------------------------------------------------------------- // // CreateImageList // // Load an image list with a single icon to represent a volume // and set the image list to be the newly created list. // // BOOL CSakVolList::CreateImageList ( ) { BOOL bRet = TRUE; HICON hIcon; AFX_MANAGE_STATE( AfxGetStaticModuleState( ) ); CWinApp* pApp = AfxGetApp( ); bRet = m_imageList.Create( ::GetSystemMetrics( SM_CXSMICON ), ::GetSystemMetrics( SM_CYSMICON ), ILC_COLOR | ILC_MASK, 2,5 ); if ( bRet ) { hIcon = pApp->LoadIcon( IDI_NODEMANVOL ); if ( hIcon != NULL ) { m_nVolumeIcon = m_imageList.Add( hIcon ); ::DeleteObject( hIcon ); SetImageList( &m_imageList, LVSIL_SMALL ); } else { bRet = FALSE; } } return( bRet ); } //----------------------------------------------------------------------------- // // SetExtendedStyle // // The alternatives that are #if'd out are to call CListCtrl::SetExtendedStyle // or the ComCtrl.h declared ListView_SetExtendedListViewStyle. We will // eventually get rid of this function when the mfc headers and libs are // updated from then NT group. // // DWORD CSakVolList::SetExtendedStyle( DWORD dwNewStyle ) { #if 0 // (_WIN32_IE >= 0x0400) return CListCtrl::SetExtendeStyle( dwNewStyle ); #elif 0 //(_WIN32_IE >= 0x0300) return ListView_SetExtendedListViewStyle( m_hWnd, dwNewStyle ); #else ASSERT(::IsWindow(m_hWnd)); return (DWORD) ::SendMessage(m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM) dwNewStyle); #endif } //----------------------------------------------------------------------------- // // GetCheck // // The alternatives that are #if'd out are to call CListCtrl::GetCheck // or the ComCtrl.h declared ListView_GetCheckState. We will // eventually get rid of this function when the mfc headers and libs are // updated from then NT group. // // Note: I could not get the ListView_Get... to compile under our current // environment. // // BOOL CSakVolList::GetCheck ( int nItem ) const { #if 0 //(_WIN32_IE >= 0x0400) return CListCtrl::GetCheck( nItem ); #elif 0 //(_WIN32_IE >= 0x0300) return ListView_GetCheckState( m_hWnd, nItem ); #else ASSERT(::IsWindow(m_hWnd)); int nState = (int)::SendMessage(m_hWnd, LVM_GETITEMSTATE, (WPARAM)nItem, (LPARAM)LVIS_STATEIMAGEMASK); // Return zero if it's not checked, or nonzero otherwise. return ((BOOL)(nState >> 12) -1); #endif } //----------------------------------------------------------------------------- // // SetCheck // // The alternatives that are #if'd out are to call CListCtrl::SetCheck // or the ComCtrl.h declared ListView_SetCheckState. We will // eventually get rid of this function when the mfc headers and libs are // updated from then NT group. // // Note: I could not get the ListView_Set... to compile under our current // environment. // // BOOL CSakVolList::SetCheck( int nItem, BOOL fCheck ) { #if 0 //(_WIN32_IE >= 0x0400) return CListCtrl::SetCheck( nItem, fCheck ); #elif 0 //(_WIN32_IE >= 0x0300) return ListView_SetCheckState( m_hWnd, nItem, fCheck ); #else ASSERT(::IsWindow(m_hWnd)); LVITEM lvi; lvi.stateMask = LVIS_STATEIMAGEMASK; /* Since state images are one-based, 1 in this macro turns the check off, and 2 turns it on. */ lvi.state = INDEXTOSTATEIMAGEMASK((fCheck ? 2 : 1)); return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi); #endif } //----------------------------------------------------------------------------- // // AppendItem // // Insert an item into the list with the Volume Icon with name, capacity // and free space. Return TRUE if successful and set pIndex = to the // index of the inserted list item. // // BOOL CSakVolList::AppendItem( LPCTSTR name, LPCTSTR capacity, LPCTSTR freeSpace , int * pIndex) { BOOL bRet = FALSE; int subItem = 1; int index = InsertItem( GetItemCount(), name, m_nVolumeIcon ); if ( index != -1 ) { LVITEM capItem; capItem.mask = LVIF_TEXT; capItem.pszText = (LPTSTR)capacity; capItem.iItem = index; capItem.iSubItem = subItem; subItem++; LVITEM freeItem; freeItem.mask = LVIF_TEXT; freeItem.pszText = (LPTSTR)freeSpace; freeItem.iItem = index; freeItem.iSubItem = subItem; subItem++; bRet = ( SetItem( &capItem ) && SetItem ( &freeItem) ); } if ( pIndex != NULL ) *pIndex = index; return bRet; } BEGIN_MESSAGE_MAP(CSakVolList, CListCtrl) //{{AFX_MSG_MAP(CSakVolList) //}}AFX_MSG_MAP END_MESSAGE_MAP()