windows-nt/Source/XPSP1/NT/printscan/ui/photowiz/listitem.cpp
2020-09-26 16:20:57 +08:00

220 lines
5.2 KiB
C++

/*****************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORPORATION, 2000
*
* TITLE: listitem.cpp
*
* VERSION: 1.0
*
* AUTHOR: RickTu
*
* DATE: 12/06/00
*
* DESCRIPTION: Implements an item class that encapsulates each item in
* the photo list. Each of these items is backed by
* a CPhotoItem class.
*
*****************************************************************************/
#include <precomp.h>
#pragma hdrstop
/*****************************************************************************
CListItem -- constructors/desctructor
<Notes>
*****************************************************************************/
CListItem::CListItem( CPhotoItem * pItem, LONG lFrame )
: _pImageInner(NULL),
_bSelectedForPrinting(FALSE),
_lFrameIndex(-1),
_bJustAdded(TRUE),
_bIsCopyItem(FALSE)
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM, TEXT("CListItem::CListItem( CPhotoItem(%d), Frame(%d) )"),pItem,lFrame));
if (pItem)
{
pItem->AddRef();
_pImageInner = pItem;
}
_lFrameIndex= lFrame;
}
CListItem::~CListItem()
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM, TEXT("CListItem::~CListItem()")));
//
// Free reference to backing CPhotoItem
//
if (_pImageInner)
{
_pImageInner->Release();
}
}
/*****************************************************************************
CListItem::GetClassBitmap
Returns default icon for class (.jpg, .bmp, etc) for this item...
*****************************************************************************/
HBITMAP CListItem::GetClassBitmap( const SIZE &sizeDesired )
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM,TEXT("CListItem::GetClassBitmap( size = %d,%d "),sizeDesired.cx, sizeDesired.cy ));
if (_pImageInner)
{
return _pImageInner->GetClassBitmap( sizeDesired );
}
return NULL;
}
/*****************************************************************************
CListItem::GetThumbnailBitmap
Given a desired size, return an HBITMAP of the thumbnail
for a this item. The caller MUST free the HBITMAP returned
from this function.
*****************************************************************************/
HBITMAP CListItem::GetThumbnailBitmap( const SIZE &sizeDesired )
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM,TEXT("CListItem::GetThumbnailBitmap( size = %d,%d "),sizeDesired.cx, sizeDesired.cy ));
if (_pImageInner)
{
return _pImageInner->GetThumbnailBitmap( sizeDesired, _lFrameIndex );
}
return NULL;
}
/*****************************************************************************
CListItem::Render
Renders the given item into the Graphics that is supplied...
*****************************************************************************/
HRESULT CListItem::Render( RENDER_OPTIONS * pRO )
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM,TEXT("CListItem::Render()")));
if (_pImageInner && pRO)
{
pRO->lFrame = _lFrameIndex;
return _pImageInner->Render( pRO );
}
return E_FAIL;
}
/*****************************************************************************
CListItem::GetPIDL
Returns the backing pidl for this item...
*****************************************************************************/
LPITEMIDLIST CListItem::GetPIDL()
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM,TEXT("CListItem::GetPIDL()")));
if (_pImageInner)
{
return _pImageInner->GetPIDL();
}
return NULL;
}
/*****************************************************************************
CListItem::GetFilename
Returns a CSimpleStringWide that contains the file name with any
frame information. Caller is responsible for freeing returned
CSimpleStringWide.
*****************************************************************************/
CSimpleStringWide * CListItem::GetFilename()
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM,TEXT("CListItem::GetFilename()")));
if (_pImageInner)
{
CSimpleStringWide * str = new CSimpleStringWide( CSimpleStringConvert::WideString(CSimpleString(_pImageInner->GetFilename())) );
LONG lFrameCount = 0;
HRESULT hr = _pImageInner->GetImageFrameCount( &lFrameCount );
if (str && (str->Length() > 0) && SUCCEEDED(hr) && (lFrameCount > 1))
{
//
// Construct suffix for pages
//
CSimpleString strSuffix;
strSuffix.Format( IDS_FRAME_SUFFIX, g_hInst, _lFrameIndex + 1 );
//
// add suffix onto the end of the string we had
//
str->Concat( CSimpleStringConvert::WideString( strSuffix ) );
}
return str;
}
return NULL;
}
/*****************************************************************************
CListItem::GetFileSize
returns the size of the file, if known
*****************************************************************************/
LONGLONG CListItem::GetFileSize()
{
WIA_PUSH_FUNCTION_MASK((TRACE_LIST_ITEM,TEXT("CListItem::GetFileSize()")));
if (_pImageInner)
{
return _pImageInner->GetFileSize();
}
return 0;
}