diff -r 8e7494275d3a -r 4f0867e42d62 omads/omadsappui/AspSyncUtil/src/AspProgressDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsappui/AspSyncUtil/src/AspProgressDialog.cpp Wed Sep 01 12:30:02 2010 +0100 @@ -0,0 +1,531 @@ +/* +* Copyright (c) 2005 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 "AspProgressDialog.h" +#include "AspSyncUtil.rh" +#include "AspUtil.h" +#include "AspDebug.h" +#include "AspDefines.h" +#include "AspResHandler.h" +#include "AspDialogUtil.h" + + +#include +#include + + + +// ============================ MEMBER FUNCTIONS =============================== + + + +/******************************************************************************* + * class CAspProgressDialog + *******************************************************************************/ + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::CAspProgressDialog +// +// ----------------------------------------------------------------------------- +// +CAspProgressDialog::CAspProgressDialog(MAspProgressDialogObserver* aObserver) : iObserver(aObserver) + { + FLOG( _L("CAspProgressDialog: CAspProgressDialog") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::NewL +// +// ----------------------------------------------------------------------------- +// +CAspProgressDialog* CAspProgressDialog::NewL(MAspProgressDialogObserver* aObserver) + { + FLOG( _L("CAspProgressDialog::NewL START") ); + + CAspProgressDialog* self = new (ELeave) CAspProgressDialog(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + FLOG( _L("CAspProgressDialog::NewL END") ); + return(self); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::ConstructL() + { + FLOG( _L("CAspProgressDialog::ConstructL START") ); + + iLastText = KNullDesC; + iAnimation = EFalse; + iResHandler = CAspResHandler::NewL(); + iProgressDialogRunning = EFalse; + + FLOG( _L("CAspProgressDialog::ConstructL END") ); + } + + +// ----------------------------------------------------------------------------- +// Destructor +// +// ----------------------------------------------------------------------------- +// +CAspProgressDialog::~CAspProgressDialog() + { + FLOG( _L("CAspProgressDialog::~CAspProgressDialog START") ); + + delete iResHandler; + delete iProgressDialog; + + FLOG( _L("CAspProgressDialog::~CAspProgressDialog END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::LaunchProgressDialogL +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::LaunchProgressDialogL(const TDesC& aLabel, TAknsItemID aId, const TDesC& aFileName, TInt aFileBitmapId, TInt aFileMaskId) + { + FLOG( _L("CAspProgressDialog::LaunchProgressDialogL START") ); + + iProgressDialog = new(ELeave) CAspProgressDialog2(reinterpret_cast(&iProgressDialog), iApplicationId); + + iProgressDialog->PrepareLC(R_ASP_PROGRESS_NOTE); + iProgressDialog->SetTextL(aLabel); + + CEikImage* image = TDialogUtil::CreateImageLC(aId, aFileName, aFileBitmapId, aFileMaskId); + iProgressDialog->SetImageL(image); + CleanupStack::Pop(image); + + // get reference to progress info bar + iProgressInfo = iProgressDialog->GetProgressInfoL(); + iProgressDialog->SetCallback(this); + + iProgressDialog->RunLD(); + iProgressDialogRunning = ETrue; + + FLOG( _L("CAspProgressDialog::LaunchProgressDialogL END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::CancelProgressDialogL +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::CancelProgressDialogL() + { + FLOG( _L("CAspProgressDialog::CancelProgressDialogL START") ); + + if (!iProgressDialogRunning) + { + return; // dialog is already closed + } + + if(iProgressDialog) + { + iProgressDialog->ProcessFinishedL(); + iProgressDialogRunning = EFalse; + } + + FLOG( _L("CAspProgressDialog::CancelProgressDialogL END") ); + } + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::ProgressDialog +// +// ----------------------------------------------------------------------------- +// +CAspProgressDialog2* CAspProgressDialog::ProgressDialog() + { + return iProgressDialog; + } + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::UpdateTextL +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::UpdateTextL(const TDesC& aText) + { + FLOG( _L("CAspProgressDialog::UpdateTextL START") ); + + __ASSERT_DEBUG(iProgressDialog, TUtil::Panic(KErrGeneral)); + + if (iLastText.Compare(aText) == 0) + { + return; // text has not changed + } + + iProgressDialog->SetTextL(aText); + TUtil::StrCopy(iLastText, aText); + + FLOG( _L("aText is '%S'"), &aText ); + + FLOG( _L("CAspProgressDialog::UpdateTextL END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::SetProgress +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::SetProgress(TInt aValue) + { + FLOG( _L("CAspProgressDialog::SetProgress START") ); + + __ASSERT_DEBUG(iProgressDialog && iProgressInfo, TUtil::Panic(KErrGeneral)); + + CEikProgressInfo::SInfo info = iProgressInfo->Info(); + + TInt val = aValue; + if (val > info.iFinalValue) + { + val = info.iFinalValue; + } + + iProgressInfo->SetAndDraw(val); + + FLOG( _L("aValue is %d"), aValue ); + + FLOG( _L("CAspProgressDialog::SetProgress END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::SetFinalProgress +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::SetFinalProgress(TInt aFinalValue) + { + FLOG( _L("CAspProgressDialog::SetFinalProgress START") ); + + __ASSERT_DEBUG(iProgressInfo, TUtil::Panic(KErrGeneral)); + + if (aFinalValue < 0) + { + iProgressInfo->SetFinalValue(0); + } + else + { + iProgressInfo->SetFinalValue(aFinalValue); + } + + iProgressInfo->SetAndDraw(0); + + FLOG( _L("aFinalValue is %d"), aFinalValue ); + + FLOG( _L("CAspProgressDialog::SetFinalProgress END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::NoteControl +// +// ----------------------------------------------------------------------------- +// +CAknNoteControl* CAspProgressDialog::NoteControl() + { + CAknNoteControl* note = STATIC_CAST(CAknNoteControl*, iProgressDialog->ControlOrNull(EAspSyncProgressNote)); + + __ASSERT_DEBUG(note, TUtil::Panic(KErrGeneral)); + + return note; + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::CancelAnimation +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::CancelAnimation() + { + FLOG( _L("CAspProgressDialog::CancelAnimation START") ); + + NoteControl()->CancelAnimation(); + iAnimation = EFalse; + + FLOG( _L("CAspProgressDialog::CancelAnimation END") ); + } + + +// ---------------------------------------------------------------------------- +// CAspProgressDialog::StartAnimationL +// +// ---------------------------------------------------------------------------- +// +void CAspProgressDialog::StartAnimationL() + { + FLOG( _L("CAspProgressDialog::StartAnimationL START") ); + + if (!iAnimation) + { + NoteControl()->StartAnimationL(); + iAnimation = ETrue; + + FLOG( _L("animation started") ); + } + + FLOG( _L("CAspProgressDialog::StartAnimationL END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::DialogDismissedL (From MProgressDialogCallback) +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::DialogDismissedL(TInt aButtonId) + { + FLOG( _L("CAspProgressDialog::DialogDismissedL START" ) ); + + if (!iObserver) + { + FLOG( _L("### no observer ###") ); + FLOG( _L("CAspProgressDialog::DialogDismissedL END") ); + return; // no observer + } + + // end key handling + if (aButtonId == EKeyPhoneEnd) + { + TRAP_IGNORE(iObserver->HandleDialogEventL(EKeyPhoneEnd)); + } + + // this dialog only sends one cancel event - other events are ignored + if (aButtonId == EEikBidCancel) + { + TRAP_IGNORE(iObserver->HandleDialogEventL(EEikBidCancel)); + } + + FLOG( _L("CAspProgressDialog::DialogDismissedL END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog::HideButtonL +// +// ----------------------------------------------------------------------------- +// +void CAspProgressDialog::HideButtonL() + { + const TInt KLastButtonIndex = 2; + + CEikButtonGroupContainer& container = iProgressDialog->ButtonGroupContainer(); + + container.RemoveCommandFromStack(KLastButtonIndex, EAknSoftkeyCancel); + container.AddCommandToStackL(KLastButtonIndex, EAknSoftkeyEmpty, KNullDesC); + container.DrawDeferred(); + } + + +// ---------------------------------------------------------------------------- +// CAspProgressDialog::SetApplicationId +// +// ---------------------------------------------------------------------------- +// +void CAspProgressDialog::SetApplicationId(TInt aApplicationId) + { + iApplicationId = aApplicationId; + } + + + + + +/******************************************************************************* + * class CAspProgressDialog2 + *******************************************************************************/ + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog2::CAspProgressDialog2 +// +// ----------------------------------------------------------------------------- +// +CAspProgressDialog2::CAspProgressDialog2(CEikDialog** aSelfPtr, TInt aApplicationId) + : CAknProgressDialog(aSelfPtr) + { + FLOG( _L("CAspProgressDialog2::CAspProgressDialog2 START") ); + + iCloseEventReceived = EFalse; + iCancelEventReceived = EFalse; + iClosed = EFalse; + iCanceled = EFalse; + iApplicationId = aApplicationId; + + if (iApplicationId != EApplicationIdSync) + { + // to make sure that wserv does not change our priority even we lose foreground. + // this is needed for receiving event EKeyPhoneEnd without delay. + + RWsSession& wsSession = iEikonEnv->WsSession(); + wsSession.ComputeMode(RWsSession::EPriorityControlDisabled); + + FLOG( _L("RWsSession::ComputeMode(RWsSession::EPriorityControlDisabled)") ); + + } + + FLOG( _L("CAspProgressDialog2::CAspProgressDialog2 END") ); + } + + +// ----------------------------------------------------------------------------- +// Destructor +// +// ----------------------------------------------------------------------------- +// +CAspProgressDialog2::~CAspProgressDialog2() + { + FLOG( _L("CAspProgressDialog2::~CAspProgressDialog2 START") ); + + if (iApplicationId != EApplicationIdSync) + { + RWsSession& wsSession = iEikonEnv->WsSession(); + wsSession.ComputeMode(RWsSession::EPriorityControlComputeOff); + + FLOG( _L("RWsSession::ComputeMode(RWsSession::EPriorityControlComputeOff)") ); + } + + if (iAvkonAppUi) + { + iAvkonAppUi->RemoveFromStack(this); + } + + FLOG( _L("CAspProgressDialog2::~CAspProgressDialog2 END") ); + } + + +// ----------------------------------------------------------------------------- +// CAspProgressDialog2::OkToExitL +// +// ----------------------------------------------------------------------------- +// +TBool CAspProgressDialog2::OkToExitL(TInt aButtonId) + { + FLOG( _L("CAspProgressDialog2::OkToExitL START") ); + + // close key handling + if (iCloseEventReceived && !iClosed) + { + if (iCallback) + { + TRAP_IGNORE(iCallback->DialogDismissedL(EKeyPhoneEnd)); + + FLOG( _L("CAspProgressDialog2::OkToExitL: close handling done") ); + } + + if (iAvkonAppUi) + { + // prevent further close events + iAvkonAppUi->RemoveFromStack(this); + } + + FLOG( _L("CAspProgressDialog2::OkToExitL END") ); + + iClosed = ETrue; + return ETrue; + } + + // cancel key handling + if (aButtonId == EEikBidCancel && iCancelEventReceived && !iCanceled && !iClosed) + { + if (iCallback) + { + TRAP_IGNORE(iCallback->DialogDismissedL(EEikBidCancel)); + + FLOG( _L("CAspProgressDialog2::OkToExitL: cancel key handling done") ); + } + + FLOG( _L("CAspProgressDialog2::OkToExitL END") ); + + iCanceled = ETrue; + return EFalse; // leave dialog open - let observer close it + } + + + FLOG( _L("CAspProgressDialog2::OkToExitL END") ); + + return CAknProgressDialog::OkToExitL(aButtonId); + } + + +// ---------------------------------------------------------------------------- +// CAspProgressDialog2::OfferKeyEventL +// +// ---------------------------------------------------------------------------- +// +TKeyResponse CAspProgressDialog2::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + FLOG( _L("CAspProgressDialog2::OfferKeyEventL START") ); + + if (aKeyEvent.iScanCode == EStdKeyDevice1) + { + iCancelEventReceived = ETrue; + FLOG( _L("CAspProgressDialog2::OfferKeyEventL: EStdKeyDevice1 received") ); + } + + + if (aType == EEventKey) + { + switch (aKeyEvent.iCode) + { + + case EKeyEscape: // iCode 27 (0x1b) + { + iCloseEventReceived = ETrue; + FLOG( _L("CAspProgressDialog2::OfferKeyEventL: EKeyEscape received") ); + break; + } + + case EKeyPhoneEnd: + { + iCloseEventReceived = ETrue; + FLOG( _L("CAspProgressDialog2::OfferKeyEventL: EKeyPhoneEnd received") ); + break; + } + + default: + FLOG( _L("event key code is %d"), aKeyEvent.iCode); + break; + } + } + + + FLOG( _L("CAspProgressDialog2::OfferKeyEventL END") ); + + return CAknProgressDialog::OfferKeyEventL(aKeyEvent, aType); + } + + + + +// End of File