ximpfw/tsrc/tsrcutils/eunitcommon/cglobalwaitingnote.h
changeset 0 e6b17d312c8b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ximpfw/tsrc/tsrcutils/eunitcommon/cglobalwaitingnote.h	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2006 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: XIMP Framework Test Code 
+*
+*/
+
+#ifndef CGLOBALWAITINGNOTE_H
+#define CGLOBALWAITINGNOTE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <aknglobalprogressdialog.h>
+#include <avkon.rsg>
+
+
+
+/**
+ * Global waiting message for XIMP Framework Eunit tests.
+ */
+class CGlobalWaitingNote : public CActive
+    {
+    public:
+
+        /**
+         * Shows the waiting message with progress bar.
+         *
+         * @param aMessage The message text to show.
+         * @param aTotalShowTime The show time in milliseconds.
+         * @param aProgressSteps How many progress steps the progress bar should have.
+         */
+        inline static void ShowMsgL( const TDesC& aMessage,
+                                     TInt aTotalShowTime,
+                                     TInt aProgressSteps );
+
+
+    private:
+
+        inline CGlobalWaitingNote();
+        inline ~CGlobalWaitingNote();
+        inline void ConstructL();
+
+        inline void DoShowMsgL( const TDesC& aMessage,
+                                TInt aTotalShowTime,
+                                TInt aProgressSteps );
+
+        inline static TInt ProgressTickCb( TAny* aSelf );
+        inline TInt HandleProgressTick();
+
+        inline void RunL();
+        inline TInt RunError( TInt aError );
+        inline void DoCancel();
+
+
+
+    private: //data
+
+        //OWN: Active Scheduler wait
+        CActiveSchedulerWait    iWait;
+
+        //OWN: Progress ticker
+        CPeriodic*  iProgressTicker;
+
+        //OWN: The global note.
+        CAknGlobalProgressDialog*   iGlobalNote;
+
+        //OWN: Total show time
+        TInt iTotalShowTime;
+
+        //OWN: Progress interval
+        TInt iProgressInterval;
+
+        //OWN: Current progress value
+        TInt iCurrentProgress;
+    };
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// CGlobalWaitingNote public functions
+// -----------------------------------------------------------------------------
+//
+void CGlobalWaitingNote::ShowMsgL( const TDesC& aMessage,
+                                   TInt aTotalShowTime,
+                                   TInt aProgressSteps )
+    {
+    CGlobalWaitingNote* self = new (ELeave) CGlobalWaitingNote;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    self->DoShowMsgL( aMessage,
+                      aTotalShowTime,
+                      aProgressSteps );
+
+    CleanupStack::PopAndDestroy();
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CGlobalWaitingNote private functions
+// -----------------------------------------------------------------------------
+//
+CGlobalWaitingNote::CGlobalWaitingNote()
+    : CActive( CActive::EPriorityStandard )
+    {
+    }
+
+
+CGlobalWaitingNote::~CGlobalWaitingNote()
+    {
+    delete iProgressTicker;
+    delete iGlobalNote;
+    }
+
+
+void CGlobalWaitingNote::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    iGlobalNote = CAknGlobalProgressDialog::NewL();
+
+    iProgressTicker = CPeriodic::NewL( CActive::EPriorityStandard );
+    }
+
+
+
+void CGlobalWaitingNote::DoShowMsgL( const TDesC& aMessage,
+                                     TInt aTotalShowTime,
+                                     TInt aProgressSteps )
+    {
+    iGlobalNote->ShowProgressDialogL( iStatus,
+                                      aMessage,
+                                      R_AVKON_SOFTKEYS_OK_EMPTY,
+                                      aTotalShowTime );
+    SetActive();
+
+    iProgressInterval =  aTotalShowTime / aProgressSteps;
+    iTotalShowTime = aTotalShowTime;
+    iCurrentProgress = 0;
+
+    TCallBack progressCb( CGlobalWaitingNote::ProgressTickCb, this );
+    iProgressTicker->Start( iProgressInterval, iProgressInterval, progressCb );
+
+    iWait.Start();
+    }
+
+
+TInt CGlobalWaitingNote::ProgressTickCb( TAny* aSelf )
+    {
+    return ( (CGlobalWaitingNote*) aSelf )->HandleProgressTick();
+    }
+
+
+TInt CGlobalWaitingNote::HandleProgressTick()
+    {
+    if( iCurrentProgress < iTotalShowTime )
+        {
+        iCurrentProgress += iProgressInterval;
+        iGlobalNote->UpdateProgressDialog( iCurrentProgress, iTotalShowTime );
+        }
+
+    else
+        {
+        iGlobalNote->ProcessFinished();
+        }
+
+    return KErrNone;
+    }
+
+
+
+void CGlobalWaitingNote::RunL()
+    {
+    iWait.AsyncStop();
+    }
+
+
+TInt CGlobalWaitingNote::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+
+void CGlobalWaitingNote::DoCancel()
+    {
+    iGlobalNote->ProcessFinished();
+    }
+
+#endif // CGLOBALWAITINGNOTE_H
+
+// end of file
+
+
+