phonebookui/Phonebook/PbkExt/src/CPbkMultiExtensionFactory.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/PbkExt/src/CPbkMultiExtensionFactory.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* 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: 
+*       Composite extension factory.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkMultiExtensionFactory.h"
+#include "CPbkMultiAppUiExtension.h"
+#include "CPbkMultiViewExtension.h"
+#include "CPbkMultiContactEditorExtension.h"
+
+// Debugging headers
+#include <PbkDebug.h>
+#include "PbkProfiling.h"
+
+// CONSTANTS
+const TInt KFactoryGranularity = 2;
+
+// ==================== MEMBER FUNCTIONS ====================
+CPbkMultiExtensionFactory::CPbkMultiExtensionFactory() :
+    iFactories( KFactoryGranularity )
+    {
+    }
+
+CPbkMultiExtensionFactory::~CPbkMultiExtensionFactory()
+    {
+    iFactories.Reset();
+    }
+
+CPbkMultiExtensionFactory* CPbkMultiExtensionFactory::NewL()
+    {
+    CPbkMultiExtensionFactory* self = new (ELeave) CPbkMultiExtensionFactory;
+    return self;
+    }
+
+void CPbkMultiExtensionFactory::AppendL( MPbkExtensionFactory* aFactory )
+    {
+    iFactories.AppendL(aFactory);
+    }
+
+// This method is getting deprecated, use the overload instead
+MPbkViewExtension* CPbkMultiExtensionFactory::CreatePbkViewExtensionL
+    (TUid aId, CPbkContactEngine& aEngine)
+    {
+    CPbkMultiViewExtension* multiViewExt = CPbkMultiViewExtension::NewL();
+    CleanupStack::PushL(multiViewExt);
+
+	const TInt count = iFactories.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        MPbkViewExtension* viewExt = 
+            iFactories[i]->CreatePbkViewExtensionL(aId, aEngine);
+        if (viewExt)
+            {
+            CleanupStack::PushL(viewExt);
+            multiViewExt->AppendL(viewExt);
+            CleanupStack::Pop(viewExt);
+            }
+        }
+    CleanupStack::Pop(multiViewExt);
+    return multiViewExt;
+    }
+
+MPbkViewExtension* CPbkMultiExtensionFactory::CreatePbkViewExtensionL
+    (TUid aId, CPbkContactEngine& aEngine, CPbkAppViewBase& aAppView)
+    {
+    CPbkMultiViewExtension* multiViewExt = CPbkMultiViewExtension::NewL();
+    CleanupStack::PushL(multiViewExt);
+
+	const TInt count = iFactories.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        // Try with the new CreatePbkViewExtensionL first
+        MPbkViewExtension* viewExt = 
+            iFactories[i]->CreatePbkViewExtensionL(aId, aEngine, aAppView);
+        if (!viewExt)
+            {
+            // If the new overload was not implemented by extension,
+            // try with the traditional one
+            viewExt = 
+                iFactories[i]->CreatePbkViewExtensionL(aId, aEngine);
+            }
+        
+        if (viewExt)
+            {
+            CleanupStack::PushL(viewExt);
+            multiViewExt->AppendL(viewExt);
+            CleanupStack::Pop(viewExt);
+            }
+        }
+    CleanupStack::Pop(multiViewExt);
+    return multiViewExt;
+    }
+
+MPbkContactEditorExtension* 
+	CPbkMultiExtensionFactory::CreatePbkContactEditorExtensionL
+    (CPbkContactItem& aContact, 
+     CPbkContactEngine& aEngine, 
+     MPbkContactEditorControl& aEditorControl)
+    {
+    CPbkMultiContactEditorExtension* multiContactEditorExt =
+        CPbkMultiContactEditorExtension::NewL();
+    CleanupStack::PushL(multiContactEditorExt);
+
+    const TInt count = iFactories.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        MPbkContactEditorExtension* contactEditorExt =
+            iFactories[i]->CreatePbkContactEditorExtensionL
+                (aContact, aEngine, aEditorControl);
+        if (contactEditorExt)
+            {
+            CleanupStack::PushL(contactEditorExt);
+            multiContactEditorExt->AppendL(contactEditorExt);
+            CleanupStack::Pop(contactEditorExt);
+            }
+        }
+
+    CleanupStack::Pop(multiContactEditorExt);
+    return multiContactEditorExt;
+    }
+
+MPbkContactUiControlExtension* 
+    CPbkMultiExtensionFactory::CreatePbkUiControlExtensionL
+	(CPbkContactEngine& aEngine)
+    {
+    const TInt count = iFactories.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        MPbkContactUiControlExtension* contactUiControlExt =
+            iFactories[i]->CreatePbkUiControlExtensionL(aEngine);
+        if (contactUiControlExt)
+            {
+            return contactUiControlExt;
+            }
+        }
+    return &iDummyControlExtension;
+    }
+
+MPbkContactUiControlExtension* 
+    CPbkMultiExtensionFactory::CreateDummyPbkUiControlExtensionL()
+    {
+	return &iDummyControlExtension;
+    }
+
+CAknView* CPbkMultiExtensionFactory::CreateViewL(TUid aId)
+    {
+    const TInt count = iFactories.Count();
+	for (TInt i=0; i<count; ++i)
+        {
+        CAknView* view = iFactories[i]->CreateViewL(aId);
+        if (view)
+            {
+            return view;
+            }
+        }
+    return NULL;
+    }
+
+MPbkAppUiExtension* CPbkMultiExtensionFactory::CreatePbkAppUiExtensionL
+    (CPbkContactEngine& aEngine)
+    {
+    __PBK_PROFILE_START(PbkProfiling::EPbkExtMultiAppUiConstruct);    
+    CPbkMultiAppUiExtension* multiAppUiExt = CPbkMultiAppUiExtension::NewL();
+    CleanupStack::PushL(multiAppUiExt);
+    __PBK_PROFILE_END(PbkProfiling::EPbkExtMultiAppUiConstruct);
+
+    const TInt count = iFactories.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        __PBK_PROFILE_START(PbkProfiling::EPbkExtCreatePbkAppUiExtensionL);
+        MPbkAppUiExtension* appUiExt = 
+            iFactories[i]->CreatePbkAppUiExtensionL(aEngine);
+        __PBK_PROFILE_END(PbkProfiling::EPbkExtCreatePbkAppUiExtensionL);
+        __PBK_PROFILE_START(PbkProfiling::EPbkExtAppendAppUiExtension);
+        if (appUiExt)
+            {
+            CleanupStack::PushL(appUiExt);
+            multiAppUiExt->AppendL(appUiExt);
+            CleanupStack::Pop(appUiExt);
+            }
+        __PBK_PROFILE_END(PbkProfiling::EPbkExtAppendAppUiExtension);
+        }
+    CleanupStack::Pop(multiAppUiExt);
+	return multiAppUiExt;
+    }
+
+void CPbkMultiExtensionFactory::AddPbkFieldIconsL
+        (CPbkIconInfoContainer* aIconInfoContainer, 
+        CPbkIconArray* aIconArray)
+    {
+    const TInt count = iFactories.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        iFactories[i]->AddPbkFieldIconsL(aIconInfoContainer, aIconArray);
+        }
+    }
+
+void CPbkMultiExtensionFactory::AddPbkTabIconsL
+        (CPbkIconInfoContainer* aIconInfoContainer, 
+        CPbkIconArray* aIconArray)
+    {
+    const TInt count = iFactories.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        iFactories[i]->AddPbkTabIconsL(aIconInfoContainer, aIconArray);
+        }
+    }
+
+// End of File
+