--- /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 <barsread.h> // TResourceReader
+#include <eikspane.h> // CEikStatusPane
+#include <avkon.hrh> // Status pane control UIDs
+#include <eikimage.h> // CEikImage
+#include <akncontext.h> // CAknContextPane
+#include <PbkView.rsg> // Phonebook view dll resource IDs
+#include <AknsSkinInstance.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <AknsControlContext.h>
+#include <aknconsts.h> // Context pane bitmap size
+#include <layoutmetadata.cdl.h>
+
+#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<CAknContextPane*>
+ (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