phonebookui/Phonebook2/UIExtensionManager/src/CPbk2ContactUiControlExtension.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIExtensionManager/src/CPbk2ContactUiControlExtension.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2002-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 contact UI control composite UI extension.
+*
+*/
+
+
+#include "CPbk2ContactUiControlExtension.h"
+
+// Phonebook 2
+#include "CPbk2UIExtensionLoader.h"
+#include "ForEachUtil.h"
+#include "CPbk2UIExtensionInformation.h"
+#include <CPbk2UIExtensionPlugin.h>
+#include <Pbk2UIExtension.hrh>
+#include <TPbk2IconId.h>
+
+#include <CPbk2IconArray.h>
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::CPbk2ContactUiControlExtension
+// -----------------------------------------------------------------------------
+//
+CPbk2ContactUiControlExtension::CPbk2ContactUiControlExtension
+        ( CVPbkContactManager& aContactManager,
+          CPbk2UIExtensionLoader& aExtensionLoader ):
+            iContactManager( aContactManager ), 
+            iExtensionLoader( aExtensionLoader )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::ConstructL
+// -----------------------------------------------------------------------------
+//
+inline void CPbk2ContactUiControlExtension::ConstructL()
+    {
+    LoadExtensionsL();
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::NewL
+// -----------------------------------------------------------------------------
+//
+CPbk2ContactUiControlExtension* CPbk2ContactUiControlExtension::NewL
+        ( CVPbkContactManager& aContactManager,
+          CPbk2UIExtensionLoader& aExtensionLoader )
+    {
+    CPbk2ContactUiControlExtension* self = 
+        new ( ELeave ) CPbk2ContactUiControlExtension
+            ( aContactManager, aExtensionLoader );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::~CPbk2ContactUiControlExtension
+// -----------------------------------------------------------------------------
+//
+CPbk2ContactUiControlExtension::~CPbk2ContactUiControlExtension()
+    {
+    iUiControlExtensions.ResetAndDestroy();
+    iDummyArray.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::DoRelease
+// -----------------------------------------------------------------------------
+//
+void CPbk2ContactUiControlExtension::DoRelease()
+    {
+    delete this;
+    }
+    
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::GetDynamicIconsL
+// -----------------------------------------------------------------------------
+//
+const TArray<TPbk2IconId> CPbk2ContactUiControlExtension::GetDynamicIconsL
+    ( const MVPbkViewContact* aContactHandle )
+    {
+    TInt count( iUiControlExtensions.Count() );
+    for ( TInt i = 0; i < count; ++i )
+        {
+        TArray<TPbk2IconId> ids = 
+            iUiControlExtensions[ i ]->GetDynamicIconsL( aContactHandle );
+        if ( ids.Count() > 0 )
+            {
+            return ids;
+            }
+        }
+    return iDummyArray.Array();
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::SetContactUiControlUpdate
+// -----------------------------------------------------------------------------
+//
+void CPbk2ContactUiControlExtension::SetContactUiControlUpdate
+        ( MPbk2ContactUiControlUpdate* aContactUpdator )
+    {
+    ForEach( iUiControlExtensions,
+             VoidMemberFunction
+              ( &MPbk2ContactUiControlExtension::SetContactUiControlUpdate ),
+                aContactUpdator );    
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::ContactUiControlExtensionExtension
+// -----------------------------------------------------------------------------
+//
+TAny* CPbk2ContactUiControlExtension::ContactUiControlExtensionExtension
+    ( TUid aUid )
+    {
+    if ( aUid == KMPbk2ContactUiControlExtensionExtension2Uid )
+        {
+        return static_cast<MPbk2ContactUiControlExtension2*>( this );
+        }
+    
+    TInt count( iUiControlExtensions.Count() );
+    
+    for ( TInt i = 0; i < count; ++i )
+        {
+        TAny* ext = iUiControlExtensions[ i ]->ContactUiControlExtensionExtension( aUid );
+        if(ext)
+            {
+            return ext;
+            }
+        }
+    return NULL;
+    }
+    
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::SetIconArray
+// -----------------------------------------------------------------------------
+//
+void CPbk2ContactUiControlExtension::SetIconArray( CPbk2IconArray& aIconArray )
+    {
+    TInt count( iUiControlExtensions.Count() );
+    for ( TInt i = 0; i < count; ++i )
+        {
+        MPbk2ContactUiControlExtension2* ext = reinterpret_cast<MPbk2ContactUiControlExtension2*>(
+            iUiControlExtensions[ i ]->ContactUiControlExtensionExtension(
+                KMPbk2ContactUiControlExtensionExtension2Uid ) );
+        if ( ext != NULL )
+            {
+            ext->SetIconArray( aIconArray );
+            }
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CPbk2ContactUiControlExtension::LoadExtensionsL
+// -----------------------------------------------------------------------------
+//            
+void CPbk2ContactUiControlExtension::LoadExtensionsL()
+    {
+    TArray<CPbk2UIExtensionPlugin*> plugins = iExtensionLoader.Plugins();
+    const TInt count = plugins.Count();
+    for (TInt i = 0; i < count; ++i)
+        {
+        CPbk2UIExtensionPlugin* plugin = plugins[ i ];
+        MPbk2ContactUiControlExtension* extension =
+            plugin->CreatePbk2UiControlExtensionL( iContactManager );
+        if (extension)
+            {
+            CleanupDeletePushL(extension);
+            iUiControlExtensions.AppendL(extension);
+            CleanupStack::Pop(); // extension
+            }
+        }
+    }
+
+// End of File