1 ! Copyright (C) 2011 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors calendar fonts fry io io.files io.files.info
4 kernel math models models.arrow namespaces progress-bars
5 threads ui.gadgets.labels ui.gadgets.panes ;
6 IN: progress-bars.models
10 : set-progress-bar ( ratio/float -- )
11 \ progress-bar get set-model ;
13 : with-progress-bar ( quot -- )
14 [ 0 <model> \ progress-bar ] dip with-variable ; inline
18 : update-file-progress ( -- n )
19 tell-input file-size get / [ set-progress-bar ] keep ;
21 : file-progress-loop ( -- )
22 update-file-progress 1 = [
23 100 milliseconds sleep file-progress-loop
26 : <file-progress-display> ( model n -- gadget )
27 [ '[ _ make-progress-bar ] <arrow> <label-control> ] keep
28 [ 0 ] dip make-progress-bar >>string
29 monospace-font >>font ;
31 : with-file-reader-progress ( path encoding quot -- )
33 _ dup file-info size>> file-size set
35 [ file-progress-loop ] "file-reader-progress" spawn drop
36 \ progress-bar get 40 <file-progress-display> gadget. yield
38 [ update-file-progress drop ] compose
40 ] with-progress-bar ; inline