messagingappbase/msgavkon/muiu_domain/reporteroperation/src/MuiuMsvWrappableProgressDialog.cpp
changeset 0 72b543305e3a
child 19 7e4e4bcc75b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgavkon/muiu_domain/reporteroperation/src/MuiuMsvWrappableProgressDialog.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,790 @@
+/*
+* 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:  
+*     Operation progress reporting dialog class.
+*     Encapsulates the display and update of progress information.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "MuiuMsvWrappableProgressDialog.h"
+#include "MuiuMsvProgressReporterOperation.h"
+#include "muiudomainpan.h"
+#include "MuiuLogText.h"
+#include <coemain.h>
+#include <eiklabel.h>
+#include <eikmover.h>
+#include <eikprogi.h>
+#include <eikbtgpc.h>
+#include <eikbtgrp.h>   // MeikButtonGroup
+#include <eikimage.h>
+#include <bautils.h>    // BaflUtils
+#include <eikenv.h>
+#include <eikrutil.h>
+#include <mtmuibas.h>
+#include <MTMStore.h>
+#include <msvuids.h>
+#include <muiu.rsg>
+#include <opprgdlg.hrh>
+#include <StringLoader.h>
+#include <aknstaticnotedialog.h>
+#include <avkon.hrh>
+#include <gulfont.h>
+#include <AknIconUtils.h>  // AknIconUtils::AvkonIconFileName()
+#include <data_caging_path_literals.hrh> // KDC_RESOURCE_FILES_DIR
+#include <aknnotecontrol.h>              // CAknNoteControl
+#include <avkon.rsg>                     // R_QGN_GRAF_WAIT_BAR_ANIM
+#include <AknsUtils.h>     // SkinInstance
+#include <AknsConstants.h> // KAknsIIDQgnNoteErased, KAknsIIDQgnNoteMove, KAknsIIDQgnNoteProgress
+                           // KAknsIIDQgnNoteCopy, KAknsIIDQgnNoteMail
+#include <avkon.mbg> // EMbmAvkonQgn_note_erased, EMbmAvkonQgn_note_move, 
+                     // EMbmAvkonQgn_note_progress,
+                     // EMbmAvkonQgn_note_copy, EMbmAvkonQgn_note_mail
+
+
+// CONSTANTS
+const TInt KOneItem = 1;
+// We need to make sure that the timer runs regardless of what the app is doing.
+const TInt KPrgOpTimerPriority = CActive::EPriorityHigh;
+const TInt KMuiuLocalProgressEntriesDoneReplaceIndex = 0;
+const TInt KMuiuLocalProgressTotalEntriesReplaceIndex = 1;
+_LIT(KDirAndMuiuResFileName,"muiu.rsc");
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::NewL
+//
+// ---------------------------------------------------------
+//
+CMsvWrappableProgressDialog* CMsvWrappableProgressDialog::NewL( CMtmStore& aMtmStore, 
+                                                          TInt aImageIndex /*= KErrNotFound */, 
+                                                          TBool aProgressVisibilityDelayOff,
+                                                          TBool aDisplayWaitAnimation )
+    {
+    CMsvWrappableProgressDialog* dlg = new( ELeave ) CMsvWrappableProgressDialog( 
+        aMtmStore, EOpPrgDlgCIDProgress, aImageIndex, aProgressVisibilityDelayOff, 
+        aDisplayWaitAnimation );
+    
+    CleanupStack::PushL( dlg );
+    TParse parse;
+    parse.Set( KDirAndMuiuResFileName, &KDC_RESOURCE_FILES_DIR, NULL ); 
+    TFileName fileName( parse.FullName() );
+    dlg->iResources.OpenL( fileName );
+    CleanupStack::Pop( dlg );
+    if ( aDisplayWaitAnimation )
+        {
+        dlg->ExecuteLD( R_OPERATION_WAITANIMATION_DIALOG );//CAknNoteDialog::ENoTone,
+        }
+    else
+        {
+        dlg->ExecuteLD( R_OPERATION_PROGRESS_DIALOG );//CAknNoteDialog::ENoTone,
+        }
+    return dlg;
+    }
+    
+    
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::NewL
+// This method is used only when progress dialog is shown 
+// also in cover side.
+// ---------------------------------------------------------
+//
+CMsvWrappableProgressDialog* CMsvWrappableProgressDialog::NewL( CMtmStore& aMtmStore,
+                                                          TInt aDialogIndex, 
+                                                          TUid aCategoryUid,
+                                                          TInt aImageIndex /*= KErrNotFound */, 
+                                                          TBool aProgressVisibilityDelayOff,
+                                                          TBool aDisplayWaitAnimation )
+    {
+    CMsvWrappableProgressDialog* dlg = new( ELeave ) CMsvWrappableProgressDialog( 
+        aMtmStore, EOpPrgDlgCIDProgress, aImageIndex, aProgressVisibilityDelayOff, 
+        aDisplayWaitAnimation );
+    
+    CleanupStack::PushL( dlg );
+    TParse parse;
+    parse.Set( KDirAndMuiuResFileName, &KDC_RESOURCE_FILES_DIR, NULL ); 
+    TFileName fileName( parse.FullName() );
+    dlg->iResources.OpenL( fileName );
+    dlg->PublishDialogL( aDialogIndex, aCategoryUid  );
+    CleanupStack::Pop( dlg );
+    if ( aDisplayWaitAnimation )
+        {
+        dlg->ExecuteLD( R_OPERATION_WAITANIMATION_DIALOG );//CAknNoteDialog::ENoTone,
+        }
+    else
+        {
+        dlg->ExecuteLD( R_OPERATION_PROGRESS_DIALOG );//CAknNoteDialog::ENoTone,
+        }
+    return dlg;
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::~CMsvWrappableProgressDialog
+//
+// ---------------------------------------------------------
+//
+CMsvWrappableProgressDialog::~CMsvWrappableProgressDialog()
+    {
+    MUIULOGGER_ENTERFN( "CMsvWrappableProgressDialog::~CMsvWrappableProgressDialog" );
+    
+    CleanBeforeFinish();
+    iResources.Close();
+    // iOperation not own by CMsvWrappableProgressDialog
+    MUIULOGGER_LEAVEFN( "CMsvWrappableProgressDialog::~CMsvWrappableProgressDialog" );
+    }
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SetOperationL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::SetOperationL( CMsvOperation* aOp )
+    {
+    MUIULOGGER_ENTERFN( "CMsvWrappableProgressDialog::SetOperationL" );
+    __ASSERT_DEBUG( aOp, Panic( EMuiuOpPrgNullOperation ) );
+    MUIULOGGER_WRITE_FORMAT( "iOperation: 0x%x", aOp );
+    iOperation = aOp;
+    if( !iTimer )
+        {
+        iTimer = CMsvRemoteOperationProgress::NewL( *this, 
+                                                    KPrgOpTimerPriority, 
+                                                    KRemoteOpProgressDefaultPeriod );
+        }
+    if( iSeed )
+        {
+        UpdateRemoteOpProgressL();
+        }
+    MUIULOGGER_LEAVEFN( "CMsvWrappableProgressDialog::SetOperationL" );
+    }
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SetTitleTextL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::SetTitleTextL( const TDesC& aText )
+    {
+    SetTextL( aText );
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SetTitleTextL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::SetTitleTextL( TInt aResource )
+    {
+    HBufC* text = iEikonEnv->AllocReadResourceLC( aResource );
+    SetTitleTextL( *text );
+    CleanupStack::PopAndDestroy( text ); // text
+    }
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SetCancel
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::SetCancel( TBool aAllowCancel )
+    {
+    iAllowCancel = aAllowCancel;
+    // Hide cancel button if there is one
+    MEikButtonGroup* btg = ButtonGroupContainer().ButtonGroup();
+    if ( btg )
+        {
+        if ( btg->CommandPos( EMuiuProgressDialogButtonCancelId ) != KErrNotFound )
+            {
+            MakePanelButtonVisible( EMuiuProgressDialogButtonCancelId, aAllowCancel );
+            }
+        else if ( btg->CommandPos( EAknSoftkeyCancel ) != KErrNotFound )
+            {
+            MakePanelButtonVisible( EAknSoftkeyCancel, aAllowCancel );
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SetAnimationL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::SetAnimationL(TInt /*aResourceId*/) const
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::CreateCustomControlL
+//
+// ---------------------------------------------------------
+//
+SEikControlInfo CMsvWrappableProgressDialog::CreateCustomControlL( TInt aControlType )
+    {
+    SEikControlInfo controlInfo;
+    controlInfo = CEikDialog::CreateCustomControlL( aControlType );
+    return controlInfo;
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::GetHelpContext
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    aContext = iHelpContext;
+    }
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::OkToExitL
+//
+// ---------------------------------------------------------
+//
+TBool CMsvWrappableProgressDialog::OkToExitL( TInt aButtonId )
+    {
+    if ( EAknSoftkeyDone == aButtonId )
+        {
+        return ETrue;
+        }
+    
+    if( ( aButtonId == EMuiuProgressDialogButtonCancelId ) && ( iOperation ) && ( iAllowCancel ) )
+        {
+        iOperation->Cancel();
+        iTimer->Cancel();           
+        }   
+    else if( ( aButtonId == EAknSoftkeyCancel ) && ( iOperation ) && ( iAllowCancel ) )
+        {       
+        iOperation->Cancel();
+        iTimer->Cancel();
+        if ( iProgressReporter )
+            {
+            iProgressReporter->SetCompleteWithExit( ETrue );
+            }
+        }
+    else
+        {
+        //Does nothing
+        }
+    return EFalse;  // Don't exit, CMsvProgressReporterOperation is responsible for destroying us.
+    }
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::PostLayoutDynInitL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::PostLayoutDynInitL()
+    {
+    UpdateRemoteOpProgressL();
+
+    if ( iImageIndex != KErrNotFound )
+        {
+        CFbsBitmap* bitmap;
+        CFbsBitmap* bitmapMask;
+        MAknsSkinInstance* skins = AknsUtils::SkinInstance();
+        CEikImage* image = new( ELeave ) CEikImage();
+        CleanupStack::PushL( image );
+        const TAknsItemID id = SkinItemId( iImageIndex);
+        TFileName avkonIconFileNameAndPath;
+        avkonIconFileNameAndPath = AknIconUtils::AvkonIconFileName();
+
+        AknsUtils::CreateIconL( skins, id, bitmap,
+           bitmapMask, avkonIconFileNameAndPath, iImageIndex, iImageIndex + 1 );
+        image->SetPicture( bitmap,bitmapMask );
+        SetImageL( image );
+        CleanupStack::Pop( image ); // dialog now has the ownership
+        }
+
+    if ( iDisplayWaitAnimation )
+        {
+        CAknNoteControl* noteControl = NoteControl();
+        if ( noteControl )
+            {
+            noteControl->StartAnimationL();
+            iWaitAnimationStarted = ETrue;
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::PreLayoutDynInitL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::PreLayoutDynInitL()
+    {
+    CEikProgressInfo* bar = GetProgressInfoL();
+    if( bar )
+        {
+        bar->MakeVisible( EFalse );
+        }
+
+    CAknProgressDialog::PreLayoutDynInitL();
+    if ( iDisplayWaitAnimation )
+        {
+        CAknNoteControl* noteControl = NoteControl();
+        if ( noteControl )
+            {
+            noteControl->SetAnimationL( R_QGN_GRAF_WAIT_BAR_ANIM );
+            }
+        }
+    
+    }
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::CleanBeforeFinish
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::CleanBeforeFinish()
+    {
+    if( iMtmUi )
+        {
+        iMtmStore.ReleaseMtmUi( iMtmUi->Type() );
+        iMtmUi = NULL;
+        }
+    if( iTimer )
+        {
+        iTimer->Cancel();
+        delete iTimer;
+        MUIULOGGER_WRITE_FORMAT( "iTimer 0x%x cancelled!", iTimer );
+        iTimer = NULL;
+        }
+    
+    MUIULOGGER_WRITE_FORMAT( "CleanBeforeFinish: iDialogDeletedFlag address 0x%x", 
+                              iDialogDeletedFlag );
+    if( iDialogDeletedFlag )
+        {
+        *iDialogDeletedFlag = ETrue;
+        MUIULOGGER_WRITE_FORMAT( "CleanBeforeFinish: iDialogDeletedFlag value %d", 
+                                  *iDialogDeletedFlag );
+        }
+    
+    iOperation = NULL;
+    iProgressReporter = NULL;
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::ProcessFinishedL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::ProcessFinishedL()
+    {
+    // iOperation is deleted by CMsvProgressReporterOperation but this dialog
+    // can be visible even after iOperation is deleted. That is why progress
+    // must not be updated anymore UpdateRemoteOpProgressL anymore so need to cancel
+    MUIULOGGER_ENTERFN( "CMsvWrappableProgressDialog::ProcessFinishedL" );
+    CleanBeforeFinish();
+
+    if( iState == EProcessOnDisplayOn )
+        {
+        iState = EProcessOnDisplayOnCanBeDismissed;
+        }
+
+    CAknProgressDialog::ProcessFinishedL();
+    MUIULOGGER_LEAVEFN( "CMsvWrappableProgressDialog::ProcessFinishedL" );
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::UpdateRemoteOpProgressL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::UpdateRemoteOpProgressL()
+    {
+    // Don't leave, not fatal.
+    TRAPD( ignore, DoUpdateRemoteOpProgressL() );
+    if( ignore )
+        {
+        ignore = KErrNone; //Prevent ARMV5 compilation varning
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::DoUpdateRemoteOpProgressL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::DoUpdateRemoteOpProgressL()
+    {
+    MUIULOGGER_ENTERFN( "CMsvWrappableProgressDialog::DoUpdateRemoteOpProgressL" );
+    if( iOperation )
+        {
+        MUIULOGGER_WRITE_FORMAT( "iOperation: 0x%x", iOperation );
+        MUIULOGGER_WRITE_TIMESTAMP( "Time: " );
+        if( !iOperation->IsActive() )
+            {
+            MUIULOGGER_LEAVEFN( "CMsvWrappableProgressDialog::DoUpdateRemoteOpProgressL" );
+            return;
+            }
+        
+        
+        TInt err = KErrNone;
+        TInt entryCount = 0;
+        TInt entriesDone = 0;
+        TInt currentEntrySize = -1;
+        TInt currentBytesTrans = -1;
+        TBuf<CBaseMtmUi::EProgressStringMaxLen> progressString;
+        
+        if( iOperation->Mtm() == KUidMsvLocalServiceMtm )
+            {
+            TMsvLocalOperationProgress localprogress=McliUtils::GetLocalProgressL( *iOperation );
+            TInt rid = 0;
+            const TBool oneItem = localprogress.iTotalNumberOfEntries == KOneItem;
+            currentEntrySize = entryCount = localprogress.iTotalNumberOfEntries;
+            currentBytesTrans = entriesDone = localprogress.iNumberCompleted;   
+            err = localprogress.iError;
+            switch ( localprogress.iType )
+                {
+                case TMsvLocalOperationProgress::ELocalMove:
+                    rid = 
+                    oneItem ? R_MUIU_LOCAL_PROGRESS_MOVING_1 : R_MUIU_LOCAL_PROGRESS_MOVING_X;
+                    break;
+                case TMsvLocalOperationProgress::ELocalDelete:
+                    {
+                    //If we are deleting one message or a folder, 
+                    //string is set in mceui.cpp HandleDeleteL()
+                    //because we don't have the visibility here wether 
+                    //we are deleting a message or a folder.
+                    //Here we take care only of multiple file deletion string.
+                    if( !oneItem )
+                        {
+                        rid = R_MUIU_LOCAL_PROGRESS_DELETING_X;
+                        }
+                    }
+                    break;
+                case TMsvLocalOperationProgress::ELocalCopy: // no local copy
+                case TMsvLocalOperationProgress::ELocalNew:  // display nothing currently
+                case TMsvLocalOperationProgress::ELocalChanged:
+                case TMsvLocalOperationProgress::ELocalNone:
+                default:
+                    ;
+#if defined (_DEBUG)
+                    Panic(EMuiuOpPrgBadLocalOpType);
+#endif
+                }
+            if ( rid )
+                {
+                StringLoader::Load( progressString, rid, iCoeEnv );
+                if ( entryCount > 1 )
+                    {
+                    TBuf<CBaseMtmUi::EProgressStringMaxLen> tempBuffer;
+                    StringLoader::Format( 
+                        tempBuffer, 
+                        progressString, 
+                        KMuiuLocalProgressEntriesDoneReplaceIndex, 
+                        entriesDone );
+                    StringLoader::Format( 
+                        progressString, 
+                        tempBuffer, 
+                        KMuiuLocalProgressTotalEntriesReplaceIndex, 
+                        entryCount );
+                    }
+                }
+            }
+        else
+            {
+            TBool dialogDeleted = EFalse;
+            iDialogDeletedFlag=&dialogDeleted;
+            const TPtrC8& progressBuf = iOperation->ProgressL();
+            if( dialogDeleted )
+                {
+                return; //  Everything has gone
+                }
+            iDialogDeletedFlag = NULL;
+            
+            err = iDecoder->DecodeProgress( progressBuf, 
+                                            progressString, 
+                                            entryCount, 
+                                            entriesDone, 
+                                            currentEntrySize, 
+                                            currentBytesTrans, 
+                                            ETrue );
+            }
+        
+        if( err == KErrNone )
+            {
+            if( !currentEntrySize )
+                {
+                currentEntrySize = entryCount;
+                currentBytesTrans = entriesDone;
+                }
+            if ( progressString.Length() )
+                {
+                UpdateLabelText( progressString );
+                }
+            MUIULOGGER_WRITE_FORMAT( "entryCount: %d", entryCount );
+            MUIULOGGER_WRITE_FORMAT( "entriesDone: %d", entriesDone );
+            MUIULOGGER_WRITE_FORMAT( "currentBytesTrans: %d", currentBytesTrans );
+            MUIULOGGER_WRITE_FORMAT( "currentEntrySize: %d", currentEntrySize );
+            UpdateProgressBarL( currentEntrySize, currentBytesTrans );
+            }
+        }
+        MUIULOGGER_LEAVEFN( "CMsvWrappableProgressDialog::DoUpdateRemoteOpProgressL" );
+    }
+    
+    
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::DecodeProgress
+//
+// ---------------------------------------------------------
+//
+TInt CMsvWrappableProgressDialog::DecodeProgress(const TDesC8& aProgress, 
+                TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString, 
+                TInt& aTotalEntryCount, TInt& aEntriesDone, 
+                TInt& aCurrentEntrySize, TInt& aCurrentBytesTrans, TBool /*aInternal*/)
+    {
+    TInt err = KErrNone;
+    TRAPD( leaveErr, err = DoDecodeProgressL( aProgress, 
+                                              aReturnString, 
+                                              aTotalEntryCount, 
+                                              aEntriesDone,
+                                              aCurrentEntrySize, 
+                                              aCurrentBytesTrans ) );
+    if( KErrNone == leaveErr )
+        {
+        return err;
+        }
+    return leaveErr;
+    }
+    
+    
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::DoDecodeProgressL
+//
+// ---------------------------------------------------------
+//
+TInt CMsvWrappableProgressDialog::DoDecodeProgressL( const TDesC8& aProgress, 
+        TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString, 
+        TInt& aTotalEntryCount, TInt& aEntriesDone, 
+        TInt& aCurrentEntrySize, TInt& aCurrentBytesTrans )
+    {
+    TUid opType = iOperation->Mtm();
+    if( !iMtmUi )
+        {
+        iMtmUi = &(iMtmStore.ClaimMtmUiL(opType));
+        }
+    else if( iMtmUi->Type() != opType )
+        {
+        iMtmStore.ReleaseMtmUi( iMtmUi->Type() );
+        iMtmUi = NULL;
+        iMtmUi = &( iMtmStore.ClaimMtmUiL(opType) );
+        }
+    else
+        {
+        //Does nothing
+        }
+    return iMtmUi->GetProgress( aProgress, aReturnString, aTotalEntryCount, aEntriesDone,
+        aCurrentEntrySize, aCurrentBytesTrans );
+    }
+    
+    
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::CMsvWrappableProgressDialog
+//
+// ---------------------------------------------------------
+//
+CMsvWrappableProgressDialog::CMsvWrappableProgressDialog( CMtmStore& aMtmStore, 
+                                                          TInt /*aNoteControlId*/, 
+                                                          TInt aImageIndex )
+    : CAknProgressDialog( NULL ),
+    iMtmStore( aMtmStore ), 
+    iResources( *iCoeEnv ), 
+    iAllowCancel( ETrue ), 
+    iSeed( ETrue ),
+    iImageIndex( aImageIndex )
+    {
+    iDecoder = this;  //  _We_ are the default progress decoder
+    }
+
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::CMsvWrappableProgressDialog
+//
+// ---------------------------------------------------------
+//
+CMsvWrappableProgressDialog::CMsvWrappableProgressDialog( CMtmStore& aMtmStore, 
+                                                          TInt /*aNoteControlId*/, 
+                                                          TInt aImageIndex, 
+                                                          TBool aProgressVisibilityDelayOff,
+                                                          TBool aDisplayWaitAnimation )
+    : CAknProgressDialog( NULL, aProgressVisibilityDelayOff ),
+    iMtmStore( aMtmStore ), 
+    iResources( *iCoeEnv ), 
+    iAllowCancel( ETrue ), 
+    iSeed( ETrue ),
+    iImageIndex( aImageIndex ),
+    iDisplayWaitAnimation( aDisplayWaitAnimation )
+    {
+    iDecoder = this;  //  _We_ are the default progress decoder
+    }
+    
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::UpdateLabelText
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::UpdateLabelText( const TDesC& aProgressString )
+    {
+    TRAPD( ignore, SetTextL( aProgressString ) );
+    if( ignore )
+        {
+        ignore = KErrNone; //Prevent ARMV5 compilation varning
+        }
+    }
+
+    
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::UpdateProgressBarL
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::UpdateProgressBarL( TInt aTotal, TInt aCurrent )
+    {
+    CEikProgressInfo* bar = GetProgressInfoL();
+    if( bar )
+        {
+        if( (aTotal <= 0 ) && (aCurrent <= 0 ) )
+            {
+            bar->MakeVisible( EFalse );       // hide the bar.
+            if ( iDisplayWaitAnimation  && !iWaitAnimationStarted )
+                {
+                // If not used iWaitAnimationStarted then start animation
+                // many times and animation is not shown properly
+                CAknNoteControl* noteControl = NoteControl();
+                if ( noteControl )
+                    {
+                    noteControl->StartAnimationL();
+                    iWaitAnimationStarted = ETrue;
+                    }
+                }
+            return;
+            }
+        if( !bar->IsVisible() )
+            {
+            if ( aTotal > 0 && aTotal == aCurrent )
+                {
+                return;
+                }
+            if ( iDisplayWaitAnimation )
+                {
+                CAknNoteControl* noteControl = NoteControl();
+                if ( noteControl )
+                    {
+                    noteControl->CancelAnimation();
+                    iWaitAnimationStarted = EFalse;
+                    }
+                }
+            bar->MakeVisible( ETrue );
+            }
+        bar->SetFinalValue( aTotal );
+        bar->SetAndDraw( aCurrent );
+        }
+    }
+
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SetVisibilityDelay
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::SetVisibilityDelay( TBool aDelay )
+    {
+    if ( aDelay ) 
+        { 
+        iVisibilityDelayOff = EFalse; 
+        } 
+    else 
+        { 
+        iVisibilityDelayOff = ETrue; 
+        MakeVisible( ETrue ); 
+        }
+    }
+
+
+    
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SetProgressReporter
+//
+// ---------------------------------------------------------
+//
+void CMsvWrappableProgressDialog::SetProgressReporter( 
+                                  CMsvProgressReporterOperation* aProgressReporter )
+    {
+    iProgressReporter = aProgressReporter;
+    }
+
+
+
+// ---------------------------------------------------------
+// CMsvWrappableProgressDialog::SkinItemId
+// 
+// ---------------------------------------------------------
+//
+const TAknsItemID CMsvWrappableProgressDialog::SkinItemId( const TInt aBitmapIndex ) const
+    {
+    switch ( aBitmapIndex )
+        {
+        case   EMbmAvkonQgn_note_erased:
+            return KAknsIIDQgnNoteErased;
+        case EMbmAvkonQgn_note_move:
+            return KAknsIIDQgnNoteMove;
+        case EMbmAvkonQgn_note_progress:
+            return KAknsIIDQgnNoteProgress;
+        case EMbmAvkonQgn_note_copy:
+            return KAknsIIDQgnNoteCopy;
+        case EMbmAvkonQgn_note_mail:
+            return KAknsIIDQgnNoteMail;
+        default: 
+            return KAknsIIDQgnNoteProgress;
+        }
+    }
+
+// End of file
+