/* * DBMemo.prg * Clase TDBMemoMod() * * Copyright 2020 Ignacio Ortiz de Zúñiga * Copyright 2020 https://Xailer.com * All rights reserved * */ #include "Xailer.ch" //-------------------------------------------------------------------------- CLASS XDBMemoMod FROM TMemoMod PUBLISHED: PROPERTY oDataSet WRITE SetDataSet EDITOR PE_Component AS TDataSet PROPERTY oDataField WRITE SetFieldObject EDITOR PE_DataField AS TDataField PROPERTY lEditable INIT .T. PROPERTY lAutoSave INIT .T. PUBLIC: PROPERTY Value PROPERTY lReadOnly INIT .T. WRITE METHOD SetReadOnly METHOD Refresh( lValue ) // --> lResult METHOD Change() // --> Nil METHOD DbLinked() INLINE ( ValType( ::oDataField ) == "O" ) RESERVED: METHOD SetDataSet( Value ) EXTERN DC_SetDataSet METHOD DCSetFieldObject( oField ) EXTERN DC_SetFieldObject METHOD ResetDataField() EXTERN DC_ResetDataField METHOD SetFieldObject( oField ) METHOD SetData() EXTERN DC_SetData METHOD GetData() EXTERN DC_GetData METHOD SetReadOnly( Value ) METHOD Lock() INLINE ::lReadOnly := .T. METHOD UnLock() INLINE ::lReadOnly := ! ::lEditable METHOD Free() INLINE ( ::SetDataSet( , .T. ), ::Super:Free() ) ENDCLASS //-------------------------------------------------------------------------- METHOD Refresh( lValue ) CLASS XDBMemoMod IF Valtype( ::oDataField ) == "O" .AND. ::oDataSet != Nil .AND. ! ::oDataSet:lOnEdit() ::Value := ::oDataField:Value ENDIF RETURN ::Super:Refresh( lValue ) //-------------------------------------------------------------------------- METHOD SetFieldObject( xField ) CLASS XDBMemoMod ::DCSetFieldObject( xField ) IF Valtype( ::FoDataField ) == "O" .AND. ::FoDataField:cType != "M" ::nMaxLength := ::FoDataField:nLen ENDIF RETURN Nil //-------------------------------------------------------------------------- METHOD SetReadOnly( Value ) CLASS XDBMemoMod IF ::oDataSet == Nil .OR. ! ::oDataSet:lOnEdit() Value := .T. ENDIF RETURN ::Super:SetReadOnly( Value ) //-------------------------------------------------------------------------- METHOD Change() CLASS XDBMemoMod ::Super:Change() IF ::oDataSet:lOnEdit() .And. Valtype( ::oDataField ) == "O" ::oDataField:SetValue( ::Value, .T. ) ENDIF RETURN Nil //--------------------------------------------------------------------------