diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook/View/src/CPbkContextPaneIcon.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook/View/src/CPbkContextPaneIcon.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,134 @@ +/* +* Copyright (c) 2002 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: +* Methods for Class which loads Phonebook's icon into context pane. +* +*/ + + +// INCLUDE FILES +#include "CPbkContextPaneIcon.h" // This class +#include "PbkUID.h" +#include // TResourceReader +#include // CEikStatusPane +#include // Status pane control UIDs +#include // CEikImage +#include // CAknContextPane +#include // Phonebook view dll resource IDs +#include +#include +#include +#include +#include // Context pane bitmap size +#include + +#include "PbkIconInfo.h" + +/// Unnamed namespace for local definitions +namespace { + +static CEikImage* CopyL(const CEikImage& aSrc) + { + CEikImage* copy = new(ELeave) CEikImage; + CleanupStack::PushL(copy); + copy->SetPictureOwnedExternally(EFalse); + CFbsBitmap* bitmap = new(ELeave) CFbsBitmap; + copy->SetBitmap(bitmap); + + const CFbsBitmap* sourceBitmap = aSrc.Bitmap(); + const CFbsBitmap* sourceMask = aSrc.Mask(); + if (sourceBitmap) + { + User::LeaveIfError(bitmap->Duplicate(sourceBitmap->Handle())); + } + if (sourceMask) + { + CFbsBitmap* mask = new(ELeave) CFbsBitmap; + // Null mask is not be copied. + copy->SetMask(mask); + User::LeaveIfError(mask->Duplicate(sourceMask->Handle())); + } + CleanupStack::Pop(); // copy + return copy; + } + + +} // namespace + +// ================= MEMBER FUNCTIONS ======================= + +inline CPbkContextPaneIcon::CPbkContextPaneIcon() + { + } + +CPbkContextPaneIcon* CPbkContextPaneIcon::NewL(CEikonEnv& aEikonEnv) + { + CPbkContextPaneIcon* self = new(ELeave) CPbkContextPaneIcon; + CleanupStack::PushL(self); + self->StoreContextPaneIconL(aEikonEnv); + self->SetPhonebookContextPaneIconL(); + CleanupStack::Pop(self); + return self; + } + +CPbkContextPaneIcon::~CPbkContextPaneIcon() + { + RestoreContextPaneIcon(); + } + +void CPbkContextPaneIcon::StoreContextPaneIconL(CEikonEnv& aEikonEnv) + { + CEikStatusPane* statusPane = aEikonEnv.AppUiFactory()->StatusPane(); + if (statusPane && + statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidContext)).IsPresent() && + !Layout_Meta_Data::IsLandscapeOrientation()) + { + iContextPane = static_cast + (statusPane->ControlL(TUid::Uid(EEikStatusPaneUidContext))); + const CEikImage& picture = iContextPane->Picture(); + if (picture.Bitmap() && + picture.Bitmap()->Handle()) + { + iPreviousContextPaneIcon = CopyL(picture); + } + } + } + +void CPbkContextPaneIcon::SetPhonebookContextPaneIconL() + { + if (iContextPane) + { + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + + AknsUtils::CreateAppIconLC( AknsUtils::SkinInstance(), + TUid::Uid(KPbkUID3), EAknsAppIconTypeContext, + bitmap, mask ); + + CleanupStack::Pop(2); // bitmap, mask + iContextPane->SetPicture(bitmap, mask); + iContextPane->DrawNow(); + } + } + +void CPbkContextPaneIcon::RestoreContextPaneIcon() + { + if (iPreviousContextPaneIcon) + { + iContextPane->SetPicture(iPreviousContextPaneIcon); + iPreviousContextPaneIcon = NULL; + } + } + +// End of File