diff -r 000000000000 -r 96612d01cf9f videofeeds/livetvutils/src/CIptvLiveUIImageHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/livetvutils/src/CIptvLiveUIImageHandler.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,317 @@ +/* +* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Offers interface for loading and converting images.* +*/ + + + + +// INCLUDE FILES +#include // CGulIcon +#include // CImageDecoder +#include // CAknIconArray +#include "IptvLiveLogger.h" // Live TV logging macros +#include // AknIconUtils +#include + +#include "CIptvLiveUIImageHandler.h" // CIptvLiveUIImageHandler +#include "MIptvLiveUIImageObserver.h" // MIptvLiveUIImageObserver + + +// FORWARD DECLARATIONS + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------- +// CIptvLiveUIImageHandler::NewL +// Two-phased constructor. +// --------------------------------------------------------- +// +EXPORT_C CIptvLiveUIImageHandler* CIptvLiveUIImageHandler::NewL( + MIptvLiveUIImageObserver& aObserver ) + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::NewL() in")); + CIptvLiveUIImageHandler* self = + new ( ELeave ) CIptvLiveUIImageHandler( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CIptvLiveUIImageHandler::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CIptvLiveUIImageHandler::ConstructL() + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::ConstructL() in")); + User::LeaveIfError( iFs.Connect() ); + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::ConstructL() out")); + } + +// ----------------------------------------------------------------------------- +// CIptvLiveUIImageHandler::CIptvLiveUIImageHandler() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CIptvLiveUIImageHandler::CIptvLiveUIImageHandler( + MIptvLiveUIImageObserver& aObserver ) + : CActive( EPriorityNormal ), iObserver( &aObserver ), + iImageDecoder( NULL ), iBitmap( NULL ) + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::CIptvLiveUIImageHandler() in")); + CActiveScheduler::Add( this ); + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::CIptvLiveUIImageHandler() out")); + } + +// ----------------------------------------------------------------------------- +// CIptvLiveUIImageHandler::~CIptvLiveUIImageHandler() +// Destructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CIptvLiveUIImageHandler::~CIptvLiveUIImageHandler() + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::~CIptvLiveUIImageHandler() in")); + Cancel(); + iObserver = NULL; + delete iImageDecoder; + delete iBitmap; + iFs.Close(); + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::~CIptvLiveUIImageHandler() out")); + } + +// ----------------------------------------------------------------------------- +// CIptvLiveUIImageHandler::LoadImageL(). Asynchronous, +// MIptvLiveUIImageObserver::ImageReadyL() when loading and converting is complete. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CIptvLiveUIImageHandler::LoadImageL( const TDesC& aFilePath ) + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::LoadImageL() in")); + if ( IsActive() ) + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::LoadImageL() IS ACTIVE, leave with KErrInUse")); + User::Leave( KErrInUse ); + } + if ( iImageDecoder ) + { + iImageDecoder->Cancel(); + delete iImageDecoder; + iImageDecoder = NULL; + } + // Create new image decoder + iImageDecoder = CImageDecoder::FileNewL( iFs, aFilePath ); + + // Create bitmap + if ( iBitmap ) + { + delete iBitmap; + iBitmap = NULL; + } + TFrameInfo info = iImageDecoder->FrameInfo(); + iBitmap = new ( ELeave ) CFbsBitmap; + TInt err = iBitmap->Create( info.iOverallSizeInPixels, + info.iFrameDisplayMode ); + if ( err == KErrNone ) + { + // Start converting the image + iImageDecoder->Convert( &iStatus, *iBitmap ); + SetActive(); + } + else + { + delete iImageDecoder; + iImageDecoder = NULL; + delete iBitmap; + iBitmap = NULL; + User::Leave( err ); + } + + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::LoadImageL() out")); + } + +// ----------------------------------------------------------------------------- +// CIptvImageLoader::LoadIconL +// Loads icon to the given array. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CIptvLiveUIImageHandler::LoadIconL( CAknIconArray* aIcons, + const TInt aIconIndex, + const TInt aMaskIndex, const TSize& aIconSize, + const TDesC& aMifFileName, TBool aInsert ) + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::LoadIconL() in") ); + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + + AknIconUtils::CreateIconLC( bitmap, mask, aMifFileName, + aIconIndex, aMaskIndex ); + + CGulIcon* icon = CGulIcon::NewL( bitmap, mask ); + CleanupStack::PushL( icon ); + + // ownership of bitmap and mask transferred to icon + icon->SetBitmapsOwnedExternally( EFalse ); + + TInt err = AknIconUtils::SetSize( bitmap, aIconSize ); + if ( err != KErrNone ) + { + LIVE_TV_TRACE2(_L("CIptvLiveUIImageHandler::LoadIconL() AknIconUtils::SetSize() FAILED: %d"), err); + } + + if ( aInsert && aIcons ) + { + aIcons->InsertL( 0, icon ); + } + else + { + if ( aIcons ) + { + aIcons->AppendL( icon ); + } + } + + CleanupStack::Pop( icon ); + CleanupStack::Pop( mask ); + CleanupStack::Pop( bitmap ); + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::LoadIconL() out") ); + } + +// ----------------------------------------------------------------------------- +// Loads color-customized icon to the given array. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CIptvLiveUIImageHandler::LoadIconL( CAknIconArray* aIcons, + const TAknsItemID aItemId, + const TInt aIconIndex, + const TInt aMaskIndex, + const TSize& aIconSize, + const TDesC& aMifFileName, + TBool aInsert + ) + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::LoadIconL() in") ); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + TRgb defaultColour( KRgbWhite ); + // Color is not updated if it not found from the skin + AknsUtils::GetCachedColor( skin, + defaultColour, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG13 ); + + AknsUtils::CreateColorIconLC( skin, + aItemId, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG13, + bitmap, + mask, + aMifFileName, + aIconIndex, + aMaskIndex, + defaultColour, + aIconSize, + EAspectRatioPreserved ); + + CGulIcon* icon = NULL; + icon = CGulIcon::NewL( bitmap, mask ); + + CleanupStack::Pop( 2 ); // mask, bitmap + // ownership of bitmap and mask transferred to icon + icon->SetBitmapsOwnedExternally( EFalse ); + + CleanupStack::PushL( icon ); + + if ( aInsert && aIcons ) + { + aIcons->InsertL( 0, icon ); + } + else + { + if ( aIcons ) + { + aIcons->AppendL( icon ); + } + } + + CleanupStack::Pop( icon ); + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::LoadIconL() out") ); + } + +// ----------------------------------------------------------------------------- +// CIptvLiveUIImageHandler::RunL() +// From CActive +// ----------------------------------------------------------------------------- +// +void CIptvLiveUIImageHandler::RunL() + { + LIVE_TV_TRACE2(_L("CIptvLiveUIImageHandler::RunL() in, iStatus.Int() = %d"), iStatus.Int()); + if ( iStatus.Int() == KErrNone ) + { + // Image conversion ok + iObserver->ImageReadyL( KErrNone, *iBitmap ); + } + else + { + // There was some error, notify observer + iObserver->ImageReadyL( iStatus.Int(), *iBitmap ); + } + // free image file and bitmap + delete iImageDecoder; + iImageDecoder = NULL; + delete iBitmap; + iBitmap = NULL; + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::RunL() out")); + } + +// ----------------------------------------------------------------------------- +// CIptvLiveUIImageHandler::RunError() +// From CActive +// ----------------------------------------------------------------------------- +// +TInt CIptvLiveUIImageHandler::RunError( TInt /*aError*/ ) + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::RunError() in")); + // free image file and bitmap + delete iImageDecoder; + iImageDecoder = NULL; + delete iBitmap; + iBitmap = NULL; + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::RunError() out")); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CIptvLiveUIImageHandler::DoCancel() +// From CActive +// ----------------------------------------------------------------------------- +// +void CIptvLiveUIImageHandler::DoCancel() + { + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::DoCancel() in")); + if ( iImageDecoder ) + { + iImageDecoder->Cancel(); + } + delete iImageDecoder; + iImageDecoder = NULL; + LIVE_TV_TRACE1(_L("CIptvLiveUIImageHandler::DoCancel() out")); + } + +// End of File