--- /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 <gulicon.h> // CGulIcon
+#include <imageconversion.h> // CImageDecoder
+#include <AknIconArray.h> // CAknIconArray
+#include "IptvLiveLogger.h" // Live TV logging macros
+#include <AknIconUtils.h> // AknIconUtils
+#include <AknsUtils.h>
+
+#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