epoc32/include/mw/aknprogressdialog.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     1 /*
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description: 
    15 *       CAknProgressDialog should be used when the progress of the process
    16 *       can be traced and the length of the process is known. If that's not
    17 *       the case please use CAknWaitDialog.
    18 *
    19 */
    20 
    21 
    22 #ifndef __AKN_PROGRESS_DIALOG__
    23 #define __AKN_PROGRESS_DIALOG__
    24 
    25 #include <aknnotedialog.h>
    26 #include <aknprogresstimer.h>
    27 
    28 class CEikProgressInfo;
    29 
    30 /**
    31  * MProgressDialogCallBack
    32  *   Inherit from this class and implement DialogDismissed to
    33  *   get a callback when/if a dialog is dismissed.
    34  */
    35 class MProgressDialogCallback
    36     {
    37     public:
    38         /**
    39         * Callback method
    40         *   Gets called when a dialog is dismissed.
    41         */
    42         virtual void DialogDismissedL( TInt aButtonId ) = 0;
    43     };
    44 
    45 
    46 /**
    47 * CAknProgressDialog
    48 *
    49 * A note dialog with a timer. Display the note only if the process is at least 1 second long
    50 * in order to avoid a note quickly flashing on the screen. Display the note for at least 1.5
    51 * seconds (even if the client process is shorter that this). The client can specify an initial
    52 * delay when displaying the note. Timer events are used for displaying and dismissing the dialog.
    53 * The client can set the progress by specifying the values in the constructors provided.
    54 *
    55 * Usage:<UL> 
    56 *   <LI> Fixed process length
    57 *      
    58 *        iProgressDialog = new(ELeave)CAknProgressDialog(model->FinalValue(),model->Increment(),
    59 *                                model->Interval(),
    60 *                                (REINTERPRET_CAST(CEikDialog**,&iProgressDialog)));
    61 *        iProgressDialog->ExecuteLD(R_PROGRESS_NOTE);
    62 *   </LI>
    63 *
    64 *   <LI> Variable process length
    65 *      
    66 *        iProgressDialog = new(ELeave)CAknProgressDialog(
    67 *                                (REINTERPRET_CAST(CEikDialog**,&iProgressDialog)));
    68 *        iProgressInfo = iProgressDialog->GetProgressInfoL();
    69 *        iProgressInfo->SetFinalValue(model->FinalValue());
    70 *        iProgressDialog->ExecuteLD(R_PROGRESS_NOTE);
    71 * 
    72 *        // Incrementing progress of the process:
    73 *        iProgressInfo->IncrementAndDraw(model->Increment());
    74 * 
    75 *        // Process finished
    76 *        iProgressDialog->ProcessFinishedL(); // deletes the dialog
    77 *   </LI> 
    78 *   <LI> Variable process length, modal dialog
    79 *      
    80 *        Set following flags in resources: EEikDialogFlagWait and EAknProgressNoteFlags
    81 *
    82 *        iProgressDialog = new(ELeave)CAknProgressDialog(
    83 *                                (REINTERPRET_CAST(CEikDialog**,&iProgressDialog)));
    84 *        iProgressInfo = iProgressDialog->GetProgressInfoL();
    85 *        iProgressInfo->SetFinalValue(model->FinalValue());
    86 *        iProgressInfo->SetTone( CAknNoteDialog::EConfirmationTone );
    87 *        iProgressDialog->ExecuteLD(R_PROGRESS_NOTE);
    88 * 
    89 *        // Incrementing progress of the process:
    90 *        iProgressInfo->IncrementAndDraw(model->Increment());
    91 * 
    92 *        // Process finished
    93 *        iProgressDialog->ProcessFinishedL(); // deletes the dialog
    94 *
    95 *   <LI> Setting label dynamically
    96 *     
    97 *        iProgressDialog = new(ELeave)CAknProgressDialog(
    98 *                                (REINTERPRET_CAST(CEikDialog**,&iProgressDialog)));
    99 *        iProgressDialog->PrepareLC(R_PROGRESS_NOTE);
   100 *        iProgressDialog->SetTextL(_L("Hello AVKON!"));
   101 *        iProgressDialog->RunLD();
   102 *
   103 *    </LI></UL>
   104 * <P>Callback:
   105 *       To get a callback when/if the dialog has been dismissed
   106 *       use SetCallBack API:
   107 *           With class which uses a progressdialog:
   108 *           - Inherit from pure virtual class MProgressDialogCallback
   109 *           - Implement DialogDismissedL
   110 *           - Call CAknProgressDialog->SetCallback(this);
   111 *       
   112 *       Or make your dialog modal. If the dialog is used as a modal, RunLD
   113 *       returns 0 if the dialog is dismissed and EAknSoftkeyDone if not.
   114 * </P>
   115 * <P>Resource flags:
   116 *        -   Always set EEikDialogFlagNotifyEsc. (or use preset avkon
   117 *                   dialog resource flag, i.e. EAknProgressNoteFlags).
   118 *        -   To make a dialog modal use EEikDialogFlagWait
   119 * </P>
   120 * <P>Note! If aVisibilityDelayOff is set to ETrue in constructor the dialog
   121 *   will be visible immediality. This should only be used in cases where
   122 *   the process lasts ALWAYS atleast 1.5 seconds.
   123 * </P>
   124 *  <P> For comprehensive example, see \Akndemo\Notesapp </P>
   125 */
   126 
   127 class CAknProgressDialog : public CAknNoteDialog  
   128 {
   129 public:
   130     /**
   131     * Constructor
   132     *   Use this when the length (in time) of the process is known.
   133     * @param    aFinalValue     Final value for the process
   134     * @param    anIncrement     Increment of the process
   135     * @param    anInterval      Interval of the process
   136     * @param    aSelfPtr        Pointer to itself. The pointer must be
   137     *                           valid when the dialog is dismissed and it 
   138 	*                           must not be on the stack.
   139     */
   140 	IMPORT_C CAknProgressDialog(TInt aFinalValue,TInt anIncrement,TInt anInterval, CEikDialog** aSelfPtr);
   141 
   142     /**
   143     * Constructor
   144     *   Use this if the length of the process is unknown but the progress
   145     *   can be calculated.
   146     * @param    aSelfPtr        Pointer to itself. The pointer must be
   147     *                           valid when the dialog is dismissed and it
   148 	*                           must not be on the stack.
   149     */
   150 	IMPORT_C CAknProgressDialog(CEikDialog** aSelfPtr);
   151 
   152     /**
   153     * Constructor
   154     *   Use this if the length of the process is unknown but the progress
   155     *   can be calculated.
   156     * @param    aSelfPtr        Pointer to itself. The pointer must be
   157     *                           valid when the dialog is dismissed and it must
   158 	*                           not be on the stack.
   159     * @param    aVisibilityDelayOff If set ETrue the dialog will be visible
   160     *                                   immediality. Use only when the length of
   161     *                                   the process is ALWAYS over 1.5 seconds.
   162     */
   163 	IMPORT_C CAknProgressDialog(CEikDialog** aSelfPtr,TBool aVisibilityDelayOff);
   164 
   165     /**
   166     * Destructor
   167     */
   168 	IMPORT_C virtual ~CAknProgressDialog();
   169 
   170 	/**
   171     * Executes the dialog (part of dialog framework).
   172 	* PrepareLC needs to be called before this. 
   173     */
   174 	IMPORT_C virtual TInt RunLD();
   175 
   176     /**
   177     *   Get a handle to the progress bar.
   178     */
   179 	IMPORT_C CEikProgressInfo* GetProgressInfoL();
   180 
   181     /**
   182     *  Handle key events (part of CONE framework)
   183     */
   184     IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
   185 
   186     /**
   187     * This must be called when the dialog must be dismissed. 
   188 	* It stops the timer and deletes the dialog.
   189     */
   190     IMPORT_C void ProcessFinishedL();
   191 
   192     /**
   193     * This callback notifies the client when the dialog is dismissed.
   194     * @param    aCallBack   A pointer to a class that inherits from
   195     *                       MProgressDialogCallback.
   196     */
   197     IMPORT_C void SetCallback( MProgressDialogCallback* aCallback );
   198     
   199      /**
   200 	 * HandlePointerEventL processes pointer events directed at the 
   201 	 * ProgressDialog.
   202 	 * @param aPointerEvent Pointerevent to be handled.
   203 	 */
   204     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
   205 
   206 protected:
   207     /**
   208     * Enumeration to handle progress states
   209     */
   210     enum TProgressDialogState
   211         {
   212         EProcessOnDisplayOff, /// cannot be dismissed
   213         EProcessOnDisplayOn, /// cannot be dismissed
   214         EProcessOffDisplayOff, /// can be dismissed
   215         EProcessOffDisplayOn, /// cannot be dismissed
   216         EProcessOffDisplayOnCanBeDismissed, /// can be dismissed
   217         EProcessOnDisplayOnCanBeDismissed /// can be dismissed when process ends
   218         };
   219 
   220     /**
   221     *   Initializes dialog before layout is executed (part of dialog framework).
   222     */
   223     IMPORT_C void PreLayoutDynInitL(void);
   224 
   225     /**
   226     * Timer callback.
   227 	*
   228     * @param aPtr   Pointer to this
   229     */
   230     static TInt DialogTimerCallback(TAny* aPtr);
   231 
   232     /**
   233     *   Handles timer events.
   234     */
   235     TInt DialogTimerEvent();
   236 
   237     /**
   238     * Called by the dialog framework, returns true if the 
   239 	* dialog can exit, false otherwise.
   240 	*
   241     * @param aButtonId  Id of the softkey which was pressed
   242     * @return           ETrue if the dialog can exit, false otherwise.
   243     */
   244     IMPORT_C TBool OkToExitL(TInt aButtonId);
   245 
   246 private:
   247     /**
   248     * From CAknControl
   249     */
   250     IMPORT_C void* ExtensionInterface( TUid aInterface );
   251 
   252 protected:
   253     /// Timer to handle dialog's visibility and existence
   254     CPeriodic* iProgressDialogTimer;
   255     /// State to handle dialog's visibility and existence
   256     TProgressDialogState iState;
   257     /// Contains progress timer's variables
   258     TTimerModel iModel;
   259     /// Callback pointer
   260     MProgressDialogCallback* iCallback;
   261     /// Boolean to declare whether the visibility delay should
   262     ///  be on or off.
   263     TBool iVisibilityDelayOff;
   264 
   265 private:
   266     // Boolean to declare whether the progress is handled by
   267     //  an internal timer
   268 	TBool iInternalTimerControl;
   269     // Timer to handle progress if iInternalTimerControl is
   270     //  set to ETrue
   271     CAknProgressTimer* iProgressTimer;
   272 
   273 	class CCancelWhileHidden;
   274 	CCancelWhileHidden* iCancelWhileHidden;
   275 	
   276     TInt iSpare[3];
   277 
   278 private: 
   279 	IMPORT_C virtual void CEikDialog_Reserved_1();
   280 	IMPORT_C virtual void CEikDialog_Reserved_2();	
   281 private: 
   282 	IMPORT_C virtual void CAknNoteDialog_Reserved();
   283 };
   284 
   285 #endif