diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,362 @@ +/* +* 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: Phonebook 2 group rename command. +* +*/ + + +// INCLUDE FILES +#include "CPguRenameGroupCmd.h" + +// Phonebook 2 +#include "CPguGroupNameQueryDlg.h" +#include "Pbk2GroupConsts.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// System includes +#include +#include + +// Debugging headers +#include + +/// Unnamed namespace for local definitions +namespace { + + #ifdef _DEBUG + enum TPanicCode + { + EPanicPreCond_NewL = 1, + EPanicPreCond_ExecuteLD, + EPanicContactNotGroup, + ERunL_InvalidState + }; + + void Panic(TPanicCode aReason) + { + _LIT(KPanicText, "CPguRenameGroupCmd"); + User::Panic(KPanicText,aReason); + } + #endif // _DEBUG + +} /// namespace + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::CPguRenameGroupCmd +// -------------------------------------------------------------------------- +// +CPguRenameGroupCmd::CPguRenameGroupCmd + ( MPbk2ContactUiControl& aUiControl ) : + CActive( CActive::EPriorityIdle ), + iUiControl( &aUiControl ) + { + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPguRenameGroupCmd::CPguRenameGroupCmd(0x%x)"), this); + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::ConstructL +// -------------------------------------------------------------------------- +// +inline void CPguRenameGroupCmd::ConstructL() + { + CActiveScheduler::Add( this ); + iGroupLink = iUiControl->FocusedContactL()->CreateLinkLC(); + CleanupStack::Pop(); + + CPbk2StoreConfiguration* storeConfig = CPbk2StoreConfiguration::NewL(); + CleanupStack::PushL( storeConfig ); + iTargetStore = Phonebook2::Pbk2AppUi()->ApplicationServices(). + ContactManager().ContactStoresL(). + Find( TVPbkContactStoreUriPtr( storeConfig->DefaultSavingStoreL() ) ); + CleanupStack::PopAndDestroy( storeConfig ); + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::NewL +// -------------------------------------------------------------------------- +// +CPguRenameGroupCmd* CPguRenameGroupCmd::NewL + ( MPbk2ContactUiControl& aUiControl ) + { + CPguRenameGroupCmd* self = + new(ELeave) CPguRenameGroupCmd( aUiControl ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::~CPguRenameGroupCmd +// -------------------------------------------------------------------------- +// +CPguRenameGroupCmd::~CPguRenameGroupCmd() + { + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPguRenameGroupCmd::~CPguRenameGroupCmd(0x%x)"), this); + Cancel(); + delete iGroupLink; + delete iContactOperation; + delete iContactGroup; + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::ExecuteLD +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::ExecuteLD() + { + __ASSERT_DEBUG(iCommandObserver, Panic(EPanicPreCond_ExecuteLD)); + + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPguRenameGroupCmd::ExecuteLD(0x%x)"), this); + + CleanupStack::PushL( this ); + iContactOperation = Phonebook2::Pbk2AppUi()->ApplicationServices(). + ContactManager().RetrieveContactL( *iGroupLink, *this ); + CleanupStack::Pop( this ); + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::AddObserver +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::AddObserver( MPbk2CommandObserver& aObserver ) + { + iCommandObserver = &aObserver; + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::ResetUiControl +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::ResetUiControl( + MPbk2ContactUiControl& aUiControl) + { + if (iUiControl == &aUiControl) + { + iUiControl = NULL; + } + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::RunL +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::RunL() + { + switch ( iState ) + { + case ELauchQuery: + { + QueryGroupNameL(); + break; + } + case EFinishCommand: + { + if ( iCommandObserver ) + { + iCommandObserver->CommandFinished( *this ); + } + break; + } + default: + { + __ASSERT_DEBUG( EFalse, Panic(ERunL_InvalidState) ); + break; + } + } + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::DoCancel +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::DoCancel() + { + //Do nothing + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::RunError +// -------------------------------------------------------------------------- +// +TInt CPguRenameGroupCmd::RunError( TInt aError ) + { + IssueRequest(EFinishCommand); + + return aError; + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::ContactOperationCompleted +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::ContactOperationCompleted( TContactOpResult aResult ) + { + if ( aResult.iOpCode == MVPbkContactObserver::EContactLock ) + { + IssueRequest( ELauchQuery ); + } + else if ( aResult.iOpCode == MVPbkContactObserver::EContactCommit ) + { + CleanupCommand(); + } + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::ContactOperationFailed +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::ContactOperationFailed( + TContactOp /*aOpCode*/, + TInt aErrorCode, + TBool aErrorNotified ) + { + if ( !aErrorNotified ) + { + CCoeEnv::Static()->HandleError( aErrorCode ); + } + CleanupCommand(); + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::VPbkSingleContactOperationComplete +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::VPbkSingleContactOperationComplete( + MVPbkContactOperationBase& /*aOperation*/, + MVPbkStoreContact* aContact ) + { + __ASSERT_DEBUG(aContact->Group(), Panic(EPanicContactNotGroup)); + + iContactGroup = aContact->Group(); + if ( iContactGroup ) + { + // Lock contact group for editing + TRAPD( error, iContactGroup->LockL( *this ) ); + + if ( error != KErrNone ) + { + CCoeEnv::Static()->HandleError( error ); + IssueRequest( EFinishCommand ); + } + } + + delete iContactOperation; + iContactOperation = NULL; + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::VPbkSingleContactOperationFailed +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::VPbkSingleContactOperationFailed( + MVPbkContactOperationBase& aOperation, + TInt aError ) + { + if ( iContactOperation == &aOperation ) + { + CCoeEnv::Static()->HandleError( aError ); + CleanupCommand(); + delete iContactOperation; + iContactOperation = NULL; + } + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::QueryGroupNameL +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::QueryGroupNameL() + { + HBufC* textBuf = HBufC::NewLC( KGroupLabelLength ); + TPtr text = textBuf->Des(); + TInt lengthInUse = Min( KGroupLabelLength, iContactGroup->GroupLabel().Length() ); + text.Append( iContactGroup->GroupLabel().Left( lengthInUse ) ); + + MVPbkContactViewBase* groupsView = + Phonebook2::Pbk2AppUi()->ApplicationServices(). + ViewSupplier().AllGroupsViewL(); + + CPguGroupNameQueryDlg* dlg = CPguGroupNameQueryDlg::NewL( text, + *groupsView, Phonebook2::Pbk2AppUi()->ApplicationServices(). + NameFormatter(), EFalse ); + + dlg->SetMaxLength( KGroupLabelLength ); + + if ( dlg->ExecuteLD( R_PHONEBOOK2_GROUPLIST_NEWGROUP_QUERY ) ) + { + iContactGroup->SetGroupLabelL( text ); + iContactGroup->CommitL( *this ); + } + else + { + IssueRequest( EFinishCommand ); + } + CleanupStack::PopAndDestroy( textBuf ); + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::CleanupCommand +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::CleanupCommand() + { + if ( iCommandObserver ) + { + iCommandObserver->CommandFinished( *this ); + } + if (iUiControl) + { + iUiControl->UpdateAfterCommandExecution(); + } + } + +// -------------------------------------------------------------------------- +// CPguRenameGroupCmd::IssueRequest +// -------------------------------------------------------------------------- +// +void CPguRenameGroupCmd::IssueRequest( TProcessState aState ) + { + if ( !IsActive() ) + { + iState = aState; + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive(); + } + } + +// End of File