// Por: Enrique Guerra (Quique)// email: quique@quiquesoft.com#INCLUDE "fivewin.ch"CLASS qComBrowse
from tComboBox
data aColSizes, aHeaders, cField, uValue1, uValue2, cAlias, aActions
data aFields
// campos a mostrar en el browse data bFieldGet
// campo que se selecciona data cIndice
// índice que tiene el archivo ::cAlias para recuperarlo en caso de que se cambie durante el browse data oBrw
// referencia al browse data oDBF
// se utiliza si el browse se hace a un objeto TARRAY u otro para DBFs DATA lBrowse
init .f.
//protected // indica si el browse está activo data lSet
init .f.
//protected // para evitar la recursividad en SET data nBrwLeft
init 0 // posición izquierda del browse data nBrwWidth
// ancho del browse METHOD new( nRow, nCol, bSetGet, cAlias, nWidth, nHeight, oWnd, nHelpId, bChange, ;
bValid, nClrText, nClrBack, lPixel, oFont, cMsg, lUpdate, bWhen, lDesign, ;
acBitmaps, bDrawItem, nStyle, cPict, bEChange, aFields, bFieldGet
) ;
CONSTRUCTOR
METHOD reDefine( nId, bSetGet, cAlias, oWnd, nHelpId, bValid, bChange, nClrText, ;
nClrBack, cMsg, lUpdate, bWhen, acBitmaps, bDrawItem, nStyle, cPict, bEChange, ;
aFields, bFieldGet
) CONSTRUCTOR
METHOD lButtonDown
( nRow, nCol, nKeyFlags
) METHOD keyDown
( nKey, nFlags
) message set
method _set
( xNewItem
) method closeBrowse
()ENDCLASS//-------------------------------------------------------------------------------------METHOD new( nRow, nCol, bSetGet, cAlias, nWidth, nHeight, oWnd, nHelpId, bChange, ;
bValid, nClrText, nClrBack, lPixel, oFont, cMsg, lUpdate, bWhen, lDesign, ;
acBitmaps, bDrawItem, nStyle, cPict, bEChange, aFields, bFieldGet
) ;
class qComBrowse
::
aFields := aFields
::
bFieldGet := bFieldGet
IF valType
( cAlias
) =
"O" ::
oDBF := cAlias
::
cAlias :=
if( ::
oDBF:
classname() ==
"TARRAY",
"ARRAY", ::
oDBF:
cAlias ) elseIf cAlias ==
nil ::
cAlias :=
alias() else ::
cAlias := cAlias
ENDIF super:
new( nRow, nCol, bSetGet, , nWidth,
0, oWnd, nHelpId,, bValid, ;
nClrText, nClrBack, lPixel, oFont, cMsg, lUpdate, bWhen, lDesign, acBitmaps, ;
bDrawItem, nStyle, cPict, bEChange
)// IF ::oGet <> nil// ::oGet:bValid := bValid// ENDIF ::
set( eval
( bSetGet
) ) ::
bChange := bChange
RETURN self//-------------------------------------------------------------------------------------METHOD reDefine( nId, bSetGet, cAlias, oWnd, nHelpId, bValid, bChange, nClrText, ;
nClrBack, cMsg, lUpdate, bWhen, acBitmaps, bDrawItem, nStyle, cPict, bEChange, ;
aFields, bFieldGet
) class qComBrowse
::
aFields := aFields
::
bFieldGet := bFieldGet
IF valType
(cAlias
) =
"O" ::
oDBF := cAlias
::
cAlias :=
if( ::
oDBF:
classname() =
"TARRAY",
"ARRAY", ::
oDBF:
cAlias ) else ::
cAlias := cAlias
ENDIF super:
reDefine( nId, bSetGet, , oWnd, nHelpId, bValid,, nClrText, nClrBack, ;
cMsg, lUpdate, bWhen, acBitmaps, bDrawItem, nStyle, cPict, bEChange
)// ::oGet:bValid := bValid ::
set( eval
( bSetGet
) ) ::
bChange := bChange
return self//-------------------------------------------------------------------------------------METHOD lButtonDown
( nRow, nCol, nKeyFlags
) class qComBrowse
local nFieldSay, bLine, bValid := ::
bValidlocal oDlg, this :=
self, aCor
IF ::
bLClicked =
nil .OR. Eval
( ::
bLClicked, nRow, nCol, nKeyFlags,
self ) IF !::
lBrowse ::
setFocus() ::
lBrowse := .t.
::
bValid :=
nil// ::oGet:bValid := nil DEFINE DIALOG oDlg
STYLE nOR
( WS_VISIBLE, WS_POPUP
) OF ::
oWnd ::
oBrw := tWBrowse
():
new( , , , , ::
aFields, ::
aHeaders, ;
::
aColSizes, oDlg, ::
cField, ::
uValue1, ::
uValue2,, ;
{ || ::
set(), ::
closeBrowse() }, ::
bRClicked, ::
oFont, ::
oCursor, ;
::
nClrText, ::
nClrPane, ::
cMsg, .F., ::
cAlias, .t.,, .F.,, ::
bLClicked, ;
::
aActions/*, ::bSeek, ::lSeekEOF*/ ) IF ::
oDBF <>
nil if ::
oDBF:
classname() =
"TARRAY" ::
oBrw:
setArray( ::
oDBF:
aDatos ) ::
oBrw:
bLine := ::
aFields endIf ::
oBrw:
bGotop :=
{ || ::
oDBF:
gotop() } ::
oBrw:
bGoBottom :=
{ || ::
oDBF:
goBottom() } ::
oBrw:
bSkip :=
{ | nSkip | ::
oDBF:
skip( nSkip
) } elseIf
( ::
cAlias )->
( indexOrd
() ) >
1 if ( ::
cAlias )->
( dbSeek
() ) ::
oBrw:
upStable() else ::
oBrw:
goTop() endIf ENDIF ::
oBrw:
bChange :=
{ || ::
set() } ::
oBrw:
oWnd:
bLostFocus :=
{ || ::
closeBrowse() } ::
oBrw:
bValid :=
{ || ::
bValid := bValid,
/*::oGet:bValid := bValid, */.t.
} IF( ::
cAlias <>
"ARRAY", ::
cIndice :=
( ::
cAlias )->
( ordSetFocus
() ) ,
) oDlg:
setControl( ::
oBrw ) activate dialog oDlg nomodal;
on init ( aCor := getWndRect
( this:
hWnd ), ;
oDlg:
Move( aCor
[ 1 ] +
20, aCor
[ 2 ] + this:
nBrwLeft,
if( this:
nBrwWidth =
nil, this:
nWidth, this:
nBrwWidth ), ;
min( 160, aCor
[ 1 ] + this:
oWnd:
nHeight - aCor
[ 1 ] -
39 ) ) ) ENDIFENDIFreturn .t.
//-------------------------------------------------------------------------------------METHOD keyDown
( nKey, nFlags
) class qComBrowse
if nKey=VK_DOWN
if ::
oDBF=
nil (::
cAlias)->
(dbSkip
()) IF(eof
(),dbGoBottom
(),
) else ::
oDBF:
skip() IF(::
oDBF:
eof(),::
oDBF:
goBottom(),
) endIf ::
set() ::
refresh()elseif nKey=VK_UP
if(::
oDBF=
nil,
(::
cAlias)->
(dbSkip
(-1)),::
oDBF:
skip(-1)) ::
set() ::
refresh()endIfreturn super:
keyDown( nKey, nFlags
)//-------------------------------------------------------------------------------------method _set
( xNewItem
) class qComBrowse
local bChange := ::
bChangeIF !::
lSet ::
lSet := .t.
::
bChange :=
nil IF empty
( xNewItem
) xNewItem := eval
( ::
bFieldGet ) ENDIF// IF ::oGet <> nil .AND. ::oGet:cPicture <> nil// xNewItem := transform( xNewItem, ::oGet:cPicture )// else xNewItem := cValToChar
( xNewItem
)// ENDIF if ::
nLeft ==
nil ::
nLeft :=
0 ::
nColPos :=
1 endIf ::
setItems( { xNewItem
} ) super:
set( xNewItem
) eval
( ::
bSetGet, xNewItem
) ::
bChange := bChange
::
nAt :=
0 ::
change() ::
lSet := .f.
ENDIFreturn nil//-------------------------------------------------------------------------------------method closeBrowse
() class qComBrowse
::
oBrw:
oWnd:
bLostFocus :=
nil ::
oBrw:
hide() ::
oBrw:
oWnd:
end() IF( ::
cAlias <>
"ARRAY",
( ::
cAlias )->
( ordSetFocus
( ::
cIndice ) ),
) ::
lBrowse := .f.
return nil