/*
 * Xailer source code:
 *
 * SHFileOperation.prg
 * Dialogo para el manejo de archivos
 *
 * Copyright 2003, 2007 Jose Lalin
 * Copyright 2003, 2007 Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"
#include "ShellApi.api"


//--------------------------------------------------------------------------

CLASS XFileOperationDlg FROM TComponent

PUBLISHED:
   PROPERTY nAction           INIT foNONE ;
                              VALUES foNONE, foMOVE, foCOPY, foDELETE, foRENAME

   PROPERTY cText             INIT ""

   PROPERTY aFrom             INIT {}  WRITE INLINE ::FaFrom := ::SetFiles( .T., Value )
   PROPERTY aTo               INIT {}  WRITE INLINE ::FaTo   := ::SetFiles( .F., Value )

   PROPERTY lAllowUndo        INIT .F. WRITE INLINE ::FlAllowUndo     := ::SetFlag( FOF_ALLOWUNDO, Value )
   PROPERTY lFilesOnly        INIT .F. WRITE INLINE ::FlFilesOnly     := ::SetFlag( FOF_FILESONLY, Value )
   PROPERTY lNoConfirmation   INIT .F. WRITE INLINE ::FlNoConfirmation := ::SetFlag( FOF_NOCONFIRMATION, Value )
   PROPERTY lNoConfirmMkDir   INIT .F. WRITE INLINE ::FlNoConfirmMkDir := ::SetFlag( FOF_NOCONFIRMMKDIR, Value )
   PROPERTY lNoErrorUI        INIT .F. WRITE INLINE ::FlNoErrorUI     := ::SetFlag( FOF_NOERRORUI, Value )
   PROPERTY lAutoRename       INIT .F. WRITE INLINE ::FlAutoRename    := ::SetFlag( FOF_RENAMEONCOLLISION, Value )
   PROPERTY lSilent           INIT .F. WRITE INLINE ::FlSilent        := ::SetFlag( FOF_SILENT, Value )
   PROPERTY lSimpleProgress   INIT .F. WRITE INLINE ::FlSimpleProgress := ::SetFlag( FOF_SIMPLEPROGRESS, Value )
   PROPERTY lWantMapping      INIT .F. WRITE INLINE ::FlWantMapping   := ::SetFlag( FOF_WANTMAPPINGHANDLE, Value )
   PROPERTY lNoRecurse        INIT .F. WRITE INLINE ::SetFlag( FOF_NORECURSION, Value )
   PROPERTY lNoCopySecurityAttrib   INIT .F. WRITE INLINE ::SetFlag( FOF_NOCOPYSECURITYATTRIBS, Value )

   EVENT OnShow( oSender ) // --> Nil
   EVENT OnClose( oSender ) // --> Nil

PROTECTED:
   PROPERTY cFrom       INIT ""
   PROPERTY cTo         INIT ""
   PROPERTY lMultiDest  INIT .F. WRITE INLINE ::SetFlag( FOF_MULTIDESTFILES, Value )
   DATA nFlags          INIT 0

   METHOD SetFlag( nFlag, Value )
   METHOD SetFiles( lFromTo, Value )

PUBLIC:
   PROPERTY lAborted    INIT .F. READONLY
   PROPERTY aRenamed    INIT {} READONLY

   METHOD Run()   // --> lSuccess
   METHOD Execute()  EXTERN XFileOperationDlg_Run() // --> lSuccess

ENDCLASS

//--------------------------------------------------------------------------

METHOD SetFlag( nFlag, Value ) CLASS XFileOperationDlg

   IF Value
      ::nFlags := nOr( ::nFlags, nFlag )
   ELSE
      ::nFlags := nExclude( ::nFlags, nFlag )
   ENDIF

RETURN Value

//--------------------------------------------------------------------------

METHOD SetFiles( lFromTo, Value ) CLASS XFileOperationDlg

   LOCAL cFiles := ""

   IF ValType( Value ) == "C"
      Value := { Value }
   ENDIF

   IF ValType( Value ) == "A"
      AEval( Value, {|cFile| cFiles += cFile + Chr( 0 ) } )
      cFiles += Chr( 0 )

      IF lFromTo
         ::cFrom := cFiles
      ELSE
         ::cTo   := cFiles
         ::lMultiDest := Len( Value ) > 1
      ENDIF
   ENDIF

RETURN Value

//--------------------------------------------------------------------------
