phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
child 68 9da50d567e3c
--- /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 <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 )
+    {   
+    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