/* * DBCardBox.prg * Control DBCardBox * * Copyright 2020 Ignacio Ortiz de Zúñiga * Copyright 2020 https://Xailer.com * All rights reserved * */ #include "Xailer.ch" #include "Dataset.ch" //------------------------------------------------------------------------------ CLASS XDBCardBox FROM TCardBox PUBLISHED: PROPERTY oDataSet WRITE METHOD SetDataSet AS TDataSet EDITOR PE_Component PUBLIC: METHOD Create( oParent ) METHOD Free() METHOD InsertItem( nItem ) INLINE ::CreateItem( nItem ) METHOD RecCount() INLINE IIF( ::oDataSet != NIL, ::oDataSet:RecCount(), 0 ) RESERVED: DATA cOrgFilter // Para evitar RTE al hacer Close de su dataset METHOD SetDataSet( Value ) METHOD DSNavigate( nOp, Param1, Param2 ) METHOD Paint( hDC ) // --> NIL METHOD BeforeCardPaint( oSender, nIndex ) METHOD SetIndex( Value ) METHOD DrawLine() INLINE ::Refresh() METHOD aCols() INLINE ::aItems() METHOD CreateItem( nItem ) INLINE TDbCardItem():Create( Self, nItem ) METHOD OrderOff() VIRTUAL PROTECTED: PROPERTY aData INIT {} PROPERTY nIndex INIT 1 END CLASS //------------------------------------------------------------------------------ METHOD Create( oParent ) CLASS XDBCardBox ::Super:Create( oParent ) IF ! Empty( ::FoDataSet ) ::SetDataSet( ::FoDataSet ) ENDIF RETURN Self //------------------------------------------------------------------------------ METHOD Free() CLASS XDBCardBox IF ::oDataSet != Nil ::SetDataSet( Nil ) ENDIF RETURN ::Super:Free() //------------------------------------------------------------------------------ METHOD SetDataSet( oDataSet ) CLASS XDBCardBox LOCAL oItem AS CLASS TDBCardItem IF ::FoDataSet != Nil ::FoDataSet:oDbBrowse := Nil ::OnBeforeCardPaint := NIL FOR EACH oItem IN ::aItems WITH OBJECT oItem IF Valtype( :oDataField ) == "O" :oDataField := :oDataField:cName ENDIF END WITH NEXT ENDIF ::FoDataSet := oDataSet IF oDataSet != Nil ::OnBeforeCardPaint := "BeforeCardPaint" ::FoDataSet:oDBBrowse := Self IF oDataSet:lOpen FOR EACH oItem IN ::aItems WITH OBJECT oItem IF Valtype( :oDataField ) == "C" :SetFieldObject( :oDataField ) ENDIF END WITH NEXT ENDIF ENDIF RETURN ::FoDataset //------------------------------------------------------------------------------ METHOD DSNavigate( nOp, Param1, Param2 ) CLASS XDBCardBox IF ::oLabelEx != NIL .AND. ::oLabelEx:lVisible ::oLabelEx:lVisible := .F. ENDIF SWITCH nOp CASE XA_DSNAV_GOTOP ::nIndex := 1 EXIT CASE XA_DSNAV_GOBOTTOM ::nIndex := ::RecCount() EXIT CASE XA_DSNAV_SKIP ::nIndex += Param1 EXIT CASE XA_DSNAV_SEEK CASE XA_DSNAV_LOCATE CASE XA_DSNAV_CONTINUE CASE XA_DSNAV_EDIT CASE XA_DSNAV_REFRESHCURRENT CASE XA_DSNAV_REFRESH ::Refresh() EXIT CASE XA_DSNAV_ADDNEW CASE XA_DSNAV_DELETE CASE XA_DSNAV_FULLREFRESH CASE XA_DSNAV_OTHER ::CalcHeight( .T. ) EXIT END SWITCH RETURN Nil //------------------------------------------------------------------------------ METHOD Paint( hDC ) CLASS XDBCardBox LOCAL nRec IF ::oDataSet != Nil WITH OBJECT ::oDataSet nRec := :Recno ::Super:Paint( hDC ) :GoTo( nRec, .F. ) END WITH ELSE ::Super:Paint( hDC ) ENDIF RETURN NIL //------------------------------------------------------------------------------ METHOD BeforeCardPaint( oSender, nIndex ) CLASS XDBCardBox ::oDataSet:GoTo( nIndex, .F. ) RETURN NIL //------------------------------------------------------------------------------ METHOD SetIndex( Value ) CLASS XDBCardBox ::oDataSet:GoTo( Value ) RETURN ::Super:SetIndex( Value )