--- /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
+