diff -r 2b7283837edb -r 3104fc151679 uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsheadercontrol.cpp --- a/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsheadercontrol.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,386 +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: Implementation of the header part control(s) of the details view layout -* -*/ - - -#include "cvimpstdetailsheadercontrol.h" - -#include "cvimpstdetailsimagedecoder.h" -#include "mvimpstdetailspresencehandler.h" -#include "cvimpstdetailsviewbrandhandler.h" -#include -#include -#include -#include -#include -#include -#include //cdl -#include -#include - -// virtual phonebook -#include -#include -#include -#include -#include -#include - -#include "uiservicetabtracer.h" -// constants declaration -const TInt KLabelLineCount = 3; - -// Size of thumbnail images stored to contacts -#define KPbkPersonalImageSize TSize(80,96) - -// --------------------------------------------------------------------------- -// NewL, two-phase construction -// --------------------------------------------------------------------------- -// -CVIMPSTDetailsHeaderControl* CVIMPSTDetailsHeaderControl::NewL(CVIMPSTDetailsViewBrandHandler& aBrandHandler, - MVIMPSTDetailsPresenceHandler& aPresenceHandler) - { - CVIMPSTDetailsHeaderControl* self= new (ELeave) CVIMPSTDetailsHeaderControl(aBrandHandler, aPresenceHandler ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// C++ (first phase) constructor -// --------------------------------------------------------------------------- -// -CVIMPSTDetailsHeaderControl::CVIMPSTDetailsHeaderControl(CVIMPSTDetailsViewBrandHandler& aBrandHandler, - MVIMPSTDetailsPresenceHandler& aPresenceHandler) - : iBrandHandler( aBrandHandler), - iPresenceHandler( aPresenceHandler ) - { - // No implementation required - } - -// --------------------------------------------------------------------------- -// ConstructL, second phase constructor -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::ConstructL() - { - TRACER_AUTO; - // Create the header image - iImage = new (ELeave) CEikImage(); - iImage->SetPictureOwnedExternally(ETrue); //EHLeftVCenter - iImage->SetAlignment(EHCenterVCenter); - // Create the header labels - for (TInt i=0; i < KLabelLineCount; i++) - { - CEikLabel* label = new(ELeave) CEikLabel; - CleanupStack::PushL(label); - label->SetTextL(KNullDesC()); - label->SetAlignment(EHLeftVCenter);// EHCenterVCenter, EHLeftVCenter - iLabels.AppendL(label); - CleanupStack::Pop(label); - } - iContactImageSize = KPbkPersonalImageSize; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CVIMPSTDetailsHeaderControl::~CVIMPSTDetailsHeaderControl() - { - iLabels.ResetAndDestroy(); - - if (iImageDecoder) - { - if (iImageDecoder->IsActive()) - { - iImageDecoder->Cancel(); - } - delete iImageDecoder; - iImageDecoder = NULL; - } - delete iHeaderField; - - if (iImage) - { - delete iImage; - iImage = NULL; - } - - if (iBitmap) - { - delete iBitmap; - iBitmap = NULL; - } - if (iMask) - { - delete iMask; - iMask = NULL; - } - } - - -// --------------------------------------------------------------------------- -// From CCoeControl, returns the number of child controls to the framework -// --------------------------------------------------------------------------- -// -TInt CVIMPSTDetailsHeaderControl::CountComponentControls() const - { - // image control + Label Count - return 1 + iLabels.Count(); - } - -// --------------------------------------------------------------------------- -// From CCoeControl, returns the child controls to the framework by index -// --------------------------------------------------------------------------- -// -CCoeControl* CVIMPSTDetailsHeaderControl::ComponentControl(TInt aIndex) const - { - if (aIndex == 0) - { - return iImage; - } - else if (aIndex - 1 < iLabels.Count()) - { - return iLabels[aIndex-1]; - } - else - { - return NULL; - } - } - -// --------------------------------------------------------------------------- -// From CCoeControl, called when the control's size changes, handles portrait-landscape switch -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::SizeChanged() - { - TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - - AknLayoutUtils::LayoutImage( - iImage, Rect(), AknLayoutScalable_Apps::cl_header_pane_g1(isLandscape)); - - TPoint position = iImage->Position(); - TSize size = iImage->Size(); - - const TPoint newImagePosition = TPoint( position.iX/2, position.iY/2 ); - iImage->SetPosition( newImagePosition ); - - const TSize newImageSize = TSize( size.iWidth + 2*( position.iX - newImagePosition.iX ) , - size.iHeight + 2*( position.iY - newImagePosition.iY ) ); - - iImage->SetSize( newImageSize ); - - iContactImageSize = newImageSize; - - if ( iImageDecoder ) - { - // if bitmap was set resize it - if (iImageDecoder->IsActive()) - { - iImageDecoder->Cancel(); - } - TRAP_IGNORE( iImageDecoder->StartL( iContactImageSize ) ); - } - - TAknLayoutRect labelsRect; - labelsRect.LayoutRect(Rect(), AknLayoutScalable_Apps::cl_header_name_pane(isLandscape)); - - AknLayoutUtils::LayoutLabel(iLabels[0], labelsRect.Rect(), AknLayoutScalable_Apps::cl_header_name_pane_t1(2)); - AknLayoutUtils::LayoutLabel(iLabels[1], labelsRect.Rect(), AknLayoutScalable_Apps::cl_header_name_pane_t2(2)); - - AknLayoutUtils::LayoutLabel(iLabels[2], labelsRect.Rect(), AknLayoutScalable_Apps::cl_header_name_pane_t3(2)); - - TRAP_IGNORE(LabelsSizeChangedL()); - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsHeaderControl::LabelsSizeChangedL() -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::LabelsSizeChangedL() - { - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TRgb color; - AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); - - if (iLabels.Count() > 0) - { - for (TInt i=0; i < iLabels.Count(); i++) - { - iLabels[i]->SetTextL( iPresenceHandler.GetHeaderLabelDataL(i) ); - iLabels[i]->CropText(); - iLabels[i]->OverrideColorL( EColorLabelText, color ); - iLabels[i]->DrawDeferred(); - } - } - } -// --------------------------------------------------------------------------- -// CVIMPSTDetailsHeaderControl::HeaderSizeChangedL() -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::HeaderSizeChangedL() - { - CFbsBitmap* bmp = NULL; - CFbsBitmap* bmpMask = NULL; - TVIMPSTEnums::TOnlineStatus onlineStatus = iPresenceHandler.GetPresenceStatus(); - if(TVIMPSTEnums::EPending == onlineStatus) - { - iBrandHandler.LoadBitMapLC(bmp, - bmpMask, - EMbmVimpstuiQgn_prop_service_friend_request_sent , - EMbmVimpstuiQgn_prop_service_friend_request_sent_mask ); - } - else if(TVIMPSTEnums::EBlocked == onlineStatus) - { - iBrandHandler.LoadBitMapLC(bmp, - bmpMask, - EMbmVimpstuiQgn_servtab_avatar_blocked , - EMbmVimpstuiQgn_servtab_avatar_blocked_mask ); - } - else - { - iBrandHandler.LoadBitMapLC(bmp, - bmpMask, - EMbmVimpstuiQgn_prop_service_default_avatar , - EMbmVimpstuiQgn_prop_service_default_avatar_mask ); - } - SetBitmap(bmp, bmpMask);//ownership transferred - CleanupStack::Pop(2); // bitmap,bmpMask - SizeChanged(); - - } -// --------------------------------------------------------------------------- -// From CCoeControl, overridden to set the container windows for the child -// controls of this control (labels and image) -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::SetContainerWindowL(const CCoeControl& aContainer) - { - CCoeControl::SetContainerWindowL(aContainer); - iImage->SetContainerWindowL(aContainer); - for (TInt i=0; i < iLabels.Count(); i++) - { - iLabels[i]->SetContainerWindowL(aContainer); - } - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsHeaderControl :: SetBitmap -// Sets the bitmap shown in the header image -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::SetBitmap(CFbsBitmap* aBmp, CFbsBitmap* aMask ) - { - if (iBitmap) - { - delete iBitmap; - iBitmap = NULL; - } - if (iMask) - { - delete iMask; - iMask = NULL; - } - iBitmap = aBmp; - iMask = aMask; - - iImage->SetPicture(aBmp, NULL); - iImage->DrawDeferred(); - - TRAP_IGNORE( LabelsSizeChangedL() ); - } - -// --------------------------------------------------------------------------- -// CVIMPSTDetailsHeaderControl :: ClearL -// Clears the header texts & image to blank -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::ClearL() - { - iImage->SetPicture(NULL, NULL); - if (iBitmap) - { - delete iBitmap; - iBitmap = NULL; - } - if (iMask) - { - delete iMask; - iMask = NULL; - } - for (TInt i = 0; i < iLabels.Count(); i++) - { - iLabels[i]->SetTextL(KNullDesC()); - } - - } -// --------------------------------------------------------------------------- -// CVIMPSTDetailsHeaderControl :: CreateHeaderPresentationL -// Clears the header texts & image to blank -// --------------------------------------------------------------------------- -// -void CVIMPSTDetailsHeaderControl::CreateHeaderPresentationL(MVPbkStoreContact& aContact ) - { - TRACER_AUTO; - if( iHeaderField ) - { - delete iHeaderField; - iHeaderField = NULL ; - } - - MVPbkStoreContactFieldCollection& fieldCollection = aContact.Fields(); - - TInt fieldCount = fieldCollection.FieldCount(); - - for( TInt i=0; i< fieldCount; i++ ) - { - MVPbkStoreContactField& field = fieldCollection.FieldAt( i ); - const MVPbkFieldType* type = field.BestMatchingFieldType() ; - if( R_VPBK_FIELD_TYPE_THUMBNAILPIC == type->FieldTypeResId() ) - { - iHeaderField = field.CloneLC(); - CleanupStack::Pop(); - break; - } - } - if( iHeaderField ) - { - // field available - const MVPbkContactFieldData& fieldData = iHeaderField->FieldData(); - if( fieldData.DataType() == EVPbkFieldStorageTypeBinary ) - { - TPtrC8 data = MVPbkContactFieldBinaryData::Cast(fieldData).BinaryData(); - if (iImageDecoder) - { - if (iImageDecoder->IsActive()) - { - iImageDecoder->Cancel(); - } - delete iImageDecoder; - iImageDecoder = NULL; - } - iImageDecoder = CVIMPSTDetailsImageDecoder::NewL(*this, data ); - iImageDecoder->StartL(iContactImageSize); - } - } - - } - -// end of file -