diff -r 2e1adbfc62af -r ee64f059b8e1 internetradio2.0/uisrc/irstationinfocontainer.cpp --- a/internetradio2.0/uisrc/irstationinfocontainer.cpp Mon May 03 12:25:23 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,988 +0,0 @@ -/* -* Copyright (c) 2007-2010 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: Container class for the detail view -* -*/ - - -/* --------------------------------------------------------------------------- -* Version history: -* Template version: -* -* -* Version: 4, Fri Aug 1 16:17:00 2008 by Rohit -* Ref: -* Fixed bug - Once StationInfo view is opened for logo station, on listen -* StationInfo view was shown above NowPlayingView toolbar -* -* Version: 3, Thu Jul 3 16:30:00 2008 by Rohit -* Ref: -* Codescanner fixes -* -* Version: 2, Thu May 22 19:20:00 2008 by Rohit -* Ref: -* Implemented StationInfo landscape view. Adjusted line spacings per UI spec. -* -* Version: 1, Wed Apr 30 16:15:00 2008 by Rohit -* Ref: -* Created. Implemented StationInfo potrait view -* -* -* ============================================================================ -*/ - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include // AknLayoutUtils -/* no need to change to lower case */ -#include // CAknsBasicBackgroundControlContext -#include // MAknsSkinInstance -#include // AknsDrawUtils -#include // CEikRichTextEditor -#include // CRichText -#include -#include - -#include "irdebug.h" -#include "irstationinfocontainer.h" -#include "irstationinfoview.h" -#include "irisdspreset.h" -#include "irchannelserverurl.h" -#include "irui.h" -#include "irimageconverter.h" -#include "irstationinfopicture.h" - - -// CONSTANT DECLARATIONS -_LIT(Kspace," "); -_LIT(KHttp,"http://"); -const TInt KZero = 0; -const TInt KOne = 1; -const TInt KTwo = 2; -const TInt KBufferSize = 128; -#define KSI_USERDEFINED 0 // Indicates that the station is of type user defined -#define KSI_ISDS_DEFINED 1 -const TInt KHttpLength = 7; - -const TInt KLINES_COUNT = 50; -const TInt KTEXT_LIMIT = 3000; - -const TInt KLOGO_WIDTH = 200; -const TInt KLOGO_HEIGHT = 200; - -const TInt KRICHTEXT_ORIGIN = 0; -const TInt KRICHTEXT_LENGTH = 0; - -const TInt KPARA_LINE_SPACING = 25; // twips -const TInt KPARA_SPACING = 45; // twips - -const TInt KLEFT_MARGIN_POTRAIT = 20; // twips -const TInt KRIGHT_MARGIN_POTRAIT = 10; // twips - -const TInt KLEFT_MARGIN_LANDSCAPE_LOGO = 0; // twips -const TInt KLEFT_MARGIN_LANDSCAPE_NOLOGO = 10; // twips -const TInt KLEFT_LOGO_MARGIN_LANDSCAPE = 20; // twips -const TInt KRIGHT_MARGIN_LANDSCAPE = 10; // twips - -const TInt KHEADINGTEXT_HEIGHT_DECREMENT = -5; // twips -const TInt KNORMALTEXT_HEIGHT_DECREMENT = 5; // twips - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::CIRStationInfoContainer -// C++ default constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CIRStationInfoContainer::CIRStationInfoContainer( CIRStationInfoView* aStationInfoView ) - : iBgContext( NULL ), - iEditorLogo( NULL ), - iEditor( NULL ), - iBitmap(NULL), iBitmapMask(NULL), - iStationInfoView( aStationInfoView ), - iConverter(NULL), iError(KErrNone), - iImageDrawn( EFalse ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::CIRStationInfoContainer" ); - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CIRStationInfoContainer::ConstructL( const TRect& aRect ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::ConstructL - Entering" ); - CreateWindowL(); - SetRect( aRect ); - - // background context for mop object - iBgContext = CAknsBasicBackgroundControlContext::NewL( - KAknsIIDQsnBgAreaMain, Rect(), EFalse ); - - iEditor = CreateEditorL(); - iEditorLogo = CreateEditorL(); - iEditorLogo->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EOff ); - iConverter = CIRImageConverter::NewL(); - iConverter->EnableAnimations( ETrue ); - iConverter->SetObserver( this ); - - IRLOG_DEBUG( "CIRStationInfoContainer::ConstructL - Exiting" ); - } - - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::CreateEditorL -// Instantiates RichTextEditor -// ----------------------------------------------------------------------------- -// -CEikRichTextEditor* CIRStationInfoContainer::CreateEditorL() - { - IRLOG_DEBUG( "CIRStationInfoContainer::CreateEditorL - Entering" ); - CEikRichTextEditor* editor = new (ELeave) CEikRichTextEditor; - CleanupStack::PushL( editor ); - - editor->SetContainerWindowL(*this); - editor->ConstructL(this, KLINES_COUNT, KTEXT_LIMIT, CEikEdwin::EReadOnly ); - - editor->RichText()->Reset(); - - // create vertical scrollbar - editor->CreateScrollBarFrameL(); - editor->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto ); - editor->ActivateL(); - CleanupStack::Pop(editor); // editor - - IRLOG_DEBUG( "CIRStationInfoContainer::CreateEditorL - Exiting" ); - return editor; - } - - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CIRStationInfoContainer* CIRStationInfoContainer::NewL( const TRect& aRect, - CIRStationInfoView* aView ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::NewL - Entering" ); - CIRStationInfoContainer* self = new ( ELeave ) CIRStationInfoContainer( aView); - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop( self ); - - IRLOG_DEBUG( "CIRStationInfoContainer::NewL - Exiting" ); - return self; - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::~CIRStationInfoContainer -// Destructor. -// ----------------------------------------------------------------------------- -// -CIRStationInfoContainer::~CIRStationInfoContainer() - { - IRLOG_DEBUG( "CIRStationInfoContainer::~CIRStationInfoContainer - Entering" ); - if (iBgContext) - { - delete iBgContext; - iBgContext = NULL; - } - if (iEditor) - { - iEditor->RichText()->Reset(); - delete iEditor; - iEditor = NULL; - } - if (iEditorLogo) - { - iEditorLogo->RichText()->Reset(); - delete iEditorLogo; - iEditorLogo = NULL; - } - if( iBitmap ) - { - delete iBitmap; - iBitmap = NULL; - } - if( iBitmapMask ) - { - delete iBitmapMask; - iBitmapMask = NULL; - } - if( iConverter ) - { - delete iConverter; - iConverter = NULL; - } - iStationInfoView = NULL; // not owned - IRLOG_DEBUG( "CIRStationInfoContainer::~CIRStationInfoContainer - Exiting" ); - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::CountComponentControls -// From base class CCoeControl -// Returns number of controls contained in a compound control -// ----------------------------------------------------------------------------- -// -TInt CIRStationInfoContainer::CountComponentControls() const - { - IRLOG_DEBUG( "CIRStationInfoContainer::CountComponentControls" ); - return iEditor ? 2 : 0; - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::ComponentControl -// From base class CCoeControl -// Returns an indexed component of a compound control -// ----------------------------------------------------------------------------- -// -CCoeControl* CIRStationInfoContainer::ComponentControl( TInt aIndex ) const - { - IRLOG_DEBUG( "CIRStationInfoContainer::ComponentControl - Entering" ); - - CCoeControl* ctl = NULL; - - switch(aIndex) - { - case 0: - ctl = iEditor; - break; - case 1: - ctl = iEditorLogo; - break; - default: - break; - } - IRLOG_DEBUG( "CIRStationInfoContainer::ComponentControl - Exiting" ); - return ctl; - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::OfferKeyEventL -// From base class CCoeControl -// Handles key events -// ----------------------------------------------------------------------------- -// -TKeyResponse CIRStationInfoContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::OfferKeyEventL" ); - - TKeyResponse res = EKeyWasNotConsumed; - - if (aType == EEventKey) - { - if (aKeyEvent.iCode == EKeyDownArrow) - { - iEditor->MoveCursorL (TCursorPosition::EFPageDown, EFalse); - res = EKeyWasConsumed; - } - else if (aKeyEvent.iCode == EKeyUpArrow) - { - iEditor->MoveCursorL (TCursorPosition::EFPageUp, EFalse); - res = EKeyWasConsumed; - } - else - { - res = iEditor->OfferKeyEventL(aKeyEvent, aType); - } - } - return res; - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::MopSupplyObject -// From base class CCoeControl -// Retrieves an object of the same type as that encapsulated in aId. -// ----------------------------------------------------------------------------- -// -TTypeUid::Ptr CIRStationInfoContainer::MopSupplyObject( TTypeUid aId ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::MopSupplyObject - Entering" ); - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - - IRLOG_DEBUG( "CIRStationInfoContainer::MopSupplyObject - Exiting" ); - return CCoeControl::MopSupplyObject( aId ); - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::SizeChanged -// From base class CCoeControl -// Responds to changes to the size and position of the contents of this control. -// ----------------------------------------------------------------------------- -// -void CIRStationInfoContainer::SizeChanged() - { - IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Entering" ); - if( !iEditor ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Exiting" ); - return; - } - if ( IsStationSupportsLogo() && !iBitmap) // logo supported but not downloaded yet - { - IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Exiting" ); - return; - } - - if( iClientRect != Rect() ) - { - TRAPD( err, ReloadStationInformationL() ); - if(err != KErrNone) - { - IRLOG_WARNING( "CIRStationInfoContainer::SizeChanged - ReloadStationInformationL() failed" ); - } - } - IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Exiting" ); - } - -// ----------------------------------------------------------------------------- -// CIRStationInfoContainer::Draw -// From base class CCoeControl -// Draws the control. -// ----------------------------------------------------------------------------- -// -void CIRStationInfoContainer::Draw( const TRect& /*aRect*/ ) const - { - IRLOG_DEBUG( "CIRStationInfoContainer::Draw - Entering" ); - SystemGc(); - - // draw background from skin - AknsUtils::SkinInstance(); // PC Lint #529 Fix - AknsDrawUtils::ControlContext( this ); // PC Lint #529 Fix - IRLOG_DEBUG( "CIRStationInfoContainer::Draw - Exiting" ); - } - -// --------------------------------------------------------------------------- -// CIRStationInfoContainer::StartConvertStationLogoL() -// Issues logo scaling request -// --------------------------------------------------------------------------- -// -void CIRStationInfoContainer::StartConvertStationLogoL( ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::StartConvertStationLogoL - Entering" ); - if ( IsStationSupportsLogo() ) - { - iConverter->SetDataL( iStationInfoView->iStationPreset->GetLogoData() ); - if(iError==KErrNone) - { - TInt channelId = iStationInfoView->iStationPreset->GetId(); - iConverter->StartL( TSize(KLOGO_WIDTH, KLOGO_HEIGHT), channelId ); - } - } - IRLOG_DEBUG( "CIRStationInfoContainer::StartConvertStationLogoL - Exiting" ); - } - - -// --------------------------------------------------------------------------- -// CIRStationInfoContainer::HandleImageConversionEventL() -// From MIRImageConverterObserver -// Invoked after image scaling is completed. -// --------------------------------------------------------------------------- -// -void CIRStationInfoContainer::HandleImageConversionEventL( - MIRImageConverterObserver::TIRImageConversionEvent /*aEvent*/,TInt /*aId*/,TInt aError) - { - IRLOG_DEBUG( "CIRStationInfoContainer::HandleImageConversionEventL - Entering" ); - // Retreive scaled bitmaps - iError=aError; - if(iError!=KErrNone) - { - return; - } - - iConverter->TransferBitmapOwnership( iBitmap, iBitmapMask ); - - TRect rectParent = Rect(); - if( !iBitmap && !iBitmapMask ) - { - IRLOG_WARNING("CIRStationInfoContainer::HandleImageConversionEventL- LogoScaling failed"); - } - - else if( iClientRect != rectParent ) - { - ReloadStationInformationL(); - } - - // Potrait view with logo - else if( rectParent.Height() >= rectParent.Width() ) - { - DisplayStationLogoL( iEditor, EFalse ); - iEditorLogo->DrawNow(); - - TPoint point1( rectParent.iTl.iX, rectParent.iTl.iY ); - TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect(); - iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(), - rectParent.Height() ) ); - - iEditor->DrawDeferred(); - } - // Landscape view with logo - else - { - DisplayStationLogoL( iEditorLogo, ETrue ); - - TPoint point1( rectParent.iTl.iX, rectParent.iTl.iY ); - TInt width1 = rectParent.Width()/2, height1 = rectParent.Height(); - iEditorLogo->SetExtent( point1, TSize( width1, height1 ) ); - - iEditorLogo->DrawDeferred(); - iEditor->DrawDeferred(); - } - - IRLOG_DEBUG( "CIRStationInfoContainer::HandleImageConversionEventL - Exiting" ); - } - -// --------------------------------------------------------------------------- -// CIRStationInfoContainer::ReloadStationInformationL() -// Renders the logo and text in the view as per the current resolution -// --------------------------------------------------------------------------- -// -void CIRStationInfoContainer::ReloadStationInformationL() - { - IRLOG_DEBUG( "CIRStationInfoContainer::ReloadStationInformationL - Entering" ); - - // save current size to avoid SizeChanged multiple refreshes (optimize perf.) - iClientRect = Rect(); - - iEditor->RichText()->Reset(); - CreateRichTextDataL(); - iImageDrawn = EFalse; - - // - // Potrait view with/without logo - // - TRect rectParent = Rect(); - if( rectParent.Height() >= rectParent.Width() ) - { - DisplayStationLogoL( iEditor, EFalse ); - iEditorLogo->DrawNow(); - iEditor->RichText()->InsertL( iEditor->RichText()->DocumentLength(), - CEditableText::EParagraphDelimiter); - DisplayStationInfoL( EFalse ); - - iEditor->DrawDeferred(); - - TPoint point1( rectParent.iTl.iX, rectParent.iTl.iY ); - TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect(); - iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(), - rectParent.Height() ) ); - } - - // - // Landscape view without logo - // - else if( !IsStationSupportsLogo() ) - { - iEditorLogo->MakeVisible( EFalse ); - iEditorLogo->DrawNow(); - - DisplayStationInfoL( ETrue ); - - TPoint point1( rectParent.iTl.iX, rectParent.iTl.iY ); - TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect(); - iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(), - rectParent.Height() ) ); - - iEditor->DrawDeferred(); - } - - // - // Landscape view with logo - // - else - { - DisplayStationLogoL( iEditorLogo, ETrue ); - DisplayStationInfoL( ETrue ); - - TPoint point1( rectParent.iTl.iX, rectParent.iTl.iY ); - TInt width1 = rectParent.Width()/2, height1 = rectParent.Height(); - iEditorLogo->SetExtent( point1, TSize( width1, height1 ) ); - - TPoint point2( rectParent.iTl.iX+width1, rectParent.iTl.iY ); - TInt width2 = rectParent.Width()/2, height2 = rectParent.Height(); - TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect(); - iEditor->SetExtent( point2, TSize( width2 - scrollBarRect.Width(), height2 ) ); - - iEditor->DrawDeferred(); - iEditorLogo->DrawDeferred(); - } - - ActivateL(); - iEditor->SetCursorPosL(KZero, EFalse ); - - IRLOG_DEBUG( "CIRStationInfoContainer::ReloadStationInformationL - Exiting" ); - } - -// --------------------------------------------------------------------------- -// CIRStationInfoContainer::DisplayStationLogoL -// Renders the logo in the view as per the current resolution -// --------------------------------------------------------------------------- -// -void CIRStationInfoContainer::DisplayStationLogoL( CEikRichTextEditor* aEditor, - TBool aIsLandscape ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationLogoL - Entering" ); - if( iBitmap || iBitmapMask ) - { - // - // Horizontally Center Align logo - // - TParaFormatMask paraFormatMask; - CParaFormat *paraFormat = CParaFormat::NewL(); - CleanupStack::PushL( paraFormat ); - - CRichText* richTextLogo = aEditor->RichText(); - richTextLogo->GetParaFormatL( paraFormat, paraFormatMask, 0, 0 ); - paraFormatMask.SetAll(); - if( aIsLandscape ) - { - paraFormat->iLeftMarginInTwips = KLEFT_LOGO_MARGIN_LANDSCAPE; - } - paraFormat->iHorizontalAlignment = CParaFormat::ECenterAlign; - richTextLogo->ApplyParaFormatL(paraFormat, paraFormatMask, 0, 0 ); - CleanupStack::PopAndDestroy( paraFormat ); - - // Vertical center logo - // - if( aIsLandscape ) - { - TCharFormat charFormatLogo; - TCharFormatMask formatMask; - richTextLogo->GetCharFormat( charFormatLogo, formatMask, 0, 0); - formatMask.SetAll(); - - charFormatLogo.iFontPresentation.iPictureAlignment - = TFontPresentation::EAlignCentered; - - TInt heightPixels = aEditor->TextLayout()->BandHeight(); - charFormatLogo.iFontSpec.iHeight = heightPixels; - - richTextLogo->SetInsertCharFormatL(charFormatLogo, formatMask, - richTextLogo->DocumentLength()); - } - - // remove existing frame if any - if( aIsLandscape ) - { - iEditorLogo->MakeVisible( ETrue ); - iEditorLogo->RichText()->Reset(); - } - else if( !iImageDrawn ) - { - iEditorLogo->MakeVisible( EFalse ); - iEditorLogo->RichText()->Reset(); - iImageDrawn = ETrue; - } - else - { - iEditorLogo->MakeVisible( EFalse ); - iEditorLogo->RichText()->Reset(); - richTextLogo->DeleteL( KZero, KTwo ); - } - - // Display scaled station logo - // - CIRStationInfoPicture* picture = new(ELeave) CIRStationInfoPicture - ( SystemGc(), *iBitmap, *iBitmapMask ); - CleanupStack::PushL(picture); - TPictureHeader picHeader; - picHeader.iPicture = TSwizzle( picture ); - richTextLogo->InsertL( KZero, CEditableText::ELineBreak); - richTextLogo->InsertL( KOne, picHeader); - CleanupStack::Pop( picture ); // RichTextEditor owns the picture - - if( aIsLandscape ) - { - richTextLogo->CancelInsertCharFormat(); - } - } - IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationLogoL - Exiting" ); - } - -// --------------------------------------------------------------------------- -// CIRStationInfoContainer::DisplayStationInfoL -// Reads station info from preset and renders the text in the view -// --------------------------------------------------------------------------- -// -void CIRStationInfoContainer::DisplayStationInfoL( TBool aIsLandscape ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationInfoL - Entering" ); - CRichText* richText = iEditor->RichText(); - - // Horizontally Left Align - // - TParaFormatMask paraFormatMask; - CParaFormat *paraFormat = CParaFormat::NewL(); - CleanupStack::PushL( paraFormat ); - - richText->GetParaFormatL( paraFormat, paraFormatMask, KRICHTEXT_ORIGIN, KRICHTEXT_LENGTH ); - paraFormatMask.SetAll(); - - paraFormat->iLineSpacingInTwips = KPARA_LINE_SPACING; - paraFormat->iSpaceAfterInTwips = KPARA_SPACING; - if( aIsLandscape && IsStationSupportsLogo() ) // Landscape with logo - { - paraFormat->iLeftMarginInTwips = KLEFT_MARGIN_LANDSCAPE_LOGO; - paraFormat->iRightMarginInTwips = KRIGHT_MARGIN_LANDSCAPE; - } - else if( aIsLandscape && !IsStationSupportsLogo() ) // Landscape without logo - { - paraFormat->iLeftMarginInTwips = KLEFT_MARGIN_LANDSCAPE_NOLOGO; - paraFormat->iRightMarginInTwips = KRIGHT_MARGIN_LANDSCAPE; - } - else // Potrait - { - paraFormat->iLeftMarginInTwips = KLEFT_MARGIN_POTRAIT; - paraFormat->iRightMarginInTwips = KRIGHT_MARGIN_POTRAIT; - } - paraFormat->iHorizontalAlignment = CParaFormat::ELeftAlign; - paraFormat->iKeepTogether = ETrue; - richText->ApplyParaFormatL(paraFormat, paraFormatMask, - richText->DocumentLength(), KRICHTEXT_LENGTH ); - CleanupStack::PopAndDestroy( paraFormat ); - - // charFormats for bold & bigger headings - // - TCharFormat cfOriginal; - TCharFormatMask formatMask; - richText->GetCharFormat( cfOriginal, formatMask, KRICHTEXT_ORIGIN, KRICHTEXT_LENGTH); - formatMask.SetAll(); - - TCharFormat cfHeading = cfOriginal; - cfHeading.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold); - cfHeading.iFontSpec.iHeight -= KHEADINGTEXT_HEIGHT_DECREMENT; - - TCharFormat cfMedium = cfOriginal; - cfMedium.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold); - cfMedium.iFontSpec.iHeight -= KNORMALTEXT_HEIGHT_DECREMENT; - - TCharFormat cfNormal = cfOriginal; - cfNormal.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal); - cfNormal.iFontSpec.iHeight -= KNORMALTEXT_HEIGHT_DECREMENT; - - // - // Read labels - // - HBufC* stationNameLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_NAME ); - HBufC* stationDescLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_DESCRIPTION ); - HBufC* stationGenreLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_GENRE ); - HBufC* stationLanguageLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_LANGUAGE ); - HBufC* stationCountryLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_COUNTRY ); - HBufC* stationTypeLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_TYPE ); - HBufC* stationStreamLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_STREAM ); - HBufC* stationTypeManual = StringLoader::LoadLC( R_IRAPP_STATIONINFO_TYPEMANUAL ); - HBufC* stationTypeIsds = StringLoader::LoadLC( R_IRAPP_STATIONINFO_TYPEISDS ); - - // - // Retrieve Station Information - // - CIRIsdsPreset* stationPreset = iStationInfoView->iStationPreset; - const TDesC& stationName = stationPreset->GetName(); - const TDesC& stationDescription = stationPreset->GetDescription(); - const TDesC& stationGenre = stationPreset->GetGenreName(); - const TDesC& stationLang = stationPreset->GetLangName(); - const TDesC& stationCountry = stationPreset->GetCountryName(); - TInt stationType = stationPreset->GetChannelType(); - - // Add station name - richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), *stationNameLabel); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength()); - - if( stationName.Length() ) - { - richText->InsertL( richText->DocumentLength(), stationName); - } - else - { - HBufC* stationUnnamed = StringLoader::LoadLC( R_IRAPP_STATIONINFO_UNNAMED ); - richText->InsertL( richText->DocumentLength(), *stationUnnamed); - CleanupStack::PopAndDestroy(stationUnnamed); - } - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - - // Add station description - if( stationDescription.Length() ) - { - richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), *stationDescLabel); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), stationDescription); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - } - - // Add station genre - if( stationGenre.Length() ) - { - richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), *stationGenreLabel); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), stationGenre); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - } - - // Add station language - if( stationLang.Length() ) - { - richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), *stationLanguageLabel); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), stationLang); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - } - - // Add station country - if( stationCountry.Length() ) - { - richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), *stationCountryLabel); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), stationCountry); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - } - - // Station Type - richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), *stationTypeLabel); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - - richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength()); - if ( stationType == KSI_ISDS_DEFINED ) - { - richText->InsertL( richText->DocumentLength(), *stationTypeIsds); - } - else - { - richText->InsertL( richText->DocumentLength(), *stationTypeManual); - } - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - - // - // Station Bitrates and Urls - // - if( stationPreset->GetUrlCount() > KZero ) - { - richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength()); - richText->InsertL( richText->DocumentLength(), *stationStreamLabel); - richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength()); - } - - // for ISDS channels - RArray channelBitrates; - stationPreset->GetAvailableBitrates( channelBitrates ); - CleanupClosePushL( channelBitrates ); - - for(TInt bitrateCounter = 0; - stationType == KSI_ISDS_DEFINED && bitrateCounter < channelBitrates.Count(); - ++bitrateCounter) - { - HBufC *bitrateText = StringLoader::LoadLC( - R_IRAPP_STATIONINFO_BITRATE, channelBitrates[bitrateCounter] ); - TBuf bitRate; - bitRate.Append(*bitrateText); - CleanupStack::PopAndDestroy(bitrateText); - bitRate.Append(Kspace); - - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->InsertL( richText->DocumentLength(), bitRate ); - - CDesCArrayFlat* pUrlsForBitrate = stationPreset-> - GetExactUrlForBitrateL( channelBitrates[bitrateCounter] ); - CleanupStack::PushL( pUrlsForBitrate ); - - for(TInt urlCounter = 0; urlCounter < pUrlsForBitrate->Count(); ++urlCounter) - { - HBufC* url = (*pUrlsForBitrate)[urlCounter].AllocLC(); - - TInt index =url->Des().Find(KHttp); - if(index!=KErrNotFound) - { - url->Des().Delete(index,KHttpLength); - } - - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->InsertL( richText->DocumentLength(), *url ); - - CleanupStack::PopAndDestroy(url); - } - CleanupStack::PopAndDestroy( pUrlsForBitrate ); - } - CleanupStack::PopAndDestroy( &channelBitrates ); - - // for User Defined channel - if( stationType == KSI_USERDEFINED && stationPreset->GetUrlCount() > 0 ) - { - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - - HBufC* url = stationPreset->GetChannelUrlAtL(0).AllocLC(); - - TInt index =url->Des().Find(KHttp); - if(index!=KErrNotFound) - { - url->Des().Delete(index,KHttpLength); - } - richText->InsertL( richText->DocumentLength(), *url ); - CleanupStack::PopAndDestroy(url); - } - - // Cleanup String labels - CleanupStack::PopAndDestroy(stationTypeIsds); - CleanupStack::PopAndDestroy(stationTypeManual); - CleanupStack::PopAndDestroy(stationStreamLabel); - CleanupStack::PopAndDestroy(stationTypeLabel); - CleanupStack::PopAndDestroy(stationCountryLabel); - CleanupStack::PopAndDestroy(stationLanguageLabel); - CleanupStack::PopAndDestroy(stationGenreLabel); - CleanupStack::PopAndDestroy(stationDescLabel); - CleanupStack::PopAndDestroy(stationNameLabel); - - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - - TRect rectParent = Rect(); - if ( IsStationSupportsLogo() && rectParent.Height() >= rectParent.Width() ) - { - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak); - richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak); - richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak); - richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak); - richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak); - richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak); - richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter); - } - - richText->CancelInsertCharFormat(); - - IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationInfoL - Exiting" ); - } - -// --------------------------------------------------------- -// CIRStationInfoContainer::CreateRichTextDataL -// Initializes the rich text with font, color, anti-aliasing -// --------------------------------------------------------- -// -void CIRStationInfoContainer::CreateRichTextDataL() - { - IRLOG_DEBUG( "CIRStationInfoContainer::CreateRichTextData - Entering" ); - TCharFormat charFormat; - TCharFormatMask formatMask; - iEditor->RichText()->GetCharFormat( charFormat, formatMask, 0, 0 ); - - TRgb textColor; - TInt error = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), textColor, - KAknsIIDQsnTextColors,EAknsCIQsnTextColorsCG6 ); - if ( error != KErrNone ) - { - textColor = KRgbBlack; - } - - charFormat.iFontPresentation.iTextColor = textColor; - charFormat.iFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap); - formatMask.SetAll(); - - CCharFormatLayer* globalCharLayer = NULL; - globalCharLayer = CCharFormatLayer::NewL( charFormat, formatMask ); - CleanupStack::PushL( globalCharLayer ); - - iEditor->SetCharFormatLayer( globalCharLayer ); - - CleanupStack::Pop(globalCharLayer); - IRLOG_DEBUG( "CIRStationInfoContainer::CreateRichTextData - Exiting" ); - } - - -// ---------------------------------------------------------------------------------------- -// CIRStationInfoContainer::HandleResourceChange -// From base class CCoeControl -// Handles a change to the control's resources like background drawing and S60 skin changes -// -// ---------------------------------------------------------------------------------------- -void CIRStationInfoContainer::HandleResourceChange( TInt aType ) - { - IRLOG_DEBUG( "CIRStationInfoContainer::HandleResourceChange - Entering" ); - CCoeControl::HandleResourceChange( aType ); - - if( aType == KEikDynamicLayoutVariantSwitch ) - { - TRect rect; - TBool bRes = AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect); - SetRect(rect); - - iEditor->HandleResourceChange( aType ); - iEditorLogo->HandleResourceChange( aType ); - - if ( iBgContext ) - { - iBgContext->SetRect( Rect() ); - } - } - else if( ( aType == KAknsMessageSkinChange ) && ( iBgContext ) ) - { - TRAPD( ignore, iEditor->SetSkinBackgroundControlContextL( iBgContext ) ); - if( ignore ) - { - ignore = KErrNone; //Prevent ARMV5 compilation varning - } - TRAPD( err, ReloadStationInformationL() ); - if(err != KErrNone) - { - IRLOG_WARNING( "CIRStationInfoContainer::SizeChanged - ReloadStationInformationL() failed" ); - } - } - IRLOG_DEBUG( "CIRStationInfoContainer::HandleResourceChange - Exiting" ); - } - -// ---------------------------------------------------- -// CIRStationInfoContainer::IsStationSupportsLogo -// Returns true if station logo available, else false. -// ---------------------------------------------------- -// -TBool CIRStationInfoContainer::IsStationSupportsLogo() -{ - IRLOG_DEBUG( "CIRStationInfoContainer::IsStationSupportsLogo" ); - return ( iStationInfoView->iStationPreset - && iStationInfoView->iStationPreset->GetImgUrl().Length() ); -} - - -// ------------------------------------------------------------ -// CIRStationInfoContainer::IsISDSStation -// Returns true if station is from ISDS, false if user-defined. -// ------------------------------------------------------------ -// -TBool CIRStationInfoContainer::IsISDSStation() -{ - IRLOG_DEBUG( "CIRStationInfoContainer::IsISDSStation " ); - return ( iStationInfoView->iStationPreset->GetChannelType() == CIRIsdsPreset::EIsdsPreset ); -}