Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

268 lines
7.0 KiB

/*++
© 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()