phonebookui/Phonebook/View/src/CPbkContextPaneIcon.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /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