diff -r 1a6714c53019 -r cce62ebc198e fmradio/fmradio/src/fmradioalfrdsviewer.cpp --- a/fmradio/fmradio/src/fmradioalfrdsviewer.cpp Thu Aug 19 09:55:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,425 +0,0 @@ -/* -* Copyright (c) 2007 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: Implementation of the class CFMRadioAlfIndicator -* -*/ - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include - -// brushes -#include -#include -#include -#include - -#include "debug.h" -#include "fmradioalfrdsviewer.h" -#include "fmradioalfrdsviewobserver.h" -// CONSTANTS - -const TInt KIndicatorFadeInDefaultDurationTime = 500; -const TInt KIndicatorFadeOutDefaultDurationTime = 500; -const TInt KRDSDisplayPeriod = 60000; //milliseconds = 1 min. -const TReal KDefaultOpacityInVisibleState = 1.0f; -const TReal KDefaultOpacityInHiddenState = 0.0f; -const TReal KRelativeFontSize = 0.10; - -// ============================ MEMBER FUNCTIONS =============================== - -// --------------------------------------------------------------------------- -// CFMRadioAlfIndicator::NewL -// Two-phase constructor of CFMRadioAlfIndicator -// --------------------------------------------------------------------------- -// -CFMRadioAlfRDSViewer* CFMRadioAlfRDSViewer::NewL( CAlfEnv& aEnv ) - { - CFMRadioAlfRDSViewer* self = new (ELeave) CFMRadioAlfRDSViewer( ); - CleanupStack::PushL(self); - self->ConstructL( aEnv ); - CleanupStack::Pop(self); - return self; - } - -// ---------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::CFMRadioAlfRDSViewer -// Default constructor -// ---------------------------------------------------------------------------- -// -CFMRadioAlfRDSViewer::CFMRadioAlfRDSViewer() -: iTextStyleId( KErrNotFound ), - iOpacityInVisibleState( KDefaultOpacityInVisibleState ), - iOpacityInHiddenState( KDefaultOpacityInHiddenState ), - iIsRdsTextVisible( EFalse ), - iRdsTextVisibilityTimerCompleted( ETrue ) - { - //No implementation needed - } - - -// ---------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetObserver -// Sets observer -// ---------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::SetObserver( MFMRadioAlfRdsViewObserver* aObserver ) - { - FTRACE( FPrint( _L( "CFMRadioAlfRDSViewer::SetObserver" ) ) ); - TInt index = iObservers.FindInAddressOrder( aObserver ); - if ( index == KErrNotFound ) - { - iObservers.InsertInAddressOrder( aObserver ); - } - } - -// ---------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::RemoveObserver -// Removes observer -// ---------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::RemoveObserver( MFMRadioAlfRdsViewObserver* aObserver ) - { - FTRACE( FPrint( _L( "CFMRadioAlfRDSViewer::RemoveObserver" ) ) ); - TInt index = iObservers.FindInAddressOrder( aObserver ); - - if ( index >= 0 ) - { - iObservers.Remove( index ); - } - } - -// ---------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::ConstructL -// Symbian 2nd phase constructor can leave. -// ---------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::ConstructL( CAlfEnv& aEnv ) - { - FTRACE( FPrint( _L( "CFMRadioAlfRDSViewer::ConstructL" ) ) ); - CAlfControl::ConstructL( aEnv ); - AddIndicatorLayerL(); - Hide(); - } - -// --------------------------------------------------------------------------- -// ~CFMRadioAlfRDSViewer::~CFMRadioAlfRDSViewer -// Destructor -// --------------------------------------------------------------------------- -// -CFMRadioAlfRDSViewer::~CFMRadioAlfRDSViewer() - { - FTRACE( FPrint( _L( "CFMRadioAlfRDSViewer::Destructor" ) ) ); - Env().CancelCustomCommands( this ); - if( iTextStyleId != KErrNotFound ) - { - CAlfTextStyleManager& manager = Env().TextStyleManager(); - manager.DeleteTextStyle( iTextStyleId ); - } - iRadioText.Close(); - iObservers.Close(); - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::OfferEventL -// From CAlfControl, takes care of alfred event handling. -// --------------------------------------------------------------------------- -// -TBool CFMRadioAlfRDSViewer::OfferEventL( const TAlfEvent& aEvent ) - { - FTRACE( FPrint( _L( "CFMRadioAlfRDSViewer::OfferEventL" ) ) ); - TBool eventHandled = EFalse; - - if ( aEvent.IsCustomEvent() ) - { - switch( aEvent.CustomParameter() ) - { - case EFadeInCompleted: - { - eventHandled = ETrue; - Env().Send( TAlfCustomEventCommand( ERDSDisplayTimerCompleted, this ), KRDSDisplayPeriod ); - break; - } - case EOldTextFadeEffectCompleted: - { - eventHandled = ETrue; - iText->SetTextL( iRadioText ); - // fade in the new radio text - Fade( iText, KIndicatorFadeInDefaultDurationTime, iOpacityInVisibleState ); - Env().Send( TAlfCustomEventCommand( EFadeInCompleted, this ), KIndicatorFadeOutDefaultDurationTime ); - break; - } - case ERDSDisplayTimerCompleted: - { - eventHandled = ETrue; - iRdsTextVisibilityTimerCompleted = ETrue; - iIsRdsTextVisible = EFalse; - Fade( iText, KIndicatorFadeOutDefaultDurationTime, iOpacityInHiddenState ); - for ( TInt i = 0 ; i < iObservers.Count() ; i++ ) - { - iObservers[i]->NotifyRdsTextTimerCompletion(); - } - break; - } - default: - { - break; - } - } - } - return eventHandled; - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetRect -// Sets the indicator rectangle. -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::SetRect( const TRect& aRect ) - { - iRect = aRect; - TRAP_IGNORE( SetTextStyleL() ); - if ( iIndicatorTextAnchor ) - { - SetAbsoluteCornerAnchors( iIndicatorTextAnchor, 0, iRect.iTl, iRect.iBr ); - iIndicatorTextAnchor->UpdateChildrenLayout(); - // It seems that layout is not updated if the text is not changed - TRAP_IGNORE( iText->SetTextL( KNullDesC ); - iText->SetTextL( iRadioText ); ) - } - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::AddIndicatorLayerL -// Creates the needed drawing layers and visual objects -// for the indicator. -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::AddIndicatorLayerL() - { - // Create an anchor for the indicator layout - iIndicatorTextAnchor = CAlfAnchorLayout::AddNewL( *this ); - - // Create visual object for the indicator - iText = CAlfTextVisual::AddNewL( *this, iIndicatorTextAnchor ); - iText->SetColor( iTextColor ); - iText->SetAlign( EAlfAlignHCenter, EAlfAlignVCenter ); - iText->SetWrapping( CAlfTextVisual::ELineWrapBreak ); - iText->SetClipping( ETrue ); - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetTextStyleL -// Creates the text style for indicator -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::SetTextStyleL() - { - CAlfTextStyleManager& manager = Env().TextStyleManager(); - CAlfTextStyle* textStyle = NULL; - if( iTextStyleId == KErrNotFound ) - { - iTextStyleId = manager.CreatePlatformTextStyleL( EAlfTextStyleNormal ); - } - - textStyle = manager.TextStyle( iTextStyleId ); - // 5 lines - textStyle->SetTextSizeInPixels( ( iRect.Height()*KRelativeFontSize ), ETrue ); - //textStyle->SetTextPaneHeightInPixels(iRect.Height(), ETrue ); - iText->SetTextStyle( iTextStyleId ); - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetTextColor -// Changes indicator text color. -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::SetTextColor( const TRgb& aTextColor ) - { - iTextColor = aTextColor; - if( iText ) - { - iText->SetColor( aTextColor ); - } - } - -// --------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetTextL -// Sets the indicator text. -// --------------------------------------------------------- -// -TBool CFMRadioAlfRDSViewer::SetTextL( const TDesC& aText ) - { - TBool result = EFalse; - if ( aText.Length() > 0 ) - { - if ( iRadioText.Compare( aText ) != 0 ) - { - iRdsTextVisibilityTimerCompleted = EFalse; - Env().CancelCustomCommands( this, ERDSDisplayTimerCompleted ); - - iRadioText.Close(); - iRadioText.Create( aText ); - - if ( !iIsRdsTextVisible ) - { - iText->SetTextL( aText ); - } - else - { - // fade out the old radio text - Fade( iText, KIndicatorFadeOutDefaultDurationTime, iOpacityInHiddenState ); - Env().Send( TAlfCustomEventCommand( EOldTextFadeEffectCompleted, this ), KIndicatorFadeOutDefaultDurationTime ); - } - result = ETrue; - } - } - return result; - } - -// --------------------------------------------------------- -// CFMRadioAlfRDSViewer::Show -// Shows the indicator with the defined opacity value. -// --------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::Show() - { - if ( !iIsRdsTextVisible ) - { - iIsRdsTextVisible = ETrue; - Fade( iText, KIndicatorFadeInDefaultDurationTime, iOpacityInVisibleState ); - Env().Send( TAlfCustomEventCommand( EFadeInCompleted, this ), KIndicatorFadeOutDefaultDurationTime ); - } - } - -// --------------------------------------------------------- -// CFMRadioAlfRDSViewer::Hide -// Hides the indicator with the defined opacity value. -// --------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::Hide() - { - if ( iIsRdsTextVisible ) - { - // cancel timer event - Env().CancelCustomCommands( this, ERDSDisplayTimerCompleted ); - iIsRdsTextVisible = EFalse; - Fade( iText, KIndicatorFadeOutDefaultDurationTime, iOpacityInHiddenState ); - } - } - -// --------------------------------------------------------- -// CFMRadioAlfRDSViewer::Reset -// Cancel events and flush radio text cache -// --------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::Reset() - { - FTRACE( FPrint( _L( "CFMRadioAlfRDSViewer::Reset" ) ) ); - iRdsTextVisibilityTimerCompleted = ETrue; - iRadioText.Close(); - Env().CancelCustomCommands( this ); - } -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetOpacityInVisibleState -// Sets the indicator opacity in visible state. -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::SetOpacityInVisibleState( const TReal aOpacity ) - { - iOpacityInVisibleState = aOpacity; - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetOpacityInHiddenState -// Sets the indicator opacity in hidden state. -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::SetOpacityInHiddenState( const TReal aOpacity ) - { - iOpacityInHiddenState = aOpacity; - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::SetAbsoluteCornerAnchors -// Sets absolute rect of the anchor by top left and bottom right points. -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::SetAbsoluteCornerAnchors( CAlfAnchorLayout* aAnchor, - TInt aOrdinal, - const TPoint& aTopLeftPosition, - const TPoint& aBottomRightPosition ) - { - if ( aAnchor ) - { - // Set top/left anchor. - aAnchor->Attach( aOrdinal, - EAlfAnchorTypeTopLeft, - TAlfXYMetric( TAlfMetric( aTopLeftPosition.iX ), TAlfMetric( aTopLeftPosition.iY ) ), - EAlfAnchorAttachmentOriginTopLeft ); - - // Set bottom/right anchor. - aAnchor->Attach( aOrdinal, - EAlfAnchorTypeBottomRight, - TAlfXYMetric( TAlfMetric( aBottomRightPosition.iX ), TAlfMetric( aBottomRightPosition.iY ) ), - EAlfAnchorAttachmentOriginTopLeft ); - } - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::Fade -// Sets the fading animation to the CAlfVisual object. -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::Fade( CAlfVisual* aVisual, TInt aFadingTime, TReal aOpacity ) const - { - TAlfTimedValue opacity; - opacity.SetTarget( aOpacity, aFadingTime ); // and smooth target - aVisual->SetOpacity( opacity ); - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::IsShowingRdsTextArea -// --------------------------------------------------------------------------- -// -TBool CFMRadioAlfRDSViewer::IsShowingRdsTextArea() const - { - return iIsRdsTextVisible; - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::Deactivate -// from MFMRadioIdleControlInterface -// --------------------------------------------------------------------------- -// -void CFMRadioAlfRDSViewer::Deactivate() - { - } - -// --------------------------------------------------------------------------- -// CFMRadioAlfRDSViewer::IsRdsTextVisibilityTimerCompleted -// --------------------------------------------------------------------------- -// -TBool CFMRadioAlfRDSViewer::IsRdsTextVisibilityTimerCompleted() - { - return iRdsTextVisibilityTimerCompleted; - } - -// End of File