/*
 * Fichero: MemoMod.prg
 * Descripción: Clase TMemoMod

 * Copyright 2020 Ignacio Ortiz de Zúñiga
 * Copyright 2020 https://Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"

#define SIDE_MARGIN  4

//------------------------------------------------------------------------------

CLASS XMemoMod FROM TMemo

PUBLISHED:
   PROPERTY nClrPane          INIT clWindow
   PROPERTY nClrPaneFocus     INIT clWindow
   PROPERTY nClrTextFocus     INIT clWindowText WRITE INLINE ::SetColorFocus( Value, ::nClrPaneFocus )       EDITOR PE_Color
   PROPERTY nClrPaneDisabled  INIT 0xCCCCCC     WRITE INLINE ::SetColorDisabled( ::nClrTextDisabled, Value ) EDITOR PE_Color
   PROPERTY nClrTextDisabled  INIT 0x7A7A7A     WRITE INLINE ::SetColorDisabled( Value, ::nClrPaneDisabled ) EDITOR PE_Color
   PROPERTY nClrColorization  INIT 0            WRITE INLINE ( ::FnClrColorization := Value, ::Refresh() )   EDITOR PE_Color
   PROPERTY lModBorder        INIT .T.

PUBLIC:
   METHOD Create( oParent ) CONSTRUCTOR

PROTECTED:
   PROPERTY lBorder        INIT .F.
   DATA nMargin            INIT SIDE_MARGIN
   DATA lIsHot             INIT .F.

   METHOD RedrawNonClient() INLINE RedrawWindow( ::Handle, 0, 0, nOr( RDW_FRAME , RDW_INVALIDATE ) )

RESERVED:
   METHOD Refresh( lRedraw )
   METHOD WMNCCalcSize()
   METHOD WMMouseMove( nWParam, nLParam )
   METHOD WMMouseLeave() INLINE IIf( ::lIsHot, ( ::lIsHot := .F., ::RedrawNonClient() ), )
   METHOD WMNCPaint( nWParam, nLParam )

END CLASS

//------------------------------------------------------------------------------

METHOD Create( oParent ) CLASS XMemoMod

   ::Super:Create( oParent )

RETURN Self

//------------------------------------------------------------------------------

METHOD Refresh( lRedraw ) CLASS XMemoMod

   DEFAULT lRedraw TO .F.

   IF !Empty( ::Handle )
      IF lRedraw .AND. ::lRedraw
         SetWindowPos( ::Handle, 0, 0, 0, 0, 0, nOr( SWP_DRAWFRAME, SWP_NOMOVE, SWP_NOSIZE, SWP_NOACTIVATE,SWP_NOZORDER ) )
      ELSE
         ::RedrawNonClient()
      ENDIF
   ENDIF

RETURN ::Super:Refresh( lRedraw )

