phonebookui/Phonebook2/UIControls/src/Pbk2TitlePanePictureFactory.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/Pbk2TitlePanePictureFactory.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2005-2007 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:  Phonebook 2 title pane picture factory.
+*
+*/
+
+
+#include "Pbk2TitlePanePictureFactory.h"
+
+// Phonebook 2
+#include "CPbk2UIExtensionManager.h"
+#include "MPbk2UIExtensionIconSupport.h"
+#include <CPbk2IconArray.h>
+#include <CPbk2StoreProperty.h>
+#include <CPbk2StorePropertyArray.h>
+#include <CPbk2StoreViewDefinition.h>
+#include <Pbk2UIControls.rsg>
+
+// Virtual Phonebook
+#include <CVPbkContactViewDefinition.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreProperties.h>
+#include <MVPbkStoreContact.h>
+#include <VPbkContactView.hrh>
+
+// System includes
+#include <AknIconUtils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <akntitle.h>
+#include <AknUtils.h>
+#include <barsread.h>
+#include <gulicon.h>
+
+
+/// Unnamed namespace for local definitions
+namespace {
+
+/**
+ * Creates icon array.
+ *
+ * @return  Icon array.
+ */
+CPbk2IconArray* CreateIconArrayLC()
+    {
+    CPbk2IconArray* iconArray = NULL;
+    TResourceReader reader;
+    CCoeEnv::Static()->
+        CreateResourceReaderLC( reader, R_PBK2_CONTACT_LIST_ICONS );
+
+    // Create icon array
+    iconArray = CPbk2IconArray::NewL( reader );
+    CleanupStack::PopAndDestroy(); // reader
+    CleanupStack::PushL( iconArray );
+
+    // Add icons from UI extensions
+    CPbk2UIExtensionManager* extManager =
+        CPbk2UIExtensionManager::InstanceL();
+    extManager->PushL();
+    extManager->IconSupportL().AppendExtensionIconsL( *iconArray );
+
+    CleanupStack::PopAndDestroy( extManager );
+
+    return iconArray;
+    }
+
+} /// namespace
+
+
+// --------------------------------------------------------------------------
+// Pbk2TitlePanePictureFactory::CreateTitlePanePictureL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CEikImage* Pbk2TitlePanePictureFactory::CreateTitlePanePictureLC
+        ( const MVPbkStoreContact* aContact,
+          CPbk2StorePropertyArray& aStoreProperties )
+    {
+    CEikImage* image = new ( ELeave ) CEikImage;
+    CleanupStack::PushL( image );
+
+    CPbk2IconArray* iconArray = CreateIconArrayLC();
+
+    // Get icon index
+    TInt index = KErrNotFound;
+    TVPbkContactStoreUriPtr uri =
+        aContact->ParentStore().StoreProperties().Uri();
+    const CPbk2StoreProperty*
+        storeProperty = aStoreProperties.FindProperty( uri );
+
+    if( storeProperty )
+        {
+        TArray<const CPbk2StoreViewDefinition*>
+            views = storeProperty->Views();
+        TInt count = views.Count();
+        TInt i = 0;
+        for( i = 0; i < count && index == KErrNotFound; i++ )
+            {
+            if( views[i]->ViewDefinition().Type() == EVPbkContactsView )
+                {
+                const TPbk2IconId& id = views[i]->ViewItemIconId();
+                index = iconArray->FindIcon( id );
+                }
+            }
+        }
+
+    if( index >= 0 )
+        {
+        // Get pointers to bitmaps in array
+        CFbsBitmap* bitmap = iconArray->At( index )->Bitmap();
+        CFbsBitmap* mask = iconArray->At( index )->Mask();
+
+        // Calculate icon size
+        TRect mainPane;
+        AknLayoutUtils::LayoutMetricsRect(
+            AknLayoutUtils::ETitlePane, mainPane );
+        TAknLayoutRect titleIconPaneLayoutRect;
+        titleIconPaneLayoutRect.LayoutRect(
+            mainPane,
+            AknLayoutScalable_Avkon::title_pane_g2( 0 ).LayoutLine() );
+        TSize iconSize = titleIconPaneLayoutRect.Rect().Size();
+        User::LeaveIfError( AknIconUtils::SetSize( bitmap, iconSize ) );
+
+        // Create duplicates of the icon to be used
+        CFbsBitmap* pBitmap = new( ELeave ) CFbsBitmap();
+        CleanupStack::PushL( pBitmap );
+        User::LeaveIfError( pBitmap->Duplicate( bitmap->Handle() ) );
+        CFbsBitmap* pMask = new( ELeave ) CFbsBitmap();
+        CleanupStack::PushL( pMask );
+        User::LeaveIfError( pMask->Duplicate( mask->Handle() ) );
+        CleanupStack::Pop( 2 ); // pBitmap, pMask
+
+        // Transfer ownership to the image
+        image->SetBitmap( pBitmap );
+        image->SetMask( pMask );
+        }
+
+    CleanupStack::PopAndDestroy( iconArray );
+    return image;
+    }
+
+// End of File