diff -r 000000000000 -r 5f000ab63145 phoneuis/BubbleManager/Src/BMMainPaneControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/BubbleManager/Src/BMMainPaneControl.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 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: Call status indicator +* +*/ + + +#include "BMBubbleManager.h" +#include "BMMainPaneControl.h" +#include "BMCustomManager.h" +#include "BMBubbleHeader.h" +#include "BMUtils.h" +#include "BMCallObjectManager.h" +#include "BMBubbleImageManager.h" + +#include +#include +#include + +// --------------------------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------------------------- +// +CBubbleMainPaneControl::CBubbleMainPaneControl( + CBubbleManager& aBubbleManager, + CBubbleCallObjectManager& aCallObjectManager ) : + iBubbleManager( aBubbleManager ), + iCallObjectManager ( aCallObjectManager ) + { + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CBubbleMainPaneControl* CBubbleMainPaneControl::NewL( + CBubbleManager& aBubbleManager, + CBubbleCallObjectManager& aCallObjectManager ) + { + CBubbleMainPaneControl* self = + new( ELeave ) CBubbleMainPaneControl( aBubbleManager, + aCallObjectManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CBubbleMainPaneControl::~CBubbleMainPaneControl() + { + } + +// --------------------------------------------------------------------------- +// ReadBubbleHeader +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::ReadBubbleHeader( + const CBubbleHeader& aHeader ) + { + iBubble = aHeader.BubbleId(); + iBitmap = aHeader.CallObjectImage(); + iMask = aHeader.CallObjectImageMask(); + iThreeLinedBubble = ( aHeader.CNAP().Length() > 0 ); + + if ( iBitmap ) + { + CFbsBitmap* bitmap; + CFbsBitmap* mask; + TBool bitmapOwnership; + TBool maskOwnership; + + TRAPD(err, PrepareBitmapsL( bitmap, + bitmapOwnership, + mask, + maskOwnership, + aHeader.CallObjectImageType() == + CBubbleHeader::EThemeImage ) ); + + if ( err ) + { + return; + } + + iCallImage = iBubbleManager.CustomManager().ReserveCustomElement( + aHeader, CTelBubbleCustomElement::ECallImage ); + SizeChanged(); + + if ( iCallImage->ControlType() == + CTelBubbleCustomElement::EBubbleCallImage ) + { + CTelBubbleCallImage* image = + static_cast ( iCallImage->Control() ); + image->SetImage( bitmap, EFalse, mask, maskOwnership ); + } + + iIsUsed = ETrue; + MakeVisible( ETrue ); + } + } + +// --------------------------------------------------------------------------- +// PrepareBitmapsL +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::PrepareBitmapsL( + CFbsBitmap*& aBitmap, + TBool& aBitmapOwnership, + CFbsBitmap*& aMask, + TBool& aMaskOwnership, + TBool aIsScalable ) + { + aBitmap = iBitmap; + aMask = iMask; + aBitmapOwnership = EFalse; + aMaskOwnership = EFalse; + + if ( aIsScalable ) + { + // Switch to preloaded image when available + if ( iCallObjectManager.CallThemeImageIcon() ) + { + aBitmap = iCallObjectManager.CallThemeImageIcon()->Bitmap(); + aMask = iCallObjectManager.CallThemeImageIcon()->Mask(); + } + + // Secure that SVG image is initialized + User::LeaveIfError( AknIconUtils::SetSize( aBitmap, + iBubbleManager.MainPaneImageRect().Size(), + EAspectRatioPreservedSlice ) != KErrNone ); + } + + TSize imageSize = aBitmap->SizeInPixels(); + TSize tinyImageSize( iBubbleManager.MainPaneImageRect( ETrue ).Size() ); + TBool fullScreen = !( ( imageSize.iWidth <= tinyImageSize.iWidth ) && + ( imageSize.iHeight <= tinyImageSize.iHeight ) ); + + if ( iBubbleManager.IsTouchCallHandling() && + fullScreen ) + { + // Attach display mask to image. + CEikImage* displayMask = new( ELeave ) CEikImage; + CleanupStack::PushL( displayMask ); + + TBMIcons maskId = + Layout_Meta_Data::IsLandscapeOrientation() ? + EQgn_indi_call4_image_mask_lsc : + EQgn_indi_call4_image_mask_prt; + + iBubbleManager.ImageManager().SetBitmapToImage( + displayMask, + maskId ); + + User::LeaveIfError( AknIconUtils::SetSize( + const_cast (displayMask->Bitmap()), + imageSize, + EAspectRatioNotPreserved ) ); + + if ( aMask ) + { + // Combine display mask and image mask. + CFbsBitmap* combinedMask = + BubbleUtils::CreateCombinedMaskL( + displayMask->Bitmap(), + aMask ); + aMask = combinedMask; + } + else + { + aMask = + const_cast ( displayMask->Bitmap()); + displayMask->SetPictureOwnedExternally( ETrue ); + } + + aMaskOwnership = ETrue; + CleanupStack::PopAndDestroy( displayMask ); + } + } + +// --------------------------------------------------------------------------- +// Reset +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::Reset() + { + if ( iIsUsed ) + { + iIsUsed = EFalse; + MakeVisible( EFalse ); + iBubble = KErrNotFound; + + if ( iCallImage && + iCallImage->ControlType() == + CTelBubbleCustomElement::EBubbleCallImage ) + { + CTelBubbleCallImage* image = + static_cast ( iCallImage->Control() ); + image->SetImage( NULL, EFalse, NULL, EFalse ); + } + + iBubbleManager.CustomManager().ReleaseCustomElement( iCallImage ); + } + } + +// --------------------------------------------------------------------------- +// DrawBitmaps +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::DrawBitmaps( const TRect& aRect ) const + { + if ( iCallImage ) + { + // ToDo: propagate to components + iCallImage->Control()->DrawForeground( aRect ); + } + } + +// --------------------------------------------------------------------------- +// BubbleId +// --------------------------------------------------------------------------- +// +CBubbleManager::TBubbleId CBubbleMainPaneControl::BubbleId() const + { + return iBubble; + } + +// --------------------------------------------------------------------------- +// IsUsed +// --------------------------------------------------------------------------- +// +TBool CBubbleMainPaneControl::IsUsed() const + { + return iIsUsed; + } + +// --------------------------------------------------------------------------- +// SizeChanged +// --------------------------------------------------------------------------- +// +void CBubbleMainPaneControl::SizeChanged() + { + if ( iCallImage ) + { + iCallImage->Control()->SetRect( Rect() ); + if ( iCallImage->ControlType() == + CTelBubbleCustomElement::EBubbleCallImage ) + { + CTelBubbleCallImage* image = + static_cast ( iCallImage->Control() ); + TRect imageArea( iBubbleManager.MainPaneImageRect( + ETrue, iThreeLinedBubble ) ); + + image->SetImagePlacingArea( imageArea ); + } + } + } + +// END OF FILE +