/*
 * Xailer source code:
 *
 * ProgressDlg.prg
 * Clase TProgressDlg()
 *
 * Copyright 2003, 2007 Jose Lalin
 * Copyright 2003, 2007 Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"

#define PROGDLG_NORMAL           0x00000000     // default normal progress dlg behavior
#define PROGDLG_MODAL            0x00000001     // the dialog is modal to its hwndParent (default is modeless)
#define PROGDLG_AUTOTIME         0x00000002     // automatically updates the "Line3" text with the "time remaining" (you cant call SetLine3 if you passs this!)
#define PROGDLG_NOTIME           0x00000004     // we dont show the "time remaining" if this is set. We need this if dwTotal < dwCompleted for sparse files
#define PROGDLG_NOMINIMIZE       0x00000008     // Do not have a minimize button in the caption bar.
#define PROGDLG_NOPROGRESSBAR    0x00000010     // Don't display the progress bar
#define PDTIMER_RESET            0x00000001     // Reset the timer so the progress will be calculated from now until the first ::SetProgress() is called so


//--------------------------------------------------------------------------

CLASS XProgressDlg FROM TComponent

PUBLISHED:
   PROPERTY nValue         INIT 0   WRITE INLINE ( ::FnValue := Value, ::SetProgress() )
   PROPERTY nMax           INIT 100

   PROPERTY nResourceAVI   INIT aviNONE

   PROPERTY nCommonAVI     INIT aviNONE ;
                           VALUES   aviNONE, aviFIND, aviFINDFILES, ;
                                    aviFINDCOMPUTER, aviCOPYFILES, ;
                                    aviCOPYFILE, aviRECYCLEFILE, ;
                                    aviDELETEFILE, aviXPINTERNETSEARCH, ;
                                    aviXPDOWNLOADFILE

   PROPERTY cTitle         INIT ""
   PROPERTY cText          INIT ""
   PROPERTY cMessage       INIT ""

   PROPERTY cMessageCancel INIT ""

   PROPERTY lNoMinimize    INIT .F. WRITE INLINE ::FlNoMinimize := Value, ::SetFlag( PROGDLG_NOMINIMIZE, Value )
   PROPERTY lAutoTime      INIT .F. WRITE INLINE ::FlAutoTime := Value, ::SetFlag( PROGDLG_AUTOTIME, Value )
   PROPERTY lNoTime        INIT .F. WRITE INLINE ::FlNoTime := Value, ::SetFlag( PROGDLG_NOTIME, Value )
   PROPERTY lNoProgress    INIT .F. WRITE INLINE ::FlNoProgress := Value, ::SetFlag( PROGDLG_NOPROGRESSBAR, Value )

   PROPERTY lModal         INIT .T. WRITE INLINE ::FlModal := Value, ::SetFlag( PROGDLG_MODAL, Value )

   PROPERTY lNoCancel      INIT .F.
   PROPERTY lCompactPath   INIT .F.

   PROPERTY lCenter        INIT .F.

   EVENT OnShow( oSender ) // --> Nil
   EVENT OnClose( oSender ) // --> Nil

   EVENT OnCancel( oSender ) // --> Nil
   EVENT OnReset( oSender ) // --> Nil

PUBLIC:
   DATA lInitialized    INIT .F. READONLY

   METHOD Destroy()  // --> lSuccess

   METHOD Execute() // --> lSuccess
   METHOD Run()      EXTERN XProgressDlg_Execute() // --> lSuccess
   METHOD Stop() // --> lSuccess

   METHOD Reset() // --> lSuccess
   METHOD IsCancel() // --> lSuccess

PROTECTED:
   DATA nFlags       INIT PROGDLG_MODAL
   DATA Handle       INIT 0

   METHOD SetProgress()
   METHOD SetFlag( nFlag, Value )

ENDCLASS

//--------------------------------------------------------------------------

METHOD SetFlag( nFlag, Value ) CLASS XProgressDlg

   IF Value
      ::nFlags := nOr( ::nFlags, nFlag )
   ELSE
      ::nFlags := nExclude( ::nFlags, nFlag )
   ENDIF

RETURN Value

//--------------------------------------------------------------------------
