--- a/internetradio2.0/uicontrolssrc/irstationlogocontrol.cpp Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,704 +0,0 @@
-/*
-* Copyright (c) 2008-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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: Control for single station logo
-*
-*/
-
-
-#include <alf/alfcommand.h>
-#include <alf/alfcontrolgroup.h>
-#include <alf/alfdecklayout.h>
-#include <alf/alfenv.h>
-#include <alf/alfimagevisual.h>
-#include <alf/alftexture.h>
-#include <alf/alftexturemanager.h>
-#include <alf/alftimedvalue.h>
-
-#include "irdebug.h"
-
-#include "irimageconverter.h"
-#include "irstationlogocontrolobserver.h"
-#include "irstationlogocontrol.h"
-#include "irstationlogodata.h"
-
-// Time in milliseconds to spend animating the displays moving in and out of the screen
-const TInt KVRLogoFadeTime = 400;
-const TInt KTwo=-2;
-// ---------------------------------------------------------------------------
-// Default constructor
-// ---------------------------------------------------------------------------
-//
-CIRStationLogoControl::CIRStationLogoControl() : iCurrentId( KErrNotFound ),iError(KErrNone)
- {
- }
-
-// ---------------------------------------------------------------------------
-// Second phase constructor
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::ConstructL( CAlfEnv& aAlfEnv, TInt aControlGroupId,
- CAlfLayout* aParentLayout )
- {
- IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::ConstructL()");
- CAlfControl::ConstructL( aAlfEnv );
-
- iDeck = CAlfDeckLayout::AddNewL( *this, aParentLayout );
- iFadeOut=EFalse;
- iCurrentImageConverter = CIRImageConverter::NewL();
- iCurrentImageConverter->SetObserver( this );
- iVisualSize = DisplayArea().Size();
-
- CAlfControlGroup& group = Env().ControlGroup( aControlGroupId );
- group.AppendL( this ); // Transfers ownership
- }
-
-// ---------------------------------------------------------------------------
-// Two-phased constructor
-// ---------------------------------------------------------------------------
-//
-CIRStationLogoControl* CIRStationLogoControl::NewL( CAlfEnv& aAlfEnv,
- TInt aControlGroupId,
- CAlfLayout* aParentLayout )
- {
- CIRStationLogoControl* self = new( ELeave ) CIRStationLogoControl;
- CleanupStack::PushL( self );
- self->ConstructL( aAlfEnv, aControlGroupId, aParentLayout );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CIRStationLogoControl::~CIRStationLogoControl()
- {
- iLogoControlObserver = NULL;
- delete iCurrentImageConverter;
-
- for( TInt i = 0 ; i < iLogoData.Count() ; i++ )
- {
- Env().CancelCustomCommands( iLogoData[i] );
- }
- iLogoData.ResetAndDestroy();
- iLogoData.Close();
- }
-
-// ---------------------------------------------------------------------------
-// Prepares the graphics for the logo that is to be displayed
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::PrepareLogoL( TInt aId )
- {
- IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::PrepareLogoL(aId=%d)", aId);
- CIRStationLogoData* logoData = LogoDataForId( aId );
- if( logoData && !logoData->Texture() )
- {
- StartConversionL( *logoData );
- }
- }
-
-// ---------------------------------------------------------------------------
-// Switches the logo that is to be displayed
-// ---------------------------------------------------------------------------
-//
-TBool CIRStationLogoControl::SwitchToLogoL( TInt aId )
- {
- IRLOG_DEBUG2(" CIRStationLogoControl::SwitchToLogoL(aId=%d)", aId);
- // No need to fade out or load new logo.
- if ( aId != KErrNotFound )
- {
- PrepareLogoL( aId );
- }
-
- CIRStationLogoData* previousLogoData = LogoDataForId( iCurrentId );
- CIRStationLogoData* newData = LogoDataForId( aId );
-
- // No need to fade out or load new logo.
- if ( aId == iCurrentId && previousLogoData && previousLogoData->Visual() )
- {
- return ETrue;
- }
- // To Do
- // Fade the current logo out.Handled in View
- /*if ( previousLogoData && previousLogoData->Visual() )
- {
- // Station logo.
- FadeOutCurrentLogo( *previousLogoData->Visual() );
- }*/
- if(iError!=KErrNone)
- {
- return EFalse;
- }
- TBool logoAdded = EFalse;
- iCurrentId = aId;
- if( newData )
- {
- Env().CancelCustomCommands( newData,
- CIRStationLogoData::EIRCustomEventLogoFadeOutComplete );
- if( !newData->Visual() )
- {
- iDelayedFadeIn = EIRLogoNoDelay;
-
- CAlfImageVisual* visual = NULL;
- if( !newData->Visual() )
- {
- visual = CAlfImageVisual::AddNewL( *this, iDeck );
- visual->SetOpacity( TAlfTimedValue( 0.0f ) );
- visual->SetScaleMode( CAlfImageVisual::EScaleFitInside );
- newData->SetVisual( visual );
- }
- else
- {
- visual = newData->Visual();
- }
-
- if( newData->Texture() )
- {
- visual->SetImage( TAlfImage( *newData->Texture() ) );
- FadeInStationLogoL( *visual );
- }
- else
- {
- if( newData != previousLogoData )
- {
- iDelayedFadeIn = EIRDelayedTextureImage;
- }
- else
- {
- visual->SetOpacity( TAlfTimedValue( 1.0f ) );
- }
- }
- }
- logoAdded = ETrue;
- }
-
- return logoAdded;
- }
-
-
-
-// ---------------------------------------------------------------------------
-// Setter for logo data
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::SetLogosL( const RArray<TInt>& aIdArray , const CPtrC8Array& aRawData )
- {
- IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::SetLogosL() -- %d items", aRawData.Count());
- iFadeOut=EFalse;
- iError=KErrNone;
- DestroyPreviousLogosL(aIdArray, aRawData);
- iRet=0;
- iLogoDisplay=EFalse;
- }
-
-void CIRStationLogoControl::UpdateLogoL( TInt aId, const TDesC8& aRawData )
- {
- IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::UpdateLogoL(aId=%d)", aId);
- TBool idFound = EFalse;
- for( TInt i = 0 ; i < iLogoData.Count() ; i++ )
- {
- if( aId == iLogoData[i]->Id() )
- {
- // Update existing logo
- if( aRawData == KNullDesC8 )
- {
- delete iLogoData[i];
- iLogoData.Remove( i );
- }
- else
- {
- iLogoData[i]->SetRawData( aRawData );
- }
- idFound = ETrue;
- i = iLogoData.Count();
- }
- }
- if( !idFound && aRawData != KNullDesC8 )
- {
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aId, aRawData );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- CIRStationLogoData* logoData = LogoDataForId( iCurrentId );
- if( logoData && logoData->Id() == aId )
- {
- StartConversionL( *logoData );
- }
- }
-
-// ---------------------------------------------------------------------------
-// Setter for logo fade style.
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::SetLogoFadeStyle( TIRFadeStyle aFadeStyle )
- {
- iFadeStyle = aFadeStyle;
- }
-
-// ---------------------------------------------------------------------------
-// From class CAlfControl.
-// VisualLayoutUpdated
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::VisualLayoutUpdated( CAlfVisual& /*aVisual*/ )
- {
- IRLOG_DEBUG(" CIRStationLogoControl::VisualLayoutUpdated()");
-
- // Start the converter for current logo for animation purposes
- CIRStationLogoData* logoData = LogoDataForId( iCurrentId );
- if( logoData )
- {
- TRAP_IGNORE( StartConversionL( *logoData ) )
- }
- }
-
-// ---------------------------------------------------------------------------
-// CIRStationLogoControl::SetLogoControlObserver
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::SetLogoControlObserver( MIRLogoControlObserver& aObserver )
- {
- IRLOG_DEBUG(" CIRStationLogoControl::SetLogoControlObserver()");
- iLogoControlObserver = &aObserver;
- }
-
-// ---------------------------------------------------------------------------
-// From class MVRImageConverterObserver.
-// HandleImageConversionEventL
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::HandleImageConversionEventL( MIRImageConverterObserver::
- TIRImageConversionEvent /*aEvent*/,
- TInt aId,
- TInt aError )
- {
- IRLOG_DEBUG3(" *** S60VisualRadio -- CIRStationLogoControl::HandleImageConversionEventL(aId=%d, aError=%d)", aId, aError);
- iError=aError;
- if( aError == KErrNone )
- {
- CFbsBitmap* bitmap = NULL;
- CFbsBitmap* mask = NULL;
- iCurrentImageConverter->TransferBitmapOwnership( bitmap, mask );
- CIRStationLogoData* convertedLogoData = LogoDataForId( aId );
- if( convertedLogoData )
- {
- convertedLogoData->UpdateTextureL( bitmap, mask ); // transfers ownership
- }
- else
- {
- delete bitmap;
- delete mask ;
- }
- CIRStationLogoData* currentLogoData = LogoDataForId( iCurrentId );
- if( currentLogoData && currentLogoData->Visual() && currentLogoData == convertedLogoData )
- {
- // Logo is ready for display, check that everything is OK before displaying the logo.
- iLogoControlObserver->LogoReadyForDisplayL();
- // Display the logo.
- currentLogoData->Visual()->SetImage( TAlfImage( *currentLogoData->Texture() ) );
- if( iDelayedFadeIn == EIRDelayedTextureImage )
- {
- FadeInStationLogoL( *currentLogoData->Visual() );
- }
- }
- }
- else
- {
- iLogoControlObserver->LogoConversionFailedL();
- }
- }
-
-// ---------------------------------------------------------------------------
-// Maps the logo ID to station logo data
-// ---------------------------------------------------------------------------
-//
-CIRStationLogoData* CIRStationLogoControl::LogoDataForId( TInt aId )
- {
- CIRStationLogoData* logo = NULL;
- for( TInt i = 0 ; i < iLogoData.Count() ; i++ )
- {
- if( iLogoData[i]->Id() == aId )
- {
- logo = iLogoData[i];
- i = iLogoData.Count();
- }
- }
- return logo;
- }
-
-// ---------------------------------------------------------------------------
-// Starts the conversion for hte current logo
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::StartConversionL( CIRStationLogoData& aLogoData )
- {
- IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::StartConversionL()");
- if( iVisualSize.iWidth && iVisualSize.iHeight )
- {
- iCurrentImageConverter->SetDataL( aLogoData.RawData() );
- if(iError==KErrNone)
- {
- iCurrentImageConverter->StartL( iVisualSize, aLogoData.Id() );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// Fades the station logo in.
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::FadeInStationLogoL( CAlfVisual& aVisual )
- {
- IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::FadeInCurrent()");
-
- iDelayedFadeIn = EIRLogoNoDelay;
-
- // Get start point and fade time.
- TAlfTimedPoint point = FadeInStartPoint( aVisual );
- TInt fadeTime = point.iX.TimeToTargetinMilliSeconds();
-
- // Fade the logo in.
- TAlfTimedValue opacity( 0.0f );
- opacity.SetStyle( EAlfTimedValueStyleDecelerate );
- opacity.SetTarget( 1.0f, fadeTime );
-
- aVisual.SetFlag( EAlfVisualFlagManualPosition );
- aVisual.SetPos( point );
- aVisual.SetOpacity( opacity );
-
- return;
- }
-
-// ---------------------------------------------------------------------------
-// Fades the current logo out. If logo is not the default logo, deletes it's
-// data after the fading (ansynchronously).
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::FadeOutCurrentLogo( CAlfVisual& aVisual )
- {
- IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::FadeOutCurrentLogo");
-
- CIRStationLogoData* logoData = LogoDataForId( iCurrentId );
-
- // Get target point.
- TAlfTimedPoint point = FadeOutTargetPoint( aVisual );
- TInt fadeTime = point.iX.TimeToTargetinMilliSeconds();
-
- // Fade the logo out.
- TAlfTimedValue opacity( aVisual.Opacity().ValueNow() );
- opacity.SetStyle( EAlfTimedValueStyleAccelerate );
- opacity.SetTarget( 0.0f, fadeTime );
-
- aVisual.SetFlag( EAlfVisualFlagManualPosition );
- aVisual.SetPos( point );
- aVisual.SetOpacity( opacity );
-
- if( logoData )
- {
- // This is not default logo, send event to destroy logo data.
- IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::FadeOutAndDeleteCurrent() -- sending custom event to delete logo data: 0x%x", logoData);
- Env().Send( TAlfCustomEventCommand( CIRStationLogoData::EIRCustomEventLogoFadeOutComplete,
- logoData,
- NULL), KVRLogoFadeTime );
- }
- }
-
-// ---------------------------------------------------------------------------
-// Returns fades out target point.
-// ---------------------------------------------------------------------------
-//
-TAlfTimedPoint CIRStationLogoControl::FadeOutTargetPoint( CAlfVisual& aVisual ) const
- {
- TAlfTimedPoint point( 0.0f, 0.0f );
- point.SetStyle( EAlfTimedValueStyleDecelerate );
-
- TAlfRealPoint size = aVisual.Size().ValueNow();
- TAlfRealPoint pos = aVisual.Pos().ValueNow();
-
- point = TAlfTimedPoint( pos.iX, pos.iY );
-
- TAlfRealPoint target = aVisual.Pos().Target();
-
- switch ( iFadeStyle )
- {
- case EIRFadeUnknown:
- point.SetTarget( TAlfRealPoint( target.iX, target.iY ), KVRLogoFadeTime );
- break;
- case EIRFadeLeftToRight:
- point.SetTarget( TAlfRealPoint( target.iX + size.iX, target.iY ), KVRLogoFadeTime );
- break;
- case EIRFadeRightToLeft:
- point.SetTarget( TAlfRealPoint( target.iX - size.iX, target.iY ), KVRLogoFadeTime );
- break;
- case EIRFadeTopToBottom:
- point.SetTarget( TAlfRealPoint( target.iX, target.iY + size.iY ), KVRLogoFadeTime );
- break;
- case EIRFadeBottomToTop:
- point.SetTarget( TAlfRealPoint( target.iX, target.iY - size.iY ), KVRLogoFadeTime );
- break;
- case EIRFadeNoFade:
- point.SetTarget( TAlfRealPoint( target.iX, target.iY ), 0 );
- break;
- default:
- break;
- }
- return point;
- }
-
-// ---------------------------------------------------------------------------
-// Returns fade in start point.
-// ---------------------------------------------------------------------------
-//
-TAlfTimedPoint CIRStationLogoControl::FadeInStartPoint( CAlfVisual& aVisual ) const
- {
- TAlfTimedPoint point( 0.0f, 0.0f );
- point.SetStyle( EAlfTimedValueStyleDecelerate );
-
- TAlfRealPoint size = aVisual.Size().ValueNow();
- TAlfRealPoint pos = aVisual.Pos().ValueNow();
-
- point = TAlfTimedPoint( pos.iX, pos.iY, KVRLogoFadeTime );
-
- switch ( iFadeStyle )
- {
- case EIRFadeUnknown:
- point.iX.SetValueNow( pos.iX );
- point.iY.SetValueNow( pos.iY );
- break;
- case EIRFadeLeftToRight:
- point.iX.SetValueNow( pos.iX - size.iX );
- point.iY.SetValueNow( pos.iY );
- break;
- case EIRFadeRightToLeft:
- point.iX.SetValueNow( pos.iX + size.iX );
- point.iY.SetValueNow( pos.iY );
- break;
- case EIRFadeTopToBottom:
- point.iX.SetValueNow( pos.iX );
- point.iY.SetValueNow( pos.iY - size.iY );
- break;
- case EIRFadeBottomToTop:
- point.iX.SetValueNow( pos.iX );
- point.iY.SetValueNow( pos.iY + size.iY );
- break;
- case EIRFadeNoFade:
- point.iX.SetValueNow( pos.iX );
- point.iY.SetValueNow( pos.iY );
- point.SetTarget( pos, 0 );
- break;
- default:
- break;
- }
- return point;
- }
-
-
-// ---------------------------------------------------------------------------
-// Sets the default image to the current visual
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::DestroyPreviousLogosL( const RArray<TInt>& aIdArray ,
- const CPtrC8Array& aRawData )
- {
-
- for(TInt value=0;value<iLogoData.Count();value++)
- {
- TInt Value=iLogoData[value]->Id();
- }
- if(iCount==0)
- {
- iCurrentId=KTwo;
- iCount++;
- iLogoData.ResetAndDestroy();
- for( TInt i = 0 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- }
-
- else if(iCount==1)
- {
- if(aRawData.Count()==1)
- {
- iCurrentId=KTwo;
- TInt i=0;
- delete iLogoData[i];
- iLogoData.Remove( i);
- for( TInt i = 0 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- }
- else
- {
- for( TInt i = 1 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
-
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- }
- iCount++;
- }
-
- else if(iCount>1)
- {
- if(aRawData.Count()==1)
- {
- iLogoData.ResetAndDestroy();
- iLogoDisplay=ETrue;
-
- for( TInt i = 0 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
-
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- }
- else if(aRawData.Count()==2 && iLogoData.Count()==1)
- {
- for( TInt i = 1 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
-
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- }
- else if(iLogoData.Count()==1&&!iLogoDisplay)
- {
- for( TInt i = 1 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
-
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- iLogoDisplay=ETrue;
- }
- else if(!iLogoDisplay)
- {
-
-
- for(TInt j = 0;j<aRawData.Count();j++)
- {
- if(aIdArray.Count())
- {
-
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[j], aRawData[j] );
-
- for(TInt i = 0;i<iLogoData.Count();i++)
- {
- if(!(data->Id()==iLogoData[i]->Id())&&(!iRet))
- {
- if(i==1)
- {
- DefaultlogoHandlingL(aIdArray, aRawData);
- }
- else
- {
- delete iLogoData[i];
- iLogoData.Remove( i);
- for( TInt i = 1 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
-
- CIRStationLogoData* data = CIRStationLogoData::
- NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- iRet++;
- }
-
- }
-
-
- }
-
- CleanupStack::PopAndDestroy( data );
- }
- }
- }
-
-
- }
-}
-// ---------------------------------------------------------------------------
-// Sets the default image to the current visual
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::DefaultlogoHandlingL( const RArray<TInt>& aIdArray ,
- const CPtrC8Array& aRawData )
- {
- for(TInt j = 0;j<aRawData.Count();j++)
- {
- TInt i=0;
- delete iLogoData[i];
- iLogoData.Remove( i);
- for( TInt i = 1 ; i < aRawData.Count() ; i++ )
- {
- if(aIdArray.Count())
- {
- CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
- iLogoData.AppendL( data );
- CleanupStack::Pop( data );
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// Sets the default image to the current visual
-// ---------------------------------------------------------------------------
-//
-void CIRStationLogoControl::FadeOutLogo(TInt /*aId*/)
- {
- CIRStationLogoData* previousLogoData = LogoDataForId( iCurrentId );
- // Fade the current logo out.
- if ( previousLogoData && previousLogoData->Visual() )
- {
- // Station logo.
- iFadeOut=ETrue;
- FadeOutCurrentLogo( *previousLogoData->Visual() );
- }
- iCurrentId=KTwo;
- }