269 lines
6.7 KiB
C++
269 lines
6.7 KiB
C++
/*++
|
|
|
|
© 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()
|
|
|