/*
 * Xailer source code:
 *
 * PrintDlg.prg
 * Clase TPrintDlg()
 *
 * Copyright 2003, 2007 Jose Lalin
 * Copyright 2003, 2007 Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"
#include "CommDlg.api"


//--------------------------------------------------------------------------

CLASS XPrintDlg FROM TComponent

PUBLISHED:
   PROPERTY nCopies           INIT 1
   PROPERTY nFromPage         INIT 0
   PROPERTY nToPage           INIT 0
   PROPERTY nMinPage          INIT 0
   PROPERTY nMaxPage          INIT 0

   PROPERTY lAllPages         INIT .T. READ  INLINE ::GetFlag( PD_ALLPAGES ) ;
                                       WRITE INLINE ::FlAllPages := ::SetFlag( PD_ALLPAGES, Value )
   PROPERTY lCollate          INIT .F. READ  INLINE ::GetFlag( PD_COLLATE ) ;
                                       WRITE INLINE ::FlCollate  := ::SetFlag( PD_COLLATE, Value )
   PROPERTY lHidePrintToFile  INIT .F. READ  INLINE ::GetFlag( PD_HIDEPRINTTOFILE ) ;
                                       WRITE INLINE ::FlHidePrintToFile := ::SetFlag( PD_HIDEPRINTTOFILE, Value )
   PROPERTY lNoPageNums       INIT .F. READ  INLINE ::GetFlag( PD_NOPAGENUMS ) ;
                                       WRITE INLINE ::FlNoPageNums := ::SetFlag( PD_NOPAGENUMS, Value )
   PROPERTY lNoSelection      INIT .F. READ  INLINE ::GetFlag( PD_NOSELECTION ) ;
                                       WRITE INLINE ::FlNoSelection := ::SetFlag( PD_NOSELECTION, Value )
   PROPERTY lNoWarning        INIT .F. READ  INLINE ::GetFlag( PD_NOWARNING ) ;
                                       WRITE INLINE ::FlNoWarning := ::SetFlag( PD_NOWARNING, Value )
   PROPERTY lPageNums         INIT .F. READ  INLINE ::GetFlag( PD_PAGENUMS ) ;
                                       WRITE INLINE ::FlPageNums := ::SetFlag( PD_PAGENUMS, Value )
   PROPERTY lPrintSetup       INIT .F. READ  INLINE ::GetFlag( PD_PRINTSETUP ) ;
                                       WRITE INLINE ::FlPrintSetup := ::SetFlag( PD_PRINTSETUP, Value )
   PROPERTY lPrintToFile      INIT .F. READ  INLINE ::GetFlag( PD_PRINTTOFILE ) ;
                                       WRITE INLINE ::FlPrintToFile := ::SetFlag( PD_PRINTTOFILE, Value )
   PROPERTY lSelection        INIT .F. READ  INLINE ::GetFlag( PD_SELECTION ) ;
                                       WRITE INLINE ::FlSelection := ::SetFlag( PD_SELECTION, Value )
   PROPERTY lShowHelp         INIT .T. READ  INLINE ::GetFlag( PD_SHOWHELP ) ;
                                       WRITE INLINE ::FlShowHelp := ::SetFlag( PD_SHOWHELP, Value )
   PROPERTY lReturnDC         INIT .F. READ  INLINE ::GetFlag( PD_RETURNDC ) ;
                                       WRITE INLINE ::FlReturnDC := ::SetFlag( PD_RETURNDC, Value )
   PROPERTY lReturnIC         INIT .F. READ  INLINE ::GetFlag( PD_RETURNIC ) ;
                                       WRITE INLINE ::FlReturnIC := ::SetFlag( PD_RETURNIC, Value )

   PROPERTY lCenter           INIT .F.

   PROPERTY HelpId            EDITOR PE_StringOrNil

   EVENT OnShow( oSender ) // --> Nil
   EVENT OnClose( oSender ) // --> Nil
   EVENT OnHelp( oSender, HelpId, nPosX, nPosY ) // --> Nil

PROTECTED:
   DATA nFlags          INIT nOr( PD_ALLPAGES, PD_SHOWHELP )

   METHOD GetFlag( nFlag )
   METHOD SetFlag( nFlag, Value )

PUBLIC:
   PROPERTY hDC         INIT  0
   DATA nLastError      INIT  0 READONLY

   METHOD Create( oForm ) // --> Self
   METHOD Run()         EXTERN XPrintDlg_PrinterSetup() // --> lSuccess
   METHOD Execute()     EXTERN XPrintDlg_PrinterSetup() // --> lSuccess

ENDCLASS

//--------------------------------------------------------------------------

METHOD Create( oForm ) CLASS XPrintDlg

   ::Super:Create( oForm )

   ::nCopies := Printer:nCopies

RETURN Self

//--------------------------------------------------------------------------

METHOD GetFlag( nFlag ) CLASS XPrintDlg

RETURN lAnd( ::nFlags, nFlag )

//--------------------------------------------------------------------------

METHOD SetFlag( nFlag, Value ) CLASS XPrintDlg

   IF Value
      ::nFlags := nOr( ::nFlags, nFlag )
   ELSE
      ::nFlags := nExclude( ::nFlags, nFlag )
   ENDIF

RETURN Value

//--------------------------------------------------------------------------

FUNCTION PrintDlg( OPTIONAL oParent, OPTIONAL BYREF nFromPage, OPTIONAL BYREF nToPage, OPTIONAL BYREF nCopies, OPTIONAL BYREF lCollate ) // --> lSuccess

   LOCAL oPD := TPrintDlg():Create( oParent )
   LOCAL lOk

   UPDATE oPD:nFromPage TO nFromPage
   UPDATE oPD:nToPage   TO nToPage
   UPDATE oPD:nCopies   TO nCopies
   UPDATE oPD:lCollate  TO lCollate

   lOk := oPD:Run()

   IF lOk
      nFromPage := oPD:nFromPage
      nToPage   := oPD:nToPage
      nCopies   := oPD:nCopies
      lCollate  := oPD:lCollate
   ENDIF

RETURN lOk

//--------------------------------------------------------------------------
