Page 1 of 1
dcbrowse autorefresh
Posted: Tue Jan 22, 2013 11:49 am
by bwolfsohn
Roger,
In the autorefresh clause of dcbrowse, is it possible to add an inactive nSeconds clause i.e. don't consider refreshing the browse unless there has been inactivity for nSeconds ?
Re: dcbrowse autorefresh
Posted: Tue Jan 22, 2013 1:40 pm
by rdonnay
I'm assuming you mean inactivity in the workstation in which the browse is displayed.
I think you can use the WHEN clause of AUTOREFRESH to do this and a variable that gets updated in a custom handler loop. I'll see if I can write a sample.
Re: dcbrowse autorefresh
Posted: Tue Jan 22, 2013 4:43 pm
by rdonnay
Here's the sample program:
Code: Select all
#INCLUDE "dcdialog.CH"
#INCLUDE "appevent.CH"
STATIC snLastUpdate := 0
FUNCTION Main()
LOCAL GetList[0], oBrowse, aDir, i
aDir := Directory()
@ 0,0 DCBROWSE oBrowse DATA aDir SIZE 100, 20 ;
AUTOREFRESH 1000 ;
REFRESHBLOCK {|o|UpdateDirectory(o)} ;
WHEN {||Seconds()-snLastUpdate < 15 }
DCBROWSECOL ELEMENT 1 HEADER 'File Name' WIDTH 10 PARENT oBrowse
DCBROWSECOL ELEMENT 2 HEADER 'File Size' WIDTH 10 PARENT oBrowse
DCBROWSECOL ELEMENT 3 HEADER 'File Date' WIDTH 10 PARENT oBrowse
DCBROWSECOL ELEMENT 4 HEADER 'File Time' WIDTH 10 PARENT oBrowse
DCREAD GUI FIT TITLE 'Browse Auto-Refresh Test' ;
HANDLER myHandler
RETURN nil
* -----------
STATIC FUNCTION myHandler( nEvent, mp1 )
IF nEvent == xbeM_Motion
snLastUpdate := Seconds()
ENDIF
RETURN DCGUI_NONE
* -----------
PROC appsys ; return
* -----------
STATIC FUNCTION UpdateDirectory( oBrowse )
wtf 'refreshing'
oBrowse:dataSource := Directory()
oBrowse:refresh()
RETURN nil
Re: dcbrowse autorefresh
Posted: Wed Jan 23, 2013 9:48 am
by bwolfsohn
Works great...
I made some changes to more easliy implement across all browses
Code: Select all
here's my autorefresh clause
AUTOREFRESH m->nBrowseRefresh WHEN {||myautorefresh() .AND. browse_not_active(snLastUpdate) }
my handler clause
HANDLER mybrowsehandler REFERENCE @snLastUpdate
**********************
function myautorefresh(aGetlist)
**********************
static slIsRefreshOn
IF slIsRefreshOn==nil
slIsRefreshOn:=.t.
ENDIF
IF !aGetlist==nil
slIsRefreshon:=!slIsRefreshOn
DC_GetObject(aGetList,'REFRESHBUTTON'):setcaption('Turn Autorefresh '+IIF( slIsRefreshOn,"Off" ,"On" ))
ENDIF
return(slIsRefreshOn)
************************
FUNCTION myBrowseHandler( nEvent, mp1)
************************
IF nEvent == xbeM_Motion .OR. nEvent == xbeP_Keyboard
snLastUpdate := Seconds()
ENDIF
RETURN DCGUI_NONE
**************************
function browse_not_active(snLastUpdate)
**************************
IF fexists('browsedebug.ovl')
wtf Seconds()-snLastUpdate
ENDIF
return(Seconds()-snLastUpdate > m->nBrowseRefresh/100 )
Re: dcbrowse autorefresh
Posted: Wed Jan 23, 2013 8:43 pm
by rdonnay
Excellent!!
