--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NlxMoveTopContactsCmd.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,335 @@
+/*
+* 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: Organize(reorder) top contacts command
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbk2NlxMoveTopContactsCmd.h"
+#include "CPbk2NlxMoveTopContactsDlg.h"
+#include "CPbk2NlxReorderingModel.h"
+
+#include <Pbk2UIControls.rsg>
+#include <Pbk2ProcessDecoratorFactory.h>
+#include <MPbk2CommandObserver.h>
+#include <MPbk2ContactUiControl.h>
+#include <CPbk2AppUiBase.h>
+#include <MPbk2ApplicationServices.h>
+#include <MPbk2ContactViewSupplier.h>
+#include <MPbk2ContactViewSupplier2.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkBaseContact.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkContactOperationBase.h>
+#include <CVPbkContactLinkArray.h>
+#include <MVPbkContactViewBase.h>
+
+namespace
+ {
+#ifdef _DEBUG
+enum TPanicCode
+ {
+ EPanicPreCond_IncorrestState = 1,
+ EPanicPreCond_NoteActive
+ };
+
+void Panic(TPanicCode aReason)
+ {
+ _LIT(KPanicText, "CPbk2NlxMoveTopContactsCmd");
+ User::Panic(KPanicText, aReason);
+ }
+#endif // _DEBUG
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::CPbk2NlxMoveTopContactsCmd
+// --------------------------------------------------------------------------
+//
+CPbk2NlxMoveTopContactsCmd::CPbk2NlxMoveTopContactsCmd(
+ MPbk2ContactUiControl& aUiControl ) :
+ CActive( EPriorityStandard ),
+ iUiControl( &aUiControl )
+ {
+ CActiveScheduler::Add( this );
+ if( iUiControl )
+ {
+ iUiControl->RegisterCommand( this );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::~CPbk2NlxMoveTopContactsCmd
+// --------------------------------------------------------------------------
+//
+CPbk2NlxMoveTopContactsCmd::~CPbk2NlxMoveTopContactsCmd()
+ {
+ Cancel();
+ if (iUiControl)
+ {
+ iUiControl->RegisterCommand( NULL );
+ }
+
+ delete iFocusedContact;
+ delete iTopContactOperation;
+ delete iReorderingModel;
+ delete iVPbkTopContactManager;
+ delete iDecorator;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::NewL
+// --------------------------------------------------------------------------
+//
+CPbk2NlxMoveTopContactsCmd* CPbk2NlxMoveTopContactsCmd::NewL(
+ MPbk2ContactUiControl& aUiControl )
+ {
+ CPbk2NlxMoveTopContactsCmd* self =
+ new ( ELeave ) CPbk2NlxMoveTopContactsCmd( aUiControl );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::ConstructL()
+ {
+ if( iUiControl )
+ {
+ iUiControl->RegisterCommand( this );
+ }
+
+ iVPbkTopContactManager = CVPbkTopContactManager::NewL(
+ Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager() );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::ExecuteLD
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::ExecuteLD()
+ {
+ if ( iUiControl )
+ {
+ iUiControl->SetBlank(ETrue);
+ }
+ IssueRequest(EShowMoveDlg);
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::ResetUiControl
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::ResetUiControl(
+ MPbk2ContactUiControl& aUiControl )
+ {
+ if ( iUiControl == &aUiControl )
+ {
+ iUiControl = NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::AddObserver
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::AddObserver(
+ MPbk2CommandObserver& aObserver )
+ {
+ iCommandObserver = &aObserver;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::RunL
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::RunL()
+ {
+ switch(iState)
+ {
+ case EShowMoveDlg:
+ {
+ ShowDlgL();
+ break;
+ }
+ case ESavingTopContacts:
+ {
+ ShowWaitNoteL();
+
+ iFocusedContact = iReorderingModel->FocusedContactLinkL();
+ MVPbkContactLinkArray* topContacts =
+ iReorderingModel->ReorderedLinksLC();
+ //save top contacts
+ iTopContactOperation = iVPbkTopContactManager->SetTopOrderL(
+ *topContacts,
+ *this,
+ *this );
+ CleanupStack::PopAndDestroy(); //topContacts
+ break;
+ }
+ case ECompleteCommand:
+ {
+ if ( iUiControl )
+ {
+ // keep focused item
+ if ( iFocusedContact )
+ {
+ iUiControl->SetFocusedContactL( *iFocusedContact );
+ }
+ iUiControl->SetBlank(EFalse);
+ iUiControl->UpdateAfterCommandExecution();
+ }
+ if ( iCommandObserver )
+ {
+ iCommandObserver->CommandFinished( *this );
+ }
+ break;
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::RunError
+// --------------------------------------------------------------------------
+//
+TInt CPbk2NlxMoveTopContactsCmd::RunError( TInt aError )
+ {
+ if ( aError != KErrNone )
+ {
+ FinishCommand( aError );
+ }
+
+ return KErrNone;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::DoCancel
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::DoCancel()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::IssueRequest
+// Advances to the next state
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::IssueRequest(TState aNextState)
+ {
+ iState = aNextState;
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ SetActive();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::FinishCommand
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsCmd::FinishCommand(TInt aResult)
+ {
+ if ( aResult != KErrNone && aResult != KErrCancel )
+ {
+ CCoeEnv::Static()->HandleError( aResult );
+ }
+ if ( iDecorator )
+ {
+ // wait for callback from the wait note and finish then
+ iDecorator->ProcessStopped();
+ }
+ else
+ {
+ IssueRequest( ECompleteCommand );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsCmd::ShowDlgL
+// Displays Reordering dialog and creates listbox model for it
+// ---------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsCmd::ShowDlgL()
+ {
+ MPbk2ContactViewSupplier2* viewSupplierExtension =
+ reinterpret_cast<MPbk2ContactViewSupplier2*>(
+ Phonebook2::Pbk2AppUi()->ApplicationServices().ViewSupplier().
+ MPbk2ContactViewSupplierExtension(
+ KMPbk2ContactViewSupplierExtension2Uid ));
+ __ASSERT_DEBUG( viewSupplierExtension, Panic(EPanicPreCond_IncorrestState));
+ __ASSERT_DEBUG( viewSupplierExtension->TopContactsViewL(),
+ Panic(EPanicPreCond_IncorrestState));
+ __ASSERT_DEBUG(!iReorderingModel, Panic(EPanicPreCond_IncorrestState));
+
+ iReorderingModel = CPbk2NlxReorderingModel::NewL(
+ Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager(),
+ *viewSupplierExtension->TopContactsViewL(),
+ Phonebook2::Pbk2AppUi()->ApplicationServices().NameFormatter(),
+ Phonebook2::Pbk2AppUi()->ApplicationServices().StoreProperties() );
+
+ if ( iUiControl )
+ {
+ //keep focus from the namelist view
+ MVPbkContactLink* focusedContact =
+ iUiControl->FocusedContactL()->CreateLinkLC();
+ iReorderingModel->SetFocusedContactL( *focusedContact );
+ CleanupStack::PopAndDestroy();//focusedContact
+ }
+
+ CPbk2NlxMoveTopContactsDlg* dlg = CPbk2NlxMoveTopContactsDlg::NewL(
+ *iReorderingModel );
+
+ if ( dlg->ExecuteLD() )
+ {
+ IssueRequest(ESavingTopContacts);
+ }
+ else
+ {
+ FinishCommand( KErrCancel );
+ }
+ }
+
+void CPbk2NlxMoveTopContactsCmd::VPbkOperationCompleted(
+ MVPbkContactOperationBase*)
+ {
+ FinishCommand( KErrNone );
+ }
+
+void CPbk2NlxMoveTopContactsCmd::VPbkOperationFailed(
+ MVPbkContactOperationBase*,
+ TInt aError )
+ {
+ FinishCommand( aError );
+ }
+
+void CPbk2NlxMoveTopContactsCmd::ShowWaitNoteL()
+ {
+ __ASSERT_DEBUG(!iDecorator, Panic(EPanicPreCond_NoteActive));
+
+ iDecorator = Pbk2ProcessDecoratorFactory::CreateWaitNoteDecoratorL
+ ( R_QTN_GEN_NOTE_SAVING_WAIT, ETrue );
+ iDecorator->SetObserver( *this );
+ iDecorator->ProcessStartedL( 0 ); // wait note doesn't care about amount
+ }
+
+void CPbk2NlxMoveTopContactsCmd::ProcessDismissed( TInt /*aCancelCode*/ )
+ {
+ // if it's cancel, just finish cmd execution,
+ // the cmd will be deleted and canceled that way
+ IssueRequest( ECompleteCommand );
+ }
+// End of File