diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook/PbkExt/src/CPbkMultiExtensionFactory.cpp --- /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 +#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; iCreatePbkViewExtensionL(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; iCreatePbkViewExtensionL(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; iCreatePbkContactEditorExtensionL + (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; iCreatePbkUiControlExtensionL(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; iCreateViewL(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; iCreatePbkAppUiExtensionL(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; iAddPbkFieldIconsL(aIconInfoContainer, aIconArray); + } + } + +void CPbkMultiExtensionFactory::AddPbkTabIconsL + (CPbkIconInfoContainer* aIconInfoContainer, + CPbkIconArray* aIconArray) + { + const TInt count = iFactories.Count(); + for (TInt i=0; iAddPbkTabIconsL(aIconInfoContainer, aIconArray); + } + } + +// End of File +