/*
 * Xailer source code:
 *
 * PageDlg.prg
 * Clase TPageSetupDlg()
 *
 * Copyright 2003, 2007 Jose Lalin
 * Copyright 2003, 2007 Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"
#include "CommDlg.api"


//--------------------------------------------------------------------------

CLASS XPageSetupDlg FROM TComponent

PUBLISHED:
   PROPERTY aPaperSize     INIT { 0, 0 }        EDITOR PE_NumberList
   PROPERTY aMargins       INIT { 0, 0, 0, 0 }  EDITOR PE_Margins
   PROPERTY aMinMargins    INIT { 0, 0, 0, 0 }  EDITOR PE_Margins

   PROPERTY lInInches      INIT .F. WRITE INLINE ::FlInInches := ::SetFlag( PSD_INTHOUSANDTHSOFINCHES, Value )
   PROPERTY lDefMinMargins INIT .F. WRITE INLINE ::FlDefMinMargins := ::SetFlag( PSD_DEFAULTMINMARGINS, Value )
   PROPERTY lMinMargins    INIT .F. WRITE INLINE ::FlMinMargins := ::SetFlag( PSD_MINMARGINS, Value )
   PROPERTY lMargins       INIT .T. WRITE INLINE ::FlMargins := ::SetFlag( PSD_MARGINS, Value )
   PROPERTY lNoMargins     INIT .F. WRITE INLINE ::FlNoMargins := ::SetFlag( PSD_DISABLEMARGINS, Value )
   PROPERTY lNoPrinter     INIT .F. WRITE INLINE ::FlNoPrinter := ::SetFlag( PSD_DISABLEPRINTER, Value )
   PROPERTY lNoWarning     INIT .F. WRITE INLINE ::FlNoWarning := ::SetFlag( PSD_NOWARNING, Value )
   PROPERTY lNoOrientation INIT .F. WRITE INLINE ::FlNoOrientation := ::SetFlag( PSD_DISABLEORIENTATION, Value )
   PROPERTY lNoPaper       INIT .F. WRITE INLINE ::FlNoPaper := ::SetFlag( PSD_DISABLEPAPER, Value )
   PROPERTY lShowHelp      INIT .T. WRITE INLINE ::FlShowHelp := ::SetFlag( PSD_SHOWHELP, Value )
   PROPERTY lNoPageDraw    INIT .F. WRITE INLINE ::FlNoPageDraw := ::SetFlag( PSD_DISABLEPAGEPAINTING, Value )
   PROPERTY lNoNetwork     INIT .F. WRITE INLINE ::FlNoNetwork := ::SetFlag( PSD_NONETWORKBUTTON, 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( PSD_MARGINS, PSD_SHOWHELP )

   METHOD SetFlag( nFlag, Value )

PUBLIC:
   DATA nLastError         INIT  0  READONLY

   METHOD Run() // --> lSuccess
   METHOD Execute()  EXTERN XPageSetupDlg_Run() // --> lSuccess

ENDCLASS

//--------------------------------------------------------------------------

METHOD SetFlag( nFlag, Value ) CLASS XPageSetupDlg

   IF Value
      ::nFlags := nOr( ::nFlags, nFlag )
   ELSE
      ::nFlags := nExclude( ::nFlags, nFlag )
   ENDIF

RETURN Value

//--------------------------------------------------------------------------

FUNCTION PageSetupDlg( OPTIONAL oParent, OPTIONAL BYREF aPaperSize, OPTIONAL BYREF aMargins, OPTIONAL lInInches ) // --> lSuccess

   LOCAL oPSD := TPageSetupDlg():Create( oParent )
   LOCAL lOk

   UPDATE oPSD:aPaperSize TO aPaperSize
   UPDATE oPSD:aMargins   TO aMargins
   UPDATE oPSD:lInInches  TO lInInches

   lOk := oPSD:Run()

   IF lOk
      aPaperSize := oPSD:aPaperSize
      aMargins   := oPSD:aMargins
   ENDIF

RETURN lOk

//--------------------------------------------------------------------------
