diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/Commands/src/CPbk2CommandFactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/Commands/src/CPbk2CommandFactory.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,131 @@ +/* +* 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: Creates Phonebook 2 command objects. +* +*/ + + +// INCLUDE FILES +#include "CPbk2CommandFactory.h" + +// Phonebook 2 +#include +#include +#include + +// include command handlers +#include "CPbk2SetToneCmd.h" +#include "cpbk2activatecntinfoviewcmd.h" + +/// Unnamed namespace for local definitions +namespace { + +typedef MPbk2Command* (CPbk2CommandFactory::*CommandCreationFunction) + (MPbk2ContactUiControl&) const; + +/// mapping table entries +struct TPbk2CommandIdMapping + { + /// Phonebook2 command id + TPbk2CommandId iCommandId; + /// command handler factory function + CommandCreationFunction iCreationFunctionL; + }; + +/// mapping table contains Phonebook2 command id's and function pointers to +/// command handlers +static const TPbk2CommandIdMapping CommandIdMapping[] = + { + {EPbk2CmdPersonalRingingTone, + &CPbk2CommandFactory::CreateSetToneCommandL}, + {EPbk2CmdOpenMeViews, + &CPbk2CommandFactory::CreateActivateCntInfoViewCommandL}, + {EPbk2CmdLast, + NULL} + }; + +} /// namespace + + +// ================= MEMBER FUNCTIONS ======================= + +inline CPbk2CommandFactory::CPbk2CommandFactory() + { + } + +inline void CPbk2CommandFactory::ConstructL() + { + iExtensionManager = CPbk2UIExtensionManager::InstanceL(); + } + +CPbk2CommandFactory* CPbk2CommandFactory::NewL() + { + CPbk2CommandFactory* self = new (ELeave) CPbk2CommandFactory; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CPbk2CommandFactory::~CPbk2CommandFactory() + { + Release(iExtensionManager); + } + +MPbk2Command* CPbk2CommandFactory::CreateCommandForIdL( + TPbk2CommandId aCommandId, + MPbk2ContactUiControl& aUiControl) const + { + MPbk2Command* cmd = iExtensionManager->FactoryL()-> + CreatePbk2CommandForIdL(aCommandId, aUiControl); + if (!cmd) + { + // search mapping table for command handler + for (TInt i = 0; CommandIdMapping[i].iCommandId != EPbk2CmdLast; ++i) + { + if (CommandIdMapping[i].iCommandId == aCommandId) + { + // command id handler found, create command object + // through mapping table function pointer + cmd = (this->*CommandIdMapping[i].iCreationFunctionL)(aUiControl); + break; + } + } + } + + if ( cmd ) + { + // activator takes control of created command + MPbk2Command* activator = + CPbk2CommandActivator::NewL( cmd, aUiControl ); + cmd = activator; + } + + return cmd; + } + +MPbk2Command* CPbk2CommandFactory::CreateSetToneCommandL( + MPbk2ContactUiControl& aUiControl) const + { + return CPbk2SetToneCmd::NewL(aUiControl); + } + +MPbk2Command* CPbk2CommandFactory::CreateActivateCntInfoViewCommandL( + MPbk2ContactUiControl& aUiControl) const + { + return CPbk2ActivateCntInfoViewCmd::NewL(aUiControl); + } + +// End of File +