/* * DbMaskEdit.prg * Clase TDbEditMod() * * Copyright 2020 Ignacio Ortiz de Zúñiga * Copyright 2020 https://Xailer.com * All rights reserved * */ #include "Xailer.ch" //-------------------------------------------------------------------------- CLASS XDbEditMod FROM TEditMod 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( lRedraw ) // --> 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( lRedraw ) CLASS XDbEditMod IF Valtype( ::oDataField ) == "O" .AND. ::oDataSet != Nil .AND. ! ::oDataSet:lOnEdit() ::Value := ::oDataField:Value ENDIF RETURN ::Super:Refresh( lRedraw ) //-------------------------------------------------------------------------- METHOD SetFieldObject( xField ) CLASS XDBEditMod ::DCSetFieldObject( xField ) IF Valtype( ::FoDataField ) == "O" ::nMaxLength := ::FoDataField:nLen ENDIF RETURN Nil //-------------------------------------------------------------------------- METHOD SetReadOnly( Value ) CLASS XDbEditMod IF ::oDataSet == Nil .OR. ( ::oDataSet != Nil .AND. ! ::oDataSet:lOnEdit() ) Value := .T. ENDIF RETURN ::Super:SetReadOnly( Value ) //-------------------------------------------------------------------------- METHOD Change() CLASS XDBEditMod ::Super:Change() IF ::oDataSet != Nil .AND. ::oDataSet:lOnEdit() .AND. Valtype( ::oDataField ) == "O" ::oDataField:SetValue( ::Value, .T. ) ENDIF RETURN Nil //--------------------------------------------------------------------------