rebol [
    Title:      "Progress Bar With Read-thru"
    Date:       17-May-2006
    Name:     'progress-bar-with-read-thru
    Version:  0.1.0
    File:         %progress-bar-with-read-thru.r
    Author:   "R.v.d.Zee"
    Owner:    "R.v.d.Zee"
    Rights:    {Copyright (C) R.v.d.Zee 2006}
    Tabs:      4
Purpose: {
    "Progress Bar With Read-thru" was written to provide  a simple  progress bar script to the REBOL library.  When using REBOL's internal read-thru function, only 5 lines are required to update a progress bar - see note 2. "Read-thru"  is used to download a file to the disk cache - and to provide the data to move the progress bar.  
    
    The method used to retrieve the downloaded file from the disk cache is also illustrated. 
    }
    
     Notes: {
     
     1.  Missing Faces.  Without "face/para/scroll: 0x0", the button faces scroll out of sight when the slider dragger was moved. (may not always be needed)
     
     2.  Monitor Download.  These 5 lines show how to update the progress bar.
     
     3.  Recover Download.  How to retrieve the downloaded file from the disk cache.
     
     4.  Refrence/Credit 
             http://www.Codeconscious.com
	     - recovery of the downloaded file from the disk cache
	     
	      Jipe, CoDeuR.OrG   "Progress-bar qui fait pro"  
	      - updating the progress bar 
    }
    library: [
        level: 'beginner
        platform: 'all
        type: [tutorial how-to reference]
        domain: [user-interface]
        tested-under: 'linux
        support: none
        license: none
        see-also: none
    ]
]

fiveLines: {
    stop: false
    read-thru/progress/update theUrl func [total bytes][
        download-monitor/data: (bytes / total)
        show download-monitor
        not stop
    ]
}

theUrl: http://antwrp.gsfc.nasa.gov/apod/image/0605/iss2_sts114.jpg

progressBars: layout [
    size 540x430
    backcolor maroon
    across
    space 0
    seeImage: image 480x310 top left font-size 14 font-color gold
    seeImage-slider: slider 16x310 maroon olive [
        scroll-para seeImage seeImage-slider
	;------------------------------------------------------------------------------
	foreach face progressBars/pane [
            if face/style = 'buttons [face/para/scroll: 0x0]        ; Note 1
        ]
	;------------------------------------------------------------------------------
    ]
    return
    below
    credit: h3 300 silver
    space 3
    downLoad-monitor: progress maroon olive
    across
    space 0
    style buttons  button 67 maroon
    buttons "Download" [   
        either connected? [                                               
            hide  seeImage-slider
            home: what-dir                                                            
	    ;------------------------------------------------------------------------- 
            stop: false
            read-thru/progress/update theUrl func [total bytes][
                download-monitor/data: (bytes / total )             ; Note 2
                show download-monitor
                not stop
            ]
	    ;--------------------------------------------------------------------------
            change-dir home                                                      ; Note 3
            if not exists? %space-station.jpg [write/binary %space-station.jpg read-thru theUrl]
	    seeImage/image: load read-thru theUrl
	    ;--------------------------------------------------------------------------
            clear seeImage/text
	    seeImage/line-list: none
            show seeImage
	    downLoad-monitor/pane/size/x: 1
	    show downLoad-monitor
            credit/text: "International Space Station (NASA)"
            show credit
        ] [
            alert "No Internet!"
        ]  
    ]
    across
    space 0
    buttons "Script" [
        seeimage-slider/data: 0                   ;bring dragger to top of track
	show seeImage-slider
	seeImage/image: none
        clear seeImage/text
	seeImage/line-list: none
        seeImage/text: read %progress-bar-with-read-thru.r
	show seeImage
    ]
    space 200
    buttons "Copy" [
        hide seeImage-slider
        clear seeImage/text
        seeImage/line-list: none
        seeImage/image: none
        seeImage/text: copy fiveLines  
	show seeImage
	write clipboard:// seeImage/text
	]
 	
    image 140x25 logo.gif effect [colorize maroon]
    
]

seeImage-slider/show?: false

                                           view  progressBars