--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,361 @@
+/*
+* 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 <Pbk2GroupUIRes.rsg>
+#include <MPbk2CommandObserver.h>
+#include <MPbk2ContactUiControl.h>
+#include <CPbk2StoreConfiguration.h>
+#include <CPbk2StoreProperty.h>
+#include <CPbk2StorePropertyArray.h>
+#include <MPbk2AppUi.h>
+#include <MPbk2ApplicationServices.h>
+#include <MPbk2ContactViewSupplier.h>
+
+// Virtual Phonebook
+#include <CVPbkContactManager.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkContactGroup.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactOperationBase.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <MVPbkContactStoreProperties.h>
+
+// System includes
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+/// 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 )
+ {
+ CCoeEnv::Static()->HandleError( aError );
+ return KErrNone;
+ }
+
+// --------------------------------------------------------------------------
+// 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