1 ! Copyright (C) 2008 Slava Pestov.
\r
2 ! See http://factorcode.org/license.txt for BSD license.
\r
3 USING: accessors models kernel sequences ;
\r
6 TUPLE: compose < model ;
\r
8 : new-compose ( models class -- compose )
\r
10 swap clone >>dependencies ; inline
\r
12 : <compose> ( models -- compose )
\r
13 compose new-compose ;
\r
15 : composed-value [ dependencies>> ] dip map ; inline
\r
17 : set-composed-value [ dependencies>> ] dip 2each ; inline
\r
19 M: compose model-changed
\r
21 [ [ value>> ] composed-value ] keep set-model ;
\r
23 M: compose model-activated dup model-changed ;
\r
25 M: compose update-model
\r
26 dup value>> swap [ set-model ] set-composed-value ;
\r
28 M: compose range-value
\r
29 [ range-value ] composed-value ;
\r
31 M: compose range-page-value
\r
32 [ range-page-value ] composed-value ;
\r
34 M: compose range-min-value
\r
35 [ range-min-value ] composed-value ;
\r
37 M: compose range-max-value
\r
38 [ range-max-value ] composed-value ;
\r
40 M: compose range-max-value*
\r
41 [ range-max-value* ] composed-value ;
\r
43 M: compose set-range-value
\r
44 [ clamp-value ] keep
\r
45 [ set-range-value ] set-composed-value ;
\r
47 M: compose set-range-page-value
\r
48 [ set-range-page-value ] set-composed-value ;
\r
50 M: compose set-range-min-value
\r
51 [ set-range-min-value ] set-composed-value ;
\r
53 M: compose set-range-max-value
\r
54 [ set-range-max-value ] set-composed-value ;
\r