]> gitweb.factorcode.org Git - factor.git/blob - extra/progress-bars/models/models.factor
factor: trim more using lists.
[factor.git] / extra / progress-bars / models / models.factor
1 ! Copyright (C) 2011 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors calendar fonts io io.files io.files.info kernel
4 math models models.arrow namespaces progress-bars threads
5 ui.gadgets.labels ui.gadgets.panes ;
6 IN: progress-bars.models
7
8 SYMBOL: progress-bar
9
10 : set-progress-bar ( ratio/float -- )
11     \ progress-bar get set-model ;
12
13 : with-progress-bar ( quot -- )
14     [ 0 <model> \ progress-bar ] dip with-variable ; inline
15
16 : <progress-display> ( model n -- gadget )
17     [ '[ _ make-progress-bar ] <arrow> <label-control> ] keep
18     [ 0 ] dip make-progress-bar >>string
19     monospace-font >>font ;
20
21 SYMBOL: file-size
22
23 : update-file-progress ( -- n )
24     tell-input file-size get / [ set-progress-bar ] keep ;
25
26 : file-progress-loop ( -- )
27     update-file-progress 1 = [
28         100 milliseconds sleep file-progress-loop
29     ] unless ;
30
31 : with-file-reader-progress ( path encoding quot -- )
32     '[
33         _ dup file-info size>> file-size set
34         _ _ [
35             [ file-progress-loop ] "file-reader-progress" spawn drop
36             \ progress-bar get 40 <progress-display> gadget. yield
37         ] prepose
38         [ update-file-progress drop ] compose
39         with-file-reader
40     ] with-progress-bar ; inline