--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/App/src/CPbkAssignToGroupCmd.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,277 @@
+/*
+* Copyright (c) 2002 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:
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CPbkAssignToGroupCmd.h"
+#include <eikprogi.h>
+#include <StringLoader.h>
+#include <Phonebook.rsg>
+#include <CPbkAssignToGroup.h>
+#include <CPbkContactViewListControl.h>
+#include <MPbkCommandObserver.h>
+#include <pbkdebug.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+// LOCAL DEBUG CODE
+#ifdef _DEBUG
+enum TPanicCode
+ {
+ EPanicPreCond_ResetWhenDestroyed = 1
+ };
+
+void Panic(TPanicCode aReason)
+ {
+ _LIT(KPanicText, "CPbkAssignToGroupCmd");
+ User::Panic(KPanicText,aReason);
+ }
+#endif
+
+}
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline CPbkAssignToGroupCmd::CPbkAssignToGroupCmd
+ (CPbkContactEngine& aEngine,
+ CPbkContactViewListControl& aUiControl) :
+ CActive(EPriorityIdle),
+ iEngine(aEngine),
+ iUiControl(aUiControl),
+ iFocusId(KNullContactId),
+ iDialogDismissed(ETrue) // there is no dialog at this point
+ {
+ PBK_DEBUG_PRINT
+ (PBK_DEBUG_STRING("CPbkAssignToGroupCmd::CPbkAssignToGroupCmd(0x%x)"),
+ this);
+
+ CActiveScheduler::Add(this);
+ }
+
+inline void CPbkAssignToGroupCmd::ConstructL
+ (const CContactIdArray& aContacts,
+ TContactItemId aGroupId)
+ {
+ iAssignToGroupProcess = CPbkAssignToGroup::NewLC(iEngine, aContacts, aGroupId);
+ CleanupStack::Pop(iAssignToGroupProcess);
+ }
+
+CPbkAssignToGroupCmd* CPbkAssignToGroupCmd::NewL
+ (CPbkContactEngine& aEngine,
+ const CContactIdArray& aContacts,
+ CPbkContactViewListControl& aUiControl,
+ TContactItemId aGroupId)
+ {
+ CPbkAssignToGroupCmd* self = new(ELeave) CPbkAssignToGroupCmd(aEngine, aUiControl);
+ CleanupStack::PushL(self);
+ self->ConstructL(aContacts, aGroupId);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+void CPbkAssignToGroupCmd::ResetWhenDestroyed
+ (CPbkAssignToGroupCmd** aSelfPtr)
+ {
+ __ASSERT_DEBUG(!aSelfPtr || *aSelfPtr==this,
+ Panic(EPanicPreCond_ResetWhenDestroyed));
+
+ iSelfPtr = aSelfPtr;
+ }
+
+CPbkAssignToGroupCmd::~CPbkAssignToGroupCmd()
+ {
+ PBK_DEBUG_PRINT
+ (PBK_DEBUG_STRING("CPbkAssignToGroupCmd::~CPbkAssignToGroupCmd(0x%x)"),
+ this);
+
+ Cancel();
+
+ if ( !iRedButtonPressed )
+ {
+ // Unblank and redraw UI control
+ iUiControl.SetBlank(EFalse);
+ }
+
+ DeleteProgressNote();
+ delete iAssignToGroupProcess;
+
+ if (iSelfPtr)
+ {
+ *iSelfPtr = NULL;
+ }
+ iDestroyed = ETrue;
+ }
+
+void CPbkAssignToGroupCmd::ExecuteLD()
+ {
+ PBK_DEBUG_PRINT
+ (PBK_DEBUG_STRING("CPbkAssignToGroupCmd::ExecuteLD(0x%x)"),
+ this);
+ CleanupStack::PushL(this);
+
+ // save focus
+ iFocusId = iUiControl.FocusedContactIdL();
+
+ // Blank UI control to avoid flicker
+ iUiControl.SetBlank(ETrue);
+
+ // delete previous note
+ DeleteProgressNote();
+
+ // Start assignation process. ProcessFinished() will be called when execution
+ // is finished.
+ CAknProgressDialog* progressDialog = new(ELeave) CAknProgressDialog(
+ reinterpret_cast<CEikDialog**>(NULL), ETrue);
+ progressDialog->PrepareLC(R_QTN_PHOB_WNOTE_ADD_TO_GROUP);
+ iProgressDlgInfo = progressDialog->GetProgressInfoL();
+ iProgressDlgInfo->SetFinalValue(iAssignToGroupProcess->TotalNumberOfSteps());
+ progressDialog->SetCallback(this);
+ iDialogDismissed = EFalse;
+ progressDialog->RunLD();
+
+ iProgressDialog = progressDialog;
+
+ // issue request for entry assignation
+ IssueRequest();
+
+ CleanupStack::Pop(this);
+ }
+
+void CPbkAssignToGroupCmd::AddObserver
+ (MPbkCommandObserver& aObserver)
+ {
+ iCommandObserver = &aObserver;
+ }
+
+void CPbkAssignToGroupCmd::DoCancel()
+ {
+ }
+
+void CPbkAssignToGroupCmd::RunL()
+ {
+ PBK_DEBUG_PRINT
+ (PBK_DEBUG_STRING("CPbkAssignToGroupCmd::StepL()"),
+ this);
+
+ if (!iAssignToGroupProcess->IsProcessDone() && !iDialogDismissed)
+ {
+ // process one step
+ iAssignToGroupProcess->StepL();
+ ++iAssignedCount;
+
+ // Incrementing progress of the process
+ iProgressDlgInfo->SetAndDraw(iAssignedCount);
+
+ // issue request to delete next item
+ IssueRequest();
+ }
+ else
+ {
+ PBK_DEBUG_PRINT(PBK_DEBUG_STRING("CPbkAssignToGroupCmd::RunL process completed start"));
+
+ // process is completed, all entries have been assigned
+ ProcessFinished(*iAssignToGroupProcess);
+
+ PBK_DEBUG_PRINT(PBK_DEBUG_STRING("CPbkAssignToGroupCmd::RunL process completed end"));
+ }
+
+ PBK_DEBUG_PRINT
+ (PBK_DEBUG_STRING("CPbkAssignToGroupCmd::RunL end"));
+ }
+
+TInt CPbkAssignToGroupCmd::RunError
+ (TInt aError)
+ {
+ TInt result = iAssignToGroupProcess->HandleStepError(aError);
+ Cancel();
+ ProcessFinished(*iAssignToGroupProcess);
+ return result;
+ }
+
+void CPbkAssignToGroupCmd::ProcessFinished
+ (MPbkBackgroundProcess& /*aProcess*/)
+ {
+ PBK_DEBUG_PRINT
+ (PBK_DEBUG_STRING("CPbkAssignToGroupCmd::ProcessFinished(0x%x)"),
+ this);
+
+ if ( !iRedButtonPressed )
+ {
+ // Clear listbox selections
+ iUiControl.HandleMarkableListUpdateAfterCommandExecution();
+
+ // restore focus
+ if (iFocusId != KNullContactId)
+ {
+ TInt index = -1;
+ TRAP_IGNORE(index = iUiControl.FindContactIdL(iFocusId));
+ if (index >= 0)
+ {
+ iUiControl.SetCurrentItemIndex(index);
+ }
+ }
+
+ // Unblank and redraw UI control
+ iUiControl.SetBlank(EFalse);
+ iUiControl.DrawNow();
+ }
+
+ DeleteProgressNote();
+ }
+
+void CPbkAssignToGroupCmd::DeleteProgressNote()
+ {
+ PBK_DEBUG_PRINT(PBK_DEBUG_STRING("CPbkAssignToGroupCmd::DeleteProgressNote start"));
+
+ if (iProgressDialog && !iDialogDismissed)
+ {
+ // deletes the dialog
+ TRAPD(err, iProgressDialog->ProcessFinishedL());
+ if (err != KErrNone)
+ {
+ delete iProgressDialog;
+ }
+ iProgressDialog = NULL;
+ }
+
+ PBK_DEBUG_PRINT(PBK_DEBUG_STRING("CPbkAssignToGroupCmd::DeleteProgressNote end"));
+ }
+
+void CPbkAssignToGroupCmd::IssueRequest()
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, KErrNone);
+ SetActive();
+ }
+
+void CPbkAssignToGroupCmd::DialogDismissedL( TInt aButtonId )
+ {
+ PBK_DEBUG_PRINT(PBK_DEBUG_STRING("CPbkAssignToGroupCmd::DialogDismissedL"));
+ iDialogDismissed = ETrue;
+ if ( aButtonId == KErrNotFound )
+ {
+ iRedButtonPressed = ETrue;
+ }
+
+ // notify command owner that the command has finished
+ iCommandObserver->CommandFinished(*this);
+ }
+
+// End of File